/**
 * Handles an AJAX request.
 * 
 * To use:
 *    var obj = new AjaxObject(<url>, func);
 *    obj.update({
 *       param1 : <value>
 *    });
 *    
 *    function func(responseText) {
 *       // no readyState check needed 
 *       <do something with responseText> 
 *    }         
 * 
 * @param url the URL of the page to access
 * @param callbackFunction a function to call once processing completes
 */
function AjaxObject(url, callbackFunction)
{
   var that = this;
   this.updating = false;
   this.abort = function() {
      if (that.updating) {
         that.updating = false;
         that.AJAX.abort();
         that.AJAX = null;
      }
   }
   this.update = function(passData, postMethod) {
      if (that.updating) {
         return false;
      }
      that.AJAX = null;
      if (window.XMLHttpRequest) {
         that.AJAX = new XMLHttpRequest();
      } else {
         that.AJAX = new ActiveXObject("Microsoft.XMLHTTP");
      }
      if (that.AJAX == null) {
         return false;
      } else {
         that.AJAX.onreadystatechange = function() {
            if (that.AJAX.readyState == 4) {
               that.updating = false;
               that.callback(that.AJAX.responseText, that.AJAX.status,
                  that.AJAX.responseXML);
               that.AJAX = null;
            }
         }
         that.updating = new Date();

         var paramList = '';
         if (passData != null) {
            for (var key in passData) {
               if (paramList.length > 0) {
                  paramList += '&';
               }
               paramList += key + '=' + passData[key];
            }
         }

         if (/post/i.test(postMethod)) {
            var uri = urlCall + '?' + that.updating.getTime();
            that.AJAX.open('POST', uri, true);
            that.AJAX.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
            that.AJAX.send(paramList);
         } else {
            var uri = urlCall + '?' + paramList + '&timestamp='
               + that.updating.getTime();
            that.AJAX.open('GET', uri, true);
            that.AJAX.send(null);
         }
         
         return true;
      }
   }
   var urlCall = url;
   this.callback = function(responseText, responseStatus, responseXML) {
      if (responseStatus == 200) {
         callbackFunction(responseText);
      } else {
         alert('Error processing request\nCODE: ' + responseStatus);
      }
   };
}
