// JavaScript Document - Copyright Harry Botha 2009

var validInputClassName = "input";
var invalidInputClassName = "input_invalid";

var validCBClassName = "input";
var invalidCBClassName = "input_invalid";

var validTextareaClassName = "input";
var invalidTextareaClassName = "input_invalid";

var validSelectClassName = "select";
var invalidSelectClassName = "select_invalid";


 
if (!window.$) {
	function $(argId) {
		return document.getElementById(argId);
	}
}

function openWindow(argName, argWidth, argHeight, argUrl)
{
    var owtop = ((window.screen.availHeight - argHeight) / 2);
    var owleft = ((window.screen.availWidth - argWidth) / 2);
	
    window.open(argUrl, argName, "width=" + argWidth + ",height=" + argHeight + ",left=" + owleft + ",top=" + owtop + ",scrollbars=yes,resizable=yes");
}


function selectCheckboxes(argName, argChecked)
{
	var chkElements = document.getElementsByTagName("INPUT");
	
	for (i = 0; i < chkElements.length; i++)
	{
		var checkElm = chkElements[i];
		
		if (checkElm.type == "checkbox" && argName == checkElm.name)
		{
			checkElm.checked = argChecked;
		}
	}
}

function validateForm(argForm, argInvasive) {
			
		var formIsValid = true;
		var invalidFormElements = "";
		var firstInvalidElement = null;
		
		var cbChangeSurroundingLabelClass = true;
		//var inputObjs = concat_collection(argForm.getElementsByTagName("INPUT"), argForm.getElementsByTagName("TEXTAREA"));	
		var inputObjs = argForm.elements;

		for (i = 0; i < inputObjs.length; i++) {
			
			var inputObj = inputObjs[i];
			validateForm_elementValid(inputObj, true);


			if (inputObj.getAttribute("rel")) {
				if (inputObj.getAttribute("rel").indexOf("val") > -1 && !inputObj.disabled) {
					
					if (inputObj.getAttribute("rel").split(":")[1].substring(0, 4) == "text" && inputObj.getAttribute("rel").split(":")[1].indexOf("=") == -1) { // text validation (fields that need something entered
																
						if (trim12(inputObj.value) == "") {
							formIsValid = false;
							inputObj.value = "";
							
							invalidFormElements += inputObj.getAttribute("rel").split(":")[2] + ",";
							validateForm_elementValid(inputObj, false);
							
							if (firstInvalidElement == null) {
								firstInvalidElement = inputObj;
							}
							
						}
						else {
							validateForm_elementValid(inputObj, true);
						}
						
						inputObj.onblur = function() { validateForm(argForm, false); }
					}
					else {
						if (inputObj.getAttribute("rel").split(":")[1].substring(0, 11) == "textcompare") {
							
							if (inputObj.value != $(inputObj.getAttribute("rel").split(":")[1].split("=")[1]).value) {
								formIsValid = false;
								
								validateForm_elementValid(inputObj, false);
								validateForm_elementValid($(inputObj.getAttribute("rel").split(":")[1].split("=")[1]), false);
								
								invalidFormElements += inputObj.getAttribute("rel").split(":")[2] + " (not the same as " + inputObj.getAttribute("rel").split(":")[3] + "),";
								
								if (firstInvalidElement == null) {
									firstInvalidElement = $(inputObj.getAttribute("rel").split(":")[1].split("=")[1]);
								}
								
							}
							else {
								
								if ($(inputObj.getAttribute("rel").split(":")[1].split("=")[1]).value == "") {
									
									invalidFormElements += inputObj.getAttribute("rel").split(":")[2] + ",";
									validateForm_elementValid(inputObj, false);
									
									if (firstInvalidElement == null) {
										firstInvalidElement = $(inputObj.getAttribute("rel").split(":")[1].split("=")[1]);
									}
							
								}
								else {
									validateForm_elementValid(inputObj, true);
									validateForm_elementValid($(inputObj.getAttribute("rel").split(":")[1].split("=")[1]), true);
								}
								
								
							}
							
							
						}
						if (inputObj.getAttribute("rel").split(":")[1].substring(0, 6) == "textor") {
							if (trim12(inputObj.value) == "" && trim12($(inputObj.getAttribute("rel").split(":")[1].split("=")[1]).value) == ""   ) {
								
								formIsValid = false;
								
								validateForm_elementValid(inputObj, false);
								validateForm_elementValid($(inputObj.getAttribute("rel").split(":")[1].split("=")[1]), false);
								
								
								if (invalidFormElements.indexOf(" OR ") == -1 && invalidFormElements.indexOf(inputObj.getAttribute("rel").split(":")[3]) == -1)
									invalidFormElements += inputObj.getAttribute("rel").split(":")[2] + " OR " + inputObj.getAttribute("rel").split(":")[3] + ",";
								
								if (firstInvalidElement == null) {
									firstInvalidElement = $(inputObj.getAttribute("rel").split(":")[1].split("=")[1]);
								}
								
								inputObj.value = "";
								$(inputObj.getAttribute("rel").split(":")[1].split("=")[1]).value = "";
								
							}
							
							
						}
						
						
						inputObj.onblur = function() { validateForm(argForm, false); }						
					}
					
					if (inputObj.getAttribute("rel").split(":")[1] == "email") { // email validation (fields that need something entered and valid email)
																									
						if (trim12(inputObj.value) == "") {
							formIsValid = false;
							inputObj.value = "";
							
							invalidFormElements += inputObj.getAttribute("rel").split(":")[2] + ",";
							validateForm_elementValid(inputObj, false);
							if (firstInvalidElement == null) {
								firstInvalidElement = inputObj;
							}
						}
						else {

							if (!isValidEmail(inputObj.value)) {
								formIsValid = false;
								
								invalidFormElements += inputObj.getAttribute("rel").split(":")[2] + " (Invalid email address),";
								validateForm_elementValid(inputObj, false);
								if (firstInvalidElement == null) {
									firstInvalidElement = inputObj;
								}
							}
							else {
								validateForm_elementValid(inputObj, true);
								
							}
						}

						inputObj.onblur = function() { validateForm(argForm, false); }
					}





					if (inputObj.getAttribute("rel").split(":")[1] == "number") { // email validation (fields that need something entered and valid email)
																									
						if (trim12(inputObj.value) == "") {
							formIsValid = false;
							inputObj.value = "";
							
							invalidFormElements += inputObj.getAttribute("rel").split(":")[2] + ",";
							validateForm_elementValid(inputObj, false);
							if (firstInvalidElement == null) {
								firstInvalidElement = inputObj;
							}
						}
						else {
							
							if (isNaN(parseInt(inputObj.value))) {
								formIsValid = false;
								
								invalidFormElements += inputObj.getAttribute("rel").split(":")[2] + " (Not a number),";
								validateForm_elementValid(inputObj, false);
								if (firstInvalidElement == null) {
									firstInvalidElement = inputObj;
								}
							}
							else {
								validateForm_elementValid(inputObj, true);
								
							}
						}

						inputObj.onblur = function() { validateForm(argForm, false); }
					}









					
					
					
					if (inputObj.getAttribute("rel").split(":")[1] == "cb") { // text validation (fields that need something entered
						var allCheckboxes = document.getElementsByName(inputObj.name);
						var anyCheckboxesChecked = false;
						
						for (j = 0; j < allCheckboxes.length; j++) {
							if (allCheckboxes[j].checked)
								anyCheckboxesChecked = true;
								
							allCheckboxes[j].onclick = function() { validateForm(argForm, false); }
						}
						
						if (!anyCheckboxesChecked) {
							
							formIsValid = false;
							invalidFormElements += inputObj.getAttribute("rel").split(":")[2] + ",";
							
							if (firstInvalidElement == null) {
								firstInvalidElement = inputObj;
							}
							
						}
						
						for (j = 0; j < allCheckboxes.length; j++) {
							var tmpCbObj;
							
							if (!cbChangeSurroundingLabelClass)
								tmpCbObj = allCheckboxes[j];
							else 
								tmpCbObj = allCheckboxes[j].parentNode;


							if (anyCheckboxesChecked) // if its valid
								validateForm_elementValid(tmpCbObj, true);
							else // if its not valid
								validateForm_elementValid(tmpCbObj, false);
								
							

						}
						
						
						// invalidCBClassName  validCBClassName
						//cbChangeSurroundingLabelClass
						
						
					}
					
					

					
				}
			}			
		}
//		
//		for (i = 0; i < inputObjs.length; i++) {
//			
//			var inputObj = inputObjs[i];
//			
//			
//			if (inputObj.getAttribute("rel")) {
//				if (inputObj.getAttribute("rel").indexOf("val") > -1) {
//					
//					if (inputObj.getAttribute("rel").split(":")[1].substring(0, 11) == "textcompare") { // text validation (fields that need something entered
//						
//						//var tmpCompareObj = xxxxxxx;
//						//alert(inputObj.getAttribute("rel").split(":")[1].split("=")[1]);
//						
//						alert(inputObj.value + " and " + $(inputObj.getAttribute("rel").split(":")[1].split("=")[1]).value);
//						
//					}
//					
//				}
//				
//			}
//			
//			
//		}
		
		
		
		if (invalidFormElements.length > 0) {
			invalidFormElements = invalidFormElements.substr(0, invalidFormElements.length - 1);	
			invalidFormElements = "* " + invalidFormElements.replace(/,/g, "\n* ");
		}
		
		if (!formIsValid && argInvasive) {
			var strInvalMessage = "";
			
			strInvalMessage += "The following fields were not completed:\n\n";
			strInvalMessage += invalidFormElements;
			strInvalMessage += "\n\nPlease ensure these fields are filled out, then try again.";
			firstInvalidElement.focus();
			alert(strInvalMessage);
		}
		

		return formIsValid;
		


}

