/////////////////////////////////////////
/// Adams Flash-like xmlHTTPrequest object
//
//  properties
//
var XMLObjects = [];
function xmlHTTP(use_name) {
  // private stuff
  this.num = XMLObjects.length; 
  XMLObjects[this.num] = this;
  this.xmlhttpreq = getxmlreq();
  this.data = new Object;
  this.rvars = new Object;
  this.error = "";
  this.name = (use_name) ? use_name : "name not set";
  this.loading = false;
  this.use_url = "";
  this.retries = 0;
  this.doLoad = function(){
    for(a in window){
      if(window[a] == this){
        this.name = a;
      }
    }
    alert('No doLoad set for '+this.name);
  }
  
  this.onstatus = function(status){
    if(status != 200 && status != 0){
      for(ob in XMLObjects){
        try{var RS = XMLObjects[ob].xmlhttpreq.readyState;}
        catch(er){var RS = 0;}
        if(RS == 4){
          var message = XMLObjects[ob].xmlhttpreq.responseText;
          break;
        }
      }
      //setLog("Bad Status","Status: "+status);
      //Alert("The server is not responding. Error "+message+".");
    }
  }
  this.g_onstatus = function(status){
    if(status != 200 && status != 0){
      for(ob in XMLObjects){
        try{var RS = XMLObjects[ob].xmlhttpreq.readyState;}
        catch(er){var RS = 0;}
        if(RS == 4){
          var message = XMLObjects[ob].xmlhttpreq.responseText;
          XMLObjects[ob].xmlhttpreq = getxmlreq();
          //setLog("Bad Status","Status: "+status+" "+XMLObjects[ob].name);
          break;
        }
      }
    }
  }
  
  this.xmlhttpreq.onreadystatechange = statusChange;
  this.sendAndLoad = sendandload;
}
function statusChange(){
  var ST = "";
  var RS = "";
  if(window['XMLObjects'] == undefined) return;
  for(ob in XMLObjects){
    if(XMLObjects[ob].xmlhttpreq != null){
      try{var RS = XMLObjects[ob].xmlhttpreq.readyState;}
      catch(er){RS = 0;}
      if(RS == 4){
        try{ST = XMLObjects[ob].xmlhttpreq.status;}
        catch(er){ST = 0;}
        if(ST==200){
          XMLObjects[ob].retries = 0;
          
          var ct = XMLObjects[ob].xmlhttpreq.getResponseHeader("Content-Type");
          if(ct == "text/javascript" || ct == "text/JSON" || String(ct).indexOf("text/javascript") != -1 || String(ct).indexOf("text/JSON") != -1){
            XMLObjects[ob].rvars = eval('(' + XMLObjects[ob].xmlhttpreq.responseText + ')');
          }
          else{
            var use_xml = XMLObjects[ob].xmlhttpreq.responseXML;
            if(use_xml){
              XMLObjects[ob].rvars = xml_to_jsob(use_xml.documentElement);
            }
          }
          resetObject(XMLObjects[ob]);
          XMLObjects[ob].doLoad();
        }
        XMLObjects[ob].onstatus(ST);
        XMLObjects[ob].g_onstatus(ST);
      }
    }
  }
}
function addDebug(text){
  document.getElementById('debug').innerHTML += "<br/>"+text;
}
var g_timer = 0;
function xml_to_jsob(use_node){
  g_timer++;
  var ret_var = [];
  if(use_node.childNodes.length == 1 && use_node.childNodes[0].nodeType == 3){
    ret_var[use_node.nodeName] = use_node.childNodes[0].nodeValue;
  }
  else{
    ret_var[use_node.nodeName] = [];
    for(var a = 0;a < use_node.childNodes.length; a++){
      if(use_node.childNodes[a].nodeType == 1){
        var temp_var = xml_to_jsob(use_node.childNodes[a])
        for(var b in temp_var){
          if(ret_var[use_node.nodeName][b]){
            if(typeof(ret_var[use_node.nodeName][b]) == "string" || typeof(ret_var[use_node.nodeName][b]) == "number"){
              ret_var[use_node.nodeName][b] = [ret_var[use_node.nodeName][b]];
            }
            else{
              if(ret_var[use_node.nodeName][b][0] == undefined){
                ret_var[use_node.nodeName][b] = [ret_var[use_node.nodeName][b]];
              }
            }
            ret_var[use_node.nodeName][b][ret_var[use_node.nodeName][b].length] = temp_var[b];
          }
          else{
            ret_var[use_node.nodeName][b] = temp_var[b];
          }
        }
      }
    }
  }
  
  return ret_var;
}
function resetObject(ob){
  ob.xmlhttpreq = getxmlreq();
  ob.loading = false;
  ob.xmlhttpreq.onreadystatechange = statusChange;
}

function sendandload(url,method){
  this.use_url = url;
  if(this.loading){
    this.xmlhttpreq.abort();
    resetObject(this);
  }
  if(this.xmlhttpreq != null){
    this.rvars = new Object;
    this.xmlhttpreq.open(method,url,true);
    this.xmlhttpreq.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    dataString = "";
    for(a in this.data){
      dataString += a+"="+encodeURIComponent(this.data[a])+"&";
    }
    if(dataString != "") dataString = dataString.substr(0,dataString.length-1);
    else this.error="Warning: no data in ";
    this.loading=true;
    this.xmlhttpreq.send(dataString);
  }
}

function getxmlreq(){
  var xmlreq = new Object;
  if (window.XMLHttpRequest){// code for Mozilla, etc.
    xmlreq=new XMLHttpRequest();
  }
  else if (window.ActiveXObject){// code for IE
    xmlreq=new ActiveXObject("Microsoft.XMLHTTP");
  }
  else{
    xmlreq = null;  // no object allowed by browser
  }
  return xmlreq; //return the XMLHttpRequest object
}



