;(function($) {

	$.fn.adderror = function() {
		$(this).next('label').addClass('error');
		$(this).focus();
		return false;
	}

})(jQuery);

function isValidEmail(value)
{
	// Verrrrry simplified email validation as it would never know that "iam@faker.cx" is never going to be genuine.
	apos=value.indexOf("@");
	dotpos=value.lastIndexOf(".");
	if (apos<1||dotpos-apos<2)
	{return false;}
	else {return true;}
}


function getDate()
{
	var d = new Date();
	// return (((1+d.getMonth())<10) ? "0" + (d.getMonth()+1): d.getMonth()+ 1) + "/" + (d.getDate() < 10? "0"+d.getDate() : d.getDate()) + "/" + d.getFullYear();
	return (d.getDate() < 10? "0"+d.getDate() : d.getDate()) + "/" + (((1+d.getMonth())<10) ? "0" + (d.getMonth()+1): d.getMonth()+ 1) + "/" + d.getFullYear();
}

$(function(){

	$('#resdate').val(getDate()).DatePicker({
		format:'d/m/Y',
		date: getDate(),
		current: getDate(),
		starts: 1,
		position: 'r',
		onBeforeShow: function(){
			$('#resdate').DatePickerSetDate(getDate(), true);
		},
		onChange: function(formated, dates){
			$('#resdate').val(formated);
			$('#resdate').DatePickerHide();
		}
	});

	$('#bookingsform').submit(function(){
	
		var items = new Array(
			new Array('firstname', 'first name'),
			new Array('lastname', 'last name'),
			new Array('phone', 'phone number'),
			new Array('email', 'e-mail address'),
			new Array('resdate', 'reservation date'),
			new Array('restime', 'reservation time'),
			new Array('respeople', 'amount of people'),
			new Array('notes', 'notes'),
			new Array('captcha', 'validation code')
		);
	
		$('#bookingsform label').removeClass('error');
		
		for (i=0; i < items.length; i++) {
			var elemtype = $('#bookingsform #'+items[i][0]).attr('tagName').toLowerCase();
			var itemvalue = "";
			
			itemvalue = $('#bookingsform #'+items[i][0]).val();
			
			if (elemtype == "select" && $.browser.msie && itemvalue == "")
			{
				itemvalue = $('#bookingsform #'+items[i][0]+' option:selected').val();
			}

			if (itemvalue == "" && items[i][1] != "")
			{
				$('#bookingsform #'+items[i][0]).adderror();
				return false;
			}
		}
				
		if (isValidEmail($('#bookingsform #email').val()) == false)
		{
			$('#bookingsform #email').adderror();
			return false;
		}
		
		/* submit the page (through ajax, do not use "browser post" ) ... */
		
		var posturl = $("#bookingsform").attr("action");
		var dataString = "";
		
		for (i=0; i < items.length; i++) {
			if (dataString != "") { dataString += "&"; }
			dataString += items[i][0] + "=" + $('#bookingsform #'+items[i][0]).val();
		}
		
		$.ajax({
      type: "POST",
      url: posturl,
      data: dataString,
	  beforeSend: function() {
		$('#bookingsform input[type=submit]').attr("disabled", "true").val('Submitting...');
	  },
      success: function(xhr) {
		if (xhr == "OK") {
			$('#bookingsform').html("<div id='message'></div>");
			$('#bookingsform #message').html("<h2>Thank you.</h2>")
			.append("<p>Thank you for your message. You will be contacted shortly.</p>")
			.hide()
			.fadeIn(1500, function() {
			  $('#bookingsform #message').append("<img id='checkmark' src='images/check.png' />");
			});
		}
		else
		{
			$('#bookingsform input[type=submit]').attr("disabled", "").val('Submit');
			if (xhr == 'CAPTCHA_FAILED') alert("The validation code is incorrect.");
			else alert('There has been an error.\nPlease try again later.\nError:'+xhr);
		}
      },
	  timeout: function() {
		alert("A timeout has occurred during your request.\nPlease try again.");
	  },
	  error: function (xhr, ajaxOptions, thrownError) {
		$('#prizeform input[type=submit]').attr("disabled", "").val('Submit');
		//alert(xhr.status);
		if (xhr.status == '404') alert("Ajax Error - Requested file not found.");
		else if (xhr.status == '555') alert("The given e-mail address already exists.");
		else alert("Ajax Error" + xhr.status);
		//alert(thrownError);
		$('#bookingsform input[type=submit]').attr("disabled", "").val('Submit');
      }
     });
    return false;
	});
});