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 populateCalendarMonths() {
  var i = 0;
  var currYear = currDate.getFullYear();
  var year = currYear; 
  var selMonth1 = document.getElementById('selMonth1');
  var selMonth2 = document.getElementById('selMonth2');
  var intMonth1 = thisDate.getMonth() + 1;
  for (var m in maxDaysInMonth) {
    if(intMonth1==13){
    	intMonth1=1;
    }
    year = (i < parseInt(intMonth1) ? currYear : currYear+1);
    var month = monthNames[intMonth1] + " " + year;
    createOption('selMonth1', i, intMonth1, month);
    if (selectedMonthDeparture != '') {
    	if (selectedMonthDeparture == selMonth1.options[i].value) {
    		selMonth1.options[i].selected = true;
    	}
    }
    createOption('selMonth2', i, intMonth1, month);
    if (selectedMonthReturn != '') {
    	if (selectedMonthReturn == selMonth2.options[i].value) {
    		selMonth2.options[i].selected = true;
    	}
    }
    i++;
    intMonth1 +=1;
  }
}

function populateCalendarDaysOfDirection(direction) {
  var selMonth;
  var selDay;
  var elName;
  var selectedDay;
  if (direction == 'outbound') {
    elName = 'selDay1';
    selMonth = document.getElementById('selMonth1');
    selDay = document.getElementById(elName);
    selectedDay = selectedDayDeparture;
  } else {
    elName = 'selDay2';
    selMonth = document.getElementById('selMonth2');
    selDay = document.getElementById(elName);
    selectedDay = selectedDayReturn;
  }
  var day = (selDay.value !== '' ? selDay.value : currDate.getDate());
  //var refreshDates = document.getElementById("refreshDates");
  // populate day dropdown
  selDay.options.clear;
  selDay.options.length = 0;
  for(var i = 1; i <= maxDaysInMonth[""+selMonth.value]; i++) {
    createOption(elName, i-1, i, i);
  	/*if (selectedDayDeparture != '') {
	  if (selectedDayDeparture == selDay.options[i-1].value) {
	    if (refreshDates == false) {
	      alert("val - "+selDay.options[i-1].value)
	      selDay.options[i-1].selected = true;
	    }    
	  }    
  	}*/
  }
  if (selectedDay == '') {
    selDay.value = (selDay.options.length < day ? 1 : day);
  } else {
    /*if (refreshDates.value == '') {
      selDay.value = selectedDay;
    } else {
      selDay.value = (selDay.options.length < day ? 1 : day);
    }*/
    selDay.value = (selDay.options.length < selectedDay ? 1 : selectedDay);
  }
}

function populateCalendarDays() {
  populateCalendarDaysOfDirection('outbound');
  populateCalendarDaysOfDirection('inbound');
}

function showCalendar1() {
  hideDiv(box2);
  showDiv(box1);
}

function showCalendar2() {
  hideDiv(box1);
  showDiv(box2);
}

setDate1 = function() {
  var date1 = cal1.getSelectedDates()[0];
  var calDay = date1.getDate();
  var calMonth = date1.getMonth() + 1;
  // Set new month first
  selMonth1.value = calMonth; 
  // Then populate days
  populateCalendarDaysOfDirection('outbound');
  // Then set new day
  selDay1.value = calDay;
  changeDate2ToDate1()
  hideDiv(box1);
}

setDate2 = function() {
  var date2 = cal2.getSelectedDates()[0];
  var calDay = date2.getDate();
  var calMonth = date2.getMonth() + 1;
  // Set new month first
  selMonth2.value = calMonth; 
  // Then populate days
  populateCalendarDaysOfDirection('inbound');
  // Then set new day
  selDay2.value = calDay;  
  hideDiv(box2);
}

function changeDate1() {
  var date = getDateFromDropdown('outbound');
  if (typeof cal1 !== 'undefined') {
    cal1.select(date);
    cal1.setMonth(date.getMonth());
    cal1.setYear(date.getFullYear());
    cal1.render();
  }
  if (this.selDay1.length != maxDaysInMonth[this.selMonth1.value]) {
    populateCalendarDaysOfDirection('inbound');
  }
  changeDate2ToDate1();
}

function changeDate2() {
  var date = getDateFromDropdown('inbound');
  
  if (typeof cal2 !== 'undefined') {
    cal2.select(date);
    cal2.setMonth(date.getMonth());
    cal2.setYear(date.getFullYear());
    cal2.render();
  }
  if (this.selDay2.length != maxDaysInMonth[this.selMonth2.value]) {
    populateCalendarDaysOfDirection('outbound');
  }
}

