// Multiple ajax request handler
// Chris Monk - July 2008, done properly
// Ashley has had a go in the mean time Aug 2008
//
//
// url = url to invoke, div = target div for output

var results = new Array();
var requests = new Array();
var statuses = new Array();

statuses[0] = 1;

function makeajax() {

	var free = statuses.length;

	for (var i=0; i<statuses.length; i++) {

		if (statuses[i] == 1) {

			statuses[i] = 0;
			free = i;

			break;
		}
	}

	statuses[free] = 0;

	try {
		requests[free] = new XMLHttpRequest();
	} catch (e) {
		try {
			requests[free]= new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try {
				requests[free] = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e) {
				results[free].innerHTML = "Not available.";
			}
		}
	}

	return free;

}

// Status set start text
	var start_text = "";

function change_status_bar(doc_title) {
	this.status = doc_title
}

function doajax(url, div, loading, failed_connection, page_titles, show_loading) {

	var which = makeajax();
	
	// do default loading output
	if (loading == undefined ||loading == 'undefined') {
		loading = '<table height="100%" width="100%"><tr><td align="center"><img src="./images/loading.gif"></td></tr></table>';
	}
	
	// do default failed error
	if (failed_connection == undefined || failed_connection == 'undefined') {
		failed_connection = '<table height="100%" width="100%"><tr><td align="center"><h3>Connection Failed</h3>check your interweb</td></tr></table>';
	}

	results[which] = document.getElementById(div);
	requests[which].open("GET", url, true);
	
	if (show_loading != false) {
		// just show loading, till it is
		results[which].innerHTML = loading;
	}

	if (page_titles != false) {
		// show loading
		change_status_bar('Loading...');	
	}
	// do ready state stuff
	requests[which].onreadystatechange = function() {
		if (requests[which].readyState == 4) {
			if (requests[which].status == 200) {
				// all is ok, so push output
				results[which].innerHTML = requests[which].responseText;
				if (page_titles != false) {
					change_status_bar('Loaded OK');
					var t1=setTimeout("change_status_bar('"+start_text+"')", 3000);
				}
			} else {
				// it's all gone pete tong
				results[which].innerHTML = failed_connection;
				if (page_titles != false) {
					change_status_bar('Connection Failed!');
					var t1=setTimeout("change_status_bar('"+start_text+"')", 3000);
				}
				statuses[which] = 1;
				requests[which] = null;
			}
		} 
	};
	requests[which].send(null);
}

// get all form elements for obj
function get(script, obj, mydiv, loading) {
  var getstr = "?";
  for (i=0; i<obj.childNodes.length; i++) {
	 if (obj.childNodes[i].tagName == "INPUT") {
		if (obj.childNodes[i].type == "text") {
		   getstr += obj.childNodes[i].name + "=" + obj.childNodes[i].value + "&";
		}
		if (obj.childNodes[i].type == "checkbox") {
		   if (obj.childNodes[i].checked) {
			  getstr += obj.childNodes[i].name + "=" + obj.childNodes[i].value + "&";
		   } else {
			  getstr += obj.childNodes[i].name + "=&";
		   }
		}
		if (obj.childNodes[i].type == "radio") {
		   if (obj.childNodes[i].checked) {
			  getstr += obj.childNodes[i].name + "=" + obj.childNodes[i].value + "&";
		   }
		}
	 }   
	 if (obj.childNodes[i].tagName == "SELECT") {
		var sel = obj.childNodes[i];
		getstr += sel.name + "=" + sel.options[sel.selectedIndex].value + "&";
	 } 
  }
  doajax(script + getstr, mydiv, loading);
}

// make sure the php page you are polling has cache control off
var i = 0;
function pollpage(url, div, milliseconds, loading, failed_connection) {
	// do default loading output
	if (loading == undefined || loading == 'undefined') {
		doajax(url, div, loading, failed_connection, false, false);
	}
	else {
		doajax(url, div, loading, failed_connection, false);
	}
		var looptimer = setTimeout("pollpage('"+url+"', '"+div+"', '"+milliseconds+"', '"+loading+"', '"+failed_connection+"')", milliseconds);
}

// live search with delay
var search_timeout = undefined;

function livesearch(search_text, target, timeout) {
	if(search_timeout != undefined) {
		clearTimeout(search_timeout);
	}
	search_timeout = setTimeout(function() {
		get('./livesearch.php', search_text, target, '<table height="100%" width="100%"><tr><td align="center"><img src="./images/loading5.gif"></td></tr></table>');
		search_timeout = undefined;
	}, timeout);
}