// JavaScript Document
var blnDomReady = false;

function domReady() {
	blnDomReady = true;
}
window.onload = domReady;

var blnBusy = false;
function getAjaxObject() {
	var xmlhttp=false;
	/*@cc_on @*/
	/*@if (@_jscript_version >= 5)
	// JScript gives us Conditional compilation, we can cope with old IE versions.
	// and security blocked creation of the objects.
	 try {
	  xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
	 } catch (e) {
	  try {
	   xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
	  } catch (E) {
	   xmlhttp = false;
	  }
	 }
	@end @*/
	if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
		try {
			xmlhttp = new XMLHttpRequest();
		} catch (e) {
			xmlhttp=false;
		}
	}
	if (!xmlhttp && window.createRequest) {
		try {
			xmlhttp = window.createRequest();
		} catch (e) {
			xmlhttp=false;
		}
	}
	
	return xmlhttp;
}

function processResponse(objResponse, responseProcedure, status, checkResponseText) {
	try {
		if (checkResponseText && checkResponseText.indexOf('<!--LOGIN_PAGE-->') > 0){
			// Session Timed out
			top.document.location.reload();
		}
		else if (checkResponseText && checkResponseText.indexOf('<!--NO_PRIVILEGE-->') > 0){
			// No Privileges
			alert('You do not have the necessary privileges to access this area of the website!\nShould this be in error, please contact your administrator.');
		}
		else
			eval(responseProcedure + '(objResponse,status)');
	}
	catch(ex) {
		alert('An unknown error occurred.\nError: ' + ex.toString());
	}
	hideWaiting(99);
	blnBusy = false;
}

function getURL(URL, responseProcedure, blnReturnXML) {
	if (!blnBusy) {
		blnBusy = true;
		showWaiting(99);
		var xmlhttp = getAjaxObject();
		
		if (!xmlhttp) {
			processResponse('<div class="alert">An unknown error occurred.</div>', responseProcedure);
			return false;	
		}
		
		var cachekiller = Math.random() * 2147483647;
		
		xmlhttp.open("GET", URL + '&' + cachekiller,true);
		xmlhttp.onreadystatechange=function() {
			if (xmlhttp.readyState==4) {
				if (blnReturnXML)
					processResponse(xmlhttp.responseXML, responseProcedure, xmlhttp.status, xmlhttp.responseText);
				else
					processResponse(xmlhttp.responseText, responseProcedure, xmlhttp.status, xmlhttp.responseText);
			}
		}
		xmlhttp.send(null)
	}
	else {
		if (typeof blnReturnXML == 'undefined')
			blnReturnXML = false;
			
		setTimeout('getURL(\'' + URL.replace(/'/g,'\'') + '\',\'' + responseProcedure + '\', ' + blnReturnXML + ');', 10);
	}
}

function postURL(URL, FormVars, responseProcedure, blnReturnXML) {
	if (!blnBusy) {
		blnBusy = true;
		showWaiting(99);
		var xmlhttp = getAjaxObject();
		
		if (!xmlhttp) {
			processResponse('<div class="alert">An unknown error occurred.</div>', responseProcedure);
			return false;	
		}
		
		var cachekiller = Math.random() * 2147483647;
		
		xmlhttp.open("POST", URL + '&' + cachekiller,true);
	
		xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		xmlhttp.setRequestHeader("Content-length", FormVars.length);
		xmlhttp.setRequestHeader("Connection", "close");
	
		xmlhttp.onreadystatechange=function() {
			if (xmlhttp.readyState==4) {
				if (blnReturnXML)
					processResponse(xmlhttp.responseXML, responseProcedure, xmlhttp.status, xmlhttp.responseText);
				else
					processResponse(xmlhttp.responseText, responseProcedure, xmlhttp.status, xmlhttp.responseText);
			}
		}
		xmlhttp.send(FormVars)
	}
	else {
		if (typeof blnReturnXML == 'undefined')
			blnReturnXML = false;
			
		setTimeout('postURL(\'' + URL.replace(/'/g,'\'') + '\', \'' + FormVars.replace(/'/g,'\'') + '\',\'' + responseProcedure + '\', ' + blnReturnXML + ');', 10);
	}
}

