/* 
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
function MenuGeneral( listeMenus , nomVariable) {
    this.applicationWeb = listeMenus;
    this.nomVariable = nomVariable;
}

MenuGeneral.prototype = {
    nomVariable : "",
    applicationWeb : undefined,


    // fonction appelée sur le onclick  d'une feuille
    // enregistre dans un cookie le tag de l'item en cours
    // puis appel la callback "utilisateur"
    _avantAppelCallback : function(css_id) {
        var elt = this.chercherId(css_id);
        this.ecrireCookie(this.nomVariable+".tag", elt.tag);
        var chaine = this.applicationWeb.javascript_callback+"('"+css_id+"',"+this.nomVariable+".chercherId('"+css_id+"'))";
        eval("("+chaine+")");
    },

    // utilisé pour la récursion
    // ne pas appeler directement
    _creer:function (niveau,descendance) {
        //console.log("niveau "+niveau);
        if(typeof(descendance)=='undefined') {
            return "";
        }
        // balise ul avec son id
        var html ="<ul id='"+descendance.css_id+"'>";

        // parcourt des éléments , conversion en li

        for(var i=0;i<descendance.enfants.length;i++) {
            var elt = descendance.enfants[i];

            var s_onclick = ""
            if(elt.serveur_url=="" || elt.serveur_url==null || typeof(elt.serveur_url)=='undefined') {
                s_onclick=" onclick='javascript:"+this.nomVariable+".afficherEnfants("+String.fromCharCode(34)+elt.css_id+String.fromCharCode(34)+");' " ;
            } else {
                //s_onclick=" onclick='javascript:"+this.applicationWeb.javascript_callback+"("+String.fromCharCode(34)+elt.css_id+String.fromCharCode(34)+","+this.nomVariable+".chercherId("+String.fromCharCode(34)+elt.css_id+String.fromCharCode(34)+"));' " ;
                s_onclick=" onclick='javascript:"+this.nomVariable+"._avantAppelCallback("+String.fromCharCode(34)+elt.css_id+String.fromCharCode(34)+");' ";
            }
            html+="<li><a id='"+elt.css_id+"' "+s_onclick+" href='#' >"+elt.libelle+"</a>";
            if(typeof(elt.descendance)!='undefined') {
                html+=this._creer(niveau+1,elt.descendance);
            }
            html+="</li>";

        }

        // fin balise ul
        html+="</ul>";

        return html;
    },

    // parcours récursif et création des ul/li + du tableau applicationTableau
    creer: function ( id_div ) {
        if(typeof(this.applicationWeb)=='undefined' || this.applicationWeb==null) {
            return;
        }


        var html="";

        html = this._creer(0,this.applicationWeb.descendance);

        $('#'+id_div).html(html);

    //    console.log('nombre de lignes : '+applicationTableau.length);
    //    for(i=0;i<applicationTableau.length;i++) {
    //        console.log("ligne "+i+" ; nombre de colonnes : "+applicationTableau[i].length);
    //        for(j=0;j<applicationTableau[i].length;j++) {
    //            console.log("["+i+","+j+"] "+ applicationTableau[i][j].serveur_url+"?"+applicationTableau[i][j].serveur_param);
    //        }
    //    }
    //        this.afficherPremiersNiveaux();
    //this.afficherEnfants( 'tab_indicateurs_clefs');


    },


    // afficher seulement les premiers li donc les items de plus haut niveau
    //
    afficherPremiersNiveaux: function () {
        if(typeof(this.applicationWeb)=='undefined' || this.applicationWeb==null) {
            return;
        }

        for(var i=0;i<this.applicationWeb.descendance.enfants.length;i++) {
            var elt = this.applicationWeb.descendance.enfants[i];
            if(typeof(elt.descendance)!='undefined') {

                $('#'+elt.descendance.css_id).css('display','none');
            }
        }
    },


    // utilisé pour la récursion
    // ne pas appeler directement
    _afficherEnfants:   function (descendance, css_id) {
        if(typeof(descendance)=='undefined') {
            return;
        }
        
        //        console.log("égalité entre "+css_id+" dans "+descendance.css_id+" ?");

        if(descendance.css_id==css_id) {

            if(typeof(descendance.descendance)!='undefined') {
                //                console.log("oui! id de la descendance :"+ descendance.descendance.css_id);
                $('#'+descendance.descendance.css_id).css('display','block');
                EcrireCookie('type_fonction_cookie',css_id);
                // appel auto à la callback "utilisateur" pour l'enfant qui possède le même tag que le cookie
                // sinon appel de cette callback pour le premier enfant
                var tag_cookie = this.lireCookie(this.nomVariable+".tag");
                for(var i=0;i<descendance.descendance.enfants.length;i++) {
                    var enfant = descendance.descendance.enfants[i];
                    if(enfant.tag==tag_cookie) {
                        this._avantAppelCallback(enfant.css_id);
                    }
                }
            }

        } else {
            if(typeof(descendance.enfants)!='undefined') {
                //                console.log("non donc recherche dans les enfants de "+descendance.css_id);
                for(var i=0;i<descendance.enfants.length;i++) {
                    //                    console.log("enfant "+i+" de "+descendance.css_id+" soit "+descendance.enfants[i].css_id);
                    this._afficherEnfants(descendance.enfants[i],css_id);
                //                    console.log("enfant "+i+" de "+descendance.css_id+" => sortie");
                }
            }
        }

    },
    //
    // afficher tous les enfants d'un noeud css_id
    //
    afficherEnfants: function ( css_id ) {
        if(typeof(this.applicationWeb)=='undefined' || this.applicationWeb==null) {
            return;
        }
        this.afficherPremiersNiveaux();
        this._afficherEnfants(this.applicationWeb.descendance,css_id);
    },


    // afficher le premier enfant de l'élément css_id
    // et appeler la callback "utilisateur"


    _afficherPremierEnfant : function(descendance, css_id) {

        if(typeof(descendance)=='undefined') {
            return undefined;
        }
        
//        console.log('['+this.compte+'] recherche de '+css_id+' dans '+descendance.css_id);
        if(descendance.css_id==css_id) {
            if(typeof(descendance.descendance)!='undefined') {
//                console.log('trouvé ! appel de chargerdiv sur '+descendance.descendance.enfants[0].css_id);
                this._avantAppelCallback(descendance.descendance.enfants[0].css_id);
//                console.log('après appel de chargerdiv sur '+descendance.descendance.enfants[0].css_id);
                return undefined;
            }
        } else {
//            console.log('non trouvé')                ;
            if(typeof(descendance.descendance)!='undefined') {
//                console.log('non trouvé ET j"ai des enfants');
//                if(!trouve) {
                    for(var i=0;i<descendance.descendance.enfants.length;i++) {
//                        console.log('recherche dans '+descendance.descendance.enfants[i].css_id);
                        this._afficherPremierEnfant(descendance.descendance.enfants[i],css_id);
                    }
//                }
            }

        }

    },

    afficherPremierEnfant : function(css_id) {
        if(typeof(this.applicationWeb)=='undefined') {
            return undefined;
        }
        this.compte=0;
        this._afficherPremierEnfant(this.applicationWeb,css_id);
    },





    // utilisé pour la récursion
    // ne pas appeler directement
    _chercherId:   function (descendance, css_id) {
        if(typeof(descendance)=='undefined') {
            return undefined;
        }

        //        console.log("égalité entre "+descendance.css_id +" et "+css_id+" ?");

        if(descendance.css_id==css_id) {
            //            console.log('oui ! trouvé! ');
            return descendance;
        } else {
            //            console.log('non!');
            if(typeof(descendance.descendance)!='undefined') {
                // il y a une descendance
                // est ce l'élément de la descendance que l'on doit chercher ?
                if(descendance.descendance.css_id==css_id) {
                    //                    console.log('oui ! trouvé! ');
                    return descendance.descendance;
                }
                else {
                    //                    console.log('il y a une des enfants donc recherche dans les '+descendance.descendance.enfants.length+" enfants");
                    for(var i=0;i<descendance.descendance.enfants.length;i++) {
                        //                        console.log('enfant '+i+' : '+descendance.descendance.enfants[i].css_id);
                        var resultat = this._chercherId(descendance.descendance.enfants[i],css_id);
                        if(typeof(resultat)!='undefined') {
                            //                            console.log('trouvé!');
                            return resultat;
                        }
                    //                        else {
                    //                            console.log('non trouvé dans cet enfant');
                    //                        }
                    }
                }
                return undefined;
            }
        }

    },

    //
    // afficher les enfants directs d'un noeud css_id
    //
    chercherId : function (css_id) {
        if(typeof(this.applicationWeb)=='undefined' || this.applicationWeb==null) {
            return undefined;
        }

        return this._chercherId(this.applicationWeb,css_id);
    },

    //Ecrire un cookie
    ecrireCookie: function (nom, valeur){
        var argv=this.ecrireCookie.arguments;
        var argc=this.ecrireCookie.arguments.length;
        var expires=(argc > 2) ? argv[2] : null;
        var path=(argc > 3) ? argv[3] : null;
        var domain=(argc > 4) ? argv[4] : null;
        var secure=(argc > 5) ? argv[5] : false;
        document.cookie=nom+"="+escape(valeur)+
        ((expires==null) ? "" : ("; expires="+expires.toGMTString()))+
        ((path==null) ? "" : ("; path="+path))+
        ((domain==null) ? "" : ("; domain="+domain))+
        ((secure==true) ? "; secure" : "");
    },

    //Fonction utilisé dans Lire un cookie
    getCookieVal : function (offset){
        var endstr=document.cookie.indexOf (";", offset);
        if (endstr==-1) endstr=document.cookie.length;
        return unescape(document.cookie.substring(offset, endstr));
    },

    //Lire un cookie
    lireCookie: function (nom){
        var arg=nom+"=";
        var alen=arg.length;
        var clen=document.cookie.length;
        var i=0;
        while (i<clen)
        {
            var j=i+alen;
            if (document.cookie.substring(i, j)==arg) return this.getCookieVal(j);
            i=document.cookie.indexOf(" ",i)+1;
            if (i==0) break;
        }
        return null;
    },

    //Effacer un cookie
    effaceCookie : function (nom){
        date=new Date;
        date.setFullYear(date.getFullYear()-1);
        this.ecrireCookie(nom,null,date);
    }

}



