var currentPage = 1 ; //La page courante

/** #########################################
* Permet d'avoir le nombre reel total de page a partir du nombre de produit reel dans la famille
*/
function getTotalPages(_nbProduitFamille){
    var nbPage = 1 ;
    if(_nbProduitFamille/nbProduitParPage == Math.floor(_nbProduitFamille/nbProduitParPage)){
        nbPage = Math.floor(nbProduitFamille/nbProduitParPage) ;
    }
    else{
        nbPage = Math.floor(_nbProduitFamille/nbProduitParPage) + 1 ;
    }
    return nbPage ;
}

/** #########################################
* Permet d'ecrire dans l'html le bloc pagination
* @params :
*    _isModeDegrade : Sommes nous dans le cas ou erep est ko
*/
function writePagination(_isModeDegrade){
    var isModeDegrade = false ;
    if(typeof _isModeDegrade != undefined){
        isModeDegrade = _isModeDegrade ;
    }
    
    if(!isModeDegrade){
        nbProduitFamille = enableModelList.length() ;
    }
    else{
        nbProduitFamille = modelList.length() ;
    }

    var totalPages = getTotalPages(nbProduitFamille) ;

    var paginationBloc = "" ;
    var paginationBlocBas = "" ;
    
    for (var i=1 ; i <= totalPages ; i++){
        //[TAG]Ajout du taggage Google analytics pour le texte
        var func = setLinkTag(tagFamille+"pagination", "showPage("+i+", "+totalPages+");") ;
        
        paginationBloc = paginationBloc + '<a href="#" onclick="'+func+'" id="numpage'+i+'">' ;
        paginationBloc = paginationBloc + i ;
        paginationBloc = paginationBloc + '</a>' ;
        
        paginationBlocBas = paginationBlocBas + '<a href="#" onclick="'+func+'" id="numpage-bas'+i+'">' ;
        paginationBlocBas = paginationBlocBas + i ;
        paginationBlocBas = paginationBlocBas + '</a>' ;
    }
    
    //[TAG]Ajout du taggage Google analytics pour le texte
    var funcAll = setLinkTag(tagFamille+"pagination_displayall", "showAll(true);") ;
    paginationBloc = paginationBloc + '<a href="#" target="_self" onclick="'+funcAll+'" id="all_pages">' + toutAfficherLabel + '</a>' ;

    if(totalPages > 1){
        var paginationObj = getElement("listepage", true, "") ;
        var paginationObjBas = getElement("listepage-bas", true, "") ;
        if(paginationObj){
            paginationObj.innerHTML = '<span class="label">'+pageLabel+' : </span>'+paginationBloc ;
        }
        if(paginationObjBas){
            paginationObjBas.innerHTML = '<span class="label">'+pageLabel+' : </span>'+paginationBlocBas ;
        }
                
        var nbTotalProduits = getElement("nbTotalProduits", true, "") ;
        var nbTotalProduitsBas = getElement("nbTotalProduits-bas", true, "") ;
        
        if(nbTotalProduits){
            nbTotalProduits.innerHTML = nbProduitFamille ;
        }
        if(nbTotalProduitsBas){
            nbTotalProduitsBas.innerHTML = nbProduitFamille ;
        }
    }    
    
    //on va afficher le bloc tri + filtre si et seulement si le nombre de produit dans la page famille est sup. a 1
    if(enableModelList && enableModelList.length() > 1){
	    var triElt = getElement("totalTriFiltre") ;
	    if(triElt){
	        displayBloc(triElt) ;
	    }
    }
}

