var http_request = false;
var selectedSearchId = -1;
var searchResult = new Array();
var doSearch = true;
var searchInputId = false;
var domainname = document.domain;
var suggestid = "search_suggest";
var oldPrio = -1;

function createRequest() {
    try { // Mozilla, Safari, ...
        http_request = new XMLHttpRequest();
        http_request.overrideMimeType('text/xml');
    }
    catch (e) { // IE
        try {
            http_request = new ActiveXObject("MSXML2.XMLHTTP");
        }
        catch (e) {
            try {
                http_request = new ActiveXObject("Microsoft.XMLHTTP");
            }
            catch (e) {
                //alert('Doofer IE 7');
            }
        }
    }
}

function getSearchResult(inputid) {
    if (arguments.length > 2) {
        suggestid = arguments[2];
    }
    searchInputId = inputid;
    var input = UO(inputid).value;
    if (input.length > 0 && doSearch) {
        selectedSearchId = -1;
        createRequest();
        http_request.abort();
        http_request.open('POST', window.location.protocol + '//' + domainname + '/SearchHandler.ashx', true);
        http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
        input = postValidParam(input);
        http_request.send('z=' + input + additionalParameters(arguments[1]));
        http_request.onreadystatechange = fillInhalt;
    }
    else if (input.length == 0) {
        clearSuggest();
    }
}

