var searchMediaLibrary, searchMediaLibrarySuggestion;
function pageLoad() {
    searchMediaLibrary = $get('searchMediaLibrary');
    searchMediaLibrarySuggestion = $get('searchMediaLibrarySuggestion');
    var seperator = $get('seperator');
    $addHandler(searchMediaLibrary, "keyup", function(eventElement) {
        /*38 up 40 down*/
        if (eventElement.keyCode == Sys.UI.Key.down) {
            if (!Sys.UI.DomElement.containsCssClass(searchMediaLibrarySuggestion, 'searchMediaLibrarySuggestionHide')) {
                var produktList = searchMediaLibrarySuggestion.getElementsByTagName('a');
                if (produktList.length > 0) {
                    produktList[0].focus();
                    Sys.UI.DomElement.addCssClass(produktList[0].parentNode, 'selected');
                }
            }
        } else if (searchMediaLibrary.value.length > 1) {
            var wRequest = new Sys.Net.WebRequest();
            wRequest.set_url('/Projects/Default/Modules/public/redCMS_MediaLibrary3/ASPX/synonyms.aspx?searchMediaLibrary=' + searchMediaLibrary.value + '&amp;seperator=' + seperator.value);
            wRequest.set_httpVerb("POST");
            wRequest.add_completed(OnWebRequestCompleted);
            wRequest.invoke();
        } else {
            searchMediaLibrarySuggestion.innerHTML = '';
            Sys.UI.DomElement.addCssClass(searchMediaLibrarySuggestion, 'searchMediaLibrarySuggestionHide');
        }
    });
    $addHandler(searchMediaLibrarySuggestion, "click", function() {
        Sys.UI.DomElement.addCssClass(searchMediaLibrarySuggestion, 'searchMediaLibrarySuggestionHide');
    }
    );
    $addHandler(searchMediaLibrarySuggestion, "keydown", function(eventElement) {
        if (eventElement.keyCode == Sys.UI.Key.down) {
            elementSelected = false;
            var produktList = searchMediaLibrarySuggestion.getElementsByTagName('a');
            Array.forEach(produktList, SelectNextItem, eventElement);
        }
    }
    );
    $addHandler(searchMediaLibrarySuggestion, "keydown", function(eventElement) {
        if (eventElement.keyCode == Sys.UI.Key.up) {
            elementSelected = false;
            var produktList = searchMediaLibrarySuggestion.getElementsByTagName('a');
            Array.forEach(produktList, SelectPrevItem, eventElement);
        }
    }
    );
}

function OnWebRequestCompleted(executor, eventArgs) {
    if (executor.get_responseAvailable()) {
        var synonyms = executor.get_responseData();
        if (document.all) {
            var xmlobject = new ActiveXObject("Microsoft.XMLDOM");
            xmlobject.async = "false";
            xmlobject.loadXML(synonyms);
        } else {
            var xmlobject = (new DOMParser()).parseFromString(synonyms, "text/xml");
        }

        var produktList = xmlobject.getElementsByTagName('produkt');
        if (produktList.length > 0) {
            searchMediaLibrarySuggestion.innerHTML = '';
            Array.forEach(produktList, AppendItem);
            Sys.UI.DomElement.removeCssClass(searchMediaLibrarySuggestion, 'searchMediaLibrarySuggestionHide');            
        }
    }
}

var elementSelected = true;
function SelectNextItem(element, index, array) {
    if (!elementSelected && Sys.UI.DomElement.containsCssClass(element.parentNode, 'selected') && (index + 1) < array.length) {
        Sys.UI.DomElement.removeCssClass(element.parentNode, 'selected');
        Sys.UI.DomElement.addCssClass(array[index + 1].parentNode, 'selected');
        array[index + 1].focus();
        elementSelected = true;
    }
}

function SelectPrevItem(element, index, array) {
    if (!elementSelected && Sys.UI.DomElement.containsCssClass(element.parentNode, 'selected') && index > 0) {
        Sys.UI.DomElement.removeCssClass(element.parentNode, 'selected');
        Sys.UI.DomElement.addCssClass(array[index - 1].parentNode, 'selected');
        array[index - 1].focus();
        elementSelected = true;
    } else if (!elementSelected && Sys.UI.DomElement.containsCssClass(element.parentNode, 'selected') && index == 0) {
        Sys.UI.DomElement.removeCssClass(element.parentNode, 'selected');
        elementSelected = false;
        searchMediaLibrary.focus();
    }
}

function AppendItem(element, index, array) {
    var listItem = document.createElement("li");
    var listItemWord = document.createElement("a");
    listItemWord.setAttribute('href', 'javascript:InsertProduct(\'' + element.firstChild.nodeValue + '\');');
    listItemWord.innerHTML = element.firstChild.nodeValue.replace(eval('/' + searchMediaLibrary.value + '/gi'), '<span>' + searchMediaLibrary.value + '</span>');
    listItem.appendChild(listItemWord);
    searchMediaLibrarySuggestion.appendChild(listItem);
    listItem = null;
}

function InsertProduct(product) {
    searchMediaLibrary.value = product;
}