function getXMLHTTPRequest() {
  var req;
  try {
    req = new XMLHttpRequest();
  } catch(err1) {
     var XmlHttpVersions = new Array("MSXML2.XMLHTTP.6.0",
                                    "MSXML2.XMLHTTP.5.0",
                                    "MSXML2.XMLHTTP.4.0",
                                    "MSXML2.XMLHTTP.3.0",
                                    "MSXML2.XMLHTTP",
                                    "Microsoft.XMLHTTP");
    for(var i=0; i< XmlHttpVersions.length && !req; i++) {
      try {
        req = new ActiveXObject(XmlHttpVersions[i]);
      } catch(e) { }
    }
  }
  if(!req) alert("Error creating the XMLHttpRequest object.");
  else return req;
}

function doCallback(callback, item, element) {
  eval(callback + '(item,element)');
}

function requestGET(url, query, req) {
  myRand = parseInt(Math.random()*999999999999999999);
  req.open("GET", url+"?rand="+myRand+"&"+query, true);
  req.send(null);
}

function requestPOST(url, query, req) {
  req.open("POST", url, true);
  req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
  req.send(query);
}

function doAjax(url, query, callback, reqtype, getxml, element, indicator) {
  var myreq = getXMLHTTPRequest();
  myreq.onreadystatechange = function () {
    if(myreq.readyState == 4) {
      if(myreq.status == 200) {
        var item = myreq.responseText;
        if(getxml == 1) {
          item = myreq.responseXML;
        }
        doCallback(callback, item, element);
      } else if(myreq.status == 404) {
        document.getElementById(element).innerHTML = "The server returned a 404 error.";
        return;
      }
    } else {
      if(indicator == 1) {
        document.getElementById(element).innerHTML = '<img src="/ajax/images/indicator-big.gif">';
        document.getElementById(element).style.display = 'block';
      } else if(indicator == 2) {
        document.getElementById("saveresponse").innerHTML  = '<img src="/ajax/images/indicator-big.gif">';
      }
    }
  }
  if(reqtype == "post") {
    requestPOST(url, query, myreq);
  } else {
    requestGET(url, query, myreq);
  }
}

