// METHOD :: Handles AJAX requests
var XAjax = function() {
   // Returns an XMLHttpRequest Object (or error)
   var getHTTPHandler = function() {
      var xmlHttp;
      try {
         xmlHttp = new XMLHttpRequest;
         getHTTPHandler = function() {
           return new XMLHttpRequest;
         };
      }
      catch(e) {
         var msxml = ["MSXML2.XMLHTTP.3.0",
                      "MSXML2.XMLHTTP",
                      "Microsoft.XMLHTTP"];

         for (var i=0, len = msxml.length; i < len; ++i) {
            try {
               xmlHttp = new ActiveXObject(msxml[i]);
               getHTTPHandler = function() {
                  return new ActiveXObject(msxml[i]);
               };

               break;
            }
            catch(e) {
               alert("AJAX support not found in the current browser!");
            }
         }
      }
      return xmlHttp;
   };

   // Start communication using AJAX
   return function(params, useGet, cFunction) {
      var onReadyStateChange = function(xmlHttp) {
         if (xmlHttp.readyState == 4) {
            if(xmlHttp.status == 200 && xmlHttp.statusText == "OK" && onComplete) {
               onComplete(xmlHttp.responseText, xmlHttp.responseXML);
               fieldValidator.registerEvents();
               return;
            }
            else if (xmlHttp.status == 200 && xmlHttp.statusText == "OK") {
               return;
            }

            if (xmlHttp.status == 0) {
               return alert("XAjax Warning: xmlHttp status is '0'");
            }

            return alert("XAjax Warning: xmlHttp status is '" + xmlHttp.status + "'");
         }

         return true;
      };

      var xmlHttp = getHTTPHandler();
      if (xmlHttp) {
         var onComplete = cFunction;

         // Check if we are ready to do a new request
         if (xmlHttp.readyState == 4 || xmlHttp.readyState == 0) {
            useGet ? xmlHttp.open('GET', params, true) : xmlHttp.open('POST', 'index.php', true);

            xmlHttp.setRequestHeader("ajax-agent",   "X-AJAX");
            xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");

            xmlHttp.onreadystatechange = function() {
               onReadyStateChange(xmlHttp);
            };

            useGet ? xmlHttp.send(null) : xmlHttp.send(params);
         }
      }
   };
}();