/*
 * Autocomplete - jQuery plugin 1.0.2
 *
 * Copyright (c) 2007 Dylan Verheul, Dan G. Switzer, Anjesh Tuladhar, JÃƒÂ¶rn Zaefferer
 *
 * Dual licensed under the MIT and GPL licenses:
 *   http://www.opensource.org/licenses/mit-license.php
 *   http://www.gnu.org/licenses/gpl.html
 *
 * Revision: $Id: jquery.autocomplete.js 5747 2008-06-25 18:30:55Z joern.zaefferer $
 *
 */

;(function($) {

$.fn.extend({
	autocomplete: function(urlOrData, options) {
		var isUrl = typeof urlOrData == "string";
        options = $.extend({}, $.Autocompleter.defaults, {
			url: isUrl ? urlOrData : null,
			data: isUrl ? null : urlOrData,
			delay: isUrl ? $.Autocompleter.defaults.delay : 10,
			max: options && !options.scroll ? 10 : 150
		}, options);

        // if highlight is set to false, replace it with a do-nothing function
		options.highlight = options.highlight || function(value) { return value; };

		// if the formatMatch option is not specified, then use formatItem for backwards compatibility
		options.formatMatch = options.formatMatch || options.formatItem;

		return this.each(function() {
			new $.Autocompleter(this, options);
		});
	},
	result: function(handler) {
		return this.bind("result", handler);
	},
	search: function(handler) {
		return this.trigger("search", [handler]);
	},
	flushCache: function() {
		return this.trigger("flushCache");
	},
	setOptions: function(options){
		return this.trigger("setOptions", [options]);
	},
	unautocomplete: function() {
		return this.trigger("unautocomplete");
	}
});

$.Autocompleter = function(input, options) {

	var KEY = {
		UP: 38,
		DOWN: 40,
		DEL: 46,
		TAB: 9,
		RETURN: 13,
		ESC: 27,
		COMMA: 188,
		PAGEUP: 33,
		PAGEDOWN: 34,
		BACKSPACE: 8
	};

	// Create $ object for input element
	var $input = $(input).attr("autocomplete", "off").addClass(options.inputClass);

	var timeout;
	var previousValue = null;
	var cache = $.Autocompleter.Cache(options);
	var hasFocus = 0;
	var lastKeyPressCode;
	var lastRequestTerm;
	var config = {
		mouseDownOnSelect: false
	};
	var select = $.Autocompleter.Select(options, input, selectCurrent, config);

	var blockSubmit;

	// prevent form submit in opera when selecting with return key
	$.browser.opera && $(input.form).bind("submit.autocomplete", function() {
		if (blockSubmit) {
			blockSubmit = false;
			return false;
		}
	});

	// only opera doesn't trigger keydown multiple times while pressed, others don't work with keypress at all
	$input.bind(($.browser.opera ? "keypress" : "keydown") + ".autocomplete", function(event) {
		// track last key pressed
		lastKeyPressCode = event.keyCode;
		switch(event.keyCode) {

			case KEY.UP:
				event.preventDefault();
				if ( select.visible() ) {
					select.prev();
				} else {
					onChange(true);
				}
				break;

			case KEY.DOWN:
				event.preventDefault();
				if ( select.visible() ) {
					select.next();
				} else {
					onChange(true);
				}
				break;

			case KEY.PAGEUP:
				event.preventDefault();
				if ( select.visible() ) {
					select.pageUp();
				} else {
					onChange(true);
				}
				break;

			case KEY.PAGEDOWN:
				event.preventDefault();
				if ( select.visible() ) {
					select.pageDown();
				} else {
					onChange(true);
				}
				break;

			case KEY.TAB:
			case KEY.RETURN:
				if( selectCurrent() ) {
					// stop default to prevent a form submit, Opera needs special handling
					event.preventDefault();
					blockSubmit = true;
					return false;
				}
				break;

			case KEY.ESC:
				select.hide();
				break;
				
			default:
				clearTimeout(timeout);
				timeout = setTimeout(onChange, options.delay);
				break;
		}
	}).focus(function(){
		// track whether the field has focus, we shouldn't process any
		// results if the field no longer has focus
        hasFocus++;
        if ((input.value.length == 0) && !select.visible() ) {
            onChange(false);
        }
	}).blur(function() {
		hasFocus = 0;
		if(!$.browser.msie) { //if not ie, normal behavior
			if (!config.mouseDownOnSelect) {
				hideResults();
				selectCurrent();
			}
		} else { //if ie
			$("body").click(function() {
                //Hide the menus if visible
                hideResults();
				selectCurrent();
			});
		}
	}).click(function() {
		// show select when clicking in a focused field
		if ( hasFocus++ > 0 && !select.visible() ) {
			onChange(true);
		}
	}).bind("search", function() {
		// TODO why not just specifying both arguments?
		var fn = (arguments.length > 1) ? arguments[1] : null;
		function findValueCallback(q, data) {
			var result;
			if( data && data.length ) {
				for (var i=0; i < data.length; i++) {
					if( data[i].result.toLowerCase() == q.toLowerCase() ) {
						result = data[i];
						break;
					}
				}
			}
			if( typeof fn == "function" ) fn(result);
			else $input.trigger("result", result && [result.data, result.value]);
		}
		request($input.val(), findValueCallback, findValueCallback);
	}).bind("flushCache", function() {
		cache.flush();
	}).bind("setOptions", function() {
		$.extend(options, arguments[1]);
		// if we've updated the data, repopulate
		if ( "data" in arguments[1] )
			cache.populate();
	}).bind("unautocomplete", function() {
		select.unbind();
		$input.unbind();
		$(input.form).unbind(".autocomplete");
	});


	function selectCurrent() {
		var selected = select.selected();
		if( !selected )
			return false;

		var v = selected.result;
		previousValue = v;

		$input.val(v);
		hideResultsNow();
		$input.trigger("result", [selected.data, selected.value]);
		return true;
	}

	function onChange(skipPrevCheck) {
		if( lastKeyPressCode == KEY.DEL ) {
			select.hide();
			return;
		}

		var currentValue = $input.val();

		if ( !skipPrevCheck && currentValue == previousValue )
			return;

        previousValue = currentValue;
		if ( currentValue.length >= options.minChars) {
			$input.addClass(options.loadingClass);
			if (!options.matchCase)
				currentValue = currentValue.toLowerCase();
			request(currentValue, receiveData, hideResultsNow);
		} else {
			stopLoading();
			select.hide();
		}
	};

	function hideResults() {
		clearTimeout(timeout);
		timeout = setTimeout(hideResultsNow, 200);
	};

	function hideResultsNow() {
		var wasVisible = select.visible();
		select.hide();
		clearTimeout(timeout);
		stopLoading();
		if (options.mustMatch) {
			// call search and run callback
			$input.search(
				function (result){
					// if no value found, clear the input box
					if( !result ) {
						$input.val( "" );
					}
				}
			);
		}
		if (wasVisible)
			// position cursor at end of input field
			$.Autocompleter.Selection(input, input.value.length, input.value.length);
	};

	function receiveData(q, data) {
		if (lastRequestTerm == q) {
			if ( ( ( data.region && data.region.length ) || ( data.airport && data.airport.length ) ) && hasFocus ) {
				stopLoading();
				select.display(data, q);
				select.show();
				$input.removeClass(options.errorClass);
			} else {
				$input.addClass(options.errorClass);
				hideResultsNow();
			}
		}
	};

	function request(term, success, failure) {
		if (!options.matchCase)
			term = term.toLowerCase();
		lastRequestTerm = term;
		var data = cache.load(term);
        // recieve the cached data
		//if (data && data.length) {
		if (data) {
			success(term, data);
		// if an AJAX url has been supplied, try loading the data now
		} else if( (typeof options.url == "string") && (options.url.length > 0) ){

			var extraParams = {
				//timestamp: +new Date()
			};
			$.each(options.extraParams, function(key, param) {
				extraParams[key] = typeof param == "function" ? param() : param;
			});

			$.ajax({
				// try to leverage ajaxQueue plugin to abort previous requests
				mode: "abort",
				// limit abortion to this input
				port: "autocomplete" + input.name,
				dataType: options.dataType,
				url: options.url,
				data: $.extend({
					q: term,
					limit: options.max
				}, extraParams),
				success: function(data) {
					cache.add(term, data);
					success(term, data);
				}
			});
		} else {
			// if we have a failure, we need to empty the list -- this prevents the the [TAB] key from selecting the last successful match
			select.emptyList();
			failure(term);
		}
	};

	function parse(data) {
		return $.map(data.countries.country, function(country) {
			return $.map(country.city, function(city) {
				return {
					data: city,
					value: city.id,
					result: city.name
				}
			})
		})
	};

	function stopLoading() {
		$input.removeClass(options.loadingClass);
	};

};

$.Autocompleter.defaults = {
	inputClass: "input",
	resultsClass: "suggest-box",
	loadingClass: "loading",
	errorClass: "suggest-error",
	listAirports: "airports",
	listCities: "cities",
	separator: "separator",
	dataType: "json",
	minChars: 3,
	delay: 200,
	matchCase: false,
	matchSubset: true,
	cacheLength: 50,
	max: 100,
	mustMatch: false,
	extraParams: {},
	selectFirst: true,
	formatItem: function(row) { return row.name; },
	formatMatch: null,
	autoFill: false,
	width: 0,
	highlight: function(value, term) {
		return value.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + term.replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi, "\\$1") + ")(?![^<>]*>)(?![^&;]+;)", "gi"), "<strong>$1</strong>");
	},
    scroll: true,
    scrollHeight: 180,
    regionSelect: true
};

