
if (typeof(log)=="undefined") {	log=function(msg)	{	alert("LOG ["+arguments.callee+"]: "+msg+" ");	}; if (window!=parent) try {parent.log(msg);}catch(e){}	}

function urlExist(relativeURL, callback)
{
var now = new Date().getTime();
var url = relativeURL+"?nocache="+now;
var ret_val = false; // assume URL is not found

	if (typeof(url)=="undefined")	{ alert("ajax.urlExist: no url passed to urlExist()"); return null;}

	if (document.getElementById)
	{
		x = (window.ActiveXObject) ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
	}
	if (x)
	{
		x.onreadystatechange = function()
		{
			if (x.readyState == 4)
			{
				if (x.status == 200)
				{
//					var headers = x.getAllResponseHeaders();
					eval(callback+"(true)"); // found!
				}
				else {
//					alert("ajax.urlExist: no ok");
					eval(callback+"(false)");
				}
			}
		}
		x.open("HEAD", url, true);
		try {
			x.setRequestHeader('Content-Type','application/x-www-form-urlencoded;charset=ISO-8859-1'); // var charset = "ISO-8859-1"; // UTF-8
			x.setRequestHeader('Accept-Charset','charset=UTF-8');
		}catch (e){}
		x.send("");
	}
	return null;
}

function getFormData(formname)
{
var data = new Array();
	var len = document.forms[formname].elements.length;
	for (var i=0;i<len;i++)
	{
		var element = document.forms[formname].elements[i];
		switch(element.type)
		{
		case "checkbox":
			if (element.checked==true)
				data[element.name] = element.value;
		break;
		case "text":
		case "password":
		case "hidden":
		case "select-one":
			if ((element.name=="Other")&&(element.value==""))
				break;
			data[element.name] = element.value;
		break;
		default:
			alert("ajax.getFormData: Unregistered form input type ("+element.type+") '"+element.name+"' '"+element.value+"'");
		break;
		}
	}
	return data;
}

function fetchWithoutHeadOrTail(id, swirl, url, data, method, nocache, endHead, startTail, altEndHead, debugmode)
{
	var x = false;

	if (typeof(nocache)=="undefined")	nocache = true;
	if (typeof(data)=="undefined")		data = new Array();
	if (typeof(method)=="undefined")	method = "GET";
	var setting = "innerHTML";
	if (typeof(debugmode)=="undefined") debugmode = false;
	var pos = url.indexOf("?");
	if (pos!=-1)
	{
		search = url.substring(pos+1);
		url = url.substring(0, pos);
		var temp_Array = search.split("&")
		var len = temp_Array.length;
		for (var i=0;i<len;i++)
		{
			pos = temp_Array[i].indexOf("=");
			if (pos==-1)
			{
				idx = temp_Array[i];
				v = "";
			}
			else {
				idx = temp_Array[i].substring(0,pos);
				v = temp_Array[i].substring(pos+1);
			}
			if (typeof(data[idx])=="undefined")
			{
				data[idx]= v;
			}
		}
	}

	if (typeof(id)=="undefined")	{ alert("ajax.fetchWithoutHeadOrTail: no id passed to fetchHTML()"); return;}
	if (typeof(url)=="undefined")	{ alert("ajax.fetchWithoutHeadOrTail: no url passed to fetchHTML()"); return;}

	if (nocache && typeof(data['nocache'])=="undefined")
		data['nocache']= (new Date()).getTime();

	var el = document.getElementById(id);
	if (el==null)
	{
		if (debugmode) alert("ajax.fetchWithoutHeadOrTail: Element id='"+id+"' not found");
		return;
	}
	var currentContent = el.innerHTML;

	if (typeof(swirl)=="undefined") { alert("ajax.fetchWithoutHeadOrTail: no swirl passed to fetchHTML()"); return;}
	else if (swirl!="")
	{
		el.innerHTML = swirl;
	}

	if (document.getElementById)
	{
		x = (window.ActiveXObject) ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
	}
	if (x)
	{
		x.onreadystatechange = function()
		{
			var el = document.getElementById(id);
			if (x.readyState == 4 && (x.status == 200))
			{
				if (debugmode) alert("ajax.fetchWithoutHeadOrTail: Code downloaded ("+url+") '"+setting+"'\r\n\r\n'"+x.responseText+"'\r\n\r\n");

				if (x.overrideMimeType) {
					try {
						x.overrideMimeType('text/xml; charset=ISO-8859-1');
					}catch(e){}
				}
				var text = x.responseText;

				var end = 0;
				var len=0;
				var start = text.indexOf(endHead);
				if (start==-1) {
					start = text.indexOf(altEndHead);
				}
				if (start==-1)
				{
					text = "<div class='error'>Failed to find end of head in "+url+" <textarea rows=2 cols=35>"+endHead+"\n"+altEndHead+"</textarea> </div>";
				}
				else {
					end = text.indexOf(startTail);
				}
				if (start != -1)
				{
					if (end!=-1)
						text = text.substring(start, end); // remove text up to and including the first </script> tag
				}

				el.innerHTML += text;
				el.className = "page";
			}
			else {
				// el.innerHTML += "["+url+" "+id+"] ("+"_"+1+")";
			}
		}

		// Handle Params
		var search="";
		var value;
		var i=0;
		for (value in data)
		{
			i++;
			if (i!=1) search+="&";
			search += escape(value)+"="+escape(data[value]);
		}
		var charset = "ISO-8859-1";
		var content_type= 'application/x-www-form-urlencoded; charset='+charset+';';

		if (method.toUpperCase()=="GET")
		{
			x.open(method, url+"?"+search, true);
			search = "";
		}
		else
			x.open(method, url, true);
		try {
			x.setRequestHeader('Content-Type',content_type);
			x.setRequestHeader('Accept-Charset','charset='+charset);
		}catch(e){}
		x.send(search);
	}
}

