
/*******************************

	Form Validation By Class v1.3
	05/03/07
	Phil Shum
	CDS-Studio

*******************************/

var valid = true;
var ie = document.all ? 1 : 0;	
var errorElement = document.createElement('div');


function initCheck () {
	
	for (var j=0; j<document.forms.length; j++) {
		
		document.forms[j].onsubmit = checkForm;

		/* ----- create error element ----- */

			if (ie) {
				errorElement.setAttribute('className', 'validationerror');
			} else {
				errorElement.setAttribute('class', 'validationerror');
			}
	}
	
	/* ----- check every element of every form and add * if mandatory ----- */
	
		for (var a=0; a<document.forms.length; a++) {
			for (var b=0; b<document.forms[a].elements.length;b++) {
	
				var classArray = parseClass(document.forms[a].elements[b]);
				
				for (var c=0;c<classArray.length;c++) {			
					if ((classArray[c] == 'required')||(classArray[c] == 'ischecked')) {
						document.forms[a].elements[b].parentNode.innerHTML = '*' + document.forms[a].elements[b].parentNode.innerHTML;
					} 
				}
			}	
		}
	
	/* ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- */

}

function checkForm (e) {
	
	if (!e) { var e = window.event };

	var elementClass;
	var classArray = new Array();
	var errorArray = new Array();
	var errorCount = 0;
	var invalidArray = new Array();
	var invalidCount = 0;
	var tempVar;
	var errorForm = new Array();
	var elementAlias;
	var errorMessage = 'The following errors were found in your submission. Please check the highlighted fields and try again.';
	var currentForm = this.name;
	
	
	var labelArray = document.getElementsByTagName('label');
	for (var f=0;f<labelArray.length;f++) {
		resetElement(labelArray[f]);
	}

	for (var b=0; b<this.elements.length;b++) {
		var i = this.elements[b].parentNode.innerHTML.indexOf('<');
		var temp =''; 
		temp = this.elements[b].parentNode.innerHTML.substring(0,i);
		temp = temp.replace(':','');
		if (temp.charAt(0)=='*') {
			elementAlias = temp.replace('*','');
		} else {
			elementAlias = temp;
		}
		elementAlias='<strong>'+elementAlias+'</strong>';
		var element = this.elements[b].name;
		var elementValue = this.elements[b].value;
		classArray = parseClass(this.elements[b]);
		for (var c=0;c<classArray.length;c++) {			
			if (classArray[c] == 'required') {
				if (elementValue.length<1) {
					errorArray[errorCount++]=elementAlias+' is required.</li>\n';
					invalidArray[invalidCount++]=element;
				}
			} else if (classArray[c] == 'isemail') {
				if ((elementValue.length<5&&elementValue.length>0)||((elementValue.length>5)&&((elementValue.indexOf('@')<1) || (elementValue.indexOf('@')==(elementValue.length-1))))) {
					errorArray[errorCount++]=elementAlias + ' must contain a valid e-mail address.';
					invalidArray[invalidCount++]=element;
				}					
			} else if (classArray[c] == 'isfilename') {
				var slashPos = elementValue.lastIndexOf('\\');
				if (!slashPos) {
					slashPos = elementValue.lastIndexOf('/');	
				}
				var filename = elementValue.substring(slashPos+1,elementValue.length);
				if ((!/^[\w\s\.\(\)]*$/.test(filename))||(elementValue.length<4&&elementValue.length>0)||((elementValue.length>4)&& ((elementValue.indexOf('.')<1)||(elementValue.indexOf('.')>(elementValue.length-4))))) {
					errorArray[errorCount++]=elementAlias + ' must contain a valid filename - <strong>'+filename+'</strong> is not valid.';
					invalidArray[invalidCount++]=element;
				}					
			} else if (classArray[c] == 'isinteger') {
				if (isNaN(elementValue)) {
					errorArray[errorCount++]=elementAlias + ' must contain a number.';
					invalidArray[invalidCount++]=element;
				}						
			} else if (classArray[c].indexOf('isinrange') != -1) {
				var num = parseFloat(elementValue);
				if (num>-1) {
					var divider=classArray[c].indexOf('to');
					min=classArray[c].substring(9,divider); 
					max=classArray[c].substring(divider+2);
					if (num<min || max<num) {
						errorArray[errorCount++]=elementAlias + ' must contain a number between '+min+' and '+max+'.';
						invalidArray[invalidCount++]=element;
					}
				}
			} else if (classArray[c] == 'ischecked') {
				if (!this.elements[b].checked) {
					errorArray[errorCount++]=elementAlias+' is required.</li>\n';
					invalidArray[invalidCount++]=element;
				}
			}
		}
	}

	/* section for bespoke cases */
	/*
		<script language="JavaScript" type="text/JavaScript">
		<!--
			function diarymodchecktick() {
				if ((!document.entryform.multipledates.checked)&&((!document.entryform.dateFrom.value)||(!document.entryform.dateTo.value))){ 
					return true; 
				} else {
					return false;
				}
			}
		//-->
		</script>
	*/
	
	if (window.diarymodchecktick) {
		if (diarymodchecktick()) { 
			errorArray[errorCount++]='tick the multiple single dates tickbox or enter a (start & end) Ongoing Event Date range';
			invalidArray[invalidCount++]='multipledates';
			invalidArray[invalidCount++]='dateFrom';
			invalidArray[invalidCount++]='dateTo';
		}
	}
	
	/* end bespoke section */
	if (errorCount>0) {

		this.parentNode.insertBefore(errorElement,this);				


		tempVar = '<a name="error"></a><fieldset><p style="color:#ff0000; font-weight: bold; padding: 10px 20px 10px 45px; border-top: 2px solid #ffd324; border-bottom: 2px solid #ffd324; background: #ffffcc url(/nav_images/exclamation.gif) center no-repeat; background-position: 15px 50%; /* x-pos y-pos */ ">'+errorMessage+'</p><ul>';
		//tempVar += 'Please fill in all required fields.';
		for (var f=0;f<errorArray.length;f++) {
			tempVar+='<li>'+errorArray[f]+'</li>';
		}
		tempVar += '</ul></fieldset>';
		errorElement.innerHTML = tempVar;


		for (var e=0;e<invalidArray.length;e++) {
			highlightElement(invalidArray[e],currentForm);
		}
		//window.scrollTo(0,0);
		document.location.href='#error';
		valid = false;
	} else {
		var inputArray = this.getElementsByTagName('input');
		for (var a=0;a<inputArray.length;a++) {
	//		if (inputArray[a].getAttribute('type') == 'submit') { // mr 9.11.07 causing ebulletin fault
	//			inputArray[a].value = 'loading..';
	//			inputArray[a].disabled = true;			
	//		}
		}
		valid = true;
	}

	e.cancelBubble = true;
	if (e.stopPropagation) e.stopPropagation();
	
	return valid;
}
function highlightElement (element,form) {
	document.forms[form].elements[element].parentNode.style.backgroundColor = '#ffffcc';
	document.forms[form].elements[element].parentNode.style.color = '#ff0000';
	document.forms[form].elements[element].parentNode.style.fontWeight = 'bold';
	document.forms[form].elements[element].style.fontWeight = 'normal';
}
function resetElement (element) {
	element.style.backgroundColor = '';
	element.style.color = '';
	element.style.fontWeight = '';
}
function parseClass (element) {
	if (ie) {
		var classString = element.className;
	} else {
		var classString = element.getAttribute('class');
	}
	var elementClass = new Array();
	
	if ((classString != null)&&(classString!='')) { 
		elementClass = classString.split(' '); 
	}
	return elementClass;
}

function addLoadEvent(func) {
	var oldonload = window.onload;
	if (typeof window.onload != 'function') { 
		window.onload = func; 
	} else { 
		window.onload = function() {
		if (oldonload) { oldonload(); }
			func();
		}
	}
}

addLoadEvent(initCheck);

/**************************************************
function call
**************************************************

<script type="text/JavaScript" src="/bb_scripts/checkForm.js"></script>

**************************************************/
