var staList;
var lanList;
var natList;
var currentAffectationStatus;

function debugInfo(message) {
    debugPane = document.createElement("div");
    debugPane.style.zIndex = "3";
    document.body.appendChild(debugPane);
    debugPane.innerHTML += '\n' + message;
}

function communes(form, fieldIn, fieldOut) {
    var url = "";
    if(form == "intervenant" || form == "client") {
        url = "../";
    }
    if(fieldIn == "cod" || fieldIn == "etaCod") {
        url += "communes.ajax?code=";
    }
    else {
        return;
    }
    var inputTextIn = document.getElementById(form + ':' + fieldIn);
    var inputTextOut = document.getElementById(form + ':' + fieldOut);
    var suggestionDiv = createDiv(inputTextOut);
    var cursor = -1;
    var request;
    inputTextIn.autocomplete = "off";
    inputTextOut.autocomplete = "off";
    inputTextIn.onkeyup = function(inEvent) {
        if(!inEvent) {
            inEvent = window.event;
        }
        var enteredText = inputTextIn.value;
        /* 32 spacebar; 8 backspace; 45 insert; 112 F1; 123 F12 */
        if(inEvent.keyCode == 32 || inEvent.keyCode == 8 || ( 45 < inEvent.keyCode && inEvent.keyCode < 112) || inEvent.keyCode > 123) {
            if(enteredText.length == 5) {
                var request;
                if(window.XMLHttpRequest) { // Mozilla
                    request = new XMLHttpRequest();
                }
                else if(window.ActiveXObject) { // Microsoft
                    request = new ActiveXObject("Microsoft.XMLHTTP");
                }
                if(request != null) {
                    request.open("Get", url + escape(enteredText), true);
                    request.onreadystatechange = function callbackFillNoms() {
                        if(request.readyState == 4 && request.status == 200) {
                            var solutions = request.responseText.split(';');
                            if(solutions.length == 1) {
                                inputTextOut.value = solutions[0];
                                inputTextOut.focus();
                            }
                            else if(solutions.length > 1) {
                                showSuggestions(inputTextOut, suggestionDiv, solutions);
                                suggestionDiv.focus();
                            }
                            else {
                                suggestionDiv.style.visibility = "hidden";
                            }
                        }
                    }
                    request.send(null);
                }
            }
            else {
                inputTextOut.value = "";
                suggestionDiv.style.visibility = "hidden";
            }
        }
    }
    inputTextIn.onkeydown = function(inEvent) {
        if(!inEvent) {
            inEvent = window.event;
        }
        switch(inEvent.keyCode) {
            /* up arrow */
            case 38:
                if(suggestionDiv.childNodes.length > 0 && cursor > 0) {
                    var highlightNode = suggestionDiv.childNodes[--cursor];
                    highlightSuggestion(suggestionDiv, highlightNode);
                    inputTextOut.value = highlightNode.firstChild.nodeValue;
                }
                break;
            /* down arrow */
            case 40:
                if(suggestionDiv.childNodes.length > 0 && cursor < suggestionDiv.childNodes.length - 1) {
                    var newNode = suggestionDiv.childNodes[++cursor];
                    highlightSuggestion(suggestionDiv, newNode);
                    inputTextOut.value = newNode.firstChild.nodeValue;
                }
                break;
            /* enter key = 13 */
            case 13:
                suggestionDiv.style.visibility = "hidden";
                break;
        }
    }
    suggestionDiv.onmouseup = function() {
        inputTextOut.focus();
    }
    suggestionDiv.onmouseover = function(inputEvent) {
        inputEvent = inputEvent || window.event;
        sugTarget = inputEvent.target || inputEvent.srcElement;
        highlightSuggestion(suggestionDiv, sugTarget);
    }
    suggestionDiv.onmousedown = function(inputEvent) {
        inputEvent = inputEvent || window.event;
        sugTarget = inputEvent.target || inputEvent.srcElement;
        inputTextOut.value = sugTarget.firstChild.nodeValue;
        suggestionDiv.style.visibility = "hidden";
    }
    document.body.appendChild(suggestionDiv);
}

