/* ============= john's big hairy form validator [v1.7] ============= */
function RequiredFields(oForm) {
	var bCompleted = true;
	var bValidEmail = true;
	var oField;
	var oEmailRegExp = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,})+$/;
	var bChecked = false;
	
	for (var i=0;i<aRequired.length;i++) {
		oField = oForm.elements[aRequired[i]];
		
		try{
			if (oField.type=='text'||oField.type=='textarea'||oField.type=='password'||oField.type=='hidden') {
				if (oField.value.length==0) {
					bCompleted = false;
					highlight(oField);
				}
				else if (oField.name=='email') {
					if (!oEmailRegExp.test(oField.value)) {
						bValidEmail = false;
						highlight(oField);
					}
				}
			}
			else if (oField.type=='radio') {
	
				bChecked = false;
				for (j=0;j<oField.length;j++) {
					if (oField[j].checked) {
						bChecked = true;
					}
				}
				if (!bChecked) {
					highlight(oField);
					bCompleted = false;
				}
			}
			else if (oField.type=='select'||oField.type=='select-one') {
				if (oField.options[oField.selectedIndex].value.length==0) {
					bCompleted = false;
					highlight(oField);
				}
			}
			else if (oField.type=='checkbox') {
				if (!oField.checked) {
					bCompleted = false;
					highlight(oField);
				}
			}
			else {
				bChecked = false;
				for (j=0;j<oField.length;j++) {
					if (oField[j].checked) {
						bChecked = true;
					}
				}
				if (!bChecked) {
					highlight(oField);
					bCompleted = false;
				}
			}
		}
		catch(err){
		}
	}
	if (!bCompleted) {
		alert('Please complete all required fields');
	}
	else if (!bValidEmail) {
		alert('Please check your email address');
	}
	var bResult = bCompleted && bValidEmail;

	if (bResult) {
		// loop through fields and find submit buttons then disable....
		// we have an issue where a disabled field is not passed back in the form so need to check that only one submit button...
		var aSubmitButtons = new Array();
		for (i=0;i<oForm.elements.length;i++) {
			if (oForm.elements[i].type=='submit') {
				aSubmitButtons[aSubmitButtons.length] = oForm.elements[i];
;
			}
		}
		if (aSubmitButtons.length==1) {
			// only one submit button so OK to disable...
			aSubmitButtons[0].style.cursor = 'wait';
			aSubmitButtons[0].disabled = true;	
			aSubmitButtons[0].value = "sending";
		}
		else {
			// more than one submit button so disable each psuedo style...
			for (i=0;i<aSubmitButtons.length;i++) {
				aSubmitButtons[i].style.color = "#5F5F5F";
				aSubmitButtons[i].style.backgroundColor = "#F4F4F4";
				aSubmitButtons[i].style.cursor = 'wait';
				aSubmitButtons[i].value = "sending";
			}
		}
	}
	return bResult;
}

