var requestObject = null;

function createRequestObject() {
	//Try the various types of XML Request, to find one that works with the current browser
	var returnValue = null;
    if (window.XMLHttpRequest)
	{
		// Mozilla, Safari, ...
        http_request = new XMLHttpRequest();
        if (http_request.overrideMimeType)
		{
			http_request.overrideMimeType('text/xml');
        }
    }
	else if (window.ActiveXObject)
	{
		// IE
        try
		{
            http_request = new ActiveXObject("Msxml2.XMLHTTP");
        }
		catch (e)
		{
        	try
			{
                http_request = new ActiveXObject("Microsoft.XMLHTTP");
            }
			catch (e){}
        }
    }
	if(!http_request && typeof XMLHttpRequest!="undefined") {
		http_request = new XMLHttpRequest()
	}
	return http_request
}

function HTTPRequest(requestUri) {
	//Cancel any outstanding requests, create a new one then execute it
	if(requestObject && requestObject.readyState!=0) requestObject.abort()
	requestObject = createRequestObject();
	
	if (createRequestObject) {
		//Use date/time to ensure the page is not cached
		var cacheDate = new Date();
		cacheDate = cacheDate.toString();
		requestObject.open("GET", requestUri + "&__XMLHTTPCacheDate=" + cacheDate, true); //GET/POST/HEAD, URI, always True for async
		requestObject.onreadystatechange = function() {
			if(requestObject.readyState==4 && requestObject.responseText) {
				try {
					eval(requestObject.responseText);
				} catch(e) {
					alert("Server side async callback caused an error: " + e.message + "\nResponse Text: " + requestObject.responseText);
				}
			}
		}
		requestObject.send(null); //POST body=null for GET
	}
}