var requester=new Array();

function InitAjax(reqctr)
{
	if ((requester[reqctr] != null) && (requester[reqctr].readyState != 0) && (requester[reqctr].readyState != 4))
	{
		requester[reqctr].abort();
		requester[reqctr]=null;
	}

	try
	{
		// Try to create object for Firefox, Safari, IE7, etc.
		this.requester[reqctr] = new XMLHttpRequest();
	}

	catch (e)
	{
		try
		{
			// Try to create object for later versions of IE.
			this.requester[reqctr] = new ActiveXObject('MSXML2.XMLHTTP');
		}

		catch (e)
		{
			try
			{
				// Try to create object for early versions of IE.
				this.requester[reqctr] = new ActiveXObject('Microsoft.XMLHTTP');
			}

			catch (e)
			{
				// Could not create an XMLHttpRequest object.
				alert("Could not create XMLHttpRequest.");
				return false;
			}
		}
	} 

	return;
}

function CheckServerRequestStatus(FunctionCallBack, ReqArrayCtr, NotifyOnRequestFailure)
{
	if ((NotifyOnRequestFailure != true) && (NotifyOnRequestFailure != false))
	{ NotifyOnRequestFailure=true; }

	// If object has finished retrieving the data
	if (requester[ReqArrayCtr].readyState == 4)
	{
		// If the data was retrieved successfully
		try
		{
			if ((requester[ReqArrayCtr].status >= 200) && (requester[ReqArrayCtr].status <= 299))
			{ FunctionCallBack(); }

			// IE returns a status code of 0 on some occasions, so ignore this case
			else if (requester[ReqArrayCtr].status != 0)
			{
				if (NotifyOnRequestFailure == true)
				{ alert("Sorry, there was an error communicating with the server. Please try again."); }
			}

		}
		catch (error)
		{
			if (NotifyOnRequestFailure == true)
			{ alert("Sorry, there was an error communicating with the server. Please try again."); }
		}
	}

	return true;
}