
// Ajax functions
// -----------------------------------------------------------------------------

var AjaxObject = null;
var AjaxCall = null;
var AjaxCall_stack = 0;

function Ajax_initialize ()
{   
	if (window.ActiveXObject)        
		AjaxObject = new ActiveXObject("Microsoft.XMLHTTP");   
	else if (window.XMLHttpRequest)        
		AjaxObject = new XMLHttpRequest();
	else
		return false;
		
	return true;
}

function Ajax_add_call_not_buffered (url, Ajax_response_handler)
{
	var e = {url: url, handler: Ajax_response_handler, next: null};
	
	if (!AjaxCall)
	{
		AjaxCall = e;
		return true;
	}
	else
	{
		var Last_AjaxCall = AjaxCall;
		while (Last_AjaxCall.next)
		{
			Last_AjaxCall = Last_AjaxCall.next;
		}
		Last_AjaxCall.next = e;
	}
		
	return false;
}

function Ajax_call (url, Ajax_response_handler)
{
	AjaxCall_stack += 1;
	
	if ( Ajax_add_call_not_buffered (url, Ajax_response_handler) )
	{	
		Ajax_call_process (url, Ajax_response_handler);
	}
}

function Ajax_call_process (url, Ajax_response_handler)
{
	AjaxObject.open("GET", url, true);		 
	AjaxObject.onreadystatechange = Ajax_response_handler;
	AjaxObject.send(null);
}

function Ajax_ready ()
{
	return AjaxObject.readyState == 4;
}

function Ajax_response ()
{
	var output = AjaxObject.responseText;
	AjaxCall_stack -= 1;
	if (AjaxCall)
	{
		AjaxCall = AjaxCall.next;
		if (AjaxCall)
		{
			Ajax_call_process (AjaxCall.url, AjaxCall.handler);
		}
	}

	return output;
}

function Ajax_void_response_handler ()
{ 
	if ( ! Ajax_ready () )
		return;
	
	var stream = Ajax_response ();
}

