/*
 * 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 = $("#customer_fname");
	var lname = $("#customer_lname");
	var addr = $("#address1");
	var city = $("#city");
	var state = $("#state");
	var postal = $("#zipcode");
	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 validateState() {
		if ( state.val().length < 4 ) {
			state.addClass("error");
		} else {
			state.removeClass("error");
			return true;
		}
	}

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

	function validatePhone() {
		if ( phone.val().length < 2 ) {
			phone.addClass("error");
		} else if ( isValidUSPhone(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 isValidUSPhone(number) {
		var pattern = new RegExp(/^\([1-9]\d{2}\)\s?\d{3}\-\d{4}$/);
		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 isValidUSPostcode(field){
		var valid = "0123456789-";
		var hyphencount = 0;

		if (field.length!=5 && field.length!=10) {
			return false;
		}
		for (var i=0; i < field.length; i++) {
			temp = "" + field.substring(i, i+1);
			if (temp == "-") hyphencount++;
			if (valid.indexOf(temp) == "-1") {
				return false;
			}
			if ((hyphencount > 1) || ((field.length==10) && ""+field.charAt(5)!="-")) {
				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() && validateState() && validatePostal() && 
			validatePhone() && validateEmail() ) {
			return true;
		} else {
			alert( "Please correct highlighted input fields." );
			return false;
		}
	});

});
