/* 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
   ---------------------------------------------------------------- */

$('form').submit(function(){
	return checkFormFields(this);
});

$('.numeric').keyup(function(){
	return checkNumericField(this);
});

$('.numericPoint').keyup(function(){
	return checkNumericPointField(this);
});

/* GENERIC FORM CHECKER
   ---------------------------------------------------------------- */
var msg;  

function checkFormFields(form) {
	
	tooltip.restoreTitle('', 'all');
	
	var erMsg="";
	var erCnt=0;
	
	var compareName1="";
	var compareName2="";
	var compareValue1="";
	var compareValue2="";
	
	var favGroupValue1;
	var favGroupValue2;
	
	var formFields = form.elements;
	
	//Using for loop as each() buggy in IE
	for(var i=0;i<formFields.length;i++){

		field = formFields[i];

		var isRequired = $(field).hasClass('required');
		var isUserName = $(field).hasClass('username');
		var isPassword = $(field).hasClass('password');
		var isEmail = $(field).hasClass('email');
		var isPhone = $(field).hasClass('phone');
		var isClearDefault = $(field).hasClass('clearDefault');

		var isCheckbox = $(field).hasClass('checkbox');

		var isCompare1 = $(field).hasClass('compare1');
		var isCompare2 = $(field).hasClass('compare2');

		var isFavGroup1 = $(field).hasClass('favGroup1');
		var isFavGroup2 = $(field).hasClass('favGroup2');

		if (isCompare1 == true) {
			compareName1 = $(field).attr('id');
			compareValue1 = $(field).val();
		}
		if (isCompare2 == true) {
			compareName2 = $(field).attr('id');
			compareValue2 = $(field).val();
		}

		if (compareName1!='' && compareName2!='') {
			if (compareValue2 != compareValue1) {
				erCnt++;
				erMsg+="   "+erCnt+". Your "+compareName1+" and "+compareName1+" confirmation do not match.\n";
			}
			compareName1 = '';
			compareValue1 ='';
			compareName2 = '';
			compareValue2 = '';
		}

		if (isFavGroup1 == true) {
			favGroupValue1 = $(field).val();
		}

		if (isFavGroup2 == true) {
			favGroupValue2 = $(field).val();
		}
		
		if (isRequired == true) {
			if ($(field).val() == "") {
				erCnt++;
				erMsg+="   "+erCnt+". "+$(field).attr('title') +".\n";
			} else if(isClearDefault == true){
				if ($(field).val() == field.defaultValue){
					erCnt++;
					erMsg+="   "+erCnt+". "+$(field).attr('title') +".\n";
				}
			} else {
				if (isCheckbox == true) {
					if(field.checked==false) {
						erCnt++;
						erMsg+="   "+erCnt+". "+$(field).attr('title') +".\n";
					}
				}
				if (isEmail == true) {
					if (isValidEmail($(field).val())==false) {
						erCnt++;
						erMsg+="   "+erCnt+". Please enter a valid Email Address.\n";
					}
				}
				if (isUserName == true) {
					if (isValidUsername($(field).val())==false) {
						erCnt++;
						erMsg+="   "+erCnt+". "+msg+".\n";
					}
				}
				if (isPassword == true) {
					if (isValidPassword($(field).val())==false) {
						erCnt++;
						erMsg+="   "+erCnt+". Password must be between 6 and 12 characters long.\n";
					}
				}
				if (isPhone == true) {
					if (isValidPhone($(field).val())==false) {
						var phoneType = $(field).attr('name');
						erCnt++;
						erMsg+="   "+erCnt+". Please enter a valid " +phoneType+ " number.\n";
					}
				}
			}
		} else {
			if ($(field).val() != "") {				
				if (isUserName == true) {
					if (isValidUsername($(field).val())==false) {
						erCnt++;
						erMsg+="   "+erCnt+". "+msg+".\n";
					}
				}
				if (isPassword == true) {
					if (isValidPassword($(field).val())==false) {
						erCnt++;
						erMsg+="   "+erCnt+". Password must be between 6 and 12 characters long.\n";
					}
				}
				if (isEmail == true) {
					if (isValidEmail($(field).val())==false) {
						erCnt++;
						erMsg+="   "+erCnt+". Please enter a valid Email Address.\n";
					}
				}
				if (isPhone == true) {
					if (isValidPhone($(field).val())==false) {
						var phoneType = $(field).attr('name');
						erCnt++;
						erMsg+="   "+erCnt+". Please enter a valid " +phoneType+ " number.\n";
					}
				}
			}
		} 
	}//end for loop
	
	if (favGroupValue1=='' && favGroupValue2==''){
		erCnt++;
		erMsg+="   "+erCnt+". Enter favourite group name.\n";
	}
	
	tooltip.restoreTooltip();
	
	return processFormChecks(erCnt,erMsg);
}

/* NUMERIC FIELD CHECKER
   ---------------------------------------------------------------- */
function checkNumericField(field) {
	if(isNumeric($(field).val())==false){
		alert('Please use whole numbers only!');
		var isRequired = $(field).hasClass('required');
		if(isRequired==true){
			$(field).val('1');
		}else{
			$(field).val('');
		}
	}
}

function checkNumericPointField(field){
	if(isNumericPoint($(field).val())==false){
		alert('Price is invalid.');
		$(field).val('');
		$(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) {
		msg = "Username must be at least 6 characters long";
		return false;
	} else if (!((username.search(/(a-z)+/)) && (username.search(/(A-Z)+/)) && (username.search(/(0-9)+/)))) {
		msg = "Username must be at least 6 characters long";
		return false;
	} else if (isValidEmail(username)==false){ 
		if (illegalChars.test(username)) {
			msg = "Username contains invalid characters";
			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;
	}
}