$.Autocompleter.Cache = function(options) {

	var data = {},
		length = 0;

	function add(q, value) {
		if (length > options.cacheLength){
			flush();
		}
		if (!data[q]){
			length++;
		}
		data[q] = value;
	}

	function populate(){
        if( !options.data ) return false;

        add("", options.data);
        return false;

/*
        // track the matches
        var stMatchSets = {},
			nullData = 0;

		// no url was specified, we need to adjust the cache length to make sure it fits the local data store
		if( !options.url ) options.cacheLength = 1;

		// track all options for minChars = 0
		stMatchSets[""] = [];

		// loop through the array and create a lookup structure
		for ( var i = 0, ol = options.data.length; i < ol; i++ ) {
			var rawValue = options.data[i];
			// if rawValue is a string, make an array otherwise just reference the array
			rawValue = (typeof rawValue == "string") ? [rawValue] : rawValue;

			var value = options.formatMatch(rawValue, i+1, options.data.length);
			if ( value === false )
				continue;

			var firstChar = value.charAt(0).toLowerCase();
			// if no lookup array for this character exists, look it up now
			if( !stMatchSets[firstChar] )
				stMatchSets[firstChar] = [];

			// if the match is a string
			var row = {
				value: value,
				data: rawValue,
				result: options.formatResult && options.formatResult(rawValue) || value
			};

			// push the current match into the set list
			stMatchSets[firstChar].push(row);

			// keep track of minChars zero items
			if ( nullData++ < options.max ) {
				stMatchSets[""].push(row);
			}
		};

		// add the data items to the cache
		$.each(stMatchSets, function(i, value) {
			// increase the cache size
			options.cacheLength++;
			// add to the cache
			add(i, value);
		});
*/
	}

	function matchSubset(s, sub) {
		if (!options.matchCase)
			s = s.toLowerCase();
		var i = s.indexOf(sub);
		if (i == -1) return false;
		return i == 0 || options.matchContains;
	};

	function generateSubset(c,q){
        if (typeof c.result.complete != "undefined") {
            if (!c.result.complete)
                return null;
        } else {
            //@ToDo: remove (c.result.rows==0), it's just because result for "" is wrong
            if ( (c.result.rows>options.max) || (c.result.rows==0))
			    return null;
        }
        var airport = [], region = [];
		$.each(c.airport, function(i, x) {
			if (matchSubset(x.iata, q)) {
				airport[airport.length] = x;
			}
		});
		$.each(c.region, function(i, x) {
			var destination = [];
			$.each(x.destination, function(j, y) {
				if (matchSubset(y.name, q)) {
					destination[destination.length] = y;
				}
			});
			if (destination.length || ((options.regionSelect) && (matchSubset(x.name, q)))) {
				region[region.length] = { "name": x.name, "iata": x.iata, "destination": destination };
			}
		});
		//@ToDo: insert support for regions
		return { "airport": airport, "region": region };
	}

	function flush(){
		data = {};
		length = 0;
	}

	// populate any existing data
	setTimeout(populate, 25);

	return {
		flush: flush,
		add: add,
		populate: populate,
		load: function(q) {
            if (!options.cacheLength || !length)
				return null;
			if (data[q]){
				return data[q];
			} else
			if (options.matchSubset) {
				for (var i = q.length - 1; i >= options.minChars; i--) {
					var c = data[q.substr(0, i)];
					if (c) {
                        return generateSubset(c,q);
					}
				}
			}
			return null;
		}
	};
};

