var httpRequest=function(url){
	this.callBackFunctionParams=new Array();
	this.url=url;
	this.isBusy=0;
	this.http=this.createXmlHttpRequest();
	this.onreadystatechange=function(){};
	this.http.open("POST",url,false);
	this.query=new Array();
	this.callbackFuncParsQuery=new Array();
}

httpRequest.prototype.registerCallBackFunction=function(currentHttpRequest,callback,params)
{
	return function()
	{
		
		callback.apply(currentHttpRequest.http,params);
		if(currentHttpRequest.http.readyState==4)
		{
			currentHttpRequest.http.abort();
			currentHttpRequest.http=currentHttpRequest.createXmlHttpRequest();
			currentHttpRequest.http.open("POST",currentHttpRequest.url);
			currentHttpRequest.query.reverse();
			if(data=currentHttpRequest.query.pop())
			{				
				currentHttpRequest.query.reverse();
				currentHttpRequest.callbackFuncParsQuery.reverse();
				parameters=currentHttpRequest.callbackFuncParsQuery.pop();
				currentHttpRequest.callbackFuncParsQuery.reverse();
				currentHttpRequest.callBackFunctionParams=parameters;
				currentHttpRequest.http.onreadystatechange=currentHttpRequest.registerCallBackFunction(currentHttpRequest,currentHttpRequest.onreadystatechange,parameters);
				currentHttpRequest.http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
				currentHttpRequest.http.setRequestHeader("Content-length", data.length);
				currentHttpRequest.http.setRequestHeader("Connection", "close");
				currentHttpRequest.http.send(data);
			}
			else currentHttpRequest.isBusy=0;
			
		}
	}
}

httpRequest.prototype.createXmlHttpRequest=function()
{
	if (window.XMLHttpRequest) 
	{
		return new XMLHttpRequest();
	}
	else if (window.ActiveXObject)
	{
		try 
		{
            	return new ActiveXObject('Msxml2.XMLHTTP');
		} catch (e){}
		try {
			return new ActiveXObject('Microsoft.XMLHTTP');
		} catch (e){}
	}
	return null;
}

httpRequest.prototype.reloadHttpRequest=function()
{
	this.http.abort();
	this.http=this.createXmlHttpRequest();
	this.http.open(this.url);
	this.http.onreadystatechange=this.registerCallBackFunction(this,this.onreadystatechange,this.callBackFunctionParams);
}

httpRequest.prototype.setHandler=function(handler)
{
	this.onreadystatechange=handler;
}

httpRequest.prototype.send=function(data,params)
{
	data=encodeURI(data);
	if(!params)params=new Array()
	this.query.push(data);
	this.callbackFuncParsQuery.push(params);
	if(!this.isBusy){
		data=this.query.pop()
		params=this.callbackFuncParsQuery.pop()
		this.callBackFunctionParams=params;
		this.http.onreadystatechange=this.registerCallBackFunction(this,this.onreadystatechange,this.callBackFunctionParams);
		this.isBusy=1;
		this.http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		this.http.setRequestHeader("Content-length", data.length);
		this.http.setRequestHeader("Connection", "close");
		return this.http.send(data);
	}
}

httpRequest.prototype.setUrl=function(url){
	this.url=url;
	this.reloadHttpRequest();
}
