/**********************************************************************************
*                                            Framework javascript eRepository
**********************************************************************************/

// ************* Constantes utilises par les switchs
var _client = "ITOOL" ;
var THIRD_KIND_CENTRAL = "15" ;
var THIRD_KIND_STORE = "7" ;
var THIRD_KIND_SITE = "-1" ;

// ************* Constantes en commun
var _cookieName = "erepServ" ;
var isOxyCallWithSwitch = 'true' ; //permet de controler l'affichage des fonctions Oxylane
var _EREPO = "/erep" ;

var _SERVICE_SWITCH = "switch" ;
var _SERVICE_ITEM_FAMILY = "item_family" ;
var _SERVICE_ITEM_FAMILY_SLIDESHOW = "item_family_ss";
var _SERVICE_ITEM_MODELS = "item_models";
var _SERVICE_ITEM_MODEL = "item_model";

// ************* Variables en commun
var _context = _EREPO ; //adresse du serveur eRep, ex : _EREPO1 ;
var _urlSite = "" ; //adresse du site internet, ex : http://www.decathlon.fr ;

// ************* Liste des serveur eRep
var serverList = new ArrayList() ;
serverList.add(_EREPO) ;

var nbServerErep = serverList.length() ; 

// ************* Variables utilises pour la connexion aux serveurs eRep
var indexTestServer = getRandomServerIdToCheck(nbServerErep) ; 
var numTentative = 0 ; //Numero de la tentative
var maxTentatives = (nbServerErep)*2 ; //Nb max de tentatives => on va verifier pour chaque serveur 2 fois au max si ils ne repondent pas
var currentServiceExecuted = "" ;

// ************* Declaration des sites
var siteBtwin = new SiteServer("btwincycle", _EREPO) ;

var siteServerObjList = new ArrayList() ;
siteServerObjList.add(siteBtwin) ;


/**
* Permet d'afficher les produits en mode degrade
*/
function displayProducts(){
    //erep ne repond plus
    //affichage des produits neanmoins
    //desactivation du bloc waitingMessage
    hideWaitingMessage() ;
    
    if (typeof nbProduitFamille != "undefined"){
        writePagination(true) ; //Affichage pagination en mode degrade = true
            
        //Affichage des produits
        show("1") ;
    }
}

/**
* Fonction post traitement ajax
* Tentative de connexion a un serveur eRep pour retourner le root du serveur
* Si auncune connexion, desactivation de tous les switchs par defaut
*/
var _POST_FUNC_CHECK_SERV = function(httpstatus){
    if(httpstatus == "200"){
        setUrlErep(typeService, urlErep, _client, typeTiers, idSite, id, localFunc) ;
    }
    else{
       
		disableElementSwitch("bloc-prix") ;
		disableElementSwitch("searchForm") ;
		
		displayProducts() ;
        
    }
}


/*
 * Permet de retourner l'url root du site
 * @param : urlHref doit etre du type http://www.aptonia.com ou http://aptonia.preview.dktetrix.net ou http://www.decathlon.fr ou http://fr.preview.dktetrix.net
 * @return : www.aptonia.com ou aptonia.preview.dktetrix.net ou decathlon.fr ou fr.preview.dktetrix.net
*/
function getRootUrl(urlHref){
    if(urlHref){
        var rootUrl = "" ;
        var urlSplit = urlHref.split("/") ;
        if(urlSplit.length > 1 && urlSplit[2]){
            rootUrl = urlSplit[2] ;
        }
        return rootUrl ;
    }
    else{
        return "" ;
    }
}


/*
 * Permet de retourner le numero du serveur a tester
 * @param : nbServer : le nombre de serveur a tester
 * @return : le numero de serveur a tester
*/
function getRandomServerIdToCheck(nbServer){
    var randomId = Math.ceil(Math.random()*nbServer) ;
    return (randomId - 1) ;
}


/*
 * Permet de recuperer l'urlSite et le context en fonction du document.href courant
 * Permet de setter _urlSite et _context
*/
function getServer(){
    //on recupere le root de l'url courante
    var currentRootUrl = "" ;
    var urlSiteCourant = document.location.href ; //get the site URL
    
    if(urlSiteCourant && urlSiteCourant != ""){
        currentRootUrl = getRootUrl(urlSiteCourant) ;
    }
    
    //on va recuperer le serveur eRepo associe a ce site
    if(currentRootUrl){
        for(var i=0 ; i<siteServerObjList.length() ; i++){
            var siteServer = siteServerObjList.get(i) ;
            var urlSite = siteServer.getUrlSite() ;

            if(urlSite && currentRootUrl.indexOf(urlSite) > -1){
                _urlSite = "http://"+currentRootUrl ;
                _context = siteServer.getERepoUrl() ;
            }
        }
    }
}


/*
 * Permet de checker le serveur eRep associe au site
 * @param :
 *     _typeService : SERVICE_SWITCH
 *     _client : client ITOOL
 *     _typeTiers : tiers Site
 *     _idSite : id du site
 *     _id : code modèle
 *     _localFunc : Fonction de retour
*/
function checkServer(_typeService, _client, _typeTiers, _idSite, _id, _localFunc){    
    //parametres qui vont servir a la fonction de retour
    urlErep = _urlSite + _context ;
    typeService = _typeService ;
    typeTiers = _typeTiers ;
    idSite = _idSite ;
    id = _id ;
    localFunc = _localFunc ;
    
    var serviceId = initExecuteService(urlErep, _language, _idSite, _centralNumber, CONTEXT_MODE_SWITCH, "", _POST_FUNC_CHECK_SERV, false, false) ;
}


