var nbProduitChecked = 0 ; //Nb de produit coche pour la comparaison
var mapBuParModele = new Map() ; //La map qui contient les BU pour un modele

/* #######################################################################
* Permet d'analyser les checkbox cocher
* Si le nb de cb coche est inferieur a 1, on affiche un message
*/

/* #######################################################################
* Permet d'analyser les checkbox cocher
* Si le nb de cb coche est superieur a 4, on affiche un message
*/
function checkCompare(cb){
    if(cb.checked){
        nbProduitChecked++ ;
    }
    else{
        nbProduitChecked-- ;
    }
    
    if(nbProduitChecked > 4){
        alert(alertComparer) ;
        cb.checked = "" ;
        nbProduitChecked-- ;        
    }
}


/* #######################################################################
* Permet de cocher ou decocher la checkbox cbId
*/
function checkTheBox(cbId){
    var cb = getElement(cbId, true, "") ;
    if(cb){
        if(cb.checked){
            cb.checked = "" ;
        }
        else{
            cb.checked = "checked" ;
        }
        checkCompare(cb) ;
    }
}

/* #######################################################################
* Permet de cacher un produit
*/
function hideProduct(productId){
    if(document.getElementById(productId)){
        var productDiv = document.getElementById(productId) ;
        productDiv.style.display="none" ;
    }
}


/* #######################################################################
* Permet de reinitialiser tous les produit
*/
function reinitProduct(){
    var contentProductsObj = getElement("contentProducts", true, "") ;
    if(contentProductsObj){
        var childContentProductsObj = contentProductsObj.getElementsByTagName("LI") ;
        for(var i=0 ; i<childContentProductsObj.length ; i++){
            if(childContentProductsObj[i] && childContentProductsObj[i].id.indexOf("ligneproduit-") > -1){
                var modeleId = childContentProductsObj[i].id.split("-")[1] ;
                if(modelList.contains(modeleId) > -1){
                    childContentProductsObj[i].style.display = "block" ;
                }
            }
        }
    }
}


