//set events
document.onkeydown = handleKeyDown;

var openSelectImageId = ""; //image id of last opened select
var lastOpenedSelect; //last opened select element
var lastSelectedChoiceElement = null; //selected choice
var lastMouseOverElement = null; //last mouseover choice
//var lastInfoDiv = null;
var timerWrite = null;
var characterWrite = "";
var lastCharacterWrite = "";

//select
function selectMouseOver(element, name) {
    if (lastMouseOverElement != null) lastMouseOverElement.style.backgroundColor = '#ffffff';
    
    //get value
    var value = document.getElementById('value' + name).value;
    
    //deselect
    document.getElementById('nodeid' + name + value).style.backgroundColor = '#ffffff';
    
    //set new mouse over element
    lastMouseOverElement = element;

    //select
    element.style.cursor = 'pointer';
    element.style.backgroundColor = '#ff9300';
}

//select choice
function selectChoice(element, name, value, textbefore) {
    lastSelectedChoiceElement = element;

    var prevvalue = document.getElementById("title" + name).value;

    if (textbefore == '')
        document.getElementById("title" + name).value = element.title;
    else
        document.getElementById("title" + name).value = textbefore + element.title;

    document.getElementById("value" + name).value = value;

    //onchange event
    if (element.title != prevvalue && document.getElementById("onchange" + name).value != "") {
        eval(document.getElementById("onchange" + name).value);
    }
}

//select
function showSelectChoises(name) {
    var display = document.getElementById('div' + name).style.display;

    //show
    if (display == 'none' && display != '') {
        document.getElementById("div" + name).style.display = "block";
        document.getElementById("selectimg" + name).src = rooturl + "images/buttons/header_select_over.gif";
        document.getElementById("leftimg" + name).src = rooturl + "images/input_left2.png";
        document.getElementById("rightimg" + name).src = rooturl + "images/input_right2.png";
        lastOpenedSelect = document.getElementById("div" + name);

        //select current
        if (document.getElementById('value' + name)) {
            var value = document.getElementById("value" + name).value;
            
            //select current
            if (value != '') {
                document.getElementById('nodeid' + name + value).style.backgroundColor = '#ff9300';
                //lastMouseOverElement = document.getElementById('nodeid' + name + value);
            }
        }

       
    }
    else if (display == 'block') {
        document.getElementById('div' + name).style.display = 'none';
        document.getElementById('selectimg' + name).src = rooturl + 'images/buttons/header_select.gif';
        document.getElementById('leftimg' + name).src = rooturl + 'images/input_left.png';
        document.getElementById('rightimg' + name).src = rooturl + 'images/input_right.png';
        lastOpenedSelect = null;

        if (lastMouseOverElement != null) {
            lastMouseOverElement.style.backgroundColor = '#ffffff';
        }
    }
}

