/**
 * Prerequis :
 * La variable modelList est un objet de type ArrayList et doit oblgatoirement etre initialise dans la page HTML
 */
var displayPrice = true ;
var nbModelToCheck = 0 ;
var nbModelHidden = 0 ;
var possibleAAfficher = new ArrayList() ;

var isErrorErep = false ;
var disableProductList =  new ArrayList() ;

//liste des modeles valides
var enableModelList = new ArrayList() ; 

//Identifiant du service execute
var serviceId = "" ;

//Map contenant les identifiant de services a partir du service appele
var mapServiceId = new Map() ;


/**
 * Permet de cacher ou non le bloc produit et d'afficher le picto new
 * @param :
 *    - httpStatus : le statut HTTP apres l'appel ajax
 * @desc :
 *    - pour chaque item, on va verfier sa visibilite, si elle est a true alors on affiche le produit, sinon on ne l'affiche pas
*/
var POST_LOAD_ITEM_FAMILY_FUNCTION = function postItemFamilyService(httpStatus){
    if(httpStatus == "200"){
        var contextServiceName = "" ;
        if(isSlideShow){
            contextServiceName = _SERVICE_ITEM_FAMILY_SLIDESHOW ;
        }
        else{
            contextServiceName = _SERVICE_ITEM_FAMILY ;
        }
        
        var currentServiceId = mapServiceId.get(contextServiceName) ;

        var nbItems = getNbItem(currentServiceId) ;
        if(nbItems == -1){
            isErrorErep = true ;
        }
        checkModels(serviceId, displayPrice) ;
        
        if(typeof _modeleCourant != "undefined" && _modeleCourant && typeof _modeleCourant == "string"){
            displayPrevNextProduct(_modeleCourant) ;        
        }
        
        if(typeof nbProduitFamille != "undefined"){
            //generation du bloc pagination
            writePagination(isErrorErep) ;

            //Affichage des produits
            show("1") ;
        }
    }
    else{
        displayProducts();
    }
}

/**
 * Permet de cacher ou non le bloc produit et d'afficher le picto new ou FIN lors du chargement des modeles a partir d'une liste de modele
 * @param :
 *    - httpStatus : le statut HTTP apres l'appel ajax
 * @desc :
 *    - pour chaque item, on va verfier sa visibilite, si elle est a true alors on affiche le produit, sinon on ne l'affiche pas
*/
var POST_LOAD_ITEM_MODELS_FUNCTION = function postItemModelsService(httpStatus){
    if(httpStatus == "200"){
        var currentServiceId = mapServiceId.get(_SERVICE_ITEM_MODELS) ;
        var nbItems = getNbItem(currentServiceId) ;
        if(nbItems == -1){
            isErrorErep = true ;
        }
        checkModels(serviceId, displayPrice) ;

        //Dans le cas des ventes complementaire, doit on cacher ou non le bloc
        hideBlockModels("bloc-decouvrirplus") ;

        checkSwitchProductPages(false, modelList) ;
    }
}

/**
 * Permet de cacher ou non le bloc produit et d'afficher le picto new ou FIN lors du chargement des modeles a partir d'une liste de modele
 * @param :
 *    - httpStatus : le statut HTTP apres l'appel ajax
 * @desc :
 *    - pour chaque item, on va verfier sa visibilite, si elle est a true alors on affiche le produit, sinon on ne l'affiche pas
*/
var POST_LOAD_ITEM_MODEL_FUNCTION = function postItemModelService(httpStatus){
    if(httpStatus == "200"){
        var currentServiceId = mapServiceId.get(_SERVICE_ITEM_MODEL) ;
        var nbItems = getNbItem(currentServiceId) ;
        if(nbItems == -1){
            isErrorErep = true ;
        }
        
        checkModel(serviceId, idModel, displayPrice, isFromModel) ;        
        
        modelList = new ArrayList() ;
        modelList.add(idModel) ;
        
        checkSwitchProductPages(true, modelList) ;
    }
}

