var countriesHash = new Hash();

function addAirportPicker(element) {
    //preloading
    var image = new Image();
    image.src = basePath + '/images/loading.gif';
    image.src = basePath + '/images/calendar_bg.gif'
    
    var airportDiv = document.createElement('div');
    airportDiv.id = element.name + '_airport_picker_div';
    airportDiv.className = 'airport_picker_div';
    element.up('label').insert({after: airportDiv});
    setPickerPosition(element);
//    $(element.name + '_airport_picker_div').hide();
    new Event.observe($(element.name + '_search_icon'), 'click', function(event) {
//        $$('div[id^="_airport_picker_div"]').each(function(elem) {
//            if (element != elem) {
//                elem.hide(); 
//            } 
//        });
//        $$('div[id^="_calendar_div"]').each(function(elem) {
//           if (element != elem) {
//              elem.hide(); 
//           } 
//        });
        setPickerPosition(element);
        element.activate();
        $(element.name + '_airport_picker_div').toggle();
        if (countriesHash.size() == 0) {
            getCountries(element);
        } else {
            if ($(element.name + '_airport_picker_div').style.display != 'none') {
                $(element.name + '_airport_picker_div').innerHTML = fillAirportPicker(element);
            }
        }
    });
}

function setPickerPosition(element) {
    var airportDiv = $(element.name + '_airport_picker_div');
    if (!airportDiv) {
        addAirportPicker(element);
        return;
    }
    if (!Prototype.Browser.IE) {
        var posX = element.offsetLeft;
        var posY = Number(element.offsetTop + element.offsetHeight + 2);
        airportDiv.style.top = posY + 'px';
        airportDiv.style.left = posX + 'px';
    }
    airportDiv.style.position = 'absolute';
    airportDiv.style.display = 'none';  
}

function fillAirportPicker(element) {
    var xhtml = '';
    xhtml = '<h5>Wybierz miasto (lotnisko) <img id="' + element.name + '_airport_picker_close_image" src="' + basePath + '/images/zamknij.gif" alt="Zamknij" title="Zamknij" /></h5>';
    xhtml += '<span id="' + element.name + '_airport_picker_select" class="airport_picker_select"><label for="' + element.name + '_airport_picker_country"><select id="' + element.name + '_airport_picker_country" class="text" name="' + element.name + '_airport_picker_country">';
    xhtml += countriesSelect();
    xhtml += '</select></label></span>';
    xhtml += '<ul id="' + element.name + '_airport_picker_choices"><li><img id="ladowanie_gif" src="' + basePath + '/images/loading.gif" alt="Ładowanie" title="Ładowanie" /></li></ul>';
    xhtml += '<span id="' + element.name + '_airport_picker_close_span" class="airport_picker_close_span">zamknij</span>';
    getAirports('PL', element);
    return xhtml;
}
//zwraca tagi <option>
function countriesSelect() {
    var xhtml = '';
    countriesHash.each(function(pair) {
        if (pair.key == 'PL') {
            xhtml += '<option label="' + pair.value + '" value="' + pair.key + '" selected="selected">' + pair.value + '</option>' + "\n";
        } else {
            xhtml += '<option label="' + pair.value + '" value="' + pair.key + '">' + pair.value + '</option>' + "\n";
        }
    });
    return xhtml;
}

function getCountries(element) {
    new Ajax.Request(basePath+'/ajax/getcountries', {
                parameters: {
                    format: 'json'
                }, onSuccess: function (obj) {
                    if (obj.responseJSON.countries != null) {
                        countriesHash = new Hash(obj.responseJSON.countries);
                        if (element != null) {
                            $(element.name + '_airport_picker_div').innerHTML = fillAirportPicker(element);
                        }
                    }
                },
                onLoading: function(obj) {
                    var xhtml = '';
                    xhtml = '<h5>Wybierz miasto (lotnisko) <img id="' + element.name + '_airport_picker_close_image" src="' + basePath + '/images/zamknij.gif" alt="Zamknij" title="Zamknij" /></h5>';
                    xhtml += '<ul><li class="bg_none"><img id="ladowanie_gif" src="' + basePath + '/images/loading.gif" alt="Ładowanie" title="Ładowanie" /></li></ul>';
                    xhtml += '<span id="' + element.name + '_airport_picker_close_span" class="airport_picker_close_span">zamknij</span>';
                    $(element.name + '_airport_picker_div').innerHTML = xhtml;
                    addAirportPickerWindowObservers(element);
                }
            });
}

function getAirports(country, element) {
    new Ajax.Request(basePath+'/ajax/getairportsfromcountry', {
                parameters: {
                    format: 'json',
                    countryId: country
                }, onSuccess: function (obj) {
                    $(element.name + '_airport_picker_choices').update(obj.responseText);
                    addAirportPickerWindowObservers(element);
                    addObservers(element);
                },
                onLoading: function(obj) {
                    $(element.name + '_airport_picker_choices').update('<li class="bg_none"><img id="ladowanie_gif" src="' + basePath + '/images/loading.gif" alt="Ładowanie" title="Ładowanie" /></li>');
                }
            });
}

function addAirportPickerWindowObservers(element)
{
    $(element.name + '_airport_picker_close_image', element.name + '_airport_picker_close_span').each(function(elem) {
        new Event.observe(elem, 'click', function(event) {
            $(element.name + '_airport_picker_div').hide();
        });
    });
}

function addObservers(element) {
    new Event.observe($(element.name + '_airport_picker_country'), 'change', function(event) {
        var select = Event.element(event);
        getAirports(select.value, element);
    });
    $(element.name + '_airport_picker_choices').descendants('li').each(function(li) {
        new Event.observe(li, 'mouseover', function(event) {
            li.addClassName('selected');
        });
        new Event.observe(li, 'mouseout', function(event) {
            li.removeClassName('selected');
        });
        new Event.observe(li, 'click', function(event) {
            $(element.name + '_code').value = li.readAttribute('insee:abbr');
            element.value = li.readAttribute('insee:airport');
            $(element.name + '_airport_picker_div').hide();
        });
    });
}
