$(document).ready(function() {      

  $("#datepicker").datepicker({
    changeMonth: true,
    changeYear: true,
    showOn: 'both',
    buttonText: ' Please select your arrival date.',
    buttonImage: '../assets/gfx/calendar.gif',
    buttonImageOnly: true,
    /* numberOfMonths: 2, */
    maxDate: '+2y',
    minDate: '0',
    showButtonPanel: false
  });
  
  $("#datepicker").datepicker("option","dateFormat","DD d MM yy");
   
  var gbOptions = { gbWidth: 900, gbHeight: 670 };
  $('.inpage').greybox(gbOptions);		
  
  $('.textinput').focus(function() {
 		$(this).removeClass("textinput").addClass("focusField");
  });
  $('.textinput').blur(function() {
		$(this).removeClass("focusField").addClass("textinput");
  }); 
	
});    

function formSub(rwForm) 
{
	if(document.forms["rwForm"]["datepicker"] !== undefined )
	{
		datepicker_msg = new Array(/^[a-zA-Z]{6,10} [0-9]{1,2} [a-zA-Z]{3,9} [20]{2}[0-9]{2}$/,'Please select your arrival date.');		
		selectnights_msg = new Array(/^[1-9]{1}[0-9]?$/,'Please select the number of nights that you would like to stay with us.');				
  	var fields = new Array('datepicker','selectnights');
    for(i=0; i<fields.length; i++)
    {
      var result = eval(fields[i]+"_msg[0]").test(document.forms["rwForm"][fields[i]].value);
      if(result === false) 
      { 
        document.forms["rwForm"][fields[i]].focus();
        alert (eval(fields[i]+"_msg[1]"));
        return false; 
      }
    }
    return true; 	  	
  }
 
 
  /* Validate secure booking form */
	if(document.forms["rwForm"]["name"] !== undefined )
	{  
    name_msg = new Array(/^[A-Za-z]+/,"Please enter your name.");
    email_msg = new Array(/^[\'a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.([a-zA-Z]{2,4})$/,"Please enter your email address. This will be used for your reservation acknowledgment or if we have a query.");
    tel_msg = new Array(/^\+?[\]0-9 [()]{5,25}$/,"Please enter your telephone number. Your telephone number can contain digits and spaces and may optionally start with a plus sign and contain brackets () to enclose a country code");
    address_msg = new Array(/^[0-9A-Za-z]+/,"Please enter your address.");	
    postcode_msg = new Array(/^[0-9A-Za-z]+/,"Please enter your ZIP or postcode.");
    country_msg = new Array(/^[A-Za-z]+/,"Please enter your country.");
    cardtype_msg = new Array(/^[A-Za-z]+/,"Please select your payment method."); 
  	var fields = new Array('name','email','tel','address','postcode','country','cardtype');
    for(i=0; i<fields.length; i++)
    {
      var result = eval(fields[i]+"_msg[0]").test(document.forms["rwForm"][fields[i]].value);
      if(result === false) 
      { 
        document.forms["rwForm"][fields[i]].focus();
        alert(eval(fields[i]+"_msg[1]"));
        return false; 
      }
    }

    /*******************************************************/
		/* Check card inputs */
    if(document.forms["rwForm"]["cardtype"].value != 'Contact me')
    {
			var cardType = document.forms["rwForm"]["cardtype"].value;
			var payMethod = "CC";
			if(!verifyCC(document.forms.rwForm.cardNumber.value))
  		{
				return false;
			}
			var now = new Date();
      // Check card start month if supplied
    	var startM = rwForm.startMonth.selectedIndex;
    	var startY = rwForm.startYear.selectedIndex;
      if(rwForm.startMonth.options[startM].value !== "" || rwForm.startYear.options[startY].value !== "")
      {
        if(rwForm.startMonth.options[startM].value === "" || rwForm.startYear.options[startY].value === "")
        {
        	document.forms["rwForm"]["startMonth"].focus();
        	alert ("Please enter the card valid from month and year.");
        	return false;
        }
        var startsIn = new Date(startY+2000,startM-1,1,0,0,0)
        if( now.getTime() < startsIn.getTime())
        {
	        document.forms["rwForm"]["startMonth"].focus();
	        alert("The card valid from date you have entered is in the future.");
  	      return false;
        }
      }
      // Check card expiry month supplied
      var expireMonth = rwForm.cardMonth.selectedIndex;
      var expireYr = rwForm.cardYear.selectedIndex;
      if(rwForm.cardMonth.options[expireMonth].value === "" || rwForm.cardYear.options[expireYr].value === "")
      {
      	document.forms["rwForm"]["cardMonth"].focus();
      	alert ("Please enter the card expiry month and year.");
      	return false;
      }
      // Check card expiry month not past
      var expireYr = rwForm.cardYear.value;
      if((expireYr/4) != Math.floor(expireYr/4))
      {
	      var daysInMonth = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
      }
      else // It's a leap year
      {
      	var daysInMonth = new Array(31,29,31,30,31,30,31,31,30,31,30,31);
      }
      var expiresIn = new Date(expireYr,expireMonth-1,daysInMonth[expireMonth-1],23,59,59);
      if(now.getTime() > expiresIn.getTime())
      {
	      document.forms["rwForm"]["cardMonth"].focus();
	      alert("The card expiry date has past.");
  	    return false;
      }
			if(!document.forms["rwForm"]["realname"].value.match(/[A-Za-z]+/))
      {
      	alert("Please enter the name of the cardholder as shown on the card.");
      	rwForm.realname.focus();
      	return false;
      }
			if(!document.forms["rwForm"]["securitycode"].value.match(/[0-9]{3,4}/))      
      {
      	alert("Please enter the last 3 digits of the number on the back of your card.");
      	document.forms["rwForm"]["securitycode"].focus();
      	return false;
      }
    }	
    /*******************************************************/
      
    if(!document.forms["rwForm"]["agreeterms"].checked)     
    {
    	alert("Please tick the box to confirm your agreement to our reservation terms and conditions below.");
      document.forms["rwForm"]["agreeterms"].focus();
      return false;
    }      
    return true;    
	}     
} 


// Function to remove spaces from card number
function strip(cardNumber)
{
	result = cardNumber.replace(/[^0-9]+/g, "");	
	return result;	
}

// Function to check for valid card number
function verifyCC(cardNumber)
{
	if(!document.forms["rwForm"]["cardNumber"].value.match(/[1-9]+/))
	{
		alert("Please enter your card number.");
	  document.forms["rwForm"]["cardNumber"].focus();
		return false;
	}

	var cardNumber = strip(document.forms.rwForm.cardNumber.value); // Pass cardNumber strip function.
	var cardtype = document.forms.rwForm.cardtype.options[document.forms.rwForm.cardtype.selectedIndex].value;
  cc = new Array();
	var checksum = 0;

	// Check Mastercard.
	if((cardtype == "MasterCard") || (cardtype == "EC"))
	{
		var firstdig=cardNumber.substring(0,1);
		if(firstdig!=5)
		{
			alert("Your Mastercard number must start with a 5.");
			document.forms.rwForm.cardNumber.focus();
			return false;
		}
		if((cardNumber.length!=16) && (cardNumber.length!=19))
		{
			alert("Your Mastercard must have 16 or 19 digits.");
			document.forms.rwForm.cardNumber.focus();
			return false;
		}
	}
	// Check Visa card.
	if(cardtype == "Visa")
	{
		var firstdig=cardNumber.substring(0,1)
		if(firstdig!=4)
		{
			alert("Your Visa card number must start with a 4.");
			document.forms.rwForm.cardNumber.focus();
			return false;
		}
		if((cardNumber.length!=16) && (cardNumber.length!=13))
		{
			alert("Your Visa card number must have 13 or 16 digits.");
			document.forms.rwForm.cardNumber.focus();
			return false;
		}
	}
	// Check American Express card.
	if(cardtype == "American Express")
	{
		var firstdig=cardNumber.substring(0,1);
		if(firstdig!=3)
		{
			alert("Your American Express card number must start with a 3.");
			document.forms.rwForm.cardNumber.focus();
			return false;
		}
		if((cardNumber.length!=15) && (cardNumber.length!=18))
		{
			alert("Your American Express card number must have 15 or 18 digits.");
			document.forms.rwForm.cardNumber.focus();
			return false;
		}
	}
	for(i = 0; i < cardNumber.length; i++)
	{
		cc[i] = Math.floor(cardNumber.substring(i, i+1));
	}
	for(i = (cardNumber.length % 2); i < cardNumber.length; i+=2)
	{
		var a = cc[i] * 2;
		if(a >= 10)
		{
			var aStr = a.toString();
			var b = aStr.substring(0,1);
			var c = aStr.substring(1,2);
			cc[i] = Math.floor(b) + Math.floor(c);
		}
		else
		{
			cc[i] = a;
		}
	}
	for(i = 0; i < cardNumber.length; i++)
	{
		checksum += Math.floor(cc[i]);
	}
	if((checksum % 10) != 0)
	{
		alert("At least one of the digits in this card number is incorrect.");
		document.forms.rwForm.cardNumber.focus();
		return false;
	}
return true;
}