$.Autocompleter.Select = function (options, input, select, config) {
	var CLASSES = {
		ACTIVE: "suggest-over",
		COUNTRY: "country",
        SELECTABLE: "sel"
    };

	var listItems,
		active = -1,
		data,
		term = "",
		needsInit = true,
		element,
		lists = {},
		separator;

	// Create results
	function init() {
		if (!needsInit)
			return;
		element = $("<div/>")
		.hide()
		.addClass(options.resultsClass)
		.css("position", "absolute")
		.appendTo(document.body);

		if(options.scroll) {
			element.scrollTop(0);
			element.css({
				maxHeight: options.scrollHeight,
				overflow: 'auto'
			});
		}

		lists[0] = $("<ul/>").addClass(options.listAirports).appendTo(element);
		separator = $("<div/>").addClass(options.separator).appendTo(element);
		lists[1] = $("<ul/>").addClass(options.listCities).appendTo(element);

		$.each(lists, function(i, value) {
			value.mouseover( function(event) {
				if(target(event).nodeName && target(event).nodeName.toUpperCase() == 'LI') {
					if(options.regionSelect) {
						$.each(lists, function(i, value2) {
							$("li", value2).removeClass(CLASSES.ACTIVE);
						});
						active = $("li", value).removeClass(CLASSES.ACTIVE).index(target(event));
						$(target(event)).addClass(CLASSES.ACTIVE);
					} else {
						if (!$(target(event)).hasClass("."+CLASSES.COUNTRY)) {
							$.each(lists, function(i, value2) {
								$("li", value2).removeClass(CLASSES.ACTIVE);
							});
							active = $("li", value).removeClass(CLASSES.ACTIVE).index(target(event));
							$(target(event)).addClass(CLASSES.ACTIVE);
						}						
					}
				}
			}).click(function(event) {
				$(target(event)).addClass(CLASSES.ACTIVE);
				select();
				// TODO provide option to avoid setting focus again after selection? useful for cleanup-on-focus
				input.focus();
				return false;
			}).mousedown(function() {
				config.mouseDownOnSelect = true;
			}).mouseup(function() {
				config.mouseDownOnSelect = false;
			});
		});

		if( options.width > 0 )
			element.css("width", options.width);

		needsInit = false;
	}

	function target(event) {
		var element = event.target;
		while(element && element.tagName != "LI")
			element = element.parentNode;
		// more fun with IE, sometimes event.target is empty, just ignore it then
		if(!element)
			return [];
		return element;
	}

	function moveSelect(step) {
		listItems.slice(active, active + 1).removeClass(CLASSES.ACTIVE);
		movePosition(step);
        var activeItem = listItems.slice(active, active + 1).addClass(CLASSES.ACTIVE);
        if(options.scroll) {
            var offset = 0;
			// @Todo: calculate the right height
            listItems.slice(0, active).each(function() {
				offset += this.offsetHeight;
			});
			// @Todo: padding 10 must not be hardcoded
            if((offset + activeItem[0].offsetHeight - element.scrollTop()) > element.height() - 24) {
                element.scrollTop(offset + activeItem[0].offsetHeight + 24 - element.innerHeight());
            } else if (offset < element.scrollTop()) {
				if (listItems.slice(0, active).filter(function (index) {
											return !$(this).hasClass("."+CLASSES.COUNTRY);
											})) {
					element.scrollTop(0);
				} else {
					element.scrollTop(offset);
				}
            }
        }
	};

	function movePosition(step) {
		active += step;
		if((options.regionSelect)) {
			var inputVal = $(input).attr("autocomplete", "off");
            var enteredValue = (inputVal.val())
            var valueOfAC = listItems[active].innerHTML;
            valueOfAC = valueOfAC.replace(/<strong>/g, "");
            valueOfAC = valueOfAC.replace(/<\/strong>/g, "");
            valueOfAC = valueOfAC.toLowerCase();
            enteredValue = enteredValue.toLowerCase();
            if(($(listItems[active]).hasClass("."+CLASSES.COUNTRY)) && valueOfAC.lastIndexOf(enteredValue) == -1) {
                active++;
            }
		}
		if (active < 0) {
			active = listItems.size() - 1;
		} else if (active >= listItems.size()) {
			active = 0;
		}
		if ((!options.regionSelect) && ($(listItems[active]).hasClass("."+CLASSES.COUNTRY))) {
			movePosition((step>0) ? 1 : -1);
		}
	}

	function limitNumberOfItems(available) {
		return options.max && options.max < available
			? options.max
			: available;
	}

	function fillList() {
		lists[0].empty();
		lists[1].empty();

        $.each(data.airport, function(i, airport) {
            var label = airport.iata+' - '+airport.label;
            var li = $("<li/>").html( options.highlight(label, term) )
                               .appendTo(lists[0])[0];
            $.data(li, "locac_data", { value: airport.id, data: airport, result: label });
        });

        if ( (data.airport && data.airport.length) && (data.region && data.region.length)) {
            separator.show();
        } else {
            separator.hide();
        }

        $.each(data.region, function(i, region) {
            if (options.regionSelect) {
                var li = $("<li/>").addClass(CLASSES.COUNTRY).addClass(CLASSES.SELECTABLE).html( options.highlight(region.name, term) ).appendTo(lists[1])[0];
                $.data(li, "locac_data", { value: region.iata, data: region, result: region.name });
            } else {
                var li = $("<li/>").addClass(CLASSES.COUNTRY).html( options.highlight(region.name, term) ).appendTo(lists[1])[0];
            }

            $.each(region.destination, function(j, destination) {
				var li = $("<li/>").addClass(CLASSES.SELECTABLE).html( options.highlight(destination.name, term) )
								   .appendTo(lists[1])[0];
                $.data(li, "locac_data", { value: destination.iata, data: destination, result: destination.name });
			});
		});

		listItems = lists[0].find("li").add(lists[1].find("li"));

		if ( options.selectFirst ) {
			active = -1;
			moveSelect(1);
			//listItems.slice(0, 1).addClass(CLASSES.ACTIVE);
		}
		// apply bgiframe if available
		if ( $.fn.bgiframe )
			lists[0].bgiframe();
	}

	return {
		display: function(d, q) {
			init();
			data = d;
			term = q;
			fillList();
		},
		next: function() {
			moveSelect(1);
		},
		prev: function() {
			moveSelect(-1);
		},
		pageUp: function() {
			if (active != 0 && active - 8 < 0) {
				moveSelect( -active );
			} else {
				moveSelect(-8);
			}
		},
		pageDown: function() {
			if (active != listItems.size() - 1 && active + 8 > listItems.size()) {
				moveSelect( listItems.size() - 1 - active );
			} else {
				moveSelect(8);
			}
		},
		hide: function() {
			element && element.hide();
			listItems && listItems.removeClass(CLASSES.ACTIVE);
			active = -1;

			//show select fields for ie6
			handleSelectFields("show");
		},
		visible : function() {
			return element && element.is(":visible");
		},
		current: function() {
			return this.visible() && (listItems.filter("." + CLASSES.ACTIVE)[0] || options.selectFirst && listItems[0]);
		},
		show: function() {
			var offset = $(input).offset();
			element.css({
				width: typeof options.width == "string" || options.width > 0 ? options.width : $(input).width(),
				top: offset.top + input.offsetHeight,
				left: offset.left
			}).show();

			//hide select fields for ie6
			handleSelectFields("hide");
			if(options.scroll) {
				element.scrollTop(0);

                if($.browser.msie && typeof document.body.style.maxHeight === "undefined") {
					var listHeight = 0;
					// @Todo: calculate the right height
					listItems.each(function() {
						listHeight += this.offsetHeight;
					});
					var scrollbarsVisible = listHeight > options.scrollHeight;
                    element.css('height', scrollbarsVisible ? options.scrollHeight : listHeight );
					if (!scrollbarsVisible) {
						// IE doesn't recalculate width when scrollbar disappears
						listItems.width( lists[0].width() - parseInt(listItems.css("padding-left")) - parseInt(listItems.css("padding-right")) );
					}
                }

            }
		},
		selected: function() {
			var selected = listItems && listItems.filter("." + CLASSES.ACTIVE).removeClass(CLASSES.ACTIVE);
			return selected && selected.length && $.data(selected[0], "locac_data");
		},
		emptyList: function (){
			lists[0] && lists[0].empty();
		},
		unbind: function() {
			element && element.remove();
		}
	};
};

