/*
        auto_complete.js
        Babiel GmbH, 2008
        */
        // Formular Settings
        var formWrapper         = "suchfeld";               // id des Wrappers, der um das <form> liegt
        var formName            = "volltextsucheform";
        var inputId             = "query";                  // id des <input> Tags
        var minInputs           = 3;                        // Mindestmenge Eingabe Zeichen
        
        // Hole Ajax Ergebnisse von
        var target              = "/autoComplete.do";       // Ziel
        var param               = "?searchString=";         // übergebener Param
        var sendMethod          = "GET";                    // Send Methode
        
        // Ergebnisbox
        var cssClassergebnisBox = "autoCompleteErgebnis";   // CSS KLassenNamen für Ergebnisbox
        var ajaxResult          = "autoCompleteResult";     // div id der Ajax Ergbnisbox
        var ajaxBgColor         = "white";                  // BGColor der Ergebnisbox
        var ajaxBgHover         = "#efefef";                // BgColor der Ergebnisbox bei Hover
        var ajaxBorderH         = "1px solid #b5b7c6";      // Border des Hovers bei Hover
        var ajaxBorderB         = "1px solid white";        // Border des Hovers bei Blur
        
        
        //-------------------------------------do not edit---
        
        // Dyn. Anlegen von Div
        function createDiv(name,content)
        {
            var ni              = document.getElementById(formWrapper);
            var pc              = document.createElement('div');
                pc.innerHTML    = content;                      
                pc.setAttribute('id',name);
                pc.setAttribute('name',name);
                ni.appendChild(pc);
                pc.style.display = 'none';
        }
        

        function autocompleteOff()
        {
            if (document.getElementById(inputId))
            {
                var target = document.getElementById(inputId);
                    target.setAttribute("autoComplete","off");
            }
        }
        
        // Lege Div an
        createDiv(ajaxResult,"");
        
        // setze autocomplete auf off
        autocompleteOff();
        
        // Ajax Vars
        var XMLHTTP = null;
        var pc1     = -1;
        var pc2     = -1;
        var exit    = -1;
        var check;
        var keycode;
        
        // Ueberwache Tastatureingaben
        function checkKeycode(f)
        {
            if (f == null)  {keycode = event.keyCode;}  // ie
            else            {keycode = f.which;}        // mozilla   
            
            if (keycode == 13) // Enter Taste
            {
                checkAjaxInputs();
            }
        }
        
        // Ajax Objekt ansprechbar machen
        if	(window.XMLHttpRequest)	    {XMLHTTP = new XMLHttpRequest();}
        else if (window.ActiveXObject)	{try{XMLHTTP = new ActiveXObject("Msxml2.XMLHTTP");}catch (ex){try{XMLHTTP = new ActiveXObject("Microsoft.XMLHTTP");} catch (ex) {}}}
        
        // Ajax Callback Funktion
        function DatenAusgeben()
        {
            
            if (XMLHTTP.readyState == 4 && XMLHTTP.status == 200) // Ajax Response muss vorliegen und der Response muss OK sein
            {
                var d = document.getElementById(ajaxResult);
                d.innerHTML = ""; // div Container leeren
        
                // Parsen des XML Ajax Ergebnisses
                var xml = XMLHTTP.responseXML;
        	    
                // Nur anzeigen, wenn auch Eingaben vorliegen
                if(xml.getElementsByTagName('value').item(0))
                {
                    // Feststellen wieviel Childs existieren
                    anzahlItems = xml.getElementsByTagName('value').length; 
        
                    // ErgebnisBox anzeigen
                    d.style.display = 'block';
        
                    // Durchlaufe Childs
                    for (var i=0; i < anzahlItems; i++)
                    {
                        var root_node = xml.getElementsByTagName('value').item(i);
                        var answer = root_node.firstChild.data;
        
                        if(d.innerHTML != answer)
                        {
                            
                            // Baue die Links in der ErgebnisBox.
                            d.innerHTML += "<a id='"+i+"' class='"+cssClassergebnisBox+"' href='#' onclick='javascript:klickOnTarget("+i+");return false;'>" + answer.toLowerCase() + "</a>";
                        }
                        else{d.innerHTML = "";}       
                    }
                }
                else
                {
                    // Ausschalten
                    d.style.display = 'none';
                }
            }
        }
        
        // Starte Auto Complete
        function getSearchResults()
        {
            // Tastatur Abfrage
            document.onkeydown = checkKeycode;
            check = document.getElementById(inputId).value;
            
            // Nur wenn Mindestanforderung eingegebener Zeichen erfuellt
            if (check.length >= minInputs) 
            {
                // Es werden die Pfeiltasten bewegt
                if(keycode == 40) // pfeil runter (+)
                {
                    // wert ermitteln
                    var c = pc1;
                    // alte stelle loeschen
                    if(c >= 0)
                    {
                        document.getElementById(c).style.backgroundColor = ajaxBgColor;
                        document.getElementById(c).style.borderTop = ajaxBorderB;
                        document.getElementById(c).style.borderBottom = ajaxBorderB;
                    }
                    
                    // neue stelle hovern
                    c++; if(exit==1){exit=-1;c = 0;}
                    if(c >= (anzahlItems)){c = 0;}
                    if (document.getElementById('autoCompleteResult').innerHTML != "") // nur wenn ergebnuisse da sind, was anzeigen
                    {
                        document.getElementById(c).style.backgroundColor = ajaxBgHover;
                        document.getElementById(c).style.borderTop = ajaxBorderH;
                        document.getElementById(c).style.borderBottom = ajaxBorderH;
                        pc1 = c;
                        pc2 = document.getElementById(c).innerHTML;
                    }
                }
                else if(keycode == 38) // pfeil rauf (-)
                {
                    // wert ermitteln
                    var c = pc1;
                    // alte stelle lÃ¶schen
                    if(c >= 0){
                    document.getElementById(c).style.backgroundColor = ajaxBgColor;
                    document.getElementById(c).style.borderTop = ajaxBorderB;
                    document.getElementById(c).style.borderBottom = ajaxBorderB;
                    }
                    
                    // neue stelle hovern
                    c--;
                    if(c < 0)
                    {
                        c = 0;
                        exit=1;
                        document.getElementById('query').focus();
                    }
                    else{exit=-1;}
                    
                    if(exit != 1)
                    {
                        document.getElementById(c).style.backgroundColor = ajaxBgHover;
                        document.getElementById(c).style.borderTop = ajaxBorderH;
                        document.getElementById(c).style.borderBottom = ajaxBorderH;            
                        pc1 = c;
                        pc2 = document.getElementById(c).innerHTML;
                    }
                }
                else if (keycode == 13){checkAjaxInputs();} // Enter Taste
            	else
            	{
        		     // Ajax Request nur bei aA-zZ, 0-9, Enter, Backspace und Sonderzeichen.
                    if ( (keycode==8 || keycode==32 || keycode > 36) && !(keycode==45 || keycode==46 || keycode==93 || keycode==144) )
                    {
                        delete keycode;
                		pc1     = -1;
                        pc2     = -1;
                        getThem();
                    }
            	}
                if(typeof keycode == "undefined"){getThem();}
            }
            else {document.getElementById(ajaxResult).style.display = "none";} // ErgebnisBox ausblenden
        }
        
        // Hole Ergebnisse 
        function getThem()
        {
            // Wenn keine Pfeiltasten bewegt werden, dann wird eine Eingabe gemacht: Lade also per Ajax neue Ergebnisse. Baue HTTP Statement
        	XMLHTTP.open(sendMethod, target + param + document.getElementById(inputId).value);
        	
        	// Uebergebe Ergebnisse an Callback Funktion
        	XMLHTTP.onreadystatechange = DatenAusgeben;
        	XMLHTTP.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        	
        	// Sende HTTP Request
        	XMLHTTP.send(null); // null f. FF
        }
        
        // Verwalte Mausklicks auf angezeigte Ergebnisse
        function klickOnTarget(i)
        {
            document.getElementById(inputId).value = document.getElementById(i).innerHTML;
            document.getElementById(ajaxResult).style.display = "none";
            checkAjaxInputs();
        }
        
        // pruefe, welcher Wert uebergeben werden muss:
        // der Eingebenene aus dem <input> Feld oder der AusgewÃ¤hlte aus der Ajax PullDownBox
        function checkAjaxInputs()
        {
            if ( (exit == -1) &&  (pc2 != -1) ){document.getElementById(inputId).value = pc2;}
            document.getElementById(ajaxResult).style.display = 'none';
            if (document.forms[formName]){document.forms[formName].submit();}
            if (document.forms["SearchFormBean"]){document.forms["SearchFormBean"].submit();}
        }