/** #########################################
* Permet de positionner le bloc concu pour en fonction de la position de la fenêtre
*/
function hideAll(){    
    var pagesDIV = getElement('produits', true, "")
    if(pagesDIV){
        var page = pagesDIV.getElementsByTagName('LI');
        if(page){
            for(i=0;i  < page.length; i++){
                if(page[i] && page[i].id && page[i].id.indexOf("vignetteproduit-") > -1){
                    page[i].style.display = 'none';
                }
            }
        }
    }

    var paginationDIV = getElement('listepage', true, "") ;
    var paginationDIVBas = getElement('listepage-bas', true, "") ;
    if(paginationDIV){    
        var numPages = paginationDIV.getElementsByTagName('a');
        var numPagesBas = paginationDIVBas.getElementsByTagName('a');
        if(numPages){
            for(i=0;i  < numPages.length; i++){
                if(numPages[i].id.indexOf("numpage") > -1){
                    numPages[i].className = "" ;
                }
            }
            for(i=0;i  < numPagesBas.length; i++){
                if(numPagesBas[i].id.indexOf("numpage") > -1){
                    numPagesBas[i].className = "" ;
                }
            }
        }
    }
}

/** #########################################
* Permet de recuperer la page courante
*/
function getCurrentPage(){
    var currentPageSaved = getCookie("pagination") ;
    var numPage = 1 ;
    
    if(currentPageSaved && currentPageSaved != "" && currentPageSaved != "null"){
        if(currentPageSaved.indexOf("allproducts_") > -1){
             numPage = 1 ;
        }
        else{
            var lastPageUrl = currentPageSaved.split("_")[2] ;
            if(lastPageUrl == document.location.href){
                numPage = currentPageSaved.split("_")[0] ;
            }
        }
    }
    return numPage ;
}

/** #########################################
* Permet de gérer le bloc pagination : visibilite des fleches et mis à jour du numero de page
*/
function setPagination(_numPage, _totalPages){
    currentPage = _numPage;

    var lienPageCourante = getElement("numpage"+_numPage, true, "") ;
    var lienPageCouranteBas = getElement("numpage-bas"+_numPage, true, "") ;
    
    //update the page number                    
    if(lienPageCourante){
        lienPageCourante.className = "active" ;
        lienPageCouranteBas.className = "active" ;
    }
}


/** #########################################
* Permet d'afficher tous les produits
*/
var isAllPages = false ;

function showAll(isShowAll){
    //Cas ou l'internaute clique sur "Tout afficher"
    if(isShowAll){
        var pagesDIV = window.document.getElementById('produits');
        
        //On affiche tous les produits
        displayAllProducts(false, true) ;
        
        setPagination(1, 99) ;
    
        //On va afficher le bloc "Revenir ..."
        displayBlocId("resetAllPage");
        
        //On cache les blocs liste pages
        hideBlocId("listepage") ;
        hideBlocId("listepage-bas") ;
        
        var currentLocationHref = (document.location.href).split("#")[0] ;
        setCookie(_language, "pagination", "allproducts_"+currentLocationHref) ;
    }
    //Cas ou l'internaute clique sur le lien "Revenir ..."
    else{
        //On va cacher le bloc "Revenir ..."
        hideBlocId("resetAllPage");

        //on va afficher les blocs liste pages
        displayBlocId("listepage") ;
        displayBlocId("listepage-bas") ;

        showPage(1, 99) ;
    }
}


