<?php
require_once 'application/class/class_ManageSession.php';
require_once 'application/helpers/class_supervision.php';

// Si l'utilisateur appelle la page de recherche article

if ('import_fichier' != getValue('action')) {
    echo 'document.location.href=\'V2/RechercheArticles\';';
    exit;
}


$numObjet = getValue('numObjet');
$addObjet = getValue('addObjet');

if($numObjet && $addObjet)
{
    $valueCDE_DA = [
        'numObjet' => $numObjet,
        'addObjet' => $addObjet,
    ];
}
else
{
    $valueCDE_DA = [];
}

if($_SESSION['id_panier'] == -1){
    if(isset($_SESSION['panier_ModifSigna']) && $_SESSION['panier_ModifSigna'] == - 1) {
        $infoEntet = sqlPanier::rqSelectPanierModifDocEnSignature($_SESSION['id_panier'])->Trouve1();
        
        $explode = explode('|', $infoEntet['ORIGINE']);
        if($explode['0'] == 'modifDocPourSignature') {
            unset($_SESSION['panier_ModifSigna']);
        
            Panier::SupprimePanier(- 1);
            $_SESSION['id_panier'] = 0;
            $_SESSION['initConnexion'] = 1;
            PanierEntete::InitPanierEncours($_SESSION['id_user'], $_SESSION['id_panier'], true);
        }

    }
}

