﻿document.observe("dom:loaded", function() {
	// Variablen füllen
	var sField = $('livesuche');
	// Ergebnislistenfeld
	var ul = new Element('ul');
	ul.setAttribute('id', 'suchergebnis');
	$('submit').insert({ after: ul });
	var eListe =  ul; //$('suchergebnis');
	// Leere Liste verstecken
	eListe.hide();
	var aktListElement = -1;
	// Autocomplete ausschalten
	//sField.setAttribute('autocomplete', 'off');
	// ARIA Eigenschaften Suchfeld
	sField.setAttribute('aria-autocomplete', 'list');
	sField.setAttribute('aria-controls', 'suchergebnis');
	sField.setAttribute('aria-owns', 'suchergebnis');
	// ARIA Eigenschaften Vorschlagsliste
	eListe.setAttribute('aria-live', 'polite');
	eListe.setAttribute('role', 'list');
	// Tastatureingaben überwachen
	sField.observe('keyup', function(e)
	{
		var val = sField.getValue();
		if (val.length>0)
		{
			// Tastatureingaben im Suchergebnis
			if (!eListe.empty()) { if(checkKeyInput(e.keyCode)) { return; } }
			// Ergebnis leeren
			eListe.update();
			// Ajax Request starten
			new Ajax.Request('suche.php', {
				method: 'post',
				parameters: { key: val },
				onSuccess: function(transport) {
					// JSON-Objekt erzeugen
					var json = transport.responseText.evalJSON();
					var hits = json.length;
					// Falls treffern vorhanden sind
					if (hits > 0) {
						// Auswahlliste erzeugen
						json.each(function(i,index) {
							var li = new Element('li').update(i.name);
							li.setAttribute('role', 'itemlist');
							li.observe('click', function() { 
								sField.setValue(this.innerHTML); 
								eListe.hide();
							});
							eListe.insert(li);
						});
						eListe.show();
					}
				}
			});
		}
	});
	// Dokumentclick überwachen
	document.observe('click', function(e)
	{ 	
		var el = $$('#suche *');
		var ee = Event.element(e);
		var ei = Event.element(e).id;
		// Wenn kein Suchelement dann alles schließen
		if (ei!="livesuche"&&ei!="suchergebnis"&&ei!="infobox"&&ee!=el[0]&&ee!=el[1]&&ee!=el[2]) {
			eListe.hide();			
		}
	});
	// Tastatureingabe im Suchfeld
	var checkKeyInput = function(keyCode) {
		if(keyCode == Event.KEY_DOWN || keyCode == Event.KEY_UP || keyCode == Event.KEY_RIGHT || keyCode == Event.KEY_ESC) {
			// Variablen
			var len = $$('#suchergebnis li').length;
			var lis = $$('#suchergebnis li');
			// ESC schließt die Liste
			if(keyCode == Event.KEY_ESC) {
				eListe.hide();
				return true;							
			}
			// Rechte Pfeiltaste
			if(keyCode == Event.KEY_RIGHT) {
				sField.setValue(lis[aktListElement].innerHTML);	
				eListe.hide();
				return true;							
			}
			// Pfeiltaste nach oben/unten
			if(keyCode == Event.KEY_UP ) {
				if(aktListElement == 0 || aktListElement == -1) {
					aktListElement = len-1;
				} else {
					aktListElement--;
				}
			} else {
				if(aktListElement == len-1) {
					aktListElement = 0;
				} else {
					aktListElement++;
				}
			}
			// Auswahl in Ergebnis markieren
			lis.each(function(e,i) {
				if (i == aktListElement)  { 
					e.addClassName('active');
					sField.setValue(e.innerHTML);  
				} else { 
					e.removeClassName('active'); 
				}
			});
			// Funktion verlassen
			return true;
		} else {
			// Zähler zurück setzen
			aktListElement = -1;
			return false;
		}
	}
});