/**
 * Permet de verifier les switchs apres la recuperation des prix
*/
function checkSwitchProductPages(isModelPage, modelList){
        //appel des interrupteurs
        var _switchArrayAChecker = new Array() ;
        _switchArrayAChecker[0] = SWITCH_ACTIVATION_PRIX ;
        _switchArrayAChecker[1] = SWITCH_ACTIVATION_DEEE ;
        _switchArrayAChecker[2] = SWITCH_ACTIVATION_MDR ;        
        _switchArrayAChecker[3] = SWITCH_ACTIVATION_MDR_SAISIE_PREDICTIVE
        
        if(isModelPage){
            _switchArrayAChecker[4] = SWITCH_ACTIVATION_OXYLANE_AVIS ;
            _switchArrayAChecker[5] = SWITCH_ACTIVATION_DOC_ASSOCIES ;
            _switchArrayAChecker[6] = SWITCH_ACTIVATION_LIAGE_DKT ;
        }

        checkSwitches(_switchArrayAChecker, _client, _siteNumber, modelList) ;
}

/**
 * Permet de cacher ou non le bloc produit et d'afficher le picto new
 * @param :
 *    - serviceId : Identifiant du service
 *    - isDisplayPrice : true/false doit on gerer l'affichage des prix
*/
function checkModels(serviceId, isDisplayPrice){
    if(modelList && modelList.length() > 0){
        //Nb de modele a verifier
        nbModelToCheck = modelList.length() ;
        
        //Pour chaque modele de la liste global, on va recuperer l'objet Item
        for(var ii=0 ; ii<modelList.length() ; ii++){
            var modelId = modelList.get(ii) ; //identifiant du modele a verifier
            checkModel(serviceId, modelId, isDisplayPrice, false) ;
        }
        
        //pour tous les produits a desactiver, on va les cacher
        for(var i=0; i<disableProductList.length(); i++){
            var productToHideObj = disableProductList.get(i) ;
            hideBloc(productToHideObj) ;
        }
        
        //check des switchs
        checkSwitchProductPages(false, modelList) ;
        
        //on va cacher le message d'attente
         if(getElement("waitingMessage", true, "")){
            hideWaitingMessage();
        }
        
        //on va gerer l'affichage de la pagination haute et basse dans la page famille
        //Si 1 seul produit, on ne l'affiche pas
        var paginationBloc = getElement("pagination", true, "") ;
        if(paginationBloc){
            displayBloc(paginationBloc) ;
        }     
    }
}