/* #######################################################################
* Permet d'afficher la page comparer les produits
*/
function comparerProduit(titrePage, lienFamille, codeExterneFamille){
    //Initialisation des donnees pour la page GDBC
     var divObj = getElement("body-famille", true, "") ; //container global de la page qui va accueillir le GDBC
     //Traitement des produits a comparer
     var isModelListReinit = false ;
     var modelListTemp = new ArrayList() ; //l'ancienne liste de modeles
     
     var produitsAComparer = document.getElementsByName('produit') ;
     
        var func = function loadProducts(xmlHttp, httpstatus){
            if(httpstatus == 200){
                oXmlDoc = xmlHttp.responseText ;
                if( oXmlDoc == null) {
                    return;
                } 
                else {
                   
                    var lienCdfFamilleObj = getElement("cdffamille", true, "") ; //container pour la fil d'ariane correspondant a la famille
                    var lienCdffamilleSplit=lienCdfFamilleObj.innerHTML.split("&gt;&nbsp;");
                     
                    var textLienCdffamille="";
                    var funcback =  setLinkTag(tagPath+"family", "");
                    if(lienCdffamilleSplit[1]){
                        textLienCdffamille=lienCdffamilleSplit[0] + '</a> &gt;&nbsp;<a href="'+lienFamille+'" target="_top" onclick="'+funcback+'">'+lienCdffamilleSplit[1]+'</a>';
                    }
                    else{
                         textLienCdffamille='<a href="'+lienFamille+'" target="_top" onclick="'+funcback+'">'+lienCdfFamilleObj.innerHTML+'</a>';
                    }
                    lienCdfFamilleObj.innerHTML = textLienCdffamille; //on va mettre un lien sur la lien famille du chemin de fer
                    
                    var divFilArianeObj = getElement("filariane", true, "") ; //container pour la fil d'ariane
                    var divRetourFamilleObj = getElement("retourfamille", true, "") ; //container pour le lien retour vers la page famille
                    setHref("retourproduit", lienFamille, "_top") ; //modification du lien pour le retour vers la famille
                    displayBloc(divRetourFamilleObj) ; //affichage du bloc retour vers la famille

                    divObj.innerHTML = oXmlDoc ;
                    divObj.className = "body-page-gdbc" ;
                    divFilArianeObj.innerHTML = divFilArianeObj.innerHTML + "<li>&gt;&nbsp;" + titrePageGdbc +"</li>";
                                    
                    //traitement erep
                    //on va verifier si le client ne vient pas d'un autre pays
                    var idCentral = _centralNumber ;
                    var valueCookieCountry = getCookie("country") ;
                    if(valueCookieCountry){
                        var enseigneSiteObj = mapUrlParPays.get(valueCookieCountry) ;
                        if(enseigneSiteObj){
                            idCentral = enseigneSiteObj.getCentrale() ;
                        }
                    }
                    
                    //le service famille a deja ete appele donc on peut charger directement travailler sur les items
                    if(mapServiceId){
                        var currentServiceId = mapServiceId.get(_SERVICE_ITEM_FAMILY) ;
                        if(idCentral != "-1"){
                            checkModels(currentServiceId, true) ;
                        }
                    }
                    
                    //affichage uniquement des produits selectionnes par le client
                    if(isModelListReinit){ //signifie que le client a choisit des produit a comparer
                        var ml = modelList ;
                        var mlt = modelListTemp ;
                        for(var i=0 ; i<modelListTemp.length() ; i++){
                            var currentModel = modelListTemp.get(i) ;
                            if(modelList.contains(currentModel) == -1){
                                hideProduct("ligneproduit-"+currentModel) ;
                            }
                        }
                    }
                    
                    /* ##################" TRAITEMENT DES BU #################### */
                    //on va parcourir les bu pour les modeles et generer les liste et map necessaires a leurs affichages 
                    for(var ii=0 ; ii<modelList.length() ; ii++){
                        if(modelList.get(ii)){
                            var listeBuModele = mapBuParModele.get(modelList.get(ii)) ;
                            if(listeBuModele){
                                for(var j=0 ; j<listeBuModele.length() ; j++){
                                    var buModele = listeBuModele.get(j);
                                    if(buModele != ""){
                                        var cleBu = buModele.getCleModele() ;
                                        genereBu(cleBu, buModele) ;
                                    }
                                }
                            }
                        }
                    }
    
                    //on affiche les BU
                    var outputStr = recupBu() ;
                    var tableBu = getElement("table_bu", true, "") ;
                    if(tableBu){
                        tableBu.innerHTML = "<div class='liste_bu'>"+outputStr+"</div>" ;
                    }
                    
                    //on va recalculer la hauteur de chaque ligne de BU
                    for(var k=0 ; k<listeBu.length() ; k++){
                        var rowObj = getElement("row"+k, true, "") ;
                        if(rowObj){
                            //on va recalculer la hauteur de chaque ligne de BU
                            var eltRow = rowObj.getElementsByTagName("DIV") ;
                            if(eltRow){
                                var maxRow = 0 ;
                                
                                //on recuperer la hauteur maximale de la ligne
                                for(var p=0 ; p<eltRow.length ; p++){
                                    var elt = eltRow[p] ;
                                    if(elt && elt.className && elt.className.indexOf("row-prod") > -1){
                                        var heightRow = elt.offsetHeight ;
                                        if(heightRow > maxRow){
                                            maxRow = heightRow ;
                                        }
                                    }
                                }
                                //on, va fixer la hauteur a toutes les cellules de cette ligne
                                for(var n=0 ; n<eltRow.length ; n++){
                                    var elt = eltRow[n] ;
                                    if(elt && elt.className && elt.className.indexOf("row-prod") > -1){
                                        elt.style.height = maxRow+"px" ;
                                    }
                                }
                            }
                        }
                    }
                    
                    var divWaitingMessageObj = getElement("waitingMessage", true, "") ;
                    if(divWaitingMessageObj){
                        hideBloc(divWaitingMessageObj) ;
                    }
                    
                    var divContentProductsObj = getElement("contentProducts", true, "") ;
                    if(divContentProductsObj){
                        displayBloc(divContentProductsObj) ;
                    }
                    
                    //on va recalculer la hauteur de chaque ligne de tailles et coloris
                    var maxRowTailles = 0 ;
                    for(var jj=0 ; jj<modelList.length() ; jj++){
                        var rowTaillesObj = getElement("row_taillecoloris_"+modelList.get(jj), true, "") ;                        
                        var maxRowTailles = 0 ;
                        var heightRow = rowTaillesObj.offsetHeight ;
                        if(heightRow > maxRowTailles){
                            maxRowTailles = heightRow ;
                        }
                    }
                    //on, va fixer la hauteur a toutes les cellules de cette ligne
                    for(var n=0 ; n<modelList.length() ; n++){
                        var rowTaillesObj = getElement("row_taillecoloris_"+modelList.get(n), true, "") ;                        
                        rowTaillesObj.style.height = maxRowTailles+"px" ;
                    }
                    
                    //on fixe la hauteur de la colonne titre pour les tailles
                    var rowTaillesObj = getElement("row_taillecoloris", true, "") ;                        
                    rowTaillesObj.style.height = maxRowTailles+"px" ;
                }
            }
        }
        
     
     //Le nombre de produits selectionner doit être egal a 4   
     if(nbProduitChecked < 2 || nbProduitChecked > 4){
        alert(alertComparer) ;
    }
    else{
        //Si des produits sont coches, on va reinitialiser la liste de modeles a checker via eRep.
        //Sinon, on ne fait rien et on garde la liste de modele genere dans la page famille classic
        //Si des produits sont coches, on va reinitialiser la liste de modeles a checker via eRep.
        //Sinon, on ne fait rien et on garde la liste de modele genere dans la page famille classic
        for(var i=0 ; i<produitsAComparer.length ; i++){
            if(produitsAComparer[i].checked){
                if(!isModelListReinit){
                    modelListTemp = modelList ;
                    modelList = new ArrayList() ; //reinitialisation de la liste des modeles à gerer
                    isModelListReinit = true ;
                }
                modelList.add(produitsAComparer[i].value);
            }
        }
        var ajaxProc = new IAjaxProcess("gdbc.html", func) ;
        ajaxProc.run() ;
    }
}



