/** *************************************************** */
/* Librairie de gestion des onglets d'historique sur */
/* les univers. */
/* nécessite l'import de : */
/* jquery.js */
/* jquery.cookie.js */
/** *************************************************** */

/** ************************************************************ */
/* ID HTML de la balise UL qui entoure les onglets des univers */
/** ************************************************************ */
var idElemPereOngletsUnivers = "top_nav_current_universes_ul_id";
/** ******************************************************** */
/* Traitement quand la page est prete */
/** ******************************************************** */
$(document)
        .ready(
                function() {
                    /** ********************************************************* */
                    /*
                     * Ici on appelle de nouveau le traitement d'analyse de l'URL, qui va provoquer la mise à jour du cookie.
                     * Cela peut paraître redondant avec l'intercepteur mis en place sur chaque clic (cf gestionNavigation.js),
                     * mais c'est impératif pour pouvoir traiter le cas où l'utilisateur arrive sur cette page à partir d'un
                     * lien direct depuis l'exterieur. Sur le même principe on met à jour le cookie du magasin courant à partir
                     * des données en session
                     */
                    /** ********************************************************* */
                    g_ongletsUnivers.traiterUrlUnivers(window.location.href);
                    if ((typeof (g_contexte) != 'undefined') && (g_contexte != null) && (g_contexte.magasin != null)
                            && (typeof (g_contexte.magasin) != 'undefined') && (g_contexte.magasin != "")) {
                        cookiesSite.saveMagasinCourant(g_contexte.magasin.nomUrl);
                    }

                    if ((typeof (g_contexte) != 'undefined') && (g_contexte != null) && (g_contexte.client != null)
                            && (typeof (g_contexte.client) != 'undefined') && (g_contexte.client != "")) {
                        cookiesSite.saveClientCourant(g_contexte.client);

                        if ((typeof (g_contexte) != 'undefined')
                                && (g_contexte != null)
                                && ((typeof (g_contexte.magasin) == 'undefined') || (g_contexte.magasin == null) || (g_contexte.magasin == ""))) {
                            cookiesSite.saveMagasinCourant(g_contexte.client.nomMagasinRattachement);
                        }

                    }

                    /** ********************************************************* */
                    /* Init de la barre d'onglet des univers lors du chargement */
                    /* de la page à partir des données du cookie */
                    /** ********************************************************* */
                    g_ongletsUnivers.creerOngletsDepuisCookie();
                });

/** ****************************************************** */
/* Création d'un objet Jquery de gestion des onglets */
/** ****************************************************** */