//handle body click
function handleClick(event) {
    var target = null;

    if (event.target) {
        target = event.target;
    }
    else {
        if (!e) {
            var e = window.event;
        }
        if (e.target) {
            target = e.target;
        }
        else if (e.srcElement) {
            target = e.srcElement;
        }
        if (target.nodeType == 3) {
            target = target.parentNode;
        }
    }
    var tname = target.id;

    //click on  value
    if (tname.substring(0, 14) == "selectclickdiv") {
        tname1 = "selectimg" + tname.substring(14, tname.length);
        tname = tname1;
    }

    //if click on image of select / not
    if (tname.substring(0, 9) == "selectimg") {
        //hide
        if (openSelectImageId != tname) {
            if (openSelectImageId != "") {
                document.getElementById("div" + openSelectImageId.substring(9, openSelectImageId.length)).style.display = "none";
                if (document.getElementById(openSelectImageId)) document.getElementById(openSelectImageId).src = rooturl + "images/buttons/header_select.gif";
                if (document.getElementById("leftimg" + openSelectImageId.substring(9, openSelectImageId.length))) document.getElementById("leftimg" + openSelectImageId.substring(9, openSelectImageId.length)).src = rooturl + "images/input_left.png";
                if (document.getElementById("rightimg" + openSelectImageId.substring(9, openSelectImageId.length))) document.getElementById("rightimg" + openSelectImageId.substring(9, openSelectImageId.length)).src = rooturl + "images/input_right.png";

                //                //hide last mouseover
//                if (lastMouseOverElement != null) {
//                  
////                    lastMouseOverElement.style.backgroundColor = '#ffffff';
////                    lastMouseOverElement = null;
//                }

                if (lastMouseOverElement != null) {
                    lastMouseOverElement.style.backgroundColor = '#ffffff';
                }
            }
        }
        openSelectImageId = tname;
    }
    else {
        //close div
        if (lastOpenedSelect && tname.substring(0, 3) != "div") {
            lastOpenedSelect.style.display = "none";
            if (document.getElementById("selectimg" + lastOpenedSelect.id.substring(3, lastOpenedSelect.id.length))) document.getElementById("selectimg" + lastOpenedSelect.id.substring(3, lastOpenedSelect.id.length)).src = rooturl + "images/buttons/header_select.gif";
            if (document.getElementById("leftimg" + lastOpenedSelect.id.substring(3, lastOpenedSelect.id.length))) document.getElementById("leftimg" + lastOpenedSelect.id.substring(3, lastOpenedSelect.id.length)).src = rooturl + "images/input_left.png";
            if (document.getElementById("rightimg" + lastOpenedSelect.id.substring(3, lastOpenedSelect.id.length))) document.getElementById("rightimg" + lastOpenedSelect.id.substring(3, lastOpenedSelect.id.length)).src = rooturl + "images/input_right.png";

            //hide last mouseover
//            if (lastMouseOverElement != null) {
//                lastMouseOverElement.style.backgroundColor = '#ffffff';
//                lastMouseOverElement = null;
            //            }
            if (lastMouseOverElement != null) {
                lastMouseOverElement.style.backgroundColor = '#ffffff';
            }
        }

        //close info div
//        if (lastInfoDiv != null && tname.substring(0, 7) != "infodiv") {
//            lastInfoDiv.style.display = "none";
//        }
    }
}