/* #######################################################################
* Permet de generer la map des BU par modele
* Cette map contient la liste des BU pour chaque modele
* @params :
*    - refModele : le code modele
*    - _buGdbc : L'objet BU
*/
function genereBuModele(refModele, _buGdbc){
    //Si la map contient deja une liste de BU pour ce modele, on va la mettre a jour
    if(mapBuParModele.get(refModele) != ""){
        var listeBuModele = mapBuParModele.get(refModele) ;
        listeBuModele.add(_buGdbc) ;
        mapBuParModele.remove(refModele) ;
        mapBuParModele.put(refModele, listeBuModele) ;
    }
    //Sinon, on cree une nouvelle liste de BU pour ce modele    
    else{
        var listeBuModele = new ArrayList() ;
        listeBuModele.add(_buGdbc) ;
        mapBuParModele.put(refModele, listeBuModele) ;
    }    
}


/* #######################################################################
* Permet de generer la map des modele par type de BU
* Cette map contient la liste des modele pour chaque BU
* Cette fonction prend en compte une liste listeBu renseignee dans l'HTML famille
* @params :
*    - _cleBu : le BU
*    - _buGdbc : L'objet BU
*/
function genereBu(_cleBu, _buGdbc){
    //Si la liste des BU ne contient pas ce BU, on va le rajouter dans cette liste et dans la map
    if(listeBu && listeBu.contains(_cleBu) == -1){
        listeBu.add(_cleBu) ;
        var listeBuModele = new ArrayList() ;
        listeBuModele.add(_buGdbc) ;
        mapModeleParBu.put(_cleBu, listeBuModele) ;
    }
    //Sinon on met a jour la liste et la map
    else{
        var listeBuModele = mapModeleParBu.get(_cleBu) ;
        mapModeleParBu.remove(_cleBu) ;
        listeBuModele.add(_buGdbc) ;
        mapModeleParBu.put(_cleBu, listeBuModele) ;
    }
}