/** #########################################
* Permet d'afficher les produits d'une page
*/
function show(_numPage){
    //Nombre de produit a afficher par page : nbProduitParPage (declare dans l'html)
    
    //Si le nombre de produit de la famille est inférieur au nombre de produit a afficher par page, on va cacher les blocs suivants :
    //    allpages
    //    listepages
    if(nbProduitFamille <= nbProduitParPage){ //declarer dans l'html
        var toutAfficherObj = getElement("all_pages", true, "") ;
        var toutAfficherObjBas = getElement("all_pages-bas", true, "") ;
        var listePageObj = getElement("listepage", true, "") ;        
        var listePageObjBas = getElement("listepage-bas", true, "") ;        
        if(toutAfficherObj){
            hideBloc(toutAfficherObj) ;
            hideBloc(toutAfficherObjBas) ;
        }
        if(listePageObj){
            hideBloc(listePageObj) ;
            hideBloc(listePageObjBas) ;
        }
    }

    //nb total de page reel
    var totalPages = getTotalPages(nbProduitFamille) ;
    
    //Page courante pour le retour arriere : ce numero de page est stocke dans un cookie "pagination"
    var currentPageSaved = getCookie("pagination") ;
    var currentLocationHref = (document.location.href).split("#")[0] ;

    //Selon la valeur de cette page sauvegardee
    if(currentPageSaved && currentPageSaved != "" && currentPageSaved != "null"){
        //Si la page sauvegardee est "tout afficher"
        if(currentPageSaved.indexOf("allproducts_") > -1){
             var lastPageUrl = currentPageSaved.split("_")[1] ;
             
             //Si l'internaute reaccede a la page alors on va remettre l'etat de cette page (tout afficher) au moment ou il l'a quitte
             if(lastPageUrl == currentLocationHref){
                showAll() ;
                return false ;
            }
            else{ //Sinon, l'internaute accede a une autre page, on remet alors a jour le cookie pagination avec la nouvelle page et le numero de page courante
                setCookie(_language, "pagination", currentPage+"_"+totalPages+"_"+currentLocationHref) ;
            }
        }
        else{ //Sinon si la page sauvegarde est un numero de page 
            var lastPageUrl = currentPageSaved.split("_")[2] ;
            
            //Si l'internaute reaccede a la page alors on va remettre l'etat de cette page (numero de page) au moment ou il l'a quitte
            if(lastPageUrl == currentLocationHref){
                _numPage = currentPageSaved.split("_")[0] ;
                totalPages = currentPageSaved.split("_")[1] ;
            }
            else{ //Sinon, l'internaute accede a une autre page, on remet alors a jour le cookie pagination avec la nouvelle page et le numero de page courante
                setCookie(_language, "pagination", currentPage+"_"+totalPages+"_"+currentLocationHref) ;
            }
        }
    }
    else{ //Sinon l'internaute accede pour lapremiere fois 
        setCookie(_language, "pagination", currentPage+"_"+totalPages+"_"+currentLocationHref) ;
    }
    
    //on sette la page courante avec la variable _numPage
    currentPage = _numPage ;
    
    hideAll();

    setPagination(_numPage, totalPages) ;

    //display the selected page
    displayProductsPage(_numPage, totalPages, nbProduitFamille, nbProduitParPage)

    //update the show all link
    showall = window.document.getElementById('all_pages');
    if(showall){
        showall.style.visibility = 'visible';
    }
    
    //affichage ou non du bouton comparer
    var lienGdbc = getElement("comparaison") ;
    
    if(nbProduitFamille == 1){
        if(lienGdbc){
            hideBloc(lienGdbc) ;
        }
    }
}

/** #########################################
* Permet d'afficher les produits de la page selectionnee
*/
function displayProductsPage(_numPage, _totalPages, _nbProduitFamille, _nbProduitParPage){
    var listeProduitAAfficher = new ArrayList() ;

    //On va determine si on est en mode degrade ou non, cad est ce que erep est ok ou ko
    var isModeDegrade = false ;
    if(typeof enableModelList != "undefined" && enableModelList.length() > 0){
        isModeDegrade = false ;
    }
    else{
        isModeDegrade = true ;
    }
    
    //On va definir quelle liste d'origine prendre en compte
    var tempList = new ArrayList() ;    
    if(typeof sortedList != "undefined" && sortedList.length() > 0){
        tempList = sortedList ;
    }
    else if(isModeDegrade){
        tempList = modelList ;
    }
    else{
        tempList = enableModelList ;
    }
    
    //Si le nombre de produit de la famille est inferieur ou egal au nombre de produit a afficher par page, on copie la liste modelList dans listeProduitAAfficher
    if(_nbProduitFamille <= _nbProduitParPage){
        listeProduitAAfficher = tempList ;
    }
    else{
        var indexProduitInit = (parseInt(_numPage)*_nbProduitParPage) - _nbProduitParPage ;

        //On va parcourir la liste des modeles pour aficher les bons blocs produit
        for(var i=indexProduitInit ; i<indexProduitInit+_nbProduitParPage ; i++){
            var idModel = tempList.get(i) ;
            
            listeProduitAAfficher.add(idModel) ;
        }    
    }
    
    //On va afficher les produits
    for(var i=0 ; i<listeProduitAAfficher.length() ; i++){
        var currentModel = listeProduitAAfficher.get(i) ;
        var blocModel = "vignetteproduit-"+currentModel ;
        
        if(i % 4 == 3){
        	var blocModelObj = getElement(blocModel) ;
        	if(blocModelObj) {
        		blocModelObj.className = blocModelObj.className + " last" ;
        	}
        }
        displayBlocId(blocModel) ;
    }
}