function stations(form, field) {
    var url = "";
    if(form == "intervenant" || form == "client") {
        url = "../";
    }
    if(field == "stn" || field == "etaStn") {
        url += "stations.ajax";
    }
    else {
        return;
    }
    var inputTextField = document.getElementById(form + ':' + field);
    var suggestionDiv = createDiv(inputTextField);
    var cursor = -1;
    var request;
    var lookAheadArray;
    inputTextField.autocomplete = "off";
    inputTextField.onkeyup = function(inEvent) {
        if(!inEvent) {
            inEvent = window.event;
        }
        var enteredText = inputTextField.value;
        var potentials = new Array();
        /* 32 spacebar; 8 backspace; 45 insert; 112 F1; 123 F12 */
        if(inEvent.keyCode == 32 || inEvent.keyCode == 8 || ( 45 < inEvent.keyCode && inEvent.keyCode < 112) || inEvent.keyCode > 123) {
            if(enteredText.length > 0) {
                for(var i = 0; i < lookAheadArray.length; i++) {
                    var nom = lookAheadArray[i];
                    if(nom.toUpperCase().indexOf(enteredText.toUpperCase(), 0) == 0) {
                        potentials.push(nom);
                    }
                }
                showSuggestions(inputTextField, suggestionDiv, potentials);
            }
            if(potentials.length > 0) {
                if(inEvent.keyCode != 46 && inEvent.keyCode != 8) {
                    if(inputTextField.createTextRange || inputTextField.setSelectionRange) {
                        var iLen = enteredText.length;
                        enteredText = potentials[0];
                        if(inputTextField.createTextRange) {
                            var sRange = inputTextField.createTextRange();
                            sRange.moveStart("character", iLen);
                            sRange.moveEnd("character", potentials[0].length - inputTextField.value.length);
                            sRange.select();
                        }
                        else if(inputTextField.setSelectionRange) {
                            inputTextField.setSelectionRange(iLen, potentials[0].length);
                        }
                        inputTextField.focus();
                    }
                }
                showSuggestions(inputTextField, suggestionDiv, potentials);
            }
            else {
                suggestionDiv.style.visibility = "hidden";
            }
        }
    }
    inputTextField.onkeydown = function(inEvent) {
        if(!inEvent) {
            inEvent = window.event;
        }
        switch(inEvent.keyCode) {
            /* up arrow */
            case 38:
                if(suggestionDiv.childNodes.length > 0 && cursor > 0) {
                    var highlightNode = suggestionDiv.childNodes[--cursor];
                    highlightSuggestion(suggestionDiv, highlightNode);
                    inputTextField.value = highlightNode.firstChild.nodeValue;
                }
                break;
            /* Down arrow */
            case 40:
                if(suggestionDiv.childNodes.length > 0 && cursor < suggestionDiv.childNodes.length - 1) {
                    var newNode = suggestionDiv.childNodes[++cursor];
                    highlightSuggestion(suggestionDiv, newNode);
                    inputTextField.value = newNode.firstChild.nodeValue;
                }
                break;
            /* Enter key = 13 */
            case 13:
                suggestionDiv.style.visibility = "hidden";
                break;
        }
    }
    suggestionDiv.onmouseup = function() {
        inputTextField.focus();
    }
    suggestionDiv.onmouseover = function(inputEvent) {
        inputEvent = inputEvent || window.event;
        sugTarget = inputEvent.target || inputEvent.srcElement;
        highlightSuggestion(suggestionDiv, sugTarget);
    }
    suggestionDiv.onmousedown = function(inputEvent) {
        inputEvent = inputEvent || window.event;
        sugTarget = inputEvent.target || inputEvent.srcElement;
        inputTextField.value = sugTarget.firstChild.nodeValue;
        suggestionDiv.style.visibility = "hidden";
    }
    if(staList != null) {
        lookAheadArray = staList;
    }
    else {
        if(window.XMLHttpRequest) {
            request = new XMLHttpRequest();
        }
        else if(window.ActiveXObject) {
            request = new ActiveXObject("Microsoft.XMLHTTP");
        }
        if(request == null) {
            return;
        }
        request.open("Get", url, true);
        request.onreadystatechange = function callbackFillChoices() {
            if(request.readyState == 4 && request.status == 200) {
                staList = lookAheadArray = request.responseText.split(';');
            }
        }
        request.send(null);
    }
    inputTextField.onblur = function() {
        suggestionDiv.style.visibility = "hidden";
    }
    document.body.appendChild(suggestionDiv);
}

