/* AVEC NVO SERVICES EREP DU 30 MARS 2009*/

//Parametres globaux
var _client = "20430868" ;
var _cookieName = "erepServ" ;
var isOxyCallWithSwitch = 'true' ; //permet de controler l'affichage des fonctions Oxylane

/* ATTENTION EN PROD */
/*var _EREPO1 = "/erep1" ;*/
/*var _EREPO2 = "/erep2" ;*/
/*var _EREPO3 = "/erep3" ;*/
var _EREPO = "/erep" ; 

var THIRD_KIND_CENTRAL = "15" ;
var THIRD_KIND_STORE = "7" ;
var THIRD_KIND_SITE = "-1" ;

var _SERVICE_SWITCH = "switch" ;
var _SERVICE_ITEM_DEPARTMENT = "item_department" ;
var _SERVICE_ITEM_FAMILY = "item_family" ;
var _SERVICE_ITEM_MODELS = "item_models";
var _SERVICE_ITEM_MINIBOUTIQUE = "item_models-miniboutique";
var _SERVICE_ITEM_MODEL = "item_model";

var _urlErep = "" ;
var _context = "" ; //adresse du serveur eRep, ex : _EREPO1 ;
var _urlSite = "" ; //adresse du site internet, ex : http://www.decathlon.fr ;

//## SPECIFIQUE Marques : URL du site courant
var urlSiteCourant = document.location.href ; //get the site URL

//Liste des serveur eRep
var serverList = new ArrayList() ;
/*serverList.add(_EREPO1) ;*/
/*serverList.add(_EREPO2) ;*/
/*serverList.add(_EREPO3) ;*/
serverList.add(_EREPO) ;

var indexTestServer = getRandomServerIdToCheck(serverList.length()) ; 
var numTentative = 0 ; //Numero de la tentative
var maxTentatives = (serverList.length())*2 ; //Nb max de tentatives => on va verifier pour chaque serveur 2 fois au max si ils ne repondent pas
var nbServeurDispo=serverList.length();

//## SPECIFIQUE Marques
var siteNovadry = new SiteServer("novadry", _EREPO) ;
var siteEquarea = new SiteServer("equarea", _EREPO) ;
var siteStratermic = new SiteServer("stratermic", _EREPO) ;
var siteStrenfit = new SiteServer("strenfit", _EREPO) ;
var siteEssensole = new SiteServer("essensole", _EREPO) ;

//## SPECIFIQUE Marques
var siteServerObjList = new ArrayList() ;
siteServerObjList.add(siteNovadry) ;
siteServerObjList.add(siteEquarea) ;
siteServerObjList.add(siteStratermic) ;
siteServerObjList.add(siteStrenfit) ;
siteServerObjList.add(siteEssensole) ;

var _POST_FUNC_CHECK_SERV = function(httpstatus){
    if(httpstatus == "200"){
        setUrlErep(typeService, urlErep, client, kind1, number1, subNumber1, kind2, number2, subNumber2, localFunc) ;
    }
    else{
    
        if(numTentative < maxTentatives){
            var isResponse = checkOtherServer(typeService, _urlSite, _context, client, kind1, number1, subNumber1, kind2, number2, subNumber2, localFunc) ;
            numTentative++; //on incremente le numero de la tentative de connexion a un autre serveur
        }
        else{
            disableElementSwitch("bloc-decathlon") ;
            disableElementSwitch("zone-ecotaxe-decath") ;
            disableElementSwitch("zone-ecotaxe-koodza") ;
            disableElementSwitch("bloc-koodza") ;
            disableElementSwitch("bloc-vocalisation") ;
            disableElementSwitch("header-mdr") ;
            disableElementSwitch("encartgaucheint-arbo") ;
        }
        displayBlocProduit();
    }
}

