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' && httpParams != null) {
            httpUrl = httpUrl + "?" + httpParams;
        }


        this.req.open(httpMethod, httpUrl, true);

        this.req.setRequestHeader("Pragma","no-cache");
        this.req.setRequestHeader("Cache-control","no-cache");
        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);
    }
}
