/*JS-VERSION:1.73.0.0*/

SwissSuggest = function() {
	var OutputBox = document.createElement('div');
	var ControlObjects = new Object();
	var CurrentElement = null;
	var LostElement = null;
	var LastValue = '';
	var DroppedValue = '';
	var ResultMark = null;
	var ResultItems = 0;
	var ResultCache = new Object();
	var CurrentKeyCode = 0;
	var CapturedEvents = new Array();
	var ServerProtocol = 'http';

	if (window.location.protocol == 'https:') {
		ServerProtocol = 'https';
	}

	OutputBox.className = 'layer';
	OutputBox.style.backgroundColor = '#f8f8f8';
	OutputBox.style.border = 'none';
	OutputBox.style.display = 'none';
	OutputBox.style.fontSize = '10px';
	OutputBox.style.overflow = 'hidden';
	OutputBox.innerHTML = '<div style="border:1px solid #adadad;"></div>' +
						  '<!--[if lte IE 6.5]>' +
						  ' <iframe style="display:block; filter:mask(); height:3000px; left:0px; ' +
						  '   position:absolute; top:0px; width:3000px; z-index:-1;"' +
						  '  src="' + ServerProtocol + '://booking.swiss.com/web/controls_R2/misc/IEFrameWarningBypass.htm">' +
						  ' </iframe>' +
						  '<![endif]-->';

	this.Init = function(info) {
		ControlObjects[info.id] = info;

		if ($(info.id)) {
			EventListener($(info.id), 'focus', BasicHandler);
			EventListener($(info.id), 'keydown', EventHandler);
			EventListener($(info.id), 'keyup', RequestHandler);
			EventListener($(info.id), 'blur', CloseOutputBox);
		}
	}

	this.S = function(d) {
		if (d != null) {
			if (d.q != DroppedValue) {
				return;
			}
		}

		OutputBox.getElementsByTagName('div')[0].innerHTML = '';

		if (d == null) {
			var tmpCacheId = CurrentElement.value.toUpperCase() + "*" + ControlObjects[CurrentElement.id].module;
			ResultCache[tmpCacheId] = { 'data':null, 'count':0 }
			CloseOutputBox();
			return;
		}

		var cnt = 0;
		var style = null;

		for (n = 0; n < d.r.length; n++) {
			switch (d.r[n].c) {
				case '*c':
					var item = d.r[n].i.split('*');
					var desc = null;

					style = 'padding:5px 5px 5px 14px;';

					if (item.length > 1) {
						desc = '<img src="' + ServerProtocol + '://www.swiss.com/Style%20Library/images/language/' + item[0] + '.gif"' +
								   ' alt="" style="position:relative;top:2px;" /> ' + item[1];
					}
					else {
						desc = item[0];
					}

					OutputBox.getElementsByTagName('div')[0].innerHTML += '<div style="padding:8px 5px 3px 5px;">' + desc + ':</div>';
					break;

				case '**':
					style = 'padding:5px;';
					break;

				default:
					style = 'padding:5px;';

					var content = '<div id="sri.' + cnt + '" style="cursor:pointer;height:13px;position:relative;' + style + '"' +
								  ' onmousedown="javascript:SwissSuggest.ClickItem(\'' + d.r[n].c + '\');"' +
								  ' onmouseover="javascript:SwissSuggest.MarkItem(' + cnt + ');">' + d.r[n].i + '</div>' +
								  '<input id="src.' + cnt + '" type="hidden" value="' + d.r[n].c + '" />';
					OutputBox.getElementsByTagName('div')[0].innerHTML += content;
					cnt++;
					break;
			}
		}

		var tmpCacheId = CurrentElement.value.toUpperCase() + "*" + ControlObjects[CurrentElement.id].module;
		ResultCache[tmpCacheId] = { 'data':OutputBox.getElementsByTagName('div')[0].innerHTML, 'count':cnt - 1 }
		ResultItems = cnt - 1;
		SwissSuggest.MarkItem(0);
		OutputBox.style.display = 'block';
	}

	this.MarkItem = function(id) {
		if (ResultMark != null) {
			if ($('sri.' + ResultMark)) {
				$('sri.' + ResultMark).style.backgroundImage = 'none';
				$('sri.' + ResultMark).style.color = '#000';
			}
		}

		if ($('sri.' + id)) {
			var linerWidth = ControlObjects[CurrentElement.id].width.replace(/px/g, '');

			$('sri.'+ id).style.backgroundImage = 'url(' + ServerProtocol + '://www.swiss.com/Style%20Library/' + 
													   'images/buttons/autosuggest_mOver_' + linerWidth + 'x23.gif)';
			$('sri.'+ id).style.backgroundRepeat = 'no-repeat';

			ResultMark = id;
		}
	}

	this.ClickItem = function(id) {
		CurrentElement.value = id;
		LastValue = CurrentElement.value;
		CloseOutputBox();
	}

	function RequestHandler() {
		var requestDemand = true;

		if (Trim(LastValue) == Trim(CurrentElement.value)) {
			requestDemand = false;
		}

		if (CurrentKeyCode == 13) {
			document.getElementsByTagName('form')[0].onsubmit = CapturedEvents['submit'];
			CurrentElement.onkeypress = CapturedEvents['keypress'];

			CapturedEvents['submit'] = null;
			CapturedEvents['keypress'] = null;

			requestDemand = false;
		}

		if (CurrentElement.value.length == 0) {
			LastValue = '';
			CloseOutputBox();
			return;
		}

		if (requestDemand) {
			var tmpCacheId = CurrentElement.value.toUpperCase() + "*" + ControlObjects[CurrentElement.id].module;

			if (ResultCache[tmpCacheId]) {
				if (ResultCache[tmpCacheId].data == null) {
					ResultItems = ResultCache[tmpCacheId].count;
					CloseOutputBox();
				}
				else {
					OutputBox.getElementsByTagName('div')[0].innerHTML = ResultCache[tmpCacheId].data;
					ResultItems = ResultCache[tmpCacheId].count;
					SwissSuggest.MarkItem(0);
					OutputBox.style.display = 'block';
				}

				LastValue = CurrentElement.value;
			}
			else {
				var oHeader = document.getElementsByTagName('head')[0];
				var oScript = document.createElement('script');
				var tmpSearchValue = encodeURIComponent(CurrentElement.value);

				tmpSearchValue = tmpSearchValue.replace(/</g, '');
				tmpSearchValue = tmpSearchValue.replace(/>/g, '');
				tmpSearchValue = tmpSearchValue.replace(/&/g, '');

				oScript.setAttribute('type', 'text/javascript');
				oScript.setAttribute('src', ServerProtocol + '://booking.swiss.com/web/suggest.aspx' + 
											'?q=' + tmpSearchValue +
											'&c=' + ControlObjects[CurrentElement.id].country +
											'&l=' + ControlObjects[CurrentElement.id].language +
											'&m=' + ControlObjects[CurrentElement.id].module);
				oHeader.appendChild(oScript);

				LastValue = CurrentElement.value;
				DroppedValue = tmpSearchValue;
			}
		}
	}

	function EventHandler(e) {
		if (window.event) {
			CurrentKeyCode = window.event.keyCode;
		}
		else if (e) {
			CurrentKeyCode = e.which;
		}
		else {
			CurrentKeyCode = 0;
		}

		if (CurrentKeyCode == 0) {
			return;
		}

		if (OutputBox.style.display != 'none') {
			if ((CurrentKeyCode == 9 || CurrentKeyCode == 13) && ResultMark != null) {
				CurrentElement.value = $('src.' + ResultMark).value;
				LastValue = CurrentElement.value;

				if (CurrentKeyCode == 13) {
					CapturedEvents['submit'] = document.getElementsByTagName('form')[0].onsubmit;
					CapturedEvents['keypress'] = CurrentElement.onkeypress;

					document.getElementsByTagName('form')[0].onsubmit = function() { return false; void(0); }
					CurrentElement.onkeypress = function() { return false; void(0); }
				}

				CloseOutputBox();
			}

			if (CurrentKeyCode == 27) {
				CloseOutputBox();
			}

			if (CurrentKeyCode == 38) {
				if(ResultMark == null || !$('sri.' + (ResultMark - 1))) {
					SwissSuggest.MarkItem(ResultItems);
				}
				else {
					SwissSuggest.MarkItem(ResultMark - 1);
				}
			}

			if (CurrentKeyCode == 40) {
				if (ResultMark == null || !$('sri.' + (ResultMark + 1))) {
					SwissSuggest.MarkItem(0);
				}
				else {
					SwissSuggest.MarkItem(ResultMark + 1);
				}
			}
		}
	}

	function BasicHandler(e) {
		if (window.event) {
			CurrentElement = window.event.srcElement;
		}
		else if (e) {
			CurrentElement = e.target;
		}
		else {
			return;
		}

		if (typeof CurrentElement.id == 'undefined') {
			CurrentElement = LostElement;
		}

		OutputBox.id = 'sgOut_' + CurrentElement.id;
		OutputBox.style.left = ControlObjects[CurrentElement.id].left;
		OutputBox.style.top = ControlObjects[CurrentElement.id].top;
		OutputBox.style.width = ControlObjects[CurrentElement.id].width;

		if (!$(OutputBox.id)) {
			$('wrapper').insertBefore(OutputBox, $('wrapper').firstChild);
		}

		LostElement = CurrentElement;
		LastValue = CurrentElement.value;
	}

	function CloseOutputBox() {
		ResultMark = null;
		OutputBox.style.display = 'none';
	}

	function Trim(value) {
		return value.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
	}

	function $(id) {
		return document.getElementById(id);
	}

	function EventListener(obj, type, task){
		if (obj.addEventListener) {
			obj.addEventListener(type, task, false);
			return true;
		}
		else if (obj.attachEvent) {
			var r = obj.attachEvent('on' + type, task);
			return r;
		}
		else {
			return false;
		}
	}
}

function S(d) {
	SwissSuggest.S(d);
}
