var defaultCountryCode = 'PL';
if (window.airports !== undefined) {
	var airportsLowercase = new String(airports).toLowerCase();
}

function addAirportPicker(element) {
	var pickerDiv = $(new Element('div'));
	pickerDiv.id = element.name + '_picker';
	pickerDiv.className = 'cityselect';
	pickerDiv.style.display = 'none';
	
//	if (!Prototype.Browser.IE) {
		if ((window.location.hostname == 'iflight.pl' || window.location.hostname == 'www.iflight.pl') && !Prototype.Browser.IE) {
			pickerDiv.style.top = Number(element.offsetTop + element.offsetHeight + 2) + 'px';
    		pickerDiv.style.left = element.offsetLeft + 'px';
		} else if (window.location.hostname == 'www.uni-fly.pl' || window.location.hostname == 'uni-fly.pl') {
		} else {
			pickerDiv.style.top = element.cumulativeOffset().top + element.getDimensions().height + 1 + 'px';
			pickerDiv.style.left = element.cumulativeOffset().left + 'px';
		}
//    }
		pickerDiv.innerHTML = '<h3><a href=""></a>Wybierz miasto (lotnisko)</h3><div class="countrybox"><label for="countrysel">Kraj: </label></div><ul></ul><div class="clear"/><p><a href="">zamknij</a></p>';
		pickerDiv.down('div').down('label').insert({after: createPickerSelect(element)});
	    element.insert({after: pickerDiv});
	
    addPickerIconObserver(element);
    addPickerWindowObservers(element);
    addPickerSelectObserver(element);
    addPickerResultsObservers(element);
}

function addPickerIconObserver(element) {
	var icon = $(element.id + 'icon');
	var pickerDiv = $(element.name + '_picker');
	var select = pickerDiv.down('select');
	
	Event.observe(icon, 'click', function(event) {
		if (pickerDiv.style.display != 'none') {
			hideElement(pickerDiv);
			hideAndDisable(select);
		} else {
			$$('div[id$="_picker"]').each(hideElement);
			showElement(pickerDiv);
			showAndEnable(select);
		}
	});
}

function addPickerWindowObservers(element) {
	var pickerDiv = $(element.name + '_picker');
	var select = pickerDiv.down('select');
	var closeIcon = pickerDiv.down('h3 > a');
	var closeText = pickerDiv.down('p > a');
	[closeIcon, closeText].each(function(elem) {
		Event.observe(elem, 'click', function(event) {
			hideElement(pickerDiv);
			hideAndDisable(select);
			event.preventDefault();
		});
	});
}

function createPickerSelect(element) {
	var select = document.createElement('select');
	var c = 0;
	var option;
	select.id = element.name + '_select';
	select.name = element.name + '_select';
	select.disabled = 'disabled';
	
	if (countries) {
		countries.each(function(pair) {
			if (pair.key == defaultCountryCode) {
				option = new Option(pair.value, pair.key, true, true);
			} else {
				option = new Option(pair.value, pair.key);
			}
			select.options[c] = option;
			++c;
		});
	}
	return select;
}

function addPickerSelectObserver(element) {
	var pickerDiv = $(element.name + '_picker');
	var select = pickerDiv.down('select');
	var ul = pickerDiv.down('ul');
	ul.innerHTML = getPickerMatches(defaultCountryCode);
	
	Event.observe(select, 'change', function(event) {
		ul.innerHTML = getPickerMatches(select.value);
		addPickerResultsObservers(element);
	});
}

function addPickerResultsObservers(element) {
	var pickerDiv = $(element.name + '_picker');
	var select = pickerDiv.down('select');
	var ul = pickerDiv.down('ul');
	var airportId = $(element.id+'id');
	
	ul.descendants().each(function (elem) {
		if (elem.tagName == 'A') {
			Event.observe(elem, 'click', function(event) {
				airportId.value = elem.down('span').innerHTML;
				element.value = elem.down('strong').innerHTML;
				hideElement(pickerDiv);
				hideAndDisable(select);
				event.preventDefault();
			});
		}
	});
}

function getPickerMatches(pattern) {
	var matches = new Array();
	if (airportsLowercase) {
		var matchesPos = kmp(airports, '^'+pattern);
		
		matchesPos.each(function(pos) {
			matches.push(_makePickerHTML(airports.substring(airports.lastIndexOf(';', pos) + 1, airports.indexOf(';', pos))));
		});
	} else {
		throw 'Airports array not found';
	}
	matches = matches.uniq();
	
	var html = '';
	matches.each(function(string) {
		html += string;
	});
	KMPRunning = false;
	return html;
}

function _makePickerHTML(string) {
	var temp = string.split("*");
	return '<li><a href=""><span>'+temp[0]+'</span> <strong>'+temp[2]+' ('+temp[1]+')</strong></a></li>';
}