function langues(form, field) {
    var url = "";
    if(form == "intervenant" || form == "client") {
        url = "../";
    }
    if(field == "lan1" || field == "lan2") {
        url += "langues.ajax";
    }
    else {
        return;
    }
    var inputTextField = document.getElementById(form + ':' + field);
    var suggestionDiv = createDiv(inputTextField);
    var cursor = -1;
    var request;
    var lookAheadArray;
    inputTextField.autocomplete = "off";
    inputTextField.onkeyup = function(inEvent) {
        if(!inEvent) {
            inEvent = window.event;
        }
        var enteredText = inputTextField.value;
        var potentials = new Array();
        /* 32 spacebar; 8 backspace; 45 insert; 112 F1; 123 F12 */
        if(inEvent.keyCode == 32 || inEvent.keyCode == 8 || ( 45 < inEvent.keyCode && inEvent.keyCode < 112) || inEvent.keyCode > 123) {
            if(enteredText.length > 0) {
                for(var i = 0; i < lookAheadArray.length; i++) {
                    var nom = lookAheadArray[i];
                    if(nom.toUpperCase().indexOf(enteredText.toUpperCase(), 0) == 0) {
                        potentials.push(nom);
                    }
                }
                showSuggestions(inputTextField, suggestionDiv, potentials);
            }
            if(potentials.length > 0) {
                if(inEvent.keyCode != 46 && inEvent.keyCode != 8) {
                    if(inputTextField.createTextRange || inputTextField.setSelectionRange) {
                        var iLen = enteredText.length;
                        enteredText = potentials[0];
                        if(inputTextField.createTextRange) {
                            var sRange = inputTextField.createTextRange();
                            sRange.moveStart("character", iLen);
                            sRange.moveEnd("character", potentials[0].length - inputTextField.value.length);
                            sRange.select();
                        }
                        else if(inputTextField.setSelectionRange) {
                            inputTextField.setSelectionRange(iLen, potentials[0].length);
                        }
                        inputTextField.focus();
                    }
                }
                showSuggestions(inputTextField, suggestionDiv, potentials);
            }
            else {
                suggestionDiv.style.visibility = "hidden";
            }
        }
    }
    inputTextField.onkeydown = function(inEvent) {
        if(!inEvent) {
            inEvent = window.event;
        }
        switch(inEvent.keyCode) {
            /* up arrow */
            case 38:
                if(suggestionDiv.childNodes.length > 0 && cursor > 0) {
                    var highlightNode = suggestionDiv.childNodes[--cursor];
                    highlightSuggestion(suggestionDiv, highlightNode);
                    inputTextField.value = highlightNode.firstChild.nodeValue;
                }
                break;
            /* Down arrow */
            case 40:
                if(suggestionDiv.childNodes.length > 0 && cursor < suggestionDiv.childNodes.length - 1) {
                    var newNode = suggestionDiv.childNodes[++cursor];
                    highlightSuggestion(suggestionDiv, newNode);
                    inputTextField.value = newNode.firstChild.nodeValue;
                }
                break;
            /* Enter key = 13 */
            case 13:
                suggestionDiv.style.visibility = "hidden";
                break;
        }
    }
    suggestionDiv.onmouseup = function() {
        inputTextField.focus();
    }
    suggestionDiv.onmouseover = function(inputEvent) {
        inputEvent = inputEvent || window.event;
        sugTarget = inputEvent.target || inputEvent.srcElement;
        highlightSuggestion(suggestionDiv, sugTarget);
    }
    suggestionDiv.onmousedown = function(inputEvent) {
        inputEvent = inputEvent || window.event;
        sugTarget = inputEvent.target || inputEvent.srcElement;
        inputTextField.value = sugTarget.firstChild.nodeValue;
        suggestionDiv.style.visibility = "hidden";
    }
    if(lanList != null) {
        lookAheadArray = lanList;
    }
    else {
        if(window.XMLHttpRequest) {
            request = new XMLHttpRequest();
        }
        else if(window.ActiveXObject) {
            request = new ActiveXObject("Microsoft.XMLHTTP");
        }
        if(request == null) {
            return;
        }
        request.open("Get", url, true);
        request.onreadystatechange = function callbackFillChoices() {
            if(request.readyState == 4 && request.status == 200) {
                lanList = lookAheadArray = request.responseText.split(';');
            }
        }
        request.send(null);
    }
    inputTextField.onblur = function() {
        suggestionDiv.style.visibility = "hidden";
    }
    document.body.appendChild(suggestionDiv);
}