/**
 * Permet de cacher ou non le bloc produit et d'afficher le picto new
 * @param :
 *    - isDisplayPrice : true/false doit on gerer l'affichage des prix
*/
function checkModel(serviceId, idModel, isDisplayPrice, isFromModel){
    if(idModel){        
        var forceDisplayBlock = false ;
        var item = getMyItem(serviceId, idModel) ; //on recupere l'objet Item associe
    
        //on recupere les blocs HTML a afficher ou a cacher
        //5 types :
        //    - vignetteproduit : utilise dans les pages familles
        //    - ligneproduit : utilise dans les pages GDBC
        //    - compare : utilise dans les pages comparateurs
        //    - maSelection : utilise dans la page "Mes produits favoris"
        //    - bloc-vente : utilise dans la page produit
        var blocItemObj = getElement("vignetteproduit-"+idModel, true, "") ;
        forceDisplayBlock = true ;
        if(blocItemObj == null){
            blocItemObj = getElement("ligneproduit-"+idModel, true, "") ;
            forceDisplayBlock = true ;
            if(blocItemObj == null){
                blocItemObj = getElement("compare-"+idModel, true, "") ;
                forceDisplayBlock = true ;
                if(blocItemObj == null){
                    blocItemObj = getElement("maSelection"+idModel, true, "") ;
                    forceDisplayBlock = true ;
                    if(blocItemObj == null){
                        blocItemObj = getElement("bloc-prix"+idModel, true, "") ;
                        forceDisplayBlock = false ;
                        if(blocItemObj == null){
                            blocItemObj = getElement("decouvrirplus"+idModel, true, "") ;
                            forceDisplayBlock = false ;
                        }
                    }
                }
            }
        }
        
        //Si la reponse erep est fausse, on va quand meme afficher les produits
        if(isErrorErep){
            if(isFromModel){
                //redirectProduit(_urlFamille) //_urlFamille doit etre declare dans l'html
                hideBlocId("bloc-prix"+idModel) ;
            }
            if(!forceDisplayBlock){
                nbModelHidden++ ;
                disableProductList.add(blocItemObj) ;
            }
            else{
                displayBloc(blocItemObj) ; //Par defaut, le bloc est affiche
            }
        }
        //Item existe donc on va recuperer les prix
        else if(item != null){
            //Traitement que si le bloc HTML existe
            if(blocItemObj){                   
                var isEnable = item.isEnable() ; //l'item est-il valable, faut il l'afficher                
                
                var step = item.getStep() ; //recuperation de son etat : 1/2 ou 3
                if(step == "-1" || !item.isStepHomogeneous()){ //Si les tapes du modle ne sont pas homogne, on va forcer l'tape du produit  1
                    step = "1"  ; 
                }

                //Si l'item n'est pas valable, alors on cache le bloc HTML correspondant
                if(!isEnable){
                    if(!isFromModel){
                        disableProductList.add(blocItemObj) ;
                        nbModelHidden++ ;
                    }
                    else{
                        redirectProduit(_urlFamille) //_urlFamille doit etre declare dans l'html
                    }
                }
                //sinon on l'affiche apres avoir verifie son etape de vie pour afficher les pictos NEW ou FIN
                else{
                    //le modele est coherent et peut donc etre affiche, on l'ajoute a la liste
                    enableModelList.add(idModel);
                    if(step == "2"){ //etape de vie 2, picto NEW a afficher
                        //Cas d'une fiche produit
                        var enteteProduit = getElement("entete-produit", true, "") ;
                        if(enteteProduit){
                            //enteteProduit.className = "new" ;
                            var intitulerNew=getElement("intitulerNew", true, "");
                            if(intitulerNew){
                                intitulerNew.style.display="inline";
                            }
                            var messageNew = getElement("message-new", true, "") ;
                            displayBloc(messageNew) ;

                            if(getElement("picto-new-"+idModel, true, "")) {
                                displayBloc(getElement("picto-new-"+idModel, true, "")) ;
                            }
                        }
                        else if(getElement("intitulerNew", true, "") ){
                             var intitulerNew=getElement("intitulerNew", true, "");
                            if(intitulerNew){
                                intitulerNew.style.display="inline";
                            }
                             var messageNew = getElement("message-new", true, "") ;
                            displayBloc(messageNew) ;
                        }
                        else if(getElement("picto-new-"+idModel, true, "")){//cas comparer produit
                            displayBloc(getElement("picto-new-"+idModel, true, "")) ;
                        }
                        else{//autre cas
                            //blocItemObj.className = "new" ;
                        }
                    }
                    else if(step == "3"){ //etape de vie 3, picto FIN a afficher
                        var enteteProduit = getElement("entete-produit", true, "") ;
                        if(enteteProduit){
                            enteteProduit.className = "fin" ;
                        }  else if(getElement("intitulerFin", true, "") ){
                            getElement("intitulerFin", true, "").style.display="inline";
                        }    
                        var pictoFavori = getElement("picto-fin-"+idModel, true, "") ;
                        if(pictoFavori){
                            pictoFavori.style.display = "block" ;
                        }           
                    }

                    //on va afficher les prix Decathlon si le modele est en etape de vie different de 2 et que le booleen isDisplayPrice est a true                    
                    if(step != "2"){
                        var messageNew = getElement("message-new", true, "") ;
                        if(messageNew){
                            hideBloc(messageNew) ;
                        }
                        var displayBlocItem = true ;
                        if(isDisplayPrice && item.getMainPrice() != null){
                            //Rcuperation de l'objet Prices qui contient tous les types de prix
                            var oPrice = item.getPrices() ;
                            var oCurrency = oPrice.getCurrency() ; //objet Currency qui va permettre de formater correctement le prix
                            
                            if(oCurrency){
                                //Prix fort
                                var oMainPrice = item.getMainPrice() ; //Prix principal = prix central
                                var valueCentralePrice = oCurrency.formatValue(oMainPrice.getValue()) ; //on formatte le prix central
                                var isHomogenous = oMainPrice.isPriceHomogeneous() ; //Le prix centrale est il homogene
                
                                //Prix DEEE
                                var oDeeePrice = item.getWeeePrice() ; //Prix deee
                                var valueDeeePrice = "" ;
                                if(oDeeePrice){
                                    valueDeeePrice = oCurrency.formatValue(oDeeePrice.getValue()) ; //on formatte le prix deee
                                }
                                
                                if(valueCentralePrice != ""){
                                    var fonctionGoToProduct = getLinkToDecathFunction(_rootPath, _serverUrl, _urlLiage, idModel, _siteRepositoryEnseigne) ;
                                    
                                    //Prix au kg                                    
                                    var prixKg = getPriceByKg(oMainPrice, oCurrency) ;
                                    
                                    if(prixKg != ""){       
                                        var blocPxKgHtml = getElement("infoplus-valeur-prxKg", true, "") ;
                                        if(blocPxKgHtml){
                                            blocPxKgHtml.innerHTML = prixKg ;
                                        }
                                    }
                                    else{
                                        var blocPxKgHtml = getElement("prixKgCell", true, "") ;
                                        if(blocPxKgHtml){
                                            hideBloc(blocPxKgHtml) ;
                                        }
                                        var blocPxKgJurHtml = getElement("prixKgJur", true, "") ;
                                        if(blocPxKgJurHtml){                                
                                            hideBloc(blocPxKgJurHtml) ;
                                        }
                                        var blocPoidsHtml = getElement("poidsCell", true, "") ;
                                        if(blocPoidsHtml){
                                            hideBloc(blocPoidsHtml) ;
                                        }
                                    }
                                    setPrixDecathlon(idModel, valueCentralePrice, isHomogenous, valueDeeePrice, fonctionGoToProduct) ;
                                    
                                    //on va afficher le bloc prix : bloc-prix pour les pages produits
                                    var blocPrixObj = getElement("bloc-prix"+idModel, true, "") ;
                                    
                                    //Si le bloc-prix n'existe pas, on va verifier pour la page famille : prixProduit
                                    if(!blocPrixObj){
                                        blocPrixObj = getElement("prixProduit"+idModel, true, "") ;
                                    }
                                    
                                    if(blocPrixObj){
                                        displayBloc(blocPrixObj) ;
                                    }
                                }
                                else{
                                    displayBlocItem = false ;
                                }
                            }
                            else{
                                displayBlocItem = false ;
                            }
                        }
                        //on va afficher le bloc produit
                        if(displayBlocItem){
                            if(blocItemObj.id != "decouvrirplus"+idModel && blocItemObj.id != "vignetteproduit-"+idModel){
                                displayBloc(blocItemObj) ;
                            }
                            else{
                                possibleAAfficher.add(blocItemObj.id);
                            }
                        }
                    }
                    else{
                        if(blocItemObj.id=="decouvrirplus"+idModel){
                             possibleAAfficher.add(blocItemObj.id);
                        }
                        
                        //si le client vient d'un autre pays, on va cacher le bloc prix pour les produits en tape de vie 2
                        var valueCookieCountry = getCookie("country") ;
                        if(valueCookieCountry){
                            var divOuAcheterElement = getElement("ouAcheter", true, "") ;
                            if(divOuAcheterElement){
                                hideBloc(divOuAcheterElement) ;
                            }
                        }
                    }
                }
            }
        }
        else{//dans le cas ou l'item est null, on va cacher le bloc produit            
            nbModelHidden++ ;
            //hideBloc(blocItemObj) ; //Par defaut, le bloc est cache
            disableProductList.add(blocItemObj) ; //Au lieu de le cacher directement, on va mettre le bloc a cacher dans une liste qu'on parcourera plus tard pour cacher les bons blocs => pas de risque de desynchro
        }
    }
}

