var calendars = new Array('check-in', 'check-out');
var calendarVisible = new Array();

if (!Array.prototype.forEach)
{
	Array.prototype.forEach = function(fun /*, thisp*/)
	{
		var len = this.length >>> 0;
		if (typeof fun != "function")
		throw new TypeError();

		var thisp = arguments[1];
		for (var i = 0; i < len; i++)
		{
			if (i in this)
				fun.call(thisp, this[i], i, this);
		}
	};
}

function bodyOnClick(e)
{
	var p = $(e.target).parents();

	var clickOutside = true;
	if($(e.target).parents('table.ui-datepicker-calendar').length > 0 || $(e.target).parents('div.ui-datepicker-header').length > 0) {
		clickOutside = false;
		return;
	} else {
		var p = $(e.target).parents();
	}

	calendars.forEach(function(element, index, array) {
		if($(e.target).parents("#" + element + "-calendar").length > 0) {
			clickOutside = false;
			return;
		}

		if(e.target.id == element + "-calendar-icon") {
			clickOutside = false;
			return;
		}
	});

	if(!clickOutside) {
		return;
	}

	calendars.forEach(function(element, index, array) {
		hideCalendar(element);
	});
}

function showCalendar(element)
{
	if(calendarVisible[element]) {
		return;
	}

	$("#" + element + "-calendar").slideDown();
	calendarVisible[element] = true;
}

function hideCalendar(element)
{
	if(!calendarVisible[element]) {
		return;
	}

	$("#" + element + "-calendar").slideUp();
	calendarVisible[element] = false;
}

function toggleCalendar(element)
{
	if(calendarVisible[element]) {
		hideCalendar(element);
	} else {
		showCalendar(element);
	}
}

function datePicked(element, date)
{
	var re = /(\d\d)\/(\d\d)\/(\d\d\d\d)/;
	if(!(m = date.match(re))) {
		return;
	}
	
	var day = m[2];
	var month = m[1];
	var year = m[3];

	var option_date = year + "-" + month + "-" + day;
	var selectElement = $("#checkInDate")[0];

	for(var i = 0; i < selectElement.options.length; i++) {
		if(selectElement.options[i].value == option_date) {
			selectElement.options[i].selected = true;
			break;
		}
	}

	hideCalendar(element);
}
	var enableControls = function() {
		var checkInDate = $("#checkInDate")[0]
		$(checkInDate).removeAttr("disabled");
		var nbNight = $("select[name=nbNight]")[0];
		$(nbNight).removeAttr("disabled");
		$("#city").removeAttr("disabled");
		$("input[type=submit], input[type=image]").removeAttr("disabled");
	}

$(document).ready(function() {
	calendars.forEach(function(element, index, array) {
		if($('#' + element + '-calendar').length == 0) {
			return;
		}

		var e = $('#' + element + '-calendar');

		calendarVisible[element] = false;

		var e = $("input#minDate");

		var minElem = $("input#minDate").val().split('-');
		var maxElem = $("input#maxDate").val().split('-');
		var minDate = new Date(minElem[0], minElem[1] - 1, minElem[2]);
		var maxDate = new Date(maxElem[0], maxElem[1] - 1, maxElem[2]);

		$("#" + element + "-calendar").datepicker({
			onSelect: function(date) { datePicked(element, date) },
			minDate: minDate,
			maxDate: maxDate
		});

		$("#check-in-calendar").css('z-index', '1000');

		$("#" + element + "-calendar-icon").bind("click", function() {
			toggleCalendar(element);
		});

		$(document).bind("click", bodyOnClick);
	});

	$("#checkInDate, select[name=nbNight]").removeAttr("disabled");

	$("#searchbox_homepage form, #searchbox form").bind("submit", function(e) {
		
		//if (0) {
		var city  = $($(this).find("#city"));
		
		var country = $($(this).find("#country")[0]);
		if (!city .val()) {
			city.pulse({
				backgroundColors: ['red', 'white'],
				speed: 250,
				runLength: 2
			});
			//alert('PHIL IS ANGERED');
			return false;
		//}
		}

		var checkInDate = $(this).find("#checkInDate")[0];
		if (0 === checkInDate.selectedIndex)
			$(checkInDate).attr("disabled", "disabled");

		var nbNight = $(this).find("select[name=nbNight]")[0];
		if (0 === nbNight.selectedIndex)
			$(nbNight).attr("disabled", "disabled");

		var city = $($(this).find("#city")[0]);
		if ('' === city.val())
			city.attr("disabled", "disabled");

		var select = $(this).find("input[type=select], input[type=image]").attr("disabled", "disabled");

		window.setTimeout(enableControls, 10);
		return true;
	});

	$("#country").change(function() {
		disableCityField();
	});

	$("#country").keyup(function() {
		disableCityField();
	});

//	disableCityField();

	$("#city").bind("click", function(e) {
		if (!$(this).hasClass("readonly")) return;
		this.blur();
		$("#country").pulse({
			backgroundColors: ['red', 'white'],
			speed: 250,
			runLength: 2
		});
		//alert('PHIL IS REALLY ANGERED');
		return false;
	});
});

function disableCityField()
{
	var e = document.getElementById("country");
	if(e == null) {
		return;
	}

	if(e.options[e.selectedIndex].value.length == 0) {
		$("#city").attr("value", '').attr("readonly", "readonly").addClass("readonly");
	} else {
		$("#city").removeAttr("readonly").removeClass("readonly");
	}
}
