
/* FORM FUNCTIONS
   ================================================================
   
   - REGISTER FORM BEHAVIOUR
   - GENERIC FORM CHECKER
   - IS PASSWORD VALID
   - IS USERNAME VALID
   - IS STRING NUMERIC
   - IS PHONE NUMER VALID
   - IS EMAIL VALID
   - PROCESS FORM CHECKS

   ================================================================ */


/* REGISTER FORM BEHAVIOUR
   ---------------------------------------------------------------- */

var formBehaviour = {
	'form' : function(el){
		el.onsubmit = function(){
			return checkFormFields(this);
		}
	},
	'.numeric' : function(el){
		el.onkeyup = function(){
			return checkNumericField(this);
		}
	},
	'.numericPoint' : function(el){
		el.onkeyup = function(){
			return checkNumericPointField(this);
		}
	}
}

Behaviour.register(formBehaviour);

/* GENERIC FORM CHECKER
   ---------------------------------------------------------------- */
   
function checkFormFields(form) {
	
	var erMsg="";
	var erCnt=0;
	
	var compareValue1="";
	var compareValue2="";

	var formFields = Form.getElements(form);
	formFields.each(function(field){
				
		var isRequired = Element.hasClassName(field, 'required');
		var isUserName = Element.hasClassName(field, 'username');
		var isPassword = Element.hasClassName(field, 'password');
		var isEmail = Element.hasClassName(field, 'email');
		var isPhone = Element.hasClassName(field, 'phone');
		var isClearDefault = Element.hasClassName(field, 'clearDefault');
		
		var isMaxLength = Element.hasClassName(field, 'maxLength');
		
		var isCompare1 = Element.hasClassName(field, 'compare1');
		var isCompare2 = Element.hasClassName(field, 'compare2');
		
		if (isCompare1 == true) {
			compareValue1 = field.value;
		}
		
		if (isCompare2 == true) {
			compareValue2 = field.value;
		}
		
		if (isRequired == true) {
			if (field.value == "") {
				erCnt++;
				erMsg+="   "+erCnt+". "+field.getAttribute('title') +".\n";
			} else if(isClearDefault == true){
				if (field.value == field.defaultValue){
					erCnt++;
					erMsg+="   "+erCnt+". "+field.getAttribute('title') +".\n";
				}
			}else {
				if (isMaxLength == true) {
					var maxLength = $(field.id+'MaxLength').value
					var fieldValue = field.value;
					if (fieldValue.length > maxLength) {
						erCnt++;
						erMsg+="   "+erCnt+". The " + field.name + " cannot be more then " + maxLength + " characters long.\n";
					}
				}
				if (isEmail == true) {
					if (isValidEmail(field.value)==false) {
						erCnt++;
						erMsg+="   "+erCnt+". Please enter a valid Email Address.\n";
					}
				}
				if (isUserName == true) {
					if (isValidUsername(field.value)==false) {
						erCnt++;
						erMsg+="   "+erCnt+". Username must be at least 6 characters.\n";
					}
				}
				if (isPassword == true) {
					if (isValidPassword(field.value)==false) {
						erCnt++;
						erMsg+="   "+erCnt+". Password must be at least 6 characters.\n";
					}
				}
				if (isPhone == true) {
					if (isValidPhone(field.value)==false) {
						var phoneType = field.name;
						erCnt++;
						erMsg+="   "+erCnt+". Please enter a valid " +phoneType+ " number.\n";
					}
				}
			}
		} else {
			if (field.value != "") {	
				if (isMaxLength == true) {
					var maxLength = $(field.id+'MaxLength').value
					var fieldValue = field.value;
					if (fieldValue.length > maxLength) {
						erCnt++;
						erMsg+="   "+erCnt+". The " + field.name + " cannot be more then " + maxLength + " characters long.\n";
					}
				}
				if (isUserName == true) {
					if (isValidUsername(field.value)==false) {
						erCnt++;
						erMsg+="   "+erCnt+". Username must be at least 6 characters.\n";
					}
				}
				if (isPassword == true) {
					if (isValidPassword(field.value)==false) {
						erCnt++;
						erMsg+="   "+erCnt+". Password must be at least 6 characters.\n";
					}
				}
				if (isEmail == true) {
					if (isValidEmail(field.value)==false) {
						erCnt++;
						erMsg+="   "+erCnt+". Please enter a valid Email Address.\n";
					}
				}
				if (isPhone == true) {
					if (isValidPhone(field.value)==false) {
						var phoneType = field.name;
						erCnt++;
						erMsg+="   "+erCnt+". Please enter a valid " +phoneType+ " number.\n";
					}
				}
			}
		} 
	});
	
	
	if (compareValue2 != compareValue1) {
		erCnt++;
		erMsg+="   "+erCnt+". Your Password and Password Confirmation do not match.\n";
	}
	
	return processFormChecks(erCnt,erMsg);
}