/**
 * Permet de charger tous les items de la famille
 * @param :
 *    - _client : ITOOL
 *    - _familyId : l'identifiant de la famille masterdata
 *    - _idSite : l'identifiant du site
 *    - _idCentral : identifiant de la centrale
 *    - _displayPrice : recuperation ou non des prix
 *    - _isSlideShow : sommes nous dans le slideshow ou non
 * @desc :
 *    - recupere le serveur erep, initialise ce serveur et charge tous les items de la famille
*/
function getFamily(_client, _familyId, _idSite, _idCentral, _displayPrice, _isSlideShow){
    //on va verifier si le client ne vient pas d'un autre pays
    var idCentral = _idCentral ;
    var valueCookieCountry = getCookie("country") ;
    if(valueCookieCountry){
        var enseigneSiteObj = mapUrlParPays.get(valueCookieCountry) ;
        if(enseigneSiteObj){
            idCentral = enseigneSiteObj.getCentrale() ;
        }
    }
    
    if(idCentral != "-1"){
        loadFamily(_client, _familyId, _idSite, _displayPrice, idCentral, POST_LOAD_ITEM_FAMILY_FUNCTION, _isSlideShow) ;
    }
    else{
        displayProducts() ;
    }
}

/**
 * Permet de charger tous les items a partir d'une liste de modeles
 * @param :
 *    - _client : ITOOL
 *    - _idSite : l'identifiant du site
 *    - _idCentral : identifiant de la centrale
 *    - _isDisplayPrice : Doit on afficher les prix
 *    - _isDisplayAss : Doit on afficher les assortiment
 * @desc :
 *    - recupere le serveur erep, initialise ce serveur et charge tous les items de la famille
*/
function getModels(_client, _idSite, _idCentral, _isDisplayPrice, _isDisplayAss){
    //on va verifier si le client ne vient pas d'un autre pays
    var idCentral = _idCentral ;
    var valueCookieCountry = getCookie("country") ;
    if(valueCookieCountry){
        var enseigneSiteObj = mapUrlParPays.get(valueCookieCountry) ;
        if(enseigneSiteObj){
            idCentral = enseigneSiteObj.getCentrale() ;
        }
    }
    
    if(idCentral != "-1"){
        loadModels(_client, _idSite, idCentral, _isDisplayPrice, _isDisplayAss, POST_LOAD_ITEM_MODELS_FUNCTION) ;
    }
    else{
        hideWaitingMessage() ;
    }    
}