function postValidParam(param) {
    if (!param || param.length == 0) {
        return param;
    }
    param = encodeURIComponent(param);
    param = param.replace(/\+/g, "%2b");
    param = param.replace(/\//g, "%2f");
    param = param.replace(/ä/gi, "%e4");
    param = param.replace(/ö/gi, "%f6");
    param = param.replace(/ü/gi, "%fc");

    return param;
}


function fillInhalt() {
    if (http_request.readyState == 4) {
        try {
            if (http_request.status == 200) {
                var childs = http_request.responseXML.getElementsByTagName('result');
                var count = http_request.responseXML.getElementsByTagName('resultCount');
                displaySuggest(childs, count);
            }
            else {
                alert("Fehler in der Anwendung! \n" + http_request.status + "\n" + http_request.statusText);
            }
        } catch (e) {
            http_request.abort();
        }
    }
}


function displaySuggest(result, resultCount) {
    var suggest = document.getElementById(suggestid);
    clearSuggest();
    if (result && result.length > 0) {
        searchResult = new Array();
        for (var i = 0; i < result.length; i++) {
            var oid = result[i].getAttribute("oid");
            var count = result[i].getAttribute("count");
            var prio = result[i].getAttribute("prio");
            var isdummy = result[i].getAttribute("isdummy");
            var priotext = "";
            if (prio && !isNaN(prio) && parseInt(prio, 10) < oldPrio && oldPrio != -1) {
                priotext = "_prio";
                oldPrio = -1;
            }
            else {
                oldPrio = parseInt(prio, 10);
            }
            var inner = "<div id=\"search_" + i + "\" ";
            inner += " onmouseout=\"suggestOut(this);\"";
            inner += "class=\"suggest_link" + priotext + "\"";
            inner += " onmouseover=\"suggestOver(this);\">";


            if (parseInt(count, 10) > 1) {
                // groupierte suche gefunden, IKK- spezifisch !!!!
                inner += "<a href=\"#\" onclick=\"setSearch(this.firstChild.nodeValue);redirectKeywordSearch(findForm(searchInputId));\">";
                inner += result[i].firstChild.nodeValue;
                inner += "</a>";
                inner += " <span style=\"color: #C0C0C0;text-decoration:none;\">(" + count + ")</span>"
            }
            else if (parseInt(oid, 10) > 0 && isdummy == "0") {
                // direktes ziel gefunden
                inner += "<a href=\"#\" onclick=\"setPage('" + oid + "');return false;\">";
                inner += result[i].firstChild.nodeValue;
                inner += "</a>";
            }
            else {
                // dummy-element ohne direktes ziel
                inner += "<a href=\"#\" onclick=\"UO(searchInputId).value = '" + result[i].firstChild.nodeValue + "';clearSuggest();UO_FindForm(searchInputId).submit();return false;\">";
                inner += result[i].firstChild.nodeValue;
                inner += "</a>";
            }

            inner += "</div>";
            searchResult[i] = "search_" + i;
            suggest.innerHTML += inner;
            suggest.className = "";
        }
        if (resultCount) {
            var value = resultCount[0].firstChild.nodeValue;
            var counter = parseInt(value, 10);
            if (counter > result.length) {
                var innerCount = "<div class=\"suggest_count\">";
                innerCount += "+ " + (counter - result.length) + " Ergebnisse";
                innerCount += "</div>";
                suggest.innerHTML += innerCount;
            }

        }
    }

}


//Mouse over function, IKK spezifisch
function suggestOver(div_value) {
    UO_ToggleCss(div_value, "suggest_link", "suggest_link_over", "suggest_link_prio", "suggest_link_over_prio");
}
//Mouse out function, IKK spezifisch
function suggestOut(div_value) {
    UO_ToggleCss(div_value, "suggest_link_over", "suggest_link", "suggest_link_over_prio", "suggest_link_prio");
}


//Click function
function setSearch(value) {
    document.getElementById(searchInputId).value = value;
    clearSuggest();
    return false;
}
function setPage(id) {
    var url = IstrBaseLink.replace("/0,", "/" + id + ",");
    window.location.href = url;
}
function clearSuggest() {
    if (UO(suggestid)) {
        UO(suggestid).innerHTML = '';
    }
}


function displayKeyCode(evt) {
    doSearch = true;
    var charCode = (evt.which) ? evt.which : event.keyCode;
    var divcontainer = document.getElementById(searchResult[selectedSearchId]);

    for (var i = 0; i < searchResult.length; i++) {
        suggestOut(document.getElementById(searchResult[i]));
    }

    if (charCode == 13) {
        //  enter 
        divcontainer = document.getElementById(searchResult[selectedSearchId]);
        if (divcontainer) {
            //            setSearch(divcontainer.firstChild.nodeValue);
            try {
                // IKK Specific
                var val = divcontainer.firstChild.getAttribute("onclick");
                var ar = val.split(";");
                if (ar.length > 0)
                    eval(ar[0]);
            }
            catch (e) {
                setSearch(divcontainer.firstChild.firstChild.nodeValue);
            }
            clearSuggest();
        }
    }
    if (charCode == 38) {
        // up arrow 
        selectedSearchId--;
        divcontainer = document.getElementById(searchResult[selectedSearchId]);
        if (divcontainer) {
            suggestOver(divcontainer);
        }
        else {
            selectedSearchId = -1;
        }
        doSearch = false;
    }
    if (charCode == 40) {
        // down arrow 
        selectedSearchId++;
        if (selectedSearchId >= searchResult.length) {
            selectedSearchId--;
        }
        divcontainer = document.getElementById(searchResult[selectedSearchId]);
        if (divcontainer) {
            suggestOver(divcontainer);
        }
        doSearch = false;
    }
    if (charCode >= 14 && charCode <= 45) {
        // control chars
        doSearch = false;
    }
    if (charCode == 27) {
        // escape
        clearSuggest();
    }

    return false;
}


// ikk special functions
function additionalParameters(elementid) {
    var value = document.getElementById(elementid);
    return value.value;
}

// findet anhand der id eines elements das passende formular
function findForm(elementName) {
    var formulare = document.getElementsByTagName("form");
    var name = document.getElementById(elementName).name;
    for (var i = 0; i < formulare.length; i++) {
        for (var t = 0; t < formulare[i].elements.length; t++) {
            if (formulare[i].elements[t].name == name) {
                return formulare[i];
                break;
            }
        }
    }
    return false;
}