var HTTPReq = new Array();
var Controls = new Array();
var postfuncs = new Array();

function AJAX_Initiate(control) {
  var xmlreq;
  var retval;
  try { xmlreq = new XMLHttpRequest(); }
  catch ( microslop ) {
    try { xmlreq = new ActiveXObject("Msxml2.XMLHTTP"); }
    catch ( different_microslop ) {
      try { xmlreq = new ActiveXObject("Microsoft.XMLHTTP"); }
      catch ( wont_work ) {
	xmlreq = false;
      }
    }
  }
  if ( !xmlreq )  return -1;
  retval = HTTPReq.length;
  HTTPReq[retval] = xmlreq;
  return retval;
}

function AJAX_UpdateControl(stack) {
  var Req = HTTPReq[stack];
  var optionparts;
  var vals;
  if ( !Req )  return;
  ctrl = document.getElementById(Controls[stack]);
  if ( !ctrl )  return;
  if ( ( Req.readyState != 4 ) || ( Req.status != 200 ) )  return;
  while ( ctrl.length )  ctrl.remove(0);
  var options = Req.responseText.split("\n");
  while ( options.length ) {
    optionparts = options.shift();
    vals = optionparts.split("|");
    ctrl[ctrl.length] = new Option(vals[1],vals[0]);
  }
  HTTPReq[stack] = null;
  Controls[stack] = null;
}


function AJAX_UpdateControlEx(stack) {
  var Req = HTTPReq[stack];
  var optionparts;
  var vals;
  if ( !Req )  return;
  ctrl = document.getElementById(Controls[stack]);
  if ( !ctrl )  return;
  if ( ( Req.readyState != 4 ) || ( Req.status != 200 ) )  return;
  while ( ctrl.length )  ctrl.remove(0);
  var options = Req.responseText.split("\n");
  while ( options.length ) {
    optionparts = options.shift();
    vals = optionparts.split("|");
    ctrl[ctrl.length] = new Option(vals[1],vals[0]);
  }
  HTTPReq[stack] = null;
  Controls[stack] = null;
  var postfunc = postfuncs[stack];
  if ( postfunc ) postfunc();
}


function AJAX_SetControlText(control,url) {
  if ( !control ) { return; }
  var ndx = AJAX_Initiate();
  if ( ndx == -1 )  return;
  Controls[ndx] = control;
  var Req = HTTPReq[ndx];
  Req.onreadystatechange = new Function("AJAX_UpdateControl("+ndx+");");
  Req.open("GET",url,true);
  Req.send("");
}

function AJAX_SetControlTextEx(control,url,postfunc) {
  if ( !control ) { return; }
  if ( !postfunc ) return;
  var ndx = AJAX_Initiate();
  if ( ndx == -1 )  return;
  Controls[ndx] = control;
  postfuncs[ndx] = postfunc
  var Req = HTTPReq[ndx];
  Req.onreadystatechange = new Function("AJAX_UpdateControlEx("+ndx+");");
  Req.open("GET",url,true);
  Req.send("");
}



function AJAX_UpdateHTML(stack) {
  var Req = HTTPReq[stack];
  if ( !Req )  return;
  if ( ( Req.readyState != 4 ) || ( Req.status != 200 ) )  return;
  var ctrl = document.getElementById(Controls[stack]);
  if ( !ctrl )  return;
  ctrl.innerHTML = Req.responseText;
  HTTPReq[stack] = null;
  Controls[stack] = null;
}

function AJAX_SetControlHTML(control,url) {
  if ( !control ) return;
  var ndx = AJAX_Initiate();
  if ( ndx == -1 ) return;
  Controls[ndx] = control;
  var Req = HTTPReq[ndx];
  Req.onreadystatechange = new Function("AJAX_UpdateHTML("+ndx+");");
  Req.open("GET",url,true);
  Req.send("");
}
