// DECLARATION VARIABLES GLOBALES
var tabSousCritereArbo= new ArrayList() ; //liste contenant les differents criteres
var tabIdProduitCritere = new ArrayList() ; // liste contenant les diffrents produits avec la liste de leur criteres (liste de depart, non modifie)
var tempTabIdProduitCritere = new ArrayList() ;// liste contenant les diffrents produits avec la liste de leur criteres (copie de tabIdProduitCritere, puis modifie par la suite)
var mapCritere = new Map() ; //contient la map liste valeur critere par nom critere
var mapCompteurParValeurCritere = new Map() ; //contient la map compteur produit par valeur critere
var mapTitreAafficherParValeurCritere = new Map() ; //contient la map titreaafficher par valeur critere 
var listeCritereProduitType = new ArrayList() ; //Liste qui contient les id des produits pour le critre type

var mapCritereParIdProduit = new Map() ; //contient les criteres pour l'id produit

/* ################################CES FONCTIONS SONT UTILISER POUR AFFICHER L ARBO MULTICRITERE################################################## */    
function supprDoublonCritere(idDuProduit,valeurCritere,criterePere,titreaafficher){  
        var sousCritereArbo = new SousCritereArbo(criterePere, valeurCritere,titreaafficher) ;     
        var blocaCacher = document.getElementById("encartgauchebas");   
        if(blocaCacher){
            blocaCacher.style.display="none";
        }
        
        //rajoute le critere pour ce produit dans la map
        var listeCritereProduitCourant = mapCritereParIdProduit.get(idDuProduit) ;
        if(listeCritereProduitCourant == null || listeCritereProduitCourant == ""){
            listeCritereProduitCourant = new ArrayList() ;
        }
        listeCritereProduitCourant.add(sousCritereArbo) ;
        mapCritereParIdProduit.remove(idDuProduit);
        mapCritereParIdProduit.put(idDuProduit,listeCritereProduitCourant);
} 


function verifCritereArbo(){ //on va regarder la liste de sproduits activer apr erep : "enableModelList" 
    if(typeof enableModelList != "undefined"){
        for(var i=0 ; i<enableModelList.length() ; i++){
            var idProduitEnable = enableModelList.get(i) ;
            var listeCritereCeProduit = mapCritereParIdProduit.get(idProduitEnable) ;
            
            if(listeCritereCeProduit){
                for(var k=0 ; k<listeCritereCeProduit.length() ; k++){
                    var sousCritereArbo = listeCritereCeProduit.get(k) ;
                    var criterePere = sousCritereArbo.getNom() ;
                    var titreaafficher = sousCritereArbo.getTitre() ;
                    var valeurCritere = sousCritereArbo.getValeur() ;
                    if(criterePere == "sexe"){
                            var titreSansEspace = titreaafficher ;
                            if(titreaafficher.indexOf(" ") == 0){
                                titreSansEspace = titreaafficher.substring(1) ;
                            }
                            valeurCritere = valeurCritere+"_"+titreSansEspace ;
                            sousCritereArbo = new SousCritereArbo(criterePere, valeurCritere,titreaafficher) ;
                            tabSousCritereArbo.add(sousCritereArbo) ;
                    }
                    else if(criterePere == "type"){
                        if(listeCritereProduitType.length() == 0 || listeCritereProduitType.contains(idProduitEnable) == -1){
                            tabSousCritereArbo.add(sousCritereArbo) ;
                            listeCritereProduitType.add(idProduitEnable) ;
                        }
                    }
                    else{
                        tabSousCritereArbo.add(sousCritereArbo) ;
                    }
                }
            }
        }
    }
}

