<!-- Recopilado y modificado por Henry Ferreto, para el sitio web Cabinas el Quetzal -->

	var MINUTE = 60 * 1000;
	var HOUR = MINUTE * 60;
	var DAY = HOUR * 24;

<!-- Actualiza los días-->
	function updateDays(form, input) {
		var day = form[input + '[day]'];
		var month = form[input + '[year_month]'].value.substr(4, 2) - 1;
		var year = form[input + '[year_month]'].value.substr(0, 4);
		/* 28 a 31 días */
		var td = new Date();
		var from = (month == td.getMonth() && year == td.getFullYear()) ? td.getDate() + 1 : 1;
		var value = 31; do {
			var date = new Date(year, month, value--);
		} while (month < date.getMonth());
		/* Actualiza el selector */
		var selectedValue = day.value;
		while (day.options.length) day.options[0] = null;
		for (i = from; i < value + 2; i++) {
			option = new Option(((i > 9) ? i : '0' + i), i, false, false);
			day.options[j = day.length] = option;
			if (i == selectedValue) day.selectedIndex = j;
		}
	}
<!-- Actualiza la fecha-->
	function updateDate(form, input, date) {
		var month = date.getMonth() > 8 ? String(date.getMonth() + 1) : '0' + String(date.getMonth() + 1);
		var selectedValue = String(date.getFullYear()) + month;
		var year_month = form[input + '[year_month]'];
		for (i = 0; i < year_month.length; i++) {
			if (year_month.options[i].value == selectedValue) {
				year_month.options[i].selected = true;
				break;
			}
		} updateDays(form, input);
		var day = form[input + '[day]'];
		for (var i = 0; i < day.length; i++) {
			if (day.options[i].value == date.getDate()) {
				day.options[i].selected = true;
				break;
			}
		}
	}

<!-- Cambia los días dependiendo de lo seleccionado en la fecha de inicio-->
	function onDayChange(form, input) {
		if (input == 'abode[from_stamp]') {
			onNightChangeA(form, 'abode[nights]');
		} else {
			onNightChangeB(form, 'abode[nights]');
		}		
	}

<!-- Cambia de mes dependiendo de lo seleccionado en la fecha de inicio-->
	function onMonthChange(form, input) {
		updateDays(form, input);
		if (input == 'abode[from_stamp]') {
			onNightChangeA(form, 'abode[nights]');
		} else {
			onNightChangeB(form, 'abode[nights]');
		}
	}

	function onNightChangeA(form, input) {
		if (form[input].value < 1) form[input].value = 1;
		if (form[input].value > 31) form[input].value = 31;
		var day = Number(form['abode[from_stamp][day]'].value) + Number(form[input].value);
		var year_month = form['abode[from_stamp][year_month]'];
		var month = year_month.value.substr(4, 2) - 1;
		var year = year_month.value.substr(0, 4);
		var to = new Date(year, month, day);
		updateDate(form, 'abode[to_stamp]', to);
	}
	
	function onNightChangeB(form, input) {
		var from = new Date(form['abode[from_stamp][year_month]'].value.substr(0, 4), form['abode[from_stamp][year_month]'].value.substr(4, 2) - 1, form['abode[from_stamp][day]'].value);
		var to = new Date(form['abode[to_stamp][year_month]'].value.substr(0, 4), form['abode[to_stamp][year_month]'].value.substr(4, 2) - 1, form['abode[to_stamp][day]'].value);
		var nights = Math.round((to - from) / DAY);
		if (nights < 1) nights = 1; if (nights > 31) nights = 31;
		form[input].value = nights;
		onNightChangeA(form, input);
	}
