/* AVEC NVO SERVICES EREP DU 30 MARS 2009*/

/* CONSTANTES CORRESPONDANTS AUX DIFFERENTS MODES DUTILISATION DU CONTEXTE */
var CONTEXT_MODE_RAYONS = 'mode_1_0';
var CONTEXT_MODE_RAYON = 'mode_1_1';
var CONTEXT_MODE_FAMILLES = 'mode_2_0';
var CONTEXT_MODE_FAMILLE = 'mode_2_1';
var CONTEXT_MODE_MODELES = 'mode_3_0';
var CONTEXT_MODE_MODELE = 'mode_3_1';
var CONTEXT_MODE_SWITCH = 'mode_4_0';

/* CONSTANTE POUR LES DIFFERENTS FILTRES */
var ACT_FILTRE_PRIX = SERVICE_CONSTANTS.DATA_FILTER_PRICE ; //FILTRE SUR LES PRIX
var ACT_FILTRE_ASS = SERVICE_CONSTANTS. DATA_FILTER_MIX ; //FILTRE SUR LES ASSORTIMENTS

/* CONSTANTE POUR LES DIFFERENTS FILTRES */
var STEP_1 = SERVICE_CONSTANTS.STEP_1 ; //FILTRE SUR LES ETAPES DE VIE 1
var STEP_2 = SERVICE_CONSTANTS.STEP_2 ; //FILTRE SUR LES ETAPES DE VIE 2
var STEP_3 = SERVICE_CONSTANTS.STEP_3 ; //FILTRE SUR LES ETAPES DE VIE 3
var STEP_HTN = SERVICE_CONSTANTS.STEP_MIXTE ; //FILTRE SUR LES ETAPES DE VIE MIXTE


/** ******************************************************************************
* Permet de creer l' objet context : JoServiceContext
* params :
*    _rootServer : l'url d'acces a erep. Par ex. http://www.domyos-limited.com/erep1/
*    _lang : le code langue. Par ex. FR
*    _site : l'identifiant du site. Par ex. 35980534
*    _central : l'identifiant de la centrale. Par ex. 1 
*    _typeService : le type du service appele
*    _localfunc : la fonction de post traitement ajax
*/
function getServiceContext(_rootServer, _lang, _site, _central){
    var oContext = new JoServiceContext(_rootServer, _lang, _site, _central, null) ;
    
    return oContext ;
}


/** ******************************************************************************
* Permet de definir le mode lu contexte de service
* params :
*    _oContext : l'objet JoServiceContext
*    _modeContext : Le mode du context CONTEXT_MODE_RAYONS | CONTEXT_MODE_RAYON | CONTEXT_MODE_FAMILLES | CONTEXT_MODE_FAMILLE | CONTEXT_MODE_MODELES | CONTEXT_MODE_MODELE
*    _arg3 : non obligatoire. Correspond a l'identifiant R3 du rayon ou de la famille ou du code modele ou a une liste de modele 
*/
function setModeContext(_oContext, _modeContext, _arg3){
    //MODE RAYONS
    if(_modeContext == CONTEXT_MODE_RAYONS){
        _oContext.setDepartments();
    }
    //MODE RAYON
    //_arg3 doit etre l'identifiant R3 du rayon
    else if(_modeContext == CONTEXT_MODE_RAYON){
        _oContext.setDepartment(_arg3);
    }
    //MODE FAMILLES
    //_arg3 doit etre l'identifiant R3 du rayon    
    else if(_modeContext == CONTEXT_MODE_FAMILLES){
        _oContext.setFamilies(_arg3);
    }
    //MODE FAMILLE
    //_arg3 doit etre l'identifiant R3 de la famille    
    else if(_modeContext == CONTEXT_MODE_FAMILLE){
        _oContext.setFamily(_arg3);
    }
    //MODE MODELES
    //_arg3 doit etre la liste des codes modeles    
    else if(_modeContext == CONTEXT_MODE_MODELES){
        _oContext.setModels();
        for(var i=0 ; i<_arg3.length() ; i++){
            var model = _arg3.get(i) ;
            
            /* Integration des codes modeles dans le service */
            _oContext.addModels(model);
        }
    }
    //MODE MODELE
    //_arg3 doit etre le code modele       
    else if(_modeContext == CONTEXT_MODE_MODELE){
        _oContext.setModel(_arg3);
    }     
}

/********************************************************************************
* _oContext : l'objet JoServiceContext
* _modeContext : Le mode du context CONTEXT_MODE_RAYONS | CONTEXT_MODE_RAYON | CONTEXT_MODE_FAMILLES | CONTEXT_MODE_FAMILLE | CONTEXT_MODE_MODELES | CONTEXT_MODE_MODELE
* _thirdKind
* _thirdNumber
* _thirdSubNumber
* _thirdKind2
* _thirdNumber2
* _thirdSubNumber2
*/
function setModeContextSwitch(_oContext, _modeContext, _thirdKind, _thirdNumber, _thirdSubNumber, _thirdKind2, _thirdNumber2, _thirdSubNumber2){
    //MODE SWITCH
    var thirdKind2 = null;
    var thirdNumber2 = null;
    var thirdSubNumber2 = null;
    
    if(_thirdKind2!=''){
        thirdKind2=_thirdKind2;
    }
    if(_thirdNumber2!=''){
        thirdNumber2=_thirdNumber2;
    }
    if(_thirdSubNumber2!=''){
        thirdSubNumber2=_thirdSubNumber2;
    }
    
    if(_modeContext == CONTEXT_MODE_SWITCH){
        _oContext.setSwitches(_thirdKind, _thirdNumber, _thirdSubNumber,thirdKind2, thirdNumber2, thirdSubNumber2);
    }
}
    
