var ajaxXmlHttp = new Array();
var ajaxXmlDoc = new Array();
var ajaxNotSupported = false;
var ajaxRequested = false;

function ajaxRequestFunction(name, fn, url, request_once, value, fn2, params2)
{
	if (!ajaxXmlHttp[name] && !ajaxNotSupported)
	{	//Try to create the objects only once.
		try
		{	// Firefox, Opera 8.0+, Safari
			ajaxXmlHttp[name]=new XMLHttpRequest();
		}
		catch (e)
		{	// Internet Explorer
			try
			{
				ajaxXmlHttp[name]=new ActiveXObject("Msxml2.XMLHTTP");
			}
			catch (e)
			{
				try
				{
					ajaxXmlHttp[name]=new ActiveXObject("Microsoft.XMLHTTP");
				}
				catch (e)
				{
					ajaxNotSupported = true;
					return false;
				}
			}
		}
	}
	
	if (!ajaxNotSupported)
	{	//If ajax is supported, then do the rest.
		ajaxXmlHttp[name].onreadystatechange=function(){fn(name, fn2, params2);};
		if (request_once && !ajaxRequested || !request_once)
		{	//If request_once is true, then request url only once.
			ajaxXmlHttp[name].open("GET", url, true);
			ajaxXmlHttp[name].send(null);
			ajaxRequested = true;
		}
	}
}


function ajaxStateChangedRequestOnce(name, fn, params)
{
	if((ajaxXmlHttp[name].readyState==4 || ajaxXmlHttp[name].readyState=="complete") && ajaxXmlHttp[name].status==200 && !ajaxXmlDoc[name])
	{	//Download XML only once. Parse/Output in some other function.
		ajaxXmlDoc[name] = ajaxXmlHttp[name].responseXML;
		if (fn != null)
		{
			var params_string = '';
			for (var i=0; i<params.length; i++)
			{
				params_string += '"'+params[i]+'",';
			}
			params_string = params_string.substr(0, params_string.length - 1);
			setTimeout(fn+'('+params_string+')', 1);
		}
	}
}