/**********************************************************************************
*                                            Framework javascript eRepository
**********************************************************************************/
/*
 * Permet de stocker le serveur eRep dans un cookie et de lancer la fonction de retour
 * @param :
 *     _typeService : SERVICE_SWITCH
 *     _client : client ITOOL
 *     _kind1 : type de tiers 1, par exemple tier Site
 *     _number1 : numero du tiers 1, par exemple id du site
 *     _subNumber1 : sous numero du tiers 1, par exemple id du site
 *     _kind2 : type de tiers 2, par exemple tier Site
 *     _number2 : numero du tiers 2, par exemple id du site
 *     _subNumber2 : sous numero du tiers 2, par exemple id du site
 *     _localFunc : Fonction de retour
*/
function getUrlErep(_typeService, _client, _kind1, _number1, _subNumber1, _kind2, _number2, _subNumber2, _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() ;
        checkServer(_typeService, _urlSite, _context, _client, THIRD_KIND_SITE, _number1, _subNumber1, _kind2, _number2, _subNumber2, _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
 *     _kind1 : type de tiers 1, par exemple tier Site
 *     _number1 : numero du tiers 1, par exemple id du site
 *     _subNumber1 : sous numero du tiers 1, par exemple id du site
 *     _kind2 : type de tiers 2, par exemple tier Site
 *     _number2 : numero du tiers 2, par exemple id du site
 *     _subNumber2 : sous numero du tiers 2, par exemple id du site
 *     _localFunc : Fonction de retour
 * @return :
 *    urlErep
*/
function setUrlErep(_typeService, urlErep, _client, _kind1, _number1, _subNumber1, _kind2, _number2, _subNumber2, _localFunc){       
    if(urlErep != ""){
        _urlErep = urlErep ; //on stocke le serveur eRep dans la constante _urlErep
        setCookie(_language, _cookieName, urlErep) ; //on sette le cookie

        //Pour la premiere recuperation, on va charger les switchs
        if(_typeService == _SERVICE_SWITCH){
            var oContext = new JoServiceContext(urlErep, _language, _siteNumber, _centralNumber, _storeNumber);
            setModeContextSwitch(oContext, CONTEXT_MODE_SWITCH,  THIRD_KIND_SITE, _siteNumber, _siteNumber, _kind2, _number2, _subNumber2);
            serviceIdSwitch = executeService(oContext, _localFunc);
           /* _initSwitchService(_urlErep);
            _loadSwitches(_client, THIRD_KIND_SITE, _number1, _subNumber1, _kind2, _number2, _subNumber2, _localFunc);*/
        }
        else if(_typeService == _SERVICE_ITEM_DEPARTMENT){
            loadDepartment(_client, _number1, _subNumber1, _number2,_displayPrice, isSlideShow, _localFunc);
        }               
        else if(_typeService ==_SERVICE_ITEM_MODELS){
            if(modelList && modelList.length() > 0){                           
                 loadModels(_client, _number1, _number2, _localFunc);
            }
        }
        else if(_typeService ==_SERVICE_ITEM_MODEL){
            loadModel(_client, _subNumber1, _number2, _number1, _language, _displayPrice, isFromModel, _localFunc);            
        }
        else if(_typeService ==_SERVICE_ITEM_MINIBOUTIQUE){
            if(modelList && modelList.length() > 0){                           
                 loadModelsMiniBoutique(_client, _subNumber1, _number2, _localFunc, typeBoutique);
            }
        }
                
        return urlErep ;
    }
    else{
        return "" ;
    }
}

/*
 * 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 = "" ;
    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
 *     thisUrlSite : l'url courante du site
 *     thisContext : le contexte courant du site
 *     _client : client ITOOL
 *     _kind1 : type de tiers 1, par exemple tier Site
 *     _number1 : numero du tiers 1, par exemple id du site
 *     _subNumber1 : sous numero du tiers 1, par exemple id du site
 *     _kind2 : type de tiers 2, par exemple tier Site
 *     _number2 : numero du tiers 2, par exemple id du site
 *     _subNumber2 : sous numero du tiers 2, par exemple id du site
 *     _localFunc : Fonction de retour
*/
function checkServer(_typeService, urlSite, context, _client, _kind1, _number1, _subNumber1, _kind2, _number2, _subNumber2, _localFunc){    
    if(urlSite != "" && context != ""){
        //parametres qui vont servir a la fonction de retour
        typeService = _typeService ;
        client = _client ; 
        kind1 = THIRD_KIND_SITE;
        number1 = _number1;
        subNumber1 = _subNumber1;
        kind2 = _kind2 ;
        number2 = _number2 ;
        subNumber2 = _subNumber2 ;        
        localFunc = _localFunc ;
        urlErep = urlSite + context ;
        
        // Creation du contexte
        var oContext = new JoServiceContext(urlErep, _language, _siteNumber, _centralNumber, _storeNumber);
        setModeContextSwitch(oContext, CONTEXT_MODE_SWITCH,  THIRD_KIND_SITE, _siteNumber, _siteNumber, _kind2, _number2, _subNumber2);
        serviceIdSwitch = executeService(oContext, _POST_FUNC_CHECK_SERV);
        /*_initSwitchService(urlErep);        
        _loadSwitches(_client, THIRD_KIND_SITE, _number1, _subNumber1, _kind2, _number2, _subNumber2, _POST_FUNC_CHECK_SERV);*/
    }
}

/*
 * Permet de checker tous les serveurs eRep jusqu'a ce que un serveur reponde
 * @param :
 *     _typeService : SERVICE_SWITCH
 *     indexTestServer : l'index du serveur courant a tester
 *     thisUrlSite : l'url courante du site
 *     thisContext : le contexte courant du site
 *     _client : client ITOOL
 *     _kind1 : type de tiers 1, par exemple tier Site
 *     _number1 : numero du tiers 1, par exemple id du site
 *     _subNumber1 : sous numero du tiers 1, par exemple id du site
 *     _kind2 : type de tiers 2, par exemple tier Site
 *     _number2 : numero du tiers 2, par exemple id du site
 *     _subNumber2 : sous numero du tiers 2, par exemple id du site
 *     _localFunc : Fonction de retour
*/
function checkOtherServer(_typeService, thisUrlSite, thisContext, _client, _kind1, _number1, _subNumber1, _kind2, _number2, _subNumber2, _localFunc){    
    var currentERepoServer = serverList.get(indexTestServer) ; //on recupere le serveur a tester
    
    //parametres qui vont servir a la fonction de retour
    typeService = _typeService ;
    client = _client ; 
    kind1 = THIRD_KIND_SITE;
    number1 = _number1;
    subNumber1 = _subNumber1;
    kind2 = _kind2 ;
    number2 = _number2 ;
    subNumber2 = _subNumber2 ;        
    localFunc = _localFunc ;
    indexTestServer = (indexTestServer + 1) % nbServeurDispo ;
    
    //Si le serveur a tester est le serveur associe au site, on va recuperer le prochain serveur a tester de la liste si celui-ci existe
    if(currentERepoServer == thisContext){                
        if(serverList.get(indexTestServer) != ""){
            currentERepoServer = serverList.get(indexTestServer) ;
        }
        indexTestServer = (indexTestServer + 1) % nbServeurDispo ;
    }
    
    if(currentERepoServer != ""){   
        urlErep = thisUrlSite + currentERepoServer ;
        
        // Creation du contexte
        var oContext = new JoServiceContext(urlErep, _language, _siteNumber, _centralNumber, _storeNumber);
        setModeContextSwitch(oContext, CONTEXT_MODE_SWITCH,  THIRD_KIND_SITE, _siteNumber, _siteNumber, _kind2, _number2, _subNumber2);
        serviceIdSwitch = executeService(oContext, _POST_FUNC_CHECK_SERV);
        
       /* _initSwitchService(urlErep);
        _loadSwitches(_client, THIRD_KIND_SITE, _number1, _subNumber1, _kind2, _number2, _subNumber2, _POST_FUNC_CHECK_SERV);
*/
        
        return true ;
    }
    else{
        return false ;
    }
}

/*
 * 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 "" ;
    }
}

function getRandomServerIdToCheck(nbServer){
    var randomId = Math.ceil(Math.random()*nbServer) ;
    return (randomId - 1) ;
}



/* ########################################################## */
/*    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")) ;