$.Autocompleter.Selection = function(field, start, end) {
    if( field.createTextRange ){
		var selRange = field.createTextRange();
		selRange.collapse(true);
		selRange.moveStart("character", start);
		selRange.moveEnd("character", end);
		selRange.select();
	} else if( field.setSelectionRange ){
		field.setSelectionRange(start, end);
	} else {
		if( field.selectionStart ){
			field.selectionStart = start;
			field.selectionEnd = end;
		}
	}
    //field.focus();
};

})(jQuery);



/* Additional Functions */
function fillChildField(tabNumber, childNumber, age) {
	if(age == 0) {
		showAge = "< ½";
		fillAge = 6;
	} else if(age == 1 ) {
		showAge = "< 2";
		fillAge = 23;
	} else if(age == -1 ) {
		showAge = "-";
		fillAge = 0;
	} else {
		showAge = age;
		fillAge = age * 12;
	}
	$ui("#tab0" + tabNumber + "-child" + childNumber + "-age").val(fillAge);
	$ui("#tab0" + tabNumber + "-child" + childNumber).val(showAge);
	$ui("#suggest-child-" + childNumber).remove();
}

function suggestChild(childNumber, childField, tabNumber) {
	removeChildSuggests();
	var el = $ui(childField);
	var offset = (el.offset());
	var topPosition = offset.top + el.height() + 6; // Todo: Not 6!
	var leftPosition = offset.left;
	$ui("body").append('<div id="suggest-child-' + childNumber + '" class="suggest-box"></div>')
	$ui("#suggest-child-" + childNumber).append('<ul>');
	$ui("#suggest-child-" + childNumber + " ul").append('<li class="alt"><a href="javascript://;" onclick="fillChildField(' + tabNumber + ', ' + childNumber + ', -1);">-</a></li>');
	$ui("#suggest-child-" + childNumber + " ul").append('<li><a href="javascript://;" onclick="fillChildField(' + tabNumber + ', ' + childNumber + ', 0);">&lt; &frac12;</a></li>');
	$ui("#suggest-child-" + childNumber + " ul").append('<li class="alt"><a href="javascript://;" onclick="fillChildField(' + tabNumber + ', ' + childNumber + ', 1);">&lt; 2</a></li>');
	for(var i=2; i<13; i++) {
		if(i % 2 == 0) {
			$ui("#suggest-child-" + childNumber + " ul").append('<li><a href="javascript://;" onclick="fillChildField(' + tabNumber + ', ' + childNumber + ', ' + i + ');">' + i + '</a></li>');
		} else {
			$ui("#suggest-child-" + childNumber + " ul").append('<li class="alt"><a href="javascript://;" onclick="fillChildField(' + tabNumber + ', ' + childNumber + ', ' + i + ');">' + i + '</a></li>');
		}
	}
	$ui("#suggest-child-" + childNumber).css({
		"top": topPosition + "px",
		"left": leftPosition + "px",
		"position": "absolute",
		"display": "block",
		"width": "80px"
	});

	$ui(document).bind("click", function() {
		if(!$ui("#suggest-child-" + childNumber).click()) {
			alert("yay")
		}
		removeChildSuggests();
	});
}

