//var validCodes=['3b8f7ca5e9df37d0204bb3adfdfc2d97', '740e5fe88df30522d984bb005f406b1e', '072731aeafc7e73308bff3d378cad4a2', 'f557c84025eee2439e94c4aa0670bd04', '2366d6fd52d6c9dcfbad0ce9d9b95f48', '463a843e1b892cad3ff6eb2020dfef9c', 'eaa3b3d369cc48d27fe6e30e88a39d23', 'ab4d0a9a9418dbb32fac47cd5ec85493', '980c7c5f5ccdd93d1b55bc697aaf0e6d', '312c0f20e94a2c58e5037eb6f20db252', '0f82fea2a99bf62e4255370a6fae0867', '201b899ce82f12a494b965e54d0bbdf4']
var validCodes=['eaa3b3d369cc48d27fe6e30e88a39d23']   /*  only one barcode is accepted */

/* 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 isEmail2 = Element.hasClassName(field, 'email2');
		var isPhone = Element.hasClassName(field, 'phone');
		var isBarcode = Element.hasClassName(field, 'barcode');
		
		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 == "" || field.value == "-1") {
				erCnt++;
				erMsg+="   "+erCnt+". "+field.getAttribute('title') +".\n";
			} else {
				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";
					}
				}
				if (isBarcode == true) {
					if (!validBarcode(field.value,validCodes)) {
					 	erCnt++;
						erMsg+="   "+erCnt+". Please enter a valid barcode.\n";
					}
				}
			}
		} else {
			if (field.value != "") {				
				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 (isEmail2 == true) {
					if (isValidEmail(field.value)==false) {
						erCnt++;
						erMsg+="   "+erCnt+". "+field.getAttribute('title') +".\n";
					}
				}
				if (isPhone == true) {
					if (isValidPhone(field.value)==false) {
						var phoneType = field.name;
						erCnt++;
						erMsg+="   "+erCnt+". Please enter a valid " +phoneType+ " number.\n";
					}
				}
				if (isBarcode == true) {
					if (!validBarcode(field.value,validCodes)) {
					 	erCnt++;
						erMsg+="   "+erCnt+". Please enter a valid barcode.\n";
					}
				}
			}
		} 
	});
	
	/*if (getCheckedRadioVal('optin')==-1) {
			erCnt++;
			erMsg+="   "+erCnt+". "+"Would you like to optin.\n";
	}*/
		
	if (compareValue2 != compareValue1) {
		erCnt++;
		erMsg+="   "+erCnt+". Your Password and Password Confirmation do not match.\n";
	}
	
	//----------valid date of birth------------------------------------------------//
	if($("dobd")) {
	  var days=parseInt(form.dobd.value);
		var months=parseInt(form.dobm.value);
		var years=parseInt(form.doby.value);
        if(!isValidDate(days,months,years) && days>0 && months>0 && years>0)
		{
				erCnt++;
				erMsg+="   "+erCnt+". Please enter a valid date of birth.\n";
		  
		}
	}
	
	return processFormChecks(erCnt,erMsg);
}


/* GET CHECKED RADIO VAL
   ---------------------------------------------------------------- */
function getCheckedRadioVal(question_name) {
		val = -1;
		q = document.getElementsByName(question_name);
		$A(q).each( function(input) {
			if (input.checked) val=input.value;
		} );
		return val;
}

/* BARCODE CHECKER
   ---------------------------------------------------------------- */

function stripIt(str) {
  var len = str.length;
  for(var i = 1; i<len; ++i){
	   str = str.replace(/ /, "");   
	   str = str.replace(/-/, "");   
	}
 return str;
}

function validBarcode(str,arr)
{	
	var result = 0;
	var code=MD5(stripIt(str));
	for (var i=0;i<=arr.length;i++)
	{
		if (arr[i]==code)
		{
			result=1;
		}
	}
return result;
}

/* 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;    
}

/* Date Of Birth CHECK
-------------------------------------------------------------------------*/


function isValidDate(days,months,years){
var dtDate;
months--;  
dtDate=new Date(years,months,days);
return ((days==dtDate.getDate()) && (months==dtDate.getMonth()) && (years==dtDate.getFullYear()));
}

/* 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;
	}
}
