// pass zip field, country value and error info field
function validZipCode(countryCode, zip, zipInfo){
	 
	var ZipError = 0;
	
	if(zip.val().length < 1 || zip.val()==''){
	
		zip.addClass("error");
		zipInfo.text(app.resources["ZIP_REQUIRED"]);
		zipInfo.addClass("error");
		return false;
	
	} else{
			
		if(countryCode == "CA" && zip.val().match(/^[ABCEGHJKLMNPRSTVXY]\d[A-Z] \d[A-Z]\d$/)) {

			zip.removeClass("error");
			zipInfo.text("");
			zipInfo.removeClass("error");
			return true;
			
		} else{
			ZipError = 1;
		}
				
		if(countryCode == "US" && zip.val().match(/^\d{5}(-\d{4})?$/) ){

			zip.removeClass("error");
			zipInfo.text("");
			zipInfo.removeClass("error");
			return true;
					
		} else{
			ZipError = 1;
		}
				
		if (ZipError == 1) {

			zip.addClass("error");
			var ZipM = " ";
			if (countryCode == "CA"){
				ZipM = " " + app.resources["ZIP_UUPERCASE"];
			}			
			
			zipInfo.text(app.resources["ZIP_INVALID"]+ZipM);
			zipInfo.addClass("error");
			return false;
					
		}
	}
}

//pass birthYr, birthMo, and birthDy fields and field that will show error info
function validBirthDate(birthYR,birthMO,birthDY,BirthDateErrInfo){
	
	if(birthYR.val().length < 1 || birthMO.val().length < 1 || birthDY.val().length < 1){
		
		BirthDateErrInfo.text(app.resources["BDAY_REQUIRED_2"]);
		BirthDateErrInfo.addClass("error");
		return false;
	
	} else if(!validateBday(birthMO.val().replace("0",""), "1", birthYR.val())){
		
		BirthDateErrInfo.text(app.resources["AGE_ERRORMAIN"]);
		BirthDateErrInfo.addClass("error");
		return false;
		
	} else {
		
		BirthDateErrInfo.text("");
		BirthDateErrInfo.removeClass("error");
		return true;
	}
	
}

function validateBday(myMonth, myDay, myYear) {

	var currDate = new Date();
	var currMonth = currDate.getMonth()+1;
	var currDay = currDate.getDate();
	var currYear = currDate.getFullYear();
	
	
	var diffYear = currYear - myYear;
	var validAge;
	try{
		validAge = parseInt(app.resources["VALID_AGE"].trim());		
	}
	catch (e){validAge=18;}

	if (diffYear == validAge) {	
		
		if ((parseInt(myMonth) > currMonth) || (parseInt(myMonth) == currMonth) ) {
			
    		return false;
		}				
	} else if (diffYear < validAge) {
		return false;   			
	} 
	
	return true;
}

function validFirstName(firstname, firstnameInfo){
	//if it's NOT valid
	
	var pattern = new RegExp("^[a-zA-Z\-. ']*$");
	
	if(firstname.val().length < 1 || firstname.val()==''){
		
		firstname.addClass("error");
		firstnameInfo.text(app.resources["FNAME_REQUIRED"]);
		firstnameInfo.addClass("error");
		return false;
		
	} else if(firstname.val().length > 19){
		
		firstname.addClass("error");
		firstnameInfo.text(app.resources["FNAME_INVALID"]);
		firstnameInfo.addClass("error");
		return false;
		
	} else if(!pattern.test(firstname.val())) { 
		
		firstname.addClass("error");
		firstnameInfo.text(app.resources["NAMEFORMAT_INVALID"]);
		firstnameInfo.addClass("error");
		return false;
		
	} else{
		
		firstname.removeClass("error");
		firstnameInfo.text("");
		firstnameInfo.removeClass("error");
		return true;
	}
	
	
}
	
