var net = new Object();
net.READY_STATE_UNINITIALIZED = 0;
net.READY_STATE_LOADING = 1;
net.READY_STATE_LOADED = 2;
net.READY_STATE_INTERACTIVE = 3;
net.READY_STATE_COMPLETE = 4;

net.XMLHTTPRequestWrapper = function(onload, onerror, callerObj)
{
	this.callerObj = (callerObj)?callerObj:this;
	this.req = null;
	this.onload = (onload) ? onload : this.defaultLoad;
	this.onerror = (onerror) ? onerror : this.defaultError;
}

net.XMLHTTPRequestWrapper.prototype.toString = function()
{
	return 'net.XMLHTTPRequestWrapper';
};

net.XMLHTTPRequestWrapper.prototype.loadData = function(url, method, params, contentType) {
  if (!method)
    method="GET";

  if (!contentType && method == "POST")
    contentType = 'application/x-www-form-urlencoded';

  if (window.XMLHttpRequest)
  {
	this.req = new XMLHttpRequest();
  }
  else if (window.ActiveXObject)
	{
		this.req = new ActiveXObject("Microsoft.XMLHTTP");
	}
  if (this.req) {
    try
    {
      var loader = this;
      this.req.onreadystatechange = function() {
        net.XMLHTTPRequestWrapper.onReadyState.call(loader);
      }
      this.req.open(method, url, true);
      if (contentType) {
        this.req.setRequestHeader('Content-Type', contentType);
      }
      this.req.send(params);
    }
    catch (err)
    {
      this.onerror.call(this.callerObj);
      //this.onerror.call(this);
    }
  }
}

net.XMLHTTPRequestWrapper.onReadyState = function() {
  var req = this.req;
  if (req.readyState == net.READY_STATE_COMPLETE) {
    if (req.status == 200 || req.status == 0)
    {
       this.onload.call(this.callerObj);
    }
    else
    {
      this.onerror.call(this.callerObj);
    }
  }
}

net.XMLHTTPRequestWrapper.prototype.defaultError = function() {
  alert("error fetching data!"
    +"\n\nreadyState:" + this.req.readyState
    +"\nstatus: " + this.req.status
    +"\nheaders: " + this.req.getAllResponseHeaders());
}

net.XMLHTTPRequestWrapper.prototype.defaultLoad = function() {
  alert("Server Procedure Correctly Executed!"
    +"\n\nresponseText:" + this.req.responseText
    +"\nresponseXML: " + this.req.responseXML);
 }