if ('switchBloc' == getValue('action')) {
    // Suppression de l'affichage des catalogues
    // affCatalogue
    $xml = null;
    $option = null;
    
    Affichage::displayElement('tab_catalogue', false);
    
    $rechercheCatalogue = Properties::getObjectSession(RechercheCatalogue::OBJ_SESSION_RECHE_CAT);
    
    if ($rechercheCatalogue instanceof Properties) {
        $rechercheCatalogue->setProperties('affSuggestions', false);
        $rechercheCatalogue->setProperties('affFavoris', false);
        $rechercheCatalogue->setProperties('affPhotos', false);
    }
    
    if (getValue('item') == 'affCatalogue') {
        Affichage::displayElement('tab_catalogue', true);
        $rechercheCatalogue->setProperties('affCatalogue', true);
        $option['selCatalogue'] = true;
    }
    
    if (getValue('item') == 'affTous') {
        if ($rechercheCatalogue instanceof Properties)
            $rechercheCatalogue->setProperties('affPhotos', false);
    } else if (getValue('item') == 'affFavoris') {
        if ($rechercheCatalogue instanceof Properties) {
            $statut = $rechercheCatalogue->getProperties('affFavoris');
            if (is_null($statut))
                $statut = true;
            else
                $statut = ! $statut;
            
            $rechercheCatalogue->setProperties('affFavoris', $statut);
        }
    } else if (getValue('item') == 'affSynonymes') {
        if ($rechercheCatalogue instanceof Properties) {
            $statut = $rechercheCatalogue->getProperties('affSynonymes');
            if (is_null($statut))
                $statut = false;
            else
                $statut = ! $statut;
            
            $rechercheCatalogue->setProperties('affSynonymes', $statut);
        }
    } else if (getValue('item') == 'affPhotos') {
        // On refait les memes requets mais en positionnant la demande avec la notion de photo
        
        if ($rechercheCatalogue instanceof Properties) {
            $rechercheCatalogue->setProperties('affPhotos', true);
        }
    } else if (getValue('item') == 'affSuggestions') {
        // On refait les memes requets mais en positionnant la demande avec la notion de photo
        
        if ($rechercheCatalogue instanceof Properties) {
            $rechercheCatalogue->setProperties('affSuggestions', true);
            Affichage::displayElement('id_barre_cl_rech_sugg', true);
        }
    }
    
    // selSuggestions
    
    if ($rechercheCatalogue instanceof Properties) {
        $rechercheCatalogue->saveObjectSession(RechercheCatalogue::OBJ_SESSION_RECHE_CAT);
        
        if ($rechercheCatalogue->getProperties('affPhotos'))
            $option['selPhoto'] = true;
        
        $statut = $rechercheCatalogue->getProperties('affSuggestions');
        if (! is_null($statut) && $statut)
            $option['selSuggestions'] = true;
        
        $statut = $rechercheCatalogue->getProperties('affSynonymes');
        if (is_null($statut) || $statut)
            $option['selSynonymes'] = true;
        
        $statut = $rechercheCatalogue->getProperties('affFavoris');
        if (! is_null($statut) && $statut)
            $option['selFavoris'] = true;
    }
    
    RechercheArticle::ajouteXmlBarreSelection($xml, $option);
    
    $htmlEngine = new GenXslt();
    $htmlEngine->XslHtml('application/xsl/recherche_article.xsl', $xml);
    
    $htmlEngine->echoHtml('id_barre_cl_rech_art');
    
    if (is_null(getValue('item')) || getValue('item') != 'affCatalogue')
        echo 'document.getElementById("btn_rechercher").click();';
} else if ('ajoutLigne' == getValue('action')) {
    if($valueCDE_DA['addObjet']=='CDE')
    {
        if(SqlCde::getNombreLigneCde($valueCDE_DA['numObjet'])->Trouve1()['NB_LIGNE']>998)
        {
            Affichage::messageJS(Trad('Le seuil de 999 lignes par commandes a été atteinte.'));
            exit();
        }

        $erreurNonBloquante = 0;
        $texteErreurNonBloquante = '';

        $qte = getValue('val');
        $r = SqlParam::rqGetControlOnQuantiteCa()->Trouve1();
        $param['QTE_CTRL'] = $r['CTRL_QTCA'] && $r['SAI_QTECA'] ? 1 : 0;
        if($param['QTE_CTRL']){
            if($r['BLO_QTEDA'] && ($qte == 0 || $qte  == '')){
                Affichage::messageJS(Trad('La quantité de la ligne de la commande doit être supérieure à 0.'));
                exit();
            }
            elseif(!$r['BLO_QTEDA'] && ($qte == 0 || $qte  == '')){
                $erreurNonBloquante = 1;
                $texteErreurNonBloquante .= '\n'.trad('La quantité est nulle.');
            }
        }

        /* Vérification PU*/
        $pu = getValue('px');
        $r = SqlParam::rqGetControlOnPrixUnitaireDa()->Trouve1();
        $param['PU_CTRL'] = $r['CTRL_PUCA'] && $r['SAI_PUCA'] ? 1 : 0;

        if($param['PU_CTRL']){
            if($r['BLO_PUCA'] && ($pu == 0 || $pu  == '')){
                Affichage::messageJS(Trad('Le prix unitaire de la ligne de la commande doit être supérieur à 0.'));
                exit();
            }
            elseif(!$r['BLO_PUDA'] && ($pu == 0 || $pu  == '')){
                $erreurNonBloquante = 1;
                $texteErreurNonBloquante .= '\n'.trad('Le prix unitaire est nul.');
            }
        }

        // Si présence d'erreur non bloquante, on demande confirmation avant de poursuivre
        if($erreurNonBloquante && getValue('confirm')!=1){
            echo 'if (confirm("'.trad('Présence d\'erreurs non bloquantes :').$texteErreurNonBloquante.'\n'.trad("Voulez-vous continuer ?").'")){ CallUrl("recherche_article.php?action=ajoutLigne&article='.getValue('article').'&fou='.getValue('fou').'&px='.getValue('px').'&numObjet'.getValue('numObjet').'&addObjet=DA&val='.getValue('val').'&confirm=1");}';
            exit();
        }
        
        $code_art = getValue('article');
        $noCde = getValue('numObjet');
        $info_article['QTE'] = getValue('val');

        // Récupération des informations concernant l'article
        $info_article = Article::getInfoOnArticle($code_art);
        
        $info_article['QTE'] = getValue('val');
        $info_article['PU'] = getValue('px');
        $info_article['CODE_FOU'] = getValue('fou');

        $infoCde = SqlCde::getInfoOnEnteteCDE($noCde)->Trouve1();
        $LAST_NO_PO = SqlCde::getMaxNoPOCA($noCde)->Trouve1()['LAST_NO_PO'];
        $idLigne = $LAST_NO_PO+1;

        $info_article['TX_REMISE'] = 0;
        $info_article['MNT_LIG'] = number_format($info_article['QTE'] * $info_article['PU'] * (1-$info_article['TX_REMISE']/100), 2, '.', '');

        /* initialisation avec données de la CDE */
        $info_article['CODE_STE']   = $infoCde['CODE_STE'];
        $info_article['CHIF_EXEC']  = $infoCde['CHIF_EXEC'];
        $info_article['TYP_DOC']    = $infoCde['TYP_DOC'];
        $info_article['CTRLIVR']    = $infoCde['CTR_LIV'];
        $info_article['MOD_TRS']    = $infoCde['MOD_TRS'];
        $info_article['TYPNMP']     = $infoCde['TYPNMP'];
        // TODO : ACD
        $info_article['ACD'] = '';

        /* initialisation Désignation sommaire en fonction de la langue de la DA si elle est différente de la langue BDD */
        if (Param::isMultiLanguages() && $infoCde['COD_LNG'] == Param::getLangueParDefault()){
            $lib = Article::getDesignatTrad($info_article['CODE_ART'], $_SESSION['Session_Langue']);
            if ($lib) {
                $info_article['DESIGN'] = $lib;                
            }
        }

        /* initialisation Référence fournisseur */
        $info_article['REF_FOUR'] = Article::getRefFou($code_art, $info_article['CODE_FOU']);

        /* initialisation contrôle qualité */
        $info_article['CTRL_BR'] = Article::getCtrlQualite($code_art, $info_article['CODE_FOU']);
        
        /* initialisation Axes imputations */
        $reglesInitImput = new Imputation();
        $info_article['SI'] = $reglesInitImput->getInitImputForCdeOrDA('SI', $code_art, $info_article['SSFAM'], 'CDE', $info_article['TYP_DOC'], $noCde);
        $info_article['CG'] = $reglesInitImput->getInitImputForCdeOrDA('CG', $code_art, $info_article['SSFAM'], 'CDE', $info_article['TYP_DOC'], $noCde, $info_article['SI']);
        $info_article['CDC'] = $reglesInitImput->getInitImputForCdeOrDA('CDC', $code_art, $info_article['SSFAM'], 'CDE', $info_article['TYP_DOC'], $noCde);
        $info_article['SCA'] = $reglesInitImput->getInitImputForCdeOrDA('SCA', $code_art, $info_article['SSFAM'], 'CDE', $info_article['TYP_DOC'], $noCde);
        if($info_article['CG'] != ''){ 
            $lot = SqlCg::getNumLot()->Trouve1();
            if (! is_numeric($lot['NUM_LOT'])){
                $lot['NUM_LOT'] = 0;
            }
            $info_article['LIBGES'] = SqlCg::rqGetInfoOnCG($info_article['SI'], $info_article['CG'], $info_article['CODE_STE'], $lot['NUM_LOT'])->Trouve1()['LIB_GES'];
            // TODO : ID_CG, ID_EXTERNE 
        }
        
        /* initialisation Site stock */
        if(BoolSql($info_article['STOCKE'])){
            if(Article::isArtStkForCtrLiv($infoCde['CTR_LIV'], $code_art)){
                $reqSqlCtrLiv = SqlCentreGene::getInfoOnCentre($infoCde['CTR_LIV'], 'L', $info_article['CODE_STE'])->Trouve1();
                $info_article['SITE_STK'] = $reqSqlCtrLiv['SITSTOCK'];
            }
        }     

        $DATELIVR = PanierLigne::getDateLivraisonMin($info_article['DELAI'], $_SESSION['Session_DureeTraitementDA'], 'sql');

        $info_article['DTELIVCON'] = $DATELIVR;
        
    }
    elseif($valueCDE_DA['addObjet']=='DA')
    {
        /* Vérification du nombre de lignes de la DA*/
        if(SqlDa::getNombreLigneDA($valueCDE_DA['numObjet'])->Trouve1()['NB_LIGNE']>998)
        {
            Affichage::messageJS(Trad('Le seuil de 999 lignes par demande d\'achat a été atteinte.'));
            exit();
        }

        $erreurNonBloquante = 0;
        $texteErreurNonBloquante = '';
        /* Vérification quantité*/
        $qte = getValue('val');
        $r = SqlParam::rqGetControlOnQuantiteDa()->Trouve1();
        $param['QTE_CTRL'] = $r['CTRL_QTDA'] && $r['SAI_QTEDA'] ? 1 : 0;

        if($param['QTE_CTRL']){
            if($r['BLO_QTEDA'] && ($qte == 0 || $qte  == '')){
                Affichage::messageJS(Trad('La quantité de la ligne de demande d\'achat doit être supérieure à 0.'));
                exit();
            }
            elseif(!$r['BLO_QTEDA'] && ($qte == 0 || $qte  == '')){
                $erreurNonBloquante = 1;
                $texteErreurNonBloquante .= '\n'.trad('La quantité est nulle.');
            }
        }
        
        /* Vérification PU*/
        $pu = getValue('px');
        $r = SqlParam::rqGetControlOnPrixUnitaireDa()->Trouve1();
        $param['PU_CTRL'] = $r['CTRL_PUDA'] && $r['SAI_PUDA'] ? 1 : 0;

        if($param['PU_CTRL']){
            if($r['BLO_PUDA'] && ($pu == 0 || $pu  == '')){
                Affichage::messageJS(Trad('Le prix unitaire de la ligne de demande d\'achat doit être supérieur à 0.'));
                exit();
            }
            elseif(!$r['BLO_PUDA'] && ($pu == 0 || $pu  == '')){
                $erreurNonBloquante = 1;
                $texteErreurNonBloquante .= '\n'.trad('Le prix unitaire est nul.');
            }
        }
        
        // Si présence d'erreur non bloquante, on demande confirmation avant de poursuivre
        if($erreurNonBloquante && getValue('confirm')!=1){
            echo 'if (confirm("'.trad('Présence d\'erreurs non bloquantes :').$texteErreurNonBloquante.'\n'.trad("Voulez-vous continuer ?").'")){ CallUrl("recherche_article.php?action=ajoutLigne&article='.getValue('article').'&fou='.getValue('fou').'&px='.getValue('px').'&numObjet'.getValue('numObjet').'&addObjet=DA&val='.getValue('val').'&confirm=1");}';
            exit();
        }

        $code_art = getValue('article');
        $no_da = getValue('numObjet');
        $info_article['QTE'] = getValue('val');

        // Récupération des informations concernant l'article
        $info_article = Article::getInfoOnArticle($code_art);

        $info_article['QTE'] = getValue('val');
        $info_article['PU'] = getValue('px');
        $info_article['CODE_FOU'] = getValue('fou');
        
        // Récupération des informations concernant la DA
        $info_da = SqlDa::getInfoOnEnteteDA($no_da)->Trouve1();
        $LAST_NO_PO = SqlDa::getMaxNoPODA($no_da)->Trouve1()['LAST_NO_PO'];
        $idLigne = $LAST_NO_PO+1;
        // TODO : faut-il aussi faire appel à rechAcdFouPrix ?                
        // TODO A initialiser : TEMPINIT, ID_CAT_ORI
        
        // Calcul montant ligne
        // TODO : TX_REMISE
        $info_article['TX_REMISE'] = 0;
        $info_article['MNT_LIG'] = number_format($info_article['QTE'] * $info_article['PU'] * (1-$info_article['TX_REMISE']/100), 2, '.', '');
        
        /* initialisation avec données de la DA */
        $info_article['CODE_STE'] = $info_da['CODE_STE'];
        $info_article['CHIF_EXEC'] = $info_da['CHIF_EXEC'];
        $info_article['TYP_DOC'] = $info_da['TYP_DOC'];
        $info_article['CTRLIVR'] = $info_da['CTR_LIV'];
        $info_article['MOD_TRS'] = $info_da['MOD_TRS'];
        $info_article['TYPNMP'] = $info_da['TYPNMP'];
        // TODO : ACD
        $info_article['ACD'] = '';

        /* initialisation Désignation sommaire en fonction de la langue de la DA si elle est différente de la langue BDD */
        if (Param::isMultiLanguages() && $info_da['COD_LNG'] == Param::getLangueParDefault()){
            $info_article['DESIGN'] = Article::getDesignatTrad($cod_art, $_SESSION['Session_Langue']);
        }

        /* initialisation Référence fournisseur */
        $info_article['REF_FOUR'] = Article::getRefFou($code_art, $info_article['CODE_FOU']);

        /* initialisation contrôle qualité */
        $info_article['CTRL_BR'] = Article::getCtrlQualite($code_art, $info_article['CODE_FOU']);
        
        /* initialisation Axes imputations */
        $reglesInitImput = new Imputation();
        $info_article['SI'] = $reglesInitImput->getInitImputForCdeOrDA('SI', $code_art, $article['SSFAM'], 'DA', $info_article['TYP_DOC'], $no_da);
        $info_article['CG'] = $reglesInitImput->getInitImputForCdeOrDA('CG', $code_art, $article['SSFAM'], 'DA', $info_article['TYP_DOC'], $no_da, $info_article['SI']);
        $info_article['CDC'] = $reglesInitImput->getInitImputForCdeOrDA('CDC', $code_art, $article['SSFAM'], 'DA', $info_article['TYP_DOC'], $no_da);
        $info_article['SCA'] = $reglesInitImput->getInitImputForCdeOrDA('SCA', $code_art, $article['SSFAM'], 'DA', $info_article['TYP_DOC'], $no_da);
        if($info_article['CG'] != ''){ 
            $lot = SqlCg::getNumLot()->Trouve1();
            if (! is_numeric($lot['NUM_LOT'])){
                $lot['NUM_LOT'] = 0;
            }
            $info_article['LIBGES'] = SqlCg::rqGetInfoOnCG($info_article['SI'], $info_article['CG'], $info_article['CODE_STE'], $lot['NUM_LOT'])->Trouve1()['LIB_GES'];
            // TODO : ID_CG, ID_EXTERNE 
        }
        
        /* initialisation Site stock */
        if(BoolSql($Articles['STOCKE'])){
            if(Article::isArtStkForCtrLiv($info_da['CTR_LIV'], $code_art)){
                $reqSqlCtrLiv = SqlCentreGene::getInfoOnCentre($info_da['CTR_LIV'], 'L', $info_article['CODE_STE'])->Trouve1();
                $info_article['SITE_STK'] = $reqSqlCtrLiv['SITSTOCK'];
            }
        }     
        
        /* CALCUL DATE DE LIVRAISON */
        $paramForDateLiv = [
            'DTELIVSOU'    => $info_article['DTE_LIV'],
            'DTE_LIV'    => $info_article['DTE_LIV'],
            'CODE_ART'  => $code_art,
            'ACD'     => $info_article['ACD'],
        ];
        $info_article['DTE_LIV'] = Article::getDateLivraisonDA($paramForDateLiv);


        //création ligne DA 
        $retourInsert = SqlDa::insertLigneDA($no_da, $idLigne, $info_article);
        
    }
    exit();
} else if ('accueil' == getValue('action')) {
    Affichage::scroolPage(false);
    /**
     * Mise en place d'un cache de session permettant de stocker les id de serialisation pour la gestion du comparateur
     */
    $rechercheCatalogue = new RechercheCatalogue();
    $rechercheCatalogue->setContexte(RechercheCatalogue::CNT_PANIER);
    $PanierEntete = new PanierEntete();
    $PanierEntete->getEntetePanier($_SESSION['id_panier'], $_SESSION['id_user']);
    // SPEC 4100 remplacer le centre émetteur de la session par le centre émetteur du panier
    $rechercheCatalogue->setEMET_CTR($PanierEntete->getCENTRE_EMETTEUR());
    $rechercheCatalogue->setLIV_CTR($PanierEntete->getLIV_CTR());
    
    $rechercheCatalogue->saveObjectSession(RechercheCatalogue::OBJ_SESSION_RECHE_CAT);
    $rechercheCatalogue->initialise($valueCDE_DA);

    if($valueCDE_DA)
    {
        $filAriane = '';
        foreach($_SESSION['ariane'] as $ariane)
        {
            if(\is_array($ariane))
            {
                $filAriane .= '<div class="onglet txctr dib" onclick="location.href =\''.$ariane['path'].'\';"><div class="w100">'.$ariane['titre'].'</div></div>';
            }
        }
        
        $content = '<h1>'.($valueCDE_DA['addObjet']=='CDE'? trad('Commande'):trad('Demande d\'achat')).'</h1>
                    <div class="filet_inferieur_skin liste_onglet">'.$filAriane.'<div class="onglet txctr dib"><div class="w100 select">'.Trad('Recherche article').'</div></div></div>
                    <h2>Modification '.($valueCDE_DA['addObjet']=='CDE'? trad('commande'):trad('demande d\'achat')).' '.$valueCDE_DA['numObjet'].'</h2>
                    ';
        
        Affichage::innerHTMLPointeur('divRetoursCDE_DA', $content);
    }
	// dossier 29008
	// Suppression de l'affichage des catalogues
	$r = SqlParam::rqGetParamParavrac('OXAPROC', 'RECH_CATA_OUVERT_PAR_DEFAUT')->Trouve1();
    if(isset($r['LIB01PARV'] ) && $r['LIB01PARV'] == 'O')
    {
		Affichage::displayElement('tab_catalogue', true);
		echo "document.getElementById('idaffCatalogue').classList.add('select');";
    }else
		Affichage::displayElement('tab_catalogue', false);
    
    // AFFICHAGE DE LA ZONE zone_liste_selection_caracteristique
    if ('catalogueRayon' != getValue('typeRecherche'))
    {
        // Si la recherche par caractéristique est activée
        if (Param::isSearchByCaract()) 
        {
            $array_xml_liste_caracteristique = & Catalogue::buildXmlSearchByCaracteristique($_POST);

            if (is_array($array_xml_liste_caracteristique) && array_key_exists('Ligne', $array_xml_liste_caracteristique))
            {
                echo 'getObj("zone_liste_selection_caracteristique").innerHTML="', HttpReplacePointeur($rechercheCatalogue->htmlEngine->XslHtml('application/xsl/liste_caracteristiques_recherche.xsl', $array_xml_liste_caracteristique)) . '";';
            }
        }
    }
} else {
    $contenu_recherche_catalogue = '';
    $rechercheCatalogue = Properties::getObjectSession(RechercheCatalogue::OBJ_SESSION_RECHE_CAT);
    
    if ('autocomplete' != getValue('action'))
        Affichage::innerHTML('id_div_recherche_avancee', '');
    if (stripos(getValue('OBJECT'), 'SUP_CMP_') === 0) {
        if ($articleSelect = ArticleSelect::restoreSession()) {
            $object = getValue('OBJECT');
            $element = explode('_', $object);
            if ($articleSelect->set(getValue($object), null, $element[2], null, '')) {
                echo 'try{document.frm_saisie_panier.elements["', getValue($object), '"].checked = false;} catch (e){}';
                echo $articleSelect->afficheInfo();
            }
        }
    } else if (getValue('OBJECT') == 'SUP_CMP') {
        if ($articleSelect = ArticleSelect::restoreSession()) {
            foreach ($articleSelect->getCache() as $data)
                echo 'try{document.frm_saisie_panier.elements["', $data['name'], '"].checked = false;} catch (e){}';
            
            $articleSelect->erase();
            echo $articleSelect->afficheInfo();
        }
    } else if (stripos(getValue('OBJECT'), 'COMPARATEURCHECKBOX') === 0) {
        $object = getValue('OBJECT');
        if ($articleSelect = ArticleSelect::restoreSession()) {
            $element = explode('|', $object);
            if (! $articleSelect->set($object, $element[1], $element[2], $element[3], getValue($object)))
                echo 'document.frm_saisie_panier.elements["', $object, '"].checked = false;';
            else
                echo $articleSelect->afficheInfo();
        }
    }    // Si l'utilisateur clique sur un rayon de niveau 1 alors on affiche le panel contenant les sous-rayon
    elseif ('panelSousRayon' == getValue('action')) {
        $rechercheArticle = new RechercheArticle($valueCDE_DA);
        $rechercheArticle->setClassContexte($rechercheCatalogue);
        // On affiche les sous-rayons du rayon
        $panelSousRayon = $rechercheArticle->buildPanelSousRayon(getValue('code_rayon'));
        Affichage::innerHTMLPointeur('id_contenu_rayon', $rechercheCatalogue->htmlEngine->XslHtml('application/xsl/template_panel_sous_rayon.xsl', $panelSousRayon));
        
        // Pour les sous-rayons on active l'effet de slider permettant le défilement droite et gauche
        // echo $rechercheArticle->getSlider('div_slider_' . getValue('code_rayon'), 'btn_left_div_slider_' . getValue('code_rayon'), 'btn_right_div_slider_' . getValue('code_rayon'), trad('<< Sous-rayons précédents'), trad('Sous-rayons suivants >> '));
    }    // Si l'utilisateur lance une recherche article
    elseif ('recherche' == getValue('action')) {
        $PanierEntete = new PanierEntete();        
        $PanierEntete->getEntetePanier($_SESSION['id_panier'], $_SESSION['id_user']);

        Supervision::setHeureDebut();
        Supervision::setIdUser($_SESSION['Session_Login']);
        Supervision::setTypeTraitement('RTL');         //Recherche « Texte Libre »
        // SPEC 4100 remplacer le centre émetteur de la session par le centre émetteur du panier
        Supervision::setCodeCtrEmetteur($PanierEntete->getCENTRE_EMETTEUR());
        Supervision::setTexteRecherche(getValue('texte_recherche'));
        Supervision::setRefObjet($_SESSION['id_panier']);
        Supervision::setCodeSociete($_SESSION['Session_SocUsr']);
        Supervision::setCodeSectionImputation($_SESSION['Session_SectionImputation']??'');
        
        if (is_null($rechercheCatalogue)) {
            $rechercheCatalogue = new RechercheCatalogue();
            $rechercheCatalogue->setContexte(RechercheCatalogue::CNT_PANIER);
            
            // SPEC 4100 remplacer le centre émetteur de la session par le centre émetteur du panier
            $rechercheCatalogue->setEMET_CTR($PanierEntete->getCENTRE_EMETTEUR());
            $rechercheCatalogue->setLIV_CTR($PanierEntete->getLIV_CTR());
            
            $rechercheCatalogue->saveObjectSession(RechercheCatalogue::OBJ_SESSION_RECHE_CAT);
            $rechercheCatalogue->initialise($valueCDE_DA);
        }
        
        $rechercheIntuition = new RechercheArticlesIntuition(); // Objet gérant la recherche
        $rechercheIntuition->setCentreEmetteur($rechercheCatalogue->getEMET_CTR());
        $rechercheIntuition->setCentreLivraison($rechercheCatalogue->getLIV_CTR());
        $rechercheIntuition->setClassContexte($rechercheCatalogue);
        
        Supervision::setCodeCtrLivraison($rechercheCatalogue->getLIV_CTR()); //code livraison SUPERVISION
        
        $rechercheArticle = new RechercheArticle($valueCDE_DA); // Objet gérant l'affichage du résultat de la recherche
        $rechercheArticle->setClassContexte($rechercheCatalogue);

        // Debut de la recherche
        $debutRecherche = microtime(true);
        $ID_Recherche = uniqid();
        Track::logAudit('RECHERCHE' . '|' . $ID_Recherche, 'LANCEMENT RECHERCHE');
        
        /**
         * le flag initialisation permet d'éviter des traitements inutiles suite à une recherche
         * Par exemple lors des changement de page les panels n'ont pas besoin d'être recalculés
         * Si initialisation == 1 : Alors cela signifie qu'il s'agit d'une recherche déclenchée par un élément autre que la pagination
         * Si initialisation == 0 : Alors cela signifie qu'il s'agit d'une recherche a effectuée suite à un changement de page
         *
         *
         * Le flag nouvelleRecherche permet
         */
        // Si l'utilisateur effectue une recherche de type avancée alors on appelle le programme d'initialisation de la page d'accueil de recherche
        $liste_type_article = array();
        
        $liste_catalogues_art = array(); // Tableau qui contiendra les catalogues privés sélectionnés par l'utilisateur
        $liste_catalogues_sf = array(); // Tableau qui contiendra les catalogues sur sous-famille sélectionnés par l'utilisateur
        $liste_catalogues_gen = array(); // Tableau qui contiendra les catalogues d'articles génériques sélectionnés par l'utilisateur
        $liste_catalogues_panel = array(); // Tableau qui contiendra les filstres activés au niveau du panel de recherche
        $liste_caract_info_article = array(); // Tableau qui contiendra les caractéristiques informatives sélectionnées pas l'utilisateur
        $isSelectionCatalogue = false;
        $rechercheAvancee=false;
        
        if ('avancee' == getValue('typeRecherche') || 'true' == getValue('avancee')) {
            
            $rechercheAvancee = true;
            
            // Track::logAudit('RECHERCHE'.'|'.$ID_Recherche,'AVANCEE','CRITERES',getValue('texte_recherche').'|'.getValue('cod_fourn').'|'.getValue('cod_ref_frs').'|'.getValue('cod_fam').'|'.getValue('cod_sfam').'|'.getValue('cod_fab').'|'.getValue('cod_gam') );
            Track::logAudit('RECHERCHE' . '|' . $ID_Recherche, 'AVANCEE', 'CRITERES', getValue('texte_recherche_avance'));
            Track::logAudit('RECHERCHE' . '|' . $ID_Recherche, 'AVANCEE', 'FOURNISSEUR', getValue('cod_fourn'));
            Track::logAudit('RECHERCHE' . '|' . $ID_Recherche, 'AVANCEE', 'REF_FRS', getValue('cod_ref_frs'));
            Track::logAudit('RECHERCHE' . '|' . $ID_Recherche, 'AVANCEE', 'FAMILLE', getValue('cod_fam'));
            Track::logAudit('RECHERCHE' . '|' . $ID_Recherche, 'AVANCEE', 'SSFAMILLE', getValue('cod_sfam'));
            Track::logAudit('RECHERCHE' . '|' . $ID_Recherche, 'AVANCEE', 'FABRICANT', getValue('cod_fab'));
            Track::logAudit('RECHERCHE' . '|' . $ID_Recherche, 'AVANCEE', 'GAMME', getValue('cod_gam'));
            
            $_SESSION['CACHE_CATALOGUE'] = serializeSecure(array());
            
            if (1 == getValue('initialisation')) {

                Affichage::innerHTMLPointeur('men_gene', $rechercheArticle->buildPageRechercheArticle($rechercheCatalogue));
                
                if (Param::isUserRechercheIncrementale())
                    echo RechercheArticle::activeAutocomplete();
                
                // Lors de la recherche avancée on sauvegarde les critères de recherche saisis sur l'écran de recherche avancé mais qui ne figure plus sur l'écran de
                // résultat de recherche
                $_SESSION['RECH_AVANCE_TXT'] = getValue('texte_recherche_avance');
                $_SESSION['RECH_AVANCE_TXT_REF'] = getValue('texte_recherche_ref');
                $_SESSION['RECH_AVANCE_FRS'] = getValue('cod_fourn');
                $_SESSION['RECH_AVANCE_REF_FRS'] = getValue('cod_ref_frs');
                $_SESSION['RECH_AVANCE_FAM'] = getValue('cod_fam');
                $_SESSION['RECH_AVANCE_SFAM'] = getValue('cod_sfam');
                // Dossier 23843 : l'écran nous envoie le code fabricant, on veut son libellé
                $_SESSION['RECH_AVANCE_FAB'] = getValue('lib_fab');
                // Dossier 23843 : l'écran nous envoie le code gamme, on veut son libellé
                $_SESSION['RECH_AVANCE_GAM'] = getValue('lib_gam');
            }
            
            $page = getValue('page');
            $typePagination = getValue('typePagination');

            
            $pageCatalogue	 = 1;
            $pageGenerique	 = 1;
            $pageSousFamille = 1;
            $pageCde		 = 1;
            if (is_null($page)) $page = 1;
            if($typePagination=='catalogue')
            {
                $pageCatalogue = $page;
            }
            elseif($typePagination=='generique')
            {
                $pageGenerique = $page;
            }
            elseif($typePagination=='sousFamille')
            {
                $pageSousFamille = $page;
            }
            elseif($typePagination=='histcde')
            {
                $pageCde = $page;
            }
            
            // Gestion du filtre par combien si present dans la page alors on prend la valeur de ce dernier sinon paramétrage de session
            $filtre_combien = getValue('filtre_combien');
            if (is_null($filtre_combien))
                $filtre_combien = $_SESSION['Session_NbLigneRecherche'];
            
            $texte_recherche = $_SESSION['RECH_AVANCE_TXT'];
            $texte_recherche_ref = $_SESSION['RECH_AVANCE_TXT_REF'];
            $rayon = '';
            $mode_comment = 'TOUS';
            $type_tri = 'globalrelevance';
            
            $liste_cod_fournisseurs = array(
                $_SESSION['RECH_AVANCE_FRS']
            );
            $liste_ref_fournisseur = array(
                $_SESSION['RECH_AVANCE_REF_FRS']
            );
            $liste_familles = array(
                $_SESSION['RECH_AVANCE_FAM']
            );
            $liste_sous_familles = array(
                $_SESSION['RECH_AVANCE_SFAM']
            );
            
            $liste_fabricants = array(
                $_SESSION['RECH_AVANCE_FAB']
            );
            
            $liste_gammes = array(
                $_SESSION['RECH_AVANCE_GAM']
            );
            $liste_prix = array();
            $liste_caract_select_article = array();
            
            foreach ($_POST as $key => & $value){
                    // Pour les filtres posés sur des Caractéristiques Produit
                if (0 === stripos($key, 'CARACT_') && BoolSql($value)) {
                    $id_caract = explode('_', $key);
                    $liste_caract_info_article[] = $id_caract[1];
                }
                
                if (false !== stripos($key, 'filtre_avance_CARACT_')) {
                    if(BoolSql($value))
                    {
                        $id_caract = explode('_', $key);
                        $liste_caract_info_article[] = $id_caract[3];
                    }else{
                        unset($_POST[$key]);
                    }
                }
            }
            
            if($valueCDE_DA)
            {
                $filAriane = '';
                foreach($_SESSION['ariane'] as $ariane)
                {
                    if(\is_array($ariane))
                    {
                        $filAriane .= '<div class="onglet txctr dib" onclick="location.href =\''.$ariane['path'].'\';"><div class="w100">'.$ariane['titre'].'</div></div>';
                    }
                }
                
                $content = '<h1>'.($valueCDE_DA['addObjet']=='CDE'? trad('Commande'):trad('Demande d\'achat')).'</h1>
                    <div class="filet_inferieur_skin liste_onglet">'.$filAriane.'<div class="onglet txctr dib"><div class="w100 select">'.Trad('Recherche article').'</div></div></div>
                    <h2>Modification '.($valueCDE_DA['addObjet']=='CDE'? trad('commande'):trad('demande d\'achat')).' '.$valueCDE_DA['numObjet'].'</h2>
                    ';
                
                Affichage::innerHTMLPointeur('divRetoursCDE_DA', $content);
            }
        }        
        // sinon on est sur l'ecran de recherche standard (avec libellé, rayons, catalogues.... )
        else {
            /**
             * Fonctionnement de la recherche précédente :
             * Pour la fonction de recherche précédente, on utilise un tableau sous la forme d'une pile $_SESSION['PILE_RECH_PRECEDENTE'] : dernier entrée => premier sorti.
             * Chaque élement de la pile est un tableau contenant tous les paramètres de la recherche en question.
             * Ainsi pour effectuer une recherche précédente, il suffit de prendre le tableau en haut de la pile et d'intialiser
             * le tableau $_POST des paramètres réçus par le tableau de paramètres de la pile.
             *
             * Attention : Lors de la première recherche précédente, il ne faut pas prendre l'élement du haut de la pile mais celui juste après en position 2.
             * En effet, suite à une recherche on enregsitre les paramètres en haut de la pile, en faisant recherche précédente la première fois alors si on
             * prend l'élément en haut de la pile on retombe sur la même recherche, il faut donc prendre la précédente.
             */
            Track::logAudit('RECHERCHE' . '|' . $ID_Recherche, 'SIMPLE', 'CRITERES', getValue('texte_recherche') . '|' . getValue('filtre_rayon') . '|' . getValue('filtre_comment') . '|' . getValue('filtre_rayon_panel') . '|' . getValue('page') . '|' . getValue('filtre_combien'));
            
            // Gestion de la fonctionnalité de type recherche précédente
            // Lorsque la recherche est affinée via le panel des filtres alors on place au dessus de la pile les critères de recherche précédemment utilisés
            if (1 == getValue('nouvelleRecherche')) {
                Track::logAudit('RECHERCHE' . '|' . $ID_Recherche, 'Nouvelle Recherche', '', '', '1');
                if (! isset($_POST['type_tri']))
                    $_POST['type_tri'] = Param::getDefaultTriArticleUser();
                
                $pile_recherche = array(); // On vide la pile correspond aux recherche précédente
                array_push($pile_recherche, getValueAll()); // Puis on enregistre les paramètres en bas de la pile
                $_SESSION['PILE_RECH_PRECEDENTE'] = serializeSecure($pile_recherche); // On sauvegarde la pile dans la session
                $_SESSION['PILE_RECH_POINTEUR'] = false; // On initialise le flag indiquant si le pointeur est positionné sur la recherche précédente à false.
                $_SESSION['PILE_DERNIER_ELEMENT'] = true; // On initialise le flag indiquant si le tableau de paramètre est correspond au bas de la pile à vrai
            } elseif (1 == getValue('filtrePanel')) { // Si l'utilisateur effectue une recherche via le panel de navigation
                Track::logAudit('RECHERCHE' . '|' . $ID_Recherche, 'filtrePanel');
                // $_GET['typeRecherche'] = 'catalogue';
                // On ajoute à la pile la reherche effectuée
                $pile_recherche = unserializeSecure($_SESSION['PILE_RECH_PRECEDENTE']); // On récupère la pile
                array_push($pile_recherche, getValueAll()); // On ajoute le tableau contenant la nouvelle recherche
                $_SESSION['PILE_RECH_PRECEDENTE'] = serializeSecure($pile_recherche); // On réenregistre la pile
                
                $_SESSION['PILE_RECH_POINTEUR'] = false; // Alors on indique que le dernier élément de la pile ne corresponda pas à la recherche précédente
                $_SESSION['PILE_DERNIER_ELEMENT'] = false; // Suite à cette nouvelle recherche, il y a plus d'un tableau dans la pile
            }            // Lorsque l'utilisateur appelle la recherche précédente alors on retire de la pile les paramètres de la dernière recherche effectuée
            elseif (1 == getValue('recherchePrecedente')) {
                Track::logAudit('RECHERCHE' . '|' . $ID_Recherche, 'recherchePrecedente');
                $pile_recherche = unserializeSecure($_SESSION['PILE_RECH_PRECEDENTE']); // On récupère la pile
                
                if (! $_SESSION['PILE_RECH_POINTEUR']) { // Si le flag indiquant si on a déjà commencé une recherche précédente est à false
                    array_pop($pile_recherche); // Alors on retire le premier élément de la pile
                    $_SESSION['PILE_RECH_POINTEUR'] = true; // et le flag passe à vrai
                }
                
                if (count($pile_recherche) > 1) { // Si il reste au moins 2 éléménts dans la pile
                    $_POST = array_pop($pile_recherche); // Alors on récupère les paramètres de recherche en haut de la pile
                    $_SESSION['PILE_DERNIER_ELEMENT'] = false; // Le flag indiquant si on a atteint le bas de la pile à faux
                } else {
                    $_POST = $pile_recherche[0]; // S'il n'y a plus qu'un élément
                    $_SESSION['PILE_DERNIER_ELEMENT'] = true; // Le flag indiquant si on a atteint le bas de la pile à vrai
                }
                $_SESSION['PILE_RECH_PRECEDENTE'] = serializeSecure($pile_recherche); // On sauvegarde la pile
            }
            
            $page = getValue('page');
            $typePagination = getValue('typePagination')??'';
            
            
            $pageCatalogue	 = 1;
            $pageGenerique	 = 1;
            $pageSousFamille = 1;
            $pageCde		 = 1;
            if (is_null($page)) $page = 1;
            if($typePagination=='catalogue')
            {
                $pageCatalogue = $page;
            }
            elseif($typePagination=='generique')
            {
                $pageGenerique = $page;
            }
            elseif($typePagination=='sousFamille')
            {
                $pageSousFamille = $page;
            }
            elseif($typePagination=='histcde')
            {
                $pageCde = $page;
            }
            
            $filtre_combien = getValue('filtre_combien');
            $texte_recherche = getValue('texte_recherche');
            $zone_geo_desactive = getValue('filtre_zone_geo_desactive');
            $texte_recherche_ref = getValue('texte_recherche_ref');
            $rayon = getValue('filtre_rayon_panel') != '' ? getValue('filtre_rayon_panel') : getValue('filtre_rayon');
            $mode_comment = getValue('filtre_comment');
            $type_tri = is_null(getValue('type_tri')) ? 'globalrelevance' : getValue('type_tri');
            $liste_cod_fournisseurs = array();
            $liste_ref_fournisseur = array();
            $liste_familles = array();
            $liste_sous_familles = array();
            $liste_fabricants = array();
            $liste_gammes = array();
            $liste_prix = array();
            $liste_caract_select_article = array();
            $liste_type_article = array();

            $filtre_ref = [
                'REF_FAB' => getValue('filtre_ref_fab'),
                'REF_FOURN' => getValue('filtre_ref_fourn'),
                'COD_ART' => getValue('filtre_COD_ART'),
            ];
            
            $rechercheParRefActive = false;
            if($filtre_ref['REF_FAB'] != '' || $filtre_ref['REF_FOURN'] != '' || $filtre_ref['COD_ART'] != '' )
            {
                $rechercheParRefActive = true;
            }
            
            if($zone_geo_desactive=='TRUE'){
                $zone_geo_desactive = true;
            }
            else{
                $zone_geo_desactive = false;
            }

            /*
             * danger : Attention $_POST sans filtre
             */
            foreach ($_POST as $key => & $value)
                if (0 === stripos($key, 'panel_') && BoolSql($value)) {
                    $valeur_element = getValue('value_' . $key);
                    $info_element_panel = explode('_', $key);
                    
                    switch ($info_element_panel[1]) {
                        case 'frs':
                            $liste_cod_fournisseurs[] = $valeur_element;
                            break;
                        
                        case 'sfam':
                            $liste_sous_familles[] = $valeur_element;
                            break;
                        
                        case 'catalogue':
                            $liste_catalogues_panel[] = $valeur_element;
                            break;
                        
                        case 'gamme':
                            $liste_gammes[] = $valeur_element;
                            break;
                        
                        case 'fabricant':
                            $liste_fabricants[] = $valeur_element;
                            break;
                        
                        case 'fourchette':
                            $intervalle_prix = explode('|', $valeur_element);
                            $liste_prix[] = array(
                                'prix_min' => $intervalle_prix[0],
                                'prix_max' => $intervalle_prix[1]
                            );
                            break;
                        
                        case 'typearticle':
                            $liste_type_article[] = $valeur_element;
                            break;
                        
                        default:
                            $liste_caract_select_article[] = $info_element_panel[1] . ':' . $valeur_element;
                            break;
                    }
                }                // Pour les filtres posés sur les catalogues privés
                elseif (false !== stripos($key, 'CAT_ART') && BoolSql($value)) {
                    $id_cat = explode('_', $key);
                    $liste_catalogues_art[] = $id_cat[2];
                    Supervision::setCatalogue($liste_catalogues_art); // SUPERVISION
                    $isSelectionCatalogue = true;
                }                // Pour les filtres posés sur les catalogues sous-famille
                elseif (false !== stripos($key, 'CAT_SF') && BoolSql($value)) {
                    $id_cat = explode('_', $key);
                    $liste_catalogues_sf[] = $id_cat[2];
                    $isSelectionCatalogue = true;
                }                // Pour les filtres posés sur les catalogues d'articles génériques
                elseif (false !== stripos($key, 'CAT_AG') && BoolSql($value)) {
                    $id_cat = explode('_', $key);
                    $liste_catalogues_gen[] = $id_cat[2];
                    $isSelectionCatalogue = true;
                }                // Pour les filtres posés sur les types d'article
                elseif (false !== stripos($key, 'CARACT_') && BoolSql($value)) {
                    $id_caract = explode('_', $key);
                    $liste_caract_info_article[] = $id_caract[1];
                }
  
            // enregistrement au niveau des critères du panel
            if (is_array($liste_cod_fournisseurs) && count($liste_cod_fournisseurs) > 0)
                Track::logAudit('RECHERCHE' . '|' . $ID_Recherche, 'Liste code fournisseurs', '', $liste_cod_fournisseurs, '', count($liste_cod_fournisseurs));
            if (is_array($liste_sous_familles) && count($liste_sous_familles) > 0)
                Track::logAudit('RECHERCHE' . '|' . $ID_Recherche, 'Liste sous familles', '', $liste_sous_familles, '', count($liste_sous_familles));
            if (is_array($liste_catalogues_panel) && count($liste_catalogues_panel) > 0)
                Track::logAudit('RECHERCHE' . '|' . $ID_Recherche, 'Liste catalogue panel', '', $liste_catalogues_panel, '', count($liste_catalogues_panel));
            if (is_array($liste_gammes) && count($liste_gammes) > 0)
                Track::logAudit('RECHERCHE' . '|' . $ID_Recherche, 'liste gamme', '', $liste_gammes, '', count($liste_gammes));
            if (is_array($liste_fabricants) && count($liste_fabricants) > 0)
                Track::logAudit('RECHERCHE' . '|' . $ID_Recherche, 'liste fabricants', '', $liste_fabricants, '', count($liste_fabricants));
            if (is_array($liste_prix) && count($liste_prix) > 0)
                Track::logAudit('RECHERCHE' . '|' . $ID_Recherche, 'liste prix', '', $liste_prix, '', count($liste_prix));
            if (is_array($liste_type_article) && count($liste_type_article) > 0)
                Track::logAudit('RECHERCHE' . '|' . $ID_Recherche, 'liste type article', '', $liste_type_article, '', count($liste_type_article));
            if (is_array($liste_caract_select_article) && count($liste_caract_select_article) > 0)
                Track::logAudit('RECHERCHE' . '|' . $ID_Recherche, 'liste caract select article', '', $liste_caract_select_article, '', count($liste_caract_select_article));
        }
        
        // enregistrement des rayons et des catalogues sur lesquels sont fait la recherche
        if ($rayon != '')
            Track::logAudit('RECHERCHE' . '|' . $ID_Recherche, 'Rayon', '', $rayon);
        if (is_array($liste_catalogues_art) && count($liste_catalogues_art) > 0)
            Track::logAudit('RECHERCHE' . '|' . $ID_Recherche, 'Liste catalogue', 'CAT_ART', $liste_catalogues_art, '', count($liste_catalogues_art));
        if (is_array($liste_catalogues_sf) && count($liste_catalogues_sf) > 0)
            Track::logAudit('RECHERCHE' . '|' . $ID_Recherche, 'Liste catalogue', 'CAT_SF', $liste_catalogues_sf, '', count($liste_catalogues_sf));
        if (is_array($liste_catalogues_gen) && count($liste_catalogues_gen) > 0)
            Track::logAudit('RECHERCHE' . '|' . $ID_Recherche, 'Liste catalogue', 'CAT_AG', $liste_catalogues_gen, '', count($liste_catalogues_gen));
        if (is_array($liste_caract_info_article) && count($liste_caract_info_article) > 0)
            Track::logAudit('RECHERCHE' . '|' . $ID_Recherche, 'Liste catalogue', 'CARACT', $liste_caract_info_article, '', count($liste_caract_info_article));
        
        // AFFICHAGE DE LA ZONE zone_liste_selection_catalogue (Liste des catalogues disponible pour l'utilisateur)
        // Si la recherche catalogue est activée
        if (Param::isSearchByCatalogue())
            if ('catalogueRayon' == getValue('typeRecherche') || 'catalogueRayonDirect' == getValue('typeRecherche')) {
                $array_xml_liste_catalogue = & Catalogue::buildXmlSearchByCatalogue($rechercheCatalogue, $_SESSION['Session_Login'], $rechercheIntuition->getCentreLivraison(), $rechercheIntuition->getCentreEmetteur(), $_POST);
                
                if (is_array($array_xml_liste_catalogue) && array_key_exists('Ligne', $array_xml_liste_catalogue)) {
                    $array_xml_liste_catalogue['affiche'] = $rechercheCatalogue->affiche;
                    $html_liste_catalogue = & $rechercheCatalogue->htmlEngine->XslHtml('application/xsl/liste_catalogues_user.xsl', $array_xml_liste_catalogue);
                    echo 'getObj("zone_liste_selection_catalogue").innerHTML="', HttpReplacePointeur($html_liste_catalogue), '";';
                
                /**
                 * SPEC 3853
                 * $html_deroulante_catalogue = $rechercheCatalogue->htmlEngine->XslHtml('application/xsl/liste_deroulante_catalogues.xsl', $array_xml_liste_catalogue);
                 * echo 'getObj("liste_catalogues").innerHTML="', HttpReplacePointeur($html_deroulante_catalogue), '";';
                 */
                }
            }
        
        // remise à 0 du nombre d'article trouvé .
        $nombre_total_article_trouve = 0;
        // Pour la partie d'enregistrement des LogAudit, on gére
        $nombre_article_catalogue_trouve = 0;
        $nombre_article_generique_trouve = 0;
        $nombre_article_sousFamille_trouve = 0;
        $liste_rayons_trouve = null;
        
        $liste_articles_commandes = null;
        
        if (is_null($page))
            $page = 1;
        // //*****************PARTIE Articles Catalogues ***********////
        
        if ('catalogue' == getValue('typeRecherche') || // Pagination catalogue
                                                          // 'catalogueRayon' == getValue('typeRecherche') || Mis en commentaire car là, on vise une case à cocher des catalogues donc ON DOIT LAISSER LA LISTE
        'catalogueRayonDirect' == getValue('typeRecherche')) {
            Affichage::displayElement('tab_catalogue', false);
            echo "try{document.getElementById('idaffCatalogue').classList.remove('select')}catch (e){};";
        }
        $ongletsXSL = array(
            'onglets' => array()
        );
        //ADD $rechercheAvancee
        if (((count($liste_catalogues_sf) == 0 && count($liste_catalogues_gen) == 0) || count($liste_catalogues_art) > 0) && ('globale' == getValue('etendueRecherche') || 'catalogue' == getValue('typeRecherche') || // Pagination catalogue
            'catalogueRayon' == getValue('typeRecherche') || 'catalogueRayonDirect' == getValue('typeRecherche') || 'avancee' == getValue('typeRecherche'))) {
            // Spec 2802 - Activité utilisateur
            $debutRechercheArticlesCatalogues = microtime(true);
            // Track::logAudit("RECHERCHE"."|".$ID_Recherche,"Début recherche articles catalogues");
            
            if($valueCDE_DA && $valueCDE_DA['addObjet']=='CDE')
            {
                $liste_cod_fournisseurs = [SqlCde::getFournisseurCaEntet($valueCDE_DA['numObjet'])->Trouve1()['CODE_FOU']];
            }

            $liste_articles = & $rechercheIntuition->rechercheArtCatalogue(true, $pageCatalogue, $filtre_combien, $texte_recherche, $rayon, $mode_comment, $type_tri, $liste_catalogues_art, $liste_catalogues_panel, $liste_caract_info_article, $liste_cod_fournisseurs, $liste_ref_fournisseur, $liste_familles, $liste_sous_familles, $liste_fabricants, $liste_gammes, $liste_prix, $liste_caract_select_article, '', array(), $liste_type_article, $isSelectionCatalogue, $texte_recherche_ref, $zone_geo_desactive, $filtre_ref);
            
            $nombre_article_catalogue_trouve += $rechercheIntuition->getNbArtTrouves();
            $nombre_total_article_trouve += $nombre_article_catalogue_trouve;
            
            $liste_rayons_dans_catalogue = null;
            $liste_concepts = null;
            if ($nombre_article_catalogue_trouve > 0) 
            {
                // Extraction de la liste des rayons exploite par la requete precedente
                
                if (is_array($rechercheIntuition->panels)) {
                    if (array_key_exists('rayon', $rechercheIntuition->panels)) {
                        if ('' != $rechercheIntuition->panels['rayon'])
                            foreach (explode(RechercheArticlesIntuition::separateur_a(), $rechercheIntuition->panels['rayon']) as $element) {
                                list ($code_rayon, $count) = explode(RechercheArticlesIntuition::separateur_b(), $element);
                                if ($code_rayon !== '' && (is_null($liste_rayons_trouve) || ! array_key_exists($code_rayon, $liste_rayons_trouve)))
                                    $liste_rayons_trouve[] = $code_rayon;
                            }
                    }
                    
                    if (array_key_exists('concepts', $rechercheIntuition->panels)) {
                        if ('' != $rechercheIntuition->panels['concepts']) {
                            $maxiSug = RechercheArticle::getNombreSuggestionAffiches();
                            $icpt = 0;
                            foreach (explode('|', $rechercheIntuition->panels['concepts']) as $element) {
                                if ($icpt >= $maxiSug)
                                    break;
                                
                                list ($libelle, $autre) = explode('#', $element);
                                $liste_concepts[$icpt ++] = array(
                                    '!texte' => $libelle
                                );
                            }
                        }
                    }
                }
                
                if ('catalogueRayon' != getValue('typeRecherche'))
                {

                    // On affiche les articles de type catalogue
                    // AFFICHAGE des articles trouvés dans la zone recherche_catalogue
                    $listeResultatFinal = & $rechercheArticle->buildResultatRechercheArticleCatalogue('CAT', $liste_articles, $rechercheIntuition->getNbArtTrouves(), $valueCDE_DA);
                    
                    $listeResultatFinal['listeArticles']['nbArticlesTrouves'] = $nombre_article_catalogue_trouve;
                    $listeResultatFinal['idonglet'] = count($ongletsXSL['onglets']);
                    $listeResultatFinal['affichageRayon'] = SqlParam::rqGetParamParavrac('OXAPROC', 'AFFRAYON')->Trouve1()['LIB01PARV'];
                  
                    // print_r($listeResultatFinal);
                    $contenu_recherche_catalogue = $rechercheCatalogue->htmlEngine->XslHtml('application/xsl/recherche_articles_resultat.xsl', $listeResultatFinal);

                    Affichage::innerHTMLPointeur('recherche_catalogue', $contenu_recherche_catalogue);
                    
                    // on rajoute l'affichage des résultats dans les onglets
                    $ongletsXSL['onglets'][] = array(
                        'name' => trad('Articles Catalogues'),
                        'result' => $nombre_article_catalogue_trouve,
                        'id' => count($ongletsXSL['onglets'])
                    );
                    
                    $html = '';
                    //ADD $rechercheAvancee
                    if (getValue('typeRecherche') == 'avancee')
                        $typeRecherche = 'avancee';
                    else
                        $typeRecherche = 'catalogue';
                    
                        if ($element = & RechercheArticle::buildPanelNavigation($typeRecherche, $pageCatalogue, $filtre_combien, $nombre_article_catalogue_trouve, 'catalogue', $valueCDE_DA))
                        if (! is_null($element))
                            $html = & $rechercheCatalogue->htmlEngine->XslHtml('application/xsl/template_articles_pagination.xsl', $element);
                    
                    Affichage::innerHTMLPointeur('pagination_articles_catalogue', $html);
                    $html = null;
                    
                    if ($rayon != '')
                        echo "if (document.getElementById('filtre_rayon')) document.getElementById('filtre_rayon').value = '", $rayon, "';";
                    
                    // Reconstruction du panel
                    if (1 == getValue('initialisation')) {
                        // On détermine le prix maximum de la recherche
                        $rechercheIntuition->rechercheArtCatalogue(true, $pageCatalogue, $filtre_combien, $texte_recherche, $rayon, $mode_comment, $type_tri, $liste_catalogues_art, $liste_catalogues_panel, $liste_caract_info_article, $liste_cod_fournisseurs, $liste_ref_fournisseur, $liste_familles, $liste_sous_familles, $liste_fabricants, $liste_gammes, $liste_prix, $liste_caract_select_article, 'PRIX_MAX', array(), array(), false, $texte_recherche_ref, $zone_geo_desactive, $filtre_ref);
                        
                        // On détermine le prix minimum de la recherche
                        $rechercheIntuition->rechercheArtCatalogue(true, $pageCatalogue, $filtre_combien, $texte_recherche, $rayon, $mode_comment, $type_tri, $liste_catalogues_art, $liste_catalogues_panel, $liste_caract_info_article, $liste_cod_fournisseurs, $liste_ref_fournisseur, $liste_familles, $liste_sous_familles, $liste_fabricants, $liste_gammes, $liste_prix, $liste_caract_select_article, 'PRIX_MIN', array(), array(), false, $texte_recherche_ref, $zone_geo_desactive, $filtre_ref);

                        if (Param::getNbItemPanel() > 0 ) {
                            $liste_panels = & $rechercheArticle->buildPanelAffinageRecherche($rechercheIntuition->getPanels(), $valueCDE_DA, $zone_geo_desactive);
                            
                            // On affiche le panel permettant d'affiner la recherche
                            if (is_array($liste_panels) && count($liste_panels) > 0 )
                            {
                                Affichage::innerHTMLPointeur('panels_navigation', $rechercheCatalogue->htmlEngine->XslHtml('application/xsl/template_panels_navigation.xsl', $liste_panels));
                            }
                            else
                            {
                                Affichage::innerHTML('panels_navigation', '');
                            }
                        }
                    }
                    
                    /*
                     * danger : $_post non filtrer
                     */
                    if (getValue('typeRecherche') == 'catalogue' && ! is_null(getValue('page'))) { // Dossier 27762
                        Affichage::selectDefaultOption('type_tri', getValue('type_tri'));
                        exit();
                    }
                }
                
                if (is_null($liste_concepts) || ! is_array($liste_concepts) || count($liste_concepts) == 0) {
                    // Suppression de la possibilite d'avoir les suggestions d'affichés
                    Affichage::displayElement('id_barre_cl_rech_sugg', false);
                    Affichage::greyElement("suggestionFiltreId");
                } else {
                    
                    $arrayXmlConcept['concepts'] = & $liste_concepts;

                    $rechercheCatalogue->htmlEngine->XslHtml('application/xsl/recherche_article.xsl', $arrayXmlConcept);
                    $rechercheCatalogue->htmlEngine->echoHtml('id_barre_cl_rech_sugg');
                    Affichage::greyRemoveElement("suggestionFiltreId");
                    Affichage::displayElement('id_barre_cl_rech_sugg', false);
                }
            }            // Si aucun article n'a été trouvé dans intuition

            if($_SESSION['OX_RA_SFZG']){
                $liste_panels = & $rechercheArticle->buildPanelAffinageRecherche($rechercheIntuition->getPanels(), $valueCDE_DA, $zone_geo_desactive);
                Affichage::innerHTMLPointeur('panels_navigation', $rechercheCatalogue->htmlEngine->XslHtml('application/xsl/template_panels_navigation.xsl', $liste_panels));
            }
            
            if($nombre_article_catalogue_trouve <= 0 ) {
                // On relance une recherche avec moins de critères pour informer l'utilisateur si sans les critères, on a des résultats
                $ongletsXSL['onglets'][] = array(
                    'name' => trad('Articles Catalogues'),
                    'result' => 0,
                    'id' => count($ongletsXSL['onglets'])
                );
                Affichage::innerHTML('recherche_catalogue', '');
                Affichage::innerHTML('pagination_articles_catalogue', '');
                if(!$_SESSION['OX_RA_SFZG'])
                {
                    Affichage::innerHTML('panels_navigation', '');
                }
            }
            
            if ('catalogueRayon' != getValue('typeRecherche')) {
                $nb_filtre_coches = 0;
                foreach ($_POST as $key => & $value)
                {
                    if (0 === stripos($key, 'panel_') && BoolSql($value))
                    {
                        if (false === stripos($key, 'panel_fourchette_')) {
                            Affichage::setAttribut(urlencode($key), 'checked', 'true');
                            $nb_filtre_coches ++;
                        }
                    }
                    
                    if (0 === stripos($key, 'filtre_avance_CARACT_') && BoolSql($value))
                    {
                        Affichage::setAttribut(urlencode(str_replace('filtre_avance_CARACT_','panel_typearticle_',$key)), 'checked', 'true');
                        $nb_filtre_coches ++;
                    }
                }
                   
                
                // Nombre de fitre au min a 1 -- pour pallier le fait que on ne sache pas si on a cliqué sur une fourchette de prix
                $nb_filtre_coches += 1;
                
                /*
                 * Désormais pour chaque nouvelle recherche, les filtres sur les intervals de prix sont cochés
                 * Ce qui permet de ne pas être obligés de les coher lors d'un filtrage par pertinence
                 */
                
                Affichage::displayElement('btn_desactiver_filtre', $nb_filtre_coches > 0);
                Affichage::selectDefaultOption('type_tri', getValue('type_tri'));
                
                /*
                 * if (Param::isSearchByCatalogue()) {
                 * $array_xml_liste_catalogue = & Catalogue::buildXmlSearchByCatalogue($rechercheCatalogue,$_SESSION['Session_Login'], $_SESSION['Session_CodeCtrLivraison'], $_SESSION['Session_CodeCtrEmetteur'], $_POST);
                 *
                 * if (is_array($array_xml_liste_catalogue) && array_key_exists('Ligne', $array_xml_liste_catalogue)) {
                 * echo 'getObj("zone_liste_selection_catalogue").innerHTML="',
                 * HttpReplacePointeur($rechercheCatalogue->htmlEngine->XslHtml('application/xsl/liste_catalogues_user.xsl', $array_xml_liste_catalogue)),
                 * '";';
                 *
                 * // SPEC 3853 $html_deroulante_catalogue = $rechercheCatalogue->htmlEngine->XslHtml('application/xsl/liste_deroulante_catalogues.xsl', $array_xml_liste_catalogue);
                 * // SPEC 3853 echo 'getObj("liste_catalogues").innerHTML="', HttpReplacePointeur($html_deroulante_catalogue), '";';
                 * }
                 * }
                 */
            }
            
            echo 'setVsible("liste_rayon",false);cleartTimeoutRayon();';
            // Spec 2802 - Activité utilisateur
            $finRechercheArticlesCatalogues = microtime(true);
            Track::logAudit('RECHERCHE' . '|' . $ID_Recherche, 'Articles Catalogues', '', '', $nombre_article_catalogue_trouve, ($finRechercheArticlesCatalogues - $debutRechercheArticlesCatalogues) * 1000);
        } else {
            $ongletsXSL['onglets'][] = array(
                'name' => trad('Articles Catalogues'),
                'result' => 0,
                'id' => count($ongletsXSL['onglets'])
            );
            if ('globale' == getValue('etendueRecherche')) {
                Affichage::innerHTML('recherche_catalogue', ''); // Résultat de la recherche catalogue remis à blanc
                Affichage::innerHTML('pagination_articles_catalogue', ''); // Pagination associée remise à blanc
            }
        }
        
        $rechercheAutre = true;
        if ($rechercheCatalogue instanceof Properties) {
            if (is_array($rechercheCatalogue->properties)) {
                if (array_key_exists('affPhotos', $rechercheCatalogue->properties) && $rechercheCatalogue->properties['affPhotos']) {
                    $rechercheAutre = false;
                }
            }
        }

        // //*****************FIN PARTIE Articles Catalogues ***********////
        // //***************** PARTIE Articles Génériques ***********////
        //ADD $rechercheAvancee
        if ($rechercheAutre && ! $rechercheIntuition->isChoixCaracteristique() && ( // Spec 3551 via Mail VAN pas de recherche geneneriques ni famille si au moins un choix de caractéristiques
(is_null(getValue('page')) || ('globale' == getValue('etendueRecherche') || 'generique' == getValue('typeRecherche') || $isSelectionCatalogue || ('avancee' == getValue('typeRecherche') && (is_null(getValue('cod_ref_frs')) || trim(getValue('cod_ref_frs')) == '') && // Dossier 27768 et retour Analyse YA EDP VAN
(is_null(getValue('cod_fab')) || trim(getValue('cod_fab')) == '') && // Dossier 27768 et retour Analyse YA EDP VAN
(is_null(getValue('cod_gam')) || trim(getValue('cod_gam')) == '')) // Dossier 27768 et retour Analyse YA EDP VAN
) // Remise en service via demande PP via spec 3551
)
        // LA RECHERCHE en mode AVANCE N'est pas pour les generiques
) && ($_SESSION['GLOB_AuthLigneGenerique'] == 1 || Param::isPublicationGenerique()) && ($texte_recherche_ref == '' || is_null($texte_recherche_ref)) && !$rechercheParRefActive) {
            // Spec 2802 - Activité utilisateur    
            
            $debutRechercheArticlesGeneriques = microtime(true);
            // Track::logAudit("RECHERCHE"."|".$ID_Recherche,"Début recherche articles génériques");
            // On recherche les articles de type générique
            $liste_articles_generique = & $rechercheIntuition->rechercheArtGenerique($pageGenerique, $filtre_combien, $texte_recherche, $mode_comment, $type_tri, $rayon, $liste_catalogues_gen, $liste_familles, $liste_sous_familles, $isSelectionCatalogue);
            
            $nombre_article_generique_trouve += $rechercheIntuition->getNbArtTrouves();
            $nombre_total_article_trouve += $nombre_article_generique_trouve;
            
            if ($nombre_article_generique_trouve) {
                if (isset($liste_articles_generique[0]) && array_key_exists('RAYON', $liste_articles_generique[0]))
                    if ('' != $liste_articles_generique[0]['RAYON'])
                        foreach (explode(RechercheArticlesIntuition::separateur_a(), $liste_articles_generique[0]['RAYON']) as $element) {
                            list ($code_rayon, $count) = explode(RechercheArticlesIntuition::separateur_b(), $element);
                            if ($code_rayon !== '' && (is_null($liste_rayons_trouve) || ! array_key_exists($code_rayon, $liste_rayons_trouve)))
                                $liste_rayons_trouve[] = $code_rayon;
                        }
                
                // On affiche les articles de type générique
                $listeResultatFinal = & $rechercheArticle->buildResultatRechercheArticleGenerique($liste_articles_generique, $nombre_article_generique_trouve, $valueCDE_DA);
                
                if($valueCDE_DA && $valueCDE_DA['addObjet']=='CDE')
                {
                    $listeResultatFinal['titreColonne']= Trad("Ajouter à la commande");                    
                }
                if (is_null(getValue('typeRecherche')) || getValue('typeRecherche') != 'generique')
                    $listeResultatFinal['idonglet'] = (array_key_exists('onglets', $ongletsXSL) ? count($ongletsXSL['onglets']) : 0);
                $rechercheCatalogue->contenu_recherche_generique = & $rechercheCatalogue->htmlEngine->XslHtml('application/xsl/recherche_articles_generique_resultat.xsl', $listeResultatFinal);
                Affichage::innerHTMLPointeur('recherche_generique', $rechercheCatalogue->contenu_recherche_generique);

                //ADD $rechercheAvancee
                if(getValue('typeRecherche') == 'avancee')
                    $filtre_type = 'avancee';
                else 
                    $filtre_type = 'generique';
                    
                    Affichage::innerHTMLPointeur('pagination_articles_generique', $rechercheCatalogue->htmlEngine->XslHtml('application/xsl/template_articles_pagination.xsl', RechercheArticle::buildPanelNavigation($filtre_type, $pageGenerique, $filtre_combien, $nombre_article_generique_trouve, 'generique', $valueCDE_DA)));
                
                $ongletsXSL['onglets'][] = array(
                    'name' => trad('Articles Génériques'),
                    'result' => $nombre_article_generique_trouve,
                    'id' => count($ongletsXSL['onglets'])
                );
            } else {
                $ongletsXSL['onglets'][] = array(
                    'name' => trad('Articles Génériques'),
                    'result' => '0',
                    'id' => count($ongletsXSL['onglets'])
                );
                Affichage::innerHTML('recherche_generique', '');
                Affichage::innerHTML('pagination_articles_generique', '');
            }
            
            if (getValue('typeRecherche') == 'generique')
                exit();
        } else {
            $ongletsXSL['onglets'][] = array(
                'name' => trad('Articles Génériques'),
                'result' => '0',
                'id' => count($ongletsXSL['onglets'])
            );
            if ('globale' == getValue('etendueRecherche')) {
                Affichage::innerHTML('recherche_generique', '');
                Affichage::innerHTML('pagination_articles_generique', '');
            }
        }
        // //*****************FIN PARTIE Articles Génériques ***********////
        // //***************** PARTIE Articles Sous-familles ***********////
            $contexte = $rechercheIntuition->getClassContexte();
            
            if ($contexte instanceof Properties) {
                if (is_array($contexte->properties) && array_key_exists('affFavoris', $contexte->properties) && $contexte->properties['affFavoris'])
                    $okFam = false;
                else
                    $okFam = true;
            } else
                $okFam = true;
                //ADD $rechercheAvancee /!\ conditionnement

            if ($okFam && $rechercheAutre && $rechercheCatalogue->getContexte() == RechercheCatalogue::CNT_PANIER && ! $rechercheIntuition->isChoixCaracteristique() && ( // Spec 3551 via Mail VAN pas de recherche geneneriques ni famille si au moins un choix de caractéristiques
    (is_null(getValue('page')) || ('globale' == getValue('etendueRecherche') || 'sous_famille' == getValue('typeRecherche') || ($isSelectionCatalogue)) || // Dossier 23694
    ('avancee' == getValue('typeRecherche') && (is_null(getValue('cod_ref_frs')) || trim(getValue('cod_ref_frs')) == '') && // Dossier 27768 et retour Analyse YA EDP VAN
    (is_null(getValue('cod_fab')) || trim(getValue('cod_fab')) == '') && // Dossier 27768 et retour Analyse YA EDP VAN
    (is_null(getValue('cod_gam')) || trim(getValue('cod_gam')) == '')) // Dossier 27768 et retour Analyse YA EDP VAN
                                                                                 // Et suppresion du test cod_fam suite retour mail du dossier 27768
        )) && ($_SESSION['GLOB_AuthLigneSFamille'] == 1 || Param::isPublicationGenerique()) && ($texte_recherche_ref == '' || is_null($texte_recherche_ref)) && !$rechercheParRefActive) {
                
                // Spec 2802 - Activité utilisateur
                microtime(true);
                // Track::logAudit("RECHERCHE"."|".$ID_Recherche,"Début recherche articles Sous-familles");
                // On recherche les articles sur sous-famille
                // Affichage::messageJS($liste_familles);
                // $liste_catalogues_sf= array()
                // print_r($liste_catalogues_sf);exit;
                
                if(count($liste_familles)==0 && count($liste_sous_familles)==1)
                {
                    $famille = SqlArticle::rqGetSousFamille($liste_sous_familles[0])->Trouve1();
                    $liste_familles[] = $famille['CODE_FAM'];
                }
                
                $liste_articles_ss_famille = & $rechercheIntuition->rechercheArtSousFamille($pageSousFamille, $filtre_combien, $texte_recherche, $mode_comment, $type_tri, $rayon, $liste_catalogues_sf, $liste_familles, $isSelectionCatalogue);
                
                $nombre_article_sousFamille_trouve += $rechercheIntuition->getNbArtTrouves();
                $nombre_total_article_trouve += $nombre_article_sousFamille_trouve;
                
                if ($nombre_article_sousFamille_trouve) {
                    if (is_array($liste_articles_ss_famille) && count($liste_articles_ss_famille) > 0)
                        if (array_key_exists('RAYON', $liste_articles_ss_famille[0]))
                            if ('' != $liste_articles_ss_famille[0]['RAYON'])
                                foreach (explode(RechercheArticlesIntuition::separateur_a(), $liste_articles_ss_famille[0]['RAYON']) as $element) {
                                    list ($code_rayon, $count) = explode(RechercheArticlesIntuition::separateur_b(), $element);
                                    if ($code_rayon !== '' && (is_null($liste_rayons_trouve) || ! array_key_exists($code_rayon, $liste_rayons_trouve)))
                                        $liste_rayons_trouve[] = $code_rayon;
                                }
                    
                            $element = & RechercheArticle::buildResultatRechercheArtSousFamille($liste_articles_ss_famille, $nombre_article_sousFamille_trouve, $valueCDE_DA);
    
                    if($valueCDE_DA && $valueCDE_DA['addObjet']=='CDE')
                    {
                        $element['titreColonne']= Trad("Ajouter à la commande");
                    }
                            
                    if (is_null(getValue('typeRecherche')) || getValue('typeRecherche') != 'sous_famille')
                        $element['idonglet'] = (array_key_exists('onglets', $ongletsXSL) ? count($ongletsXSL['onglets']) : 0);
                    $rechercheCatalogue->contenu_recherche_sous_famille = & $rechercheCatalogue->htmlEngine->XslHtml('application/xsl/recherche_articles_ss_famille_resultat.xsl', $element);
                    Affichage::innerHTMLPointeur('recherche_sous_famille', $rechercheCatalogue->contenu_recherche_sous_famille);
                    
                    //ADD $rechercheAvancee
                    if (getValue('typeRecherche') == 'avancee')
                        $typeRecherche = 'avancee';
                    else
                        $typeRecherche = 'sous_famille';
                            
                    
                        Affichage::innerHTMLPointeur('pagination_sous_famille', $rechercheCatalogue->htmlEngine->XslHtml('application/xsl/template_articles_pagination.xsl', RechercheArticle::buildPanelNavigation($typeRecherche, $pageSousFamille, $filtre_combien, $nombre_article_sousFamille_trouve, 'sousFamille', $valueCDE_DA)));
                    
                    $ongletsXSL['onglets'][] = array(
                        'name' => trad('Sous Familles'),
                        'result' => $nombre_article_sousFamille_trouve,
                        'id' => count($ongletsXSL['onglets'])
                    );
                } else {
                    Affichage::innerHTML('recherche_sous_famille', '');
                    Affichage::innerHTML('pagination_sous_famille', '');
                    $ongletsXSL['onglets'][] = array(
                        'name' => trad('Sous Familles'),
                        'result' => 0,
                        'id' => count($ongletsXSL['onglets'])
                    );
                }
                
                if (getValue('typeRecherche') == 'sous_famille')
                    exit();
            } else {
                $ongletsXSL['onglets'][] = array(
                    'name' => trad('Sous Familles'),
                    'result' => '0',
                    'id' => count($ongletsXSL['onglets'])
                );
                if ('globale' == getValue('etendueRecherche')) {
                    Affichage::innerHTML('recherche_sous_famille', '');
                    Affichage::innerHTML('pagination_sous_famille', '');
                }
            }
        // Section histo commande
        //ADD $rechercheAvancee /!\ conditionement

      //  print_r(getValue('typeRecherche'));exit;
        if (RechercheArticle::isAfficheOngletTopArticle() && ((count($liste_catalogues_sf) == 0 && count($liste_catalogues_gen) == 0) || count($liste_catalogues_art) > 0) && ('globale' == getValue('etendueRecherche') || 'histcde' == getValue('typeRecherche') || // Pagination historique
        'catalogueRayon' == getValue('typeRecherche') || 'catalogueRayonDirect' == getValue('typeRecherche') || 'avancee' == getValue('typeRecherche')) && !$rechercheParRefActive) {
         
            $rechercheIntuition->setBaseIntuition('histocde');
            $liste_articles_commandes = & $rechercheIntuition->rechercheArtCatalogue(true, $pageCde, $filtre_combien, $texte_recherche, $rayon, $mode_comment, $type_tri, $liste_catalogues_art, $liste_catalogues_panel, $liste_caract_info_article, $liste_cod_fournisseurs, $liste_ref_fournisseur, $liste_familles, $liste_sous_familles, $liste_fabricants, $liste_gammes, $liste_prix, $liste_caract_select_article, '', array(), $liste_type_article, $isSelectionCatalogue, $texte_recherche_ref, $zone_geo_desactive, $filtre_ref);
            
            $nombre_article_histocde = $rechercheIntuition->getNbArtTrouves();
            $nombre_total_article_trouve += $nombre_article_histocde;
            
            $ongletsXSL['onglets'][] = array(
                'name' => trad('Les + Commandés'),
                'result' => $nombre_article_histocde,
                'id' => count($ongletsXSL['onglets'])
            );
            if ($nombre_article_histocde > 0) {
                $listeResultatFinal = & $rechercheArticle->buildResultatRechercheArticleCatalogue('HST', $liste_articles_commandes, $nombre_article_histocde, $valueCDE_DA);

                $contenu_recherche_catalogue = & $rechercheCatalogue->htmlEngine->XslHtml('application/xsl/recherche_articles_resultat.xsl', $listeResultatFinal);
                
                Affichage::innerHTMLPointeur('recherche_commande', $contenu_recherche_catalogue);
                
                $html = '';
                
                //ADD $rechercheAvancee
                if (getValue('typeRecherche') == 'avancee')
                    $typeRecherche = 'avancee';
                else
                    $typeRecherche = 'histcde';
                
                if ($element = & RechercheArticle::buildPanelNavigation($typeRecherche, $pageCde, $filtre_combien, $nombre_article_histocde, 'histcde', $valueCDE_DA))
                    if (! is_null($element))
                        $html = & $rechercheCatalogue->htmlEngine->XslHtml('application/xsl/template_articles_pagination.xsl', $element);
                
                Affichage::innerHTMLPointeur('pagination_articles_histcde', $html);
                $html = null;
            } else {
                Affichage::innerHTML('recherche_commande', '');
                Affichage::innerHTML('pagination_articles_histcde', '');
            }
            
            if (getValue('typeRecherche') == 'histcde')
                exit();
        } else {
            $ongletsXSL['onglets'][] = array(
                'name' => trad('Les + Commandés'),
                'result' => '0',
                'id' => count($ongletsXSL['onglets'])
            );
            if ('globale' == getValue('etendueRecherche')) {
                Affichage::innerHTML('recherche_commande', '');
                Affichage::innerHTML('pagination_articles_histcde', '');
            }
        }
        
        // //****************REAL DES ONGLETS *****************************/////
        $ongletsXSL['totalArticlesTrouve'] = $nombre_total_article_trouve;
        // on prépare le HTML qui va servir pour afficher les onglets
        
        if (0 != $ongletsXSL['onglets'][0]['result']) {
            $ongletsXSL['onglets'][0]['id'] = '0';
            $ongletsXSL['onglets'][1]['id'] = '1';
            $ongletsXSL['onglets'][2]['id'] = '1';
            $ongletsXSL['onglets'][3]['id'] = '1';
        } elseif (! array_key_exists(1, $ongletsXSL['onglets']) || 0 != $ongletsXSL['onglets'][1]['result']) {
            $ongletsXSL['onglets'][0]['id'] = '1';
            $ongletsXSL['onglets'][1]['id'] = '0';
            $ongletsXSL['onglets'][2]['id'] = '1';
            $ongletsXSL['onglets'][3]['id'] = '1';
        } elseif (! array_key_exists(2, $ongletsXSL['onglets']) || 0 != $ongletsXSL['onglets'][2]['result']) {
            $ongletsXSL['onglets'][0]['id'] = '1';
            $ongletsXSL['onglets'][1]['id'] = '1';
            $ongletsXSL['onglets'][2]['id'] = '0';
            $ongletsXSL['onglets'][3]['id'] = '1';
        } elseif (! array_key_exists(3, $ongletsXSL['onglets']) || 0 != $ongletsXSL['onglets'][3]['result']) {
            $ongletsXSL['onglets'][0]['id'] = '1';
            $ongletsXSL['onglets'][1]['id'] = '1';
            $ongletsXSL['onglets'][2]['id'] = '1';
            $ongletsXSL['onglets'][3]['id'] = '0';
        }
        
        Affichage::innerHTMLPointeur('tabs_recherche', $rechercheCatalogue->htmlEngine->XslHtml('application/xsl/recherche_articles_onglets.xsl', $ongletsXSL));
        
        // on prepare le javascript pour les onglets
        echo 'prepareOnglets("tabs_recherche", "tabs_recherche_content"); prepareRadioAffichage();';
        
        echo 'var elt1 = document.getElementById("recherche_catalogue");    if (elt1.firstChild) if (elt1.firstChild.style) elt1.firstChild.style.display="', (($ongletsXSL['onglets'][0]['id'] == 0) ? '' : 'none'), '";';
        echo 'var elt2 = document.getElementById("recherche_generique");    if (elt2.firstChild) if (elt2.firstChild.style) elt2.firstChild.style.display="', (($ongletsXSL['onglets'][1]['id'] == 0) ? '' : 'none'), '";';
        echo 'var elt3 = document.getElementById("recherche_sous_famille"); if (elt3.firstChild) if (elt3.firstChild.style) elt3.firstChild.style.display="', (($ongletsXSL['onglets'][2]['id'] == 0) ? '' : 'none'), '";';
        echo 'var elt4 = document.getElementById("recherche_commande");     if (elt4.firstChild) if (elt4.firstChild.style) elt4.firstChild.style.display="', (($ongletsXSL['onglets'][3]['id'] == 0) ? '' : 'none'), '";';
        
        // //*****************FIN PARTIE Articles Sous-familles ***********////
        // Si un filtre sur les rayons existe, on re-génère le fil d'ariane et on l'affiche
        if ('' != $rayon) {
            $info_rayon = explode('_', $rayon, 3);
            
            $array = RechercheArticle::buildFilAriane($info_rayon[2], '' != getValue('filtre_rayon_panel'));
            
            Affichage::innerHTMLPointeur('fil_ariane', $rechercheCatalogue->htmlEngine->XslHtml('application/xsl/template_fil_ariane.xsl', $array));
            Affichage::displayElement('fil_ariane', true);
        }        // Sinon on réinitialise le fil d'ariane à blanc
        else {
            Affichage::innerHTML('fil_ariane', '');
            Affichage::displayElement('fil_ariane', false);
        }
        
        // Si l'utilisateur coche/decoche un catalogue ou clique sur un catalogue
        // Alors on désactive les rayons qui ne sont pas associés à ces catalogues
        if ('catalogueRayon' == getValue('typeRecherche') || 'catalogueRayonDirect' == getValue('typeRecherche')) {
            // On initialise le tableau contenant les catalogues sélectionnés par l'utilisateur
            foreach ($_POST as $key => & $value)
                if (false !== stripos($key, 'CAT_') && BoolSql($value)) {
                    $id_cat = explode('_', $key);
                    $liste_catalogues_art[] = $id_cat[2];
                }
            
            // On désactive tous les rayons
            echo "	var obj = document.getElementById('id_liste_rayon');
					if (obj) {
						var liste = obj.getElementsByTagName('DIV');
						if (liste){
							var icpt;
							for (icpt=0;icpt<liste.length;icpt++){
								if(liste[icpt].id.indexOf('div_rayon_')==0)
									liste[icpt].className='rayonSansEvenement';
								if(liste[icpt].id.indexOf('disabled_div_rayon_')==0)
									liste[icpt].className='rayonAvecEvenement';
							}
						}
					}";
            
            if (is_array($liste_rayons_trouve) && count($liste_rayons_trouve) != 0)
                foreach ($liste_rayons_trouve as & $rayon_user)
                    echo "if (document.getElementById('div_rayon_{$rayon_user}')) {document.getElementById('div_rayon_{$rayon_user}').className='rayonAvecEvenement'};";
        }
        
        $finRecherche = microtime(true);
        $tempo = (int) (($finRecherche - $debutRecherche) * 1000);
        Track::logAudit('RECHERCHE' . '|' . $ID_Recherche, 'FIN LANCEMENT RECHERCHE', '', '', $nombre_article_catalogue_trouve . ';' . $nombre_article_generique_trouve . ';' . $nombre_article_sousFamille_trouve, $tempo);
        
        if ($contenu_recherche_catalogue !== '') {
            // Ok, l'onglet de résultat "articles catalogues" est affiché par défaut
        } else if ($rechercheCatalogue->contenu_recherche_generique !== '') {
            // On affiche l'onglet de résultats "articles génériques" et on sélectionne l'onglet correspondant
            Affichage::displayFirstChildElement('recherche_generique', true);
            echo 'if (document.getElementById("liste_onglets_recherche").childNodes) {
	                                if (document.getElementById("liste_onglets_recherche").childNodes[1].firstChild) {
	                                        document.getElementById("liste_onglets_recherche").childNodes[1].firstChild.className="select";
	                                }
	                                try{
	                                    if (document.getElementById("liste_onglets_recherche").childNodes[2].firstChild) {
	                                            document.getElementById("liste_onglets_recherche").childNodes[2].firstChild.className="";
	                                    }
	                                } catch(e) {}
	                        }';
        } else if ($rechercheCatalogue->contenu_recherche_sous_famille !== '') {
            // On affiche l'onglet de résultats "sous-famille" et on sélectionne l'onglet correspondant
            Affichage::displayFirstChildElement('recherche_sous_famille', true);
            echo 'if (document.getElementById("liste_onglets_recherche").childNodes) {
	                            try{
	                                if (document.getElementById("liste_onglets_recherche").childNodes[2].firstChild) {
	                                        document.getElementById("liste_onglets_recherche").childNodes[2].firstChild.className="select";
	                                }
	                            } catch(e) {}
	                        }';
        }
        
        if (array_key_exists('backOnglet', $_SESSION)) {
            echo 'var elt1 = document.getElementById("recherche_catalogue");    if (elt1.firstChild) if (elt1.firstChild.style) elt1.firstChild.style.display="', ($_SESSION['backOnglet'] == 'ong1' ? '' : 'none'), '";';
            echo 'var elt2 = document.getElementById("recherche_generique");    if (elt2.firstChild) if (elt2.firstChild.style) elt2.firstChild.style.display="', ($_SESSION['backOnglet'] == 'ong2' ? '' : 'none'), '";';
            echo 'var elt3 = document.getElementById("recherche_sous_famille"); if (elt3.firstChild) if (elt3.firstChild.style) elt3.firstChild.style.display="', ($_SESSION['backOnglet'] == 'ong3' ? '' : 'none'), '";';
            echo 'var elt4 = document.getElementById("recherche_commande");     if (elt4.firstChild) if (elt4.firstChild.style) elt4.firstChild.style.display="', ($_SESSION['backOnglet'] == 'ong4' ? '' : 'none'), '";';
            
            if ($_SESSION['backOnglet'] == 'ong1') {
                Affichage::displayFirstChildElement('recherche_catalogue', true);
                echo 'if (document.getElementById("liste_onglets_recherche").childNodes) {
	                            try{
	        				        var icpt=0; for (icpt=0;icpt<4;icpt++)
		                                if (document.getElementById("liste_onglets_recherche").childNodes[icpt].firstChild)
		                                        document.getElementById("liste_onglets_recherche").childNodes[icpt].firstChild.className="";

	        						if (document.getElementById("liste_onglets_recherche").childNodes[0].firstChild)
	                                        document.getElementById("liste_onglets_recherche").childNodes[0].firstChild.className="select";
	                            } catch(e) {}
	                        }';
            } else if ($_SESSION['backOnglet'] == 'ong4') {
                Affichage::displayFirstChildElement('recherche_commande', true);
                echo 'if (document.getElementById("liste_onglets_recherche").childNodes) {
	                            try{
	        				        var icpt=0; for (icpt=0;icpt<4;icpt++)
		                                if (document.getElementById("liste_onglets_recherche").childNodes[icpt].firstChild)
		                                        document.getElementById("liste_onglets_recherche").childNodes[icpt].firstChild.className="";

	        						if (document.getElementById("liste_onglets_recherche").childNodes[3].firstChild) 
	                                        document.getElementById("liste_onglets_recherche").childNodes[3].firstChild.className="select";
	                            } catch(e) {}
	                        }';
            }
            unset($_SESSION['backOnglet']);
        }
        
        Supervision::setNbResultat($nombre_article_generique_trouve, $nombre_article_sousFamille_trouve, $nombre_article_catalogue_trouve, $nombre_article_histocde ?? 0);
        echo 'TraiteUrlAsync("'.Supervision::$page_php.'");';
        
    }    // Si l'utilisateur saisie un texte à recherche et que l'autocompletion est activée
    elseif ('autocomplete' == getValue('action')) {
        // On récupère le filtre des rayons
        if (! is_null(getValue('chaine_filtre'))) {
            $filtres = explode('&', getValue('chaine_filtre'));
            
            foreach ($filtres as & $filtre) {
                $info_filtre = explode('=', $filtre);
                $_POST[$info_filtre[0]] = $info_filtre[1];
            }
        }
        
        $page = 1;
        // $texte_recherche = getValue('q'); // Valeur saisie dans le champ texte, le flag 'q' est lié au framework
        $texte_recherche = getValue('term'); // Valeur saisie dans le champ texte, le flag 'term' est lié au framework
        if (trim($texte_recherche) != '') { // ANTI BUG IE 11 Dossier 25435
            $rayon = getValue('filtre_rayon');
            $mode_comment = getValue('filtre_comment'); // Correction suite Avis VAN/YA car L'autocompletion a toujours travaillé sur la notion de DEBUT
            
            $type_tri = 'DES_ART'; // Le tri est toujours par désignation de l'article
            $liste_catalogues_art = array();
            $liste_catalogues_panel = array();
            $liste_caract_info_article = array();
            // $liste_fournisseurs = array();
            $liste_cod_fournisseurs = array();
            $liste_ref_fournisseur = array();
            $liste_familles = array();
            $liste_sous_familles = array();
            $liste_fabricants = array();
            $liste_gammes = array();
            $liste_prix = array();
            $liste_caract_select_article = array();
            
            foreach ($_POST as $key => & $value)
                if (0 === stripos($key, 'panel_') && BoolSql($value)) {
                //if (0 === stripos($key, 'panel_') && BoolSql(getValue('THROUGH'))) {
                    $valeur_element = getValue('value_' . $key);
                    $info_element_panel = explode('_', $key);
                    
                    switch ($info_element_panel[1]) {
                        case 'frs':
                            $liste_cod_fournisseurs[] = $valeur_element;
                            break;
                        
                        case 'sfam':
                            $liste_sous_familles[] = $valeur_element;
                            break;
                        
                        case 'catalogue':
                            $liste_catalogues_panel[] = $valeur_element;
                            break;
                        
                        case 'gamme':
                            $liste_gammes[] = $valeur_element;
                            break;
                        
                        case 'fabricant':
                            $liste_fabricants[] = $valeur_element;
                            break;
                        
                        case 'fourchette':
                            $intervalle_prix = explode('|', $valeur_element);
                            $liste_prix[] = array(
                                'prix_min' => $intervalle_prix[0],
                                'prix_max' => $intervalle_prix[1]
                            );
                            break;
                        
                        default:
                            $liste_caract_select_article[] = $info_element_panel[1] . ':' . $valeur_element;
                            break;
                    }
                }                // Pour les filtres posés sur les catalogues privés
                elseif (false !== stripos($key, 'CAT_ART') && BoolSql($value)) {
                    $id_cat = explode('_', $key);
                    $liste_catalogues_art[] = $id_cat[2];
                }                // Pour les filtres posés sur les types d'article
                elseif (false !== stripos($key, 'CARACT_') && BoolSql($value)) {
                    $id_caract = explode('_', $key);
                    $liste_caract_info_article[] = $id_caract[1];
                }
            
            $rechercheIntuition = new RechercheArticlesIntuition();
            $rechercheIntuition->setCentreEmetteur($rechercheCatalogue->getEMET_CTR());
            $rechercheIntuition->setCentreLivraison($rechercheCatalogue->getLIV_CTR());
            
            $texte_recherche_ref = ''; // En mode autocompletion, il n'y a pas de reference de saisie
            $liste_articles = & $rechercheIntuition->rechercheArtCatalogue(true, $page, Param::getSessionAutocompletionNbResultMax(), $texte_recherche, $rayon, $mode_comment, $type_tri, $liste_catalogues_art, $liste_catalogues_panel, $liste_caract_info_article, 
                // $liste_fournisseurs,
                $liste_cod_fournisseurs, $liste_ref_fournisseur, $liste_familles, $liste_sous_familles, $liste_fabricants, $liste_gammes, $liste_prix, $liste_caract_select_article, 'AUTOCOMPLETE', array(), array(), false, $texte_recherche_ref, $zone_geo_desactive, $filtre_ref);
            // RechercheArticle::isDesactRechercheSemantique()
            // On retourne toutes les désignation trouvés, le framework nécessite de renvoyer un résultat par ligne
            if (is_array($liste_articles)) {
                $i = 0;
                $TabVal = array();
                $nbItem = & Param::getSessionAutocompletionNbResultMax();
                echo '[';
                foreach ($liste_articles['lignes'] as & $ligne)
                    if ($nbItem <= $i)
                        break;
                    else                    // if (!in_array($ligne['DES_ART'], $TabVal)) Suppression suite retour BOUYGUES
                    {
                        if ($i > 0)
                            echo ',';
                        echo '{"label":"', str_replace('"', '\"', $ligne['DES_ART']), '"}';
                        $TabVal[] = & $ligne['DES_ART'];
                        $i ++;
                    }
                echo ']';
            }
        }
    }    // Si l'utilisateur ajoute un article catalogue dans le panier via la saisie d'une quantité
    elseif ('ajouterArticle' == getValue('action')) {
        
        $rechercheCatalogue->ajouterArticle(getValue('ID_CAT'));
    } elseif ('ajouterArticleGen' == getValue('action')) {
        $rechercheCatalogue->ajouterArticleGen();
    }    // Si l'utilisateur appelle la fonction de recherche avancée
    elseif ('recherche_avancee' == getValue('action')) {
        Affichage::scroolPage(false);
        

        $rechercheArticle = new RechercheArticle($valueCDE_DA);
        $rechercheArticle->setClassContexte($rechercheCatalogue);
        // Affichage::innerHTMLPointeur('men_gene', $rechercheArticle->buildRechercheAvancee());
        
        $htmlEngine = $rechercheArticle->buildRechercheAvancee($valueCDE_DA);
        $htmlEngine->echoHtml('id_div_recherche_avancee');
        Affichage::displayElement('tab_catalogue', false);
        echo "try{document.getElementById('idaffCatalogue').classList.remove('select')}catch (e){};";
        // id_div_recherche_avancee
        
        // reset des ecrans de recherche articles déjà existant suite a la recherche précendente
        Affichage::innerHTML('recherche_catalogue', '');
        
        Affichage::innerHTML('recherche_generique', '');
        
        Affichage::innerHTML('recherche_sous_famille', '');
        
        Affichage::innerHTML('recherche_commande', '');
        
        Affichage::innerHTML('tabs_recherche', '');
        
        Affichage::innerHTML('panels_navigation', '');
    }    // Si l'utilisateur appelle la fonction d'import de fichier
    elseif ('import_fichier' == getValue('action')) {
        // veifification si le panier a déjà crée
        // MISE A JOUR PROGRAMME SELON Dossier de maintenance 20028
        if (Panier::getNbLignePanier($_SESSION['id_user'], $_SESSION['id_panier'], false) != 0) {
            if (is_null(getValue('fonction'))) {
                echo 'if(window.confirm("', cnv_to_javascript(trad('Votre panier n\'est pas vide, voulez vous le vider ?')), '"))', '{CallUrl("recherche_article.php?action=import_fichier&fonction=del");}', 'else', '{CallUrl("recherche_article.php?action=import_fichier&fonction=suite");}';
                exit();
            }
            if (getValue('fonction') == 'del') {
                Panier::SupprimePanier($_SESSION['id_panier']);
                Panier::updateMontantAndNbArticlePanier($_SESSION['id_panier']);
                
                $PanierEntete = new PanierEntete();
                $PanierEntete->initEntetePanier($_SESSION['id_panier']);
            }
        }
        
        // pour le client 59 -- SPEC 2854 Import des devis Optima
        echo 'CallUrl("import_csv_v10.php?action=accueil");';
    }
    //ADD $rechercheAvancee
    if ('avancee' == getValue('typeRecherche')) {
        Affichage::displayElement('tab_catalogue', false);
        echo "try{document.getElementById('idaffCatalogue').classList.remove('select')}catch (e){};";
    }
}

/*
 * Afficher ou non Suggestion dossier 27905 : TODO => a modifier pour faire un preDispatch ou un Validator quand on re structurera le projet proprement
 */
if (getValue('action') == 'recherche' && (getValue('item') == NULL || getValue('item') == '')) {
    if (! isset($liste_concepts) || is_null($liste_concepts) || ! is_array($liste_concepts) || count($liste_concepts) == 0) {
        Affichage::greyElement('suggestionFiltreId');
        Affichage::innerHTML('id_barre_cl_rech_sugg', '');
    } else {
        Affichage::greyRemoveElement("suggestionFiltreId");
    }
}
if (getValue('action') == 'accueil') {
    Affichage::greyElement('suggestionFiltreId');
    Affichage::innerHTML('id_barre_cl_rech_sugg', '');
}
$connecteur->disconnect();
exit();