
/**
 * Updates all Maxviva IBE date fields of the given datepicker.
 * The Maxviva IBE cannot use the dateformat used by the datepicker directly.
 * Instead it requires two fields per data: one for the day, and one for the month and year.
 */
function searchBoxTopUpdateDateFields(input, date) {
	var dateFieldsContainer = $(input).closest('.departureDate, .returnDate');
	dateFieldsContainer.find('input[type="hidden"][name="departureDay"], input[type="hidden"][name="returnDay"]').val($.datepicker.formatDate('dd', date));
	dateFieldsContainer.find('input[type="hidden"][name="departureMonthYear"], input[type="hidden"][name="returnMonthYear"]').val($.datepicker.formatDate('mm-yy', date));
};

/**
 * Event handler that add custom CSS classes to a datepicker instance. 
 * Used to add distinguishing style when a searchBoxTop datepicker is shown.
 */
function searchBoxTopBeforeShowDatepicker(input, datepicker) {
	$(datepicker.dpDiv).addClass('searchBoxTop').addClass('searchBoxTopDatepicker');
};

/**
 * Event handler that evaluates a new date selected in a datepicker.
 * Coordinates the dates in the two searchBoxTop datepickers.
 * Also calls searchBoxTopUpdateDateFields as needed.
 */
function searchBoxTopDateSelected(date, datepicker) {
	searchBoxTopUpdateDateFields($(this), $(this).datepicker('getDate'));
	
	// if the departure time changed, adjust minDate for the return date picker
	if ($(this).closest('.departureDate, .returnDate').is('.departureDate')) {
		var returnDatePicker = $(this).closest('.searchBoxTop').find('.returnDate .cal');
		returnDatePicker.datepicker('option', 'minDate', $(this).datepicker('getDate'));
		searchBoxTopUpdateDateFields(returnDatePicker, returnDatePicker.datepicker('getDate'));
	}
};

/**
 * 
 */
function searchBoxTopAddDatepicker(calendarField) {

	$(calendarField).datepicker({
			beforeShow: searchBoxTopBeforeShowDatepicker,
			onSelect: searchBoxTopDateSelected,
			minDate: '+0d',
			maxDate: '+11m',
			dateFormat: 'dd.mm.yy',
			firstDay: 1,
			dayNames: [ 'Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag' ],
			dayNamesShort: [ 'So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa' ],
			dayNamesMin: [ 'So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa' ],
			monthNames: ['Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'],
			monthNamesShort: ['Jan', 'Feb', 'Mär', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez'],
			numberOfMonths: [1, 1],
			nextText: '',
			prevText: '',
			showOn: 'focus',
			showAnim: 'slideDown'
	});
};

/**
 * 
 */
function searchBoxTopAddAutoCompleter(airportField) {
	$(airportField).autocomplete(
			getContextPath() + '/airport-data.js',
			{
				extraParams: { type: 'array' },
				minChars: 3,
				delay: 100,
				cacheLength: 1,
				selectFirst: true,
				max: 12,
				scroll: false,
				resultsClass: 'searchBoxTop ac_results',
				width: 200
			}
	);
};

/**
 * 
 */
jQuery(document).ready(function($) {
	$( '.searchBoxTop input.cal' ).each( function() {
		searchBoxTopAddDatepicker(this);
	});
	$( '.searchBoxTop .origin input, .searchBoxTop .destination input' ).each( function() {
		searchBoxTopAddAutoCompleter(this);
	});
});