/**
 * Permet de charger tous les items a partir d'une liste de modeles
 * @param :
 *    - _client : ITOOL
 *    - _idSite : l'identifiant du site
 *    - _idCentral : identifiant de la centrale
 *    - _idModel : l'identifiant du modele (reference modele)
 *    - _isDisplayPrice : Doit on afficher ou non le prix
 *    - _isFromModel : appel depuis la page modele ou pas
 * @desc :
 *    - recupere le serveur erep, initialise ce serveur et charge l'item correspondant au modele
*/
function getModel(_client, _idSite, _idCentral, _idModel, _isDisplayPrice, _isFromModel){
    //on va verifier si ce produit est deja dans la liste des favoris ou non
    verifMaSelection(_idModel) ;
    
    //on va verifier si le client ne vient pas d'un autre pays
    var idCentral = _idCentral ;
    var language = _language ;    
    var valueCookieCountry = getCookie("country") ;
    if(valueCookieCountry){
        var enseigneSiteObj = mapUrlParPays.get(valueCookieCountry) ;
        if(enseigneSiteObj){
            idCentral = enseigneSiteObj.getCentrale() ;
        }
    }
    
    if(idCentral != "-1"){    
        loadModel(_client, _idSite, idCentral, _idModel, language, _isDisplayPrice, _isFromModel, POST_LOAD_ITEM_MODEL_FUNCTION) ;
    }
    else{
        //on va cacher le bloc ou acheter et les blocs oxylane
        var divOuAcheterElement = getElement("ouAcheter", true, "") ;
        if(divOuAcheterElement){
            hideBloc(divOuAcheterElement) ;
        }
    
        var divOxyClubElement = getElement("oxylaneClub", true, "") ;
        if(divOxyClubElement){
            hideBloc(divOxyClubElement) ;
        }
    }
}


