function AJAXRequest(url, callback) {

    var req = init();
    req.onreadystatechange = processRequest;

    function init() {
        var xmlreq = false;
        if (window.XMLHttpRequest) {
            // Create XMLHttpRequest object in non-Microsoft browsers
            xmlreq = new XMLHttpRequest();
        } else if (window.ActiveXObject) {
            // Create XMLHttpRequest via MS ActiveX
            try {
                // Try to create XMLHttpRequest in later versions
                // of Internet Explorer
                xmlreq = new ActiveXObject("Msxml2.XMLHTTP");
            } catch (e1) {
                try {
                    // Try version supported by older versions
                    // of Internet Explorer
                    xmlreq = new ActiveXObject("Microsoft.XMLHTTP");
                } catch (e2) {
                    doError(e2);
                }
            }
        }
        return xmlreq;
    }

    function processRequest () {
      if (req.readyState == 4) {
        if (req.status == 200) {
          if (callback) callback(req);
        }
      }
    }

    this.doGet = function() {
      req.open("GET", url, true);
      req.send(null);
    }
    
    this.doPost = function(body) {
      req.open("POST", url, true);
      req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
      req.send(body);
    }
}