function assignText(el, text, step)
{
/*	var len = text.length;
	// len=1001;

	var endpos=0;
	for (i=0;(endpos<len);i+=step)
	{
		endpos = (i+step);
		if (endpos>=len)
			endpos = len;

		subtext = text.substring(i, endpos);
		el.innerHTML += subtext;
	}
*/
	el.innerHTML = text;
}

function fetchIntoHTML(id, swirl, url, data, method, nocache, setting, debugmode)
{
	var x = false;
	var loading = document.getElementById("loading");
	if (loading!=null)
	{
//		loading.innerHTML = "Loading Please Wait...";
		loading.className = "loading_display";
	}
	if (typeof(nocache)=="undefined") nocache = true;
	if (typeof(data)=="undefined") data = new Array();
	if (typeof(method)=="undefined") method = "GET";
	if (typeof(setting)=="undefined") setting = "innerHTML";
	else if (setting=="") setting = "innerHTML";
	if (typeof(debugmode)=="undefined") debugmode = false;
	var allowInteraction = true;

	var pos = url.indexOf("?");
	if (pos!=-1)
	{
		search = url.substring(pos+1);
		url = url.substring(0, pos);
		var temp_Array = search.split("&")
		var len = temp_Array.length;
		for (var i=0;i<len;i++)
		{
			pos = temp_Array[i].indexOf("=");
			if (pos==-1)
			{
				idx = temp_Array[i];
				v = "";
			}
			else {
				idx = temp_Array[i].substring(0,pos);
				v = temp_Array[i].substring(pos+1);
			}
			if (typeof(data[idx])=="undefined")
			{
				data[idx]= v;
			}
		}
	}

	// debugmode=true;

	if (typeof(id)=="undefined")		{ if (loading!=null)	loading.className = "loading_hidden";alert("ajax.fetchIntoHTML: no id passed to fetchHTML()"); return;}
	if (typeof(url)=="undefined")	{ if (loading!=null)	loading.className = "loading_hidden";alert("ajax.fetchIntoHTML: no url passed to fetchHTML()"); return;}

	if (nocache && typeof(data['nocache'])=="undefined")
		data['nocache']= (new Date()).getTime();

	var el = document.getElementById(id);
	if (el==null)
	{
		if (debugmode) alert("Element id='"+id+"' not found");
		if (loading!=null)	loading.className = "loading_hidden";
		return;
	}
	var currentContent = el.innerHTML;
	if (typeof(swirl)=="undefined") {
		if (loading!=null)	loading.className = "loading_hidden";
		alert("no swirl passed to fetchHTML()");
		return;
	}
	else if (swirl!="")
	{
		el.innerHTML = swirl;
	}
	if (document.getElementById)
	{
		x = (window.ActiveXObject) ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
	}
	if (x)
	{
		x.onreadystatechange = function()
		{
			if (x.readyState == 4 && (x.status == 200))
			{
				el = document.getElementById(id);
				if (debugmode) alert("Code downloaded ("+url+") '"+setting+"'\r\n\r\n'"+x.responseText+"'\r\n\r\n");

				var text = x.responseText;

				var scr = "";
				var start = x.responseText.indexOf("<script");
				var endScript = "</script>";
				var end = x.responseText.indexOf(endScript);
				if (start != -1)
				{
					var endtag = x.responseText.indexOf(">", start);
					if (end!=-1)
					{
						scr = text.substring(endtag+1, end);
						var text1 = text.substring(0, start); // remove text up to and including the first </script> tag
						var text2 = text.substring(end+endScript.length); // remove text up to and including the first </script> tag
						text = text1+text2;
					}
				}
				if (debugmode) alert("With script removed ("+url+") '"+setting+"'\r\n\r\n"+text);
				if (typeof(log)!="undefined") log("fetchIntoHTML("+url+", '"+setting+"') response with script removed is:\r\n\r\n"+text);

				// alert("Changing "+setting+" to \""+text+"\"");
				if (setting == "innerHTML")
				{
					assignText(el, text, 1000);
				}
				else
					el[setting] = text;
				if (scr!="")
					eval(scr);

			}
			if ((swirl!="") && (setting!="innerHTML")) // If we setup a swirl
				el.innerHTML = currentContent;	// retore original content
			if (loading!=null)	loading.className = "loading_hidden";
		}

		// Handle Params
		var search="";
		var i=0;
		for (value in data)
		{
			i++;
			if (i!=1) search+="&";
			search += escape(value)+"="+escape(data[value]);
		}

		if (method.toUpperCase()=="GET")
		{
			x.open(method, url+"?"+search, allowInteraction);
			search = "";
		}
		else
			x.open(method, url, allowInteraction);
		try {
			x.setRequestHeader('Content-Type','application/x-www-form-urlencoded;charset=ISO-8859-1');
		}catch (e){}
		x.setRequestHeader('Accept-Charset','charset=UTF-8');
		x.send(search);
	}
}
function fetchFromServer(url, data, onload, g_varname, outFormat, onfail, method, nocache, debugmode)
{
	var x = false;
	if (typeof(url)=="undefined") return null;
	if (typeof(nocache)=="undefined") nocache = true;
	if (typeof(data)=="undefined") data = new Array();
	if (typeof(method)=="undefined") method = "GET";
	if (typeof(debugmode)=="undefined") debugmode = false;
	var allowInteraction = true;

	var pos = url.indexOf("?");
	if (pos!=-1)
	{
		search = url.substring(pos+1);
		url = url.substring(0, pos);
		var temp_Array = search.split("&")
		var len = temp_Array.length;
		for (var i=0;i<len;i++)
		{
			pos = temp_Array[i].indexOf("=");
			if (pos==-1)
			{
				idx = temp_Array[i];
				v = "";
			}
			else {
				idx = temp_Array[i].substring(0,pos);
				v = temp_Array[i].substring(pos+1);
			}
			if (typeof(data[idx])=="undefined")
			{
				data[idx]= v;
			}
		}
	}
	if (typeof(url)=="undefined")	{ return null;}
	if (nocache && typeof(data['nocache'])=="undefined")
		data['nocache']= (new Date()).getTime();

	if (document.getElementById)
	{
		x = (window.ActiveXObject) ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
	}
	else return null;	// unsupported browser
	
	x.onreadystatechange = function()
	{
		if (x.readyState == 4)
		{
			switch (outFormat)
			{
			case "text":
				eval(g_varname+"=x.responseText");
			break;
			case "xml":
				eval(g_varname+"=x.responseXML");
			break;
			case "http":
				eval(g_varname+"=x");
			break;
			}
			
			if (x.status < 400)
			{
				if (typeof(onload) != "undefined")
					eval(onload);
			}
			else if ((x.status >= 400)&&(x.status < 500))
			{
				if (typeof(onfail) != "undefined")
					eval(onfail);
			}
			else if (x.status >= 500)
			{
				if (typeof(onfail) != "undefined")
					eval(onfail);
			}
		}
	}

	// Handle Params
	var search="";
	var i=0;
	for (value in data)
	{
		i++;
		if (i!=1) search+="&";
		search += escape(value)+"="+escape(data[value]);
	}

	if (method.toUpperCase()=="GET")
	{
		x.open(method, url+"?"+search, allowInteraction);
		search = "";
	}
	else
		x.open(method, url, allowInteraction);
	try {
		x.setRequestHeader('Content-Type','application/x-www-form-urlencoded;charset=ISO-8859-1');
		x.setRequestHeader('Accept-Charset','charset=UTF-8');
	}catch(e){}
	x.send(search);

	return true;
}
if (typeof(verboseLoad)!="undefined") if (verboseLoad==true) log("ajax.js loaded");
