﻿var localData, pos, inputText = '', inputChanged, defaultCssClass;
var autoCompleteDataArr = new Array();

function AutoCompleteData(id, divId, buttonId, css, prefix) {
    this.Id = id;
    this.SearchDivId = divId;
    this.SendButtonId = buttonId;
    this.HighlightedHrefCssClass = css;
    this.SearchPrefixLength = prefix;
}

function Data(Item, Target) {
    this.Item = Item;
    this.Target = Target;
}

function AutoComplete(searchString) {
    var parent = localData.Item.parentNode;

    if (searchString.length < 1) {
        hide(localData.Target);
        return;
    }
    var tragetItem = document.getElementById(localData.Target);

    tragetItem.style.visibility = 'visible';
    tragetItem.innerHTML = searchString;
}

function hide(target) {
    var item = document.getElementById(target);
    item.innerHTML = '';
    item.style.visibility = 'hidden';
}

function findData(itemId) {
    for (i = 0; i < autoCompleteDataArr.length; i++) {
        if (itemId == autoCompleteDataArr[i].Id) {
            return autoCompleteDataArr[i];
        }
    }
}

function clickOn(item) {
    if (item.dispatchEvent) {
        var e = document.createEvent("MouseEvents");
        e.initEvent("click", true, true);
        item.dispatchEvent(e);
    }
    else {
        item.click();
    }
}

function AutoCompleteSearch(event) {

    if (!event) event = window.event;
    
    
    var item = event.srcElement || event.target;
    var data = findData(item.id);
//    for (i = 0; i < autoCompleteDataArr.length; i++) {
//        if (item.id == autoCompleteDataArr[i].Id) {
//            data = autoCompleteDataArr[i];
//        }
//    }

    
    if (event.which || event.keyCode) {
        if ((event.which == 13) || (event.keyCode == 13)) {
              
            if (inputChanged)
                document.getElementById(data.SendButtonId).click();
            else {
                var divArray = document.getElementById(data.SearchDivId).getElementsByTagName('a');
                //divArray[pos].click();
                clickOn(divArray[pos]);
            }
        }
    }

    if (MoveFocus(item, event, data.SearchDivId, 'a', data.HighlightedHrefCssClass))
        return;

    inputChanged = true;
    pos = -1;
    var searchArg = item.value;

    if (searchArg.length < data.SearchPrefixLength) {
        hide(data.SearchDivId);
        return;
    }
    
    localData = new Data(item, data.SearchDivId);
    WebForm_DoCallback(item.name, searchArg, AutoComplete, "", null, false);
    return;
}


function CheckEnter(event) {
    if (event.which || event.keyCode) {
        if ((event.which == 13) || (event.keyCode == 13)) {
            return false;
        }
    }
    return true;
}

function SetFocus(event) {
    
    if (!event) event = window.event;
    var item = event.srcElement || event.target;
    
    var data = findData(item.parentNode.id.replace('search_', ''));

    var divArray = item.parentNode.getElementsByTagName('a');
    FindDefaultCssClass(divArray);
    for (i = 0; i < divArray.length; i++) {
        divArray[i].className = defaultCssClass;

        if (item == divArray[i])
            pos = i;
    }
    item.className = data.HighlightedHrefCssClass;
    document.getElementById(data.Id).value = item.innerHTML;
}

//function SetFocus(sender, containerId, cssClass, targetId) {
//    var divArray = document.getElementById(containerId).getElementsByTagName('a');
//    FindDefaultCssClass(divArray);
//    for (i = 0; i < divArray.length; i++) {
//        divArray[i].className = defaultCssClass;

//        if (sender == divArray[i])
//            pos = i;
//    }
//    sender.className = cssClass;
//    document.getElementById(targetId).value = sender.innerText;
//}

function FindDefaultCssClass(elements) {
    for (i = 0; i < elements.length; i++) {
        if (defaultCssClass == elements[i].className) {
            return;
        }
        defaultCssClass = elements[i].className;  
    }
}

function MoveFocus (sender, event, parentContainer, htmlTag, cssClass) {
    
    var focusMoved = false;
    //event = event || window.event;
    //var divArray = parentContainer.getElementsByTagName(htmlTag);
    var divArray = document.getElementById(parentContainer).getElementsByTagName(htmlTag);
    

    if (divArray.length == 0) return;
    FindDefaultCssClass(divArray);

    if (inputChanged)
        inputText = sender.value;

    if (event.keyCode == 40) {
        inputChanged = false;
        focusMoved = true;
        pos++;

        if (pos < divArray.length) {
            divArray[pos].className = cssClass;
            sender.value = divArray[pos].innerHTML;
            if (pos > 0) {
                divArray[pos - 1].className = defaultCssClass;
            }
        } else {
            pos = -1;
            sender.value = inputText;
            divArray[divArray.length - 1].className = defaultCssClass;
        }
    }

    
    if (event.keyCode == 38) {
        inputChanged = false;
        focusMoved = true;
        pos--;

        
        if (pos >= 0) {
            divArray[pos].className = cssClass;
            sender.value = divArray[pos].innerHTML;
            divArray[pos + 1].className = defaultCssClass;
        }
        if (pos == -1) {
            divArray[0].className = defaultCssClass;
            sender.value = inputText;
        }
        if (pos == -2) {
            pos = divArray.length - 1;
            divArray[pos].className = cssClass;
            sender.value = divArray[pos].innerHTML;
        }
    }
    inputChanged = false;
    return focusMoved;
}


