function CHttpRequest(){
	
	if(!self.__Requests){
		self.__Requests = new Array();
		if(self.attachEvent)
			self.attachEvent('onunload', __ClearRequestArray);
		else if(self.addEventListener)
			self.addEventListener('onunload', __ClearRequestArray, false);
	}
	this.HostAddress = "index.php?XmlRequest=1&";
	this.AssyncCall = true;
	this.arProperties = new Array();
	this.QueryString = "";
	this.OnResponse = "";
	this.Debug = false;
	this.onReturn = "";
	this.Additional = "";
	//this._currentRequest = null;
	
	this.AddProperty = function(PropertyName, PropertyValue){
		var arProperty = new Array();
		arProperty["PropertyName"] = PropertyName;
		arProperty["PropertyValue"] = PropertyValue;
		this.arProperties.push(arProperty);
	}

	this.Send = function(){
	    
	    //////// Action/RecordID
	    if(typeof(arCurrentSiteNavigation) != "undefined"){
			for(var Key in arCurrentSiteNavigation){
				this.AddProperty( "Arguments[" + Key + "]", arCurrentSiteNavigation[ Key ] );
			}
		}
	    ////////
	    
		var currentRequest = null;
//		try {
//			currentRequest = new ActiveXObject("Msxml2.XMLHTTP");
//		} catch (e) {
//			try {
//				currentRequest = new ActiveXObject("Microsoft.XMLHTTP");
//			} catch (e) {
//				return;
//			}
//		}
        if (window.XMLHttpRequest) { // Mozilla, Safari, ...
            currentRequest = new XMLHttpRequest();
        } else if (window.ActiveXObject) { // IE
            currentRequest = new ActiveXObject("Microsoft.XMLHTTP");
        }

		currentRequest.open('POST', this.HostAddress, this.AssyncCall);
		currentRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=utf-8');

		var savedIndex = null;
		for(var i = 0; i < self.__Requests.length; i++){
			if(self.__Requests[i].readyState == 4){
				self.__Requests[i] = currentRequest;
				savedIndex= i;
				break;
			}
		}
		if(savedIndex == null){
			self.__Requests.push(currentRequest);
			savedIndex = self.__Requests.length - 1;
		}
		if(this.OnResponse != ""){
		    //if( this.onReturn == "" ){
			    //currentRequest.onreadystatechange = new Function("if(self.__Requests["+ savedIndex +"].readyState == 4){"+ this.OnResponse +"(self.__Requests["+ savedIndex +"].responseXML.childNodes[0], self.__Requests["+ savedIndex +"]);}");
		  //  }else{
		        
		   // }
		}
		var Exec = this.onReturn;
		var AdditionalData = this.Additional;
		
//		if(this.AssyncCall && Exec != ""){
//			var sExecString = (typeof(Exec) == "function") ? Exec : "'"+ Exec + "'";
//		    currentRequest.onreadystatechange =  new Function("onReturnUser("+ sExecString +", '"+ AdditionalData +"', self.__Requests["+ savedIndex +"]);");
//		}
		
		if(this.AssyncCall && Exec != ""){
		    currentRequest.onreadystatechange = function() { onReturnUser( Exec, AdditionalData, self.__Requests[savedIndex] ); };
		}
		
		for(var i = 0; i < this.arProperties.length; i++){
			var arProperty = this.arProperties[i];
			this.QueryString += "&"+ arProperty["PropertyName"] +"="+ encodeURIComponent(arProperty["PropertyValue"]);
		}
		if(this.Debug){
			window.Debug.DumpWindow(this.HostAddress +"&"+ this.QueryString);
		}
		//alert("Gonna send request:\n\n"+ this.QueryString);
		
		currentRequest.send(this.QueryString);
		
		return currentRequest;
	}
}

function onReturnUser(sExecute, AdditionalData, httpRequest){
//	 if (httpRequest.readyState == 4) {
//        if (httpRequest.status == 200) {
//			if(typeof(sExecute) == "function"){
//				sExecute(httpRequest, AdditionalData);
//			}else{
//				var sString = sExecute + "(httpRequest, AdditionalData);";
//				eval(sString);
//            }
//        } else {
//            alert('Server Error!');
//        }
//    }
    if (httpRequest.readyState == 4) {
        if (httpRequest.status == 200) {
            var sString = sExecute + "(httpRequest, AdditionalData);";
            eval(sString);
        } else {
            //alert('Ajax crash!.');
        }
    }
    
}

function __ClearRequestArray(){
	self.__Requests = null;
}