var g_ongletsUnivers = {
    /** ****************************************************** */
    /* Utilitaire de transformation de la Hashmap en string */
    /* pour pouvoir la sauvegarder dans un cookie */
    /** ****************************************************** */
    transformHashmapJSONEnString : function(hashmap) {
        if (hashmap == null) {
            return "";
        }
        var hashmapEnString = "";
        var enregEnString = "";
        $.each(hashmap, function(ind, enreg) {
            enregEnString = "{";
            $.each(enreg, function(key, value) {
                if (enregEnString != "{") {
                    enregEnString = enregEnString + ",";
                }
                enregEnString = enregEnString + "\"" + key + "\":\"" + value + "\"";
            });
            if (hashmapEnString != "") {
                hashmapEnString = hashmapEnString + ",";
            }
            hashmapEnString = hashmapEnString + enregEnString + "}";
        });
        if (hashmapEnString != "") {
            hashmapEnString = "[" + hashmapEnString + "]";
        }
        return hashmapEnString;
    },

    /** ****************************************************** */
    /* Sauvegarde de la Hashmap des univers dans le cookie */
    /** ****************************************************** */
    saveCookieUnivers : function(hashmap) {
        // transformation de la hashmap JSON en un chaine exportable dans un cookies
    var hashmapEnString = this.transformHashmapJSONEnString(hashmap);
    // on écrit à la racine et on ne définie pas de expires donc le cookie est de type session
    // $.cookie(COOKIE_NAME_UNIVERS, hashmapEnString, COOKIE_OPTIONS_UNIVERS);
    cookiesSite.saveNavigationUnivers(hashmapEnString);
},

/** ****************************************************** */
/* Lecture du cookie des univers et retourne le résultat */
/* sous forme de hashmap */
/** ****************************************************** */
getHashMapCookieUnivers : function() {
    // lecture du cookie
    // var str = $.cookie(COOKIE_NAME_UNIVERS);
    var str = cookiesSite.getNavigationUnivers();
    if (str == null) {
        // cookie n'existe pas ou est vide
        str = "";
    }
    // création d'une hashmap à partir du contenu du cookie
    var hashmap = $.parseJSON(str);
    return hashmap;
},

/** *************************************************** */
/* Traite une url sur laquelle on vient de cliquer */
/* si l'url contient le pattern d'un des univers */
/* on l'ajoute dans le cookies sous la forme d'une */
/* Hashmap. La Hashmap est gérée en fifo à 4 éléments */
/** *************************************************** */
traiterUrlUnivers : function(urlEnCours) {
    // cherche si l'url répond à l'un des patterns d'univers et si l'url fait parti du paramétrage de gestion des
    // onglets
    if (!(getConfigGestionOnglet(urlEnCours) && analyseURL.analyseUnivers(urlEnCours))) {
        // ce n'est pas une url d'un univers, vérifie si Espace du coup
        if (analyseURL.analyseEspace(urlEnCours)) {
            /* c'est une url Espace on la stocke dans le cookies d'univers courant */
            /* c'est bizarre mais c'est bon */
            cookiesSite.saveUniversCourant(analyseURL.codeEspace);
        } else {
            cookiesSite.deleteUniversCourant();
        }
        return;
    }
    var clefUniversTrouve = analyseURL.codeUnivers;
    // je suis sur une URL d'univers, il faut mettre à jour le cookie
    // création du nouvel enregistrement qu'il faudra ajouter au cookie
    var newEnreg = $.parseJSON("{\"clef\":\"" + clefUniversTrouve + "\",\"url\":\"" + urlEnCours + "\"}");
    // Creation cookie indice onglet courant :
    cookiesSite.saveUniversCourant(newEnreg.clef);

    // charge le cookie s'il existe
    var hashmapCookie = this.getHashMapCookieUnivers();

    if ((hashmapCookie != null) && (hashmapCookie.length > 0)) {
        // j'ai un cookie non vide
        var bTrouve = false;
        $.each(hashmapCookie, function(ind, enreg) {
            if (enreg.clef == newEnreg.clef) {
                // j'ai déjà cette clef dans le cookies donc je change son URL avec la nouvelle
                enreg.url = newEnreg.url;
                bTrouve = true;
            }
        });
        if (!bTrouve) {
            // La clef n'est pas déjà dans le cookie
            if (hashmapCookie.length >= 4) {
                // j'ai déjà 4 clefs dans le cookie donc il faut en supprimer un en fifo
                var hashmapCookieTmp = new Array(hashmapCookie.length - 1);
                for (i = 0; i < hashmapCookie.length; i++) {
                    if (i > 0) {
                        hashmapCookieTmp[i - 1] = hashmapCookie[i];
                    }
                }
                hashmapCookie = hashmapCookieTmp;
                hashmapCookie[hashmapCookie.length] = newEnreg;
                indiceOngletActif = hashmapCookie.length;
            } else {
                // ajoute à la fin du tableau
                hashmapCookie[hashmapCookie.length] = newEnreg;
                indiceOngletActif = hashmapCookie.length;
            }
        }
    } else {
        // je n'ai pas de cookie ou il est vide, donc je le créé avec mon nouvel enregistrement
        hashmapCookie = new Array(0);
        hashmapCookie[0] = newEnreg;
    }
    // sauve le cookie
    this.saveCookieUnivers(hashmapCookie);
},

/** ***************************************************** */
/* Suppression d'une univers dans le cookie des univers */
/* à partir de la clef passé en paramètre */
/** ***************************************************** */
supprimeUrlUnivers : function(clefUniversSupp) {
    // charge le cookie s'il existe
    var hashmapCookie = this.getHashMapCookieUnivers();
    var cleOngletActif = cookiesSite.getUniversCourant();
    var indiceOngletActif = -1;
    if ((hashmapCookie != null) && (hashmapCookie.length > 0)) {
        var hashmapCookieTmp = [];
        var indiceOngletBoucle = 0;
        // création du cookie en supprimant la clef à supprimer
        $.each(hashmapCookie, function(ind, enreg) {
            if (enreg.clef != clefUniversSupp) {
                hashmapCookieTmp.push(enreg);
            } else {
                indiceOngletActif = indiceOngletBoucle;
            }
            indiceOngletBoucle++;
        });
        hashmapCookie = hashmapCookieTmp;
        // sauve le cookie "navigation univers"
        this.saveCookieUnivers(hashmapCookie);
        // Si l'onglet qui est supprimé est également l'onglet actif :
        // Il faut gerer l'univers courant et changer de page
        if ((cleOngletActif + '') == (clefUniversSupp + '')) {
            // Si l'onglet supprimé est le dernier onglet de la liste, l'onglet actif devient l'avant dernier :
            if (indiceOngletActif >= hashmapCookie.length) {
                indiceOngletActif = hashmapCookie.length - 1;
            }
            // Suppression du dernier onglet existant :
            if (indiceOngletActif == -1) {
                cookiesSite.deleteUniversCourant();
                // redirection sur la home du portail : TODO => redirection home magasin
                var url = '/';
                if ((g_contexte != null) && (g_contexte.magasin != null) && (g_contexte.magasin.nomUrl != null)
                        && (g_contexte.magasin.nomUrl != '')) {
                    url = analyseURL.PREFIXE_ESPACE_MAGASIN + '/' + g_contexte.magasin.nomUrl;
                }
                $("#prefixHrefOngletClose" + clefUniversSupp).attr("href", url);
                return true;
            } // Suppresion de l'onglet actif => on clique sur l'onglet précédent
            else {
                var enrActif = hashmapCookie[indiceOngletActif];
                var lienNouvelOngletCourant = $("#prefixHrefOnglet" + enrActif.clef).attr("href");
                $("#prefixHrefOngletClose" + clefUniversSupp).attr("href", lienNouvelOngletCourant);
                return true;
            }
        }// Dans le cas contraire on supprime l'onglet sans submit
        else {
            return false;
        }
    }
    return false;
},

/** ******************************************************** */
/* Action associée au bouton "Fermer onglet" */
/* Supprime l'onglet visuellement ainsi que dans le cookie */
/** ******************************************************** */
fermerOngletUnivers : function(idelm) {
    // Si l'élément est introuvable on ne fait rien
    if (($('#prefixIdOnglet' + idelm) == null)) {
        return (false);
    }
    // supprime la clef du cookie
    var supprimerOnglet = !this.supprimeUrlUnivers(idelm);
    if (supprimerOnglet) {
        // Mise à jour des fleches
        $("#historique .mask").trigger('prev');
        // supprime l'élément
        $('#prefixIdOnglet' + idelm).remove();
        // Mise à jour des fleches
        if ($("#historique li").length < 4) {
            $("#historique .prev, #historique .next").addClass("hide")
        } else {
            $("#historique .prev, #historique .next").removeClass("hide");
        }
        return false;
    }
    return true;
},

/** ******************************************************** */
/* Affiche un onglet d'univers */
/** ******************************************************** */
afficherOngletUnivers : function(clef_univers, url_univers, libelle_univers, isSelected) {
    // récupere le noeud parent des onglets
    if ($('#' + idElemPereOngletsUnivers) == null) {
        // pas trouvé le parent donc c'est fini
        return (true);
    }
    // création d'un nouvel onglet et de son contenu
    var content = "";
    content += '<li id="' + "prefixIdOnglet" + clef_univers + '"';
    if (isSelected) {
        content += ' class="current" ';
    }
    content += ">";
    content += '<a href="' + url_univers + '" class="univers" id="' + "prefixHrefOnglet" + clef_univers + '">'
            + libelle_univers + '</a>';
    content += '<a href="#" id="' + "prefixHrefOngletClose" + clef_univers
            + '" onclick="return g_ongletsUnivers.fermerOngletUnivers(\'' + clef_univers
            + '\');" class="close">Fermer</a>';
    content += '</li>';

    // ajout de l'onglet dans le noeud parent des onglets
    $(content).appendTo('#' + idElemPereOngletsUnivers);
    return (true);
},

/** ******************************************************** */
/* Création des onglets univers à partir des informations */
/* du cookie */
/** ******************************************************** */
creerOngletsDepuisCookie : function() {
    var ongletCourant = cookiesSite.getUniversCourant();
    // récupere les onglets en cookie
    var hashmapCookie = this.getHashMapCookieUnivers();
    var indexSelected = null;
    if ((hashmapCookie != null) && (hashmapCookie.length > 0)) {
        // j'ai des onglets en cookie je les affiche
        for (i = 0; i < hashmapCookie.length; i++) {
            // TODO : il faut traiter le cas du encours
            var isSelected = (ongletCourant == hashmapCookie[i].clef);
            indexSelected = ((indexSelected == null) && (isSelected == true)) ? i : indexSelected;
            this.afficherOngletUnivers(hashmapCookie[i].clef, hashmapCookie[i].url, hashmapCookie[i].clef, isSelected);
        }

        if (indexSelected > 2) {

            $("#historique .mask").trigger("goto", [ indexSelected - 2 ]);

        }
        if (hashmapCookie.length < 4) {

            $("#historique .prev, #historique .next").addClass("hide");
        } else {
            $("#historique .prev, #historique .next").removeClass("hide");
        }
    }
},
/** ************************************************************ */
/* Suppression des onglets univers dans le cookie et à l'écran */
/** ************************************************************ */
razOngletsUnivers : function() {
    // récupere les onglets en cookie
    var hashmapCookie = this.getHashMapCookieUnivers();
    if ((hashmapCookie != null) && (hashmapCookie.length > 0)) {
        // j'ai des onglets en cookie je les supprime
        for (i = 0; i < hashmapCookie.length; i++) {
            this.fermerOngletUnivers(hashmapCookie[i].clef);
        }
    }
}
}
