
var AJAX_CLOSED=0;
var AJAX_OPEN=1;
var AJAX_SENT=2;
var AJAX_RECEIVING=3;
var AJAX_READY=4;

xmlhttp=new Array();
function ajax_assignID() {
  cnt=0;
  while(xmlhttp[cnt++]);
  return cnt;
}

function get_form_data(aform) {
  var result=new Array();
  for (var k=0;k<aform.elements.length;k++) {
    var el=aform.elements[k];
    var aname=el.name;
    if (el.type=='checkbox') {
      if (typeof result[aname]=='undefined') result[aname]=new Array();
      if (el.checked) result[aname].push(el.value);
    } else {
      if (el.length) {
        if (el.options) {
          var si=el.options.selectedIndex;
          if (si!=-1) result[aname]=el.options[si].value; else result[aname]='';
        }
      } else {
        result[aname]=el.value;
      }
    }
  }
  return result;
}

function ajax_get_func(myid,myfunc) {
  if (ajax_status(myid)!=AJAX_READY) return;
  p=myfunc.indexOf("(");
  if (p>0) {
    myfunc=myfunc.replace(/\#result/g,ajax_get(myid));
    eval(myfunc);
  } else {
    eval(myfunc+'(ajax_get(myid))');
  }
  ajax_clean(myid);
}

function ajax_get_url(myurl,mystatefunc) {
  var s=ajax_load(myurl,"",'ajax_get_func(#id,"'+mystatefunc+'")');
  return s;
}

function ajax_post_url(myurl,mystatefunc) {
  var s=ajax_load(myurl,"POST",'ajax_get_func(#id,"'+mystatefunc+'")');
  return s;
}

var ajaxAbort=false;
function ajax_load(myurl,mymethod,mystatefunc,myid) {
  if (ajaxAbort) return;
  var cnt=0,myfunc;
  if (!myid) {
    while (true) {
      if (!xmlhttp[cnt]) break;
      cnt++;
    }
  } else {
    cnt=myid;
  }
  if (document.all)
    xmlhttp[cnt]=new ActiveXObject('Microsoft.XMLHTTP');
  else
    xmlhttp[cnt]=new XMLHttpRequest();
  if (!mymethod) mymethod="GET";

  if (dom) {
    var p=myurl.indexOf("?");
    if (p!=-1) myurl+='&dom='+dom; else myurl+='?dom='+dom;
  }

  apost="";
  if (mymethod.toUpperCase()=="POST") {
    var p=myurl.indexOf("?");
    if (p!=-1) {
      apost=myurl.substr(p+1);
      myurl=myurl.substr(0,p);
    }
  }

  xmlhttp[cnt].open(mymethod,myurl,true);

  if (mymethod.toUpperCase()=="POST") {
    xmlhttp[cnt].setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    xmlhttp[cnt].setRequestHeader("Content-length",apost.length);
    xmlhttp[cnt].setRequestHeader("Connection", "close");
  }

  if (mystatefunc) {
    if (mystatefunc.indexOf("#id")==-1) alert("ajax_load: Warning! Need #id as parameter of status function.");
    mystatefunc=mystatefunc.replace(/\#id/g,cnt);
    eval('myfunc=function() {'+mystatefunc+'};');
  } else {
    eval('myfunc=function() {if (ajax_status('+cnt+')==4) ajax_clean('+cnt+')};');
  }
  xmlhttp[cnt].onreadystatechange=myfunc;
  if (apost!="") xmlhttp[cnt].send(apost); else xmlhttp[cnt].send(null);
  return cnt;
}

function ajax_abort_all() {
  ajaxAbort=true;
  while (xmlhttp.length>0) {
    e=xmlhttp.shift();
    if (e) {
      e.abort();
      delete e;
    }
  }

  ajaxAbort=false;
}

function ajax_abort(myid) {
  if (!xmlhttp[myid]) return;
  xmlhttp[myid].abort();
}

function ajax_get(myid) {
  if (!xmlhttp[myid]) return;
  if (xmlhttp[myid].readyState<AJAX_RECEIVING) return;
  mycontent=xmlhttp[myid].responseText;
  //if (xmlhttp[myid].readyState==4) ajax_clean(myid);
  return mycontent;
}

function ajax_status(myid) {
  if (!xmlhttp[myid]) return;
  return xmlhttp[myid].readyState;
}

function ajax_clean(myid) {
  xmlhttp[myid]=0;
  delete xmlhttp[myid];
}

function ajax_debug(myid,ajaxstatus) {
  if (!xmlhttp[myid]) return;
  if (!ajaxstatus) ajaxstatus=AJAX_READY;
  if (ajax_status(myid)<ajaxstatus) return;
  //alert(ajax_get(myid));
  prompt("",ajax_get(myid));
  if (ajax_status(myid)!=AJAX_READY) return;
  ajax_clean(myid);
}
