var request = null;

/* 
Wrapper function for constructing a request object.
Parameters:
	reqType: The HTTP request type, such as GET or POST.
	url: The URL of the server programme.
	asynch: Whether to send the request asychronously or not.
	respHandle: The name of the fucntion that will handle the response.
	Any fifth parameters, represented as arguments[4], are the data a POST requestis designed to send
*/
	
function httpRequest(reqType, url, asynch, respHandle)
{
	// Mozilla based browsers
	if(window.XMLHttpRequest)
	{
		request = new XMLHttpRequest();
	}
	else if(window.ActiveXObject)
	{
		request = new ActiveXObject("Msxml2.XMLHTTP");
		if(!request)
		{
			request = new ActiveXObject("Microsoft.XMLHTTP");
		}
	}
	
	// The Request could still be null if neither ActiveXObject initialization succeeded
	if(request)
	{
		// If the reqType parameter is POST, then the 5th parameter to the function is the posted data.
		if(reqType.toLowerCase() != "post")
		{
			initReq(reqType, url, asynch, respHandle);
		}
		else
		{
			// The POSTed data
			var args = arguments[4];
			if(args != null && args.length > 0)
			{
				initReq(reqType, url, asynch, respHandle, args);
			}
		}
	}
	else
	{
		alert("Your browsser does not permit the use of all of this application's features!");
	}
}

/* Initialize a request object that is already constructed */
function initReq(reqType, url, bool, respHandle)
{
	try
	{
		/* Specify the fucntion that will handle the HTTP response */
		request.onreadystatechange = respHandle;
		request.open(reqType, url, bool);
		
		// If the reqType parameter is POST, then the 5th parameter to the function is the POSTed data
		if(reqType.toLowerCase() == "post")
		{
			request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
			request.send(arguments[4]);
		}
		else
		{
			request.send(null);
		}
	}
	catch(errv)
	{
		alert("The application cannot contact the server at the moment.\nPlease try again in a few seconds. \nError detail: " + errv.message);
	}
}


