/*
	cWebForms v0.4 - Form-level validation & UI states (18/12/2006)
	written by Hall (http://hall.xetech.org)

*/

var errNote = new Array();
errNote[0] = "<div class='errorNote'>This field shouldn't be left blank.</div>";
errNote[1] = "<div class='errorNote'>This field should contain only numeric characters.</div>";
errNote[2] = "<div class='errorNote'>This email is not valid.</div>";
errNote[3] = "<div class='errorNote'>Please select an item from this dropdown box.</div>";

$(document).ready(function() {
	e = document.forms[0];
	$.each([$(e.Fullname),
			$(e.Address),
			$(e.telephone),
			$(e.Qualification),
			$(e.Postcode),
		    $(e.email),
		    $(e.BYear)],function(e){
			   this.keyup(function(){
					validateFormElement(this);
			   });
			   
			   this.focus(function(){
					validateFormElement(this);
			   });
			   
			   this.blur(function(){
					blurFormElement(this);
  			   });
			});

	$.each([document.forms[0].Race,
		    document.forms[0].BDay,
			document.forms[0].BMonth,
			document.forms[0].country,
			document.forms[0].mStatus,
			document.forms[0].Gender,
		    document.forms[0].country], function(e){
			   this.onchange = function(){
					validateSelectElement(this);								   
			   }
			   
			   this.onfocus = function(){
					validateSelectElement(this);				
			   }
			   
			   this.onblur = function() {
				   	blurSelectElement(this);
			   }
		   });
	
	$.each([$(e.Address2),
			$(e.Address3),
			$(e.Nationality),
			$(e.Fax),
			$(e.Message)], function(e){
			   this.focus(function(){
					setFocus(this);
			   });
			   
			   this.blur(function(){
					unsetFocus(this);
  			   });
			});
});


function completeValidate() {
	var isValid = true;
	e = document.forms[0];
	
	$.each([document.forms[0].Fullname,
			document.forms[0].Address,
			document.forms[0].telephone,
			document.forms[0].Qualification,
			document.forms[0].Postcode,
		    document.forms[0].email,
		    document.forms[0].BYear],function(e){
			   if(!validateFormElement(this)) {
				   isValid = false;
			   } else {
				   	unsetFocus(this);
			   }
			});

	$.each([document.forms[0].Race,
		    document.forms[0].BDay,
			document.forms[0].BMonth,
			document.forms[0].country,
			document.forms[0].mStatus,
			document.forms[0].Gender,
		    document.forms[0].country], function(e){
				if(!validateSelectElement(this)) isValid = false;
		   });
	
	if (!isValid) alert('Error! Please ensure all required fields are filled.');
	return isValid;
}


function blurFormElement(e) {
	//If validated, remove yellow border,
	//else leave the red border as is.
	if(validateFormElement(e)) unsetFocus(e);
}

function blurSelectElement(e) {
	if(validateSelectElement(e)) unsetFocus(e);
}

function validateSelectElement(e) {
	var isValid=true;

	if(e.selectedIndex==0){
		setError(e,3);
		return isValid=false;
	} else {
		unsetError(e);
	}

	if(isValid) setFocus(e);	
	return isValid;
}

function validateFormElement(e) {
	var isValid=true;

	//Blank space
	if($.trim(e.value)==false) {
		setError(e,0);
		return isValid=false;
	} else {
		unsetError(e);
	}
	
	//Non-numeric characters
	if($(e).name()=='Postcode') {
		if(!isNumeric(e.value)) {
			setError(e,1);
			isValid = false;
		} else {
			unsetError(e);
		}
	}
	
	//Email validation
	if($(e).name()=='email') {
		if(!isValidEmail(e.value)) {
			setError(e,2);
			isValid = false
		} else {
			unsetError(e);
		}
	}
	
	if(isValid) setFocus(e);
	return isValid;
}

function isNumeric(sText){
   var ValidChars = "0123456789.";
   var isNumber=true;
   var Char;

   for (i = 0; i < sText.length && isNumber == true; i++){ 
      Char = sText.charAt(i); 
      if (ValidChars.indexOf(Char) == -1) isNumber = false;
	}
   return isNumber;
}

function isValidEmail(str) {
   return (str.indexOf(".") > 2) && (str.indexOf("@") > 0);
}

/* UI States */
function setError(e,i) {
	unsetFocus(e);
	$(e).siblings('.errorNote').remove();
	$(e).addClass('error').parent().append(errNote[i]);
}

function unsetError(e) {
	$(e).siblings('.errorNote').remove();
	$(e).removeClass('error');
}

function setFocus(e) {
	unsetError(e);
	$(e).addClass('focus');
}

function unsetFocus(e) {
	$(e).removeClass('focus');	
}