var ajax={
  delay: 100,
  queue: [],
  xmlhttp: null,
  aux: [],
  state: null,
  timeout: null,
  response: null,
  fn: null,
  init: function() {
    if (!this.xmlhttp) {
      if (window.XMLHttpRequest) {
        xmlhttp=new XMLHttpRequest();
      } else if (window.ActiveXObject) {
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
      }
    }
    timeout=setTimeout('ajax.process();',this.delay);
  },
  process: function() {
    this.state=xmlhttp.readyState;
    if (this.state==4) {
      this.response=xmlhttp.responseText;
      if ((this.response!='')&&(this.fn!=null)) {
        this.fn(this.response);
      }
    }
    if ((this.state==0)||(this.state==4)) {
      xmlhttp.abort();
      if (this.queue.length) {
        this.aux=this.queue.shift();
        switch (this.aux[0].toUpperCase()) {
          case 'GET': this.get(); break;
          case 'POST': this.post(); break;
        }
      }
    }
    clearTimeout(timeout);
    timeout=setTimeout('ajax.process();',this.delay);
    return true;
  },
  stop: function() {
    clearTimeout(timeout);
    return true;
  },
  get: function() {
    xmlhttp.open('GET',this.aux[1]+'?'+this.aux[2],true);
    xmlhttp.send(null);
    if (this.aux!=null) { 
      this.fn=this.aux[3];
      this.aux=null;
    }
    return true;
  },
  post: function() {
    xmlhttp.open('POST',this.aux[1],true);
    xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
    xmlhttp.setRequestHeader("Content-length",this.aux[2].length);
    xmlhttp.setRequestHeader("Connection","close");
    xmlhttp.send(this.aux[2]);
    this.fn=null;
    this.aux=null; 
    return true;
  },
  request: function(parameter) { // [method,scriptname,url,function]
    this.queue.push(parameter);
    return true;
  }
}