function recupCritere(leNomCritere){          
    for(var i=0 ; i<tabSousCritereArbo.length() ; i++){
        var critereArbo = tabSousCritereArbo.get(i) ;
        var nomCritere = critereArbo.getNom() ;
        if(nomCritere == leNomCritere){                                           
            var valeurCritere = critereArbo.getValeur() ;
            var titreCritere = critereArbo.getTitre() ;
            var compteur=mapCompteurParValeurCritere.get(valeurCritere);
            if(compteur==""){
                compteur=0;
            }
            compteur++;              
            mapCompteurParValeurCritere.remove(valeurCritere);
            mapCompteurParValeurCritere.put(valeurCritere,compteur);
            mapTitreAafficherParValeurCritere.put(valeurCritere,titreCritere);     
            //on va recuperer la liste des valeurs de criteres pour ce nom de critere
            var listeCritere = mapCritere.get(leNomCritere) ;             
            if(listeCritere == null || listeCritere == ""){
                listeCritere = new ArrayList() ;
            }             
            //si la liste listeCritere ne contient pas la valeur du critere, on va le mettre
            if(listeCritere.contains(valeurCritere) == -1){
                listeCritere.add(valeurCritere) ;
                mapCritere.remove(leNomCritere) ;
                mapCritere.put(leNomCritere, listeCritere) ; 
            }
        }
    }
} 

function getCritereAffichage(leNomCritere){
    var listeCritere = mapCritere.get(leNomCritere) ;
    var ligneCouleur;
    var tagCountry = "/"+_language+"/" ;
    var tag = tagCountry + tagLink + "critere-"+leNomCritere ;
    if(listeCritere){          
        for (var i=0; i < listeCritere.length() ; i++) {
            var valeurCritere = listeCritere.get(i) ;
            var compteurCritere =  mapCompteurParValeurCritere.get(valeurCritere);
            var Titreaafficher=mapTitreAafficherParValeurCritere.get(valeurCritere);            
            //affichage
            if(document.getElementById(leNomCritere)){
                var zoneSousCritere = document.getElementById(leNomCritere);           
                contenuZoneSousCritere = zoneSousCritere.innerHTML;           
                if(leNomCritere !='couleur'){
                    if(leNomCritere =='sexe'){
                        zoneSousCritere.innerHTML = contenuZoneSousCritere + " <span class='sous-titre-arbo'><a href='#' onclick='tagGa(\""+tag+"\");ajoutFiltreArbo(\""+valeurCritere + "\",\""+leNomCritere+"\"); return false;'>"+ Titreaafficher+ "&nbsp;(" + (compteurCritere) + ")</a></span><br/>" ;
                    }
                    else{
                        var premierLettre = valeurCritere.charAt(0);  
                        premierLettre = premierLettre.toUpperCase();  // met la 1ere lettre du type en majuscule
                        var resteDesLettres = valeurCritere.substring(1);
                        resteDesLettres = resteDesLettres.toLowerCase();  // met toutes les autres lettre que la premiere en majuscule
                        var valeurCritereAfficher=premierLettre + resteDesLettres;
                        zoneSousCritere.innerHTML = contenuZoneSousCritere + " <span class='sous-titre-arbo'><a href='#' onclick='tagGa(\""+tag+"\");ajoutFiltreArbo(\""+valeurCritere + "\",\""+leNomCritere+"\"); return false;'>"+ valeurCritereAfficher + "&nbsp;(" + compteurCritere + ")</a></span><br/>" ;
                    }
                }
                else{
                    if(valeurCritere != ''){
                        ligneCouleur="<div id='img-couleur' style='background-color: "+ valeurCritere + "'><img src='/"+_language+"/images/static/imgtransp.gif' alt='"+ Titreaafficher +"'></img></div>";
                    }
                    else{
                        ligneCouleur="<div id='img-couleur'><img src='/"+_language+"/images/static/imgsanscouleur.jpg' alt='UNDEFINED COLOR'></img></div>";
                    }                          
                    zoneSousCritere.innerHTML = contenuZoneSousCritere + " <span class='sous-titre-arbo'><a href='#'  onclick='tagGa(\""+tag+"\");ajoutFiltreArbo(\""+valeurCritere+"\",\""+leNomCritere+"\"); return false;''>" +  ligneCouleur + "</a></span>" ;                    
                }
            }
        }        
    }
    else{ //si on a pas de sous criteres sous ce critere pere, alors on cache le bloc pere
        var zoneCompleteaCacher = 'titre-arbo-'+leNomCritere;
        zoneSousCritere = document.getElementById(zoneCompleteaCacher);   
        if(zoneSousCritere) zoneSousCritere.style.display="none";
    }
}
function tagGa(tag){
    for(i=0;i<pageTracker.length;i++){ 
        doLinkTag(tag,i);
    }
}
/* ################################CES FONCTIONS SONT UTILISER POUR FAIRE LA RESTRICTION AVEC LES FILTRES ###################################### */

