// XmlHttpRequest Object und so
function getXmlHttpRequestObject() {
    if (window.XMLHttpRequest) {
        return new XMLHttpRequest();
    } else if(window.ActiveXObject) {
        return new ActiveXObject("Microsoft.XMLHTTP");
    } else {
        return null;
    }
}
// Zur Unterscheidung ob man irgendwo hin geklickt hat beim blur oder in die liste
var flagg = false;
// Mouse over
function suggestMouseOver(div_value) {
    div_value.className = 'suggest_link_over';
    flagg = true;
}
// Mouse out
function suggestMouseOut(div_value) {
    div_value.className = 'suggestLink';
    flagg = false;
}
// Click function
function setSearch(value) {
    if(value == 'erweiterte Suche'){
        $("#frmSearch").attr("action","/superSuche");
    }
    value = value.replace("<strong>", "");
    value = value.replace("</strong>", "");
    value = value.replace("<STRONG>", "");
    value = value.replace("</STRONG>", "");
    $("#txtSearch").val(value);
}
/**
 *
 */
function sendForm(){
    $("#frmSearch").submit();
}
var tempSavedTrigger = false;
// Such Vorschlags Div schließen und Ergebnis zwischenspeichern
function closeSearch(){
    if(!flagg){ // ganzn normal die suche ausblenden
        var ss = document.getElementById('search_suggest');
        ss.style.visibility = 'hidden';
        tempSavedTrigger = true;
    }
    else {
        var element = getElementsByName("innerSuggestion");

        setSearch(element.innerHTML);
    }
}
// Suchfenster anhand der zwischengespeicherten Ergebnise wieder einspielen
function reloadSearch(){
    if(tempSavedTrigger){
        var ss = document.getElementById('search_suggest');
        ss.style.visibility = 'visible';
    }
}
// Das XmlHttpRequest object
var searchReq = getXmlHttpRequestObject();
var counter = 0;
/**
 * 
 */
function onKeyDown(event){
    var keycode;
    if(window.event) {
        keycode = window.event.keyCode;
    }
    else if(event) {
        keycode = event.which;
    }
    else {
        return;
    }
    var ele = document.getElementById("search_suggest");

    if(keycode == 38){     // pfeil hoch
//        console.log("up"+counter);
        
        
        if(counter-2 >= 0) {
            setSearch(ele.childNodes[counter-2].innerHTML);     // keine ahnung warum ich zwei abziehen muss
            suggestMouseOver(ele.childNodes[counter-2]);
            if(counter-1 < ele.childNodes.length) {
                suggestMouseOut(ele.childNodes[counter-1]);
            }
            counter--;
        }
        else {  // durchscrollen vom obersten zum untersten
//            counter = ele.childNodes.length-3;
//            setSearch(ele.childNodes[counter].innerHTML);     // keine ahnung warum ich zwei abziehen muss
//            suggestMouseOver(ele.childNodes[counter]);
//            if(counter-1 < ele.childNodes.length) {
//                suggestMouseOut(ele.childNodes[counter-1]);
//            }
//            counter--;
        }
    }
    else if(keycode == 40){     // pfeil runter
        setSearch(ele.childNodes[counter].innerHTML);
        if(counter >= 0 && counter < ele.childNodes.length) {
            suggestMouseOver(ele.childNodes[counter]);
            if(counter-1 >= 0) {
                suggestMouseOut(ele.childNodes[counter-1]);
            }
            counter++;
        }
    }
    else {
        counter = 0;
        searchSuggestion();
    }
}

// Gibt die Liste mit den Vorschlägen aus
function handleSearchSuggest() {
    if (searchReq.readyState == 4) {
        var ss = document.getElementById('search_suggest');
        ss.style.visibility = 'visible';
        ss.innerHTML = '';
        var suggest = '';
        var firstPart = '';
        var lastPart = '';

        var resultArray = searchReq.responseText.split("\n");
        var resultArrayLength = resultArray.length;
        var keyword = document.getElementById('txtSearch').value;
        var keywordLength = keyword.length;

        for(i=0; i < resultArrayLength - 1; i++) {
            firstPart = resultArray[i].substr(0, keywordLength);
            lastPart = resultArray[i].substr(keywordLength);

            suggest = '<div name="innerSuggestion" onmouseover="javascript:suggestMouseOver(this);" ';
            suggest += 'onmouseout="javascript:suggestMouseOut(this);" ';
            suggest += 'onclick="javascript:setSearch(this.innerHTML);sendForm();" ';
            suggest += 'class="suggestLink"><strong>' + firstPart + '</strong>' + lastPart + '</div>';
            ss.innerHTML += suggest;
        }
        
        suggest = '<div name="innerSuggestion" onmouseover="javascript:suggestMouseOver(this);" ';
        suggest += 'onmouseout="javascript:suggestMouseOut(this);" ';
        suggest += 'onclick="javascript:window.location.href=\'/superSuche\';" ';
        suggest += 'class="suggestLink" style="color:red;border-top-width: 1px; border-bottom-width: 1px;">erweiterte Suche</div>';
        ss.innerHTML += suggest;
    }
}
// Hauptfunktion, startet den AJAX Request
function searchSuggestion() {                 // sonst
        var search = document.getElementById("txtSearch");
        if ((searchReq.readyState == 4 || searchReq.readyState === 0) && search.value.length>2) {
            var str = escape(document.getElementById('txtSearch').value);
            searchReq.open("GET", '/plugins/suggest.php?search=' + str, true);
            searchReq.onreadystatechange = handleSearchSuggest;
            searchReq.send(null);
        }
        else if(search.value.length<3){
            closeSearch();
        }
}
