
var calDay;

var thisDate = YAHOO.widget.DateMath.findMonthEnd(currDate);
var maxDaysInMonth = new Array();
var count = 0;
while (count < 12) {
  var currMonth = "" + (thisDate.getMonth() + 1);
  maxDaysInMonth[currMonth] = thisDate.getDate();
  thisDate = YAHOO.widget.DateMath.add(thisDate, YAHOO.widget.DateMath.DAY, 1);
  thisDate = YAHOO.widget.DateMath.findMonthEnd(thisDate);
  count++;
}


function init() {
  this.today = currDate;

  var thisMonth = this.today.getMonth();
  var thisDay = this.today.getDate();
  var thisYear = this.today.getFullYear();
  
  var monthNameWith0Index = new Array();
  for(var count = 0; count < monthNames.length + 1; count++ )
  monthNameWith0Index[count] = monthNames[count+1];
  
  var mindate = YAHOO.widget.DateMath.add(this.today, YAHOO.widget.DateMath.DAY, 0);
  var maxdate = YAHOO.widget.DateMath.add(this.today, YAHOO.widget.DateMath.DAY, 340);
  
  if (this.cal1 == null) this.cal1 = handleAdditionaCalendarlInit("1");       
  this.cal1.title = cal1Title;
  handleAdditionalMethods(this.cal1);
  
  this.cal1.cfg.setProperty("LOCALE_MONTHS", "long");
  this.cal1.cfg.setProperty("MONTHS_LONG", monthNameWith0Index);
  this.cal1.cfg.setProperty("LOCALE_WEEKDAYS", "short");
  this.cal1.cfg.setProperty("WEEKDAYS_SHORT", dayNames);
  this.cal1.cfg.setProperty("mindate", mindate);
  this.cal1.cfg.setProperty("maxdate", maxdate);
  this.cal1.selectEvent.subscribe(handleSelectDeparture, this.cal1, true);
  this.cal1.render();
  
  if (this.cal2 == null) this.cal2 = handleAdditionaCalendarlInit("2");    
  this.cal2.title = cal2Title;
  handleAdditionalMethods(this.cal2);
  
  this.cal2.cfg.setProperty("LOCALE_MONTHS", "long");
  this.cal2.cfg.setProperty("MONTHS_LONG", monthNameWith0Index);
  this.cal2.cfg.setProperty("LOCALE_WEEKDAYS", "short");
  this.cal2.cfg.setProperty("WEEKDAYS_SHORT", dayNames);
  this.cal2.cfg.setProperty("mindate", mindate);
  this.cal2.cfg.setProperty("maxdate", maxdate);
  this.cal2.selectEvent.subscribe(handleSelectReturn, this.cal2, true);
  
  this.cal2.render();
}

function handleSelectDeparture(type, args, obj) {
  
  handleSelect('outbound', args);
}

function handleSelectReturn(type, args, obj) {
  
  handleSelect('inbound', args);
}

function handleSelect(direction, args) {
  var dateFieldStr;
  var dayFieldStr;
  var dateField;
  var thisCal;
  if (direction == 'inbound') {
    dayFieldStr = document.getElementById("returnDateDay");
    dateFieldStr = document.getElementById("returnDateStr");
    dateField = document.getElementById("returnDate");
    thisCal = this.cal2;
  } else {
    dayFieldStr = document.getElementById("departureDateDay");
    dateFieldStr = document.getElementById("departureDateStr");
    dateField = document.getElementById("departureDate");
    thisCal = this.cal1;
  }
  var dates = args[0];
  var date = dates[0];
  var year = date[0], month = date[1], day = date[2];
  dateFieldStr.value = formatDateField(day, month, year);
  dateField.value = year+"-"+padLeft(""+month,'0',2)+"-"+padLeft(""+day,'0',2);
  dayFieldStr.innerHTML = dayNames[thisCal.getSelectedDates()[0].getDay()];
  
  // ensure inbound calendar dates are within range
  var departureDate = this.cal1.getSelectedDates()[0];
  var returnDate = this.cal2.getSelectedDates()[0];
  this.cal2.cfg.setProperty("mindate", departureDate);
  if (returnDate != null && Date.parse(returnDate) > Date.parse(departureDate)) {
  } else {
    this.cal2.cfg.setProperty("pagedate",(departureDate.getMonth()+1) + "/" + departureDate.getFullYear());
  }
  if (returnDate == null || Date.parse(returnDate) < Date.parse(departureDate)) {
    this.cal2.select(departureDate);
  }
  this.cal2.render();
  handleAdditionalSelect(thisCal);
}

