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_putdataById(id,text) {
	var ctrl = document.getElementById(id);
	AJAX_putdata(ctrl,text);
}

function AJAX_putdata(ctrl,text) {
  if ( "innerHTML" in ctrl ) {
	ctrl.innerHTML = text;
	return;
  }
  if ( "firstChild" in ctrl ) {
    if ( "data" in ctrl.firstChild ) {
	ctrl.firstChild.data = text;
	return;
    }
  }
}


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_NOP(stack) {
  var Req = HTTPReq[stack];
  if ( !Req ) return;
  if ( ( Req.readyState == 4 ) && ( Req.status == 200 ) ) HTTPReq[stack] = null;
  return;
}

function AJAX_UpdateHTML(stack) {
  var Req = HTTPReq[stack];
  if ( !Req )  return;
//  window.alert(Req.readyState+" / "+Req.status);
  if ( ( Req.readyState != 4 ) || ( Req.status != 200 ) )  return;
  var ctrl = document.getElementById(Controls[stack]);
  if ( !ctrl )  return;
  AJAX_putdata(ctrl,Req.responseText);
//  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("");
}


function AJAX_UpdateHTMLEx(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;
  AJAX_putdata(ctrl,Req.responseText);
//  ctrl.innerHTML = Req.responseText;
  HTTPReq[stack] = null;
  Controls[stack] = null;
  var postfunc = postfuncs[stack];
  if ( postfunc ) postfunc();
}

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


function AJAX_POST_NOP(url,postdata) {
	var ndx = AJAX_Initiate();
	if ( ndx == -1 ) return;
	var Req = HTTPReq[ndx];
	Req.onreadystatechange = new Function("AJAX_NOP("+ndx+");");
	Req.open("POST",url,true);
	Req.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
	Req.setRequestHeader("Content-length",postdata.length);
	Req.setRequestHeader("Connection","close");
	Req.send(postdata);
}

function AJAX_POST(control,url,postdata) {
  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("POST",url,true);
  Req.setRequestHeader("Content-type","application/x-www-form-urlencoded");
  Req.setRequestHeader("Content-length",postdata.length);
  Req.setRequestHeader("Connection","close");
//  window.alert(postdata);
  Req.send(postdata);
}



function AJAX_UpdateInputEx(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.value = Req.responseText;
  HTTPReq[stack] = null;
  Controls[stack] = null;
  var postfunc = postfuncs[stack];
  if ( postfunc ) postfunc();
}

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

