		
		//fix: ie6 forgot to add this function, fail ms
		if(!Array.indexOf){
			Array.prototype.indexOf = function(obj){
				for(var i=0; i<this.length; i++){
					if(this[i]==obj){
						return i;
					}
				}
				return -1;
			}
		}
	 
        jQuery.validator.addMethod("persontitle", function(value) {
				var titles = new Array('Mr', 'Mrs', 'Ms', 'Dr');
                if ( titles.indexOf(value) >= 0 ) {
                        return true;
                } else {
                        return false;
                }
         },  "- Please select your <strong>Title<strong>."); 
		 
		jQuery.validator.addMethod("names", function(names, element) {
		    names = names.replace(/\s+/g, ""); 
			return this.optional(element) || names.match(/^([a-zA-z -]+)$/);
		}, "Invalid characters.");
		
		jQuery.validator.addMethod("cemail", function(cemail, element) {
			return this.optional(element) || cemail.match(/^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/);
		}, "Invalid email address.");
		
		jQuery.validator.addMethod("phone", function(phone_number, element) {
		    phone_number = phone_number.replace(/\s+/g, ""); 
			return this.optional(element) || phone_number.match(/^([0-9\+\(\)]+)$/);
		}, "Please specify a valid phone number.");
	
		$(document).ready(function() {

			$("#title").change(function() {
			  $(this).valid();
			}); 
			$("#dob_day").change(function() {
			  $(this).valid();
			}); 
			$("#dob_month").change(function() {
			  $(this).valid();
			}); 
			$("#dob_year").change(function() {
			  $(this).valid();
			}); 
			$("#form-ap").validate({
				errorContainer: "#errorsfound",
				errorPlacement: function(error, element) {
					if (element.attr("name") == "given_names" || element.attr("name") == "last_name" ) {
						error.insertAfter("#last_name");
					} else if (element.attr("name") == "dob_day" || element.attr("name") == "dob_month" || element.attr("name") == "dob_year" ) {
						error.insertAfter("#dob_year");
					} else {
						error.insertAfter(element);
					}
				},
				rules: {
					title: {
						persontitle: true
					},
					given_names: {
						names: true,
						required: true,
						minlength: 2,
						maxlength: 100
					},
					last_name: {
						names: true,
						required: true,
						minlength: 2,
						maxlength: 100
					},
					email: {
					   required: true,
					   cemail: true,
					   maxlength: 100
					},
					phone_number: {
						phone: true,
						required: true,
						minlength: 6,
						maxlength: 20
					},
					mobile_number: {
						minlength: 6,
						maxlength: 20,
						phone: true
					},
					dob_day: {
						required: true
					},
					dob_month: {
						required: true
					},
					dob_year: {
						required: true
					}
				},
				messages: {
					title: {
						required: "- Please select your <strong>Title</strong>."
					},
					given_names: {
						names: "- Invalid characters in your <strong>First Names</strong>.",
						required: "- Please enter your <strong>First names</strong>.",
						minlength: "- Your <strong>First names</strong> should be longer than 2 characters.",
						maxlength: "- Your <strong>First names</strong> can only be 100 characters long."
					},
					last_name: {
						names: "- Invalid characters in your <strong>Surname</strong>.",
						required: "- Please enter your <strong>Surname</strong>.",
						minlength: "- Your <strong>Surname</strong> should be longer than 2 characters.",
						maxlength: "- Your <strong>Surname</strong> can only be 100 characters long."
					},
					email: {
						required: 'Please enter an <strong>Email Address</strong>',
						maxlength: 'Your <strong>Email Address</strong> can only be 100 characters long.',
						cemail: 'Invalid <strong>Email Address</strong>, please try again.'
					},
					phone_number: {
						required: 'Please enter your <strong>Day Time Phone Number</strong>.',
						minlength: "Your <strong>Day Time Phone Number</strong> should be more than 5 numbers.",
						maxlength: "Your <strong>Day Time Phone Number</strong> can't be longer than 20 numbers.",
						phone: 'Invalid <strong>Day Time Phone Number</strong>, please try again.'
					},
					mobile_number: {
						required: 'Please enter a <strong>Mobile Number</strong> we can contact you on.',
						minlength: "Your <strong>Mobile Number</strong> should be longer than 5 numbers.",
						maxlength: "Your <strong>Mobile Number</strong> can't be longer than 20 numbers.",
						phone: 'Invalid <strong>Mobile Number</strong>, please try again.'
					},
					dob_day: {
						required: "- Please select a <strong>Day</strong>."
					},
					dob_month: {
						required: "- Please select a <strong>Month</strong>."
					},
					dob_year: {
						required: "- Please select a <strong>Year</strong>."
					}
				},
				highlight: function(element) {
					$(element).addClass("error");
				    $(element).parents('div:eq(0)').addClass("form-error");
				},
				unhighlight: function(element) {
					$(element).removeClass("error");
					
					//Firstname, lastName
					var grpTGL = new Array("given_names", "last_name");
					var grpOfThree = false;
					var grpOfThreeValid = true;
					for (var i = 0; i < grpTGL.length ; i++) {
						if( $(element).attr("id") == grpTGL[i] ){
							grpOfThree = true;
							for (var j = 0; j < grpTGL.length ; j++) {
								if( $('#' + grpTGL[j]).hasClass("error") ){
									grpOfThreeValid = false;
									break;
								}
							}
							break;
						}
					}
					
					var grpTGL2 = new Array("dob_day", "dob_month", "dob_year");
					var grpOfThree2 = false;
					var grpOfThreeValid2 = true;
					for (var i = 0; i < grpTGL2.length ; i++) {
						if( $(element).attr("id") == grpTGL2[i] ){
							grpOfThree2 = true;
							for (var j = 0; j < grpTGL2.length ; j++) {
								if( $('#' + grpTGL2[j]).hasClass("error") ){
									grpOfThreeValid2 = false;
									break;
								}
							}
							break;
						}
					}
					
					
					//if it is group of three inputs
					if( grpOfThree == true ){
						if( grpOfThreeValid == true ){
							$("#ap-group1").removeClass("form-error");
						}
					}
					if( grpOfThree2 == true ){
						if( grpOfThreeValid2 == true ){
							$("#ap-group5").removeClass("form-error");
						}
					}
					if(grpOfThree2 == false && grpOfThree == false) {
					    $(element).parents('div:eq(0)').removeClass("form-error");
					}
				}
			});
		});