$(document).ready(function(){

		$(".gallery > a").click(function(event){
			event.preventDefault();
			var image = $(this).attr("href");
			$("#galleryContainer > img").attr("src", image);
			
       });
	   
	   /*
	   ** Credit card selection
	   */
	   $("#reservationVisaCard").click(function(event){
			event.preventDefault();
			$("#TypeDeCarte").attr("value", "Visa");
			$("#reservationVisaCard").addClass("visaActive").removeClass("visa");
			$("#reservationMCCard").addClass("mc").removeClass("mcActive");
	   });
	   $("#reservationMCCard").click(function(event){
			event.preventDefault();
			$("#TypeDeCarte").attr("value", "MC");
			$("#reservationMCCard").addClass("mcActive").removeClass("mc");
			$("#reservationVisaCard").addClass("visa").removeClass("visaActive");
	   });
	   $("#NoDeLaCarte").keyup(function(event){
			switch($(this).val().charAt(0)){
				case '5': $("#reservationMCCard").click(); break;
				case '4': $("#reservationVisaCard").click(); break;
			}
	   });
	   
	   /*
	   ** dont allow non-numeric stuff in some fields
	   */
	   
	   $('#NoDeLaCarte').keypress(function(event) {
			return ( event.which!=8 && event.which!=0 && (event.which<48 || event.which>57)) ? false : true ;
		});
	   $('#DateExpiration1').keypress(function(event) {
			return ( event.which!=8 && event.which!=0 && (event.which<48 || event.which>57)) ? false : true ;
		});
	   $('#DateExpiration2').keypress(function(event) {
			return ( event.which!=8 && event.which!=0 && (event.which<48 || event.which>57)) ? false : true ;
		});
	   $(".date-pick").keypress(function(event) {
			return ( event.which!=8 && event.which!=0 && (event.which<48 || event.which>57) && event.which!=45) ? false : true ;
		});
	   $(".date-pick").focus(function(event) {
			if($(this).val() == 'aaaa-mm-jj') $(this).val('');
		});
	   
	   /*
	   ** Post reservation
	   */		
	   $(".reserveAgain").click(function(event){
			$("#reservationConfirmationBlur").hide();
			$("#reservationConfirmation").hide();
			$(".date-pick").val('aaaa-mm-jj');
			$(".success-box, .error-box").hide();
		});
		
	   $("#ContactButton").click(function(event){
			event.preventDefault();
			$("#ContactButton").hide();
			$("#ButtonLoader").show();
			
			$.post("/sendMessage.php", $("#ContactForm").serialize(), function(data){
			if(data.messageResult != 'PROBLEM')
			{
				$("#ButtonLoader").hide();
				$("#ContactButton").show();
				$("#messageConfirmationBlur").show();
				$("#messageConfirmation").show();
			}
			else
			{
				alert("Une erreur est arrivée, veuillez nous excuser.  Vous pouvez nous contacter au +1-514-228-3963.\nAn unknown error occured.  Please contact us at +1-514-228-3963."); // John
					$("#ButtonLoader").hide();
					$("#ContactButton").show();
			}
			alert(data.messageResult);
			}, "json");
		});			
		
	   $("#ReserveButton").click(function(event){
			event.preventDefault();
			$("#ReserveButton").hide();
			$("#ButtonLoader").show();
			resetErrors();
			
			checkName();
			checkCoord();
			checkDates();
			checkCreditCardNumber();
			checkCreditCardExpiration();
			
			var $d = new Date();
			var $timeTmp = $d.getTime();
			var intervalId = setInterval(function(){
				$d = new Date();
				if($d.getTime()-$timeTmp > 10000)
				{
					clearInterval(intervalId);
					$("#ButtonLoader").hide();
					$("#ReserveButton").show();
					alert("timeout.\nVeuillez combler les informations manquantes avant de soumettre votre réservation.\nPlease fix the missing information before submitting your reservation.");
					postReservation();
				}
				
				if(isAllErrorsChecked() && isAllErrorsOk())
				{
					clearInterval(intervalId);
					postReservation();
				}
				else if(isAllErrorsChecked())
				{
					clearInterval(intervalId);
					$("#ButtonLoader").hide();
					$("#ReserveButton").show();
					alert("Veuillez combler les informations manquantes avant de soumettre votre réservation.\nPlease fix the missing information before submitting your reservation.");
				}
				
					
			}, 100);
			

			
	   });
	   
	   function postReservation(){
	   
		   $.post("/recordNewReservation.php", $("#reservationForm").serialize(), function(data){
		   
			if(data.reservation != 'PROBLEM')
			{
				$("#ButtonLoader").hide();
				$("#ReserveButton").show();
				$("#reservationConfirmationBlur").show();
				$("#reservationConfirmation").show();
				window.scrollTo(0,200);
			}
			else
			{
				alert("Une erreur est arrivée, veuillez nous excuser.  Vous pouvez nous contacter au +1-514-228-3963.\nAn unknown error occured.  Please contact us at +1-514-228-3963."); // John
					$("#ButtonLoader").hide();
					$("#ReserveButton").show();
			}
			
			}, "json");

	   }
	  
	   
	   /*
	   ** Check des erreurs
	   */
	   var $erreurs = {	//-1,-2 Erreurs; 0 pas vérifié; 1 OK
			'creditCardNumber':		0,
			'creditCardExpiration':	0,
			'date':					0,
			'name':					0,
			'coord':				0
	   };
	   
	   function isAllErrorsOk(){
			var $ok = true;
			for (var i in $erreurs){
				if($erreurs[i] < 1) $ok = false; }

			return $ok;
	   }
	   function isAllErrorsChecked(){
			var $ok = true;
			for (var i in $erreurs){
				if($erreurs[i] == 0) $ok = false; }

			return $ok;
	   }
	   
	   function resetErrors(){
		   $erreurs = {	//-1,-2 Erreurs; 0 pas vérifié; 1 OK
				'creditCardNumber':		0,
				'creditCardExpiration':	0,
				'date':					0,
				'name':					0,
				'coord':				0
		   };
	   }
	   
	   $("#NoDeLaCarte").blur(function(event){
			checkCreditCardNumber();
			checkCreditCardExpiration();
	   });
	   $("#DateExpiration1").blur(function(event){
			checkCreditCardExpiration();
	   });
	   $("#DateExpiration2").blur(function(event){
			checkCreditCardExpiration();
	   });
	   $(".date-pick").keyup(function(event){
			checkDates();
	   });
	   
	   function checkName() {
			$("#error-box-name-invalid").slideUp();
			if($("#Nom").val().length > 0)
				$erreurs['name'] = 1;
			else
			{
				$erreurs['name'] = -1;
				$("#error-box-name-invalid").slideDown();
			}
				
	   }
	   
	   function checkCoord() {
			$("#error-box-coord-invalid").slideUp();
			var $emailValid = emailValidate($("#Courriel").val());
			var $phoneValid = $("#Telephone").val().length>0;
			if($emailValid || $phoneValid)
				$erreurs['coord'] = 1;
			else
			{
				$erreurs['coord'] = -1;
				$("#error-box-coord-invalid").slideDown();
			}
				
	   }
	   
		function emailValidate(str) {
		  var at="@"
		  var dot="."
		  var lat=str.indexOf(at)
		  var lstr=str.length
		  var ldot=str.indexOf(dot)
		  if (str.indexOf(at)==-1){
			 //alert("Invalid E-mail ID")
			 return false
		  }
		  if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr){
			 //alert("Invalid E-mail ID")
			 return false
		  }
		  if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr){
			  //alert("Invalid E-mail ID")
			  return false
		  }
		   if (str.indexOf(at,(lat+1))!=-1){
			  //alert("Invalid E-mail ID")
			  return false
		   }
		   if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot){
			  //alert("Invalid E-mail ID")
			  return false
		   }
		   if (str.indexOf(dot,(lat+2))==-1){
			  //alert("Invalid E-mail ID")
			  return false
		   }
		   if (str.indexOf(" ")!=-1){
			  //alert("Invalid E-mail ID")
			  return false
		   }
		   return true          
		}	   
	   
	   function checkDates() {
			$("#error-box-dates-invalid").hide();
			$("#error-box-dates-no-vacancy").hide();
			$("#error-box-dates-vacancy").hide();
			if(	   isValidDate($("#start-date").val(), "YMD")
				&& isValidDate($("#end-date").val(), "YMD") ) {
				
				checkVacancy();
			}
			else{
				$erreurs['date'] = -1;
				$("#error-box-dates-invalid").show();
				return;
			}
	   }
	   
		function isValidDate(dateStr, format) {
		   if (format == null) { format = "MDY"; }
		   format = format.toUpperCase();
		   if (format.length != 3) { format = "MDY"; }
		   if ( (format.indexOf("M") == -1) || (format.indexOf("D") == -1) || (format.indexOf("Y") == -1) ) { format = "MDY"; }
		   if (format.substring(0, 1) == "Y") { // If the year is first
			  var reg1 = /^\d{2}(\-|\/|\.)\d{1,2}\1\d{1,2}$/
			  var reg2 = /^\d{4}(\-|\/|\.)\d{1,2}\1\d{1,2}$/
			  /* only accept - */
			  var reg1 = /^\d{2}(\-)\d{1,2}\1\d{1,2}$/
			  var reg2 = /^\d{4}(\-)\d{1,2}\1\d{1,2}$/
		   } else if (format.substring(1, 2) == "Y") { // If the year is second
			  var reg1 = /^\d{1,2}(\-|\/|\.)\d{2}\1\d{1,2}$/
			  var reg2 = /^\d{1,2}(\-|\/|\.)\d{4}\1\d{1,2}$/
			  /* only accept - */
			  var reg1 = /^\d{1,2}(\-)\d{2}\1\d{1,2}$/
			  var reg2 = /^\d{1,2}(\-)\d{4}\1\d{1,2}$/
		   } else { // The year must be third
			  var reg1 = /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{2}$/
			  var reg2 = /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{4}$/
			  /* only accept - */
			  var reg1 = /^\d{1,2}(\-)\d{1,2}\1\d{2}$/
			  var reg2 = /^\d{1,2}(\-)\d{1,2}\1\d{4}$/
		   }
		   // If it doesn't conform to the right format (with either a 2 digit year or 4 digit year), fail
		   if ( (reg1.test(dateStr) == false) && (reg2.test(dateStr) == false) ) { return false; }
		   var parts = dateStr.split(RegExp.$1); // Split into 3 parts based on what the divider was
		   // Check to see if the 3 parts end up making a valid date
		   if (format.substring(0, 1) == "M") { var mm = parts[0]; } else 
			  if (format.substring(1, 2) == "M") { var mm = parts[1]; } else { var mm = parts[2]; }
		   if (format.substring(0, 1) == "D") { var dd = parts[0]; } else 
			  if (format.substring(1, 2) == "D") { var dd = parts[1]; } else { var dd = parts[2]; }
		   if (format.substring(0, 1) == "Y") { var yy = parts[0]; } else 
			  if (format.substring(1, 2) == "Y") { var yy = parts[1]; } else { var yy = parts[2]; }
		   if (parseFloat(yy) <= 50) { yy = (parseFloat(yy) + 2000).toString(); return false; /*don't accept 2 digit year*/}
		   if (parseFloat(yy) <= 99) { yy = (parseFloat(yy) + 1900).toString(); return false; /*don't accept 2 digit year*/}
		   var dt = new Date(parseFloat(yy), parseFloat(mm)-1, parseFloat(dd), 0, 0, 0, 0);
		   if (parseFloat(dd) != dt.getDate()) { return false; }
		   if (parseFloat(mm)-1 != dt.getMonth()) { return false; }
		   return true;
		}

	   
	   function checkCreditCardExpiration(){

			if(parseInt($("#DateExpiration1").val(), 10) < 1) {
				$erreurs['creditCardExpiration'] = -1;
				$("#error-box-creditCardExpiration-invalid").slideDown();
				return;
			}
			if(parseInt($("#DateExpiration1").val(), 10) > 12) {
				$erreurs['creditCardExpiration'] = -1;
				$("#error-box-creditCardExpiration-invalid").slideDown();
				return;
			}
			if(parseInt($("#DateExpiration2").val(), 10) < 9) {
				$erreurs['creditCardExpiration'] = -1;
				$("#error-box-creditCardExpiration-invalid").slideDown();
				return;
			}
			
			if($("#NoDeLaCarte").val().length > 0)
				if($("#DateExpiration1").val().length < 1 || $("#DateExpiration2").val().length < 1){
					$erreurs['creditCardExpiration'] = -2;
					$("#error-box-creditCardExpiration-invalid").slideDown();
					return;
				}

			//autrement, tout est ok
			$erreurs['creditCardExpiration'] = 1;
			$("#error-box-creditCardExpiration-invalid").slideUp();
			return;
				
	   }
	   
	   function checkCreditCardNumber(){
			$.post("/verifyCreditCardNumber.php",{ creditCardNumber: $("#NoDeLaCarte").val() },
			function(data)
			{
				if(data.creditCardValid==true)
				{
					$erreurs['creditCardNumber'] = 1;
					$("#error-box-creditCardNumber-invalid").slideUp();
				}
				else if(data.creditCardValid==false)
				{
					$erreurs['creditCardNumber'] = -1;
					$("#error-box-creditCardNumber-invalid").slideDown();
				}
				else
				{
					$erreurs['creditCardNumber'] = 1;
					$("#error-box-creditCardNumber-invalid").slideUp();			
				}
			}, "json");			
	   }
	   
	   function checkVacancy(){
			$.post("/verifyVacancy.php",{ dateArrivee: $("#start-date").val(),dateDepart: $("#end-date").val() },
			function(data)
			{	
				switch(data.vacancy){
					case 'OK':
						$erreurs['date'] = 1;
						$("#error-box-dates-vacancy").slideDown();
						break;
					case 'NOT_VACANT':
						$erreurs['date'] = -1;
						$("#error-box-dates-no-vacancy").slideDown();
						break;
					default:
						$erreurs['date'] = -1;
						$("#error-box-dates-invalid").slideDown();
						break;
			
				}
				
			}, "json");			
	   }
	   
	   /*
	   ** Date Picker
	   */
	if($('.date-pick').length) 
	$('.date-pick').datePicker({clickInput:true, verticalOffset:20,showYearNavigation:false});

	$('#start-date').bind(
		'dpClosed',
		function(e, selectedDates)
		{
			var d = selectedDates[0];
			if (d) {
				d = new Date(d);
				d.addDays(1);
				if($('#end-date').dpGetSelected() <= $('#start-date').dpGetSelected())
					$('#end-date').dpSetSelected(d.asString());
					
				$('#end-date').dpSetStartDate(d.asString());
				
			}
			checkDates();
		}
	);
	$('#end-date').bind(
		'dpClosed',
		function(e, selectedDates)
		{
			var d = selectedDates[0];
			if (d) {
				d = new Date(d);
				//$('#start-date').dpSetEndDate(d.addDays(-1).asString());
			}
			checkDates();
		}
	);

	   
     });



