/*

	Ajax.js

	7/07 3/31/08
	Al Land


Multiple Simultaneous Requests
Non-Caching
added queue support 3/08
added json request 8/08
	
Usage:

getHTML('div id','url');
getJSON('url');

*/





// how to cancel a pending request
//if (!request)
//var request = getHTTPObject();
//else if (request.readyState != 0)
//request.abort(); 


// use this to get hostname to prevent failures due to (not) using "www"
//var rootdomain="http://"+window.location.hostname;



function getHTTPObject() {
	// initialize the ajax object

	var request = false;
	try {
		request = new XMLHttpRequest();
	} catch (trymicrosoft) {
		try {
			request = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (othermicrosoft) {
			try {
				request = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (failed) {
				request = false;
			}
		}
	}

	if (!request){
		alert("Error initializing XMLHttpRequest!");
	}
	return request;
}




function handleDivTag(divtag) 
{ 
	// handles multiple divs
	var divtag; 
	return divtag; 
} 






/* Request Methods */


function postHTML() {
	http.open("POST", url, true);
	
	//Send the proper header infomation along with the request
	http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	http.setRequestHeader("Content-length", params.length);
	http.setRequestHeader("Connection", "close");
	http.onreadystatechange = handler;
	divhandler.divtag = divtag; 
	http.send(params);
}




function getHTML(divtag,url,disablecache) {

	var request = getHTTPObject();
	var timestamp ="";

	// Prevent request Caching
	if (disablecache==1){
		timestamp=(url.indexOf("?")!=-1)? "&"+new Date().getTime() : "?"+new Date().getTime();
	}
	// Open a connection to the server
	request.open("GET", url+timestamp, true);

	// Setup a function for the server to run when it's done

	request.onreadystatechange=function(){
		returnHTML(request,divtag)
	}


	// Send the request
	request.send(null);
}


function getJSON(url,disablecache) {

	var request = getHTTPObject();
	var timestamp ="";

	// Prevent request Caching
	if (disablecache==1){
		timestamp=(url.indexOf("?")!=-1)? "&"+new Date().getTime() : "?"+new Date().getTime();
	}
	// Open a connection to the server
	request.open("GET", url+timestamp, true);

	// Setup a function for the server to run when it's done

	request.onreadystatechange=function(){
		updateList(request)
	}


	// Send the request
	request.send(null);
}



/* Page update methods */


function returnHTML(request,divid){

	if (request.readyState == 4){
		if (request.status == 200 || request.status==0){
			document.getElementById(divid).innerHTML = request.responseText;
		}
		else if (request.status == 404){ /* 401 unauthorized, 403 forbidden*/
			alert("Request URL does not exist");
		}
		else{
			alert("Error: status code is " + request.status);
		}
		inacall=0;
	}
}





function updateList(request){
	/* parses pipe separated result */
	/* object.id|value|object.id|value... */
	var count,x,y;
	if (request.readyState == 4){
		if (request.status == 200 || request.status==0){
			var response = request.responseText.split("|");
			for (x=0;x<response.length/2;x++){
				count=x*2
				y=count+1;
				response[y].replace(/\n/g, "");
				document.getElementById(response[count]).value=response[y];	
			}
		}
		else if (request.status == 404){ /* 401 unauthorized, 403 forbidden*/
			alert("Request URL does not exist");
		}
		else{
			alert("Error: status code is " + request.status);
		}
	}
}







// Create the Divtag Handler -- Mainly an IE 6 Fix 
var divhandler = new handleDivTag(null); 
// flag to determine if in a current call
var inacall=0;








/*
*	Queue Functions
*
*	Queue Library for making ajax calls
*
*
*/


/*

*	USAGE:

<input type=button onclick="loadthis(id,url,mode);" onMouseOver="stopqueue();" onMouseOut="startqueue();"value="request">
<a id=1 onclick="this.style.color='red'; loadthis(this.id, url, 1);">#</a>

<div id='monitor'>
<div style="float:left; width:500;">
<p>Requests</p>
<span id="queue"></span>
</div>
<div style="float:left;">
Callcount: <span id="mycallcount"></span>
<br>
Completed: <span id="mycompleted"></span>
<br>
</div>
</div>

*/





//  Set Variables

var monitor=0;
var graphicmonitor=1;
var interval=1000;
var callcount=0;
var queue = new Array();





function queuedrequest(x,y,z){
	this.url=x;
	this.target=y;
	this.mode=z;
}


function monitorqueue(){
	var html="";

	if (graphicmonitor==1){
		var w1=parseInt(((callcount-queue.length)/callcount)*100);
		var w2=100-w1;
		if (w1==100){
			completionbar="Save Completed";
			monitor=0;
		}
		else{
			completionbar="Saving: "+w1+"% Complete <table width=100 border=1 height=10 cellpadding=0 cellspacing=0><tr><td width="+w1+" bgcolor=Green></td><td width="+w2+"></td></tr></table>";
		}

		if(document.getElementById('queue')){
			document.getElementById('queue').innerHTML=completionbar;
		}
	}
	else
	{
		for(i=0; i<queue.length; i++){
			html+= i + " " + queue[i]['url'];
			html+= " " + queue[i]['target'];
			html+= " " + queue[i]['mode'];
			html+="<br>";
		}
		document.getElementById('queue').innerHTML=html;	
		document.getElementById('mycallcount').innerHTML=callcount;
		document.getElementById('mycompleted').innerHTML=callcount-queue.length;
	}




}


function checkqueue(){

	if (monitor==1){
		monitorqueue();
	}
	
	if (queue.length>0 && inacall==0){
		inacall=1;
		tempobj=queue.shift();
		getHTML(tempobj.target,tempobj.url,tempobj.mode);
	}

}




function stopqueue(){
	clearInterval(queuetimer);
}

function startqueue(){
	queuetimer = setInterval(checkqueue, interval);	 
}







function loadthis(x,url, mode)
{
		// url should be something like 'http://gmcbpm-dev.ad.goodmanmfg.com:8181/result.jsp';
		// mode should be 1 for unique ajax calls
		var target=x;
		if (queue.length==0){callcount=0;}
		queue.push(new queuedrequest(url,target,mode));
		callcount+=1;
		if (monitor==1){
			monitorqueue();
		}

}

var queuetimer = setInterval(checkqueue, interval);	 



