function validLastName(lastname,lastnameInfo){
	//if it's NOT valid
	
	var pattern = new RegExp("^[a-zA-Z\-. ']*$");
	
	if(lastname.val().length < 1 || lastname.val()==''){
	
		lastname.addClass("error");
		lastnameInfo.text(app.resources["LNAME_REQUIRED"]);
		lastnameInfo.addClass("error");
		return false;
		
	} else if(lastname.val().length > 20){
		
		lastname.addClass("error");
		lastnameInfo.text(app.resources["LNAME_INVALID"]);
		lastnameInfo.addClass("error");
		return false;
		
	} else if(!pattern.test(lastname.val())) { 
		
		lastname.addClass("error");
		lastnameInfo.text(app.resources["NAMEFORMAT_INVALID"]);
		lastnameInfo.addClass("error");
		return false;
		
	} else{
		
		lastname.removeClass("error");
		lastnameInfo.text("");
		lastnameInfo.removeClass("error");
		return true;
	}
}

function validAddress(address, addressInfo) {
	
	var pattern = new RegExp("^[a-zA-Z0-9\ ]*$");
	
	if(address.val().length < 1 || address.val()==''){
		
		address.addClass("error");
		addressInfo.text(app.resources["ADDR_REQUIRED"]);
		addressInfo.addClass("error");
		return false;
		
	} else if(address.val().length > 30) {
		
		address.addClass("error");
		addressInfo.text(app.resources["ADDR_INVALID"]);
		addressInfo.addClass("error");
		return false;
		
	} else if(!pattern.test(address.val())) {
		
		address.addClass("error");
		addressInfo.text(app.resources["ADDRFORMAT_INVALID"]);
		addressInfo.addClass("error");
		return false;
		
	} else {
		//this line of code removes succeeding text to word box Example: boxs removes "s"
		//this part was added to check if word post office have been type and replace with the word PO BOX
		var originalTextValue = address.val();
		var process = address.val().toLowerCase();
		if(process.indexOf("post office") > -1){
			var firstPartText = originalTextValue.substr(0, process.indexOf("post office"));
			var secondPartText = originalTextValue.substr(process.indexOf("post office"));
			var thirdPartText = secondPartText.substr(12);
			
			process = firstPartText+"PO BOX"+thirdPartText;
			address.val(process);
		} else {
			if(process.indexOf("box") > -1){
				var firstPartText = originalTextValue.substr(0, process.indexOf("box"));
				var secondPartText = originalTextValue.substr(process.indexOf("box"));

				if (secondPartText.indexOf(" ") > -1) {
					original = firstPartText+secondPartText.substr(0, 3)+secondPartText.substr(secondPartText.indexOf(" "));
				} else {
					original = firstPartText+secondPartText.substr(0, 3);
				}
				address.val(original);
			}
		//END OF CODE FOR PO BOX ISSUE AND POST OFFICE	
		}
		address.removeClass("error");
		addressInfo.text("");
		addressInfo.removeClass("error");
		return true;
	}
}

function validSecondaryAddress(address, addressInfo) {
	
	var pattern = new RegExp("^[a-zA-Z0-9\ ]*$");
	
	if(address.val().length > 30) {

		address.addClass("error");
		addressInfo.text(app.resources["ADDR_INVALID"]);
		addressInfo.addClass("error");
		return false;
		
	} else if(!pattern.test(address.val())) {

		address.addClass("error");
		addressInfo.text(app.resources["ADDRFORMAT_INVALID"]);
		addressInfo.addClass("error");
		return false;
		
	} else {	
		//this line of code removes succeeding text to word box Example: boxs removes "s"
		//this part was added to check if word post office have been type and replace with the word PO BOX
		var originalTextValue = address.val();
		var process = address.val().toLowerCase();
		if(process.indexOf("post office") > -1){
			var firstPartText = originalTextValue.substr(0, process.indexOf("post office"));
			var secondPartText = originalTextValue.substr(process.indexOf("post office"));
			var thirdPartText = secondPartText.substr(12);
			
			process = firstPartText+"PO BOX"+thirdPartText;
			address.val(process);
		} else {
			if(process.indexOf("box") > -1){
				var firstPartText = originalTextValue.substr(0, process.indexOf("box"));
				var secondPartText = originalTextValue.substr(process.indexOf("box"));

				if (secondPartText.indexOf(" ") > -1) {
					original = firstPartText+secondPartText.substr(0, 3)+secondPartText.substr(secondPartText.indexOf(" "));
				} else {
					original = firstPartText+secondPartText.substr(0, 3);
				}
				address.val(original);
			}
		//END OF CODE FOR PO BOX ISSUE AND POST OFFICE	
		}
		address.removeClass("error");
		addressInfo.text("");
		addressInfo.removeClass("error");
		return true;
	}
}

