//Parametres globaux
var _cookieName = "erepServ" ;
var _client = "ITOOL" ;
var isOxyCallWithSwitch = 'true' ; //permet de controler l'affichage des fonctions Oxylane

/*var _EREPO1 = "/erep1" ;*/
var _EREPO2 = "/erep2" ;
var _EREPO3 = "/erep3" ;
var _EREPO4 = "/erep4" ;

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_MODELS = "item_models";
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(_EREPO4) ;

var nbServeurDispo=serverList.length();

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 siteTechnologySport = new SiteServer("technology-sport", _EREPO3) ;

var siteServerObjList = new ArrayList() ;
siteServerObjList.add(siteTechnologySport) ;

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("searchForm") ;
        }
        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, _kind1, _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){
            _initSwitchService(_urlErep);
            _loadSwitches(_client, _kind1, _number1, _subNumber1, _kind2, _number2, _subNumber2, _localFunc);
        }
        else if(_typeService == _SERVICE_ITEM_DEPARTMENT){
            _initItemService(_urlErep) ;
            
            _loadDepartment( _client, _subNumber1, _number2, "", _number1, _kind2, _localFunc) ;
        }                
        else if(_typeService ==_SERVICE_ITEM_MODELS){
            if(modelList && modelList.length() > 0){
                _initItemService(_urlErep) ;
                
                //compteur qui va servir a reinitialiser la liste tous les 20 modeles
                var indexModel = 0 ;
                
                for(var j=0 ; j<modelList.length() ; j++){
                    var model = modelList.get(j) ;                    
                    
                    if(model != ""){
                        addModelForService(model) ;
                        indexModel = j+1 ;
                    }
                    //lorsque le nombre modele contenu dans la liste atteint 20, on va charger ces modeles et mettre a 0 la liste
                    if(indexModel == 20){
                        _loadModels(_client, _idSite, _idCentral, "", _localfunc) ;
                        _resetModelList() ;
                        indexModel = 0 ;
                    }
                }
                
                //charge les modeles pour les derniers modeles de la liste
                _loadModels(_client, _number1, _number2, "", _localFunc) ;
            }
        }
        else if(_typeService ==_SERVICE_ITEM_MODEL){
            _initItemService(_urlErep) ;
            _loadModel(_client, _subNumber1, _number2, null, _number1, _kind2, _localFunc) ;            
        }
                
        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 = _kind1;
        number1 = _number1;
        subNumber1 = _subNumber1;
        kind2 = _kind2 ;
        number2 = _number2 ;
        subNumber2 = _subNumber2 ;        
        localFunc = _localFunc ;
        urlErep = urlSite + context ;
        
        _initSwitchService(urlErep);        
        _loadSwitches(_client, _kind1, _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 = _kind1;
    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 ;
        
        _initSwitchService(urlErep);
        _loadSwitches(_client, _kind1, _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) ;
}