/*
 * Form Validation - Coaction Media
 * Author: Dan Davis-Boxleitner for Coaction Media (http://www.coactionmedia.com/)
 * Copyright (c) 2010 Coaction Media
*/
$(document).ready(function() {

	var form = $("#mainForm");
	var fname = $("#first");
	var lname = $("#last");
	var addr = $("#addr1");
	var city = $("#city");
	var postal = $("#postal");
	var phone = $("#phone");
	var email = $("#email");

	function validateFName() {
		if ( fname.val().length < 2 ) {
			fname.addClass("error");
		} else {
			fname.removeClass("error");
			return true;
		}
	}

	function validateLName() {
		if ( lname.val().length < 2 ) {
			lname.addClass("error");
		} else {
			lname.removeClass("error");
			return true;
		}
	}

	function validateAddr() {
		if ( addr.val().length < 5 ) {
			addr.addClass("error");
		} else {
			addr.removeClass("error");
			return true;
		}
	}

	function validateCity() {
		if ( city.val().length < 2 ) {
			city.addClass("error");
		} else {
			city.removeClass("error");
			return true;
		}

	}

	function validatePostal() {
		if ( postal.val().length < 5 ) {
			postal.addClass("error");
		} else if ( isValidUKPostcode( postal.val() ) == false ) {
			email.addClass("error");
		} else {
			postal.removeClass("error");
			return true;
		}
	}

	function validatePhone() {
		if ( phone.val().length < 2 ) {
			phone.addClass("error");
		} else if ( isValidUKPhone(phone.val()) == false ) {
			phone.addClass("error");
		} else {
			phone.removeClass("error");
			return true;
		}
	}

	function validateEmail() {
		if ( email.val().length < 2 ) {
			email.addClass("error");
		} else if ( isValidEmailAddress(email.val()) == false ) {
			email.addClass("error");
		} else {
			email.removeClass("error");
			return true;
		}
	}
	
	function isValidUKPhone(number) {
		var pattern = new RegExp(/(^[0-9\s\-\+]{10,})$/gi);
		return pattern.test(number);
	}
	
	function isValidEmailAddress(emailAddress) {
		var pattern = new RegExp(/^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i);
		return pattern.test(emailAddress);
	}

	function isValidUKPostcode(code){
		test = code; size = test.length
		test = test.toUpperCase();
		while (test.slice(0,1) == " "){
			test = test.substr(1,size-1);size = test.length
		}
		while(test.slice(size-1,size)== " "){
			test = test.substr(0,size-1);size = test.length
		}
		if (size < 6 || size > 8){ return false; }
		if (!(isNaN(test.charAt(0)))){ return false; }
		if (isNaN(test.charAt(size-3))){ return false; }
		if (!(isNaN(test.charAt(size-2)))){ return false; }
		if (!(isNaN(test.charAt(size-1)))){ return false; }
		if (!(test.charAt(size-4) == " ")){ return false; }
		count1 = test.indexOf(" ");count2 = test.lastIndexOf(" ");
		if (count1 != count2){ return false; }
		return true;
	}	

	// On blur
	fname.blur(validateFName);
	lname.blur(validateLName);
	addr.blur(validateAddr);
	city.blur(validateCity);
	postal.blur(validatePostal);
	phone.blur(validatePhone);
	email.blur(validateEmail);

	//On key press
	fname.keyup(validateFName);
	lname.keyup(validateLName);
	addr.keyup(validateAddr);
	city.keyup(validateCity);
	postal.keyup(validatePostal);
	phone.keyup(validatePhone);
	email.keyup(validateEmail);

	form.submit(function(){
		if(validateFName() && validateLName() && validateAddr() &&
			validateCity() && validatePostal() && validatePhone() &&
			validateEmail() ) {
			return true;
		} else {
			alert( "Please correct highlighted input fields." );
			return false;
		}
	});

});