/**
 * Permet de charger tous les items d'une famille et de lancer le traitement post appel Ajax
 * @param :
 *    - _client : ITOOL
 *    - _familyId : l'identifiant de la famille a recuperer
 *    - _idSite : l'identifiant du site
 *    - _displayPrice : recuperation ou non des prix
 *    - _idCentral : l'id de la centrale
 *    - _localfunc : la fontion post ajax a appeler : par ex, POST_LOAD_SWITCH_VENTE_FUNCTION
 *    - _isSlideShow : sommes nous dans le slideshow ou non 
 * @desc :
 *    - recupere le serveur erep, initialise ce serveur et charge tous les items de la famille
*/
function loadFamily(_client, _familyId, _idSite, _isDisplayPrice, _idCentral, _localfunc, _isSlideShow){
    //doit on afficher les informations prix
    displayPrice = _isDisplayPrice ;
    isSlideShow = _isSlideShow ;

    //recupere le serveur eRep
    var contextServicePage = "" ;
    if(_isSlideShow){
        contextServicePage = _SERVICE_ITEM_FAMILY_SLIDESHOW ;
    }
    else{
        contextServicePage = _SERVICE_ITEM_FAMILY ;
    }
    
    _urlErep = getUrlErep(contextServicePage, _client, THIRD_KIND_SITE, _idSite, _familyId, _localfunc) ;
    
    if(_urlErep){
        //Initialisation et execution du service
        var isActivePriceFilter = displayPrice ;
        var isActiveAssFilter = true ;
        
        serviceId = initExecuteService(_urlErep, _language, _idSite, _idCentral, CONTEXT_MODE_FAMILLE, _familyId, _localfunc, isActivePriceFilter, isActiveAssFilter) ;
        
        mapServiceId.put(contextServicePage, serviceId) ;
    }
}


/**
 * Permet de charger tous les items a partir d'une liste de modeles et de lancer le traitement post appel Ajax
 * @param :
 *    - _client : ITOOL
 *    - _idSite : l'identifiant du site
 *    - _idCentral : l'id de la centrale
 *    - _isDisplayPrice : Doit on afficher les prix
 *    - _isDisplayAss : Doit on afficher les assortiment 
 *    - _localfunc : la fontion post ajax a appeler : par ex, POST_LOAD_SWITCH_VENTE_FUNCTION
 * @desc :
 *    - recupere le serveur erep, initialise ce serveur et charge tous les items de la liste de modeles
*/
function loadModels(_client, _idSite, _idCentral, _isDisplayPrice, _isDisplayAss, _localfunc){
    //recupere le serveur eRep
    displayPrice = _isDisplayPrice ;    
    _urlErep = getUrlErep(_SERVICE_ITEM_MODELS, _client, THIRD_KIND_SITE, _idSite, modelList, _localfunc) ;

    if(_urlErep){        
        if(modelList && modelList.length() > 0){
            //Initialisation et execution du service
            var isActivePriceFilter = displayPrice ;
            var isActiveAssFilter = _isDisplayAss ;
            
            serviceId = initExecuteService(_urlErep, _language, _idSite, _idCentral, CONTEXT_MODE_MODELES, modelList, _localfunc, isActivePriceFilter, _isDisplayAss) ;
            
            mapServiceId.put(_SERVICE_ITEM_MODELS, serviceId) ;
        }
        else{
            //Dans le cas des ventes complementaire, on va cacher le bloc si aucun produit n'est dans la VC
            hideBlockModels("bloc-decouvrirplus") ;
        }
   }
}