/* **************************************
* Fonction permettant d'afficher tous les produits
*/
function displayAllProducts(isDisplayPaginationBloc, isDisplayAllBloc){
    //on affiche ou on cache le bloc de pagination
    if(isDisplayPaginationBloc){
        displayBloc(getElement("listepage", true, "")) ;
        displayBloc(getElement("listepage-bas", true, "")) ;
    }
    else{
        hideBloc(getElement("listepage", true, "")) ;
        hideBloc(getElement("listepage-bas", true, "")) ;
    }
    
    //on affiche tous les produits
    var produitsObj = getElement("produits", true, "") ;
    var produitsElts = produitsObj.getElementsByTagName("LI") ;

    //Mode degrade ou non
    var isModeDegrade = false ;
    if(typeof enableModelList != "undefined" && enableModelList.length() > 0){
        isModeDegrade = false ;
    }
    else{
        isModeDegrade = true ;
    }
    
    for(var i=0 ; i<produitsElts.length ; i++){
        if(produitsElts[i] && produitsElts[i].id && produitsElts[i].id.indexOf("vignetteproduit-") > -1){
            var idModel = produitsElts[i].id.split("-")[1] ;
            
            if(isModeDegrade){
                displayBloc(produitsElts[i]) ;
            }
            else{
                if(enableModelList.contains(idModel) > -1){
                    displayBloc(produitsElts[i]) ;
                }
            }
        }
    }
}


/* **************************************
* Fonction permettant d'afficher tous les produits
*/
function hideAllProducts(){
    //on cache le bloc de pagination haut + bas
    hideBloc(getElement("pagination", true, "")) ;
    
    //on cache tous les produits
    var produitsObj = getElement("produits", true, "") ;
    var produitsElts = produitsObj.getElementsByTagName("LI") ;
    
    for(var i=0 ; i<produitsElts.length ; i++){
        if(produitsElts[i] && produitsElts[i].id && produitsElts[i].id.indexOf("vignetteproduit-") > -1){
            hideBloc(produitsElts[i]) ;
        }
    }
}


/** #########################################
* Permet d'afficher les produits de la page d'apres
*/
function showAfter(totalPages){
    currentPage++ ;
    var currentLocationHref = (document.location.href).split("#")[0] ;
    setCookie(_language, "pagination", currentPage+"_"+totalPages+"_"+currentLocationHref) ;
    show(currentPage); 
}


/** #########################################
* Permet d'afficher les produits de la page precedente
*/
function showBefore(totalPages){
    currentPage-- ;
    var currentLocationHref = (document.location.href).split("#")[0] ;
    setCookie(_language, "pagination", currentPage+"_"+totalPages+"_"+currentLocationHref) ;
    show(currentPage);
}


/** #########################################
* Permet d'afficher les produit de la page selectionne
*/
function showPage(thePage, totalPages){
    var currentLocationHref = (document.location.href).split("#")[0] ;
    setCookie(_language, "pagination", thePage+"_"+totalPages+"_"+currentLocationHref) ;
    show(thePage);
}
