var READY_STATE_UNINITIALIZED=0;
var READY_STATE_LOADING=1;
var READY_STATE_LOADED=2;
var READY_STATE_INTERACTIVE=3;
var READY_STATE_COMPLETE=4;
var ajax = {};
ajax.xhr = {};

ajax.xhr.Request = function(url, params, callback, method) {
	this.url = url;
	this.params = params;
	this.callback = callback;
	this.method = method;
	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' && httpMethod != null) {
			httpUrl = httpUrl+"?"+httpParams;
		}
		this.req.open(httpMethod, httpUrl, true);
		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);
	}
}