function validateForm_elementValid(argElement, argValid) {
	
	if (argElement.type == "textarea") { argElement.className = argValid ? validTextareaClassName : invalidTextareaClassName; }	
	if (argElement.type == "text") { argElement.className = argValid ? validInputClassName : invalidInputClassName; }	
	if (argElement.type == "checkbox") { argElement.className = argValid ? validCBClassName : invalidCBClassName; }	
	if (argElement.type == "password") { argElement.className = argValid ? validInputClassName : invalidInputClassName; }	
	if (argElement.type) { if (argElement.type.indexOf("select") > -1) { argElement.className = argValid ? validSelectClassName : invalidSelectClassName; }	 }
	
	
}


function isValidEmail(string) {
	if (string.search(/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/) != -1)
		return true;
	else
		return false;
}
function trim12 (str) {
	var str = str.replace(/^\s\s*/, ''), ws = /\s/, i = str.length;
	while (ws.test(str.charAt(--i)));
	return str.slice(0, i + 1);
}



var globalPasswordStrength = 0;

/*
function guagePassword(argObj, argName) {
*/

function guagePassword(argPassName, argObj, argName) {
	
	var exceptions = "password,123456,qwerty,abc123,letmein,monkey,myspace1,password1,blink182";
	
	var guageCount = 0;
	var ginfo = document.getElementById("passguage_text");
	
	ginfo.innerHTML = "Your password should be at least 8 characters long with a combination<br />of upper and lower case characters and at least one number";
	if (argName + "" != "") {
		var tmpMoreExc = argName.toLowerCase();
		argName = argName.replace(/\s/g, "," );
		argName = argName.replace(/@/g, ",");
		exceptions += "," + argName;
	}


	//var has8chars = false, hasUCase = false, hasNumber = false;
	
	var has4chars = (argObj.value.length >= 4);
	var has8chars = (argObj.value.length >= 8);
	var hasUCase = (argObj.value.search(/[A-Z]/g) > -1);
	var hasLCase = (argObj.value.search(/[a-z]/g) > -1);
	var hasNumber = (argObj.value.search(/[0-9]/g) > -1);
	// 
	
	guageCount = 1;
	
	
	if ((has4chars && hasUCase && hasLCase && hasNumber) || (has4chars && hasUCase && hasLCase && !hasNumber) || (has4chars && hasNumber && hasLCase && !hasUCase) || (has4chars && hasUCase && hasNumber && !hasLCase)) { // no matter what combination, less than 8 chars are not above average
		guageCount = 2;
		ginfo.innerHTML = "Your password should be at least 8 characters long";
	}
	
	
	
	if ((has8chars && hasUCase & hasLCase) || (has8chars && hasUCase & hasNumber) || (has8chars && hasLCase & hasNumber)) {
		guageCount = 3;
		if (!hasNumber) 
			ginfo.innerHTML = "Your password should have at least one number";
		else {
			if (hasLCase) ginfo.innerHTML = "Your password should have at least one upper case character";
			else ginfo.innerHTML = "Your password should have at least one lower case character";
		}
		
	}

	if (has8chars && hasUCase && hasLCase && hasNumber) {
		guageCount = 4;
		ginfo.innerHTML = "";
	}
	
	
	
	if ((hasNumber && !hasUCase && !hasLCase) || (hasUCase && !hasNumber && !hasLCase) || (hasLCase && !hasNumber && !hasUCase)) { // if only one of these are entered its weak
		guageCount = 1;
		ginfo.innerHTML = "Your password should be at least 8 characters long with at least<br />";
		
		if (hasUCase) ginfo.innerHTML += "one lower case character";
		else ginfo.innerHTML += "one upper case character";
		
		
		
	}
	
	
	
	
	if (!has4chars) ginfo.innerHTML = "Your password should be at least 8 characters long with a combination<br />of upper and lower case characters and at least one number";
	
	
	var excPswds = exceptions.split(",");
	
	if (has4chars) {
		for (i = 0; i < excPswds.length; i++) {
			var excPw = excPswds[i].toLowerCase();
			
			if (excPw != "") {			
				if (argObj.value.toLowerCase().indexOf(excPw) >= 0) { // if any of the exc list is in the entered password
					guageCount = 1;
					ginfo.innerHTML = "Your password cannot contain personal information or commonly<br />used passwords";
				}
			}
		}
	
		
		for (i = 0; i < excPswds.length; i++) {
			var excPw = excPswds[i].toLowerCase();
			
			if (excPw != "") {
				if (excPw.toLowerCase().indexOf(argObj.value.toLowerCase()) >= 0) { // if any of the password is present in the exc list
					guageCount = 1;
					ginfo.innerHTML = "Your password cannot contain personal information or commonly<br />used passwords";
				}
			}
		} 
	}
	
	if (argObj.value == "") {
		guageCount = 0;
		ginfo.innerHTML = "Your password should be at least 8 characters long with a combination<br />of upper and lower case characters and at least one number";
	}

	
	if (guageCount > 4) document.getElementById(argPassName).className = "passguage_4";
	else document.getElementById(argPassName).className = "passguage_" + guageCount;
	
	globalPasswordStrength = guageCount;
}





