
var DateSelect = new Class({
	
	intervalStart: 0,
	intervalEnd: 0,
	
	initialize: function(intervalStart, intervalEnd)
	{
		this.intervalStart = intervalStart;
		this.intervalEnd = intervalEnd;
		this.intervalStart.setHours(0,0,0);
		this.intervalEnd.setHours(23,59,59);
	},
	
	getDayOptions: function(month, year, selectedDay)
	{
		var options = [];
		var dt = new Date(this.intervalStart.valueOf());
		dt.setFullYear(year, month-1, 1);
		dt.setHours(0,0,0);
		var numberOfDays = this.daysInMonth(month, year);
		for (var i=1; i<numberOfDays+1; i++) {
			dt.setDate(i);
			if (dt < this.intervalStart || dt > this.intervalEnd) continue;
			var option = new Element('option', {value:i, text:i});
		    if (i == selectedDay) option.selected = 'selected';
		    options.include(option);
		}
		return options;
	},
	
	getMonthOptions: function(selectedMonth, selectedYear)
	{
	    var options = [];
	    var monthNames = ['Jan','Feb','Mar','Apr','Maj','Jun','Jul','Aug','Sep','Okt','Nov','Dec'];
		var dtStart = new Date(this.intervalStart.valueOf());
		var dtEnd = new Date(this.intervalEnd.valueOf());
		dtStart.setHours(0,0,0);
		dtEnd.setHours(0,0,0);
		dtStart.setDate(1);
		dtEnd.setDate(1);
		var dt = new Date(dtStart.valueOf());
		var month = dt.getMonth()+1;
		var year = dt.getFullYear();
		while (1) {
	    	if (month > 12) {
	    		month = 1;
	    		year++;
	    		dt.setFullYear(year, month-1, 1);
	    	} else {
	    		dt.setMonth(month-1);
	    	}
	    	var option = new Element('option', {value:((month < 10 ? '0' : '')+month+''+year), text:(monthNames[month-1])+' '+year});
	    	if (month == selectedMonth && year == selectedYear) option.selected = 'selected';
	    	options.include(option);
	    	month++;
	    	if (dt < dtStart || dt >= dtEnd) break;
	    }
	    return options;
	},
	
	daysInMonth: function(month, year)
	{
		if (!month) month = new Date().getMonth()+1;
		if (!year) year = new Date().getFullYear();
		if (this.isLeapYear(year.toInt()) && month === 2) return 29;
		return [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month-1];
	},

	isLeapYear: function(yr)
	{
		return new Date(yr,1,29).getDate() == 29;
	},
	
	getSelectionValue: function(select)
	{
		if (select && select.selectedIndex >= 0) {
			return select.options[select.selectedIndex].value;
		} else {
			return '';
		}
	},
	
	getSelectionValueAsYearMonth: function(select)
	{
		var value = this.getSelectionValue(select);
		if (value.length != 6) return value;
		return {'month':value.substring(0,2), 'year':value.substring(2,6)};
	}
});