/*
	Prepare events on document load
*/
$(document).ready(function() {
	var today = new Date();

	// Default values
	$('#dateFrom').val(VeryShortDateString(today));
	$('#timeFrom').val('09:00am');
	$('#dateTo').val('click here');
	$('#timeTo').val('05:00pm');

	// Initialize date/time controls.
	$('#dateFrom').datepicker({duraction:'fast', goToCurrent:true, minDate: today});
	$('#dateTo').datepicker({duraction:'fast', goToCurrent:true});
	$('#timeFrom').timepicker();
	$('#timeTo').timepicker();

	// bind submit button functionality
	$('#submitButton').click(function() {
		 if(ValidateForm()) {
			PostBookingRequest();
			$('#dialogValidation').dialog('option', 'title', 'Thank you!');
			$('#dialogValidation').html("<br>We will contact you soon.<br>");
			$('#dialogValidation').bind('dialogclose', function(event, ui) { window.location.href = "bookings.php"; });						
			$('#dialogValidation').dialog("open");
		return true;
		 }
	});
	
	// bind back button functionality
	$('#backButton').click(function() {
		window.history.go(-1);
	});
	
	// Initialize validation dialog
	$('#dialogValidation').dialog({
		autoOpen:false, 
		bgiframe:true, 
		modal:true, 
		buttons:{
			'Close': function() {$(this).dialog('close');}}, 
		width:'350px'
	});
	
	// Set primary focus
	$('#firstName').focus();
});


/*
	Validate Comments Form
	
	Ensure all required fields are entered.
*/
function ValidateForm()
{
	var isValid = CheckRequiredField('#firstName')
				& CheckRequiredField('#lastName')
				& CheckRequiredField('#dogsName')
				& CheckRequiredField('#email')
				& IsValidEmail('#email')
				& CheckRequiredField('#phone')
				& IsValidTelephone('#phone')
				& CheckRequiredField('#timeFrom')
				& CheckRequiredField('#timeTo')
				& CheckRequiredField('#dateFrom')
				& CheckRequiredField('#dateTo')
				& CheckRequiredField('#comments');
	
	if( !isValid ) {
		$('#dialogValidation').dialog('option', 'title', 'Please Review');
		$('#dialogValidation').html(
			"<br>There is a problem with one or more entries:<br><br>"
			+ ( CheckRequiredField('#firstName') ? "" : "<li><b>First Name</b> - required")
			+ ( CheckRequiredField('#lastName') ? "" : "<li><b>Last Name</b> - required")
			+ ( CheckRequiredField('#dogsName') ? "" : "<li><b>Dog&apos;s Name</b> - required")
			+ ( CheckRequiredField('#email') ? "" : "<li><b>Email Address</b> - required")
			+ ( IsValidEmail('#email') ? "" : "<li><b>Email Address</b> - invalid format")
			+ ( CheckRequiredField('#phone') ? "" : "<li><b>Phone Number</b> - required")
			+ ( IsValidTelephone('#phone') ? "" : "<li><b>Phone Number</b> - invalid format, try 555.555.5555")
			+ ( CheckRequiredField('#timeFrom') ? "" : "<li><b>Time From</b> - required")
			+ ( CheckRequiredField('#timeTo') ? "" : "<li><b>Time To</b> - required")
			+ ( CheckRequiredField('#dateFrom') ? "" : "<li><b>Date From</b> - required")
			+ ( CheckRequiredField('#dateTo') ? "" : "<li><b>Date To</b> - required")
			+ ( CheckRequiredField('#comments') ? "" : "<li><b>Comments</b> - required")
			+ "</ul><br>"
		);
		$('#dialogValidation').dialog("open");
	}
	
	return isValid;
}


/*
	Check Required Field
	
	Looks for an empty value returning false and setting the field's label color.
*/
function CheckRequiredField(name) {
	var isValid = true;
	
	if( $(name).val() == '' ) {
		isValid = false;
		$('tr:has(' + name + ')').addClass('required');
	}
	else {
		$('tr:has(' + name + ')').removeClass('required');
	}
	
	return isValid;
}


/*
	Email validation
*/
function IsValidEmail(name) {
	var isValid = true;
	
	var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
	if(reg.test($(name).val()) == false) {
		isValid = false;
		$('tr:has(' + name + ')').addClass('required');
	}
	else {
		$('tr:has(' + name + ')').removeClass('required');
	}
	
	return isValid;
}


/*
	Telephone validation
*/
function IsValidTelephone(name) {
	var isValid = true;
	
	var reg = /^(\()?([0-9]{3})+(\))?(\-|[ ]|.)([0-9]{3})+(\-|[ ]|.)([0-9]{4})$/;
	if(reg.test($(name).val()) == false) {
		isValid = false;
		$('tr:has(' + name + ')').addClass('required');
	}
	else {
		$('tr:has(' + name + ')').removeClass('required');
	}
	
	return isValid;
}


/*
	Save the Booking Request
*/
function PostBookingRequest() {
	$.post(
		'booking_sendemail.php',
		{
			firstName: $('#firstName').val(),
			lastName: $('#lastName').val(),
			dogsName: $('#dogsName').val(),
			email: $('#email').val(),
			phone: $('#phone').val(),
			timeFrom: $('#timeFrom').val(),
			timeTo: $('#timeTo').val(),
			dateFrom: $('#dateFrom').val(),
			dateTo: $('#dateTo').val(),
			comments: $('#comments').val()
	});
}


/*
	Return a date offset from a specified date and number of days
*/
function AddDays(date, days) {
   var offset = days * 86400000;
   var newDate = new Date();
   newDate.setTime(date.getTime() + offset);
   return newDate;
}


/*
	Format a Date as MM/dd/yyyy
*/
function VeryShortDateString(date) {
	return AppendString(date.getMonth()+1, 2, "0") + "/" + AppendString(date.getDate(), 2, "0") + "/" + date.getFullYear();
}


/*
	Prepend a string up to a certain length with a specific character.
*/
function AppendString(string, maximumLength, paddingCharacter) {
	var tempString = "" + string;
	if(typeof(string) == "undefined") tempString = "";
	
	while(tempString.length < maximumLength) tempString = paddingCharacter + tempString;
	return tempString;
}