
var ajax_requester = ajax_createXMLHttpRequest();
var global = top;

String.prototype.replaceAll = function(strTarget,strSubString)
{
	var strText = this;
	var intIndexOfMatch = strText.indexOf(strTarget);	
	while (intIndexOfMatch != -1)
	{
		strText = strText.replace(strTarget,strSubString)
		intIndexOfMatch = strText.indexOf(strTarget);
	}
	return(strText);
}

function ajax_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 ajax_call(fileName,fileParams,changeEl,textStr)
{
	if (ajax_requester)
	{
		if (fileParams != "")
		{
			fileParams = "&"+fileParams;
		}
		if (changeEl && changeEl != "")
		{
			changeElarr = changeEl.split(":");
			for (i = 0; i < changeElarr.length; i++)
			{
				ajax_replaceSection(changeElarr[i],textStr);
			}
		}
		var rnd982g = Math.random();
		//alert(fileName+'?rnd982g='+rnd982g+fileParams);
		ajax_requester.open('GET',fileName+'?rnd982g='+rnd982g+fileParams);
		ajax_requester.onreadystatechange = ajax_handleResponse;
		ajax_requester.send(null);
	}
	return false;
}

function ajax_submit(submitEl,changeEl,textStr)
{
	var frm = submitEl.form
	var trig = submitEl.name
	var tval = submitEl.value
	if (ajax_requester)
	{
		var rnd982g = Math.random();
		var str = "";
		var fileName;
		if (str = ajax_getForm(frm,trig) + trig + "=" + encodeURIComponent(tval))
		{
			if (changeEl && changeEl != "")
			{
				changeElarr = changeEl.split(":");
				for (i = 0; i < changeElarr.length; i++)
				{
					ajax_replaceSection(changeElarr[i],textStr);
				}
			}
			fileName = "/ajax_handlers/"+frm.name+".php";
			//alert(fileName+'?'+str+'&rnd982g='+rnd982g+'&trigger='+trig);
			ajax_requester.open('GET',fileName+'?'+str+'&rnd982g='+rnd982g+'&trigger='+trig);
			ajax_requester.onreadystatechange = ajax_handleResponse;
			ajax_requester.send(null);
		}
	}
	return false;
}

function ajax_traverse(tree)
{
	if (tree.hasChildNodes())
	{
		alert(tree.tagName);
		var nodes=tree.childNodes.length;
		for (i = 0; i < tree.childNodes.length; i++)
			ajax_traverse(tree.childNodes(i));
	}
	else
		alert(tree.text);
}

function ajax_replaceSection(elId,textStr,noProgressIndicator)
{
	if (document.getElementById(elId))
	{
		if (false && noProgressIndicator && noProgressIndicator == true)
		{
			var outStrs = new Array();
			var outCount = new Array();
			var tableLevel = 0;
			var chars = textStr.split('');
			var maxLevels = 0;
			var checkStr = "";
			outStrs[0] = new Array();
			outStrs[0][0] = "";
			outCount[0] = 0;
			for (var i = 0; i < textStr.length; i++)
			{
				if (textStr.length > 6 && textStr.substr(i,6) == "<table")
				{
					tableLevel++;
					if (tableLevel > maxLevels)
					{
						maxLevels = tableLevel;
						outCount[tableLevel] = 0;
						outStrs[tableLevel] = new Array();
					}
					else
					{
						outCount[tableLevel]++;
					}
					outStrs[tableLevel-1][outCount[tableLevel-1]] += "<span id='__ajax_tmp_" + (tableLevel) + "_" + outCount[tableLevel] + "'>";
					outStrs[tableLevel][outCount[tableLevel]] = "";
				}
				if (i > 8 && textStr.substr(i-8,8) == "</table>")
				{
					tableLevel--;
					outStrs[tableLevel][outCount[tableLevel]] += "</span>";
				}
				outStrs[tableLevel][outCount[tableLevel]] += chars[i];
			}
			document.getElementById(elId).innerHTML = "";
			var j = 0;
			for (var k = 0; k <= outCount[j]; k++)
			{
				document.getElementById(elId).innerHTML += outStrs[j][k];
			}
			for (var j = 1; j <= maxLevels; j++)
			{
				for (var k = 0; k <= outCount[j]; k++)
				{
					document.getElementById("__ajax_tmp_" + j + "_" + k).innerHTML = outStrs[j][k];
				}
			}
		}
		if (noProgressIndicator && noProgressIndicator == true)
		{
			document.getElementById(elId).innerHTML = textStr;
   		}
		else
		{
			document.getElementById(elId).innerHTML = textStr.replaceAll("...","&nbsp;&nbsp;<img src='/CMS/images/ajax_indicator.gif' border='0' alt='' />");
		}
	}
}

function ajax_handleResponse()
{
	if (ajax_requester.readyState == 4)
	{
		var response = "";
		var xmlData;
		var xmlDoc = null;
		if (window.ActiveXObject)
		{
			response = ajax_requester.responseText;
			xmlData = new ActiveXObject("Microsoft.XMLDOM");
			xmlData.async = false;
			xmlData.loadXML(response);
			xmlDoc = xmlData.documentElement;
		}
		else if (document.implementation && document.implementation.createDocument)
		{
			response = ajax_requester.responseText;
			xmlDoc = document.implementation.createDocument("","",null);
			var XMLparser = new DOMParser();
			var responseDOM = XMLparser.parseFromString(response,"text/xml");
			var xmlDoc = responseDOM.documentElement;
		}
		if (!xmlDoc || xmlDoc == null)
		{
			alert(response);
		}
		else
		{
			var xmlNodes = xmlDoc.getElementsByTagName("ajax_div");
			var counter;
			var join_counter;
			var currNode;
			var ajaxNodes;
			var elId;
			var elContent;
			for (counter=0; counter<xmlNodes.length; counter++)
			{
				currNode = xmlNodes[counter];
				ajaxNodes = currNode.getElementsByTagName("name");
				elId = ajaxNodes[0].childNodes[0].nodeValue;
				ajaxNodes = currNode.getElementsByTagName("content");
				elContent = "";
				for (join_counter=0; join_counter < ajaxNodes[0].childNodes.length; join_counter++)
				{
					elContent += ajaxNodes[0].childNodes[join_counter].nodeValue;
				}
				elContent = elContent.replaceAll("+"," ");
				elContent = unescape(elContent);
				elContent = elContent.replaceAll("%2B","+");
				ajax_replaceSection(elId,elContent,true);
			}
		}
	}
}

function ajax_getForm(fobj,trig)
{
	var str = "";
	var ft = "";
	var fv = "";
	var fn = "";
	var els = "";
	for(var i = 0;i < fobj.elements.length;i++)
	{
		els = fobj.elements[i];
		ft = els.title;
		fv = els.value;
		fn = els.name;
		if (fn != trig)
		{
			switch(els.type)
			{
				case "text":
				case "hidden":
				case "password":
				case "textarea":
				case "button":
					if (ft == "required" && fv.length < 1)
					{
						alert('Please complete all the required fields on this page before continuing.');
						els.focus();
						return false;
					}
					str += fn + "=" + encodeURIComponent(fv) + "&";
					break; 		
				case "checkbox":
				case "radio":
					if (els.checked)
						str += fn + "=" + encodeURIComponent(fv) + "&";
					break;
				case "select-one":
					str += fn + "=" +
					encodeURIComponent(els.options[els.selectedIndex].value) + "&";
					break;
			}
		}
	}
	//str = str.substr(0,(str.length - 1));
	return str;
}