/**
 * Permet de charger tous les items d'une famille et de lancer le traitement post appel Ajax
 * @param :
 *    - _client : ITOOL
 *    - _idSite : l'identifiant du site
 *    - _idCentral : l'identifiant de la centrale
 *    - _idModel : identifiant du modele
 *    - _language : FR|EN|ES|IT ...
 *    - _isDisplayPrice : affichage des prix ou non
 *    - _isFromModel : appel depuis le page modele ou non
 *    - _localfunc : la fontion post ajax a appeler : par ex, POST_LOAD_SWITCH_VENTE_FUNCTION
 * @desc :
 *    - recupere le serveur erep, initialise ce serveur et charge tous les items de la famille
*/
function loadModel(_client, _idSite, _idCentral, _idModel, _language, _isDisplayPrice, _isFromModel, _localfunc){
    //doit on afficher les informations prix
    displayPrice = _isDisplayPrice ;
    isFromModel =_isFromModel ;
    
    //recupere le serveur eRep      
    _urlErep = getUrlErep(_SERVICE_ITEM_MODEL, _client, THIRD_KIND_SITE, _idSite, _idModel, _localfunc) ;
    idModel = _idModel ;

    if(_urlErep){
        //Initialisation et execution du service
        var isActivePriceFilter = displayPrice ;
        var isActiveAssFilter = true ;
        
        serviceId = initExecuteService(_urlErep, _language, _idSite, _idCentral, CONTEXT_MODE_MODELE, _idModel, _localfunc, isActivePriceFilter, isActiveAssFilter) ;
        
        mapServiceId.put(_SERVICE_ITEM_MODEL, serviceId) ;
   }
}


/**
 * Permet de cacher le bloc de vente complementaire si tous les produits de la vente sont desactives
 * @param :
 *    - _idBlockToHide : bloc VC a cacher
*/
function hideBlockModels(_idBlockToHide){
    var blockToHide = getElement(_idBlockToHide, true, "") ;
    if(!blockToHide){
        if(parent){
            blockToHide = parent.document.getElementById(_idBlockToHide) ;
        }
    }
    
    if(blockToHide){
        //Si le nb de bloc cache est egal au nb de modele a afficher dans la VC, alors on va cacher ce bloc
        if(nbModelToCheck == nbModelHidden){
            hideBloc(blockToHide) ;
        }
    }
    completeAffiche();
}


/**
 * Verifie si les VC selectionner alatoirement sont affichable et en selectionne d'autre si elles ne font pas partie des produit affichable
*/
function completeAffiche(){    
    var nbVC=possibleAAfficher.length();
    if(nbVC>3){
        var afficher=selectionAleatoire(nbVC);
        for(var i=0;i<afficher.length;i++){
            var divCourante=getElement(possibleAAfficher.get(afficher[i]),true,"");
            if(divCourante.style.display=="none"){
                divCourante.style.display="block";
                verif=true;
            }else{
                verif=false;
            }
            while(!verif){
                indice=  Math.ceil(Math.random()*nbVC) -1; 
                var j=0;
                verif=true;
                while(j<3 && verif){
                    verif=(afficher[j]!=indice);
                    j++;
                }
                if(verif){
                    var divCouranteModifier=getElement(possibleAAfficher[indice],true,"");
                    if(possibleAAfficher.contains(possibleAAfficher[indice].id)){
                        divCouranteModifier.style.display="block";
                        afficher[i]=indice;
                    }else{
                        verif=false;
                    }
                }
            }
        }       
    }else{
    
        for (var i=0;i<possibleAAfficher.length();i++){
            document.getElementById(possibleAAfficher.get(i)).style.display="block";
        }
    }
}