/* #######################################################################
* Permet de retourner la STRING de chaque ligne de BU
*/
function recupBu(){
     var outputStr = "" ;
    var isModeleTrouve = false;
    
     //Pour chaque type de BU, on va recuperer la liste des modeles possedant ce BU
    for(var i=0 ; i<listeBu.length() ; i++){
        var cleBu = listeBu.get(i) ; //Le BU
        var listeModeleBu = mapModeleParBu.get(cleBu) ; //La liste des modeles pour ce BU
        
        var classRow = "row" ;
        if(i%2 == 1){
            classRow = "row-inter" ;
        }
                
        
        //DEBUT : La ligne du BU
        outputStr = outputStr + "<div class='"+classRow+"' id='row"+i+"'><div class='row-prod-title'><div class='col1'>"+cleBu+"</div></div>" ; //Titre pour ce BU

        //Pour chaque modele de la liste de modele, on va parcourir ses BU.
        //cela permet de recuperer les BU dans l'ordre des modeles de cette liste
        for(var k=0 ; k<modelList.length() ; k++){
            var theCodeModele = modelList.get(k) ; //Le code modele
            var donneeBu = "&nbsp;-&nbsp;" ; //la valeur du BU : texte/image
            
            //ON va parcourir la liste des modeles pour ce BU et si le code modele est egal au code modele recupere precedemment, on va generer la STRING
            for(var j=0 ; j<listeModeleBu.length() ; j++){
                var buModele = listeModeleBu.get(j) ;
                var codeModele = buModele.getCodeModele() ;
                isModeleTrouve = false ;
                
                //Le code modele est trouve
                if(codeModele == theCodeModele){
                    var valeurBu = buModele.getValeurModele() ; //le texte du BU
                    var etoileBu = buModele.getEtoileModele() ; //l'image etoile
                    var imgBu = buModele.getImgModele() ; //l'image du BU
                    
                    //on va former la STRING en fonction du texte/image/Etoile
                    var valeur = "" ;
                    if(valeurBu != ""){
                        valeur = valeur + valeurBu + "</BR>";
                    }
                    if(imgBu != ""){
                        valeur = valeur + "<div id='img_bu"+i+"_"+j+"' style='background:url("+_rootPath+"/images/assets/"+imgBu+") no-repeat'></div></BR>";
                    }
                    if(etoileBu != ""){
                        valeur = valeur + "<span><img src='"+etoileBu+"'  alt=''/></span></BR>";
                    }
                    
                    donneeBu = valeur ;
                    isModeleTrouve = true ; //Le modele a ete trouve, on casse la boucle
                    break;
                }
            }
            
            //on va determiner la nomp de la class a appliquer a la div
            var classTd = "row-prod" ;
            if(!isModeleTrouve){
                classTd = "row-prod-empty" ;
            }
            //si on est sur la derniere cellule, on met une classe specifique
            if(k == modelList.length()-1){
                classTd = classTd+"-last" ;
            }
            //chaine de caractere en sortie
            outputStr = outputStr + "<div class='"+classTd+"'>"+donneeBu+"</div>" ;            
        }
        //FIN : On ferme la ligne du BU
        outputStr = outputStr + "</div>"
    }
    
    return outputStr ;
}