


// TURN ON DEBUG WINDOW FEEDBACK
// I WILL WANT TO DISABLE THIS IN THE LIVE VERSION…
var httpTesting = false;
// SET MY REQUEST OBJECT
var http = createRequestObject();
// VARIABLE TO TRACK IF WE ARE CURRENTLY IN A CALL
var inCall = false;
// QUEUE FOR CALLS
var callToArray = new Array();
// QUEUE FOR FUNCTION TO EXECUTE WHEN CALL COMPLETE
var returnToArray = new Array();


function createRequestObject()
{
  var reqObj;
  var browser = navigator.appName;
  if(browser == "Microsoft Internet Explorer")
		  {
			reqObj = new ActiveXObject("Microsoft.XMLHTTP");
			isIE = true;
		  }
  	else
		  {
			reqObj = new XMLHttpRequest();
		  }
  return reqObj;
}


function sendCall(whereTo, returnTo)
{
  // GET THE NEXT ARRAY ITEM AND REMOVE FROM THE ARRAY
  callToArray.push(whereTo);
  returnToArray.push(returnTo);
}


function callQueue()
{
  if(!inCall && callToArray.length > 0)
  	{
		// DO WE HAVE ANYTHING IN THE QUEUE?
		if(callToArray.length > 0)
			{
				  // WE DO, SO GET THE FIRST ITEM IN THE CALL ARRAY AND REMOVE IT
				  whereTo = callToArray.shift();
				  returnTo = returnToArray.shift();
				  // SEND THAT CALL
				  doCall(whereTo, returnTo);
			}
 	}
}


function doCall(whereTo, returnTo){
  inCall = true;
  http.open('get', whereTo);
  // DO WE HAVE A FUNCTION TO CALL ONCE CALL IS COMPLETED?
  if(returnTo.length > 0)
	  {
		eval("http.onreadystatechange = function() {"+returnTo+"}");
	  }
  // SEND CALL
  http.send(null);
}


var queueWatcher = setInterval(callQueue, 100);





// Do AJAX Request through GET
function do_ajax(a_id, var_id, s_p)
{
  sendCall('/ajaxcore.php?a_id='+escape(a_id)+'&var_id='+escape(var_id), "update_target("+var_id+","+s_p+")");
}

function do_ajax_post(formname, a_id, params, s_p)
{
	http.open("POST", '/ajaxcore.php?&a_id='+escape(a_id), true);	
	
	http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	http.setRequestHeader("Content-length", params.length);
	http.setRequestHeader("Connection", "close");
	var origclass = document.getElementById(formname+'_return_container').className;
	
	http.onreadystatechange = function()
		{
			if (http.readyState == 2 && s_p == 1)
				{
					document.getElementById(formname+'_return_container').innerHTML = 'Loading'
					document.getElementById(formname+'_return_container').className = origclass+'showProcessing'
				}
			if(http.readyState == 4 && http.status == 200)
				{
					document.getElementById(formname+'_return_container').innerHTML = http.responseText
					document.getElementById(formname+'_return_container').className = origclass
				}
		}
		
	http.send(params);

}


// Do AJAX Request through GET and pass 1 extra variable
function do_ajax_var(a_id, var_id, ext, target, s_p)
{ 	
	if (a_id==4)
		{
 			sendCall('/ajaxcore.php?a_id='+escape(a_id)+'&var_id='+escape(var_id)+'&ext='+escape(ext)+'&target='+escape(target), "update_eval()");			
		}
	else
		{	
 			sendCall('/ajaxcore.php?a_id='+escape(a_id)+'&var_id='+escape(var_id)+'&ext='+escape(ext), "update_target_var('"+target+"',"+var_id+","+s_p+")");
		}
}

function do_ajax_var_parent(a_id, var_id, ext, target, s_p)
{ 	
	if (a_id==4)
		{
 			sendCall('/ajaxcore.php?a_id='+escape(a_id)+'&var_id='+escape(var_id)+'&ext='+escape(ext)+'&target='+escape(target), "update_eval()");			
		}
	else
		{	
 			sendCall('/ajaxcore.php?a_id='+escape(a_id)+'&var_id='+escape(var_id)+'&ext='+escape(ext), "update_target_parent('"+target+"',"+var_id+","+s_p+")");
		}
}

function update_eval()
{
	if (http.readyState == 4)
  		{		
			if (http.status == 200)
				{
					eval(http.responseText);
		    		inCall = false;
				}			
		}
}

function update_target(var_id,s_p)
{
	var origclass = document.getElementById('return'+var_id).className;
	if (http.readyState == 2 && s_p == 1)
  		{
			document.getElementById('return'+var_id).className = origclass+'showProcessing'
		}
	if (http.readyState == 4)
  		{		
			if (http.status == 200)
				{
					document.getElementById('return'+var_id).className = origclass;
					document.getElementById('return'+var_id).innerHTML = http.responseText;
		    		inCall = false;
				}			
		}
}


function update_target_parent(target,var_id,s_p)
{
	var origclass = parent.document.getElementById(target).className;
	if (http.readyState == 2 && s_p == 1)
  		{
			parent.document.getElementById(target).className = origclass+'showProcessing'
		}
	if (http.readyState == 4)
  		{	
			if (http.status == 200)
				{
					parent.document.getElementById(target).className = origclass;
					parent.document.getElementById(target).innerHTML = http.responseText;
   					inCall = false;
				}
		}
}





function update_target_var(target,var_id,s_p)
{
	var origclass = document.getElementById(target).className;
	if (http.readyState == 2 && s_p == 1)
  		{
			document.getElementById(target).className = origclass+'showProcessing'
		}
	if (http.readyState == 4)
  		{	
			if (http.status == 200)
				{
					document.getElementById(target).className = origclass;
					document.getElementById(target).innerHTML = http.responseText;
   					inCall = false;
				}
		}
}



function update_page(show_processing)
{
  	if (http.readyState == 2 && show_processing == 1)
  		{	
    		//Write stuff to show the processing icon
  		}
  	if (http.readyState == 4)
  		{	
			if (http.status == 200)
				{
    				response = http.responseText;
    				inCall = false;
				}
			else 
				{
					alert("There was an error!");	
				}			
  		}
}