/*
update calendar with date of format yyyy-mm-dd
*/
function updateCal(direction, dateStr) {
  var thisCal;
  if (direction == 'inbound') {
    thisCal = this.cal2;
  } else {
    thisCal = this.cal1;
  }
  if (dateStr != "") {
    var str = dateStr.split("-");
    var date = "" + getNumber(str[1]) + "/" + (getNumber(str[2])) + "/" + str[0];
    if (thisCal != null) {
      thisCal.select(date);
      var firstDate = thisCal.getSelectedDates()[0];
      thisCal.cfg.setProperty("pagedate",(firstDate.getMonth()+1) + "/" + firstDate.getFullYear());
      thisCal.render();
    }
  }
  
}

/*
initialise date fields
*/
function setDates() {
  var updateDates = document.getElementById("refreshDates");
  var departureDate = document.getElementById("departureDate");
  var returnDate = document.getElementById("returnDate");
  var returnDateValue = returnDate.value;	
  // use dates from the search form
  if (updateDates && updateDates.value == "true") {
    if (departureDate.value != "" && returnDate.value != "") {
      updateCal("outbound", departureDate.value);
      updateCal("inbound", returnDateValue);
    }
  } else { // use current date
    var dd = this.today.getDate();
    var mm = this.today.getMonth() + 1;
    var yyyy = this.today.getFullYear();
    var dateStr = yyyy + "-" + padLeft(""+mm,'0',2)+"-"+padLeft(""+dd,'0',2);
    updateCal("outbound", dateStr);
    updateCal("inbound", dateStr);
  }
  this.cal2.render();
}

function initJourneySpan() {
  var journeySpanRT = document.getElementById("journeySpanRT");
  var journeySpanOW = document.getElementById("journeySpanOW");
  if (selectedJourneySpan == 'OW') {
    journeySpanOW.click();
  } else {
    journeySpanRT.click();
  }
}

function updateJourneySpan() {
  var journeySpanRT = document.getElementById("journeySpanRT");
  var journeySpanOW = document.getElementById("journeySpanOW");
  if (journeySpanOW.checked) {
    disableReturnCalendar();
  } else {
    enableReturnCalendar();
  }
}

function disableReturnCalendar() {
  var returnCalendar = document.getElementById("returnCalendar");
  hideDiv(returnCalendar);
}

function enableReturnCalendar() {
  var returnCalendar = document.getElementById("returnCalendar");
  showDiv(returnCalendar);
}

/* OVERRIDE THIS IF NEEDED */
function handleAdditionalMethods(cal) {
  cal.cfg.setProperty("NAV_ARROW_LEFT", YAHOO.widget.Calendar_Core.IMG_ROOT + "callt.gif");
  cal.cfg.setProperty("NAV_ARROW_RIGHT", YAHOO.widget.Calendar_Core.IMG_ROOT + "calrt.gif");
}
// date field formatted to dd/mm/yyyy
function formatDateField(day, month, year) {
  var format = padLeft(""+day,'0',2)+"/"+padLeft(""+month,'0',2)+"/"+year;
  return format;
}
function handleAdditionaCalendarlInit(calId) {
  return new YAHOO.widget.CalendarGroup("YAHOO.webqtrip.cal"+calId,"box"+calId, { iframe: true });
}
function handleAdditionalSelect(cal) {
	
}

