
Htk.DateChooser = new Class
({
	Extends: Htk.Field
	,Tag: 'htk-date-chooser'

	,format: _('%a, %e %b %Y')
	,calendar: null
	,ignoreCalendarChange: false
	
	,initialize: function (props)
	{
		this.parent (props);
		this.createElement ('div');
		this.node.className = 'htk-date-chooser';
		
		this.label = document.createElement ('span');
		this.node.appendChild (this.label);

		this.setEditable (this._editable);
	}

	,putValue: function (value)
	{
		var dateString;

		if (value instanceof Date)
			dateString = Vn.Date.strftime (value, this.format);
		else
			dateString = '';

		Vn.Node.setText (this.label, dateString);
	}

	,setEditable: function (editable)
	{
		if (editable && !this.calendar)
		{
			Vn.Node.remove (this.label);

			this.button = document.createElement ('button');
			this.button.title = _('ChangeDate');
			this.button.addEventListener ('click', this.showCalendar.bind (this));
			this.button.appendChild (this.label);
			this.node.appendChild (this.button);
		
			this.calendar = new Htk.Calendar ();
			this.calendar.on ('changed', this.calendarChanged.bind (this));
			
			this.popup = new Htk.Popup ();
			this.popup.setChild (this.calendar);
		}
		else if (!editable)
		{
			Vn.Node.remove (this.label);
			this.node.appendChild (this.label);
			this.calendar = null;
			this.node.removeChild (this.button);
		}
	}

	,calendarChanged: function (calendar)
	{
		if (this.ignoreCalendarChange)
			return;
	
		this.popup.hide ();
		
		var newDate = calendar.value;
		this.putValue (newDate);
		this.valueChanged (newDate);
	}

	,showCalendar: function (event)
	{
		this.ignoreCalendarChange = true;
		this.calendar.value = this._value;
		this.calendar.goToSelectedMonth ();
		this.ignoreCalendarChange = false;

		this.popup.show (this.button);
	}
});

