$(document).ready(function() {
	$("input.datepicker").datepicker();
});

$(document).ready(function() {
    var max = 0;
    $("label").each(function(){
        if ($(this).width() > max)
            max = $(this).width();
    });
    $("label").width(max);
});

$(document).ready(function(){
	$(":input").not("input[type=submit]")
	.focus(function() {
		$(this).parent().parent().addClass("curFocus");
	})
	.blur(function(){
		$(this).parent().parent().removeClass("curFocus");
	})
});

jQuery.validator.addMethod("phoneUS", function(phone_number, element) {
    phone_number = phone_number.replace(/\s+/g, ""); 
	return this.optional(element) || phone_number.length > 9 &&
		phone_number.match(/^((\+\d{1,3}(-| )?\(?\d\)?(-| )?\d{1,5})|(\(?\d{2,6}\)?))(-| )?(\d{3,4})(-| )?(\d{4})(( x| ext)\d{1,5}){0,1}$/);
}, "Please specify a valid phone number");


$.validator.addMethod('postalCode', function (value) { 
    return /^[ABCEGHJ-NPRSTVXY|abceghj-nprstvxy]{1}[0-9]{1}[ABCEGHJ-NPRSTV-Z|abceghj-nprstv-z]{1}[ ]?[0-9]{1}[ABCEGHJ-NPRSTV-Z|abceghj-nprstv-z]{1}[0-9]{1}$/.test(value); 
}, 'Please enter a valid Canadian postal code.');

$.validator.addMethod('postalCode', function (value) { 
    return /^[ABCEGHJ-NPRSTVXY|abceghj-nprstvxy]{1}[0-9]{1}[ABCEGHJ-NPRSTV-Z|abceghj-nprstv-z]{1}[ ]?[0-9]{1}[ABCEGHJ-NPRSTV-Z|abceghj-nprstv-z]{1}[0-9]{1}$/.test(value); 
}, 'Please enter a valid Canadian postal code.');

$.validator.addMethod("checkOutDate", function(value, element) {
	var checkInDate = $('#checkIn').val();
	return Date.parse(checkInDate) < Date.parse(value);
}, "End Date should be greater than Start Date.");


$(document).ready(function(){
	$("#reservationForm").validate({
	groups: {
		siteNumber: "siteNumber1 siteNumber2 siteNumber3"
	},
	errorPlacement: function(error, element) {
		if (element.attr("name") == "siteNumber1" || element.attr("name") == "siteNumber2" || element.attr("name") == "siteNumber3")
			error.insertAfter("#siteNumber3");
		else
			error.insertAfter(element);
		},
	rules: {
		name: "required",
		address: "required",
		city: "required",
		province: "required",
		postalCode: {
			required: true,
			postalCode: true
		},
		phone: {
			required:true,
			phoneUS: true
		},
		email: {
			required: true,
			email: true
		},
		checkIn: {
			required: true,
			date: true
		},
		checkOut: {
			required: true,
			date: true,
			checkOutDate: true
		},
		siteNumber1: {
			range: [1, 102]
		},
		siteNumber2: {
			range: [1, 102]
		},
		siteNumber3: {
			range: [1, 102]
		},
		adults: "required",
		vehicles: "required"
	},
	messages:{
		name: "Please specify your name.",
		address: "Please specify your address.",
		city: "Please specify your city.",
		province: "Please specify your province.",
		postalCode: {
			required: "Please specify your postal code.",
			postalCode: "Please enter a valid Canadian postal code."
		},
		phone: {
			required: "Please specify your phone number.",
			phoneUS: "Phone number must be in format XXX-XXX-XXXX"
		},
		email: {
			required: "Please specify your email",
			email: "Email must be in format of name@domain.com"
		},
		checkIn: {
			required: "Please specify a check-in date.",
			date: "Date must be specified in MM/DD/YYYY"
		},
		checkOut: {
			required: "Please specify a check-out date.",
			date: "Date must be specified in MM/DD/YYYY",
			checkOutDate: "Check out date must be later than check in date."
		},
		siteNumber1: {
			range: "Site must be specified with site number."
		},
		siteNumber2: {
			range: "Site must be specified with site number."
		},
		siteNumber3: {
			range: "Site must be specified with site number."
		},
		adults: "Please specify the number of adults.",
		vehicles: "Please specify the number of vehicles."
	}
	})
});
