var hourGlassIcon;
function GetXmlHttpObject()
{
	var xmlHttp=null;
	try
	{
		// Firefox, Opera 8.0+, Safari
		xmlHttp=new XMLHttpRequest();
	}
	catch (e)
	{
		// Internet Explorer
		try
		{
			xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch (e)
		{
			xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
		}
	}
	return xmlHttp;
}

function GetAjaxData(url,destId,func,funcpar,hourGlassPositionElt)
{
	if (url.length==0)
	{ 
		document.getElementById(id).innerHTML="";
		return;
	}
	var xmlHttp=GetXmlHttpObject()
	if (xmlHttp==null)
	{
		alert ("Your browser does not support AJAX!");
		return;
	}
	var elt = destId != "" ? document.getElementById(destId) : null;
	var positionElt = hourGlassPositionElt != null ? document.getElementById(hourGlassPositionElt) : elt;
	var hourGlass = positionElt ? CreateHourGlass(document.body,positionElt) : null;
	xmlHttp.onreadystatechange=function()
	{
		if (xmlHttp.readyState==4)
		{
			var elt = destId != "" ? document.getElementById(destId) : null;
			if (elt != null) 
				elt.innerHTML=xmlHttp.responseText;
			if (hourGlass != null) document.body.removeChild(hourGlass);			
			if (func != null)
			{
				func(xmlHttp.responseText,funcpar);
			}
			else
			{
				try
				{
					eval('Init' + destId + '('+funcpar+')');
				}
				catch (e)
				{
				}
			}
		}
	}
	try
	{
		xmlHttp.open("GET",url+"&rid="+Math.random(),true);
		xmlHttp.send(null);
	}
	catch (e)
	{
		alert(e.description);
	}
}

function CreateHourGlass(parentElt,positionElt)
{
	if (!positionElt) 
		positionElt = parentElt;
	var x = getElementLeft(positionElt) + Math.floor(getElementWidth(positionElt)/2);
	var y = getElementTop(positionElt) + Math.floor(getElementHeight(positionElt)/2);
	var hourglass = document.createElement("img");
	parentElt.appendChild(hourglass);
	if (!hourGlassIcon)
	{
		hourGlassIcon = "../loading1.gif";
	}
	hourglass.setAttribute("src", hourGlassIcon);
	hourglass.style.position="absolute";
	hourglass.style.zIndex=1;
	hourglass.style.left=x+"px";
	hourglass.style.top=y+"px";
	return hourglass;
}

function LogEvent()
{
	var referrer = (document.referrer ? escape(document.referrer) : "");
	var location = (window.location.pathname? escape(window.location.pathname) : "");
	GetAjaxData("/computing/eventlogger.pl?query=" + location + "&referrer=" + referrer)
}

//progress counter
function OnUpdateProgress(responseText,data)
{
	if (responseText == "COMPLETED")
	{
		return;
	}
	else if (responseText != "")
	{
		var counts = responseText.split("\t");
		var string = counts[1] != 0 ? Math.round(counts[0]/counts[1]*100) + "%" : counts[0];
		document.getElementById(data.id).innerHTML = string + " <input type=\"button\" value=\"Cancel\" onclick=\"InterruptProgress(\'"+data.progressid+"\')\">";
	}
	window.setTimeout("UpdateProgress(\""+data.id+"\",\""+data.progressid+"\")", 1000);
}
function UpdateProgress(id,progressid)
{
	var data = new Object();
	data.id=id;
	data.progressid=progressid;
	GetAjaxData("/cgi-bin/progressmon.pl?progressid=" + progressid,null,OnUpdateProgress,data);
}
function RegisterProgress(id)
{
	var xmlHttp=GetXmlHttpObject()
	if (xmlHttp==null)
	{
		//alert ("Your browser does not support AJAX!");
		return;
	}
	xmlHttp.open("GET","/cgi-bin/progressmon.pl?register=1&rid="+Math.random(),false);
	xmlHttp.send(null);
	setCookie("progressid", xmlHttp.responseText, null, "/"); //so that you can tell server to use counter stuff
	UpdateProgress(id,xmlHttp.responseText);
}
function InterruptProgress(progressid)
{
	GetAjaxData("/cgi-bin/progressmon.pl?end=1&progressid=" + progressid);
}


