// Initialise multiple calendars
// Currently supports upto 4 calendars, 

YAHOO.namespace("multiple.calendar");
var calArray = new Array();

//handler function called when calendar picker selects date, updates select fields
function setSelect(idNo, day, month, year){
	var selMonth = document.getElementById("selMonth"+idNo);
	var selDay = document.getElementById("selDay"+idNo);
	var selYear = document.getElementById("selYear"+idNo);

	if(selMonth.selectedIndex == month-1 && selDay.selectedIndex == day-1 && selYear.options[selYear.selectedIndex].text == year) {
	} else {
		selMonth.selectedIndex = month-1;// 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;
			}
		}
	}
	
	//refreshSelects(idNo);
/*
	selMonth.selectedIndex = 7-1;// 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;
		}
	}*/
}

//handler function called when select field changes, updates calendar accordingly
function getCalDate(calNo){
	//console.log("select field change");
	var selMonth = document.getElementById("selMonth"+calNo);
	var selDay = document.getElementById("selDay"+calNo);
	var selYear = document.getElementById("selYear"+calNo);
	
	var dateArray = new Array();
	//dateArray["month"] = parseInt(selMonth.options[selMonth.selectedIndex].text);
	dateArray["month"] = selMonth.selectedIndex + 1;
	dateArray["day"] = selDay.selectedIndex + 1;
	dateArray["year"] = selYear.options[selYear.selectedIndex].value;

	
	
	
	
	if (! isNaN(dateArray["month"]) && ! isNaN(dateArray["day"]) && ! isNaN(dateArray["year"])) {
		var date = dateArray["day"] + "/" + dateArray["month"] + "/" + dateArray["year"];
		calArray[calNo].select(date);
		calArray[calNo].cfg.setProperty("pagedate", dateArray["month"] + "/" + dateArray["year"]);
		calArray[calNo].render();
	}
	
	//refreshSelects(calNo);
}
//
function handleSelect1(type,args,obj) {
	var dates = args[0]; 	var date = dates[0];	var year = date[0], month = date[1], day = date[2];
	setSelect(1, day, month, year);
}
function handleSelect2(type,args,obj) {
	var dates = args[0]; 	var date = dates[0];	var year = date[0], month = date[1], day = date[2];
	setSelect(2, day, month, year);
}
function handleSelect3(type,args,obj) {
	var dates = args[0]; 	var date = dates[0];	var year = date[0], month = date[1], day = date[2];
	setSelect(3, day, month, year);
}
function handleSelect4(type,args,obj) {
	var dates = args[0]; 	var date = dates[0];	var year = date[0], month = date[1], day = date[2];
	setSelect(4, day, month, year);
}


//
function updateCal1() {	getCalDate(1); }
function updateCal2() { getCalDate(2); }
function updateCal3() { getCalDate(3); }
function updateCal4() { getCalDate(4); }



function init(calNo, calContainerId, calLaunchBtnId, calTitle, initDate) {
	//console.log("calNo: "+calNo);
	//console.log("calContainerId: "+calContainerId);
	//console.log("calLaunchBtnId: "+calLaunchBtnId);
	//console.log("calTitle: "+calTitle);
	//console.log("initDate: "+initDate);
	
	//init vars
	var calNum = "cal"+calNo;
	//var calContainer = "cal"+calNo+"Container";
	
	calArray[calNo] = YAHOO.multiple.calendar.calNum;
	
	//new instance of calendar
	calArray[calNo] = new YAHOO.widget.Calendar(calNum, calContainerId, 
		{ title:calTitle,
			close:true,
			mindate:cal_min_date,
			maxdate:cal_max_date });
	
	//Day-Month-Year formatting
	calArray[calNo].cfg.setProperty("MDY_DAY_POSITION", 1); 
	calArray[calNo].cfg.setProperty("MDY_MONTH_POSITION", 2); 
	calArray[calNo].cfg.setProperty("MDY_YEAR_POSITION", 3); 
	calArray[calNo].cfg.setProperty("MD_DAY_POSITION", 1); 
	calArray[calNo].cfg.setProperty("MD_MONTH_POSITION", 2);
	
	var handleSelect = "handleSelect"+calNo;
	var updateCal = "updateCal"+calNo;
	//subscribe a listener to the select fields and for calendar itself
	switch(calNo){
		case 1:	calArray[calNo].selectEvent.subscribe(handleSelect1, calArray[calNo], true);YAHOO.util.Event.addListener(["selMonth"+calNo,"selDay"+calNo,"selYear"+calNo], "change", updateCal1);break;
		case 2:	calArray[calNo].selectEvent.subscribe(handleSelect2, calArray[calNo], true);YAHOO.util.Event.addListener(["selMonth"+calNo,"selDay"+calNo,"selYear"+calNo], "change", updateCal2);break;
		case 3:	calArray[calNo].selectEvent.subscribe(handleSelect3, calArray[calNo], true);YAHOO.util.Event.addListener(["selMonth"+calNo,"selDay"+calNo,"selYear"+calNo], "change", updateCal3);break;
		case 4:	calArray[calNo].selectEvent.subscribe(handleSelect4, calArray[calNo], true);YAHOO.util.Event.addListener(["selMonth"+calNo,"selDay"+calNo,"selYear"+calNo], "change", updateCal4);break;
	}
	
	
	//if currDay,currMonth, currYear are not set then, calendar will default to today
	if(initDate){
		//console.log(initDate);
		
		var mydate = initDate.split("-");
		
		//console.log(mydate);	
		var year = parseInt(mydate[0], 10);	
		var month = parseInt(mydate[1], 10);	
		var day = parseInt(mydate[2], 10);	
		
		//set default page date in select fields
		//setSelect(calNo, day, month, year);
		//update calendar to correct month/year as per supplied arguement
		calArray[calNo].cfg.setProperty("pagedate", month + "/" + year);
		
		var date = day + "/" + month + "/" + year;

		calArray[calNo].select(date);
		//console.log("date changed to : "+date);
		calArray[calNo].render();
		//console.log("calendar rendered");
	}else{
		//console.warn("initDate not passed");	
	}
	
	//initially hide calendars
	YAHOO.util.Dom.setStyle(calContainerId, 'display', 'none');
	
	//render the calendar
	calArray[calNo].render();
	
	//define an element to launch calendar when clicked
	YAHOO.util.Event.addListener(calLaunchBtnId, "click", calArray[calNo].show, calArray[calNo], true); 
}


