// from: http://www.hunlock.com/blogs/The_Ultimate_Ajax_Object
function ajax(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) {
      try { that.AJAX = new XMLHttpRequest(); } catch(e) { that.AJAX = false; }
    } else if (window.ActiveXObject) {
      try {
        that.AJAX = new ActiveXObject("Msxml2.XMLHTTP");
      } catch(e) {
        try { that.AJAX = new ActiveXObject("Microsoft.XMLHTTP"); } catch(e) { }
      }
    }

    if (that.AJAX==null) {
      return false;
    } else {
      that.AJAX.onreadystatechange = function() {
        if (that.AJAX.readyState==4) {
          that.updating=false;
          var status = null;
          try { var status = that.AJAX.status; } catch (e) { }
          that.callback(that.AJAX.responseText,status,that.AJAX.responseXML);
          that.AJAX=null;
        }
      }

      that.updating = new Date();

      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.setRequestHeader("Content-Length", passData.length);
        that.AJAX.send(passData);
      } else {
        var uri=urlCall+'?'+passData+'&timestamp='+(that.updating.getTime());
        that.AJAX.open("GET", uri, true);
        that.AJAX.send(null);
      }

      return true;
    }
  }

  var urlCall = url;

  this.callback = callbackFunction || function () { };
}

