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.ContentLoader = function(url, params, onload, onerror) {
 //alert("new contentloader, params = " + params);
 this.url = url;
 this.req = null;
 this.onload = onload;
 this.onerror = (onerror) ? onerror : this.defaultError;
 this.params = params;
 this.loadXMLDoc(url);
}

net.ContentLoader.prototype = {

addParam:function(p) {
  this.params += p;
},

go:function() {
  this.loadXMLDoc();
},

loadXMLDoc:function() {
  //alert("loadXMLDoc");
  httpMethod = "POST"; // GET

  try {
    if (window.XMLHttpRequest) {
      this.req= new XMLHttpRequest();
    } else if (window.ActiveXObject) {
      this.req= new ActiveXObject("Microsoft.XMLHTTP");
    } else {
      alert("This browser doesn't support XMLHttpRequests");
    }
  } catch (e) {
     alert(e);
  }
 
  if (this.req) {
    try {
      var loader = this;
      this.req.onreadystatechange = function() {
        loader.onReadyState.call(loader);
      }
      this.req.open("POST", this.url, true); // true is async flag?
      this.req.setRequestHeader ("Content-Type", "application/x-www-form-urlencoded");
      if (true) {
        //alert("posting:" + this.params + " url: " + this.url);
        //this.req.setRequestHeader("Content-length", p.length);
        this.req.send(this.params);
       // alert("Params: " + this.params);
      } else {
        this.req.send(null);
      }
    } catch (err) {
      this.onerror.call(this, err);
    }
  }
},

onReadyState:function() {
  var req = this.req;
  var ready = req.readyState;
  var data = null;
  if (ready == net.READY_STATE_COMPLETE) {
    try {
      var httpStatus = req.status;
      if (httpStatus == 200 || httpStatus == 0) {
        this.onload.call(this);
      } else {
        this.onerror.call(this);
      }
    } catch(err) {
    }
  }
},

defaultError:function(err) {
  alert("Error fetching data!"  + err);
}
}

