function createREQ() {
   try {
      req = new ActiveXObject("Msxml2.XMLHTTP");
   }

   catch (err1) {
      try {
         req = new ActiveXObject("Microsoft.XMLHTTP");
      }

      catch (err2) {
         try {
            req = new XMLHttpRequest();
         }

         catch (err3) {
            req = false;
         }
      }
   }

   return req;
}

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

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

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

function doAjax(url, query, callback, reqtype, getxml, element, text, color) {
   var myreq = createREQ();

   if(!myreq) {
      alert('It seems that your browser does not support Ajax. Please try again using another browser.');
      return false;
   }

   myreq.onreadystatechange = function() {
      if(myreq.readyState == 4) {
         if(myreq.status == 200) {
            var item = myreq.responseText;

            if(getxml == 1) {
               item = myreq.responseXML;
            }

            doCallback(callback, item);
         }
         else {
            // error
         }
      }
      else {
         if(element && text) {
            ChangePageElement(element, text, color);
         }
      }
   }

   if(reqtype == 'post') {
      requestPOST(url, query, myreq);
   }
   else {
      requestGET(url, query, myreq);
   }
}

function ChangePageElement(element, text, color) {
   var output;

   if(color) {
      output = '<b><span style="background-color: #' + color + '">' + text + '</span></b>';
   }
   else {
      output = '<b>' + text + '</b>';
   }

   document.getElementById(element).innerHTML = output;
}
