//==========================================================
// SCRIPTING BY: Andrew Gaddis (2009)
//   (some code pieces are from various internet sources)
//==========================================================

loadinghtml = '<div class="ajaxloading"><div class="left"><img src="/images/design/graphics/load-blue.gif"></div><div class=\"right\">Loading...</div></div>';
loadinghtml2 = '<div><img src="/images/design/graphics/load-blue.gif"></div>';
loadinghtml3 = '<div><img src="/images/design/graphics/load-mini1.gif"></div>';
AJAXcallback = 'none';


//------------------------------------------------------------------------------------------------
function doAJAX(mode,results,loading,loadingHTML)
{
	// Input: 'results' is ID of DIV/etc to push results into.
	// [2/19/2010] 'loading' added. Indicates the ID of the DIV/etc to display the loading message in.
	// [2/21/2010] 'loadingHTML' added to indicate the HTML to use as the "loading" screen.
	// [3/15/2010] Code modified to allow looping of 'script' tags included within result string. Result in 3 new functions!
	// [4/10/2010] 'replace-reload' uses JQUERY to load results, this evalutes JS! Need to stop this functions JS evaluating!
	// [4/26/2010] Replace area near "loading message" to use JQUERY to do the inserting.
	var xmlHttp;
	try
	{
		// Firefox, Opera 8.0+, Safari
		xmlHttp = new XMLHttpRequest();
	}
	catch (e)
	{
		// Internet Explorer
		try
		{
			xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch (e)
		{
			try
			{
				xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch (e)
			{
				alert("Your browser does not support AJAX!");
				return false;
			}
		}
	}
	xmlHttp.onreadystatechange=function()
	{
		// Note: this function determines WHAT to do when request is handled. There are more 'states' than just '4'.
		if((xmlHttp.readyState==1) || (xmlHttp.readyState==2) || (xmlHttp.readyState==3))
		{
			//### LOADING MESSAGE ###
			if (mode=='replace')
			{
				//old: var loadingObj = document.getElementById(loading);
				if (loading!=results) { $('#'+loading).show(); }
				//old: loadingObj.innerHTML = loadingHTML;
				$('#'+loading).html(loadingHTML);
			}
			else if (mode=='fullprepend') { /*do-nothing*/ }
			else if (mode=='replace-noload') { /*do-nothing*/ }
			else if (mode=='getvalue') { /*do-nothing*/ }
		}
		if(xmlHttp.readyState==4)
		{
			//### RESULTS RETURNED/COMPLETE ###
			//Output Response
			var resultstr = xmlHttp.responseText;
			var resultsObj = document.getElementById(results);
			var loadingObj = document.getElementById(loading);
			var str = resultstr;
				//Check Mode
				if (mode=='replace') { document.getElementById(results).innerHTML = resultstr; }
				else if (mode=='fullprepend') { $('#'+results).prepend(resultstr); }
				else if (mode=='replace-noload') { $('#'+results).html(resultstr); }
				else if (mode=='getvalue') { /*do-nothing*/ }
				else { alert('Unknown AJAX mode! ('+mode+')'); }
				//Rehide Loading (if separate)
				if (mode=='replace')
				{
					if (results!=loading) { $('#'+loading).hide(); }
				}
			//Evaluate Internal JavaScript in Result String (loops)
			if ((mode!='getvalue') && (mode!='replace-noload'))
			{
				//Initialize JS Loop
				var loopNum = (0);
				var doLoop = false;
				var jss = '';
				var offset = (0);
				if (stringContainJS(str,offset)) { doLoop = true; }
				//Run Loop
				while (doLoop)
				{
					loopNum = (loopNum+1);
					//Get End Points
					var start = getJSstart(str,offset);
					var end = getJSend(str,offset);
					offset = (end+8);
					//Get Content
					jss = str.substring((start+31),(end));
					if (jss!='')
					{
						eval(jss);
						doLoop = false;
					}
					//See if Loop Reiterate
					if (stringContainJS(str,offset)) { doLoop = true; }
				}
			}
			//Run Callback Function
			if (AJAXcallback=='none') { /*do nothing*/ }
			else { eval(AJAXcallback); AJAXcallback = 'none'; }
		}
	}
	return xmlHttp;
}
//------------------------------------------------------------------------------------------------
function procAJAX(resultID,url,par)
{
	//...Process...
	var ajax = doAJAX('replace',resultID,resultID,loadinghtml);
	ajax.open('POST',url,true);
	ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	ajax.setRequestHeader("Content-length", par.length);
	ajax.setRequestHeader("Connection", "close");
	ajax.send(par);
	//...Output...
	return false;
}
//------------------------------------------------------------------------------------------------
function runAJAX(mode,resultID,loadID,loadHTML,url)
{
	//...Process...
	var par = '';
	var ajax = doAJAX(mode,resultID,loadID,loadHTML);
	ajax.open('POST',url,true);
	ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	ajax.setRequestHeader("Content-length", par.length);
	ajax.setRequestHeader("Connection", "close");
	ajax.send(par);
	//...Output...
	return false;
}
//------------------------------------------------------------------------------------------------
function procSplitAJAX(resultID,loadID,loadHTML,url,par)
{
	//...Process...
	var ajax = doAJAX('replace',resultID,loadID,loadHTML);
	ajax.open('POST',url,true);
	ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	ajax.setRequestHeader("Content-length", par.length);
	ajax.setRequestHeader("Connection", "close");
	ajax.send(par);
	//...Output...
	return false;
}
//------------------------------------------------------------------------------------------------
function loadAJAX(wait,resultID,url,par)
{
	//...Process...
	var waitNum = Number(wait);
	var resultObj = document.getElementById(resultID);
	resultObj.innerHTML = loadinghtml;
	setTimeout("procAJAX('"+resultID+"','"+url+"','"+par+"');",waitNum);
	//...Output...
	return false;
}
//------------------------------------------------------------------------------------------------
function loadSplitAJAX(wait,resultID,loadID,loadHTML,url,par)
{
	//...Process...
	var waitNum = Number(wait);
	var loadObj = document.getElementById(loadID);
	$('#'+loadID).show();
	loadObj.innerHTML = loadHTML;
	setTimeout("procSplitAJAX('"+resultID+"','"+loadID+"','"+loadHTML+"','"+url+"','"+par+"');",waitNum);
	//...Output...
	return false;
}
//------------------------------------------------------------------------------------------------
function ajaxForm(formid,resultid,action)
{
	//SETUP VARIABLES
	var forme = document.getElementById(formid);
	if (action=='') { var actioner = forme.action; }
	else { var actioner = action; }
	var url = actioner;
	try { var arrlen = forme.elements.length; } catch(e) { arrlen = (0); }
	var par = '';
	var ajax = doAJAX('replace',resultid,resultid,loadinghtml);
	var objresult = document.getElementById(resultid);
	//LOOP THRU FORM PARAMETERS
	for (i=0; i<arrlen; i++)
	{
		var formfieldname = forme.elements[i].name;
		var formfieldvalue = forme.elements[i].value;
		var formfieldlength = forme.elements[i].length;
		var formfieldtag = forme.elements[i].nodeName;
		var formfieldtype = forme.elements[i].type;
		if (formfieldtype=='radio') { formfieldvalue = get_radio_value(formfieldname); }
		par = par + '&' + formfieldname + '=' + formfieldvalue;
	}
	//SEND REQUEST
	//remove?objresult.style.display = '';
	ajax.open('POST',url,true);
	ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	ajax.setRequestHeader("Content-length", par.length);
	ajax.setRequestHeader("Connection", "close");
	ajax.send(par);
	//RETURN
	return false;
}
//------------------------------------------------------------------------------------------------
function get_radio_value(fieldname)
{
	var objfield = document.getElementsByName(fieldname);
	var thislength = objfield.length;
	var thisvalue = '';
	for (var i=0;i<thislength;i++)
	{
		if (objfield[i].checked)
		{
			thisvalue = objfield[i].value;
		}
	}
	if (thisvalue=='') { thisvalue = 'no'; }
	return thisvalue;
}
//------------------------------------------------------------------------------------------------
function stringContainJS(str,offset)
{
	//PURPOSE: Will return boolean whether string contains a JS tag.
	var out = false;
	var jss = '';
	start = getJSstart(str,offset);
	end = getJSend(str,offset);
	if ((start>0) && (end>0)) { out = true; }
	//Output
	return out;
}
//------------------------------------------------------------------------------------------------
function getJSstart(str,offset)
{
	//PURPOSE: Returns character position of start of JS tag given offset.
	var out = (0);
	var start = str.indexOf('<script type="text/javascript">',offset);
	if (start<0) { start = str.indexOf('<SCRIPT type=text/javascript>',offset); }
	if (start>0) { out = start; }
	return out;
}
//------------------------------------------------------------------------------------------------
function getJSend(str,offset)
{
	//PURPOSE: Returns character position of start of JS tag given offset.
	var out = (0);
	var end = str.indexOf('</script>',offset);
	if (end<0) { end = str.indexOf('</SCRIPT>',offset); }
	if (end>0) { out = end; }
	return out;
}
//------------------------------------------------------------------------------------------------
// Preload AJAX Images
ajaxpic1 = new Image(31,31); 
ajaxpic1.src = "/images/design/graphics/load-blue.gif";
// THE END