function removeChildSuggests() {
	$ui(".suggest-box").css("display", "none");
	for(var i=1; i<=3; i++) {
		$ui("#suggest-child-" + i).remove();
	}
}

/* #DOC - Suggest Light */
function suggestAirport(airportId, airportField, tabNumber) {
	$ui(".suggest-box").css("display", "none");
	var el = $ui("#" + airportField);
	var offset = (el.offset());
	var topPosition = offset.top + el.height() + 6; // Todo: Not 6!
	var leftPosition = offset.left;

	$ui("#" + airportId).css({
		"top": topPosition + "px",
		"left": leftPosition + "px",
		"display": "block",
		"position": "absolute",
		"width": "230px"
	});
}

function fillAirportField(formularField, airportLabel, airportIata) {
	var el = $ui("#" + formularField);
	var elVar = $ui("#" + formularField + "-val");
	el.val(airportLabel);
	elVar.val(airportIata);
	$ui("#suggest-airports-1").css("display", "none");
	$ui("#suggest-airports-2").css("display", "none");
}

function fillPackageField(formularField, airportLabel, airportIata) {
	var el = $ui("#" + formularField);
	var elVar = $ui("#" + formularField + "-val");
	el.val(airportLabel);
	elVar.val(airportIata);
	$ui("#suggest-package-1").css("display", "none");
	$ui("#suggest-package-2").css("display", "none");
}


