/**
 * Search completion feature
 *
 * requires jQuery
 */
var suggestions = new Array();
var outp;
var oldins;
var posi = -1;
var words = new Array();
var sets = new Array();
var input;
var key;

function setVisible(visi){
	var x = document.getElementById("searchShadow");
	var t = document.getElementsByName("q")[0];
	x.style.position = 'absolute';
	x.style.top =  (findPosY(t)+40)+"px";
	x.style.left = (findPosX(t)+2)+"px";
	x.style.visibility = visi;
	var overlay = document.getElementById("searchOverlay");
	overlay.style.position = 'fixed';
	overlay.style.top = '0px';
	overlay.style.left = '0px';
	overlay.style.width = '100%';
	overlay.style.height = '100%';
	overlay.style.opacity = '0.5';
	if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)){
		var ieversion=new Number(RegExp.$1);
		if (ieversion <= 6) 
			visi = "hidden";
		
	}
	overlay.style.visibility = visi;
	overlay.style.filter = "alpha(opacity = 50)";
	overlay.style["-moz-opacity"] = "0.5";
	overlay.style.background = "black";
	var searchQuery = document.getElementById('searchquery');
	searchQuery.style.zIndex = '9999999';
}


function sc_init(){
	outp = document.getElementById("searchOutput");
	window.setInterval("lookAt()", 100);
	setVisible("hidden");
	document.onkeydown = keygetter; //needed for Opera...
	document.onkeyup = keyHandler;
	
}

function findPosX(obj)
{
	var curleft = 0;
	if (obj.offsetParent){
		while (obj.offsetParent){
			curleft += obj.offsetLeft;
			obj = obj.offsetParent;
		}
	}
	else if (obj.x)
		curleft += obj.x;
	return curleft;
}

function findPosY(obj)
{
	var curtop = 0;
	if (obj.offsetParent){
		curtop += obj.offsetHeight;
		while (obj.offsetParent){
			curtop += obj.offsetTop;
			obj = obj.offsetParent;
		}
	}
	else if (obj.y){
		curtop += obj.y;
		curtop += obj.height;
	}
	return curtop;
}

function lookAt(){
	var ins = document.getElementsByName("q")[0].value;
	if (oldins == ins) return;
	else if (posi > -1);
	else if (ins.length > 2) {
		words = getWord(ins);
		if (words.length+sets.length > 0) {
			clearOutput();
			for (var i=0;i<sets.length; ++i) {
				addSet(sets[i]);
			}
			
			if (words.length>0) {
				var subTitle = "<small>Diese Erlebnisse haben \"<font color='red'>" + 
					ins + "</font>\" im Titel:</small>";
				if (sets.length > 0) subTitle = "<br>" + subTitle;
				else subTitle += "<small><br><br></small>";
				var searchTitle = document.createElement("div");
				jQuery(searchTitle).html(subTitle);
				outp.appendChild(searchTitle);
			}
			for (var i=0;i<words.length; ++i) {
				addWord(words[i]);
			}
			setVisible("visible");
			input = document.getElementsByName("q")[0].value;
		} else {
			setVisible("hidden");
			posi = -1;
		}
	} else {
		setVisible("hidden");
		posi = -1;
	}
	oldins = ins;
}

function addSet(set){
	var sp = document.createElement("div");
	jQuery(sp).html(set);
	
	sp.onmouseover = mouseHandler;
	sp.onmouseout = mouseHandlerOut;
	sp.onclick = mouseClickOnSet;
	
	outp.appendChild(sp);
	
	// for iFrame shimming only
	if(jQuery("#shimmer").length > 0) {
		var h = jQuery("#shadow").height();
		jQuery("#shimmer").height(h-2);
	}
}

function addWord(word){
	var sp = document.createElement("div");
	jQuery(sp).html(word);
	jQuery(sp).addClass("searchResult");
	
	sp.onmouseover = mouseHandler;
	sp.onmouseout = mouseHandlerOut;
	sp.onclick = mouseClick;
	
	outp.appendChild(sp);
	
	// for iFrame shimming only
	if(jQuery("#shimmer").length > 0) {
		var h = jQuery("#shadow").height();
		jQuery("#shimmer").height(h-2);
	}
}

function clearOutput(){
	while (outp.hasChildNodes()){
		noten=outp.firstChild;
		outp.removeChild(noten);
	}
	posi = -1;
}

