document.observe('dom:loaded', function(){ loadSearchForm('form'); });

function loadSearchForm(form_type){
	var id='';
	switch(true){
		case !!$('search'):
			id='search';
			break;
		case !!$('search_small'):
			id='search_small';
			form_type='form_small';
			break;
	}

	if(id!='')
		new Ajax.Updater(id, application_root + 'xhr/search/'+form_type, {
				method: 'post',
				onComplete: bindSearchElements
			});
}

function bindSearchElements(){
	switch(true){
		case !!$('searchFormAll'):
			bindSearchAllElements();
			break;
		case !!$('searchFormTrips'):
			bindSearchTripsElements();
			break;
		case !!$('searchFormHotels'):
			bindSearchHotelsElements();
			break;
		case !!$('searchFormSmall'):
			bindSearchSmallElements();
			break;
	}
}

function bindSearchAllElements(){
	bindLegendAnchors();
	bindOrderDir()
	// zmena statu
	$('searchState').observe('change', loadDestinationOptions);
	// zmena dopravy
	$('searchService').observe('change', loadFromCitiesOptions);

	// nastavit disabled subselectum, ve kterych se neda vybirat
	checkSubselect('searchState', 'searchDestination');
	checkSubselect('searchService', 'searchFromCity');

	// kalendare
	bindSearchCalendars();
}

function bindSearchTripsElements(){
	bindLegendAnchors();
	bindOrderDir()
	// zmena statu
	$('searchState').observe('change', loadDestinationOptions);
	// zmena dopravy
	$('searchService').observe('change', loadFromCitiesOptions);

	// nastavit disabled subselectum, ve kterych se neda vybirat
	checkSubselect('searchState', 'searchDestination');
	checkSubselect('searchService', 'searchFromCity');

	// kalendare
	bindSearchCalendars();
}

function bindSearchHotelsElements(){
	bindLegendAnchors();
	bindOrderDir()
	// zmena statu
	$('searchState').observe('change', loadDestinationOptions);
	// zmena destinace
	$('searchDestination').observe('change', loadCityOptions);

	// nastavit disabled subselectum, ve kterych se neda vybirat
	checkSubselect('searchState', 'searchDestination');
	checkSubselect('searchDestination', 'searchCity');

	// kalendare
	bindSearchCalendars();
}

function bindSearchSmallElements(){
	// zmena statu
	$('searchState').observe('change', loadDestinationOptions);
	// zmena typu vyhledavani
	$('searchFormType').observe('change', function(){
			$('searchFormSmall').action = application_root + this.value;
		});

	// nastavit disabled subselectum, ve kterych se neda vybirat
	checkSubselect('searchState', 'searchDestination');

	// kalendare
	bindSearchCalendars();
}

function bindLegendAnchors(){
	$$('#search legend a').each(function(el){
			el.observe('click', function(ev){
					ev.stop();
					loadSearchForm(this.href.substr(this.href.lastIndexOf('#')+1));
				});
		}, this);
}

function bindOrderDir(){
	// sipky pro smer razeni
	$('searchOrderUp').observe('click', setOrderAsc);
	$('searchOrderDown').observe('click', setOrderDesc);
	// zmena razeni
	$('searchOrderField').observe('change', setOrderAsc);
}
function setOrderAsc(){
	setOrderDir(true);
}

function setOrderDesc(){
	setOrderDir(false);
}

function setOrderDir(asc){
	// obrazky sipek
	var el = $('searchOrderUp');
	var src_begin = el.src.substring(0,el.src.lastIndexOf('_')+1);
	var src_end = el.src.substr(el.src.lastIndexOf('.'));
	el.src = src_begin+( asc ? 'pushed' : 'released' )+src_end;
	el = $('searchOrderDown');
	src_begin = el.src.substring(0,el.src.lastIndexOf('_')+1);
	src_end = el.src.substr(el.src.lastIndexOf('.'));
	el.src = src_begin+( asc ? 'released' : 'pushed' )+src_end;
	// ulozit hodnotu
	$('searchOrderDir').value = asc ? 'asc' : 'desc';
}

function loadDestinationOptions(){
	loadOptions(this.id, 'searchDestination', 'destination_options');
	if($('searchCity')){
		$('searchDestination').loadCityOptions = loadCityOptions;
		$('searchDestination').loadCityOptions();
		checkSubselect('searchDestination', 'searchCity');
	}
}
function loadCityOptions(){
	loadOptions(this.id, 'searchCity', 'city_options');
}

function loadFromCitiesOptions(){
	loadOptions(this.id, 'searchFromCity', 'from_city_options');
}

function loadOptions(srcId, dstId, target) {
	var val = $F(srcId);

	new Ajax.Updater(dstId, application_root + 'xhr/search/'+target+'/'+val, {
			method: 'post',
			onComplete: function(){ checkSubselect(srcId, dstId); }
		});
}

function checkSubselect(srcId, dstId){
	$(dstId).disabled = $F(srcId)==0 ? 'disabled' : '';
}

var searchDatumTo, searchDatumFrom;

function bindSearchCalendars(){
	searchDatumFrom = new calendar('searchDatumFrom', 1, true);
	searchDatumTo = new calendar('searchDatumTo', 1, true);
	hideCalendars();

	$('searchDatumFromCalIcon').observe('click', toogleCalendar);
	$('searchDatumToCalIcon').observe('click', toogleCalendar);
	// schovani kalendare pri kliku kamkoli
	$$('body')[0].observe('click',hideCalendars);
	// pri kliku na kalendar neschovavat
	$('searchDatumFromCal').observe('click', function(ev){ ev.stop(); });
	$('searchDatumToCal').observe('click', function(ev){ ev.stop(); });
}

function toogleCalendar(ev){
	ev.stop();

	var cal_id = this.id.substring(0,this.id.length-4);
	var field_id = cal_id.substring(0,cal_id.length-3);

	if($(cal_id).style.display=='none'){
		// schovat vsechny kalendare
		hideCalendars();
		// obnovit
		update_calendar(field_id);
		// zobrazit
		$(cal_id).style.display='block';
	}
	else hideCalendars();
}

function hideCalendars(){
	$('searchDatumFromCal').style.display = 'none';
	$('searchDatumToCal').style.display = 'none';
}
