// ----------------------------------------------------------------------------------------------------
/*
   Program: a1villa_calendar.js

   Author:  James Whitfield
   Date:    2 January 2009

   Description:
   Calendar functionality.

   Amendments:

   22/10/09  JJW  Corrected for Firefox.

*/
// ----------------------------------------------------------------------------------------------------

  var months= "January|February|March|April|May|June|July|August|September|October|November|December".split("|");
  var monthscode= "Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec".split("|");
  var daysofweek= "Sunday|Monday|Tuesday|Wednesday|Thursday|Friday|Saturday".split("|");
  var msecsInADay= 24 * 3600000;

// ====================================================================================================
// Populate the calendar
// ====================================================================================================

function PopulateCalendar(calendarName, todayGoto, modeWhichSelect) {

  var today= new Date();
  var todayDayNo= today.getDate();
  var todayMonth= today.getMonth();
  var todayYear=  today.getFullYear();

  var calendarID=  document.getElementById(calendarName);
  var calMonthSel= document.getElementById(calendarName + "Month");
  var calYearSel=  document.getElementById(calendarName + "Year");

  // Check to see if the calendar has already been populated.
  if ((todayGoto == "C") && (calendarID.rows[2].cells[0].className != "")) return;


  if (todayGoto == "Y") {
     var calMonth= todayMonth;
     var calYear=  todayYear;
     var intThisYear= calYear - parseInt(calYearSel.options[0].value);
     if ( isNaN(intThisYear) ) { intThisYear= 0 };
     calMonthSel.options[calMonth].selected = true;
     calYearSel.options[intThisYear].selected = true;
   } else {
     var calMonth= calMonthSel.options[calMonthSel.selectedIndex].value;
     var calYear=  calYearSel.options[calYearSel.selectedIndex].text;
  };

  var monthStart=        "1 " + months[calMonth] + " " + calYear;
  var monthStartDate=    new Date(("1 " + months[calMonth] + " " + calYear));
  var actualStartDate=   monthStartDate - (monthStartDate.getDay() * msecsInADay) -1;
  document.getElementById(calendarName + "StartDate").value= actualStartDate;

  for (var calDay=0; calDay<=41; calDay++) {

       var rowNo   = parseInt(calDay / 7) +2;
       var cellNo   = calDay % 7;
       var caldate = new Date(actualStartDate + (calDay * msecsInADay));
       var calDayNo= caldate.getDate();

       if ( (caldate.getFullYear() == todayYear) && (caldate.getMonth() == todayMonth) && (calDayNo == todayDayNo)) cellclass= "c100today"
        else if (caldate.getMonth() != calMonth) cellclass= "c100prevmonth"
         else cellclass= "c100currmonth";

       calendarID.rows[rowNo].cells[cellNo].className = "c100";


       // 1== Normal date
       // 2== Booking arrival and departure dates

       if ( modeWhichSelect == 1 )
          calendarID.rows[rowNo].cells[cellNo].innerHTML = "<a href=" + chr(34) + "javascript:SelectCalendarDate('"  + 
                     calendarName + "'," + calDay + ");" + chr(34) + " class='" + cellclass + "'>" + calDayNo + "</a>";

        else if ( modeWhichSelect == 2 )
          calendarID.rows[rowNo].cells[cellNo].innerHTML = "<a href=" + chr(34) + "javascript:SelectBookingDates('"  + 
                     calendarName + "'," + calDay + ");" + chr(34) + " class='" + cellclass + "'>" + calDayNo + "</a>";
     
   };
}

// ====================================================================================================
// Determine departure date
// ====================================================================================================

function SetDepartureDate(calendarName) {
// Check to make sure a target field for the calendar is available, along with a display departure field

  var calFieldRef=  document.getElementById(calendarName + "Field");

  if ( calFieldRef.value != "" ) {
     var calDeparture=  document.getElementById(calFieldRef.value + "Departure");
     if ( calDeparture ) {
//        var calNights= document.getElementById(calendarName + "Nights");  ...changed name for simplicity on request mail
        var calNights= document.getElementById("Nights");
        var calField=  document.getElementById(calFieldRef.value);
        if ( calField.value != "" ) {
           var intNights= parseInt(calNights.options[calNights.selectedIndex].value) * msecsInADay;
           var calDate=   new Date(parseInt(calField.value) + intNights);
           calDeparture.innerHTML= daysofweek[calDate.getDay()] + ", " + 
                                   calDate.getDate() + " " + months[calDate.getMonth()] + " " + calDate.getFullYear();
        };
     };
  };
}

// ====================================================================================================
// Select a date from the calendar
// ====================================================================================================

function SelectCalendarDate(calendarName,calDayNo) {
  var calFieldRef=  document.getElementById(calendarName + "Field");
  var calStartDate= document.getElementById(calendarName + "StartDate");

  if (( calStartDate ) && ( calFieldRef.value != "" )) {

     var calField=   document.getElementById(calFieldRef.value);
     var dtSelected= parseInt(calStartDate.value) + (calDayNo * msecsInADay);
     calField.value= dtSelected; 

     // If display field exists, show the selected date in full format...
     var calFieldRefDisplay=  document.getElementById(calFieldRef.value + "Display");
     if (calFieldRefDisplay ) { 
        var calDate= new Date(dtSelected);
        calFieldRefDisplay.innerHTML= daysofweek[calDate.getDay()] + ", " + 
                                      calDate.getDate() + " " + months[calDate.getMonth()] + " " + calDate.getFullYear();
        SetDepartureDate(calendarName);
     };
  };
}

// ====================================================================================================
// Select booking dates from the calendar
// This requires a radio group called 'BookingDate' to define the arrival (0) and departure (1)dates.
// ====================================================================================================

function SelectBookingDates(calendarName,calDayNo) {
  var grpWhichDate=  document.getElementsByName("BookingDate");
  for (var idx=0; idx< grpWhichDate.length; idx++)
      { if (grpWhichDate[idx].checked == true) var strWhichDate= grpWhichDate[idx].value; }

  var calStartDate= document.getElementById(calendarName + "StartDate");
  var StartDate=    parseInt(calStartDate.value) + (calDayNo * msecsInADay);
  var dtSelected=   new Date(StartDate);
  var idSetDay=     document.getElementById(strWhichDate + "_day");

  if ( idSetDay ) {
     var idSetMonth= document.getElementById(strWhichDate + "_month");
     var idSetYear=  document.getElementById(strWhichDate + "_year");
     idSetDay.options[dtSelected.getDate() +3].selected = true;
     idSetMonth.options[dtSelected.getMonth()].selected = true;
     if (strWhichDate != "departure" ) idSetYear.options[dtSelected.getYear() - 2009].selected = true;
  };
}

// ====================================================================================================
// Sets a radio group option to checked
// ====================================================================================================

function SetRadioOption(nameRadioGroup, numWhichOption) {
  var grpWhichRadio=  document.getElementsByName(nameRadioGroup);
  grpWhichRadio[numWhichOption].checked= true;
}
