var ajaxObj = new Array();

/**
 * asyncPostbackHandler : This is the main function that handles the response from the server. 
 * Then it calls the specified function with respect to control and event values.
 *
 */
// Todo: No error handling yet, when scripts die in server-side.
// Todo: No simultaneous requests.
function asyncPostbackHandler()
{
	// if(control == "tracker" && tFlag == false) {return false;}
	
	for(var i=0; i<ajaxObj.length; i++)
    {
		if(ajaxObj[i] && ajaxObj[i][0] && ajaxObj[i][0].readyState == 4 && ajaxObj[i][0].status == 200)
		{
			// Temp. end loading
			if(getRawObject("information_panel_1")) { getRawObject("information_panel_1").style.display = "none"; }
			
			var event = ajaxObj[i][3];
			var control = ajaxObj[i][2];
			var response = ajaxObj[i][0].responseText;
			var url = ajaxObj[i][1];
			
			ajaxObj[i][0] = null;
			ajaxObj[i][1] = null;
			ajaxObj[i][2] = null;
			ajaxObj[i][3] = null;
			ajaxObj[i] = null;
			
			/* Handler Functions @ *.WebControls.js */
			eval(control + "_Handler(event,response)");
			
		}
		else if(ajaxObj[i] && ajaxObj[i][0])
		{
			// Temp. start loading
			if(getRawObject("information_panel_1")) { getRawObject("information_panel_1").style.display = "block"; }
		}
	}
}

/**
 * asyncPostback : 
 *
 * @param {string} url - requested url
 * @param {string} control - control id
 * @param {string} event - control event
 * @param {string} params - control related parameters
 */
// Todo: Currently only works with POST method, GET may (most probably) be required.
function asyncPostback(url,control,event,params)
{
	if(control == "tracker" && tFlag == false) {return false;}
	
	var myurl = url;
	
	var myparams = "control=" + control + "&event=" + event + params;
	
	var idx = ajaxObj.length;
	
	// alert(myparams);
	// One request at a time

	ajaxObj[idx] = new Array(4);
	
	ajaxObj[idx][0] = getXMLHTTPObject();
	ajaxObj[idx][1] = url;
	ajaxObj[idx][2] = control;
	ajaxObj[idx][3] = event;
	
	if(ajaxObj[idx])
	{
		ajaxObj[idx][0].open("POST", myurl, true);
		ajaxObj[idx][0].setRequestHeader("Content-type", "application/x-www-form-urlencoded;charset=utf-8");
		ajaxObj[idx][0].setRequestHeader("Content-length", myparams.length);
		ajaxObj[idx][0].setRequestHeader("Connection", "close");
		
		ajaxObj[idx][0].onreadystatechange = asyncPostbackHandler;
		ajaxObj[idx][0].send(myparams);
	}

}

/**
 * getXMLHTTPObject : Creates an xmlhttp object
 *
 */
function getXMLHTTPObject() 
{
	var xmlhttp;
	
	if(window.XMLHttpRequest)
	{
		xmlhttp = new XMLHttpRequest();
	}
	else if(window.ActiveXObject) 
	{
		try 
		{
			xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
		} 
		catch(e) 
		{
			try 
			{
				xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
			} 
			catch(e) 
			{
				xmlhttp = false;
			}
		}
	}
	return xmlhttp;
}
