function xAjax(urlString, requestMethod){
	// Request method initialisation * [BEGIN] //
	if(!requestMethod){
		requestMethod = "POST";
	}
	// Request method initialisation * [END] //
	
	// XMLHttpRequest initialisation * [BEGIN] //
	var xmlhttp = Try.these(
		function() {return new ActiveXObject('Msxml2.XMLHTTP')},
		function() {return new ActiveXObject('Microsoft.XMLHTTP')},
		function() {return new XMLHttpRequest()}
	) || false;
	
	if(!xmlhttp){
		alert("Your browser cannot work with this technology.");
		return false;
	}
	// XMLHttpRequest initialisation * [END] //
		
	var url = urlString;
	var list = new Array();
	var stateCheck;
	var readyState = 0;
	
	var exec = function (fRef){
		var execString = "";
		for(var i=2; i<list[0].length-1; i++){
			execString += "list[0][" + i + "], ";
		}
		execString += "list[0][" + i + "]";
		
		if(list[0][0] === false){
			eval("fRef(" + execString + ")");
		}
		else if(xmlhttp.getResponseHeader("Content-Type").match("text/xml")){
			eval("fRef(xmlhttp.responseXML, " + execString + ")");
		}
		else{
			eval("fRef(xmlhttp.responseText, " + execString + ")");
		}
	}
	
	var process = function(){
		if(readyState == 1){
			if(xmlhttp.readyState == 4 || list[0][0] === false){
				readyState = 2;
				if(list[0][1]){
					exec(list[0][1]);
				}
				for(i=0;i<list.length-1;i++){
					list[i] = list[i+1];
				}
				list[list.length-1] = null;
				--list.length;
				readyState = 0;
			}
		}
		else if(readyState == 0){
			sendRequest();
		}
	}
	
	var sendRequest = function(){
		if(list.length > 0){
			if(list[0][0] !== false){
				xmlhttp.open(requestMethod, url, true);
				xmlhttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
				xmlhttp.send(list[0][0]);
			}
			readyState = 1;
		}
	}
	
	this.startCheck = function(){
		stateCheck = setInterval(process, 50);
	}
	
	this.stopCheck = function(){
		clearInterval(stateCheck);
	}
	
	this.addRequest = function(query, fRef){
		if(!fRef){
			var	currentRequest = [ query, null ];
		}
		else{
			var	currentRequest = [ query, fRef ];
			if(this.addRequest.arguments.length > 2){
				 for(var i=2; i<this.addRequest.arguments.length; i++){
					 currentRequest[i] = this.addRequest.arguments[i];
				 }
			}
		}
		list[list.length] = currentRequest;
	}
	
	this.addFunction = function(fRef){
		var	currentRequest = [ false, fRef ];
		if(this.addFunction.arguments.length > 2){
			 for(var i=1; i<this.addFunction.arguments.length; i++){
				 currentRequest[i+1] = this.addFunction.arguments[i];
			 }
		}
		list[list.length] = currentRequest;
	}
}