var MINUTE = 60 * 1000;
var HOUR = MINUTE * 60;
var DAY = HOUR * 24;

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() + 0 : 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;
	}
}

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;
		}
	}
}

function onDayChange(form, input) {
	if (input == 'abode[from_stamp]') {
		onNightChangeA(form, 'abode[nights]');
	} else {
		onNightChangeB(form, 'abode[nights]');
	}		
}

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);
}






function checkZoneSelection(form) {
	var zone = form['abode[rel_zone]'];
	url = z_url[zone.selectedIndex];
	if (url != '' && url != undefined) {
		window.location = url;
		return false;
	} return true;
}

function checkHotelSelection(form) {
	var zone = form['abode[rel_zone]'];
	var hotel = form['abode[rel_hotel]'];
	url = h_url[zone.selectedIndex][hotel.selectedIndex];
	if (url != '' && url != undefined) {
		window.location = url;
		return false;
	} return true;
}

function checkAvailabilityRequest(form) {
	var zone = form['abode[rel_zone]'];
	var hotel = form['abode[rel_hotel]'];
	if (checkZoneSelection(form)) {
		if (checkHotelSelection(form)) {
			if (zone.value != 0 || hotel.value > 0) {
				return true;
			}
		}
	} return false;
}