/*
 * Permet de stocker le serveur eRep dans un cookie et de lancer la fonction de retour
 * @param :
 *     _typeService : SERVICE_SWITCH | _SERVICE_ITEM_MODEL ...
 *     _client : ITOOL
 *     _typeTiers : type de tiers :  THIRD_KIND_SITE
 *     _idSite : numero du tiers 1, par exemple id du site
 *     _id : numero du code modele par exemple 
 *     _localFunc : Fonction de retour
*/
function getUrlErep(_typeService, _client, _typeTiers, _idSite, _id, _localFunc){
    //on doit recuperer du cookie l'url eRep    
    var eRepServer = getCookie(_cookieName) ;    

    //Si celui-ci est null, on va checker le serveur associe au site
    if(eRepServer == null){
        getServer() ;
        
        if(_id == ""){
            checkServer(_typeService, _client, _typeTiers, _idSite, _idSite, _localFunc) ;
        }
        else{
            checkServer(_typeService, _client, _typeTiers, _idSite, _id, _localFunc) ;
        }
    }
    //sinon, on retourne le serveur eRep qui lui est associe
    else{        
        return eRepServer
    }
}


/*
 * Permet de stocker le serveur eRep dans un cookie et de lancer la fonction de retour
 * @param :
 *     _typeService : SERVICE_SWITCH
 *     urlErep : l'url eRep a stocker
 *     _client : client ITOOL
 *     _typeTiers : tiers Site
 *     _idSite : id du site
 *     _id : code modèle
 *     _localFunc : Fonction de retour
 * @return :
 *    urlErep
*/
function setUrlErep(_typeService, urlErep, _client, _typeTiers, _idSite, _id, _localFunc){    
    setCookie(_language, _cookieName, urlErep) ; //on sette le cookie pour le site pays
    setCookie("", _cookieName, urlErep) ; //on sette le cookie pour le MDR
    
    if(currentServiceExecuted != _typeService){
        currentServiceExecuted = _typeService ; //on initialise le service courant execute, cela va eviter d'executer 2 fois le meme service

        //Pour la premiere recuperation, on va charger les switchs
        if(_typeService == _SERVICE_SWITCH){
            checkSwitches(_switchArrayAChecker, _client, _idSite, "") ; //_switchArrayAChecker a ete declarer dans l'HTML
        }    
        else if(_typeService == _SERVICE_ITEM_FAMILY){
            //appel au nouveau service
            getFamily(_client, _id, _idSite, _centralNumber, true, false) ;
            
            if(typeof isFromTg != "undefined" && isFromTg && typeof idModel != "undefined"){ //ces variables sont declarees dans la page famille
                getModel(_client, _idSite, _centralNumber, idModel, true, false, isFromTg) ;
            }
        }
        else if(_typeService == _SERVICE_ITEM_FAMILY_SLIDESHOW){
            //appel au nouveau service        
            getFamily(_client, _id, _idSite, _centralNumber, false, true) ;
        }
        else if(_typeService ==_SERVICE_ITEM_MODELS){
            if(modelList){
                //appel au nouveau service
                getModels(_client, _siteNumber, _centralNumber, true, true, true)
            }
        }
        else if(_typeService ==_SERVICE_ITEM_MODEL){
            
            //appel au nouveau service
            getModel(_client, _idSite, _centralNumber, _id, true, true, false) ;
        }
            
        return urlErep ;
    }    
}


/* ########################################################## */
/*    Gestion Map enseigne et site URL */
var mapUrlParPays = new Map() ;
mapUrlParPays.put("BE", new EnseigneSiteObj("5", "http://www.decathlon.be", "10696451.Decathlon_BE_OFFLINE")) ;
mapUrlParPays.put("BR", new EnseigneSiteObj("14", "http://www.decathlon.com.br", "25797673.Decathlon_BR_OFFLINE")) ;
mapUrlParPays.put("CN", new EnseigneSiteObj("15","http://www.decathlon.com.cn", "19497069.Decathlon_CN_OFFLINE")) ;
mapUrlParPays.put("DE", new EnseigneSiteObj("2", "http://www.decathlon.de", "8367481.Decathlon_DE_OFFLINE")) ;
mapUrlParPays.put("EN", new EnseigneSiteObj("7", "http://www.decathlon.co.uk", "52333.Decathlon_UK")) ;
mapUrlParPays.put("ES", new EnseigneSiteObj("3", "http://www.decathlon.es", "4809998.Decathlon_ES_OFFLINE")) ;
mapUrlParPays.put("FR", new EnseigneSiteObj("1", "http://www.decathlon.fr", "55813.Decathlon_FR")) ;
mapUrlParPays.put("HU", new EnseigneSiteObj("17", "http://www.decathlon.co.hu", "12780013.Decathlon_HU_OFFLINE")) ;
mapUrlParPays.put("IN", new EnseigneSiteObj("-1", "http://www.decathlon.in", "")) ;
mapUrlParPays.put("IT", new EnseigneSiteObj("4", "http://www.decathlon.it", "6288994.Decathlon_IT_OFFLINE")) ;
mapUrlParPays.put("NL", new EnseigneSiteObj("10", "http://www.decathlon.nl", "11555379.Decathlon_NL_OFFLINE")) ;
mapUrlParPays.put("PL", new EnseigneSiteObj("12", "http://www.decathlon.com.pl", "10293446.Decathlon_PL_OFFLINE")) ;
mapUrlParPays.put("PT", new EnseigneSiteObj("11", "http://www.decathlon.pt", "6721215.Decathlon_PT_OFFLINE")) ;
mapUrlParPays.put("RU", new EnseigneSiteObj("18", "http://www.decathlon.ru", "14594889.Decathlon_RU")) ;


/*
 * Permet de setter la central du pays
 * @param : 
 *    country : le pays selectionne
 *    language : la langue choisie
*/
function setCentralCountry(country, language){
    setCookie(language, "country", country) ;
}
