// +----------------------------------------------------------------------+
// | networking AG, base framework                                        |
// +----------------------------------------------------------------------+


function initCalendarControl(namespace, language, dateFormat)
{
	var calendarNamespace = YAHOO.namespace(namespace);

	calendarNamespace.language = language;
	calendarNamespace.dateFormat = dateFormat;
	calendarNamespace.calendarContainer = namespace + '_calendarDiv';
	calendarNamespace.calendarSelect = namespace + '_calendarSelect';
	calendarNamespace.inputElement = namespace;
	calendarNamespace.overCalendar = false;

	calendarNamespace.overCal = function() {
		calendarNamespace.overCalendar = true;
	}

	calendarNamespace.outCal = function() {
		calendarNamespace.overCalendar = false;
	}

	calendarNamespace.setupListeners = function() {
		YAHOO.util.Event.addListener(calendarNamespace.calendarContainer, 'mouseover', calendarNamespace.overCal);
		YAHOO.util.Event.addListener(calendarNamespace.calendarContainer, 'mouseout', calendarNamespace.outCal);
	}

	calendarNamespace.hideCal = function() {
		if (!calendarNamespace.overCalendar) {
			calendarNamespace.cal.hide();
		}
	}

	calendarNamespace.handleSelect = function(type,args,obj) {
		var dates = args[0];
		var date = dates[0];
		var year = date[0], month = date[1], day = date[2];

		calDate = new Date();
		calDate.setFullYear(year,month-1,day);

		document.getElementById(calendarNamespace.inputElement).value = calDate.dateFormat(calendarNamespace.dateFormat);
		obj.hide();
	}

	calendarNamespace.initCalendar = function(){
		document.getElementById(calendarNamespace.inputElement).focus();

		if(document.getElementById(calendarNamespace.inputElement).value != ''){
			calendarNamespace.cal.cfg.setProperty("selected", document.getElementById(calendarNamespace.inputElement).value);

			var firstDate = calendarNamespace.cal.getSelectedDates()[0];
			calendarNamespace.cal.cfg.setProperty("pagedate", calendarNamespace.makeDate(firstDate));
			calendarNamespace.cal.render();
		}

		calendarNamespace.cal.show();
	}

	calendarNamespace.init = function() {

		calendarNamespace.cal = new YAHOO.widget.Calendar("cal", calendarNamespace.calendarContainer, {  close:true } );
		// initialize localisation
		initCalendarLocale(calendarNamespace);

		// register events
		// rendering calendar
		calendarNamespace.cal.renderEvent.subscribe(calendarNamespace.setupListeners, calendarNamespace.cal, true);

		// display/hide popup
		YAHOO.util.Event.addListener(calendarNamespace.inputElement, 'focus', calendarNamespace.initCalendar);
		YAHOO.util.Event.addListener(calendarNamespace.calendarSelect, 'click', calendarNamespace.initCalendar);
		YAHOO.util.Event.addListener(calendarNamespace.inputElement, 'blur', calendarNamespace.hideCal);

		// select date
		calendarNamespace.cal.selectEvent.subscribe(calendarNamespace.handleSelect, calendarNamespace.cal, true);

		// render popup
		calendarNamespace.cal.render();
		calendarNamespace.cal.hide();
	}

	// initialize form element
	YAHOO.util.Event.addListener(window, "load", calendarNamespace.init);
}


