// This module handles a YUI calendar object for selecting a date then setting month & day
// drop lists from the calendar

/*
<div class=" yui-skin-sam" style="display: inline; cursor: pointer;"> 
	<img src="cal/cal.gif" width="16" height="16" border="0" alt="Click here to select the date" id="flightdate1" style="vertical-align: middle;"> 
	<div id="cal1Container"></div>
</div>
*/

YAHOO.namespace("res.calendar");

// Arrays required for call back to set the drop lists from calendar
var aDropNames = new Array();
var aDropSfx = new Array();

// idx: calendar index number
// ElName: element/drop list name
// sfx: element/drop list name suffix
// Container: container name
// ImageId: image id name
// LangId: language id (1-5) see SetCalLangFormat
function addDropCal (idx,ElName,sfx,Container,ImageId,LangId) {
	aDropNames[idx] = ElName;
	aDropSfx[idx] = sfx;
	YAHOO.res.calendar.init(idx,sfx,Container,ImageId,LangId);
}

YAHOO.res.calendar.init = function(idx,sfx,Container,ImageId,LangId) {

	function DateSelectHandler(type,args,obj) {
		var selected = args[0];
		var idx = obj.id.charAt(3)
		var name = aDropNames[idx];
		var f = document.forms[0];

		// Set the month selected in calendar
		f[aDropNames[idx] + 'MONTH' + aDropSfx[idx]].selectedIndex =  selected[0][1] - 1;
		// Set the max number days for selected month
		SetDayMax (aDropNames[idx],sfx);
		// Set the day selected in calendar
		f[aDropNames[idx] + 'DAY' + aDropSfx[idx]].selectedIndex = selected[0][2] - 1;
		// Hide the calendar
		obj.hide();
		// Fire onchange event for month
		fireEvent(aDropNames[idx] + 'MONTH' + aDropSfx[idx], "onchange");
		
	};

	var today = new Date();
	var calendar_options = {
		pages: 2,
		close: true,
		mindate: today,
		maxdate: (new Date(today.getFullYear() + 1, today.getMonth(), today.getDate()))
	};

	// Create a calendar object
	YAHOO.res.calendar.cal = new YAHOO.widget.Calendar("cal"+idx,Container, calendar_options );
	SetCalLangFormat (LangId,YAHOO.res.calendar.cal); 
	YAHOO.res.calendar.cal.render();
	
	// Register for event
	YAHOO.res.calendar.cal.selectEvent.subscribe(DateSelectHandler, YAHOO.res.calendar.cal, true);
	// Listener to show the calendar when the button is clicked
	YAHOO.util.Event.addListener(ImageId, "click", YAHOO.res.calendar.cal.show, YAHOO.res.calendar.cal, true);
}

// Setup for months & weekdays in variou languages
// 1 - English,2 - French,3 - Spanish,4 - German,5 - Italian
// Must be called before render
function SetCalLangFormat (id,obj) {
	var MonArray = new Array();
	var DayArray = new Array();

	if(id < 2) return;
	
  	MonArray[2]  = new Array("Janvier", "Fevrier", "Mars", "Avril", "Mai", "Juin", "Juillet", "Aout", "Septembre", "Octobre", "Novembre", "Decembre");
	DayArray[2] = new Array ("Di", "Lu", "Ma", "Me", "Je", "Ve", "Sa");
	MonArray[3]  = new Array("Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre");
	DayArray[3] = new Array ("Do", "Lu", "Ma", "Mi", "Ju", "Vi", "Sa");
	MonArray[4]  = new Array("Januar","Februar","Marz","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember");
	DayArray[4] = new Array ("So", "Mo", "Di", "Mi", "Do", "Fr", "Sa");
	MonArray[5]  = new Array("gennaio","febbraio","marzo","aprile","maggio","giugno","luglio","agosto","settembre","ottobre","novembre","dicembre");
	DayArray[5] = new Array ("do", "lu", "ma", "me", "gi", "ve", "sa");

	obj.cfg.setProperty("MONTHS_LONG",  MonArray[id]);	
	obj.cfg.setProperty("WEEKDAYS_SHORT", DayArray[id]);
	obj.cfg.setProperty("start_weekday", 1); // Set first day of the week to monday
	return;
}

function SetDayMax (name, sfx) {

	DayArray = new Array("31","28","31","30","31","30","31","31","30","31","30","31");

	var monthInteger, monthLen,dayInteger,today,yr,defday,object,curMonthInteger;
	var f = document.forms[0];
		
	monthInteger = eval("f." + name + "MONTH" + sfx + ".selectedIndex");  
	monthLen = eval("f." + name + "DAY" + sfx + ".length"); // Current # of entries
	defday = eval("f." + name + "DAY" + sfx + ".selectedIndex"); // current selected day

	today = new Date()
	yr = today.getFullYear()
	curMonthInteger = today.getMonth()
	if(monthInteger < curMonthInteger)
		yr++

	if(yr % 4 == 0) DayArray[1] = "29"; // Leap year

	popMonthNum(eval("f." + name + "DAY" + sfx),DayArray[monthInteger]-1,monthLen-1) 
	// Use previous day number, if invalid set to first day
	eval("f." + name + "DAY" + sfx).selectedIndex = defday
	if(eval("f." + name + "DAY" + sfx + ".selectedIndex") < 0)
		eval("f." + name + "DAY" + sfx).selectedIndex = 0
}

function popMonthNum(theList,newMaxItemNo,curMaxItemNo) {
// Assume all months have at least 28 days and that the list
// was created with 31 days
   var option28 = new Option("29", "29")
   var option29 = new Option("30", "30")
   var option30 = new Option("31", "31")

// Delete entries from 29 to current maximum
   for (var i=curMaxItemNo; i>=28; i--) {
       theList.options[i]=null;
   }
// Add entries from 28 to new maximum
   for (var i=28; i<=newMaxItemNo; i++) {
      eval("theList.options[i]=option" + i)
   }
}

// For compatability
function LoadMonthL(sfx) {
	SetDayMax ('PICKUP', sfx);
}

function fireEvent(element, eventName) {

	if(!document.getElementById(element))
		return;
		
	evt = document.getElementById(element)[eventName];
	if (typeof(evt) == "function") {
		document.getElementById(element)[eventName]();
	}
}
