var ajax = {};
ajax.xhr = {};

ajax.xhr.Request = function(url, params, callback, method, synch){
	this.url = url;
	this.params = params;
	this.callback = callback;
	this.method = method;
	this.synch = synch;
	this.send();
}

ajax.xhr.Request.prototype = {
	getXMLHttpRequest : function(){
		if(window.ActiveXObject){
			try{
				return new ActiveXObject("Msxml2.XMLHTTP");
			}catch(e){
				try{
					return new ActiveXObject("Microsoft.XMLHTTP");
				}catch(e1){
					return null;
				}
			}
		}else if(window.XMLHttpRequest){
			return new XMLHttpRequest();
		}else{
			return null;
		}
	},

	send : function(){
		this.req = this.getXMLHttpRequest();

		var httpMethod = this.method ? this.method : 'GET';

		if(httpMethod != 'GET' && httpMethod != 'POST'){
			httpMethod = 'GET';
		}

		var httpParams = (this.params == null || this.params == '') ? null : this.params;
		var httpUrl = this.url;

		if(httpMethod == 'GET' && httpParams != null){
			httpUrl = httpUrl + "?" + httpParams;
		}


		this.req.open(httpMethod, httpUrl, this.synch);
		this.req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		var request = this;
		this.req.onreadystatechange = function(){
			request.onStateChange.call(request);
		}
		this.req.send(httpMethod == 'POST' ? httpParams : null);
	},

	onStateChange : function(){
		this.callback(this.req);
	}
}