function refreshCal(i, minDate, maxDate) {
	//console.log(mydate);	
	var year = $('selYear' + i).value;
	var month = $('selMonth' + i).value;
	var day = $('selDay' + i).value;
	
	var minDateSplit = minDate.split("/");
	var minYear = parseInt(minDateSplit[2], 10);	
	var minMonth = parseInt(minDateSplit[1], 10);	
	var minDay = parseInt(minDateSplit[0], 10);
	
	var maxDateSplit = maxDate.split("/");
	var maxYear = parseInt(maxDateSplit[2], 10);	
	var maxMonth = parseInt(maxDateSplit[1], 10);	
	var maxDay = parseInt(maxDateSplit[0], 10);
	
	if(year < minYear || month < minMonth || (year == minYear && month == minMonth && day < minDay)) {
		$('selYear' + i).value = minYear;
		$('selMonth' + i).value = minMonth;
		$('selDay' + i).value = minDay;
	} else if(year > maxYear || month > maxMonth || (year == maxYear && month == maxMonth && day > maxDay)) {
		$('selYear' + i).value = minYear;
		$('selMonth' + i).value = minMonth;
		$('selDay' + i).value = minDay;
	}

	calArray[i].cfg.setProperty("mindate", minDate);
	calArray[i].cfg.setProperty("maxdate", maxDate);
	calArray[i].cfg.setProperty("pagedate", $('selMonth' + i).value + "/" + $('selYear' + i).value);
	calArray[i].select($('selDay' + i).value + "/" + $('selMonth' + i).value + "/" + $('selYear' + i).value);

	
	cal_min_date = minDate;
	cal_max_date = maxDate;
	
	calArray[i].render();
	//refreshSelects();
}


function refreshSelects(i) {
	// Incomplete
	var minDate = cal_min_date;
	var maxDate = cal_max_date;
	
	console.log(minDate);
	
	var year = $('selYear' + i).value;
	var month = $('selMonth' + i).value;
	var day = $('selDay' + i).value;
	
	var minDateSplit = minDate.split("/");
	var minYear = parseInt(minDateSplit[2], 10);	
	var minMonth = parseInt(minDateSplit[1], 10);	
	var minDay = parseInt(minDateSplit[0], 10);
	
	var maxDateSplit = maxDate.split("/");
	var maxYear = parseInt(maxDateSplit[2], 10);	
	var maxMonth = parseInt(maxDateSplit[1], 10);	
	var maxDay = parseInt(maxDateSplit[0], 10);

	if(month == minMonth && year == minYear) {
		for(a=minDay;a<=31;a++){
			$('selDay' + i).options[a]=new Option(a + 5);
			$('selDay' + i).options[a].value=a;
		}
	}
}

  //Example of initialising upto 4 calendar pickers
//YAHOO.util.Event.addListener(window, "load", function(){init(calendar number(int), "container id(str)", "launch btn id(str)", "title(str)", day(int),month(int),year(int))}, false);
//YAHOO.util.Event.addListener(window, "load", function(){init(1, "cal1Container", "clicklaunch1", "pick arrival date")}, false);
//YAHOO.util.Event.addListener(window, "load", function(){init(2, "cal2Container", "clicklaunch2", "pick departure date", "2007-12-31")}, false);
//YAHOO.util.Event.addListener(window, "load", function(){init(3, "cal3Container", "clicklaunch3", "pick departure date", "2008-12-31")}, false);
//YAHOO.util.Event.addListener(window, "load", function(){init(4, "cal4Container", "clicklaunch4", "pick depart date", "2009-12-31")}, false);