var QS_Constants;




/**

QS_Constants:
   Defines constant values that are reused within js files throughout the application

author: dedmondson
date:   05/04/2009
*/

// Object Def
function  QS_Constants(){

  var POSTCODE_REGEX = /^[a-zA-Z][a-zA-Z0-9]{1,3}\s?\d[a-zA-Z]{2}$/;
 
  // Public 
  return{
  	
	//-- Support Functions ---------------------------------
	initCustomValidationRules:function(){
		
		 // validation for uk postcodes including normalistion of field data
		 jQuery.validator.addMethod("ukPostCode", function(value, element) {	
		  if(value){
			 value = new String($.trim(value)).toUpperCase();
			 element.value=value;
		  }
		  return this.optional(element) ||  POSTCODE_REGEX.test(value); 
	      }, "Please enter a valid UK Postcode");
		
	},

	//-- Validation rules ---------------------------------
	validation_rules: function(form){
		
		if(!form){
			alert("DEV NOTE: Please set a form id against validation rules for this form");
			return;
		}
		
		return {
			personTitle: {
				required: true
			},
			firstName: {
				required: true,
				maxlength: 30
			},
			lastName: {
				required: true,
				maxlength: 30
			},
			phone1: {
				required: true,
				maxlength: 20
			},
			phone2: {
				maxlength: 20
			},
			address1: {
				required: true,
				maxlength: 30
			},
			address2: {
				maxlength: 30
			},
			address3: {
				maxlength: 30
			},
			zipCode: {
				required: function(element){
					return $(form + " select[name='country']").val() == "GB";
				},
				ukPostCode: true
			},
			city: {
				required: true,
				maxlength: 30
			},
			state: {
				required: true,
				maxlength: 30
			},
			country: {
				required: true
			},
			email1: {
				email: true,
				required: true,
				minlength: 4
			},
			emailVerify: {
				email: true,
				required: true,
				minlength: 4,
				equalTo: form + " input[name='email1']"
			},
			shipModeId: {
				required: true
			},
			policyId: {
				required: true
			},
			cardNumber: {
				required: true,
				maxlength: 20,
				creditcard: true,
				digits: true
			},
			cardHolderName: {
				required: true,
				maxlength: 100
			},
			cardExpiryMonth: {
				required: true,
				digits: true,
				maxlength: 2,
				minlength: 2
			},
			cardExpiryYear: {
				required: true,
				digits: true,
				maxlength: 2,
				minlength: 2
			},
			cardStartMonth: {
				digits: true,
				maxlength: 2,
				minlength: 2
			},
			cardStartYear: {
				digits: true,
				maxlength: 2,
				minlength: 2
			},
			cardIssue: {
				digits: true,
				maxlength: 2
			},
			verificationNumber: {
				required: true,
				maxlength: 3,
				minlength: 3,
				digits: true
			},
			subscribeEmail: {
				required: true,
				email: true
			},
			subscribeEmailAddress: {
				required: true,
				email: true,
				maxlength: 100
			},
			subscribeTitle: {
				required: true
			},
			subscribeFirstName: {
				required: true
			},
			subscribeLastName: {
				required: true
			},
			logonId: {
				required: true,
				email: true,
				maxlength: 100
			},
			logonPassword: {
				required: true,
				minlength: 6
			
			},
			logonPasswordVerify: {
				required: true,
				minlength: 6,
				equalTo: form + " input[name='logonPassword']"
			},
			terms: {
				required: true
			},
			sender_name: {
				required: true,
				minlength: 2
			},
			sender: {
				email: true,
				required: true,
				minlength: 4
			},
			recipient_name: {
				required: true,
				minlength: 2
			},
			recipient: {
				email: true,
				required: true,
				minlength: 4
			},
			message: {
				required: false,
				maxlength: 1000
			},
			fromname: {
				required: true,
				maxlength: 100
			},
			toname: {
				required: true,
				maxlength: 100
			},
			fromemail: {
				required: true,
				email: true,
				maxlength: 100
			},
			toemail: {
				required: true,
				email: true,
				maxlength: 100
			},
			emailMessage: {
				required: true,
				maxlength: 1000
			},
			rating: {
				required: true
			},
			foreName: {
				required: true,
				maxlength: 100
			},
			emailAddress: {
				required: true,
				email: true,
				maxlength: 100
			},
			reviewTitle: {
				required: true,
				maxlength: 100
			},
			reviewText: {
				required: true,
				maxlength: 1000
			},
			QS_contactFormOption: {
				required: true
			},
			surname: {
				required: true,
				maxlength: 30
			},
			tel: {
				maxlength: 20
			},
			fromEmail: {
				required: true,
				email: true,
				maxlength: 100
			}
		
		
		 }//end validation rules
	   },
		
		
		//-- Validation Messages ---------------------------------

		validation_messages: {
			personTitle:{
			   required:"Please select your title."
		     },
		    firstName:{
		    	 required:"Your first name is required.",
		    	 maxlength:"Forename must not exceed 30 characters in length."
		     },
		     lastName:{
		    	 required:"Your surname is required.",
		    	 maxlength:"Surname must not exceed 30 characters in length."
		     },
		     phone1:{
		    	 required:"Please enter your phone number."	,
		    	 maxlength:"Your phone number cannot exceed 20 characters."
		     },
		     phone2:{
		    	 maxlength:"Your phone number cannot exceed 20 characters."		    	 
		     },
		     address1:{
		    	 required:"Please enter the first line of your address.",
		    	 maxlength:"Your address cannot contain more then 30 characters"
		     },
		     address2:{
		    	 maxlength:"The second line of your address cannot contain more then 30 characters"
		     },
		     address3:{
		    	 maxlength:"The third line of your address cannot contain more then 30 characters"
		     },
		     zipCode:{
				   required:"Please enter a UK Postcode.",
				   ukPostCode:"UK Postcode has invalid format"					  
			 },
		     city:{
		    	 required:"Please enter a valid city or town.",
				 maxlength:"Your city/town cannot exceed 30 characters."
		     },
		     state:{
		    	 required:"Please enter a state/county/province.",
				 maxlength:"Your state/county/province cannot exceed 30 characters."
		     },
		     country:{
		    	 required:"Please select a country."
		     }, 
			 email1:{
			   email:"Invalid email address",
		       minlength:"email must be 4 characters or more."
		      
		     },
	         emailVerify: {
	            email:"Invalid email address",
		        minlength:"Re-typed email must be 4 characters or more.",
		        equalTo: "emails entered do not match"
		    },	
			shipModeId:{			    	 
			   required:"A shipping option must be selected."
			},
			policyId:{
			   required:"Please select a card type."
		     },
		    cardNumber:{			    	 
		    	 maxlength:"Your card number cannot exceed 20 numbers in length.",
		    	 creditcard:"You did not enter a valid credit card number.  Please verify and try again.",
		    	 digits:"The card number you entered must contain numbers only"
		     },
		     cardHolderName:{
		    	 required:"Please enter your name as it appears on your card",
		    	 maxlength:"Your name must not exceed 100 characters in length."
		     },
		     cardExpiryMonth:{
		    	 required:"Card expiry month id required",
		    	 digits:"Please enter a 2 digit number for the expiry month, i.e. for January enter 01.",
		    	 maxlength:"Please enter a 2 digit number for the expiry month, i.e. for January enter 01.",
		    	 minlength:"Please enter a 2 digit number for the expiry month, i.e. for January enter 01."
		     },
		     cardExpiryYear:{
		    	 required:"Card expiry year is required",
		    	 digits:"Please enter a 2 digit number for the expiry year.",
		    	 maxlength:"Please enter a 2 digit number for the expiry year.",
		    	 minlength:"Please enter a 2 digit number for the expiry year."
		     },
		     cardStartMonth:{
		    	 digits:"Please enter digits only for the start month, i.e. for January enter 01.",
		    	 maxlength:"Please enter a 2 digit number for the start month, i.e. for January enter 01.",
		    	 minlength:"Please enter a 2 digit number for the start month, i.e. for January enter 01."
		     },
		     cardStartYear:{
		    	 digits:"Please enter digits only for the start year.",
		    	 maxlength:"Please enter a 2 digit number for the start year.",
		    	 minlength:"Please enter a 2 digit number for the start year."
		     },
		     cardIssue:{			    	 
		    	 digits:"Please enter numbers only for the issue number.",
		    	 maxlength:"Issue number cannot exceed 2 digits."
		     },
		     verificationNumber:{
		    	 required:"Please enter the last 3 digits of the number on the back of your card",
		    	 maxlength:"Please only enter the last 3 digits",
		    	 minlength:"Please only enter the last 3 digits",
		    	 digits:"Please enter numbers only for the verification number."
		     },
			subscribeEmail:{
		       required:"Please supply a valid email address.",
		       email: "Please supply a valid email address."
		     },
			 subscribeEmailAddress: {
			 	required:'Email address is required', 
			    email:'Invalid email address' 
			 },
		     subscribeTitle:{
		        required:"Please select a title."
		     },
		     subscribeFirstName:{
		    	required:"Please enter your first name."
		     },
		     subscribeLastName:{
		    	required:"Please enter your last name."
		     },
			logonId:{
				required:"Your email address is required.",
				email:"Your email does not seem to be in a valid format.",
				maxlength:"Your email cannot exceed 100 characters."
			},
			logonPassword:{
		       minlength:"Password must be 6 characters or more.",
		       equalTo: "Passwords entered do not match"
		     },
			logonPasswordVerify: {
		        minlength:"Re-typed password must be 6 characters or more.",
				equalTo:"Re-typed password must match password"
		    },
		    terms:{
				required:"Please read and accept our terms and conditions before completing your registration"
			},
			sender_name:{
			   minlength:"Your name must be at least 2 characters in length"
		    },
		    sender:{
			   email:"Your email address is not valid",
		       minlength:"Your email address must be 5 characters or more."
		    },
			recipient_name:{
			   minlength:"Friend's name must be at least 2 characters in length"
		    },
	        recipient: {
	            email:"Friend's email address is not valid",
		        minlength:"Friend's email address must be 5 characters or more."
		    },
		    message: {
		        maxlength:"Message must be 1000 characters or less."
		    },
			fromname:{
		    	 required:"Your name is required to send.",
		    	 maxlength:"Forename must not exceed 100 characters in length."
		     },
		     toname:{
		    	 required:"Your friend's name is required.",
		    	 maxlength:"Surname must not exceed 100 characters in length."
		     },
		     fromemail:{
		    	 required:"Please enter a valid email address.",
		    	 email:"The email you entered seems to have an error, please re-enter.",
		    	 maxlength:"The length of the email address cannot exceed 100 characters."
		     },
		     toemail:{
		    	 required:"Please enter a valid email address.",
		    	 email:"Your friend's email seems to have an error, please re-enter.",
		    	 maxlength:"The length of the email address cannot exceed 100 characters."
		     },
		     emailMessage:{
		    	 required:"Please supply a message to send to your friend.",
		    	 maxlength:"Message cannot contain more then 1000 characters."
		     },
			 rating:{
		    	 required:"Please choose a rating from 1 to 5 stars."	    	
		     },
		     foreName:{
		    	 required:"Your name is required for this review.",
		    	 maxlength:"Your name not exceed 100 characters in length."
		     },
		     emailAddress:{
		    	 required:"Please enter a valid email address.",
		    	 email:"The email you entered seems to have an error, please re-enter.",
		    	maxlength:"The length of the email address cannot exceed 100 characters."
		     },
		     reviewTitle:{
		    	 required:"Please give a title to your review.",
		    	 maxlength:"Your title cannot exceed 100 characters."
		     },
		     reviewText:{
		    	 required:"Please supply comments to your review.",
		    	 maxlength:"Your review cannot contain more then 1000 characters."
		     },
			 QS_contactFormOption:{
			   required:"Please select a reason for your enquiry."
		     },
		     surname:{
		    	 required:"Your surname is required.",
		    	 maxlength:"Surname must not exceed 30 characters in length."
		     },
		     tel:{			    	 
		    	 maxlength:"Telephone must not exceed 20 characters in length."
		     },
		     fromEmail:{
		    	 required:"Please enter a valid email address.",
		    	 email:"The email you entered does not seem to have a valid format.  Please check and try again.",
		    	 maxlength:"The length of the email address cannot exceed 100 characters."
		     }
			
	    },
		
		postcodeRegex:function(){
			return POSTCODE_REGEX;
		}

    
 
  }//end return
}//end object def

// On page load
$(function(){
 QS_Constants = new QS_Constants();
 QS_Constants.initCustomValidationRules();
 

 
});