function getXMLHTTPRequest() {
  var request = false;
  
  try {
    request = new XMLHttpRequest();
  } catch (err1) {
    try {
      request = new ActiveXObject('Msxml2.XMLHTTP');
    } catch (err2) {
      try {
        request = new ActiveXObject('Microsoft.XMLHTTP');
      } catch (err3) {
          request = false;
        }
      }
    }
  
  return request;
}

function getRequest (url, query, request) {
  randNum = new Date().getTime();
  request.open("GET", url + '?' + query + '&randNum=' + randNum, true);
  request.send(null);
}

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

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

function runMeanwhile (meanwhile) {
  eval(meanwhile + '()');
}

function runAjax(url, query, callback, meanwhile, reqtype, getxml) {

  var httpReq = getXMLHTTPRequest();
  
  httpReq.onreadystatechange = function() {
    if (httpReq.readyState == 4) {
      if (httpReq.status == 200) {
        var item = httpReq.responseText;
        if(getxml) item = httpReq.responseXML;
        runCallback(callback, item); 
      }
    } else {
      runMeanwhile(meanwhile);
    }
  }

  if (reqtype == 'post') {
    postRequest(url, query, httpReq);
  } else {
    getRequest(url, query, httpReq);
  }

}
