﻿JueKit.Type.registerNamespace("FA.UI");

FA.UI.DatePicker = JueKit.Type.createClass("FA.UI.DatePicker", JueKit.CustomEventControl, 
{
	el : null,
	cssCls : "faCalendar",
	
	ctor : function(objData)
	{
		var el = JueKit.Dom.createEl("div", {className:this.cssCls});
		this._calendar = new JueKit.UI.Calendar({container:el});
		this._calendar.set_minDate(JueKit.DateTime.today());
		el.style.display = "none";
		this._elCalendarW = el;
		document.body.appendChild(el);
		
		this.bindToEl(objData.el);
		this._calendar.addHandler("click", this.__calendar_change, this);
	},
	
	bindToEl : function(el)
	{
		this.el = JueKit(el);
		this.el.readOnly = true;
		
		JueKit.Event.addHandler(document.body, "mousedown", this.__hBody_mousedown, this);
		JueKit.Event.addHandler(el, "focus", this.__hEl_focus, this);
	},
	
	__hBody_mousedown : function(evt)
	{
		var el = JueKit.Event.srcEl(evt);
		
		while(el)
		{
			if(el == this._elCalendarW)
			{
				return;
			}
			el = el.parentNode;
		}
		
		this.hideCalendar();
	},
	
	__hEl_focus : function(evt)
	{
		this.showCalendar();
	},
	
	hideCalendar : function()
	{
		if(!this._visible)
		{
			return;
		}
		JueKit.Dom.hide(this._elCalendarW);
		this._visible = false;
		FA.UI.DatePicker._curDatePicker = null;
	},
	
	set_defaultDay : function(value)
	{
		this._defaultDay = value;
	},
	
	showCalendar : function()
	{
	
		var rect = JueKit.Dom.getRect(this.el);
		this._elCalendarW.style.top = (rect.top + rect.height) + "px";
		this._elCalendarW.style.left = rect.left + "px";
		JueKit.Dom.show(this._elCalendarW);
		this._visible = true;

		var dt = JueKit.DateTime.parse(this.el.value);
		if(!dt)
		{
			dt = this._defaultDay;
			if(!dt)
			{
				dt = JueKit.DateTime.today();
			}
		}

		this._calendar.set_currentDate(dt);
		this._calendar.setCalendar(dt.get_value().getFullYear(), dt.get_value().getMonth());
		this._calendar.__refreshCalendar();

		var dp = FA.UI.DatePicker._curDatePicker;
		dp && dp.hideCalendar();
		FA.UI.DatePicker._curDatePicker = this;
	},
	
	__calendar_change : function()
	{
		var dt = this._calendar.get_currentDate();
		if(dt)
		{
			this.el.value = JueKit.DateTime.format(dt, "MM/dd/yyyy");
			this.hideCalendar();
		}
		else
		{
			this.el.value = "";
		}
		this.fireEvent("change");
	}
});