function initCalendarLocale(calendarNamespace)
{
		switch(calendarNamespace.dateFormat){
			case 'd.m.Y':
				// set date format for swiss-german
				calendarNamespace.cal.cfg.setProperty("DATE_FIELD_DELIMITER", ".");
				calendarNamespace.cal.cfg.setProperty("MDY_DAY_POSITION", 1);
				calendarNamespace.cal.cfg.setProperty("MDY_MONTH_POSITION", 2);
				calendarNamespace.cal.cfg.setProperty("MDY_YEAR_POSITION", 3);
				calendarNamespace.cal.cfg.setProperty("MD_DAY_POSITION", 1);
				calendarNamespace.cal.cfg.setProperty("MD_MONTH_POSITION", 2);

				// function to set date in control
				calendarNamespace.makeDate = function(date)
				{
					return date.getMonth()+1 + "." + date.getFullYear();
				}

				break;

			default:
				// default american format is m/d/Y
				calendarNamespace.dateFormat = 'm/d/Y';

				// function to set date in control
				calendarNamespace.makeDate = function(date)
				{
					return date.getMonth()+1 + "/" + date.getFullYear();
				}
		}

		switch(calendarNamespace.language)
		{
			case 'de':
				// set date format for swiss-german
				calendarNamespace.cal.cfg.setProperty("DATE_FIELD_DELIMITER", ".");
				calendarNamespace.cal.cfg.setProperty("MDY_DAY_POSITION", 1);
				calendarNamespace.cal.cfg.setProperty("MDY_MONTH_POSITION", 2);
				calendarNamespace.cal.cfg.setProperty("MDY_YEAR_POSITION", 3);
				calendarNamespace.cal.cfg.setProperty("MD_DAY_POSITION", 1);
				calendarNamespace.cal.cfg.setProperty("MD_MONTH_POSITION", 2);

				// date labels for german locale
				calendarNamespace.cal.cfg.setProperty("MONTHS_LONG",    ["Januar", "Februar", "M\u00E4rz", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"]);
				calendarNamespace.cal.cfg.setProperty("MONTHS_SHORT",   ["Jan", "Feb", "M\u00E4r", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dez"]);
				calendarNamespace.cal.cfg.setProperty("WEEKDAYS_1CHAR", ["S", "M", "D", "M", "D", "F", "S"]);
				calendarNamespace.cal.cfg.setProperty("WEEKDAYS_SHORT", ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"]);
				calendarNamespace.cal.cfg.setProperty("WEEKDAYS_MEDIUM",["Son", "Mon", "Die", "Mit", "Don", "Fre", "Sam"]);
				calendarNamespace.cal.cfg.setProperty("WEEKDAYS_LONG",  ["Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"]);
				break;
            
            case 'fr':
                // set date format for french
                calendarNamespace.cal.cfg.setProperty("DATE_FIELD_DELIMITER", ".");
                calendarNamespace.cal.cfg.setProperty("MDY_DAY_POSITION", 1);
                calendarNamespace.cal.cfg.setProperty("MDY_MONTH_POSITION", 2);
                calendarNamespace.cal.cfg.setProperty("MDY_YEAR_POSITION", 3);
                calendarNamespace.cal.cfg.setProperty("MD_DAY_POSITION", 1);
                calendarNamespace.cal.cfg.setProperty("MD_MONTH_POSITION", 2);

                // date labels for french locale
                //calendarNamespace.cal.cfg.setProperty("MONTHS_LONG",    ["Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre"]);
                calendarNamespace.cal.cfg.setProperty("MONTHS_LONG",    ["Janvier", "F\u00E9vrier", "Mars", "Avril", "Mai", "Juin", "Juillet", "Ao\u00FBt", "Septembre", "Octobre", "Novembre", "D\u00E9cembre"]);
                calendarNamespace.cal.cfg.setProperty("MONTHS_SHORT",   ["Jan", "F\u00E9b", "Mar", "Avr", "Mai", "Jun", "Jul", "Ao\u00FB", "Sep", "Oct", "Nov", "D\u00E9c"]);
                calendarNamespace.cal.cfg.setProperty("WEEKDAYS_1CHAR", ["D", "L", "M", "M", "J", "V", "S"]);
                calendarNamespace.cal.cfg.setProperty("WEEKDAYS_SHORT", ["Di", "Lu", "Ma", "Me", "Je", "Ve", "Sa"]);
                calendarNamespace.cal.cfg.setProperty("WEEKDAYS_MEDIUM",["Dim", "Lun", "Mar", "Mer", "Jeu", "Ven", "Sam"]);
                calendarNamespace.cal.cfg.setProperty("WEEKDAYS_LONG",  ["Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi"]);
                break;

			default:
				// do nothing
		}

}