/** ******************************************************************************
* Permet d'activer un filtre sur le contexte de service
* params :
*    _oContext : l'objet JoServiceContext
*    _isActive : true | false : activation ou non de la gestion des filtres
*    _typeFiltre : Type de filtre a activer :  ACT_FILTRE_PRIX | ACT_FILTRE_ASS
*/
function activateDataFilter(_oContext, _isActive, _typeFiltre){
    //Activation ou non de la gestion des filtres
    if(_isActive){
        _oContext.activateDataFilter();
    }
    else{
        _oContext.desactivateDataFilter();
    }
    
    //Activation ou non du filtre selectionne
    if(_typeFiltre){
       if(_isActive){
            _oContext.enableDataFilter(_typeFiltre);
        }
        else{
            _oContext.disableDataFilter(_typeFiltre);
        }
    }
}


/** ******************************************************************************
* Permet d'activer un filtre sur le contexte de service
* params :
*    _oContext : l'objet JoServiceContext
*    _isActive : true | false : filtre ou non sur cet etape
*    _stepToEnable : L'etape a filtrer :  STEP_1 | STEP_2 | STEP_3
*    _isHeterogen : true | false : donnees heterogenes ou non
*/
function enableStepFilter(_oContext, _isActive, _stepToEnable, _isHeterogen){
    //Activation ou non de la gestion des filtres sur les etapes
    if(_isActive){
        _oContext.enableStepFilter(_stepToEnable); //on ne va recuperer que les produits ayant cette etape
    }
    else{
        _oContext.disableStepFilter(_stepToEnable) ; //on va recuperer tous les produits n'ayant pas cette etape
    }
    
    //Recuperation ou non des modeles heterogenes
    if(_isHeterogen){
        _oContext.enableStepFilter(STEP_HTN);
    }
    else{
        _oContext.disableStepFilter(STEP_HTN);
    }
}


/** ******************************************************************************
* Permet l'execution du contexte de service
* params :
*    _oContext : l'objet JoServiceContext
*    _postExecuteServiceFunc : la fonction post ajax a appeler
*/
function executeService(_oContext, _postExecuteServiceFunc) {
   /* CREATION D UN NOUVEAU DE SERVICE. */
   var joService = new JoService(_oContext);
    
   /* EXECUTION DU SERVICE. */
   joService.execute(_postExecuteServiceFunc);
   
   return joService.getId() ;
}

/** ******************************************************************************
* Permet de recuperer l'objet Item
* params :
*    _idService : l'id du service exectue
*    _idItem : l'id de l'item
*/
function getMyItem(_idService, _idItem) {
   /* RECUPERATION DU CONTEXTE DE SERVICE. */
   var oService = getService(_idService) ;
   
   /* RECUPERATION DU CONTENU DU SERVICE */
   var oContent = oService.getContent();
   
   /* RECUPERATION DE L'ITEM. */
   if (oContent != null) {
       return oContent.getItem(_idItem);
   }
   else{       
       return null;
   }
}

/** ******************************************************************************
* Permet de recuperer le nombre d'item
* params :
* _idService : l'id du service exectue
*/
function getNbItem(_idService) {
 /* RECUPERATION DU CONTEXTE DE SERVICE. */
     var oService = getService(_idService) ;

     /* RECUPERATION DU CONTENU DU SERVICE */
     var oContent = oService.getContent();

 /* RECUPERATION DE L'ITEM. */
 if (oContent != null) {
 var oItems = oContent.getItems();
 if(oItems){
 return oItems.getSize() ;
 }
 else{
 return -1 ;
 }
 }
 else{
 return -1 ;
 }
}

/*recuperation d'un switch */
function getMySwitch(_serviceId, _name, _thirdKind, _thirdNumber, _thirdSubNumber, language) {
    
    /** ON RECUPERE LE SERVICE. */
    var oService = getService(_serviceId);
    if (oService == null) {return;}
    
    /** ON RECUPERE LE CONTENU DU SERVICE. */
    var oContent = oService.getContent();
    if (oContent == null) {return;}
    
    var oSwitches = oContent.getSwitches();
    if (oSwitches == null) {return;}
    
    /* RECUPERATION DE L'ITEM. */
    return oSwitches.getSwitch(_name, _thirdKind, _thirdNumber, _thirdSubNumber, language);
}

/*recuperation liste des switches */
function getMySwitches(_serviceId) {
    
    /** ON RECUPERE LE SERVICE. */
    var oService = getService(_serviceId);
    if (oService == null) {return;}
    
    /** ON RECUPERE LE CONTENU DU SERVICE. */
    var oContent = oService.getContent();
    if (oContent == null) {return;}
    
    /* RECUPERATION DE L'ITEM. */
    return oContent.getSwitchesList();
}