/* Suite au clic sur tout afficher, on supprime tous les filtres et on affiche tout*/
function resetFiltreArbo() {
    tempTabIdProduitCritere = new ArrayList() ;        
    tempTabIdProduitCritere=tabIdProduitCritere;
    document.location.reload(true)
}

/* on passe sur tout les Produits et on stocke toute les infos dans une liste*/
function ajoutProduitCritereArbo(idProduit,valeurSexe,valeurType,valeurCouleur,sexeDetail,couleurIndus){
    var Produitarbocourant=new Produitarbo(idProduit,valeurSexe,valeurType,valeurCouleur,sexeDetail,couleurIndus);           
    tabIdProduitCritere.add(Produitarbocourant);
    tempTabIdProduitCritere.add(Produitarbocourant);    
}

function verifProduitEnable(){
    if(typeof enableModelList != "undefined"){
        for(var i=0 ; i<tabIdProduitCritere.length() ; i++){
            var produiCourant = tabIdProduitCritere.get(i) ;
            var idProduit = produiCourant.getId() ;
            if(enableModelList.contains(idProduit) == -1){
                tabIdProduitCritere.remove(i) ;
                tempTabIdProduitCritere.remove(i) ;
            }
        }
    }
}

/* Suite au clic sur un filtre*/
function ajoutFiltreArbo(valeurCritere, nomCritere){        
    var lienToutAfficher=document.getElementById("tout-aff-arbo");           
    if(lienToutAfficher){
        lienToutAfficher.style.display="block";
    }
    var listeProduitASupprimer = new ArrayList() ;
    for (var i=0; i < tempTabIdProduitCritere.length() ; i++) {
        var Produit=tempTabIdProduitCritere.get(i);            
        var ProduitId=Produit.getId(); //on recupere toute les infos du Produit en cour
        var ProduitSexe=Produit.getSexe()+"_"+Produit.getSexedetail() ;
        var ProduitType=Produit.getType() ;
        var ProduitCouleur=Produit.getCouleur();
        ProduitCouleurIndus=Produit.getCouleurindus();    
        var produitDesactiverParErep=document.getElementById("vignetteproduit-"+ProduitId);           
        if(((ProduitSexe != valeurCritere) && (ProduitType != valeurCritere) && (ProduitCouleur != valeurCritere)) ||(produitDesactiverParErep.style.display =="none")){ //si le filtre sexe correspondant a ce que l utilisateur a choisi 
            listeProduitASupprimer.add(Produit) ;
        }       
    }       
    //on supprime les produits
    for(var i=0 ; i<listeProduitASupprimer.length() ; i++){
        var ProduitASupp = listeProduitASupprimer.get(i) ;
        var indexProduitASupp = tempTabIdProduitCritere.contains(ProduitASupp) ;
        tempTabIdProduitCritere.remove(indexProduitASupp) ;
    }       
    cacherProduitFiltrer();
    showAll();    
}