function openHighslideWindow(argWidth, argHeight, argUrl) {
	
	var hiddenHighslideLink = document.createElement("A");
	hiddenHighslideLink.style.display = "none";
	hiddenHighslideLink.href = argUrl;
	
	hiddenHighslideLink.onclick = function() {
		return hs.htmlExpand(hiddenHighslideLink, { dimmingOpacity: 0.75, objectType: 'iframe', height: argHeight, width: argWidth } );
	}
	
	var bodyObj = document.getElementsByTagName("BODY")[0];
	bodyObj.appendChild(hiddenHighslideLink);
	hiddenHighslideLink.onclick();

}
function expandHighslideImage(argUrl) {

	var hiddenHighslideLink = document.createElement("A");
	hiddenHighslideLink.style.display = "none";
	hiddenHighslideLink.href = argUrl;
	
	hiddenHighslideLink.onclick = function() {
		return hs.expand(hiddenHighslideLink, { dimmingOpacity: 0.75 } );
	}
	
	var bodyObj = document.getElementsByTagName("BODY")[0];
	bodyObj.appendChild(hiddenHighslideLink);
	hiddenHighslideLink.onclick();

}






function InitAJAX()
{
	var objxml = null;
	var ProgID = ["Msxml2.XMLHTTP.6.0", "Msxml2.XMLHTTP.3.0", "Microsoft.XMLHTTP"];            

	try {
		objxml = new XMLHttpRequest();
	}
	catch(e) {                
		for (var i = 0; i < ProgID.length; i++) {
			try {
				objxml = new ActiveXObject(ProgID[i]);
			}
			catch(e) {                        
				continue;
			}
		}
	}

	return objxml;            
}


