﻿(function() {
    dojo.registerModulePath('cyim', '../cyim');
    dojo.require('cyim.dojo.widgets.MenuX');

    if (typeof (this.cyim.ModuleDirLoginPublic) == "undefined") {
        this.cyim.ModuleDirLoginPublic = {};
    }

    cyim.ModuleDirLoginPublic.loginInput = null;
    cyim.ModuleDirLoginPublic.passwordInput = null;
    cyim.ModuleDirLoginPublic.loginLabel = null;
    cyim.ModuleDirLoginPublic.passwordLabel = null;

    //L'id de la textbox ayant actuellement le focus
    cyim.ModuleDirLoginPublic.currentFocusedItemId = '';

    //défini si le champ password est en train d'être vérifié
    cyim.ModuleDirLoginPublic.passwordChecking = false;

    cyim.ModuleDirLoginPublic.HideLabelOnClic = function() {
        cyim.ModuleDirLoginPublic.loginInput = dojo.byId('Login');
        cyim.ModuleDirLoginPublic.passwordInput = dojo.byId('Password');
        cyim.ModuleDirLoginPublic.loginLabel = dojo.byId('mLoginLabel');
        cyim.ModuleDirLoginPublic.passwordLabel = dojo.byId('mPasswordLabel');
        cyim.ModuleDirLoginPublic.RegisterLoginLabel('mLoginLabel', 'Login');
        cyim.ModuleDirLoginPublic.RegisterPasswordLabel('mPasswordLabel', 'Password');
    };

    cyim.ModuleDirLoginPublic.IsLabelHasToBeDisplayed = function(label, input) {
        //on affiche le label,
        // si la textbox courante n'a pas le focus
        // ET
        // le champ est vide
        return ((input.id != cyim.ModuleDirLoginPublic.currentFocusedItemId) && ((!input.value) || (input.value == '')));
    };

    //Affiche le label correspondant à la textbox
    cyim.ModuleDirLoginPublic.DisplayLabel = function(label, input) {
        if ((label != undefined) && (typeof (label) != 'undefined')) {
            label.style.display = 'block';
        }
    };

    //Masque le label correspondant à la textbox
    cyim.ModuleDirLoginPublic.HideLabel = function(label, input) {
        label.storedDisplay = dojo.style(label, 'display');
        dojo.style(label, 'display', 'none');
    };

    //Affiche ou masque le label correspondant à la textbox
    cyim.ModuleDirLoginPublic.DisplayOrHideLabel = function(label, input) {
        if (cyim.ModuleDirLoginPublic.IsLabelHasToBeDisplayed(label, input)) {
            cyim.ModuleDirLoginPublic.DisplayLabel(label, input);
        } else {
            cyim.ModuleDirLoginPublic.HideLabel(label, input);
        }
    };

    //Gère l'affichage du champ login
    cyim.ModuleDirLoginPublic.RegisterLoginLabel = function(labelId, inputId) {
        var label = dojo.byId(labelId);
        var input = dojo.byId(inputId);
        if (label != undefined && input != undefined) {
            cyim.ModuleDirLoginPublic.DisplayOrHideLabel(label, input);
            dojo.connect(label, 'onclick', function() {
                cyim.ModuleDirLoginPublic.HideLabel(label, input);
                cyim.ModuleDirLoginPublic.DisplayOrHideLabel(cyim.ModuleDirLoginPublic.passwordLabel, cyim.ModuleDirLoginPublic.passwordInput);
            });
            dojo.connect(input, 'onkeyup', function() {
                cyim.ModuleDirLoginPublic.DisplayOrHideLabel(label, input);
                cyim.ModuleDirLoginPublic.DisplayOrHideLabel(cyim.ModuleDirLoginPublic.passwordLabel, cyim.ModuleDirLoginPublic.passwordInput);
            });
            dojo.connect(input, 'onchange', function() {
                cyim.ModuleDirLoginPublic.DisplayOrHideLabel(label, input);
                cyim.ModuleDirLoginPublic.DisplayOrHideLabel(cyim.ModuleDirLoginPublic.passwordLabel, cyim.ModuleDirLoginPublic.passwordInput);
            });
            dojo.connect(input, 'onfocus', function() {
                cyim.ModuleDirLoginPublic.currentFocusedItemId = input.id;
                //console.log('focus current', cyim.ModuleDirLoginPublic.currentFocusedItemId);
                cyim.ModuleDirLoginPublic.HideLabel(label, input);
                cyim.ModuleDirLoginPublic.passwordChecking = true;
                cyim.ModuleDirLoginPublic.RunPasswordCheck();
            });
            dojo.connect(input, 'onblur', function() {
                cyim.ModuleDirLoginPublic.passwordChecking = false;
                cyim.ModuleDirLoginPublic.currentFocusedItemId = '';
                cyim.ModuleDirLoginPublic.DisplayOrHideLabel(label, input);
                cyim.ModuleDirLoginPublic.DisplayOrHideLabel(cyim.ModuleDirLoginPublic.passwordLabel, cyim.ModuleDirLoginPublic.passwordInput);
            });
        }
    };


    //vérifie si le champ password est vide ou non
    cyim.ModuleDirLoginPublic.RunPasswordCheck = function() {
        if (cyim.ModuleDirLoginPublic.passwordChecking) {
            cyim.ModuleDirLoginPublic.DisplayOrHideLabel(cyim.ModuleDirLoginPublic.passwordLabel, cyim.ModuleDirLoginPublic.passwordInput);
            setTimeout(function() { cyim.ModuleDirLoginPublic.RunPasswordCheck(); }, 400);
        }
    };

    //Gère l'affichage du champ password
    cyim.ModuleDirLoginPublic.RegisterPasswordLabel = function(labelId, inputId) {
        var label = dojo.byId(labelId);
        var input = dojo.byId(inputId);
        if (label != undefined && input != undefined) {
            cyim.ModuleDirLoginPublic.DisplayOrHideLabel(label, input);
            dojo.connect(label, 'onclick', function() {
                cyim.ModuleDirLoginPublic.HideLabel(label, input);
            });
            dojo.connect(input, 'onkeyup', function() {
                cyim.ModuleDirLoginPublic.DisplayOrHideLabel(label, input);
            });
            dojo.connect(input, 'onchange', function() {
                cyim.ModuleDirLoginPublic.DisplayOrHideLabel(label, input);
            });
            dojo.connect(input, 'onfocus', function() {
                cyim.ModuleDirLoginPublic.currentFocusedItemId = input.id;
                cyim.ModuleDirLoginPublic.HideLabel(label, input);
            });
            dojo.connect(input, 'onblur', function() {
                cyim.ModuleDirLoginPublic.currentFocusedItemId = '';
                cyim.ModuleDirLoginPublic.DisplayOrHideLabel(label, input);
            });
        }
    };

})();
