function CallBackObject() {
  this.XmlHttp = this.GetHttpObject();
}

CallBackObject.prototype.GetHttpObject = function() {
  var xmlhttp;

 /*@cc_on
  @if (@_jscript_version >= 5)
    try {
      xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
      try {
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (E) {
        xmlhttp = false;
      }
    }
  @else
  xmlhttp = false;
  @end @*/

  if (!xmlhttp && typeof XMLHttpRequest != 'undefined'){
    try {
      xmlhttp = new XMLHttpRequest();
      xmlhttp.isNS = true;
    } catch (e) {
      xmlhttp = false;
    }
  }
  return xmlhttp;
}

CallBackObject.prototype.DoCallBack = function(theMethod, thePage, theData) {
  if( this.XmlHttp ) {
    if( this.XmlHttp.readyState == 4 || this.XmlHttp.readyState == 0 ) {
      var oThis = this;
      this.XmlHttp.open(theMethod, thePage, true);
      this.XmlHttp.onreadystatechange = function() { oThis.ReadyStateChange(); };
      if(theMethod == 'GET') {
        this.XmlHttp.send(null);
      } else {
        this.XmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
        this.XmlHttp.send(theData);
      }
    }
  }
}

CallBackObject.prototype.AbortCallBack = function() {
	if (this.XmlHttp && this.XmlHttp.readyState > 0 && this.XmlHttp.readyState < 4)
		if(this.XmlHttp.isNS)	return true;
		else this.XmlHttp.abort();
	else return false;
}

CallBackObject.prototype.OnLoading = function() {
  // Loading
}

CallBackObject.prototype.OnLoaded = function() {
  // Loaded
}

CallBackObject.prototype.OnInteractive = function() {
  // Interactive
}

CallBackObject.prototype.OnComplete = function(responseText, responseXml) {
  // Complete
}

CallBackObject.prototype.OnAbort = function() {
  // Abort
}

CallBackObject.prototype.OnError = function(status, statusText, responseText) {
  // Error
}

CallBackObject.prototype.ReadyStateChange = function() {
  if(this.XmlHttp.readyState == 1) {
    this.OnLoading();
  } else if(this.XmlHttp.readyState == 2) {
    this.OnLoaded();
  } else if(this.XmlHttp.readyState == 3) {
    this.OnInteractive();
  } else if(this.XmlHttp.readyState == 4) {
try { if(this.XmlHttp.status) ; }
catch(e) { return; }
    if(this.XmlHttp.status == 0)
      this.OnAbort();
    else if(typeof(this.XmlHttp.status) != "undefined" && this.XmlHttp.status == 200 && this.XmlHttp.statusText == "OK")
      this.OnComplete(this.XmlHttp.responseText, this.XmlHttp.responseXML);
    else
      this.OnError(this.XmlHttp.status, this.XmlHttp.statusText, this.XmlHttp.responseText);
  }
}