function loadSelectionList(argId, argFormId) {

	var ajaxsForm = $(argFormId);
	
	if (ajaxsForm == null) {
		alert("Form ID " + argFormId + " not found");
		return false;
	}
	
	if (!$(argId)) 
		return false;

	var httpRequest = InitAJAX();

	var ajaxsUrl = ajaxsForm.action + "?getselection=true&selectionbox=" + argId;
	var ajaxsdata = "";
	
	
	
	for (i=0; i < ajaxsForm.elements.length; i++) {
		var elmObj = ajaxsForm.elements[i];
		ajaxsdata += elmObj.name + "=" + escape(elmObj.value) + "&";
	}
	
	httpRequest.onreadystatechange = function() {
		
		if(httpRequest.readyState == 4) {

			if(httpRequest.status == 200) {
				var strTmpResp = httpRequest.responseText;
				
				$(argId).parentNode.innerHTML = strTmpResp;
			}
			else {
				//alert("Error");
				//$(argId).className = "select";
			}
			
		}
	};

	$(argId).className = "select_loading";
	
	httpRequest.open("POST", ajaxsUrl, true); 
	httpRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");                  
	httpRequest.send(ajaxsdata);
	
	
}

function addEventF(evnt, elem, func) {

	if (elem.addEventListener) // W3C DOM
		elem.addEventListener(evnt,func,false);
		
	else if (elem.attachEvent) { // IE DOM
		var r = elem.attachEvent("on"+evnt, func);
		return r;
	
	}
}

function moreDetails(arg1, arg2, arg3) {
	var newurl = arg3;
	
	newurl += "/" + arg1;
	newurl = arg2 + "/" + newurl;
	newurl += "/frame";
	newurl = "/" + newurl + "/";
	

	parent.openHighslideWindow(640, 450, newurl);
	
	return false;
}

function moreRandomDetails(arg1, arg2, arg3) {
	var newurl = arg3;
	
	newurl += "/" + arg1;
	newurl = arg2 + "/" + newurl;
	newurl += "/frame";
	newurl = "/" + newurl + "/";
	

	parent.openHighslideWindow(640, 450, newurl);
	
	return false;
}