// change return date if it occurs before the departure date
function changeDate2ToDate1() {
  var date = getDateFromDropdown('outbound');
  var returnDate = getDateFromDropdown('inbound');
  if (returnDate < date) {
    this.selMonth2.value = this.selMonth1.value;
    this.selDay2.value = this.selDay1.value;
    changeDate2();
  }
}

/* returns a javascript Date from the select boxes */
function getDateFromDropdown(direction) {
	var selMonth;
	var selDay;
  if (direction == 'outbound') {
  	selMonth = this.selMonth1;
  	selDay = this.selDay1;
  } else {
  	selMonth = this.selMonth2;
  	selDay = this.selDay2;
  }
  if (selMonth != null && selDay != null) {
  	var month = selMonth.value - 1;
  	var day = (selDay.value > maxDaysInMonth[selMonth.value] ? maxDaysInMonth[selMonth.value] : selDay.value);
  	var currYear = currDate.getFullYear();
  	var year = (selMonth.selectedIndex < selMonth.value ? currYear : currYear+1);
  	
  	var date = new Date();
		date.setFullYear(year, month, day);
    return date;  
  }
}

function init() {
  this.today = currDate;

  var thisMonth = this.today.getMonth();
  var thisDay = this.today.getDate();
  var thisYear = this.today.getFullYear();

  this.link1 = document.getElementById('dateLink1');
  this.link2 = document.getElementById('dateLink2');

  this.selMonth1 = document.getElementById('selMonth1');
  this.selDay1 = document.getElementById('selDay1');

  this.selMonth1.value = thisMonth+1;
  this.selDay1.value = thisDay;

  this.selMonth2 = document.getElementById('selMonth2');
  this.selDay2 = document.getElementById('selDay2');

  this.selMonth2.value = thisMonth+1;
  this.selDay2.value = thisDay;
  
  this.box1 = document.getElementById("box1");
  this.box2 = document.getElementById("box2");
  
  var pos1 = YAHOO.util.Dom.getXY(link1);
  YAHOO.util.Dom.setXY(box1, [pos1[0],pos1[1]]);
  var pos2 = YAHOO.util.Dom.getXY(link2);
  YAHOO.util.Dom.setXY(box2, [pos2[0],pos2[1]]);
  
  // Had to do this because we need an array of months with zero index
  var monthNameWith0Index = new Array();
  for(var count = 0; count < monthNames.length + 1; count++ )
  monthNameWith0Index[count] = monthNames[count+1];
  
  if (this.cal1 == null) this.cal1 = new YAHOO.widget.Calendar("YAHOO.webqtrip.cal1","box1");       
  this.cal1.title = cal1Title;
  
  this.cal1.Config.Options.LOCALE_MONTHS = monthNameWith0Index;
  if (hasDayLabel) this.cal1.Config.Options.LOCALE_WEEKDAYS = dayNames;
  handleAdditionalMethods(this.cal1);
  
  this.cal1.onSelect = this.setDate1;
  this.cal1.minDate = YAHOO.widget.DateMath.add(this.today, YAHOO.widget.DateMath.DAY, 0);
  this.cal1.maxDate = YAHOO.widget.DateMath.add(this.today, YAHOO.widget.DateMath.DAY, 340);
  this.cal1.render();
  
  if (this.cal2 == null) this.cal2 = new YAHOO.widget.Calendar("YAHOO.webqtrip.cal2","box2");
  this.cal2.title = cal2Title;
  
  this.cal2.Config.Options.LOCALE_MONTHS = monthNameWith0Index;
  if (hasDayLabel) this.cal2.Config.Options.LOCALE_WEEKDAYS = dayNames;
  handleAdditionalMethods(this.cal2);
  
  this.cal2.onSelect = this.setDate2;
  this.cal2.minDate = YAHOO.widget.DateMath.add(this.today, YAHOO.widget.DateMath.DAY, 0);
  this.cal2.maxDate = YAHOO.widget.DateMath.add(this.today, YAHOO.widget.DateMath.DAY, 340);
  this.cal2.render();
}

function initJourneySpan() {
  var journeySpanRT = document.getElementById("journeySpanRT");
  var journeySpanOW = document.getElementById("journeySpanOW");
  if (selectedJourneySpan == 'OW') {
    journeySpanOW.click();
  } else {
    journeySpanRT.click();
  }
}

function updatedJourneySpan() {
  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) {
}


