var AM_POST = 01,
	AM_GET =  02;
var REQNUMBER = 1;//IE cache fix
var ajax = function(url){
	this.url = typeof url != 'undefined'?url:'';
	this.method = AM_GET;
	this.callback = function(text){};
	this.onStarted = function(){};
	this.onFinished = function(){};
	this.params = Array();
	this.socket = null;		
	try {
	  // Firefox, Opera 8.0+, Safari
	  this.socket = new XMLHttpRequest();
	  }
	catch (e) {
	  // Internet Explorer
	  try {
			this.socket = new ActiveXObject("Msxml2.XMLHTTP");
		}
	  catch (e){
			this.socket = new ActiveXObject("Microsoft.XMLHTTP");
		}
	 }	
	this.setUrl = function(url){
		this.url = url;
	}
	this.setMethod = function(method){
		this.method = method;
	}
	this.addParam = function(name, value){
		this.params[this.params.length] = {"name": name, "value": value};
	}
	this.clearParams = function(){
		this.params = Array();
	}
	this.execute =  function(){
		if (!this.socket){
			alert("Ошибка инициализации подключения.");
		} else{
			document.callbackInstance = this;
			this.socket.onreadystatechange = function(){
				if (document.callbackInstance.socket.readyState == 4){
						document.callbackInstance.onFinished();
						document.callbackInstance.callback(document.callbackInstance.socket.responseText);
					}
			}
			this.onStarted();
			var params = this.getParams();
			var var_url = this.url;
			var_url += (var_url.indexOf('?') == -1?'?':'&')+'requnumberieFix='+(++REQNUMBER);
			this.socket.open(this.method == AM_POST?'POST':'GET', var_url + (this.method == AM_POST?'':'&'+params), true);
			this.socket.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
			if (this.method == AM_POST)
				this.socket.setRequestHeader("Content-length", params.length);
			this.socket.setRequestHeader("Connection", "close");
			this.socket.send(this.method == AM_POST?params:'');				
		}
	}
	this.getParams = function(){
		var ret = '';
		for (var i=0; i < this.params.length; i++){
			ret += (ret == ''?'':'&')+this.params[i].name + '=' + this.params[i].value;
		}
		return ret;
	}
}


