   YAHOO.namespace("recherche.calendar");

   YAHOO.recherche.calendar.init = function() {

         var dayOfWeek = ["Dimanche", "Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi"];

         function handleSelect1(type,args,obj) {

            var dates = args[0];
            var date = dates[0];
            var year = date[0], month = date[1], day = date[2];

            var date_arrivee = document.getElementById("date_arrivee");
            var fromday = document.getElementById("fromday");
            var frommonth = document.getElementById("frommonth");
            var fromyear = document.getElementById("fromyear");
            date_arrivee.value = day + "/" + month + "/" + year;
            fromday.value = day;
            frommonth.value = month;
            fromyear.value = year;

            YAHOO.recherche.calendar.cal1.hide();

            var tmpDate = new Date(year, month-1, day);

            document.getElementById('fromDayOfWeekLabel').innerHTML = dayOfWeek[tmpDate.getDay()]; // set fromDayOfWeekLabel
            tmpDate.setDate(tmpDate.getDate()+1);
            var tmpMonth = tmpDate.getMonth()+1;

            YAHOO.recherche.calendar.cal2.cfg.setProperty("pagedate", tmpMonth + "/" + tmpDate.getFullYear());
            YAHOO.recherche.calendar.cal2.cfg.setProperty("selected", tmpMonth + '/' + tmpDate.getDate() + '/' + tmpDate.getFullYear() );
            YAHOO.recherche.calendar.cal2.cfg.setProperty("mindate", tmpMonth + '/' + tmpDate.getDate() + '/' + tmpDate.getFullYear() );
            YAHOO.recherche.calendar.cal2.select(tmpDate);
            YAHOO.recherche.calendar.cal2.render();

            // si date to <= date from, on decale date to à date from + 1
            var selToMonth = document.getElementById("tomonth");
            var selToDay   = document.getElementById("today");
            var selToYear  = document.getElementById("toyear");

            var toMonth = parseInt(selToMonth.options[selToMonth.selectedIndex].value);
            var toDay = parseInt(selToDay.options[selToDay.selectedIndex].value);
            var toYear = parseInt(selToYear.options[selToYear.selectedIndex].value);

            var dateTo = new Date(toYear, toMonth-1, toDay);
            var tmpToTime = dateTo.getTime();
            var tmpFromTime = tmpDate.getTime();
            if(tmpToTime <= tmpFromTime)
            {
               selToMonth.selectedIndex = tmpMonth-1;
               selToDay.selectedIndex = tmpDate.getDate()-1;

               for (var y=0;y<selToYear.options.length;y++) {
                  if (selToYear.options[y].text == tmpDate.getFullYear()) {
                     selToYear.selectedIndex = y;
                     break;
                  }
               }
               // set toDayOfWeekLabel
               var tmpDateTo = new Date(year, month-1, day);
               tmpDateTo.setDate(tmpDateTo.getDate()+1);
               document.getElementById('toDayOfWeekLabel').innerHTML =  dayOfWeek[tmpDateTo.getDay()];

            }

         }

         function updateCal1() {
            var selMonth = document.getElementById("frommonth");
            var selDay = document.getElementById("fromday");
            var selYear = document.getElementById("fromyear");

            var month = parseInt(selMonth.options[selMonth.selectedIndex].value);
            var day = parseInt(selDay.options[selDay.selectedIndex].value);
            var year = parseInt(selYear.options[selYear.selectedIndex].value);

            if (! isNaN(month) && ! isNaN(day) && ! isNaN(year)) {
               var date = month + "/" + day + "/" + year;

               YAHOO.recherche.calendar.cal1.select(date);
               YAHOO.recherche.calendar.cal1.cfg.setProperty("pagedate", month + "/" + year);
               YAHOO.recherche.calendar.cal1.render();


               var tmpDate = new Date(year, month-1, day);
               document.getElementById('fromDayOfWeekLabel').innerHTML = dayOfWeek[tmpDate.getDay()]; // set toDayOfWeekLabel

               tmpDate.setDate(tmpDate.getDate()+1);
               var tmpMonth = tmpDate.getMonth()+1;

               YAHOO.recherche.calendar.cal2.cfg.setProperty("pagedate", tmpMonth + "/" + tmpDate.getFullYear());
               YAHOO.recherche.calendar.cal2.cfg.setProperty("selected", tmpMonth + '/' + tmpDate.getDate() + '/' + tmpDate.getFullYear() );
               YAHOO.recherche.calendar.cal2.cfg.setProperty("mindate", tmpMonth + '/' + tmpDate.getDate() + '/' + tmpDate.getFullYear() );
               YAHOO.recherche.calendar.cal2.render();

               // si date to <= date from, on decale date to à date from + 1
               var selToMonth = document.getElementById("tomonth");
               var selToDay = document.getElementById("today");
               var selToYear = document.getElementById("toyear");

               var toMonth = parseInt(selToMonth.options[selToMonth.selectedIndex].value);
               var toDay = parseInt(selToDay.options[selToDay.selectedIndex].value);
               var toYear = parseInt(selToYear.options[selToYear.selectedIndex].value);

               var dateTo = new Date(toYear, toMonth-1, toDay);
               var dateFrom = new Date(year, month-1, day);
               var tmpToTime = dateTo.getTime();
               var tmpFromTime = dateFrom.getTime();
               if(tmpToTime <= tmpFromTime)
               {
                  selToMonth.selectedIndex = tmpMonth-1;
                  selToDay.selectedIndex = tmpDate.getDate()-1;

                  for (var y=0;y<selToYear.options.length;y++) {
                     if (selToYear.options[y].text == tmpDate.getFullYear()) {
                        selToYear.selectedIndex = y;
                        break;
                     }
                  }
                  // set fromDayOfWeekLabel
                  document.getElementById('toDayOfWeekLabel').innerHTML =  dayOfWeek[tmpDate.getDay()];
               }

            }
         }


         function handleSelect2(type,args,obj) {
            var dates = args[0];
            var date = dates[0];
            var year = date[0], month = date[1], day = date[2];

            var date_depart = document.getElementById("date_depart");
            var today = document.getElementById("today");
            var tomonth = document.getElementById("tomonth");
            var toyear = document.getElementById("toyear");

               date_depart.value = day + "/" + month + "/" + year;
            today.value = day;
            tomonth.value = month;
            toyear.value = year;

            YAHOO.recherche.calendar.cal2.hide();

            var tmpDate = new Date(year, month-1, day);
            document.getElementById('toDayOfWeekLabel').innerHTML = dayOfWeek[tmpDate.getDay()]; // set toDayOfWeekLabel
            tmpDate.setDate(tmpDate.getDate()-1);
            var tmpMonth = tmpDate.getMonth()+1;

            YAHOO.recherche.calendar.cal1.cfg.setProperty("pagedate", tmpMonth + "/" + tmpDate.getFullYear());
            YAHOO.recherche.calendar.cal1.cfg.setProperty("selected", tmpMonth + '/' + tmpDate.getDate() + '/' + tmpDate.getFullYear() );
            //YAHOO.recherche.calendar.cal1.cfg.setProperty("maxdate", tmpMonth + '/' + tmpDate.getDate() + '/' + tmpDate.getFullYear() );
            YAHOO.recherche.calendar.cal1.render();

            // si date from >= date to, on decale date from à date to - 1
            var selFromMonth = document.getElementById("frommonth");
            var selFromDay = document.getElementById("fromday");
            var selFromYear = document.getElementById("fromyear");

            var fromMonth = parseInt(selFromMonth.options[selFromMonth.selectedIndex].value);
            var fromDay = parseInt(selFromDay.options[selFromDay.selectedIndex].value);
            var fromYear = parseInt(selFromYear.options[selFromYear.selectedIndex].value);

            var dateFrom = new Date(fromYear, fromMonth-1, fromDay);
            var tmpFromTime = dateFrom.getTime();
            var tmpToTime = tmpDate.getTime();
            if(tmpFromTime >= tmpToTime)
            {
               selFromMonth.selectedIndex = tmpMonth-1;
               selFromDay.selectedIndex = tmpDate.getDate()-1;

               for (var y=0;y<selFromYear.options.length;y++) {
                  if (selFromYear.options[y].text == tmpDate.getFullYear()) {
                     selFromYear.selectedIndex = y;
                     break;
                  }
               }
               // set toDayOfWeekLabel
               var tmpDateFrom = new Date(year, month-1, day);
               tmpDateFrom.setDate(tmpDateFrom.getDate()+1);
               document.getElementById('fromDayOfWeekLabel').innerHTML =  dayOfWeek[tmpDateFrom.getDay()];

            }
         }

         function updateCal2() {
            var selMonth = document.getElementById("tomonth");
            var selDay = document.getElementById("today");
            var selYear = document.getElementById("toyear");

            var month = parseInt(selMonth.options[selMonth.selectedIndex].value);
            var day = parseInt(selDay.options[selDay.selectedIndex].value);
            var year = parseInt(selYear.options[selYear.selectedIndex].value);

            if (! isNaN(month) && ! isNaN(day) && ! isNaN(year)) {
               var date = month + "/" + day + "/" + year;

               YAHOO.recherche.calendar.cal2.select(date);
               YAHOO.recherche.calendar.cal2.cfg.setProperty("pagedate", month + "/" + year);
               YAHOO.recherche.calendar.cal2.render();

               var tmpDate = new Date(year, month-1, day);
               document.getElementById('toDayOfWeekLabel').innerHTML = dayOfWeek[tmpDate.getDay()]; // set toDayOfWeekLabel

               tmpDate.setDate(tmpDate.getDate()-1);
               var tmpMonth = tmpDate.getMonth()+1;

               YAHOO.recherche.calendar.cal1.cfg.setProperty("pagedate", tmpMonth + "/" + tmpDate.getFullYear());
               YAHOO.recherche.calendar.cal1.cfg.setProperty("selected", tmpMonth + '/' + tmpDate.getDate() + '/' + tmpDate.getFullYear() );
               //YAHOO.recherche.calendar.cal1.cfg.setProperty("maxdate", tmpMonth + '/' + tmpDate.getDate() + '/' + tmpDate.getFullYear() );
               YAHOO.recherche.calendar.cal1.render();

               // si date from >= date to, on decale date from à date to - 1
               var selFromMonth = document.getElementById("frommonth");
               var selFromDay = document.getElementById("fromday");
               var selFromYear = document.getElementById("fromyear");

               var fromMonth = parseInt(selFromMonth.options[selFromMonth.selectedIndex].value);
               var fromDay = parseInt(selFromDay.options[selFromDay.selectedIndex].value);
               var fromYear = parseInt(selFromYear.options[selFromYear.selectedIndex].value);

               var dateFrom = new Date(fromYear, fromMonth-1, fromDay);
               var dateTo = new Date(year, month-1, day);
               var tmpFromTime = dateFrom.getTime();
               var tmpToTime = dateTo.getTime();
               if(tmpFromTime >= tmpToTime)
               {
                  selFromMonth.selectedIndex = tmpMonth-1;
                  selFromDay.selectedIndex = tmpDate.getDate()-1;

                  for (var y=0;y<selFromYear.options.length;y++) {
                     if (selFromYear.options[y].text == tmpDate.getFullYear()) {
                        selFromYear.selectedIndex = y;
                        break;
                     }
                  }
                  // set fromDayOfWeekLabel
                  document.getElementById('fromDayOfWeekLabel').innerHTML =  dayOfWeek[tmpDate.getDay()];
               }
            }
         }

      var minDate = new Date();
      var tmpMinMonth = minDate.getMonth()+1;
      var tmpMinDayCal1 = minDate.getDate(); // (+6: on décale de 6 jours)
      var tmpMinDayCal2 = minDate.getDate()+1; // (+7: on décale d'une semaine )
      var strMinDate = tmpMinMonth + '/' + tmpMinDayCal1 + '/' + minDate.getFullYear();
      var strMinDateCal2 = tmpMinMonth + '/' + tmpMinDayCal2 + '/' + minDate.getFullYear();

      var maxDate = new Date();
      maxDate.setDate(maxDate.getDate()+365);
      var tmpMaxMonth = minDate.getMonth()+1;
      var tmpMaxDayCal2 = maxDate.getDate()+1;
      var strMaxDate = tmpMaxMonth + '/' + maxDate.getDate() + '/' + maxDate.getFullYear();
      var strMaxDateCal2 = tmpMaxMonth + '/' + tmpMaxDayCal2 + '/' + maxDate.getFullYear();

      YAHOO.recherche.calendar.cal1 = new YAHOO.widget.CalendarGroup("cal1","cal1Container", {PAGES:2,
                                                                                       selected:strMinDate,
                                                                                       mindate:strMinDate,
                                                                                       maxdate:strMaxDate,
                                                                                       title:"Sélectionnez la date d'arrivée :",
                                                                                       close:true
                                                                                       });

      YAHOO.recherche.calendar.cal1.cfg.setProperty("MONTHS_LONG",    ["Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre"]);
      YAHOO.recherche.calendar.cal1.cfg.setProperty("WEEKDAYS_SHORT",["Di", "Lu", "Ma", "Me", "Je", "Ve", "Sa"]);

      YAHOO.recherche.calendar.cal1.selectEvent.subscribe(handleSelect1, YAHOO.recherche.calendar.cal1, true);
      YAHOO.recherche.calendar.cal1.render();
      YAHOO.util.Event.addListener("show1up", "click", YAHOO.recherche.calendar.cal1.show, YAHOO.recherche.calendar.cal1, true);       // Listener to show the 2 page Calendar when the button is clicked
      YAHOO.util.Event.addListener(["frommonth","fromday","fromyear"], "change", updateCal1);




      /* Calendar 2 */
      YAHOO.recherche.calendar.cal2 = new YAHOO.widget.CalendarGroup("cal2","cal2Container", {PAGES:2,
                                                                                       selected:strMinDateCal2,
                                                                                       mindate:strMinDateCal2,
                                                                                       maxdate:strMaxDateCal2,
                                                                                       title:"Sélectionnez la date de départ :",
                                                                                       close:true
                                                                                       });
      YAHOO.recherche.calendar.cal2.cfg.setProperty("MONTHS_LONG",    ["Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre"]);
      YAHOO.recherche.calendar.cal2.cfg.setProperty("WEEKDAYS_SHORT",["Di", "Lu", "Ma", "Me", "Je", "Ve", "Sa"]);

      YAHOO.recherche.calendar.cal2.selectEvent.subscribe(handleSelect2, YAHOO.recherche.calendar.cal2, true);
      YAHOO.recherche.calendar.cal2.render();
      YAHOO.util.Event.addListener("show2up", "click", YAHOO.recherche.calendar.cal2.show, YAHOO.recherche.calendar.cal2, true); // Listener to show the 2 page Calendar when the button is clicked
      YAHOO.util.Event.addListener(["tomonth","today","toyear"], "change", updateCal2);

      // init labels
      var now = new Date();
      document.getElementById('fromDayOfWeekLabel').innerHTML = dayOfWeek[now.getDay()]; // set toDayOfWeekLabel
      now.setDate(now.getDate()+1);
      document.getElementById('toDayOfWeekLabel').innerHTML = dayOfWeek[now.getDay()]; // set toDayOfWeekLabel

   }


   YAHOO.util.Event.onDOMReady(YAHOO.recherche.calendar.init);


