var url='../fliesen/ftsearch.php?seek=';
var min_seek=1;
var max_results=10;
var separator='\r\n';
var div_container = "suggcontainer";
var div_suggestions = "suggestions";
var div_input="searchinput";
var color_selected_bg='#fb862f';
var color_selected_fg='#ffffff';
var color_unselected_bg='#ffffff';
var color_unselected_fg='#000000';
var size_height=12;
var size_space=3;
var size_total=size_height+size_space+size_space;
var size_header = 30;
var size_footer = 40;

function s$(e){if(typeof e=='string')e=document.getElementById(e);return e};
function collect(a,f){var n=[];for(var i=0;i<a.length;i++){var v=f(a[i]);if(v!=null)n.push(v)}return n};

ajax={};
ajax.x=function(){try{return new ActiveXObject('Msxml2.XMLHTTP')}catch(e){try{return new ActiveXObject('Microsoft.XMLHTTP')}catch(e){return new XMLHttpRequest()}}};
ajax.serialize=function(f){var g=function(n){return f.getElementsByTagName(n)};var nv=function(e){if(e.name)return encodeURIComponent(e.name)+'='+encodeURIComponent(e.value);else return ''};var i=collect(g('input'),function(i){if((i.type!='radio'&&i.type!='checkbox')||i.checked)return nv(i)});var s=collect(g('select'),nv);var t=collect(g('textarea'),nv);return i.concat(s).concat(t).join('&');};
ajax.send=function(u,f,m,a){var x=ajax.x();x.open(m,u,true);x.onreadystatechange=function(){if(x.readyState==4)f(x.responseText)};if(m=='POST')x.setRequestHeader('Content-type','application/x-www-form-urlencoded');x.send(a)};
ajax.get=function(url,func){ajax.send(url,func,'GET')};
ajax.gets=function(url){var x=ajax.x();x.open('GET',url,false);x.send(null);return x.responseText};
ajax.post=function(url,func,args){ajax.send(url,func,'POST',args)};
ajax.update=function(url,elm){var e=s$(elm);var f=function(r){e.innerHTML=r};ajax.get(url,f)};
ajax.submit=function(url,elm,frm){var e=s$(elm);var f=function(r){e.innerHTML=r};ajax.post(url,f,ajax.serialize(frm))};

var pos = 0;
var count = 0;
document.onclick = function () { closechoices(); };


function noenter(key) {
	suggcont = document.getElementById(div_container);
	if (suggcont.style.display == "block") {
		if (key == 13) {
			choiceclick(document.getElementById(pos));
			return false;
		} else {
			return true;
		}
	} else {
		return true;
	}
}

function suggest(key,query) {
	if (key == 38) {
		goPrev();
	} else if (key == 40) {
		goNext();
	} else if (key != 13) {
		if (query.length > min_seek) {
			t = new Date();
			ajax.get(url+query+'&nocache='+t.getTime(),update);
		} else {
			update('');
		}
	}
}

function update(result) {
	arr = new Array();
	arr = result.split(separator);

	if (arr.length > max_results) {
		count = max_results;
	} else {
		count = arr.length-1;
	}

	var elemSug = document.getElementById(div_suggestions);
	var elemCon = document.getElementById(div_container);
	
	if (arr[0].length > 0) {
		elemCon.style.display = "block";
		elemSug.innerHTML = '';
		elemSug.style.height = (( count * size_total )+size_header+size_footer) + "px";
		elemSug.style.width = elemCon.style.width;
		addHeader ( elemSug );
		for (i = 1; i <= count; i++) {
			var elem = document.createElement("div");
			elemSug.appendChild(elem);
			elem.id = i;
			elem.style.height = size_height+"px";
			elem.style.padding = size_space+"px";
			elem.onmouseover = function() { select(this,true); };
			elem.onmouseout = function() { unselect(this,true); };
			elem.onclick = function() { choiceclick(this); };
			elem.innerHTML = arr[i-1];
		}
		addFooter( elemSug );
	} else {
		elemCon.style.display = "none";
		count = 0;
	}
}
function addHeader( pParent ){
	var elem = document.createElement("div");
	pParent.appendChild(elem);
	elem.id = "suggheader1";
	elem.style.height = size_height+"px";
	elem.style.padding = size_space+"px";
	//elem.onmouseover = function() { select(this,true); };
	//elem.onmouseout = function() { unselect(this,true); };
	//elem.onclick = function() { choiceclick(this); };
	elem.innerHTML = "<center><span id='suchvorschlag'>Suchvorschläge</span></center>";
		var elem = document.createElement("div");
	pParent.appendChild(elem);
	elem.id = "suggheader2";
	elem.style.height = size_height+"px";
	elem.style.padding = size_space+"px";
	//elem.onmouseover = function() { select(this,true); };
	//elem.onmouseout = function() { unselect(this,true); };
	//elem.onclick = function() { choiceclick(this); };
	elem.innerHTML = "<hr/>";
}
function addFooter( pParent ){
	var elem = document.createElement("div");
	pParent.appendChild(elem);
	elem.id = "suggfooter1";
	elem.style.height = size_height+"px";
	elem.style.padding = size_space+"px";
	//elem.onmouseover = function() { select(this,true); };
	//elem.onmouseout = function() { unselect(this,true); };
	//elem.onclick = function() { choiceclick(this); };
	elem.innerHTML = "<hr/>";
	var elem = document.createElement("div");
	pParent.appendChild(elem);
	elem.id = "suggfooter2";
	elem.style.height = size_height+"px";
	//elem.style.padding = size_space+"px";
	//elem.onmouseover = function() { select(this,true); };
	//elem.onmouseout = function() { unselect(this,true); };
	elem.onclick = function() { closeSuggestion(this); };
	elem.innerHTML = '<center><span id="suchenschliessen">Schliessen</span></center>';
}
function closeSuggestion(){
var elemCon = document.getElementById(div_container);
elemCon.style.display = "none";
}
function select(obj,mouse) {
	obj.style.backgroundColor = color_selected_bg;
	obj.style.color = color_selected_fg;
	if (mouse) {
		pos = obj.id;
		unselectAllOther(pos);
	}
}

function unselect(obj,mouse) {
	obj.style.backgroundColor = color_unselected_bg;
	obj.style.color = color_unselected_fg;
	if (mouse) {
		pos = 0;
	}
}

function goNext() {
	if (pos <= count && count > 0) {
		if (document.getElementById(pos)) {
			unselect(document.getElementById(pos));
		}
		pos++;
		if (document.getElementById(pos)) {
			select(document.getElementById(pos));
		} else {
			pos = 0;
		}
	}
}

function goPrev() {
	if (count > 0) {
		if (document.getElementById(pos)) {
			unselect(document.getElementById(pos));
			pos--;
			if (document.getElementById(pos)) {
				select(document.getElementById(pos));
			} else {
				pos = 0;
			}
		} else {
			pos = count;
			select(document.getElementById(count));
		}
	}
}

function choiceclick(obj) {
	document.getElementById(div_input).value = obj.innerHTML;
	count = 0;
	pos = 0;
	var elem = document.getElementById(div_container);
	elem.style.display = "none";
	document.getElementById(div_input).focus();
}

function closechoices() {
	var elem = document.getElementById(div_container);
	if (elem.style.display == "block") {
		count = 0;
		pos = 0;
		elem.style.display = "none";
	}
}

function unselectAllOther(id) {
	var elem;
	for (var i = 1; i <= count; i++) {
		if (i != id) {
			elem = document.getElementById(i);
			elem.style.backgroundColor = color_unselected_bg;
			elem.style.color = color_unselected_fg;
		}
	}
}

