﻿/* XMLHttpRequest Wrapper Class */
function AsyncRequest(callbackobj, callbackfunc)
{
	this.callbackObject = callbackobj;
	this.callbackFunction = callbackfunc;
	this.xmlHttp = null;
	this.error = null;
}

AsyncRequest.asyncReqs = new Array();

AsyncRequest.GetXmlHttp = function()
{
	var xmlHttp;
	
	if(window.XMLHttpRequest)
	{
		xmlHttp = new XMLHttpRequest();
	} else {
		try
		{
			xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (ex) {
			try
			{
				xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (ex) {
				xmlHttp = null;
			}
		}
	}
	
	return xmlHttp;
};

AsyncRequest.OnReadyStateChange = function()
{    
    var i;
    var async;
    
    if(!AsyncRequest.asyncReqs)
        return;
    
    for(i = 0; i < AsyncRequest.asyncReqs.length; i++)
    {
        async = AsyncRequest.asyncReqs[i];
        if(async.xmlHttp.readyState == 4)
	    {
	        AsyncRequest.asyncReqs.splice(i, 1);
		    if(async.xmlHttp.status != 200)
			    async.error = "HTTP " + async.xmlHttp.status + " - " + async.xmlHttp.statusText;
		    if(async.callbackObject && async.callbackFunction)
		        async.callbackFunction.call(async.callbackObject, async);
            else if(async.callbackFunction)
                async.callbackFunction(async);
	    }
    }
};

AsyncRequest.prototype.GetDocument = function(url, method, params)
{
	var xmlHttp = AsyncRequest.GetXmlHttp();
	
	if(xmlHttp)
	{
		this.xmlHttp = xmlHttp;
		AsyncRequest.asyncReqs.push(this);
		xmlHttp.onreadystatechange = AsyncRequest.OnReadyStateChange;
		xmlHttp.open("GET", url);
		xmlHttp.send(null);
	} else {
	    this.error = "Your browser does not support XmlHttpRequests.";
	    if(this.callbackObject && this.callbackFunction)
	        this.callbackFunction.call(this.callbackObject, this);
        else if(this.callbackFunction)
            this.callbackFunction(this);
	}
};