var request;
var ignore_xmlhttprequest_response = false;
var clockID = 0;
var refreshPageSectionID = 0;
function loadXMLDoc(url) 
{
/*
	if ( request && request.readyState == 1 ){				// still loading a request so abort
			return;
	}
*/	
	url = url + "&is_ajax_request=1";						// inform script this is an ajax request
	// branch for native XMLHttpRequest object
	if (window.XMLHttpRequest) {
			request = new XMLHttpRequest();
			request.onreadystatechange = processRequestChange;
			request.open("GET", url , true);
			request.send(null);
	// branch for IE/Windows ActiveX version
	} else if (window.ActiveXObject) {
			request = new ActiveXObject("Microsoft.XMLHTTP");
			if (request) {
					request.onreadystatechange = processRequestChange;
					request.open("GET", url, true);
					request.send();
			}
	}
}
function processRequestChange() 
{
	// only if req shows "complete"
	if ( ignore_xmlhttprequest_response ){
		ignore_xmlhttprequest_response = false;		// discard
	}
	else{
		try{
			if (request.readyState == 4) {							// Completed state= ready to handle response?
				// only process if status is OK
				if (request.status == 200) {
					try{
						eval(request.responseText);
					}
					catch(e){
						alert(e + ': ' + request.responseText);	// display javascript error in alert dialogue
					}
				}
			}
		}
		catch(e){
		}
	}
}
function encodeHtml(value) {
 encodedHtml = escape(value);
 encodedHtml = encodedHtml.replace(/\//g,"%2F");
 encodedHtml = encodedHtml.replace(/\?/g,"%3F");
 encodedHtml = encodedHtml.replace(/=/g,"%3D");
 encodedHtml = encodedHtml.replace(/&/g,"%26");
 encodedHtml = encodedHtml.replace(/@/g,"%40");
 return encodedHtml;
} 
/**
*	buildFormFieldList(form_name)
*
*	So that ajax validation calls	include all the fields on the current form to allow for
* cross-field validation.
*
* @access public
* @param form HTML form object
* @return string Comma-dilimited list of fieldname/value pairs formatted for use in an HTTP
*	GET query
*/
function buildFormFieldList(form)
{
	var field_list = '';
	var value = '';
	
	for (i = 0; i < form.elements.length; i++){
		var element = form.elements[i];

		if (element.type == 'checkbox'){ // checkboxes are a pain in the arse!
			if (element.checked) {
				value = 1;
			}
			else{
				value = 0;
			}
		}
		else{				// other element
			value = element.value
		}
		field_list = field_list + 
			"&" + element.name + "="  + encodeHtml(value);
	}
	return field_list;
}
function buildFormDisplayFieldList(form)
{
	var field_list = '';
	var value = '';
	
	for (i = 0; i < form.elements.length; i++){
		var element = form.elements[i];
		if (element.checked) {
			field_list = field_list + "&" + element.name + "="  + "1";
		}
	}
	return field_list;
}
/*
* Call if we do not want to respond to the next response
*/
function ignoreXMLHTTPRequestResponse(){
	ignore_xmlhttprequest_response = true;
	pause(30);
	return;
}
/*
* This function will not return until (at least)
* the specified number of milliseconds have passed.
* It does a busy-wait loop.
*/
function pause(numberMillis) {
		var now = new Date();
		var exitTime = now.getTime() + numberMillis;
		while (true) {
				now = new Date();
				if (now.getTime() > exitTime)
						return;
		}
}
function ajax_table_sort(page, order_by){
		loadXMLDoc(page +	"?ajax_table_update=1" + "&order_by=" + order_by );
}
function getFirstFocusElement(form)
{
	var found = false;
	for (i = 0; i < form.elements.length; i++){
		var element = form.elements[i];
		if ( element.value != '' ){
			found = true;
			return element.name;
		}
	}
}
function setJavascriptIsEnabled()
{
	for (i = 0; i < document.forms.length; i++){
		try{
			document.forms[i].javascript_is_enabled.value='1';
		}
		catch(e){				// in case field does not exist
		}
	}
}
function setAjaxIsEnabled()
{
	/* can we create an XMLHttpRequest object? */
	
	if (window.XMLHttpRequest) {
			request = new XMLHttpRequest();
	} else if (window.ActiveXObject) {
			request = new ActiveXObject("Microsoft.XMLHTTP");
	}

	if (request) {	// if so, then try to set the flag on the login form
		for (i = 0; i < document.forms.length; i++){
			try{
				document.forms[i].ajax_is_enabled.value='1';
			}
			catch(e){				// in case field does not exist
			}
		}
	}
}
function saveUserSession(user_id)
{
	// this doesn't actually log the user out (see logout.php code)
	loadXMLDoc( "logout.php?user_id=" + user_id );
}
function ajaxIsEnabled()
{
	return request;
}
function lPad(number,length) {
    var str = '' + number;
    while (str.length < length)
        str = '0' + str;
    return str;
}
function updateClock() {
	if(clockID) {
		clearTimeout(clockID);
		clockID  = 0;
	}

	var tDate = new Date();
	
	var im = document.getElementById('clock');

	im.innerHTML = 
		tDate.getDate() + "/" +
		+ eval(tDate.getMonth() + 1) + "/" +
		+ tDate.getYear() + " "
		+ lPad( tDate.getHours(), 2 ) + ":" 
		+ lPad( tDate.getMinutes(), 2 );
   
	clockID = setTimeout("updateClock()", 1000);
}
function refreshPageSection(){
	loadXMLDoc( "index.php?auto_folder_refresh=1&folder_refresh=1" );
	refreshPageSectionID	= setTimeout("refreshPageSection()", 10000); // 10 seconds
}
function startPageProcesses() {
	/* if there is a clock on the page, start it */
	try {
		var clock_exists	= document.getElementById('clock');
		clockID 					= setTimeout("updateClock()", 500);
	}
	catch(e){
	}
	
	refreshPageSectionID	= setTimeout("refreshPageSection()", 5000);	// 5 seconds
}
function killPageProcesses() {
	if(clockID) {
		clearTimeout(clockID);
		clockID  = 0;
	}
	if(refreshPageSectionID) {
		clearTimeout(refreshPageSectionID);
		refreshPageSectionID  = 0;
	}
}