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 = document.getElementById(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 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 {
			    // direktes ziel gefunden
			    inner += "<a href=\"#\" onclick=\"setPage('" + oid + "');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(){
    document.getElementById(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;
}