function pays(form, field) {
    var url = "";
    if(form == "intervenant" || form == "client") {
        url = "../";
    }
    if(field == "nat" || field == "pay") {
        url += "pays.ajax";
    }
    else {
        return;
    }
    var inputTextField = document.getElementById(form + ':' + field);
    var suggestionDiv = createDiv(inputTextField);
    var cursor = -1;
    var request;
    var lookAheadArray;
    inputTextField.autocomplete = "off";
    inputTextField.onkeyup = function(inEvent) {
        if(!inEvent) {
            inEvent = window.event;
        }
        var enteredText = inputTextField.value;
        var potentials = new Array();
        /* 32 spacebar; 8 backspace; 45 insert; 112 F1; 123 F12 */
        if(inEvent.keyCode == 32 || inEvent.keyCode == 8 || ( 45 < inEvent.keyCode && inEvent.keyCode < 112) || inEvent.keyCode > 123) {
            if(enteredText.length > 0) {
                for(var i = 0; i < lookAheadArray.length; i++) {
                    var nom = lookAheadArray[i];
                    if(nom.toUpperCase().indexOf(enteredText.toUpperCase(), 0) == 0) {
                        potentials.push(nom);
                    }
                }
                showSuggestions(inputTextField, suggestionDiv, potentials);
            }
            if(potentials.length > 0) {
                if(inEvent.keyCode != 46 && inEvent.keyCode != 8) {
                    if(inputTextField.createTextRange || inputTextField.setSelectionRange) {
                        var iLen = enteredText.length;
                        enteredText = potentials[0];
                        if(inputTextField.createTextRange) {
                            var sRange = inputTextField.createTextRange();
                            sRange.moveStart("character", iLen);
                            sRange.moveEnd("character", potentials[0].length - inputTextField.value.length);
                            sRange.select();
                        }
                        else if(inputTextField.setSelectionRange) {
                            inputTextField.setSelectionRange(iLen, potentials[0].length);
                        }
                        inputTextField.focus();
                    }
                }
                showSuggestions(inputTextField, suggestionDiv, potentials);
            }
            else {
                suggestionDiv.style.visibility = "hidden";
            }
        }
    }
    inputTextField.onkeydown = function(inEvent) {
        if(!inEvent) {
            inEvent = window.event;
        }
        switch(inEvent.keyCode) {
            /* up arrow */
            case 38:
                if(suggestionDiv.childNodes.length > 0 && cursor > 0) {
                    var highlightNode = suggestionDiv.childNodes[--cursor];
                    highlightSuggestion(suggestionDiv, highlightNode);
                    inputTextField.value = highlightNode.firstChild.nodeValue;
                }
                break;
            /* Down arrow */
            case 40:
                if(suggestionDiv.childNodes.length > 0 && cursor < suggestionDiv.childNodes.length - 1) {
                    var newNode = suggestionDiv.childNodes[++cursor];
                    highlightSuggestion(suggestionDiv, newNode);
                    inputTextField.value = newNode.firstChild.nodeValue;
                }
                break;
            /* Enter key = 13 */
            case 13:
                suggestionDiv.style.visibility = "hidden";
                break;
        }
    }
    suggestionDiv.onmouseup = function() {
        inputTextField.focus();
    }
    suggestionDiv.onmouseover = function(inputEvent) {
        inputEvent = inputEvent || window.event;
        sugTarget = inputEvent.target || inputEvent.srcElement;
        highlightSuggestion(suggestionDiv, sugTarget);
    }
    suggestionDiv.onmousedown = function(inputEvent) {
        inputEvent = inputEvent || window.event;
        sugTarget = inputEvent.target || inputEvent.srcElement;
        inputTextField.value = sugTarget.firstChild.nodeValue;
        suggestionDiv.style.visibility = "hidden";
    }
    if(natList != null) {
        lookAheadArray = natList;
    }
    else {
        if(window.XMLHttpRequest) {
            request = new XMLHttpRequest();
        }
        else if(window.ActiveXObject) {
            request = new ActiveXObject("Microsoft.XMLHTTP");
        }
        if(request == null) {
            return;
        }
        request.open("Get", url, true);
        request.onreadystatechange = function callbackFillChoices() {
            if(request.readyState == 4 && request.status == 200) {
                natList = lookAheadArray = request.responseText.split(';');
            }
        }
        request.send(null);
    }
    inputTextField.onblur = function() {
        suggestionDiv.style.visibility = "hidden";
    }
    document.body.appendChild(suggestionDiv);
}