var arrForms = new Array();
function postFORM(FORM, responseProcedure, blnReturnXML) {
	var i = arrForms.length;		
	if (typeof FORM != 'object') {
		i = FORM;
		FORM = arrForms[i];
	}

	if (!blnBusy) {
		blnBusy = true;
		showWaiting(99);
		var xmlhttp = getAjaxObject();
		
		if (!xmlhttp) {
			processResponse('<div class="alert">An unknown error occurred.</div>', responseProcedure);
			return false;	
		}
		
		var cachekiller = Math.random() * 2147483647;
		var FormVars = getFormVars(FORM);
		xmlhttp.open("POST", FORM.action + '&' + cachekiller,true);

		xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		xmlhttp.setRequestHeader("Content-length", FormVars.length);
		xmlhttp.setRequestHeader("Connection", "close");
	
		xmlhttp.onreadystatechange=function() {
			if (xmlhttp.readyState==4) {
				if (blnReturnXML)
					processResponse(xmlhttp.responseXML, responseProcedure, xmlhttp.status, xmlhttp.responseText);
				else
					processResponse(xmlhttp.responseText, responseProcedure, xmlhttp.status, xmlhttp.responseText);
			}
		}
		xmlhttp.send(FormVars)
	}
	else {
		if (typeof blnReturnXML == 'undefined')
			blnReturnXML = false;
		
		arrForms[i] = FORM;
		setTimeout('postFORM(' + i + ',\'' + responseProcedure + '\', ' + blnReturnXML + ');', 10);
	}
}

//!!!!!!!!!!!!!!!!!! PRIVATE FUNCTIONS !!!!!!!!!!!!!!!!!!!!!!!!
function addFormVariable(arrFormVars, name, value) { 
	var blnFound = false;
	if (arrFormVars[0])
		var i = arrFormVars.length;
	else
		var i = 0;
		
	for (var k = 0; k < arrFormVars.length; k++) {
		if (arrFormVars[k])
			if (arrFormVars[k].substring(0, name.length + 1) == name + '=')
				blnFound = true;
	}
	if (!blnFound) {
		arrFormVars[i] = name + '=' + escape(value).replace(/\//g,'%2F');
	}
}

function processFormVariable(arrFormVars, objFormField) {
	if (objFormField.tagName == 'INPUT' || objFormField.tagName == 'SELECT' || objFormField.tagName == 'TEXTAREA') {
		switch (objFormField.type) {
			case 'radio': {
				if (objFormField.checked)
					addFormVariable(arrFormVars, objFormField.name, objFormField.value);
				break;
			}
			case 'checkbox': {
				if (objFormField.checked)
					addFormVariable(arrFormVars, objFormField.name, objFormField.value);
				break;
			}
			default: {
				addFormVariable(arrFormVars, objFormField.name, objFormField.value);
				break;
			}
		}
	}
}

function getFormVars(objForm) {
	var arrFormVars = new Array(1);
	var strExtraURLVars = '';
	for (var l = 0; l < objForm.elements.length; l++) {
		if (objForm.elements[l]) {
			objField = objForm.elements[l];
			if (typeof objField != 'undefined' && typeof objField != 'function' && objField != null)
				if (typeof objField.tagName != 'undefined') 
					processFormVariable(arrFormVars, objField);
				else if (typeof objField.length != 'undefined') {
					if (typeof objField.nodeName == 'undefined')
						for (j = 0; j < objField.length; j++) {
							if (typeof objField[j].tagName != 'undefined')
								processFormVariable(arrFormVars, objField[j]);
						}
				}
		}
	}
	
	return arrFormVars.join('&');
}

var objImgPreload = new Image();
objImgPreload.src = "images/aniwait.gif";

ypos=0; xpos=0;
ns=(!document.all); 
ie=(document.all); 

function Mouse(evnt) {
	ypos = (!document.all)?evnt.pageY:event.y;
	xpos = (!document.all)?evnt.pageX:event.x; 
} 

if (ns)
	document.captureEvents(Event.MOUSEMOVE);
if (ns)
	window.onmousemove=Mouse; 
if (ie)
	document.onmousemove=Mouse; 

function MoveTheDiv(objDiv){
	objDiv.style.top=ypos + 15 + 'px';;
	objDiv.style.left=xpos + 15 + 'px';; 
} 

function followCursor(id) {
	var objWaitingDiv = document.getElementById('divWaiting' + id);
	if (objWaitingDiv) {
		MoveTheDiv(objWaitingDiv);
		if (objWaitingDiv.style.display != 'none')
			setTimeout('followCursor(' + id + ');', 10);
	}
}

function showWaiting(id) {
	objDiv = document.createElement('div');
	objDiv.id = 'divWaiting' + id;
	objDiv.style.position = 'absolute';
	objDiv.style.top = '0px';
	objDiv.style.left = '0px';
	objDiv.style.width = '60px';
	objDiv.style.height = '30px';
	objDiv.style.display = 'block';
	objDiv.innerHTML = '<img src="images/aniwait.gif" width="16" height="16" /><br>Please wait!!';
	if (blnDomReady) {
		document.getElementsByTagName('body').item(0).appendChild(objDiv);
		setTimeout('followCursor(' + id + ');', 10);
	}
}

function hideWaiting(id) {
	var objWaitingDiv = document.getElementById('divWaiting' + id);
	while (objWaitingDiv) {
		document.body.removeChild(objWaitingDiv);
		objWaitingDiv = document.getElementById('divWaiting' + id);
	}
}