function flag(vImage, sTargetID, sCallbackMethod)
{	
	var vDiv = $('FlagHolder');
	if(!vDiv) return;
	
	var sCallbackParam = '';
	if(sCallbackMethod && sCallbackMethod.length>0) sCallbackParam = '&callmethod=' + sCallbackMethod;
	
	new Ajax.Request('ajaxGetFlags?OpenAction',
    {
        method:'post',
        parameters: '&selected=' + vImage.src + '&targetid='+sTargetID + sCallbackParam,
        onSuccess: function(transport)
        {
        	var vImgPos = findPos(vImage);        	
        	//alert('vImgPos=' + vImgPos[0] + ' ' + vImgPos[1] + '\r\n' + 'vDivPos=' + vDivPos[0] + ' ' + vDivPos[1]);
        	
        	vDiv.style.left = (vImgPos[0] + vImage.offsetWidth + 1) + 'px';
        	vDiv.style.top = vImgPos[1] + 'px';
        	
        	vDiv.show();
            var response = transport.responseText;    
            vDiv.innerHTML = response;            
        },
        onFailure: function(){ alert('flag failed') }
    });
	
}

function findPos(obj) 
{
	var curleft = curtop = 0;
	if (obj.offsetParent) 
	{
		do 
		{
			curleft += obj.offsetLeft;
			curtop += obj.offsetTop;
		} while (obj = obj.offsetParent);
	}
	return [curleft,curtop];	
}

function hideFlagWindow()
{
	var vDiv = $('FlagHolder');
	if(!vDiv) return;
	vDiv.hide();
}

function setFlag(sTargetID, iIconNumber)
{
	hideFlagWindow();
	var vDisplayImage = $('icn_'+sTargetID);
	if(vDisplayImage) vDisplayImage.src = 'icn_'+iIconNumber+'.png';
	
	var vField = $('fld_'+sTargetID);
	if(vField) jsSetFieldValue(vField, iIconNumber);
}

function flagCategory(sCategoryID, iIconNumber)
{
	setFlag(sCategoryID, iIconNumber);
	
	new Ajax.Request('ajaxSetFlag?OpenAction',
    {
        method:'post',
        parameters: '&what=datacategory&id=' + sCategoryID + '&FlagIcon='+iIconNumber,
        onSuccess: function(transport)
        {
        	//do nothing          
        },
        onFailure: function(){ alert('flag set failed') }
    });
}

function flagGroup(sReportGroupID, iIconNumber)
{
	setFlag(sReportGroupID, iIconNumber);
	
	new Ajax.Request('ajaxSetFlag?OpenAction',
    {
        method:'post',
        parameters: '&what=reportgroup&id=' + sReportGroupID + '&FlagIcon='+iIconNumber,
        onSuccess: function(transport)
        {
        	//do nothing          
        },
        onFailure: function(){ alert('flag set failed') }
    });
}

function flagItem(sReportGroupItemID, iIconNumber)
{
	setFlag(sReportGroupItemID, iIconNumber);
	
	new Ajax.Request('ajaxSetFlag?OpenAction',
    {
        method:'post',
        parameters: '&what=reportgroupitem&id=' + sReportGroupItemID + '&FlagIcon='+iIconNumber,
        onSuccess: function(transport)
        {
        	//do nothing          
        },
        onFailure: function(){ alert('flag set failed') }
    });
}

function flagAccount(sAccountID, iIconNumber)
{
	setFlag(sAccountID, iIconNumber);
	
	new Ajax.Request('ajaxSetFlag?OpenAction',
    {
        method:'post',
        parameters: '&what=account&id=' + sAccountID + '&FlagIcon='+iIconNumber,
        onSuccess: function(transport)
        {
        	//do nothing          
        },
        onFailure: function(){ alert('flag set failed') }
    });
}