  
  //decalage jours entre aller et retour
	var dpDelay = 3;
	var volDelay=7;
	var rechercherVolHotel = false;
	var volHotel_ValidationDate = false;
	
	$(document).ready(function() {
	 
        // initialisation des date du moteur,    
  	    var today = new Date ();
  	   
       //vol
        var departDate = new Date();
		    departDate.setDate(today.getDate() + 1);
  	    var returnDate = new Date();
		    returnDate.setDate(today.getDate() + volDelay +1);
  	      
        var departMonth=(departDate.getMonth()+1).toString();
        var departDay=departDate.getDate().toString();
        
        var returnMonth=(returnDate.getMonth()+1).toString();
        var returnDay=returnDate.getDate().toString();
        
        
        if(departMonth.length==1)
          departMonth = "0"+departMonth;
        
        if(departDay.length==1)
            departDay= "0"+departDay;
                   
        if(returnMonth.length==1)
          returnMonth = "0"+returnMonth;
        
        if(returnDay.length==1)
            returnDay= "0"+returnDay;
                
        var dateDepartText = departDay+"/"+departMonth+"/"+departDate.getFullYear();
  	    var dateRetournText = returnDay+"/"+returnMonth+"/"+returnDate.getFullYear();
  	    
              
        //vol+hotel
		departDate = new Date();
		departDate.setDate(today.getDate() + 3);
		returnDate = new Date();
		returnDate.setDate(today.getDate() + dpDelay +7);
		
		departMonth=(departDate.getMonth()+1).toString();
        departDay=departDate.getDate().toString();
        
        returnMonth=(returnDate.getMonth()+1).toString();
        returnDay=returnDate.getDate().toString();
		
		if(departMonth.length==1)
          departMonth = "0"+departMonth;
        
        if(departDay.length==1)
            departDay= "0"+departDay;
		
		if(returnMonth.length==1)
        returnMonth = "0"+returnMonth;
        
        if(returnDay.length==1)
            returnDay= "0"+returnDay;
		
        dateDepartText = departDay+"/"+departMonth+"/"+departDate.getFullYear();
		dateRetournText = returnDay+"/"+returnMonth+"/"+returnDate.getFullYear();
        
        $('#DATE_DVHText').val(dateDepartText);
  	    $('#DATE_RVHText').val(dateRetournText);
  	  	
        //var inOneWeek = new Date();
        $("#formVolHotel input[@name=D_DATE]").val(departDate.getFullYear()+""+departMonth+""+departDay);
        $("#formVolHotel input[@name=R_DATE]").val(returnDate.getFullYear()+""+returnMonth+""+returnDay);
       
	  	fillDepMonthSejour("depMonth",13, "","",today,"YYYYMM",""); //sejours
		
		fillDepMonthSejour("theDate",13, "","",today,"YYYYMM","01"); //croisière
		
		refillDepDaySejour('depMonth','addepDay','--','','DD','MMM YYYY');	
		
		
		displayNbRoomsFields('dv_repartRoom', 'nbRoomsFields',2,0);
		CallToDisplay('moteurSearchSejour');

		// listner sur les listes deroulates : adult et enfants,  mois, jour...
		
		$("#formVolHotel select[@name=NB_CHILDREN]").change(function() {
			displayChildrenAgeFields($("#formVolHotel select[@name=NB_CHILDREN]").val(),'childrenAgeFields')
			displayNbRoomsFields('dv_repartRoom','nbRoomsFields',$("#formVolHotel select[@name=NB_ADULTS]").val(), $("#formVolHotel select[@name=NB_CHILDREN]").val());
			
		});
			
		$("#formVolHotel select[@name=NB_ADULTS]").change(function(){			
			displayNbRoomsFields('dv_repartRoom','nbRoomsFields',$("#formVolHotel select[@name=NB_ADULTS]").val(), $("#formVolHotel select[@name=NB_CHILDREN]").val());
			
		});
		
		$("#depMonth").change(function(){
			refillDepDaySejour('depMonth','addepDay','--','','DD','MMM YYYY');
		});		
		
				
		//vols +hotel
		//via input
		initDoubleCalendier("DATE_DVHText", "cal3Container", "calendar3","DATE_DVHText",12,"","updateReturnDate('DATE_DVHText','DATE_RVHText','formVolHotel')","DD","YYYYMM");
		initDoubleCalendier("DATE_RVHText", "cal4Container", "calendar4","DATE_RVHText",18, "","updateDepartureDate('DATE_RVHText','formVolHotel')","DD","YYYYMM");	
		//via picto calendar pas besoin
		
	
		//	On gère l'envoi du formulaire vol+hotel 
		$('#formVolHotel').submit(function() {
			tracking(document.getElementById("rechercheVolHotel"),'Op:FR:LandingPkg:DPSearch_SubmitButton');
			return submitformVolHotel();
			return false;
		});
		
		
		//On gère l'envoi du formulaire sejour
		$('#formSejour').submit(function() {
			tracking(document.getElementById("rechercheSejour"),'Op:FR:LandingPkg:Search_SubmitButton');
			return submitFromSejour();
			return false;
		});
		
		//autofil
		applyOpodoAutocomplete("#E_LOCATION_IN", "dp");
		 
  
	});
  
  
   
   // functions update dates and hours
	function updateReturnDate(DATE_DText,DATE_RText,idForm){

		//we will update the arrival date if the departure date is bigger.
		// format date.
		var departureDate = $("#"+DATE_DText).val();
		var returnDate = $("#"+DATE_RText).val();
    	var departureDateTab = departureDate.split('/'); 
    	var returnDateTab =  returnDate.split('/');
    	
		var departureYearMonth = departureDateTab[2]+""+departureDateTab[1];
		var departureDay =departureDateTab[0];
		var numericDepartureDate = departureYearMonth*100 + departureDay;
      
     	
		var returnYearMonth = 	returnDateTab[2]+""+	returnDateTab[1];
		var returnDay = 	returnDateTab[0];
		var numericReturnDate = returnYearMonth*100 + returnDay;
			
			
	   			
	  	if(numericReturnDate > numericDepartureDate)
				return;
       
		$("#"+DATE_RText).val(departureDate);
								
		}

		function updateDepartureDate(DATE_RText,idForm){

			;					
		}	

		      
		
	  //fonction test si la date est valide
	function isDateValid(chaineDate) {
	  
	   // si format est dd/mm/yyyy

	   var ladate = (chaineDate).split("/")

	  // Si je n'ai pas récupéré trois éléments ou bien s'il ne s'agit pas d'entiers, pas la peine non plus d'aller plus loin
	   if ((ladate.length != 3) || isNaN(parseInt(ladate[0])) || isNaN(parseInt(ladate[1])) || isNaN(parseInt(ladate[2]))) return false

	  // Sinon, c'est maintenant que je crée la date correspondante. Attention, les mois sont étalonnés de 0 à 11
	   var unedate = new Date(eval(ladate[2]),eval(ladate[1])-1,eval(ladate[0]))

	  // Bug de l'an 2000 oblige, lorsque je récupère l'année, je n'ai pas toujours 4 chiffres selon les navigateurs, je rectifie donc ici le tir.
	   var annee = unedate.getYear()
	   if ((Math.abs(annee)+"").length < 4) annee = annee + 1900

	   //Il ne reste plus qu'à vérifier si le jour, le mois et l'année obtenus sont les mêmes que ceux saisis par l'utilisateur.
	   //return true
	   return ((unedate.getDate() == eval(ladate[0])) && (unedate.getMonth() == eval(ladate[1])-1) && (annee == eval(ladate[2])))
	}
	 
	 
	function validRegexDate(chaineDate){
	    var date_regexp=/^(\d{1,2}\/){2}\d{4}$/
	    
	    if (!chaineDate.match(date_regexp))
	      return false;
	    else
	      return true;
	      
	      //'veuillez entrer une date valide (format jj/mm/aaaa). 
	  }
	   
	 
	//validate date and hours 
	function validateDates(html,idForm, dateDepartTab, dateReturTab, NameDepartureHour, NameReturnHour){
							
		var departureDate = new Date(dateDepartTab[2],dateDepartTab[1]-1,dateDepartTab[0]);
		var returnDate = new Date(dateReturTab[2],dateReturTab[1]-1,dateReturTab[0]);
		var today = new Date();
		today.setHours(0);
		today.setMinutes(0,0,0);
		//departureDate.setHours(0);
		//departureDate.setMinutes(0);
			
		if (departureDate < today )					
		html=html+"<span id='errorMessage'>-La date de départ sélectionnée est passée.</span><br/>";
								
		if ( returnDate < today )					
			html=html+"<span id='errorMessage'>-La date de retour sélectionnée est passée.</span><br/>";
		
		//Votre date de départ est trop proche. Les réservations de Vol + Hôtel sont possibles au minimum 3 jours avant le départ.
		
		if((idForm =='formVolHotel') || (idForm =='formVol' && volHotel_ValidationDate)){
			
			var today_3 = new Date();
			today_3.setDate(today.getDate() + 3);
			today_3.setHours(0);
			today_3.setMinutes(0,0,0);
			if (today < departureDate &&  departureDate< today_3 )						
						
				html=html+"<span id='errorMessage'>-Votre date de départ est trop proche. Les réservations de Vol+Hôtel sont possibles au minimum 3 jours avant le départ.</span><br/>";
			
		}
		//From here we take into account the hours.
				
		var departureHour = $("#"+idForm+" select[@name="+NameDepartureHour+"]").val();			
		departureDate.setHours(departureHour);
		var returnHour = $("#"+idForm+" select[@name="+NameReturnHour+"]").val();
		returnDate.setHours(returnHour);
				
		if ( returnDate < departureDate )					
			html=html+"<span id='errorMessage'>-La date de retour sélectionnée est antérieure à la date depart.</span><br/>";
			
		return html;
	}	
	 

	
	//onsubmit DP
	
	function submitformVolHotel() {
		
		var departureDateTab = $("#DATE_DVHText").val().split("/");
		var returnDateTab = $("#DATE_RVHText").val().split("/");
		var error_=false;
		var html="<img id='errorIcon' src='/img_opodo/LandingPage/pictoAttention.jpg' alt='error' />Attention!<div class='errMsg11v'>Merci de lire le(s) message(s) suivant(s)</div> ";
	
				
		if ($("#formVolHotel input[@name=E_LOCATION_IN]").val() == '') {
				
			html=html+"<span id='errorMessage'>-Veuillez remplir la ville d\'arrivée.</span><br/>";
			error_=true;
				
		}
		
		
		if ($("#formVolHotel select[@name=B_LOCATION_IN]").val() == $("#formVolHotel input[@name=E_LOCATION_IN]").val() ) {
			
			html=html+"<span id='errorMessage'>-Les villes de départ et de retour doivent être différentes.</span><br/>";
			error_=true;
		}
			
		
		if ( parseInt($("#formVolHotel select[@name=NB_ADULTS]").val()) + parseInt($("#formVolHotel select[@name=NB_CHILDREN]").val()) > 9 ) {
			html=html+"<span id='errorMessage'>La réservation de billets d'avion est limitée à 9 passagers au total.</span><br/>";
			error_=true;
		}
		
	
		// erreur sur les dates		
		if ($("#formVolHotel input[@name=E_LOCATION_IN]").val() != '') 
		{
			var validateFormatDate=true;			
			
			if(!validRegexDate($('#DATE_DVHText').val())  || !isDateValid($('#DATE_DVHText').val())) {
			      
				html=html+"<span id='errorMessage'>-Veuillez entrer une date de départ valide(format jj/mm/aaaa).</span><br/>";
				validateFormatDate=false;
				error_=true;
				
			}
						
			if(!validRegexDate($('#DATE_RVHText').val()) || !isDateValid($('#DATE_RVHText').val())) {
			      
				html=html+"<span id='errorMessage'>-Veuillez entrer une date de retour valide(format jj/mm/aaaa).</span><br/>";
				validateFormatDate=false;
				error_=true;
			}
			
			if(validateFormatDate){
				htmlNew = validateDates(html,"formVolHotel", departureDateTab, returnDateTab, "D_ANYTIME", "R_ANYTIME");
				if (htmlNew != html ){
					html = htmlNew;
					error_=true;
				}
			}
		}
		
		if (error_){	
			
			$("#formVolHotel div[@id=messageErrorDP]").html(html);
			$("#formVolHotel div[@id=messageErrorDP]").show();
			return false;
				
			}else{
		
			// on rempli les champs cachés  http://weekend.opodo.fr/apps/jsp/dphotel/DPAvailabilityServlet
			$("#formVolHotel").attr('action', 'http://weekend.opodo.fr/apps/jsp/dphotel/DPAvailabilityServlet');
    		if(departureDateTab[1].toString().length==1)
				departureDateTab[1]="0"+departureDateTab[0];
      
			if(departureDateTab[1].toString().length==1)
				departureDateTab[1]="0"+departureDateTab[1];
      
			if(returnDateTab[0].toString().length==1)
				returnDateTab[0]="0"+returnDateTab[0];
           
			if(returnDateTab[1].toString().length==1)
				returnDateTab[1]="0"+returnDateTab[1];
				
				$("#formVolHotel input[@name=D_DATE]").val(departureDateTab[2]+''+ departureDateTab[1]+''+departureDateTab[0]);
				$("#formVolHotel input[@name=R_DATE]").val(returnDateTab[2]+''+ returnDateTab[1]+''+returnDateTab[0]); 
							
			return true;
		}
		
	}



	// Onsubmit Sejour
	function submitFromSejour() {
		
		var monthYear =  $("#depMonth").val();
		var day	=	$("#addepDay").val();
		var departureDateTab = monthYear.split("-");
		
		var error_=false;
		var html="<img id='errorIcon' src='/img_opodo/LandingPage/pictoAttention.jpg' alt='error' />Attention!<div class='errMsg11v'>Merci de lire le(s) message(s) suivant(s)</div> ";
							
		
		/*if($("#moteurSearchSejour select[@name=destCountry]").val()==''){					
			html=html+"<span id='errorMessage'>-Veuillez sélectionner la destination.</span><br/>";
			error_=true;
		}
		*/
		if(day!=''){
		
			var departureDate = new Date(departureDateTab[0],departureDateTab[1]-1,day);
			departureDate.setHours(0);
			departureDate.setMinutes(0,0,0);
			var today = new Date();
			today.setHours(0);
			today.setMinutes(0,0,0);
			if (departureDate < today){					
			html=html+"<span id='errorMessage'>-La date de départ sélectionnée est passée.</span><br/>";
			error_=true;
		}
		
		}
		
		if (error_){		
			//alert(html);
			$("#messageErrorSejour").html(html);
			$("#messageErrorSejour").show();
			return false;
							
		}else{
			if(day!=''){
				
				if (day.substring(0,1)=='0')
					day=day.substring(1,2);
				
				$("#depDay").val(monthYear+'-'+day);
				}
			else
				$("#depDay").val('');
				
			/* construction de l'url
			var depDay = $("#depDay").val();
			var depCity =$("#depCity").val();
			var destCountry=$("#destCountry").val();
			var addepDay=$("#addepDay").val();
			var depMonth=$("#depMonth").val();
			var flexibility=$("#flexibility").val();
			var duration=$("#duration").val();
			var theme=$("#theme").val();
			var budget=$("#budget").val();
			var pension=$("#pension").val();
			var action = "http://voyage.opodo.fr/Packagio/Sejours.do#"+"depDay="+depDay+"&depCity="+depCity+"&destCountry="+destCountry+"&addepDay="+addepDay+"&depMonth="+depMonth+"&flexibility="+flexibility+"&duration="+duration+"&theme="+theme+"&budget="+budget+"&pension="+pension+"&pageNumber=1";
			
			$("#formSejour").attr('action',action);
			*/
			
			return true;
			}		
	}
	
	
		
	function refillDepDaySejour(idSelectDepMonth, idSelectDepDay, firstOptionText, firstOptionValue, dayMask, monthYearMask){
	
	var selectDepDay = document.getElementById(idSelectDepDay);
	var selectedDay = selectDepDay.value;
	var selectDepMonth  = document.getElementById(idSelectDepMonth);
	var monthYear = selectDepMonth.value;
	
	var year = 0;
	var numericMonth = 0;
	//MMM YYYY
	if(monthYearMask == "MMM YYYY" ){
		year  = monthYear.substring(0,monthYear.indexOf("-"));
		var month = monthYear.substring(monthYear.indexOf("-")+1, monthYear.length);
		
		/*for(var i=0; i< FRENCH_MONTHS_SHORT.length; i++)
			if(FRENCH_MONTHS_SHORT[i] == month)
		*/
		numericMonth = month-1;
	}
	
	else{	//monthYearMask == "YYYYMM"
		year = monthYear.substring(0,4);
		numericMonth = monthYear.substring(4,6);
		numericMonth = numericMonth -1; // months goes from 0 to 11
		
	}
	
	var dateMonth = new Date();
	dateMonth.setYear(year);
	dateMonth.setMonth(numericMonth);
	
	
	//if the selected month is the actual one, we don't allow a departure day < today
	var today = new Date();
	if(today.getYear() == dateMonth.getYear() && today.getMonth() == dateMonth.getMonth() ){
		
		//important: we cannot set the day directly because could happen that we try to set day 31 to february!!
		var thisMonth = new Date(today.getYear(), today.getMonth(), 0);
		var daysInActualMonth = thisMonth.getDate();
		
		if( daysInActualMonth < selectedDay )
			dateMonth.setDate(daysInActualMonth);
		else	
			dateMonth.setDate(today.getDate());
		
		if (today.getDate() > dateMonth.getDate() ){
			//we change the selected day
			selectedDay = today.getDate();
		}
	}else
		dateMonth.setDate(1);
	
	fillDepDay(idSelectDepDay, dateMonth, selectedDay, firstOptionText, firstOptionValue, dayMask);
}




	function fillDepMonthSejour(idSelectDepMonth, nbrOfMonths, firstOptionText, firstOptionValue, selectedMonthDate, monthYearMask,dayMonth){
	
	var today = new Date();
	today.setDate(1);
	
	var selectDepMonth  = document.getElementById(idSelectDepMonth);
	
	var monthString;
	var monthSelected;
	var newOptions = new Array();
	
	var optionOffset = 0;
	if (firstOptionText != "" ){
		var mySelectOption = new Option(firstOptionText,firstOptionValue);
		selectDepMonth.options[0] = mySelectOption;
		optionOffset = 1;
	}
	
	
	
	var mySelectOption = new Option("Indifférent","",true);
	selectDepMonth.options[0] = mySelectOption;
	selectDepMonth.options[0].selected =true;
	
	
	for (var i= 2; i<=nbrOfMonths+1; i++)
	{
		monthSelected = false;
		var twoLastDigitsYear = ""+today.getFullYear();	//we convert the number to a string
		twoLastDigitsYear = twoLastDigitsYear.substring(twoLastDigitsYear.length-2,twoLastDigitsYear.length);
		
		var monthText  = FRENCH_MONTHS[today.getMonth()]+" "+twoLastDigitsYear;
		
		var monthValue = "";
		
		if(monthYearMask == "MMM YYYY" ){
			monthValue = FRENCH_MONTHS_SHORT[today.getMonth()]+" "+today.getFullYear();
		}
		else{	//monthYearMask == "YYYYMM"
			var numericMonth = today.getMonth()+1;	//month goes from 0 to 11
			var monthString = (numericMonth<10?"0":"")+numericMonth;
			if(dayMonth !="")
				monthValue =""+today.getFullYear()+"-"+monthString+"-"+dayMonth;
			else			
				monthValue = ""+today.getFullYear()+"-"+monthString;
		}
		
		//For info: new Option([text[, value[, defaultSelected[, selected]]]])
		mySelectOption = new Option(monthText,monthValue,monthSelected);
		selectDepMonth.options[i-1+optionOffset] = mySelectOption;
		selectDepMonth.options[i-1+optionOffset].selected = monthSelected;
		
		today.setMonth(today.getMonth()+1);	//we increment the month for the next iteration
	}
}		