/* NUMERIC FIELD CHECKER
   ---------------------------------------------------------------- */
function checkNumericField(field) {
	if(isNumeric(field.value)==false){
		alert('Please use whole numbers only!');
		var isRequired = Element.hasClassName(field, 'required');
		if(isRequired==true){
			field.value='1';
		}else{
			field.value='';
		}
	}
}

function checkNumericPointField(field){
	if(isNumericPoint(field.value)==false){
		alert('Price is invalid.');
		field.value='';
		field.focus();
	}
}

/* IS PASSWORD VALID
   ---------------------------------------------------------------- */

function isValidPassword(password) {
	var illegalChars = /[\W_]/;
	if ((password.length < 6) || (password.length > 12)) {
		return false;
	} else if (!((password.search(/(a-z)+/)) && (password.search(/(A-Z)+/)) && (password.search(/(0-9)+/)))) {
		return false;
	} else if (illegalChars.test(password)) {
		return false;
	} else {
		return true;
	}
}

/* IS USERNAME VALID
   ---------------------------------------------------------------- */

function isValidUsername(username) {
	var illegalChars = /[\W_]/;
	if ((username.length < 6) || (username.length > 12)) {
		return false;
	} else if (!((username.search(/(a-z)+/)) && (username.search(/(A-Z)+/)) && (username.search(/(0-9)+/)))) {
		return false;
	} else if (illegalChars.test(username)) {
		return false;
	} else {
		return true;
	}
}

/* IS STRING NUMERIC
   ---------------------------------------------------------------- */

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 isNumericPoint(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;
}

/* IS PHONE NUMER VALID
   ---------------------------------------------------------------- */
function isValidPhone(sText) {
	var stripped = sText.replace(/[\(\)\.\-\ ]/g, '');
	var ValidChars = "0123456789";
	var isNumber=true;
	var Char;
	for (i = 0; i < stripped.length && isNumber == true; i++) { 
		Char = stripped.charAt(i); 
		if (ValidChars.indexOf(Char) == -1) {
			isNumber = false;
		}
	}
	return isNumber;
}

/* IS EMAIL VALID
   ---------------------------------------------------------------- */

function isValidEmail(email) {
	var error = "";
	var emailFilter=/^.+@.+\..{2,3}$/;
	if (!(emailFilter.test(email))) {
		return false; 
	} else {
		var illegalChars= /[\(\)\<\>\,\;\:\\\"\[\]]/
		if (email.match(illegalChars)) {
			return false;
		} else {
			return true;
		}
	}
	return true;    
}

/* PROCESS FORM CHECKS
   ---------------------------------------------------------------- */

function processFormChecks(erCnt,erMsg) {
	if (erCnt>0) {
		if (erCnt==1) {
			erMsgPrefix="There was an error:\n\n";
			erMsgSuffix="\nPlease correct the error and resubmit the form.";
		} else {
			erMsgPrefix="There were "+erCnt+" errors:\n\n";
			erMsgSuffix="\nPlease correct the errors and resubmit the form.";
		}
		alert(erMsgPrefix+erMsg+erMsgSuffix+"           ");
		return false;
	} else {
		return true;
	}
}

// MISC FORM FUNCTIONS (need sorting)
// ----------------------------------
var forms = {
	'.clearDefault' : function(el){
			el.onfocus = function(){
				if(el.value==el.defaultValue){
					el.value='';
				}
			}
			el.onblur = function() {
				if(el.value==''){
					el.value=el.defaultValue;
				}
			}
		},
		'.isNumeric' : function(el){
			el.onkeyup = function(){
		}
	}
}

Behaviour.register(forms);