/* Following line is hint for JSLint */
/*global $, document */

 $(document).ready(function() 
 {

	// validate forms taken from http://docs.jquery.com/Plugins/Validation/Methods
	// list all the relevant form IDs that you want to validate
	
	// form validation for contact form and promotions code pages
	$("#promoCodeForm").validate(
	{
		errorLabelContainer: $("form div#errorMessage")
	});
	
	// form validation for contact form and promotions code pages
	$("#contactForm").validate(
	{
		// error messages will be displayed as paragraphs with class "error"
		errorElement: "p",
		
		// place the error labels within .formRow but before .frmElements
		errorPlacement: function(error, element) 
		{
			error.insertBefore(element.prev());
		},
		
		rules: {
			// renewals 
			topicSelection:	"required",
			emailField: {
				required: 	true,
				email: 		true
			},
			questionField:	"required"
		},

		messages: {
			// renewals 
			topicSelection:	"Please select a topic",
			emailField: {
				required: 	"Please enter an email address",
				email: 		"Your email address must be in the format of name@domain.com"
			},
			questionField:	"Please enter any questions or comments"
			
		}
	});
	
	// form validation for renewals page
	$("#findRenewalForm").validate(
	{
		errorContainer: "#errorMessage",
		
		
		// error messages will be displayed as paragraphs with class "error"
		errorElement: "p",
		
		// place the error labels within .formRow but before .frmElements
		errorPlacement: function(error, element) 
		{
			error.insertBefore(element.prev());
		},
		
		rules: {
			// renewals 
			subscriptionNumber:	"required",
			postCodeOrEmail:	"required"
			
		},

		messages: {
			// renewals 
			subscriptionNumber:	"Please enter a subscription number",
			postCodeOrEmail:	"Please enter a postcode or email address"
			
		}
	});	
	
	
	// form validation for main forms across the site
	$("#subscriberServicesForm, #userDetailsForm, #billingAddressForm, #deliveryAddressForm, #creditCardForm, #directDebitForm").validate(
	{
		
		errorContainer: "#errorMessage",
		
		
		// error messages will be displayed as paragraphs with class "error"
		errorElement: "p",
		
		// place the error labels within .formRow but before .frmElements
		errorPlacement: function(error, element) 
		{
			if (element.is(":checkbox") ) {
				error.insertBefore(element);
			}
			else {
	    		error.insertAfter(element);
			}
		},

		
		// form validation rules for ALL forms 
		// specifies the name attributes from the form elements which should be validated
		// http://docs.jquery.com/Plugins/Validation#Options_for_the_validate.28.29_method
		rules: {
			title: 				"required",
			firstName:			"required",
			lastName:			"required",
			jobTitle:			"required",
			email: {
				required: 		true,
				email: 			true
			},
			
			// change address forms (OLD ONLY) in subscriber services
			oldAddress:			"required",
			oldPostCode:		"required",
			oldTownCity:		"required",
			oldTelephone: {
				required: 		true
			},
			
			// change address forms (NEW ONLY) in subscriber services
			newAddress:			"required",
			newAddressDel:		"required",
			newPostCode:		"required",
			newPostCodeDel:		"required",
			newTownCity:		"required",
			newTownCityDel:		"required",
			newTelephone: {
				required: 		true
			},
			newTelephoneDel: {
				required: 		true
			},

			
			// billing and deliver address forms in checkout
			companyName: 		"required",
			address1: 			"required",
			postCodeZipCode:	"required",
			townCity:			"required",
			telephone: {
				required: 		true
			},
			agreeTandC:			"required",
			accHolderName:		"required",
			accNumber: {
				required: true,
				digits: true
			},
			sortCode:			"required",
			
			// credit card area
			cardHolderName:		"required",
			cardNumber: 		"required",
			issueNumber:		"digits",
			cardSecurityCode: {
				required: 		true,
				digits: 		true
			}
			
		},
		
		// Customisable error messages for forms
		messages: {
			title:				"Please select a title",
			firstName:			"Please enter your first name",
			lastName:			"Please enter your last name",
			jobTitle:			"Please enter your job title",
			email:	{
				required: 		"Please enter an email address",
				email: 			"Your email address must be in the format of name@domain.com"
			},
			
			// change address forms in subscriber services
			oldAddress:			"Please enter your old address",
			oldPostCode:		"Please enter your old post code/zip code",
			oldTownCity:		"Please enter your old town/city",
			oldTelephone: {
				required: 		"Please enter your old telephone number"
			},
			
			newAddress:			"Please enter an address",
			newAddressDel:		"Please enter an address",
			newPostCode:		"Please enter a valid post code/zip code",
			newPostCodeDel:		"Please enter a valid post code/zip code",
			newTownCity:		"Please enter a town/city",
			newTownCityDel:		"Please enter a town/city",
			newTelephone: {
				required: 		"Please enter a telephone number"
			},
			newTelephoneDel: {
				required: 		"Please enter a telephone number"
			},
			
			// billing and deliver address forms in checkout
			companyName: 		"Please enter a company name",
			address1: 			"Please enter an address",
			postCodeZipCode:	"Please enter a valid post code/zip code",
			townCity:			"Please enter a town/city",
			telephone: {
				required: 		"Please enter a telephone number"
			},
			agreeTandC:			"You cannot proceed until you have agreed to the terms and conditions",
			
			// direct debit area
			accHolderName:		"Please enter your name",
			accNumber: {
				required: 		"Please enter an account number",
				digits:			"Please enter a valid account number"
			},
			sortCode:			"Please enter your sort code",
			
			// credit card area
			cardHolderName:		"Please enter your name",
			cardNumber: 		"Please enter your card number",
			issueNumber:		"Please enter numeric values only",
			cardSecurityCode: {
				required: 		"Please enter the card security code",
				digits:			"Please enter a 3 digit numeric value"
			}			
		}
	});
	
 });