function validCity(city, cityInfo) {
	
	var pattern = new RegExp("^[a-zA-Z0-9\ ]*$");
	
	if(city.val().length < 1 || city.val()==''){
		
		city.addClass("error");
		cityInfo.text(app.resources["CITY_REQUIRED"]);
		cityInfo.addClass("error");
		return false;
		
	} else if(!pattern.test(city.val())) {
		
		city.addClass("error");
		cityInfo.text(app.resources["ADDRFORMAT_INVALID"]);
		cityInfo.addClass("error");
		return false;
		
	} else if(city.val().length > 40) {
		
		city.addClass("error");
		cityInfo.text(app.resources["ADDR_INVALID"]);
		cityInfo.addClass("error");
		return false;
		
	 }else{	
	
		city.removeClass("error");
		cityInfo.text("");
		cityInfo.removeClass("error");
		return true;
	}
}

function validState(state, stateInfo) {
	
	if(!state.val() || state.val() == null || state.val().length < 1 || state.val()==''){
		state.addClass("error");
		stateInfo.text(app.resources["STATE_REQUIRED"]);
		stateInfo.addClass("error");
		return false;
	} else{	
		state.removeClass("error");
		stateInfo.text("");
		stateInfo.removeClass("error");
		return true;
	}
}

function validCountry(country, countryInfo) {
	
	if(country.val().length < 1 || country.val()==''){
		country.addClass("error");
		countryInfo.text(app.resources["COUNTRY_REQUIRED"]);
		countryInfo.addClass("error");
		return false;
	} else{	
		country.removeClass("error");
		countryInfo.text("");
		countryInfo.removeClass("error");
		return true;
	}
}

function validOrderNum(ordNum, ordNumInfo) {
	
	if(ordNum.val().length < 1 || ordNum.val()==''){
		ordNum.addClass("error");
		ordNumInfo.text(app.resources["ORDNO_REQUIRED"]);
		ordNumInfo.addClass("error");
		return false;
	} else{	
		ordNum.removeClass("error");
		ordNumInfo.text("");
		ordNumInfo.removeClass("error");
		return true;
	}
}

function validPhoneNumber(phoneNum, phoneNumInfo, countryCode){
	
	var pattern = new RegExp("^[0-9\-]*$");
	
	if(phoneNum.val().length < 1){
	
		phoneNum.addClass("error");
		phoneNumInfo.text(app.resources["PHONE_REQUIRED"]);
		phoneNumInfo.addClass("error");
		return false;
	
	} else {
		
		if(phoneNum.val().length < 10 || phoneNum.val().length > 20 || !pattern.test(phoneNum.val())) {
			
			phoneNum.addClass("error");
			phoneNumInfo.text(app.resources["PHONE_INVALID"]);
			phoneNumInfo.addClass("error");
			return false;
		
		} else if (phoneNum.val().length >= 10) {
			
			if(isNumeric(phoneNum.val())) {
			
				var phoneFieldID = phoneNum.attr("id");
				
				if (countryCode == 'CA' || countryCode == 'US') {
					var textpos = document.getElementById(phoneFieldID).selectionStart;
					if (textpos == 4 || textpos == 8)
					{
						textpos = textpos +1;
					}
					var enteredPhoneNumber = document.getElementById(phoneFieldID).value;
					var correctedPhoneNumber = '';
					enteredPhoneNumber = enteredPhoneNumber.replace(new RegExp('[-,(,),*,",\'\,-,+,., ]','g'),'');
					correctedPhoneNumber = enteredPhoneNumber.substr(0,3) + '-' + enteredPhoneNumber.substr(3,3) + '-' + enteredPhoneNumber.substr(6,4);
					document.getElementById(phoneFieldID).value = correctedPhoneNumber;
					//document.getElementById(phoneFieldID).selectionStart = textpos;
					//document.getElementById(phoneFieldID).selectionEnd = textpos;
				} 
				
				phoneNum.removeClass("error");
				phoneNumInfo.text("");
				phoneNumInfo.removeClass("error");
				return true;
			
			} else {
				
				phoneNum.addClass("error");
				phoneNumInfo.text(app.resources["PHONE_INVALID"]);
				phoneNumInfo.addClass("error");
				return false;
			}
		}
	}
}

