// JavaScript Document

<!--Start Date Select-->

// DATE SETTINGS - EDIT AS REQUIRED
var daysinAdvance = 1; // Sets default days in advance from current date
var numberNights = 2;  // Sets default number of nights
var numberYears = 4; // Sets default number of years to display in year select list

// FLAG SETTINGS ON/OFF - SET TO 1 FOR ON & 0 FOR OFF
var wdDisplay = 0; //weekday display
var numberNightsDisplay = 0; //number of nights display
var departDateDisplay = 1; //departure dates display
var departDateUpdate = 0; //auto update departure date

// WEEK DAY AND NUMBER NIGHTS TEXT - EDIT TEXT AS REQUIRED
var wdArray = new Array("");
var nightTxt = " Night";
var nightsTxt = " Nights";
var invalidDateTxt = "Invalid Arrival Date. Please change...";
var invalidDatePriorTxt = "Arrival Date selected is prior Today's date. Please change...";

/////////////////////////////////////////
// DO NOT CHANGE SETTINGS BELOW THIS LINE
/////////////////////////////////////////
//Days in each month Array
var aNumDays = new Array (31,0,31,30,31,30,31,31,30,31,30,31);

//Cancel out if no departure date display
if(departDateDisplay == 0) {
  numberNightsDisplay = 0;
  departDateUpdate = 0;
}

//Sets dates selected from dyncalendar
function calendarCallback(day, month, year, objName, formName) {
  if(objName == "calendarArrive"){
    document.forms[formName].fd.selectedIndex = day-1;
    document.forms[formName].fm.selectedIndex = month-1;
    document.forms[formName].fy.selectedIndex = year - DateSelect.fy.options[0].text;
    updateDates(document.forms[formName]);
    if(wdDisplay == 1 && departDateDisplay == 1) setWkd(formName, 1);
  }else{  //objName == calendarDepart
    document.forms[formName].td.selectedIndex = day-1;
    document.forms[formName].tm.selectedIndex = month-1;
    document.forms[formName].ty.selectedIndex = year - DateSelect.ty.options[0].text;
    if(wdDisplay == 1 && departDateDisplay == 1) setWkd(formName, 1);
  }
}

//Update form with selected dates
function updateDates(form, loadDates) {
  // Update departure date only when loading the form and/or departDateUpdate is set to 1
  if(loadDates == 1 || departDateUpdate == 1) {
    var selectDate = new Date(form.fy.options[form.fy.selectedIndex].text, form.fm.selectedIndex, form.fd.selectedIndex);
    var setDate = new Date(selectDate.getTime() + ((numberNights+1) * 86400000));
    var setDay = setDate.getDate();
    var setMonth = setDate.getMonth();
    var setYear = setDate.getFullYear() - form.fy.options[0].text;
    if (form.fm.selectedIndex==1)  { //check Leap Year
      leapYear  = new Date (form.fy.options[form.fy.selectedIndex].text,form.fm.selectedIndex+1,1);
      leapYear  = new Date (leapYear  - (24*60*60*1000));
      numDaysInMonth = leapYear.getDate();
    }else{
      numDaysInMonth = aNumDays[form.fm.selectedIndex];
    }
    if (form.fd.selectedIndex+1 > numDaysInMonth) alert(invalidDateTxt);
    if(setYear == form.ty.length) {
      form.td.options[30].selected=1;
      form.tm.options[11].selected=1;
      form.ty.options[form.ty.length-1].selected=1;
    } else {
      form.td.options[setDay-1].selected=1;
      form.tm.options[setMonth].selected=1;
      form.ty.options[setYear].selected=1;
    }
  }
}

function setWkd(form, calendar) {
  // change form object if returned from calendar
  if(calendar) form = document.forms[form];
  for (var i = 0; i < form.fy.length; i++) {
    if (form.fy.options[i].selected) var fyear = form.fy.options[i].text;
    if (departDateDisplay == 1 && form.ty.options[i].selected) var tyear = form.ty.options[i].text;
  }
  var checkinDate = new Date(fyear,form.fm.selectedIndex,form.fd.selectedIndex+1);
  if (departDateDisplay == 1) var checkoutDate = new Date(tyear,form.tm.selectedIndex,form.td.selectedIndex+1);
  var numNights = Math.round((checkoutDate - checkinDate) / 86400000);
  if (numNights < 1) numNights = "?????";
  else if (numNights == 1) numNights += nightTxt;
  else numNights += nightsTxt;
  //Set Days of the week display
  if(wdDisplay == 1) {
    document.getElementById('inWd').firstChild.nodeValue = '(' + wdArray[checkinDate.getDay()] + ')';
    if (departDateDisplay == 1) document.getElementById('outWd').firstChild.nodeValue = '(' + wdArray[checkoutDate.getDay()] + ')';
  }
  //Set number of nights display
  if(numberNightsDisplay == 1) document.getElementById('lengthStay').firstChild.nodeValue = numNights;
}

//Load current dates on form load
function LoadDates(form) {
  var curDate = new Date();
  var setDate = new Date(curDate.getTime() + (daysinAdvance * 86400000));
  var setDay = setDate.getDate();
  var setMonth = setDate.getMonth();
  var setYear = setDate.getFullYear() - form.fy.options[0].text;
  // Set Arrival Dates
  form.fd.selectedIndex = setDay-1;
  form.fm.selectedIndex = setMonth;
  form.fy.selectedIndex = setYear;
  // Set the Departure Dates
  updateDates(form, departDateDisplay);
  if(wdDisplay == 1 || numberNightsDisplay == 1) setWkd(form);
}

//Load current dates on form load
function checkDates(form) {
  var curDate = new Date();
  for (var i = 0; i < form.fy.length; i++) {
    if (form.fy.options[i].selected) var fyear = form.fy.options[i].text;
    if (departDateDisplay == 1 && form.ty.options[i].selected) var tyear = form.ty.options[i].text;
  }
  var checkinDate = new Date(fyear,form.fm.selectedIndex,form.fd.selectedIndex+2);
  if(checkinDate.getTime() < curDate.getTime()) {
    alert(invalidDatePriorTxt);
    return false;
  }
}

//Generate years options for year select list
function year_option(form){
  curDate = new Date();
  curYear = curDate.getFullYear();
  for(i = curYear ; i <= curYear+(numberYears-1) ; i++ ){
    document.write('<option value="' + i + '">' + i + '</option>');
  }
}
