if (typeof Podbop == 'undefined') Podbop = {};
if (typeof Podbop.Form == 'undefined') Podbop.Form = {};

Podbop.Form.DateSelect = function(yearFieldId, monthFieldId, dayFieldId) {
	var me = this;
	addEvent(window, 'onload', function() {
		me.setYearFieldId(yearFieldId);
		me.setMonthFieldId(monthFieldId);
		me.setDayFieldId(dayFieldId);
		me.changeYear();
		me.changeMonth();
		me.changeDay();
	});
};

Podbop.Form.DateSelect.DAYS_IN_MONTH = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
Podbop.Form.DateSelect.getNumberOfDays = function(year, month, day) {
	var numberOfDays = Podbop.Form.DateSelect.DAYS_IN_MONTH[month - 1];
	if (year % 4 == 0 && (year % 100 != 0 || (year % 100 == 0 && year % 400 == 0)) && month == 2) {
		numberOfDays += 1;
	}

	return numberOfDays;
};

Podbop.Form.DateSelect.prototype = {
	setYearFieldId: function(yearFieldId) {
		this.yearField = $(yearFieldId);

		var me = this;
		addEvent(this.yearField, 'onchange', function() { me.changeYear(); });
	},
	setMonthFieldId: function(monthFieldId) {
		this.monthField = $(monthFieldId);

		var me = this;
		addEvent(this.monthField, 'onchange', function() { me.changeMonth(); });
	},
	setDayFieldId: function(dayFieldId) {
		this.dayField = $(dayFieldId);

		var me = this;
		addEvent(this.dayField, 'onchange', function() { me.changeDay(); });
	},
	getYear: function() {
		return this.yearField.options[this.yearField.selectedIndex].value;
	},
	getMonth: function() {
		return this.monthField.options[this.monthField.selectedIndex].value;
	},
	getDay: function() {
		return this.dayField.options[this.dayField.selectedIndex].value;
	},
	changeYear: function() {
		this.setNumberOfDays(Podbop.Form.DateSelect.getNumberOfDays(this.getYear(), this.getMonth(), this.getDay()));
	},
	changeMonth: function() {
		this.setNumberOfDays(Podbop.Form.DateSelect.getNumberOfDays(this.getYear(), this.getMonth(), this.getDay()));
	},
	changeDay: function() {
	},
	getNumberOfDays: function() {
	},
	setNumberOfDays: function(numberOfDays) {
		var currentNumberOfDays = this.dayField.options.length;

		var delta = numberOfDays - currentNumberOfDays;
		if (delta == 0) return;

		for (var i = 0; i < Math.abs(delta); i++) {
			if (delta < 0) {
				this.dayField.remove(currentNumberOfDays - i - 1);
			}
			else if (delta > 0) {
				var day = currentNumberOfDays + i + 1;

				var option = document.createElement('option');
				option.setAttribute('value', day);
				option.appendChild(document.createTextNode(day));
				this.dayField.appendChild(option);
			}
		}
	}
};
