function AjaxRequest() {
    var _this = this;
    var http;
    var params = "";

    if(window.XMLHttpRequest){
        // Firefox, Safari, Opera...
        http = new XMLHttpRequest();
    } else if(window.ActiveXObject) {
        // Internet Explorer 5+
        http = new ActiveXObject("Microsoft.XMLHTTP");
    } else {
        // There is an error creating the object,
        // just as an old browser is being used.
        alert("Error: unable to create XmlHttpRequest object!");
    }


    this.SendPostRequest = function(url) {
        http.open('POST',url,true);
        http.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
        http.setRequestHeader('Charset','UTF-8');
        http.setRequestHeader("Content-length", params.length);
        http.setRequestHeader("Connection", "close");
        http.onreadystatechange = function() {
    		if (http.readyState == 4) {
				if (http.status == 200) _this.OnRequestDone(http);
				else {
                    alert("Error " + http.status + "\n" + http.statusText);

                    //document.body.innerHTML =  this.QueryString();
                }
			}
        }
        
        //alert(this.QueryString());

        http.send(params);
    }

    this.SendGetRequest = function(url) {
        http.open('GET',url + "?" + params);
        http.onreadystatechange = function() {
    		if (http.readyState == 4) {
				if (http.status == 200) _this.OnRequestDone(http);
				else alert("Error " + http.status + "\n" + http.statusText);
			}
        }
        http.send(null);
        
//       alert(this.QueryString());
    }

    this.AddParams = function(form,filter) {
        
        if (! form.nodeName) {
            alert('Invalid paramteter argument.\n Object of form type is required!');
            return;
        }
        else if (form.nodeName.toUpperCase() != "FORM") {
            alert('Invalid paramteter argument.\n Object of form type is required!');
            return;
        }

        var s = "";

        for (var i = 0;i < form.elements.length;i++) {
            if (! form.elements[i].value) continue;
            if (filter) {
                if (form.elements[i].name.indexOf(filter) == -1) continue;
            }
            s += form.elements[i].name + " => " + form.elements[i].value + "\n";
            this.AddParam(form.elements[i].name,form.elements[i].value);
        }
        alert(s);
    }

    this.AddParam = function(name,value) {
        params +=
            (params.length == 0 ? "" : "&") + name + "=" + encodeURI(value);
    }

    this.OnRequestDone = function(http) {
        alert('override this method "OnRequestDone(' + arguments[0] + ')"!');
        //alert(http.responseText);
    }
    
    this.QueryString = function() {
        return params;
    }
}


/* example usage

    ax = new AjaxRequest();
    ax.AddParam("PARAM_NAME","PARAM_VALUE");
    
    // set handler function 
    ax.OnRequestDone = function() {
        do something here with the response
    }

    // POST or GET data to specified URL
    ax.SendGetRequest("URL-HERE");
    //or
    //ax.SendPostRequest("URL-HERE");

*/