/**
 * Selectionne 4 positions alatoirement parmit toutes les VC disponible
 * params :
 *    - _nbPdt : nombre de produit disponible
*/
function selectionAleatoire(_nbPdt){
    if(_nbPdt>3){
         var dejaAfficher=[-1,-1,-1];
         for(var l=0; l < 3;l++){
             var verifier=false;
             var indice=  Math.ceil(Math.random()*_nbPdt) -1;
             while(!verifier){
                 var j=0;
                 verifier=true;
                 while(j<l && verifier){
                     verifier=(dejaAfficher[j]!=indice);
                     j++;
                 }
                 if(!verifier)indice=  Math.ceil(Math.random()*_nbPdt) -1; 
             }
             dejaAfficher[l]=indice;
        }
        
    }else{
         var dejaAfficher=[0,1,2];
    }   
    return dejaAfficher;
}


/**
 * Verif si une VC fait partie des VC selectionner aleatoirement
 * params :
 *    - _tab : tableau des position selectionne
 *    - _pos : position a tester
*/
function verifAffichage(_tab, _pos){
    var estAAfficher=false;
    var i=0;
    while(!estAAfficher && i<_tab.length){
        estAAfficher = (_tab[i] == _pos);
        i++;
    }
    return estAAfficher;
}


/**
 * Permet de recupErer le poids d'un modele et son unite 
 * params :
 *    - _mainPrice : l'objet Price pour le prix centrale
 *    - _currencyObject : l'objet Currency
 * return :
 *    La valeur du prix/kg
*/
function getPriceByKg(_mainPrice, _currencyObject){
    var poidsModeleObj = getElement("poids_modele", true, "") ;
    var uniteModeleObj = getElement("unite_modele", true, "") ;
    
    var valeurPoidsModele = "" ;
    var unitePoidsModele = "" ;
    if(poidsModeleObj && uniteModeleObj){
        valeurPoidsModele = poidsModeleObj.innerHTML ;
        unitePoidsModele = uniteModeleObj.innerHTML ;        
    }
    
    if((unitePoidsModele == "Kg" || unitePoidsModele == "L") && valeurPoidsModele > 0 ){
        var priceValue = _mainPrice.getValue() ;
        var priceByKg = parseFloat(priceValue.getInteger()+"."+priceValue.getDecimal())/valeurPoidsModele ;
        priceByKg=Math.round(priceByKg*100)/100;
        
        // convertion en string pour separer la partie entiere et decimale et construire l objet value                
        priceByKg = priceByKg.toString();
        
        var priceByKg_value = null ; //Objet Value
        if (priceByKg.indexOf('.')!=-1) {
            var priceByKg_value = new JoValue() ;
            priceByKg_value.setInteger(priceByKg.substring(0,priceByKg.indexOf('.'))) ;
            priceByKg_value.setDecimal(priceByKg.substring(priceByKg.indexOf('.')+1)) ;
        }
        else {
            var priceByKg_value = new JoValue();
            priceByKg_value.setInteger(priceByKg) ;
            priceByKg_value.setDecimal(0) ;
        }
        // construction de l objet currency pour utiliser la methode de formatage du prix

        var oCurrency = new JoCurrency();
        oCurrency.setId(_currencyObject.getId());
        oCurrency.setBehind(_currencyObject.isBehind());
        oCurrency.setSymbol(_currencyObject.getSymbol());
        oCurrency.setDecimalNumber(_currencyObject.getDecimalNumber());
        oCurrency.setDecimalDelimiter(_currencyObject.getDecimalDelimiter());
        oCurrency.setThousandDelimiter(_currencyObject.getThousandDelimiter());
        
        if(oCurrency){
            return oCurrency.formatValue(priceByKg_value) +' / ' +unitePoidsModele;
        }
        else{
            return "" ;
        }
    }
    else{
        return "" ;
    }
}


/** #########################################
 * Permet d'afficher le message d'erreur de non dispo d'un produit
*/
function checkPageStatus(){
    // Doit on afficher le message de non dispo du produit
    var paramsUrl = getParameters() ;
    if (paramsUrl.length > 0 && paramsUrl[0] != "") {
        if((paramsUrl[0][0]).indexOf("?nondispo") > -1){
            if(paramsUrl[0][1] == "true"){
                displayBlocId("advertDispo") ;
            }
        }
    }
}