function noms(objet) {
    var url;
    var inputTextField;
    if(objet == "client") {
        url = "../nom_client.ajax?nom=";
        inputTextField = document.getElementById("recherche:nomCli");
    }
    else if(objet == "intervenant") {
        url = "../nom_intervenant.ajax?nom=";
        inputTextField = document.getElementById("recherche:nomIvt");
    }
    else if(objet == "commune") {
            url = "../nom_commune.ajax?nom=";
            inputTextField = document.getElementById("client:nomCom") || document.getElementById("intervenant:nomCom");
        }
        else {
            return;
        }
    var suggestionDiv = createDiv(inputTextField);
    var cursor = -1;
    var request;
    var lookAheadArray;
    inputTextField.autocomplete = "off";
    inputTextField.onkeyup = function(inEvent) {
        if(!inEvent) {
            inEvent = window.event;
        }
        var enteredText = inputTextField.value.toUpperCase();
        if(inEvent.keyCode == 32 || inEvent.keyCode == 8 || ( 45 < inEvent.keyCode && inEvent.keyCode < 112) || inEvent.keyCode > 123) {
            if(enteredText.length > 1) {
                var request;
                if(window.XMLHttpRequest) {
                    request = new XMLHttpRequest();
                }
                else if(window.ActiveXObject) {
                    request = new ActiveXObject("Microsoft.XMLHTTP");
                }
                if(request != null) {
                    request.open("Get", url + escape(enteredText), true);
                    request.onreadystatechange = function callbackFillUsernames() {
                        if(request.readyState == 4 && request.status == 200) {
                            lookAheadArray = request.responseText.split(';');
                            var potentials = new Array();
                            for(var i = 0; i < lookAheadArray.length; i++) {
                                if(lookAheadArray[i].indexOf(enteredText) == 0) {
                                    potentials.push(lookAheadArray[i]);
                                }
                            }
                            showSuggestions(inputTextField, suggestionDiv, potentials);
                            if(potentials.length > 0) {
                                if(inEvent.keyCode != 46 && inEvent.keyCode != 8) {
                                    if(inputTextField.createTextRange || inputTextField.setSelectionRange) {
                                        var iLen = enteredText.length;
                                        enteredText = potentials[0];
                                        if(inputTextField.createTextRange) {
                                            var sRange = inputTextField.createTextRange();
                                            sRange.moveStart("character", iLen);
                                            sRange.moveEnd("character", potentials[0].length - inputTextField.value.length);
                                            sRange.select();
                                        }
                                        else if(inputTextField.setSelectionRange) {
                                            inputTextField.setSelectionRange(iLen, potentials[0].length);
                                        }
                                        inputTextField.focus();
                                    }
                                }
                                showSuggestions(inputTextField, suggestionDiv, potentials);
                            }
                            else {
                                suggestionDiv.style.visibility = "hidden";
                            }
                        }
                    }
                    request.send(null);
                }
            }
        }
    }
    inputTextField.onkeydown = function(inEvent) {
        if(!inEvent) {
            inEvent = window.event;
        }
        switch(inEvent.keyCode) {
            /* up arrow */
            case 38:
                if(suggestionDiv.childNodes.length > 0 && cursor > 0) {
                    var highlightNode = suggestionDiv.childNodes[--cursor];
                    highlightSuggestion(suggestionDiv, highlightNode);
                    inputTextField.value = highlightNode.firstChild.nodeValue;
                }
                break;
            /* Down arrow */
            case 40:
                if(suggestionDiv.childNodes.length > 0 && cursor < suggestionDiv.childNodes.length - 1) {
                    var newNode = suggestionDiv.childNodes[++cursor];
                    highlightSuggestion(suggestionDiv, newNode);
                    inputTextField.value = newNode.firstChild.nodeValue;
                }
                break;
            /* Enter key = 13 */
            case 13:
                suggestionDiv.style.visibility = "hidden";
                break;
        }
    }
    suggestionDiv.onmouseup = function() {
        inputTextField.focus();
    }
    suggestionDiv.onmouseover = function(inputEvent) {
        inputEvent = inputEvent || window.event;
        sugTarget = inputEvent.target || inputEvent.srcElement;
        highlightSuggestion(suggestionDiv, sugTarget);
    }
    suggestionDiv.onmousedown = function(inputEvent) {
        inputEvent = inputEvent || window.event;
        sugTarget = inputEvent.target || inputEvent.srcElement;
        inputTextField.value = sugTarget.firstChild.nodeValue;
        suggestionDiv.style.visibility = "hidden";
    }
    inputTextField.onblur = function() {
        suggestionDiv.style.visibility = "hidden";
    }
    document.body.appendChild(suggestionDiv);
}