/* ################################CES FONCTIONS SONT UTILISER AFFICHER/CACHER LES VIGNETTES ProduitS  ###################################### */
function cacherProduitFiltrer(){
    var p=document.getElementById("bloc-produits");
    var tab=p.getElementsByTagName("li");
    var listeProduitAAfficher = new ArrayList() ;      
    var navigationPage=document.getElementById("navigationpage"); //on cache le bloc de navigation car il ne sert plus a rien
    
    if(navigationPage){
        navigationPage.style.display="none";
    }
    
    for (var k=0; k<tab.length;  k++){
        var element=tab[k];
        var produitVignette=element.id;
        var idProduitVignette=produitVignette.replace('vignetteproduit-','');
        if(produitVignette.indexOf("vignetteproduit-")>-1){
            for (var i=0; i < tempTabIdProduitCritere.length() ; i++) {
                var Produit=tempTabIdProduitCritere.get(i);
                var ProduitId=Produit.getId(); //on recupere toute les infos du Produit en cour            
                if(idProduitVignette == ProduitId){
                    if(element){
                        if(element.style.display != "none"){
                            if(listeProduitAAfficher.contains(produitVignette) == -1){
                                listeProduitAAfficher.add(produitVignette) ;
                            }
                        }
                    }                        
                }
            }
            if(element){
                element.style.display = "none" ;
            }
        }
    }
    //on va maintenant parcourir la liste des produits a afficher pour les afficher    
    for(var i=0;i<listeProduitAAfficher.length() ; i++){
        var idProduitVignette = listeProduitAAfficher.get(i) ;
        if(idProduitVignette && idProduitVignette != ""){
            var element = document.getElementById(idProduitVignette) ;
            if(element){
                element.style.display = "block" ;
            }
        }
    }
    //on va regarder si il faut oui ou non cacher le bloc "Creez votre panoplie"
    var compareProduitBloc = document.getElementById("compareProduit") ;
    if(compareProduitBloc){
        if(listeProduitAAfficher.length() < 2){
            compareProduitBloc.style.display = "none" ;
        }
        else{
            compareProduitBloc.style.display = "block" ;        
        }    
    }
    actualiserFiltreArbo();
}    


/* ########################################### ACTUALISATION DE LA LISTE DE GAUCHE ARBO AVEC LES FILTRES ####################################################*/

function actualiserFiltreArbo(){
    //mettre a jour le tableau tabSousCritereArbo avec le produits filtres
    //remettre a 0 les tables et listes suivantes :
    //mapCritere
    //mapCompteurParValeurCritere 
    //mapTitreAafficherParValeurCritere
    //on appelle recupCritere sur chaque type de critere
    //on appelle getCritereAffichage sur chaque type de critere    
    tabSousCritereArbo = new ArrayList() ;
    mapCritere = new Map() ; //contient la map liste valeur critere par nom critere
    mapCompteurParValeurCritere = new Map() ; //contient la map compteur produit par valeur critere
    mapTitreAafficherParValeurCritere = new Map() ; //contient la map titreaafficher par valeur critere
    listeCritere = new ArrayList() ;
    listeCritereProduitType = new ArrayList() ; 
    mapCritere= new Map() ;  
    mapCritereParIdProduit = new Map() ;
    if(document.getElementById("sexe")){
        var blocSexe=document.getElementById("sexe"); //on vide le bloc sexe pour le remplacer par le nouveau bloc 
        blocSexe.innerHTML='';
    }
    if(document.getElementById("type")){
        var blocType=document.getElementById("type"); //on vide le bloc type pour le remplacer par le nouveau bloc     
        blocType.innerHTML='';
    }
    if(document.getElementById("couleur")){
        var blocCouleur=document.getElementById("couleur"); //on vide le bloc type pour le remplacer par le nouveau bloc 
        blocCouleur.innerHTML='';
    }
    for(var i=0 ; i<tempTabIdProduitCritere.length() ; i++){
        var currentProduit = tempTabIdProduitCritere.get(i) ;
        var idProduit = currentProduit.getId() ;
        var sexeProduit = currentProduit.getSexe() ;
        var typeProduit = currentProduit.getType() ;
        var couleurProduit = currentProduit.getCouleur() ;
        var sexeDetailProduit=currentProduit.getSexedetail();
        var couleurIndusProduit=currentProduit.getCouleurindus();
        var objcritere;        
        supprDoublonCritere(idProduit, sexeProduit, "sexe", sexeDetailProduit) ;
        supprDoublonCritere(idProduit, typeProduit, "type", typeProduit) ;
        supprDoublonCritere(idProduit, couleurProduit, "couleur", couleurIndusProduit) ;              
    }
    verifCritereArbo() ;
        
    recupCritere("sexe");
    getCritereAffichage("sexe");
    recupCritere("type");
    getCritereAffichage("type");
    recupCritere("couleur");
    getCritereAffichage("couleur");    
}


