/**********************************************************************************
*                                            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 _EREPO1 = "/erep1" ;
var _EREPO2 = "/erep2" ;
var _EREPO3 = "/erep3" ;
var _EREPO4 = "/erep4" ;

var _SERVICE_SWITCH = "switch" ;
var _SERVICE_ITEM_FAMILY = "item_family" ;
var _SERVICE_ITEM_FAMILY_SLIDESHOW = "item_family_slideshow" ;
var _SERVICE_ITEM_MODELS = "item_models";
var _SERVICE_ITEM_MODELS_VC = "item_models_vc";
var _SERVICE_ITEM_MODEL = "item_model";

// ************* Variables en commun
var _context = "" ; //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(_EREPO1) ;
serverList.add(_EREPO2) ;
serverList.add(_EREPO3) ;
serverList.add(_EREPO4) ;

var nbServerErep=serverList.length();

// ************* Variables utilises pour la connexion aux serveurs eRep
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

// ************* Declaration des sites
var siteAptonia = new SiteServer("aptonia", _EREPO4) ;
var siteArtengo = new SiteServer("artengo", _EREPO3) ;
var siteBtwin = new SiteServer("btwin", _EREPO3) ;
var siteDomyos = new SiteServer("domyos", _EREPO2) ;
var siteFouganza = new SiteServer("fouganza", _EREPO4) ;
var siteGeologic = new SiteServer("geologic", _EREPO2) ;
var siteGeonaute = new SiteServer("geonaute", _EREPO3) ;
var siteInesis = new SiteServer("inesis", _EREPO4) ;
var siteKalenji = new SiteServer("kalenji", _EREPO2) ;
var siteKipsta = new SiteServer("kipsta", _EREPO2) ;
var siteOxelo = new SiteServer("oxelo", _EREPO4) ;
var siteQuechua = new SiteServer("quechua", _EREPO4) ;
var siteTribord = new SiteServer("tribord", _EREPO4) ;
var siteWedze = new SiteServer("wedze", _EREPO3) ;
var siteCaperlan = new SiteServer("caperlan", _EREPO2) ;
var siteSolognac = new SiteServer("solognac", _EREPO3) ;
var siteNewfeel = new SiteServer("newfeel-shoes", _EREPO2) ;

var siteServerObjList = new ArrayList() ;
siteServerObjList.add(siteAptonia) ;
siteServerObjList.add(siteArtengo) ;
siteServerObjList.add(siteBtwin) ;
siteServerObjList.add(siteDomyos) ;
siteServerObjList.add(siteFouganza) ;
siteServerObjList.add(siteGeologic) ;
siteServerObjList.add(siteGeonaute) ;
siteServerObjList.add(siteInesis) ;
siteServerObjList.add(siteKalenji) ;
siteServerObjList.add(siteKipsta) ;
siteServerObjList.add(siteOxelo) ;
siteServerObjList.add(siteTribord) ;
siteServerObjList.add(siteQuechua) ;
siteServerObjList.add(siteWedze) ;
siteServerObjList.add(siteCaperlan) ;
siteServerObjList.add(siteSolognac) ;
siteServerObjList.add(siteNewfeel) ;

var _filterPrice=true;
var _filterAssortiment=true;

/**
* 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{
        if(numTentative < maxTentatives){
            var isResponse = checkOtherServer(_urlSite, _context, typeService, _client, typeTiers, idSite, id, localFunc) ;
            numTentative++; //on incremente le numero de la tentative de connexion a un autre serveur
        }
        else{
            disableElementSwitch("bloc-decathlon") ;
            disableElementSwitch("zone-ecotaxe-decath") ;
            disableElementSwitch("header-mdr") ;
            
            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 modle
 *     _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 checker tous les serveurs eRep jusqu'a ce que un serveur reponde
 * @param :
 *     _typeService : SERVICE_SWITCH
 *     _client : client ITOOL
 *     _typeTiers : tiers Site
 *     _idSite : id du site
 *     _idl : code modele par exemple
 *     _localFunc : Fonction de retour
*/
function checkOtherServer(urlSite, context, _typeService, _client, _typeTiers, _idSite, _id, _localFunc){    
    var currentERepoServer = serverList.get(indexTestServer) ; //on recupere le serveur a tester

    //parametres qui vont servir a la fonction de retour
    urlErep = _urlSite + _context ;
    typeService = _typeService ;
    typeTiers = _typeTiers ;
    idSite = _idSite ;
    id = _id ;
    localFunc = _localFunc ;
    
    indexTestServer = (indexTestServer + 1) % nbServerErep ;
    
    //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 == context){                
        if(serverList.get(indexTestServer) != ""){
            currentERepoServer = serverList.get(indexTestServer) ;
        }
        indexTestServer = (indexTestServer + 1) % nbServerErep ;
    }
    
    if(currentERepoServer != ""){   
        urlErep = urlSite + currentERepoServer ;

        var serviceId = initExecuteService(urlErep, _language, _idSite, _centralNumber, CONTEXT_MODE_SWITCH, "", _POST_FUNC_CHECK_SERV, false, false) ;

        return true ;
    }
    else{
        return 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,_isDisplayPrice,_isDisplayAssortiment){        
    //on doit recuperer du cookie l'url eRep    
    var eRepServer = getCookie(_cookieName) ;    
    _filterPrice=_isDisplayPrice;
    _filterAssortiment=_isDisplayAssortiment;
    
    //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 modle
 *     _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
    
    //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, _filterPrice, _filterAssortiment) ;
    }               
    else if(_typeService ==_SERVICE_ITEM_MODELS){
        if(modelList && modelList.length() > 0){
            //appel au nouveau service
            getModels(_client, _siteNumber, _centralNumber, _filterPrice, _filterAssortiment)
        }
    } 
    else if(_typeService ==_SERVICE_ITEM_MODEL){
        //appel au nouveau service
        var isFromModel = true ;
        getModel(_client, _idSite, _centralNumber, _id, _filterPrice, _filterAssortiment, isFromModel) ;
    }
            
    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) ;
}