function validEmail(email, emailInfo){
	//testing regular expression
	var a = email.val();
	//email.val(a.toLowerCase());
	var filter = /^[\w-\.]{1,}\@([\da-zA-Z-]{1,}\.){1,}[\da-zA-Z-]{2,3}$/;
	//if it's valid email
	if(filter.test(a)){
		if(a.length > 512) {
			
			email.addClass("error");
			emailInfo.text(app.resources["EMAIL_INVALID"]);
			emailInfo.addClass("error");
			emailInfo.css("display","block");
			return false;
		
		} else {
			email.removeClass("error");
			emailInfo.text("");
			emailInfo.removeClass("error");
			emailInfo.css("display","none");
			return true;
		}
	}
	//if it's NOT valid
	else{
		email.addClass("error");
		if (a==""){
			emailInfo.text(app.resources["EMAIL_REQUIRED"]);
		}
		else {
			emailInfo.text(app.resources["EMAIL_INVALID"]);
		}					
		emailInfo.addClass("error");
		emailInfo.css("display","block");
		
		return false;
	}
}

function validPassword(email, password, passwordInfo, passwordConfirm, passwordConfirmInfo) {
	
	if(password.val().length <8){
		password.addClass("error");
		passwordInfo.text(app.resources["PWDLENGTH_INVALID"]);
		passwordInfo.addClass("error");
		return false;
	} else { 
		if(password.val() == email.val()) {
			password.addClass("error");
			passwordInfo.text(app.resources["PWDLOGIN_INVALID"]);
			passwordInfo.addClass("error");
			return false;
		} else if(!password.val().match(/^\w*(?=.{8,20})(?=\w*\d)(?=\w*[a-z])(?=\w*[A-Z])\w*$/)) {
			password.addClass("error");
			passwordInfo.text(app.resources["PWDFORMAT_INVALID"]);
			passwordInfo.addClass("error");
			return false;
		} else{			
			password.removeClass("error");
			passwordInfo.text("");
			passwordInfo.removeClass("error");
			validPasswordConfrim(password, passwordConfirm, passwordConfirmInfo);
			return true;
		}
	}
}

function validPasswordConfrim(password, passwordConfirm, passwordConfirmInfo) {
	
	if (passwordConfirm.val()==""){
		passwordConfirm.addClass("error");
		passwordConfirmInfo.text(app.resources["PWDCONF_REQUIRED"]);
		passwordConfirmInfo.addClass("error");
		return false;
	} else if( password.val() == passwordConfirm.val() ){
		passwordConfirm.removeClass("error");
		passwordConfirmInfo.text("");
		passwordConfirmInfo.removeClass("error");
		return true;
	} else{
		passwordConfirm.addClass("error");
		passwordConfirmInfo.text(app.resources["PWD_MISMATCH"]);
		passwordConfirmInfo.addClass("error");
		return false;
	}
}

function validPasswordAnswer(passwordAnswer, passwordAnswerInfo) {
	
	if(passwordAnswer.val() == ""){
		passwordAnswer.addClass("error");
		passwordAnswerInfo.text(app.resources["PWDANS_REQUIRED"]);
		passwordAnswerInfo.addClass("error");
		return false;
	} else{
		passwordAnswer.removeClass("error");
		passwordAnswerInfo.text("");
		passwordAnswerInfo.removeClass("error");
		return true;
	}
}

