var diag =
{
    lastPhase: null,
    lastQuestion: null,
    isPhaseEndingLogged: false,

    /* Liste des index des dernieres questions validees dans chaque phase */
    validQuestions: null,

    colorArray: new Array("#2b88c1", "#8bc123", "#bd228a"),

    modifying: null,

    /* Nombre de question dans chaque phase */
    maxQuestions: [],

    init: function() {
        diag.validQuestions = [0, 0, 0];
        diag.allPhase = $$(".onephase .questions");

        diag.startDiag(0, 0);
    },

    // MeTHODES DE COMMUNICATION ENTRE FLASH ET HTML VIA EXTERNALINTERFACE
    // Synchronise le diag, en lui demandant d'afficher la question correspondant a la case cliquee
    syncSWF: function(phase, question) {
        //alert(diag.getSWF("diagSWF"));
        diag.getSWF("diagSWF").showQuestion(phase, question);
    },

    // Recupere le swf dans la page HTML
    getSWF: function(movieName) {
        if (navigator.appName.indexOf("Microsoft") != -1) {
            return window[movieName];
        }
        else {
            return document[movieName];
        }
    },

    // Synchronise la question affichee par le diag
    syncPannel: function(phase, question, indexValidInCurrentPhase) {
        //console.info("diag.sync("+phase+", "+question+", "+indexValidInCurrentPhase+")");
        diag.validQuestions[phase] = Math.max(indexValidInCurrentPhase, diag.validQuestions[phase]);
        diag.lastPhase = Math.max(phase, diag.lastPhase);

        // Affichage des questions vues
        diag.changeQuestion(phase, question, true);
    },

    //Passage en mode modifications

    syncModify: function(mode) {
        //alert(diag.getSWF("diagSWF"));
        if (mode == "1") diag.modifying = true;
        else diag.modifying = false;
        diag.lastPhase = 3;
        diag.changeQuestion(0, 0);
    },

    // Positionne le curseur du slider ENVIRONNEMENT en fonction des valeurs recuperes par le SWF
    syncEnv: function(value, label) {

        var slider = $$("#CONTENT .telecommande .skinEnv .arrow");
        //console.info("sliderEnvironnement", slider);
        for (var i = 0; i < 6; i++) {
            slider.removeClass("level" + i);
        }
        slider.addClass("level" + value);

        var skinEnv = $$("#CONTENT .telecommande .skinEnv ");
        skinEnv.setProperty("title", label);
    },

    // Positionne le curseur du slider ATTITUDE en fonction des valeurs recuperes par le SWF
    syncAtt: function(value, label) {
        var slider = $$("#CONTENT .telecommande .skinAtitude .arrow");
        //console.info("sliderAttitude", slider);
        for (var i = 0; i < 6; i++) {
            slider.removeClass("level" + i);
        }
        slider.addClass("level" + value);

        var skinAttitude = $$("#CONTENT .telecommande .skinAtitude ");
        skinAttitude.setProperty("title", label);
    },


    //Change les titles des preoccupations
    syncPreoccupation: function(id, label) {

        var picto = $(id);
        //console.info("synssp", id, label, picto);
        picto.setProperty('title', label);

    },


    //Initialise la telecommande avec la phase jusqu'a laquelle l'internaute est allee ainsi que la derniere question a laquelle il a repondu dans cette phase
    startDiag: function(phase, question) {
        diag.lastPhase = phase;
        diag.lastQuestion = question;
        var currPhase = $$(".phase" + phase)[0];
        var hidePhaseArray = [];
        hidePhaseArray.push($$(".phase1replace"));
        hidePhaseArray.push($$(".phase2replace"));
        hidePhaseArray.push($$(".phase3replace"));

        for (var i = 0; i < hidePhaseArray.length; i++) {
            for (var j = 0; j < hidePhaseArray[i].length; j++) {
                hidePhaseArray[i][j].setStyle("display", "none");
            }
        }

        for (var i = 0; i < diag.allPhase.length; i++) {
            var cPhase = diag.allPhase[i];
            var numCurrPhase = i;
            var questions = cPhase.getElements("a.question");

            // On conserve le nombre de questions par phase
            diag.maxQuestions[i] = questions.length;

            //clearFocusRect
            for (var j = 0; j < questions.length; j++) {
                var currQuestion = questions[j];
                currQuestion.addClass("nocursor");
            }
        }
    },

    //Permet, une fois la question repondu, de revenir sur celle-ci en cliquand dessus
    clickQuestion: function(e) {
        // console.info("clickQuestion");

        var target = common.switchToLink(new Event(e).target, 'A');
        target.blur();
        var curPhase = $$(target.getParent().getParent())[0];
        var numPhase = parseInt(curPhase.className.split("phase")[2]) - 1;
        var questions = curPhase.getElements("a.question");
        var curQuest;
        for (var i = 0; i < questions.length; i++) {
            if (questions[i] == target) curQuest = i;
        }
        diag.changeQuestion(numPhase, curQuest);
    },

    //Change la question en cours
    changeQuestion: function(phase, question, passiveMode) {
        // Lien avec le swf
        //console.info("changeQuestion", phase, question);
        //console.info("modif : ", diag.modifying);

        if (!passiveMode) diag.syncSWF(phase, question);

        for (var i = 0; i < diag.allPhase.length; i++) {
            // console.info("+" + diag.validQuestions[i]);

            var cPhase = diag.allPhase[i];
            var questions = cPhase.getElements("a.question");

            // PHASE ANTeRIEURE
            // Affiche toutes les questions de la phase precedente comme terminees
            if (i < phase) {
                for (var j = 0; j < questions.length; j++) {
                    var currQuestion = questions[j];


                    diag.questionRemoveState(currQuestion, phase);
                    //currQuestion.addClass("done");
                    currQuestion.setStyle("background-color", diag.colorArray[i]);

                    // On rend la question cliquable
                    currQuestion.removeEvent("click", diag.clickQuestion);
                    currQuestion.addEvent("click", diag.clickQuestion);
                }

                //{  GESTION QUESTIONS / RESULTATS
                var phaseContainer = $$("#CONTENT .telecommande .phases");
                var questionContainer = phaseContainer.getElement(".phase" + (i + 1));
                var resultContainer = phaseContainer.getElement(".phase" + (i + 1) + "replace");

                // On n'affiche le résultat que si on n'est pas en MODIFICATION
                if (!diag.modifying) {
                    // Masquer le bloc question
                    questionContainer.setStyle("display", "none");

                    // Afficher le bloc de resultat
                    resultContainer.setStyle("display", "block");
                } else {

                    // Masquer le bloc question
                    questionContainer.setStyle("display", "block");

                    // Afficher le bloc de resultat					
                    resultContainer.setStyle("display", "none");

                }
                //}
            }

            // PHASE COURRANTE
            else if (i == phase) {
                //{  GESTION QUESTIONS / RESULTATS
                var phaseContainer = $$("#CONTENT .telecommande .phases");
                var questionContainer = phaseContainer.getElement(".phase" + (i + 1));
                var resultContainer = phaseContainer.getElement(".phase" + (i + 1) + "replace");

                // On n'affiche le résultat que si on n'est pas en MODIFICATION
                if (!diag.modifying) {
                    // Masquer le bloc question
                    questionContainer.setStyle("display", "block");

                    // Afficher le bloc de resultat
                    resultContainer.setStyle("display", "none");
                } else {

                    // Masquer le bloc question
                    questionContainer.setStyle("display", "block");

                    // Afficher le bloc de resultat					
                    resultContainer.setStyle("display", "none");

                }
                //}


                // L'utilisateur a deja complete cette phase et a vu la suivante
                // Toutes les questions doivent etre affichées comme remplie si on est en mode MODIFICATION
                if (i < diag.lastPhase || diag.modifying) {
                    for (var j = 0; j < questions.length; j++) {
                        var currQuestion = questions[j];
                        diag.questionRemoveState(currQuestion, phase);

                        // Les questions passees sont affichees pleines [X]
                        if (j <= question) {
                            //currQuestion.addClass("done");
                            currQuestion.setStyle("background-color", diag.colorArray[phase]);
                            currQuestion.removeEvent("click", diag.clickQuestion);
                            currQuestion.addEvent("click", diag.clickQuestion);
                        }

                        // Les questions repondues mais posterieures a la question courrante sont cliquables [.]
                        else {
                            //currQuestion.addClass("respond");
                            currQuestion.setStyle("background-color", "#FFF");
                            currQuestion.getElement("span").setStyle('background-color', diag.colorArray[i]);

                            currQuestion.removeEvent("click", diag.clickQuestion);
                            currQuestion.addEvent("click", diag.clickQuestion);
                        }
                    }
                }
                // L'utilisateur n'a pas encore termine cette phase
                else if (i == diag.lastPhase) {
                    for (var j = 0; j < questions.length; j++) {
                        var currQuestion = questions[j];
                        diag.questionRemoveState(currQuestion, phase);

                        // Les questions passees sont affichees pleines [X]
                        if (j <= question) {
                            //currQuestion.addClass("done");
                            currQuestion.setStyle("background-color", diag.colorArray[phase]);
                            currQuestion.removeEvent("click", diag.clickQuestion);
                            currQuestion.addEvent("click", diag.clickQuestion);
                        }
                        // Les questions repondues mais posterieures a la question courrante sont cliquables [.]
                        else if (j < /*diag.lastQuestion*/diag.validQuestions[i]) {
                            //currQuestion.addClass("respond");
                            currQuestion.setStyle("background-color", "#FFF");
                            currQuestion.getElement("span").setStyle('background-color', diag.colorArray[i]);
                            currQuestion.removeEvent("click", diag.clickQuestion);
                            currQuestion.addEvent("click", diag.clickQuestion);
                        }

                        // Les questions non repondues sont non cliquables
                        else if (j > question) {
                            if (!diag.modifying) {
                                currQuestion.addClass("nocursor");
                                currQuestion.setStyle("background-color", "#FFF");
                                currQuestion.removeEvent("click", diag.clickQuestion);
                            }
                            // MODIFY !
                            // Les questions sont cliquables
                            else {
                                currQuestion.setStyle("background-color", "#FFF");
                                currQuestion.getElement("span").setStyle('background-color', diag.colorArray[i]);
                                currQuestion.removeEvent("click", diag.clickQuestion);
                                currQuestion.addEvent("click", diag.clickQuestion);
                            }
                        }
                    }
                }
            }


            // PHASE POSTéRIEURE
            else if (i > phase) {

                //{  GESTION QUESTIONS / RESULTATS
                var phaseContainer = $$("#CONTENT .telecommande .phases");
                var questionContainer = phaseContainer.getElement(".phase" + (i + 1));
                var resultContainer = phaseContainer.getElement(".phase" + (i + 1) + "replace");


                // On affiche les résultats uniquement si on n'est pas en mode MODIFICATION
                if (!diag.modifying) {
                    // Masquer le bloc question
                    questionContainer.setStyle("display", "block");

                    // Afficher le bloc de resultat
                    resultContainer.setStyle("display", "none");
                } else {
                    // Masquer le bloc question
                    questionContainer.setStyle("display", "block");

                    // Afficher le bloc de resultat					
                    resultContainer.setStyle("display", "none");

                }
                //}

                // Seules les questions repondues a la phase suivante doivent etre cliquables
                if (i == diag.lastPhase) {

                    for (var j = 0; j < questions.length; j++) {
                        var currQuestion = questions[j];
                        diag.questionRemoveState(currQuestion, phase);

                        // Les questions passees sont affichees pleines [.]
                        if (j <= /*diag.lastQuestion*/diag.validQuestions[i]) {
                            //currQuestion.addClass("respond");
                            currQuestion.getElement("span").setStyle('background-color', diag.colorArray[i]);
                            currQuestion.removeEvent("click", diag.clickQuestion);
                            currQuestion.addEvent("click", diag.clickQuestion);
                        }

                        // Les questions non repondues sont non cliquables
                        else if (j > question) {
                            if (!diag.modifying) currQuestion.addClass("nocursor");
                            // MODIFY !
                            // Les questions sont cliquables
                            else {
                                currQuestion.setStyle("background-color", "#FFF");
                                currQuestion.getElement("span").setStyle('background-color', diag.colorArray[i]);
                                currQuestion.removeEvent("click", diag.clickQuestion);
                                currQuestion.addEvent("click", diag.clickQuestion);
                            }
                        }
                    }
                }

                // Seules les questions repondues a la phase suivante doivent etre cliquables
                else if (i < diag.lastPhase) {
                    for (var j = 0; j < questions.length; j++) {
                        var currQuestion = questions[j];
                        diag.questionRemoveState(currQuestion, phase);

                        // Les questions passees sont affichees pleines [.]
                        //if( j <= diag.lastQuestion) {
                        //currQuestion.addClass("respond");
                        currQuestion.setStyle("background-color", "#FFF");
                        currQuestion.getElement("span").setStyle('background-color', diag.colorArray[i]);
                        currQuestion.removeEvent("click", diag.clickQuestion);
                        currQuestion.addEvent("click", diag.clickQuestion);
                        //}
                    }
                }
            }
        }

        //Permet de modifier l'état du diag en dessous du "Bonjour Toto"
        //en appelant une fonction login_diagstate(diagState) située dans \control\Login.ascx
        if (top.login_diagstate) {
            if (phase == 0 && question == 1)
                top.login_diagstate(2);
            // phase = 2 (3eme phase) , 17 questions
            if (phase == (diag.allPhase.length - 1) && question == (diag.allPhase[diag.allPhase.length - 1].getElements("a.question").length)) {
                //console.info('LAST QUESTION');
                top.login_diagstate(1);
            }
        }

        //... ***************************************
        //... TAGGING FOR EACH PHASE ENDING
        //... ***************************************
        if (question == 0) diag.isPhaseEndingLogged = false;

        if (!diag.isPhaseEndingLogged && question == (diag.allPhase[phase].getElements("a.question").length - 1)) {
            //... Log the phase change
            if (typeof (tagging) != 'undefined') {
                tagPage("Diagnostic VichyConsult - Phase " + (phase + 1), "DIAG:VC");
            }
            
            diag.isPhaseEndingLogged = true;
        }
    },

    //Enleve tout etat aux boutons de questions
    questionRemoveState: function(question, phase) {
        //question.removeClass('respond');
        //question.getElement("span").setStyle('background-color' , "#FFF");
        question.removeClass('done');
        question.removeClass('nocursor');
    },

    //Initialisation d'une question une fois que celle-ci a ete repondue
    addRespondQuestion: function(phase, question) {
        // console.info("ADDRESPONDQUESTION");
        //Changement de lastPhase et lastQuestion
        diag.lastQuestion += 1;

        if (diag.lastPhase < phase) {
            diag.lastPhase = phase;
            diag.lastQuestion = 0;
        }

        var currPhase = $$(".phase" + (phase + 1))[0];

        var currQuestion = currPhase.getElements("a.question")[question];
        currQuestion.setStyle("background-color", diag.colorArray[phase]);
        //currQuestion.addClass("done");
        currQuestion.addEvent("click", diag.clickQuestion);

        currQuestion.removeClass("nocursor");
    }
};

window.addEvent("domready",diag.init);