//handle body key down
function handleKeyDown(e) {
    var keyIndex = 0;
    if (navigator.appName == "Netscape")
        keyIndex = e.which;
    else
        keyIndex = window.event.keyCode;


    //if one select open        
    if (openSelectImageId != "") {
        var name = openSelectImageId.substring(9, openSelectImageId.length);
        if (document.getElementById("div" + name).style.display == "block") {
            var currentselected = document.getElementById("value" + name).value;
//            if (lastMouseOverElement != null)
//                currentselected = lastMouseOverElement.value;

            //array
            var allValuesArray = new Array();
            allValuesArray = document.getElementById("allvalues" + name).value.split("#");
            var allTitlesArray = new Array();
            allTitlesArray = document.getElementById("alltitles" + name).value.split("#");
            var selectedIndex = 0;

            //find current index
            for (i = 0; i < allValuesArray.length; i++) {
                if (allValuesArray[i] == currentselected)
                    selectedIndex = i;
            }

            //up
            if (keyIndex == 38 || keyIndex == 104) {
                if (selectedIndex > 0) {
                    //deselect
                    document.getElementById("nodeid" + name + document.getElementById("value" + name).value).style.backgroundColor = '#ffffff';

                    //if this is not selectable move to next
                    if (document.getElementById("nodeid" + name + allValuesArray[selectedIndex - 1]).onmouseover == null) {
                        selectedIndex = selectedIndex - 1;
                    }

                    //select
                    document.getElementById("nodeid" + name + allValuesArray[selectedIndex - 1]).style.cursor = 'pointer';
                    document.getElementById("nodeid" + name + allValuesArray[selectedIndex - 1]).style.backgroundColor = '#ff9300';
                    lastSelectedChoiceElement = document.getElementById("nodeid" + name + allValuesArray[selectedIndex - 1]);
                    document.getElementById("title" + name).value = document.getElementById("textbefore" + name + allValuesArray[selectedIndex - 1]).value + allTitlesArray[selectedIndex - 1];
                    document.getElementById("value" + name).value = allValuesArray[selectedIndex - 1];

                    //scroll
                    if (selectedIndex < allValuesArray.length - 11)
                        document.getElementById("divnodes" + name).scrollTop -= document.getElementById("nodeid" + name + allValuesArray[selectedIndex - 1]).scrollHeight;

                    //set last
//                    if (lastMouseOverElement != null)
//                        lastMouseOverElement.style.backgroundColor = '#ffffff';

//                    lastMouseOverElement = document.getElementById("nodeid" + name + allValuesArray[selectedIndex - 1]);
                }
                return false;
            }

            //down
            if (keyIndex == 40 || keyIndex == 98) {
                if (selectedIndex < allValuesArray.length - 1) {
                    //deselect
                    document.getElementById("nodeid" + name + document.getElementById("value" + name).value).style.backgroundColor = '#ffffff';

                    //if this is not selectable move to next
                    if (document.getElementById("nodeid" + name + allValuesArray[selectedIndex + 1]).onmouseover == null) {
                        selectedIndex = selectedIndex + 1;
                    }

                    //select
                    document.getElementById("nodeid" + name + allValuesArray[selectedIndex + 1]).style.cursor = 'pointer';
                    document.getElementById("nodeid" + name + allValuesArray[selectedIndex + 1]).style.backgroundColor = '#ff9300';
                    lastSelectedChoiceElement = document.getElementById("nodeid" + name + allValuesArray[selectedIndex + 1]);
                    document.getElementById("title" + name).value = document.getElementById("textbefore" + name + allValuesArray[selectedIndex + 1]).value + allTitlesArray[selectedIndex + 1];
                    document.getElementById("value" + name).value = allValuesArray[selectedIndex + 1];

                    //scroll
                    if (selectedIndex > 11)
                        document.getElementById("divnodes" + name).scrollTop += document.getElementById("nodeid" + name + allValuesArray[selectedIndex + 1]).scrollHeight;

                    //set last
//                    if (lastMouseOverElement != null) lastMouseOverElement.style.backgroundColor = '#ffffff';
//                    
//                    //set new last element
//                    lastMouseOverElement = document.getElementById("nodeid" + name + allValuesArray[selectedIndex + 1]);
                }

                return false;
            }

            //characterWrites and numbers and slo characterWrites
            if ((keyIndex >= 65 && keyIndex <= 90) || (keyIndex >= 48 && keyIndex <= 57) || keyIndex == 219 || keyIndex == 221 || keyIndex == 186 || keyIndex == 222 || keyIndex == 220) {

                //get characterWrite by code
                if (keyIndex == 65) lastCharacterWrite = "a"; else if (keyIndex == 66) lastCharacterWrite= "b";
                else if (keyIndex == 67) lastCharacterWrite  = "c"; else if (keyIndex == 68) lastCharacterWrite= "d";
                else if (keyIndex == 69) lastCharacterWrite = "e"; else if (keyIndex == 70) lastCharacterWrite= "f";
                else if (keyIndex == 71) lastCharacterWrite = "g"; else if (keyIndex == 72) lastCharacterWrite= "h";
                else if (keyIndex == 73) lastCharacterWrite = "i"; else if (keyIndex == 74) lastCharacterWrite= "j";
                else if (keyIndex == 75) lastCharacterWrite = "k"; else if (keyIndex == 76) lastCharacterWrite= "l";
                else if (keyIndex == 77) lastCharacterWrite = "m"; else if (keyIndex == 78) lastCharacterWrite= "n";
                else if (keyIndex == 79) lastCharacterWrite = "o"; else if (keyIndex == 80) lastCharacterWrite= "p";
                else if (keyIndex == 81) lastCharacterWrite = "q"; else if (keyIndex == 82) lastCharacterWrite= "r";
                else if (keyIndex == 83) lastCharacterWrite= "s"; else if (keyIndex == 84) lastCharacterWrite= "t";
                else if (keyIndex == 85) lastCharacterWrite= "u"; else if (keyIndex == 86) lastCharacterWrite= "v";
                else if (keyIndex == 87) lastCharacterWrite= "w"; else if (keyIndex == 88) lastCharacterWrite= "x";
                else if (keyIndex == 89) lastCharacterWrite= "y"; else if (keyIndex == 90) lastCharacterWrite= "z";

                //slo
                else if (keyIndex == 219) lastCharacterWrite= "�"; else if (keyIndex == 221) lastCharacterWrite= "�";
                else if (keyIndex == 186) lastCharacterWrite= "�"; else if (keyIndex == 222) lastCharacterWrite= "�";
                else if (keyIndex == 220) lastCharacterWrite= "�";

                //numbers
                else if (keyIndex == 48) lastCharacterWrite= "0"; else if (keyIndex == 49) lastCharacterWrite= "1";
                else if (keyIndex == 50) lastCharacterWrite= "2"; else if (keyIndex == 51) lastCharacterWrite= "3";
                else if (keyIndex == 52) lastCharacterWrite= "4"; else if (keyIndex == 53) lastCharacterWrite= "5";
                else if (keyIndex == 54) lastCharacterWrite= "6"; else if (keyIndex == 55) lastCharacterWrite= "7";
                else if (keyIndex == 56) lastCharacterWrite= "8"; else if (keyIndex == 57) lastCharacterWrite= "9";

                //se timeout for write
                if (characterWrite != lastCharacterWrite)
                    characterWrite += lastCharacterWrite;

                //reset character
                if (characterWrite.length == 100)
                    characterWrite = "";
                
                //set timeout for word reset
                clearTimeout(timerWrite);
                timerWrite = setTimeout("characterWrite=''; ", 1000);

                //search by characterWrite from this index below
                var searchIndex = -1;
                for (i = selectedIndex + 1; i < allTitlesArray.length; i++) {
                    if (allTitlesArray[i].substring(0, characterWrite.length).toLowerCase() == characterWrite.toLowerCase() || allTitlesArray[i].substring(0, characterWrite.length).toUpperCase() == characterWrite.toUpperCase()) {
                        if (searchIndex == -1) {
                            searchIndex = i;
                        }
                    }
                }

                //search if nothing found
                if (searchIndex == -1) {
                    for (i = 0; i < allTitlesArray.length; i++) {
                        if (allTitlesArray[i].substring(0, characterWrite.length).toLowerCase() == characterWrite.toLowerCase() || allTitlesArray[i].substring(0, characterWrite.length).toUpperCase() == characterWrite.toUpperCase()) {
                            if (searchIndex == -1) {
                                searchIndex = i;
                            }
                        }
                    }
                }
                
                //select found item
                if (searchIndex > -1 && characterWrite != "") {

                    //deselect
                    document.getElementById("nodeid" + name + document.getElementById("value" + name).value).style.backgroundColor = '#ffffff';

                    //if this is not selectable move to next
                    if (document.getElementById("nodeid" + name + allValuesArray[searchIndex]).onmouseover != null) {
                        //select
                        document.getElementById("nodeid" + name + allValuesArray[searchIndex]).style.cursor = 'pointer';
                        document.getElementById("nodeid" + name + allValuesArray[searchIndex]).style.backgroundColor = '#ff9300';
                        lastSelectedChoiceElement = document.getElementById("nodeid" + name + allValuesArray[searchIndex]);
                        document.getElementById("title" + name).value = document.getElementById("textbefore" + name + allValuesArray[searchIndex]).value + allTitlesArray[searchIndex];
                        document.getElementById("value" + name).value = allValuesArray[searchIndex];

                        //scroll
                        document.getElementById("divnodes" + name).scrollTop = document.getElementById("nodeid" + name + allValuesArray[0]).scrollHeight * searchIndex;

//                        //set last
//                        if (lastMouseOverElement != null && lastMouseOverElement != document.getElementById("nodeid" + name + allValuesArray[searchIndex])) lastMouseOverElement.style.backgroundColor = '#ffffff';

//                        //set new last element
//                        lastMouseOverElement = document.getElementById("nodeid" + name + allValuesArray[searchIndex]);
                    }
                }
            }

            //enter
            if (keyIndex == 13) {
            
                //close
                document.getElementById("div" + name).style.display = "none";
                document.getElementById("selectimg" + name).src = rooturl + "images/buttons/header_select.gif";
                document.getElementById("leftimg" + name).src = rooturl + "images/input_left.png";
                document.getElementById("rightimg" + name).src = rooturl + "images/input_right.png";
                lastOpenedSelect = null;

                //onchange event
                if (document.getElementById("onchange" + name).value != "") {
                    eval(document.getElementById("onchange" + name).value);
                }

//                if (lastMouseOverElement != null) {
//                    lastMouseOverElement.style.backgroundColor = '#ffffff';
//                }

                return false;
            }
        }
    }
}


