/**
* Date picker
* @author a.weeber, Wisdom
* @date 03-2009
* @namespace YAHOO.widgets 
* @module datePicker
* @static
* @requires yahoo, dom, event,connection, calendar, animation (optional) from YUI Library 2.x
*/ 

YAHOO.namespace("widgets");
YAHOO.widgets.datePicker = (function() {
		
	/**
	* Yui shortcut variables 
	* @final 
	*/
	
	var Dom = YAHOO.util.Dom,
		Event = YAHOO.util.Event;
	
	/**
	* Module settings object 
	* @final 
	*/
	
	var settings = {
		calContainerClass		: "calContainer",
		calIdPrefix				: "cal_",
		dateInputIdPrefix		: "dateInput_",
		toggleCalClass			: "show",
		toggleCalLinkClass		: "active",
		disableWeekends			: false,
		showWeekHeader			: true,			
		allowDatesInPast		: true

	};
	
	/**
	* Initializes the module based on CSS context containers 
	* @method init
	* @static
	*/
	
	var init = function() {
		
		var calContainers = Dom.getElementsByClassName(settings.calContainerClass, "div");
		for(var i in calContainers) {
			if(calContainers.hasOwnProperty(i)) {
				initCalendar(calContainers[i]);
			}
		}

	};
	
	/**
	* Initializes a new YUI Calendar based on a given HTML container target 
	* @method initCalendar
	* @private
	* @param target {HTMLElement} HTML context element
	*/
	
	var initCalendar = function(target) {
		
			var yuiCal = new YAHOO.widget.Calendar(target); 
			yuiCal.cfg.setProperty("MONTHS_SHORT",   ["jan", "feb", "mrt", "apr", "mei", "jun", "jul", "aug", "sep", "okt", "nov", "dec"]);
			yuiCal.cfg.setProperty("MONTHS_LONG",    ["januari", "februari", "maart", "april", "mei", "juni", "juli", "augustus", "september", "oktober", "november", "december"]);
			yuiCal.cfg.setProperty("WEEKDAYS_1CHAR", ["Z", "M", "D", "W", "D", "F", "Z"]);
			yuiCal.cfg.setProperty("WEEKDAYS_SHORT", ["Zo", "Ma", "Di", "Wo", "Do", "Vr", "Za"]);
			yuiCal.cfg.setProperty("WEEKDAYS_MEDIUM",["zon", "maa", "din", "woe", "don", "vri", "zat"]);
			yuiCal.cfg.setProperty("WEEKDAYS_LONG",  ["zondag", "maandag", "dinsdag", "woensdag", "donderdag", "vrijdag", "zaterdag"]);
			
			if(!settings.allowDatesInPast) {
				yuiCal.cfg.setProperty("mindate",new Date());
			}

			if(settings.showWeekHeader) {
				yuiCal.cfg.setProperty("SHOW_WEEK_HEADER",true);
			}

			if(settings.disableWeekends) {
				yuiCal.addWeekdayRenderer(1, yuiCal.renderBodyCellRestricted);
				yuiCal.addWeekdayRenderer(7, yuiCal.renderBodyCellRestricted);
			}

			yuiCal.selectEvent.subscribe(setDate, yuiCal, true);
			yuiCal.render(); 

	};

	/**
	* Sets the selected calendar date in input form field (MM-DD-YYYY format) 
	* @method setDate
	* @private
	* @param type {String} type Calendar select event
	* @param args {Array} args Calendar date fields
	* @param obj {Object} calendar object
	*/

	var setDate = function(type,args,obj) {
		
		var dates = args[0];
		var date = dates[0];
		var sYear = date[0];
		var sMonth = date[1];
		var sDay = date[2];
	
		if(sDay.toString().length == 1) {
			sDay = "0" + sDay.toString();
		}
		
		if(sMonth.toString().length == 1) {
			sMonth = "0" + sMonth.toString();
		}

		var selectedDate = sDay + "-" + sMonth + "-" + sYear;
		
		
		
		var rawCalId = obj.containerId.split(settings.calIdPrefix)[1];
		var targetInput = Dom.get(settings.dateInputIdPrefix + rawCalId);

		if(targetInput) {
			targetInput.value = selectedDate;
		}
		
		// hide cal + reset toggle link
		Dom.removeClass(obj.containerId, settings.toggleCalClass);
		
		var datePickerObj = Dom.getElementsBy(function(el){return el.rel.indexOf(obj.containerId) != -1;}, "a")[0];
		if(datePickerObj) {
			Dom.removeClass(datePickerObj, settings.toggleCalLinkClass);
		}
	};

	/**
	* @return {Object} collection of public methods
	*/
	
	return {
		init:init
	};

})();

YAHOO.util.Event.onDOMReady(YAHOO.widgets.datePicker.init, YAHOO.widgets.datePicker, true);