function countInput(id, numberToCount) {
	id = $ui("#" + id);
	var oldVal = parseInt($ui(id).val());
	if (oldVal < 1) {
		oldVal = 1;
	}
	if (oldVal > 4) {
		oldVal = 4;
	}
	var newVal = oldVal + parseInt(numberToCount);
	if (newVal < 5 && newVal > 0) { // maximum 4 adults
		id.val(newVal);
	}
}

//show/hide select fields for ie6
function handleSelectFields(action) {
	if($ui.browser.msie && $ui.browser.version == 6) {
		if(action == "show") {
			$ui(".travelsearch-cnt select").css("visibility", "visible");
		} else if(action == "hide") {
			$ui(".travelsearch-cnt select").css("visibility", "hidden");
		}
	}
}


$ui(document).ready(function() {
	// Tab-Switch
	function trsTabs() {
		var trsTabsLi = ".x6 #travelsearch li, .x4 #travelsearch li";
		var trsTabsDiv = ".x6 #travelsearch div[id^='rs-tab'], .x4 #travelsearch div[id^='rs-tab']";
		$ui(trsTabsLi).bind("click", function() {
			$ui(trsTabsLi).removeClass("active");
			$ui(this).addClass("active");
			$ui(trsTabsDiv).hide();
			$ui(".x6 #travelsearch div[id^='rs-tab']:eq(" + $ui(trsTabsLi).index(this) + "), .x4 #travelsearch div[id^='rs-tab']:eq(" + $ui(trsTabsLi).index(this) + ")").show();
			$ui(this).find("a").blur();
		});
	};
	trsTabs();

	// if there is no correct data in the hidden-fields, we wont submit the form
	$ui("#travelsearch form").submit(function() {
		var elHidden = $ui(this).find("input[id$='-val']");
		var elError = $ui(this).find("input[class*='suggest-error']");

		if (elHidden.val() == "" || elHidden.val() == "-") { // if the hidden-fields are empty or equal to "-"
			alert("Bitte wählen Sie einen korrekten Flughafen!");
			return false;
		} else if (elError.length > 0) { // if one of the inputs has a class "suggest-error"
			alert("Bitte wählen Sie einen korrekten Flughafen!");
			return false;
		} else {
			return true;
		}
	});

	// hide return-date-fields if "Nur Hinflug"
	$ui("#tab02-flymethod-00").bind("click", function() {
		$ui("#tab02-return-date-label").show();
		$ui("#tab02-return-date").show().removeAttr("disabled").attr("value", "").val("");
		$ui("#tab02-return-date-img").show();
	});
	$ui("#tab02-flymethod-01").bind("click", function() {
		$ui("#tab02-return-date-label").hide();
		$ui("#tab02-return-date").hide().attr("disabled", "disabled").attr("value", "").val("");
		$ui("#tab02-return-date-img").hide();
	});
});