function reportFailureHandler(resp)
{
 alert('Error retrieving report');
}

function getAttributeWithDefault(el,attrName,def)
{
	var attr = $(el).attributes[attrName];
	if( attr == null )
	{
		return def;
	}
	
	return attr.value;
}

function setAttribute(el,attrName,value)
{
	var attr = $(el).attributes[attrName];
	if( attr != null )
	{
		attr.value = value;
	}
}


function showReport( elementId, pageIndex, sort )
{
	if( pageIndex == null || pageIndex == '')
	{
		pageIndex = 0;
	}

	var reportDiv = $(elementId);
	var url = getAttributeWithDefault(reportDiv,'url',null);
	if( sort == null )
	{
		sort = getAttributeWithDefault(reportDiv,'sort','');
	}
	setAttribute( reportDiv, "sort", sort );
	
	
	if( url == null )
	{
		var report = getAttributeWithDefault(reportDiv,'report',null);
		var view = getAttributeWithDefault(reportDiv,'view',null);
		var action = getAttributeWithDefault(reportDiv,'action','report');
		url = action + ".do?name=" + report + "&view=" + view + "&pageIndex=" + pageIndex;
		url += "&sort=" + sort;
	}
	else
	{
		url = url + "&pageIndex=" + pageIndex;
		
		var view = getAttributeWithDefault(reportDiv,'view',null);
		if( view != null && url.indexOf("&view=") < 0 && url.indexOf("?view=") < 0 )
		{
			url += "&view=" + view;
		}

		url += "&sort=" + sort;
	}
	
	var ajax = getAttributeWithDefault(reportDiv,'ajax',null);
	
		
	if( ajax != null && ajax == "true" )
	{
		toggleSpinners( true );
	
		new Ajax.Request(url,
			{
				method : 'get',
				onSuccess : function(transport){
							reportDiv.innerHTML=transport.responseText;
							toggleSpinners(false);
							updateSortHeaders(reportDiv);
							},
				onFailure : reportFailureHandler,
				requestHeaders:['isAjax','true']
			}
		);
	}
	else
	{
		document.location =	url;
	}
}

function updateSortHeadersByElementId( reportDivId )
{
	updateSortHeaders( $(reportDivId) );
}

function updateSortHeaders( reportDiv )
{
  var item = "";
	var descending = false;

	var sort = getAttributeWithDefault(reportDiv,"sort",null);
	if( sort != null )
	{
		var items = sort.split(":");
		for( var i = 0; i < items.length; i++ )
		{
		  item = items[i];
		  if( item.charAt(item.length -1) == '-' )
		  {
		  	descending = true;
		  	item = item.substr(0,item.length -1);
		  }
		  break;
		}
	}

  var thArray = $(reportDiv).getElementsBySelector('th');
  for( var i = 0; i < thArray.length; i++ )
  {
  	var th = thArray[i];
  	var sortName = getAttributeWithDefault( th, 'sortName', null );
  	if( sortName == null )
  	{
  		continue;
  	}
  	

	  var headHtml = th.innerHTML;
	  var imgIndex = headHtml.indexOf("<img");
		if( imgIndex > - 1 )
		{
			headHtml = headHtml.substr(0,imgIndex);
		}
	  
  	if( sortName.toUpperCase() == item.toUpperCase() )
  	{
				if( descending )
				{
					headHtml += "<img src='images/sort-desc.gif'/>";
				}		  
				else
				{
					headHtml += "<img src='images/sort-asc.gif'/>";
				}
  	}

  	th.innerHTML = headHtml;
  }
  
}


function gotoPage(el,pageIndex)
{
	var reportDiv;
	$(el).ancestors().each(
		function(s){
			if( reportDiv == null && s.attributes['report'] != null )
			{
				reportDiv = s;
			}
		}
	);

  if( reportDiv == null )
  {
    alert( "Could not find containing report div" );
  }
  else
  {
		showReport(reportDiv.id,pageIndex,null);
  }
}

function sort(el)
{
	var columnName = getAttributeWithDefault($(el),'sortName',null);

	var reportDiv;
	$(el).ancestors().each(
		function(s){
			if( reportDiv == null && s.attributes['report'] != null )
			{
				reportDiv = s;
			}
		}
	);

  if( reportDiv == null )
  {
    alert( "Could not find containing report div" );
  }
  else
  {
  	var sort = getAttributeWithDefault(reportDiv,'sort','');
  	sort = updateSort( sort, columnName );
		showReport(reportDiv.id,0,sort);
  }
}

function updateSort(oldSort,clickedColumnName)
{
	var newSort = new Array();
	var index = 0;
	newSort[index++] = clickedColumnName;
	
	var items = oldSort.split(":");
	for( var i = 0; i < items.length; i++ )
	{
	  var origItem = items[i];
	  if( origItem == "" )
	  {
	  	continue;
	  }
	  var item = origItem;
	  var descending = false;
	  if( item.charAt(item.length -1) == '-' )
	  {
	  	descending = true;
	  	item = item.substr(0,item.length -1);
	  }
	  
		if( item.toUpperCase() == clickedColumnName.toUpperCase() )
		{
			if( ( i==0 && !descending ) || ( i>0 && descending) )
			{
				newSort[0] += "-";
			}
		}
		else
		{
			newSort[index++] = origItem;
		}
	}
	
	var stringRep = "";
	for( var i = 0; i < newSort.length; i++ )
	{
		if( i > 0 )
		{
			stringRep += ":";
		}
		stringRep += newSort[i];
	}
	
	return stringRep;
}

function toggleSpinners(on)
{
	var needCallback = false;
	var i = 1;
	while( true )
	{
		var el = $("reportSpinner"+i);
		if( el == null )
		{
			break;
		}
		
		if( on )
		{
      el.style.display = "";
		}
		else
		{
			el.style.display = "none";
		}
				
		i++;
	}
	
	
}
// to handle the login lightbox free trial link.
// later may be transferred to COM code

function startMe(url){
 document.location = url;
}