/* ============= john's highlight form elements [v1.2] ============= */
function highlight(oField) {
	// pick mode - highlight table cell (true) or form field (false)...
	var bHighlightTd = true;
	var sStyleParentBorder = '';
	var sStyleParentBackgroundColor = '';
	var sStyleFieldBorder = '1px solid #FF1A32';
	var sStyleFieldBackgroundColor = '#EFEEF4';
	
	if (oField.type=='select'||oField.type=='select-one'||oField.type=='text'||oField.type=='textarea'||oField.type=='password') {
		if (bHighlightTd && oField.id) {
			if (sStyleParentBackgroundColor.length) {
				document.getElementById(oField.id).parentNode.style.backgroundColor = sStyleParentBackgroundColor;
			}
			if (sStyleParentBorder.length) {
				document.getElementById(oField.id).parentNode.style.border = sStyleParentBorder;
			}
			if (sStyleFieldBackgroundColor.length) {
				document.getElementById(oField.id).style.backgroundColor = sStyleFieldBackgroundColor;
			}
			if (sStyleFieldBorder.length) {
				document.getElementById(oField.id).style.border = sStyleFieldBorder;
			}
		}
		else {
			if (sStyleFieldBackgroundColor.length) {
				oField.style.backgroundColor = sStyleFieldBackgroundColor;
			}
			if (sStyleFieldBorder.length) {
				oField.style.border = sStyleFieldBorder;
			}
		}
	}
	else {
//		oField.parentNode.style.backgroundColor = 'lightyellow';
//		oField.parentNode.style.border = '1px solid red';
		// radio...
		for (var i=0;i<oField.length;i++) {

			if (bHighlightTd && oField[i].id) {
				if (sStyleParentBackgroundColor.length) {
					document.getElementById(oField[i].id).parentNode.style.backgroundColor = sStyleParentBackgroundColor;
				}
				if (sStyleParentBorder.length) {
					document.getElementById(oField[i].id).parentNode.style.border = sStyleParentBorder;
				}
				if (sStyleFieldBackgroundColor.length) {
					oField[i].style.backgroundColor = sStyleFieldBackgroundColor;
				}
				if (sStyleFieldBorder.length) {
					oField[i].style.border = sStyleFieldBorder;
				}
			}
			else {
				if (sStyleFieldBackgroundColor.length) {
					oField[i].style.backgroundColor = sStyleFieldBackgroundColor;
				}
				if (sStyleFieldBorder.length) {
					oField[i].style.border = sStyleFieldBorder;
				}
			}
		}
	}
//	alert(oField.name);
}
//var aRequired = new Array();


/* TREE MENU BITS */
if (!document.getElementById && document.all) { 
	document.getElementById = new Function('id', 'return document.all[id]') 
}


function toggle(oElement, evnt) {
	// v3.1
	var aImagePath = new Array();
	var sImageName = '';

	if (evnt) {
		if (!document.all) {
			var oSourceElement = evnt.target;
		}
		else {
			var oSourceElement = evnt.srcElement;
		}
	}
	else {
		oSourceElement = oElement;
	}

	if (oSourceElement) {
		if (oSourceElement.tagName == 'A') {
			document.cookie = 'expandmenu=' + oElement.id;
		}
		else if (oElement.childNodes.length) {
			for (var i=0;i<oElement.childNodes.length;i++) {
				if (oElement.childNodes[i].tagName == 'IMG') {
					aImagePath = oElement.childNodes[i].src.split('/');
					sImageName = aImagePath[aImagePath.length-1];
					if (sImageName == 'plus.gif') {
						oElement.childNodes[i].src = 'images/admin/minus.gif';
					}
					else {
						oElement.childNodes[i].src = 'images/admin/plus.gif';
					}
				}
				else if (oElement.childNodes[i].tagName == 'DIV') {
					if (oElement.childNodes[i].style.display.length) {
						oElement.childNodes[i].style.display = '';
					}
					else {
						oElement.childNodes[i].style.display = 'none';
					}
				}
			}
		}
		else {
			document.cookie = 'expandmenu=' + oElement.id;
		}
	}
}
 

function expandTree() {
	var sCookieValue = getCookie('expandmenu');
	if (sCookieValue && sCookieValue.length) {
		var oElement = document.getElementById(sCookieValue);
		toggle(oElement, '');
 	}
}
 
function getCookie(sKey) {
  var oCookie = document.cookie;
  var sKey = sKey + "=";
  var iBegin = oCookie.indexOf("; " + sKey);
  if (iBegin == -1) {
    iBegin = oCookie.indexOf(sKey);
    if (iBegin != 0) {
   return null;
  }
  } 
 else {
    iBegin = iBegin + 2;
 }
  var iEnd = oCookie.indexOf(";", iBegin);
  if (iEnd == -1) {
    iEnd = oCookie.length;
 }
  return unescape(oCookie.substring(iBegin + sKey.length, iEnd));
}


 
function PopUp(sHref, sName, sFeatures) {
		if (!sFeatures.length) {
				sFeatures = "directories=no,height=400,location=no,menubar=no,resizable=yes,scrollbars=no,status=no,toolbar=no,width=400";
		}
		var newWin = window.open(sHref, sName, sFeatures);
		return false;
}

