/**
 * iFlight.pl - Results Search Form - InSee 2009
 * 
 * requires Prototype
 */
var debug = true;
var maxPax = 9;
var requiredElements = $A(['iflight_form', 'form_submit', 'starthour', 'fromdate', 'todate', 'flyboth', 'flyone', 'flydateb', 'stophour',
                           'peoplea', 'peopleb', 'peoplec', 'fromcity', 'tocity']);
var elements = new Hash();

Event.observe(window, 'load', function(event) {
	getElements();
	addSearchHelpers();
	toggleFlyDir();
	checkPaxNum();
	observeSubmit();
	addSortObservers();
});

function getElements() {
	var temp;
	requiredElements.each(function(element) {
		temp = $(element);
		try {
			if (temp) {
				elements.set(element, temp);
			} else if (debug) {
				throw 'Element \'' + element + '\' doesn\'t exist!';
			}
		} catch (e) {}
	});
}

function E(id) {
	return elements.get(id);
}

function addSearchHelpers() {
	[E('fromcity'), E('tocity')].each(function(element){
      addAutocompleter(element);
      addAirportPicker(element);
    });
    Calendar.add(E('fromdate'));
    try {
    	Calendar.add(E('todate'));
    } catch (err) {}
}

function toggleFlyDir() {
	Event.observe(E('flyone'), 'click', function(event) {
		hideElement(E('flydateb'));
		hideAndDisable(E('todate'));
		hideAndDisable(E('stophour'));
	});
	Event.observe(E('flyboth'), 'click', function(event) {
		showElement(E('flydateb'));
		showAndEnable(E('todate'));
		showAndEnable(E('stophour'));
	});
}

function checkPaxNum() {
	Event.observe($('peoplea'), 'change', isLessThanMaxPax);
	Event.observe($('peopleb'), 'change', isLessThanMaxPax);
	Event.observe($('peoplec'), 'change', isLessThanMaxPax);
}

function isLessThanMaxPax(event) {
	var sum = Number(E('peoplea').value)
		    + Number(E('peopleb').value)
		    + Number(E('peoplec').value);
	if (sum > maxPax) {
		alert('Maksymalna liczba pasażerów to 9');
		var element = Event.element(event);
		element.value = element.value - (sum-maxPax);
	}
}

function observeSubmit() {
	Event.observe(E('form_submit'), 'click', function(event) {
		E('iflight_form').submit();
		event.preventDefault();
	});
}

function addSortObservers()
{
	$$('.tblsumm a').each(addAjaxOnClickObserver);
	if ($('showAllSearchResults')) {
	   addAjaxOnClickObserver($('showAllSearchResults'));
    }
	changingElements();
}

function getSortType()
{
	var sortType = '_sortPrice';
    $$('input[name="flights_sorting"]').each(function(element){
		if(element.checked == true) {
			sortType = element.getValue();
		}
	});
	return sortType;
}

function ajaxSortFilterRequest(href)
{
	var flights_results_div = $('flights_results_div');
    
    var preload = '<div style="text-align: center;">';
    preload += '<h2>Trwa sortowanie wyników</h2>';
    preload += '<h2>Prosimy o cierpliwość</h2>';
    preload += '<img src="' + basePath + '/images/preloader.gif" style="margin-top: 15px;" />';
    preload += '</div>';
	
	new Ajax.Request(href, {
        parameters: {
            sorttype: getSortType()
        }, onCreate: function(obj) {
            flights_results_div.innerHTML = '';
            flights_results_div.innerHTML = preload;
        }, onSuccess: function(obj) {
            flights_results_div.innerHTML = obj.responseText;
            changingElements();
        }
    });
}

function addAjaxOnClickObserver(element)
{
	element.onclick = function()
	{
		var href = element.getAttribute('href');
		ajaxSortFilterRequest(href);
		return false;
	}
}

function addAjaxRadioObserver(element)
{
	element.up('label').onclick = function()
	{
		element.checked = true;
		var href = $('sort_url').getValue();
		ajaxSortFilterRequest(href);
        return false;
	}
}

function changingElements()
{
	$$('.pager a').each(addAjaxOnClickObserver);
	$$('.carrier a').each(addAjaxOnClickObserver);
	$$('input[name="flights_sorting"]').each(addAjaxRadioObserver);
}