// JavaScript Document
// Line for HTML Doc - <script type="text/javascript">var JJPage = new JacJax(); </script>

function JJNode(){ 
this._vDiv = "";
this._vCmd = "";
this._callback = null; }

function JacJax() {
this.addReq = addReq;
this.doCGET = doCGET;
this.finishJJ = finishJJ;
this.checkQueue = checkQueue;
this.checkStatus = checkStatus;

CurrentNode = new JJNode();
JJQueue = new Array();
JJReq = JJHTTPObject();
JJConn = "scripts/backend.php";
allowFlow = 1;
errorSTR = "";


function checkQueue() {
//SetInner('errorDIV', allowFlow + "<br />" + JJQueue.length + "<br />" + errorSTR );
if (JJQueue.length > 0 && allowFlow == 1) {
CurrentNode = JJQueue.shift();
allowFlow = 0;
try { JJReq.open("POST", JJConn, true);
JJReq.onreadystatechange = checkStatus;
JJReq.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
JJReq.send(CurrentNode._vCmd); }
catch(err) {  } } }

function doCGET( vRun ) {
allowFlow = 0;
JJGReq = JJHTTPObject();
JJGReq.open("GET", vRun, false);
JJGReq.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
JJGReq.send(null); 
allowFlow = 1;
return JJGReq.responseText; }

function addReq( vDiv, vCmd, vCb ) {
nNode = new JJNode();
nNode._vDiv = vDiv;
nNode._vCmd = vCmd;
nNode._callback = vCb;
JJQueue.push(nNode); 
checkQueue(); }

function finishJJ( rString ) { CurrentNode._callback( CurrentNode._vDiv , rString); }

function checkStatus() { try {
	if( JJReq.readyState == 4 && JJReq.status == 200 ) { var rString = JJReq.responseText; finishJJ(rString); allowFlow = 1; checkQueue(); }
	else if (JJReq.readyState == 4 && JJReq.status != 200) { JJReq.unshift(CurrentNode); allowFlow = 1; checkQueue(); } }
    catch(err) { alert("Request Failure"); checkQueue(); } } }

JacJax.prototype.doNow = function( vCmd ) {
this.allowFlow = 0;
JJSReq = JJHTTPObject();
JJSReq.open("POST", JJConn, false);
JJSReq.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
JJSReq.send(vCmd); 
this.allowFlow = 1;
return trim(JJSReq.responseText); }

function JJHTTPObject() {
	XMLobj = false;
    if(window.XMLHttpRequest && !(window.ActiveXObject)) { try { XMLobj = new XMLHttpRequest(); } catch(e) { XMLobj = false; }
    } else if(window.ActiveXObject) { try { XMLobj = new ActiveXObject("Msxml2.XMLHTTP"); }
    catch(e) { try { XMLobj = new ActiveXObject("Microsoft.XMLHTTP"); } catch(e) { XMLobj = false; } } }
	return XMLobj; }