function addToFavourites() {
	if (navigator.userAgent.indexOf("Opera")>-1) {
		window.alert('The Opera web browser does not support this feature.');
	}
	else if (document.all&&navigator.userAgent.indexOf("Opera")<0) {
		window.external.AddFavorite(location.href, document.title);
	}
	else {
		window.alert('Your browser does not support this feature.\nPressing Ctrl + D will bookmark this page.');
	}
}


function FCKeditor_OnComplete( editorInstance ) {
	// this function is called when enter has finished loading...
	if (document.getElementById('editor_loading')) {
		document.getElementById('editor_loading').style.display = 'none';
	}
}

function FCKeditor_GetLength( editorInstance ) {
	// This functions shows that you can interact directly with the editor area
	// DOM. In this way you have the freedom to do anything you want with it.

	// Get the editor instance that we want to interact with.
	var oEditor = FCKeditorAPI.GetInstance(editorInstance) ;

	// Get the Editor Area DOM (Document object).
	var oDOM = oEditor.EditorDocument ;

	var iLength ;

	// The are two diffent ways to get the text (without HTML markups).
	// It is browser specific.

	if ( document.all )		// If Internet Explorer.
	{
		iLength = oDOM.body.innerText.length ;
	}
	else					// If Gecko.
	{
		var r = oDOM.createRange() ;
		r.selectNodeContents( oDOM.body ) ;
		iLength = r.toString().length ;
	}
	return iLength;
}

/*
-------------------------------------------------------- 
KeepSessionAlive [v1.0]
-------------------------------------------------------- 
need to add to calling page:-
	var sTimeoutUrl = 'http://www.mydomain.com/myscript';
	addWindowOnload(KeepSessionAlive);
-------------------------------------------------------- 
*/
function KeepSessionAlive() {
	// prevent session from server timeout...
	//var sTimeoutUrl = 'http://domain/index.cfm/keyword/p_Session.Home';
	var oXmlReq = null;
    if (window.XMLHttpRequest) {
		oXmlReq = new XMLHttpRequest();
	}
    else if (window.ActiveXObject) {
		oXmlReq = new ActiveXObject("Microsoft.XMLHTTP");
	}
    if (oXmlReq!=null) {
		oXmlReq.open ('GET', sTimeoutUrl, true);
		oXmlReq.send (null);
	}
	KeepSessionAliveTimer = setTimeout("KeepSessionAlive()", 10 * 60000);
}


/*
-------------------------------------------------------- 
-------------------------------------------------------- 
Event Handling...
-------------------------------------------------------- 
-------------------------------------------------------- 
*/

/*
-------------------------------------------------------- 
addEvent [v1.0]
--------------------------------------------------------
usage: 
	addEvent(document.getElementById('tb1'), 'keyup', handleKeyUp, false);
	addEvent(document.getElementById('tb1'), 'keyup', function(){handleKeyUp(your, parms, here)}, false);
--------------------------------------------------------
*/
function addEvent(element, eventType, func, capt) {
	if (element.addEventListener) {
		element.addEventListener(eventType, func, capt);
	}
	else if (element.attachEvent) {
		var r = element.attachEvent('on' + eventType, func);
		return r;
	} 
	else {
		if (element['on' + eventType]==null) {
			element['on' + eventType] = func;
		}
		else {
			oldEventType = element['on' + eventType];
			element['on' + eventType] = function(e) {
				oldEventType(e);
				element['on' + eventType][func]();
			}
		}
	}
}


/*
--------------------------------------------------------
addWindowOnload [v1.0]
handle multiple window onload events
--------------------------------------------------------
usage: 
	addWindowOnload(function(){ myFunctionName('myArgument') });
	addWindowOnload(myFunctionName);
--------------------------------------------------------
*/
function addWindowOnload(func){
	addEvent(window, 'load', func, false);
}