function validRegistrationEmail(email, emailInfo, emailConfirm, emailConfirmInfo) {
	//testing regular expression
	var a = email.val();
	//email.val(a.toLowerCase());
	//var filter = /^[\w-\.]{1,}\@([\da-zA-Z-]{1,}\.){1,}[\da-zA-Z-]{2,3}$/;//
	var filter = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{3,}))$/;
	//if it's valid email
	if(filter.test(a)){
		if(a.length > 512) {
			
			email.addClass("error");
			emailInfo.text(app.resources["EMAIL_INVALID"]);
			emailInfo.addClass("error");
			emailInfo.css("display","block");
			return false;
		
		} else {
			email.removeClass("error");
			emailInfo.text("");
			emailInfo.removeClass("error");
			emailInfo.css("display","none");
			validEmailConfirm(email, emailConfirm, emailConfirmInfo);
			return true;
		}
	}
	//if it's NOT valid
	else{
		email.addClass("error");
		if (a==""){
			emailInfo.text(app.resources["EMAIL_REQUIRED"]);
		}
		else {
			emailInfo.text(app.resources["EMAIL_INVALID"]);
		}					
		emailInfo.addClass("error");
		emailInfo.css("display","block");
		
		return false;
	}
}

function validEmailConfirm(email, emailConfirm, emailConfirmInfo) {
	
	var a = email.val();
	var b = emailConfirm.val();
	//if it's valid email
	if (b==""){
		emailConfirm.addClass("error");
		emailConfirmInfo.text(app.resources["EMAILCONF_REQUIRED"]);
		emailConfirmInfo.addClass("error");
		return false;
	}
	else if( a.toLowerCase().search( b.toLowerCase() ) != -1 && b.toLowerCase().search( a.toLowerCase() ) != -1 ) {
		emailConfirm.removeClass("error");
		emailConfirmInfo.text("");
		emailConfirmInfo.removeClass("error");
		return true;
	}
	//if it's NOT valid
	else{
		emailConfirm.addClass("error");
		emailConfirmInfo.text(app.resources["EMAIL_MISMATCH"]);
		emailConfirmInfo.addClass("error");
		return false;
	}
}

function validateAge(month, year){
	
	var currdate = new Date();
	var monthsCurrent = (currdate.getFullYear()*12) + currdate.getMonth() + 1;
	var monthsBirth = month + (year*12) + 1;
	var monthsreq = 156; // 12*13
	var param = monthsCurrent - monthsBirth + 1;

	if ( param > monthsreq ) {
		jQuery("#18yearsold").text("");
		jQuery("#18yearsold").removeClass("error");
		return true;
	} else {
		jQuery("#18yearsold").text("${Resource.msg('validate.age','pgprestige',null)}");
		jQuery("#18yearsold").addClass("error");
		return false;
	}
}

function validPasswordQuestionAnswer(answer, answerConfirmInfo){
	//if it's NOT valid
	
	var pattern = new RegExp("^[a-zA-Z\-. ']*");
	
	if(answer.val().length < 1 || answer.val()==''){
		
		answer.addClass("error");
		answerConfirmInfo.text(app.resources["PWDQANS_REQUIRED"]);
		answerConfirmInfo.addClass("error");
		return false;
		
	} else if(answer.val().length > 19){
		
		answer.addClass("error");
		answerConfirmInfo.text(app.resources["FNAME_INVALID"]);
		answerConfirmInfo.addClass("error");
		return false;
		
	} else if(!pattern.test(answer.val())) { 
		
		answer.addClass("error");
		answerConfirmInfo.text(app.resources["ANSFORMAT_INVALID"]);
		answerConfirmInfo.addClass("error");
		return false;
		
	} else{
		
		answer.removeClass("error");
		answerConfirmInfo.text("");
		answerConfirmInfo.removeClass("error");
		return true;
	}
}


function validAddressName(addressid, addressidInfo){
	//if it's NOT valid
	
	var pattern = new RegExp("^[a-zA-Z\-. ']*$");
	
	if(addressid.val().length < 1 || addressid.val()==''){
		
		addressid.addClass("error");
		addressidInfo.text(app.resources["ADDNAME_REQUIRED"]);
		addressidInfo.addClass("error");
		return false;
		
	} else if(addressid.val().length > 19){
		
		addressid.addClass("error");
		addressidInfo.text(app.resources["FNAME_INVALID"]);
		addressidInfo.addClass("error");
		return false;
		
	} else if(!pattern.test(addressid.val())) { 
				
		addressid.addClass("error");
		addressidInfo.text(app.resources["NAMEFORMAT_INVALID"]);
		addressidInfo.addClass("error");
		return false;
		
	} else{
		
		addressid.removeClass("error");
		addressidInfo.text("");
		addressidInfo.removeClass("error");
		return true;
	}
}