function createDiv(inputText) {
    var suggestionDiv = document.createElement("div");
    suggestionDiv.style.width = inputText.offsetWidth;
    suggestionDiv.className = "suggestions";
    suggestionDiv.style.zIndex = "2";
    suggestionDiv.style.backgroundColor = "white";
    suggestionDiv.style.repeat = "repeat";
    suggestionDiv.style.visibility = "hidden";
    return suggestionDiv;
}

function showSuggestions(inputTextField, suggestionDiv, suggestions) {
    var sDiv = null;
    suggestionDiv.innerHTML = "";
    for(i = 0; i < suggestions.length; i++) {
        sDiv = document.createElement("div");
        sDiv.appendChild(document.createTextNode(suggestions[i]));
        suggestionDiv.appendChild(sDiv);
    }
    suggestionDiv.style.left = absoluteOffsetPosition(inputTextField, "Left") + "px";
    suggestionDiv.style.top = (absoluteOffsetPosition(inputTextField, "Top") + inputTextField.offsetHeight) + "px";
    suggestionDiv.style.visibility = "visible";
}

function highlightSuggestion(suggestionDiv, suggestionNode) {
    for(var i = 0; i < suggestionDiv.childNodes.length; i++) {
        var sNode = suggestionDiv.childNodes[i];
        if(sNode == suggestionNode) {
            sNode.className = "current"
        }
        else if(sNode.className == "current") {
            sNode.className = "";
        }
    }
}

function absoluteOffsetPosition(element, leftOrTop) {
    var offset = 0;
    while(element && element.tagName != "body") {
        offset += eval("element.offset" + leftOrTop);
        element = element.offsetParent;
    }
    return offset;
}
