// JavaScript Document
function createXMLHttpRequest() {
  var ua;
  if(window.XMLHttpRequest) {
    try {
      ua = new XMLHttpRequest();
    } catch(e) {
      ua = false;
    }
  } else if(window.ActiveXObject) {
    try {
      ua = new ActiveXObject("Microsoft.XMLHTTP");
    } catch(e) {
      ua = false;
    }
  }
  return ua;
}

function handleResponse(response) {

    var update = new Array();
    //alert(response);
    if(response.indexOf('---' != -1)) {
      update = response.split('---');
      for(var i=0; i<update.length; i++){
      	vals = update[i].split('||||');
      	replace_val = vals[1];
		target = vals[0].replace(/^(\s+)?(.*\S)(\s+)?$/, '$2');
		if(target != ''){
			document.getElementById(target).innerHTML = replace_val;
			if (target =='content'){
				initLightbox();
			}
		}
	  }
    }
    else{
      	vals = reponse.split('||||');
      	replace_val = vals[1];
		target = vals[0].replace(/^(\s+)?(.*\S)(\s+)?$/, '$2');
		if(target != ''){
			document.getElementById(target).innerHTML = replace_val;
			if (target =='content'){
				initLightbox();
			}
		}
	}
	document.getElementById('load').style.visibility = 'hidden';
}




var calls = new Array();
var pendingResponseCount = 0;

// The callback of xmlHttpRequest is a dynamically-generated function which
// immediately calls this function.
function onResponseStateChange(callKey) {

  call = calls[callKey];
  xmlHttpRequest = call.xmlHttpRequest;

  if (xmlHttpRequest.readyState < 4) { //Still waiting
    return;
  }
  if (xmlHttpRequest.readyState == 4) { //Transmit to actual callback
    callbackFunction = self[call.callbackFunction];
    if (!callbackFunction) { // Possibly still loading, e.g. in another JS file
      eval('f = function() { onResponseStateChange(' + i + '); }');
      setTimeout(f, 100); // TODO break if too many timeouts
    }
    try {
      callbackFunction(xmlHttpRequest.responseText);
    } catch(e) {
     // alert(e.number);
    }
  }

  call = null; // Technically the GC's responsibility
  delete calls[callKey];
  pendingResponseCount--;

}



function sendRequest(id, params, loading) {
  //alert ('id/params: ' +id + '/' + params);
 var xReq = createXMLHttpRequest();
  if(loading != ''){
	document.getElementById(loading).style.visibility = 'visible';
  }
  var url = 'modules/rpc.php?p=' + id + params;
  callKey = "" + calls.length;
  call = {xmlHttpRequest: xReq, url: url, callbackFunction: 'handleResponse'};
  calls[callKey] = call;

  eval('f = function() { onResponseStateChange(' + callKey + '); }');
  xReq.onreadystatechange = f;

  var requestStyle = "GET";
  xReq.open(requestStyle, url, true);
  xReq.send(null);

}

