var http_request = false;
var selectedSearchId = -1;
var searchResult = new Array();
var doSearch = true;
var searchInputId = false;
var domainname = document.domain;

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 ){
    
    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 + '/Search.ashx', true);
        http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
        input = postValidParam(input);
        http_request.send('z=' + input );
        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('search_suggest');
    clearSuggest();
    if( result && result.length > 0 ){
        searchResult = new Array();
        for( var i = 0; i < result.length; i++ ){
            var inner = "<div id=\"search_"+ i + "\" ";
			inner += " onmouseout=\"suggestOut(this);\"";
			inner += " onclick=\"setSearch(this.innerHTML);RunSearch('suche', 'bestellbez', 'Z')\" ";
			inner += "class=\"suggest_link\" onmouseover=\"suggestOver(this);\">";
			inner += result[i].firstChild.nodeValue;
			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);
                innerCount += "</div>";
                suggest.innerHTML += innerCount;
            }
            
        }
    }
    
}


//Mouse over function
function suggestOver(div_value) {
    if( div_value )
	    div_value.className = 'suggest_link_over';
}
//Mouse out function
function suggestOut(div_value) {
    if( div_value )
	    div_value.className = 'suggest_link';
}


//Click function
function setSearch(value) {
	document.getElementById(searchInputId).value = value;
	clearSuggest();
}

function clearSuggest(){
    document.getElementById('search_suggest').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 );
            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;
}