function getWord(beginning)
{
	var words = new Array();
	sets = new Array();
	for (var i=0;i<suggestions.length; ++i)
	{
		exp = new RegExp(beginning, 'i');
		if(exp.test(suggestions[i])){
			
			
			// First entry has a r or n char at start why? remove it
			while (suggestions[i][0] == '\n' || suggestions[i][0] == '\r'){
			
				suggestions[i] = suggestions[i].substr(1);
				
			}
			
			// need to test for productsets
			if (suggestions[i].substr(0,2) != '**'){
				words[words.length] = suggestions[i];
			} else {
				var temp = suggestions[i].substr(2);
				var starts = temp.lastIndexOf("**");
				var amount = temp.substr(0, starts);
				temp = temp.substr(starts+2);
				sets[sets.length] = temp.replace(exp, '<b><font color="red">' + temp.match(exp)+ '</font></b>') + ' (' + amount + ')';
			}
		}
	}
	words.sort();
	for (i=0;i< words.length; ++i){
		words[i] = words[i].replace(exp, '<b>' + words[i].match(exp) + '</b>');
	}
	sets.sort();
	return words;
}

function setColor (_posi, _color, _forg){
	outp.childNodes[_posi].style.background = _color;
	outp.childNodes[_posi].style.color = _forg;
}

function keygetter(event){
	if (!event && window.event) event = window.event;
	if (event) key = event.keyCode;
	else key = event.which;
}
	
function keyHandler(event){
	if (document.getElementById("searchShadow").style.visibility == "visible"){
		var textfield = document.getElementsByName("q")[0];
		if (key == 40){ //Key down
			if (words.length+sets.length > 0 && posi < words.length + sets.length){
				var oldposi = posi;
				if (posi == sets.length-1) {
					if (posi == -1 && sets.length == 0) posi = 0;
					else posi++;
					
				}
				if (oldposi >=0) setColor(oldposi, "#fff", "black");
				else input = textfield.value;
				setColor(++posi, "blue", "white");
				var currentText = jQuery(outp.childNodes[posi]).text();
				if (posi >= sets.length){
					if (posi != sets.length)
						textfield.value = currentText;
					else 	
						textfield.value = input;
				} else {
					currentText = currentText.substr(0,currentText.lastIndexOf("(")-1);
					textfield.value = currentText;
				}
				
			}
		}
		else if (key == 38){ //Key up
			if (words.length+sets.length > 0 && posi >= 0){
				var oldposi = posi;
				if (posi == sets.length+1) posi--;
				if (posi >=1){
					setColor(oldposi, "#fff", "black");
					setColor(--posi, "blue", "white");
					var currentText = jQuery(outp.childNodes[posi]).text();
					if (posi >= sets.length){
						if (posi != sets.length)
							textfield.value = currentText;
						else 	
							textfield.value = input;
					} else {
						currentText = currentText.substr(0,currentText.lastIndexOf("(")-1);
						textfield.value = currentText;
					}
				}
				else{
					setColor(posi, "#fff", "black");
					textfield.value = input;
					textfield.focus();
					posi--;
				}
			}
		}
		else if (key == 27){ // Esc
			textfield.value = input;
			setVisible("hidden");
			posi = -1;
			oldins = input;
		}
		else if (key == 8){ // Backspace
			posi = -1;
			oldins=-1;
		}
	}
}

var mouseHandler=function(){
	for (var i=0;i<words.length;++i)
		setColor (i, "white", "black");

	this.style.background = "blue";
	this.style.color= "white";
}

var mouseHandlerOut=function(){
	this.style.background = "white";
	this.style.color= "black";
}

var mouseClick=function(){
	document.getElementsByName("q")[0].value = jQuery(this).text();
	setVisible("hidden");
	posi = -1;
	oldins = jQuery(this).text();
	var form = document.getElementById("SimpleSearchForm");
	form.submit();
}

var mouseClickOnResult=function(){
	setVisible("hidden");
	document.getElementsByName("q")[0].value = input;
	
	posi = -1;
	oldins = jQuery(this).text();
	var form = document.getElementById("SimpleSearchForm");
	form.submit();
}

var mouseClickOnSet=function(){
	setVisible("hidden");
	
	var currentText = jQuery(this).text();
	currentText = currentText.substr(0,currentText.lastIndexOf("(")-1);
	document.getElementsByName("q")[0].value = currentText;
	
	posi = -1;
	oldins = currentText;
	var form = document.getElementById("SimpleSearchForm");
	form.submit();
}