/* Calendar selection events - defined in a separate file for 
   technical reasons. */

YAHOO.namespace("widget.DateMath");

var minDateObj = new Date();
var maxYear = minDateObj.getYear() + 1;
if (maxYear < 100) maxYear += 2000;
else if (maxYear < 2000) maxYear += 1900;

var maxDateObj = new Date(maxYear, new Date().getMonth(), new Date().getDate());

var cal1 = new YAHOO.widget.Calendar("cal1", "cal_container", { title:"Choose a date:", 
																close:true, 
																mindate: minDateObj, 
 	                                                            maxdate: maxDateObj,
 	                                                            iframe: true } );
cal1.render();
YAHOO.util.Event.addListener("show_calendar", "click", cal1.show, cal1, true);

function handleSelect(type,args,obj) 
{
	var dates = args[0];
	var date = dates[0];
	var year = date[0], month = date[1], day = date[2];

	var selMonth = document.getElementById("dateMonth");
	var selDay = document.getElementById("dateDay");
	var selYear = document.getElementById("dateYear");

	selMonth.selectedIndex = month - 1;
	selDay.selectedIndex = day - 1;


	for (var y = 0; y < selYear.options.length; y++) 
	{
		if (selYear.options[y].text == year) 
		{
			selYear.selectedIndex = y;
			break;
		}
	}
	

	writeDepartureDateTime();
	
	obj.hide();
}

function updateCal() 
{	
	var selMonth = document.getElementById("dateMonth");
	var selDay = document.getElementById("dateDay");
	var selYear = document.getElementById("dateYear");

	var month = parseInt(selMonth.options[selMonth.selectedIndex].value) + 1;
	var day = parseInt(selDay.options[selDay.selectedIndex].value);
	var year = parseInt(selYear.options[selYear.selectedIndex].value) + 1900;

	var selectedDate = new Date();
	
	selectedDate.setDate(1);
	selectedDate.setMonth(month - 1);
	selectedDate.setFullYear(year);
	 
	var endDay = YAHOO.widget.DateMath.findMonthEnd(selectedDate).getDate();
	
	if (day > endDay)
	{
		selDay.selectedIndex = 0;
		selMonth.selectedIndex += 1;
		
		selMonth.selectedIndex %= 12;
		
		day = 1;
		month = month + 1 % 12;
	}

	if (! isNaN(month) && ! isNaN(day) && ! isNaN(year)) 
	{
		var date = month + "/" + day + "/" + year;

		cal1.select(date);
		cal1.cfg.setProperty("pagedate", month + "/" + year);
		cal1.render();
	}
}

cal1.selectEvent.subscribe(handleSelect, cal1, true);

YAHOO.util.Event.addListener(["dateMonth","dateDay","dateYear"], "change", updateCal); 


////////////////// [Above] Calendar / [Below] Date Writer


var months = ["January","February","March","April","May","June","July","August","September","October","November","December"];
var daysOfTheWeek = ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];

function writeDepartureDateTime(event) {
      var day = parseInt($('dateDay').getValue());
      var month = parseInt($('dateMonth').getValue());
      var year = parseInt($('dateYear').getValue()) + 1900;
      var nights = parseInt($('nights').getValue());

      var arrivalDate = new Date(year, month, day);

      if ((arrivalDate.getTime() + (1000 * 60 * 60 * 24 )) < new Date().getTime()) {
         $('dept_txt').innerHTML = "";
         return;
      }

      var departureDate = new Date(arrivalDate.getTime() + (1000 * 60 * 60 * 24 * nights));

	  // some browers return 2008 some return 108 from getYear
	  // and I've read somewhere that some return 08, so this should fix them
	  var departYear = departureDate.getYear();
	  if (departYear < 100) departYear += 2000;
	  else if (departYear < 2000) departYear += 1900;

      var formattedDate = "Depart by 11am on " + daysOfTheWeek[departureDate.getDay()] + ", " + departureDate.getDate() + " " + months[departureDate.getMonth()] + " " + departYear;
      $('dept_txt').innerHTML = formattedDate;
}

function setUpDepWriteEvents(event) {
   writeDepartureDateTime();
   Event.observe('dateDay', 'change', writeDepartureDateTime);
   Event.observe('dateMonth', 'change', writeDepartureDateTime);
   Event.observe('dateYear', 'change', writeDepartureDateTime);
   Event.observe('nights', 'change', writeDepartureDateTime);
}


Event.observe(window, 'load', setUpDepWriteEvents);


