// Package BAM_ERMES_SEARCH / Copyright 2025 Archimed SA / JSE

//loading package...
packages.acknowledge('BAM_ERMES_SEARCH');

// file: search_list.js


var sInstance = CFInstance;
var sBaseId = '';
var sThesaurusId = 'IFD_CLASSIFTHEME';
var sSuperLexiconId = '';
var sControlId = 'ClassificationThematique';
var sRootNodeId = '';
var bContextualize = true;
var sCookieSubKey = 'ClassificationThematique';
var sexternalLinksCountPropertyName = '';
var sIdesiaBaseId = "";
var sTopNode = '';
var sBKLSortKeyId = '';
var sBKLIndexId = '';
var sBackurl = '';
var sScenario = '';
var idesiaNavigator;

/////////////////////////////////////////////////////////
// Namespace (w. Module Pattern)
var ErmesManager = (function (pub) {

    //Public variables
    pub.ExternalChange = false;
    pub.CurrentSearchType = ErmesManager.SearchType.List;
    pub.AjaxAutocomplete = true;

    //Return public members
    return pub;
} (ErmesManager || {}));


var ErmesGUI = (function (pub) {

    //Override du restoreScenario du GUI pour ajouter le sc?nario en cookie si il n'est pas pr?sent dans la liste.
    pub.restoreScenario = function () {
        var jsonCookie = {};
        jsonCookie = JSON.parse($.cookie("ErmesSearch"));
        if (typeof (jsonCookie) == "undefined" || jsonCookie == null) {
            return;
        }

        if (typeof (jsonCookie.mainScenario) != "undefined") {
            var $currentSc = $("option[value='" + jsonCookie.mainScenario + "']", $("#globalScenario"));
            if ($currentSc.length) {
                $currentSc.attr("selected", true);
            } else {
                $('#globalScenario')
                    .append($("<option></option>")
                    .attr("value", jsonCookie.mainScenario)
                    .attr("selected", true)
                    .text(jsonCookie.mainScenarioText));
            }
        }
    };

    return pub;

})(ErmesGUI || {});

/////////////////////////////////////////////////////////
// Classe 'Form'
ErmesManager.Form = function () {
    this.CurrentTimeout = {};
    this.EnrichmentLoaded = false;

    var ajaxSearch;
    var ajaxAvailability;

    //Binding event searchComplete
    $(this).bind("searchCompleted", ErmesManager.event.onSearchComplete);

    this.doSearch = function ($container) {

        ErmesManager.beforeSearch();

        if (typeof (ajaxSearch) != "undefined") {
            ajaxSearch.abort();
        }
        if (typeof (ajaxAvailability) != "undefined") {
            ajaxAvailability.abort();
        }

        if (this.DetailMode) {
            ErmesManager.CurrentSearchType = ErmesManager.SearchType.SearchDetail;
        }

        var self = this;
        this.EnrichmentLoaded = false;

        var serviceBaseUrl = "";
        ErmesManager.ExternalChange = true; //Hack pour ?viter de d?clencher l'event $.address.externalChange 2 fois si la query contient un quote (bug)

        switch (ErmesManager.CurrentSearchType) {
            case ErmesManager.SearchType.List: serviceBaseUrl = "/" + CFInstance + "/Ermes/Recherche/Search.svc/Search";
                $.address.value("Search/" + encodeURIComponent(JSON.stringify(this.Query)));
                break;
            case ErmesManager.SearchType.Detail: serviceBaseUrl = "/" + CFInstance + "/Ermes/Recherche/Search.svc/GetRecord";
                $.address.value("Detail/" + encodeURIComponent(JSON.stringify(this.Query)));
                break;
            default: break;
        }

        var callback = function (json) {
            ErmesManager.ExternalChange = false; //Hack pour ?viter de d?clencher l'event $.address.externalChange 2 fois si la query contient un quote (bug)

            if (!ErmesManager.checkResponse(json)) {
                $.extend(self.Query.query, self.PreviousQuery.query); //Rollback de la requ?te
                return true;
            }

            self.Query.query = json.d.Query;
            self.Result = json.d.Results || json.d.Result;
            self.Info = json.d.SearchInfo || json.d.Infos;
            if (ErmesManager.isDefined(json.d.FriendlyTitleResults)) {
                self.FriendlyTitleResults = json.d.FriendlyTitleResults;
            }

            $container.html(json.d.HtmlResult);

            $(self).trigger("searchCompleted", $container);

            /*
            if (ErmesManager.CurrentSearchType === ErmesManager.SearchType.List && ErmesManager.isDefined(self.Query.query.FacetFilter)) {
                // Affichage des filtres par facettes utilis?s lors de la recherche
                var facetFilters = JSON.parse(self.Query.query.FacetFilter);
                for (var i in facetFilters) {
                    $("#criteres_recherche").children("ul").append("<li id=\"facet" + i + "\"><a href=\"#\"><span>" + facetFilters[i] + "<span class=\"facet_remove\"></span></span></a></li>");
                }
            }*/

            return false;
        };

        // Pas de fadeout en recherche asynchrone
        if (ErmesManager.isNullOrEmpty(this.Info.PazPar2Info) || this.Info.PazPar2Info.ActiveClients === 0) {
            $container.fadeTo(0, 0.7);
        }

        //Detruire les tooltips pr?c?dents
        $("ul.notice > li").qtip("destroy");
        //Detruire le smoothDivScroll pr?c?dent
        $("div#images_scroll").smoothDivScroll("destroy");

        ajaxSearch = $.ajax(
	    {
	        url: serviceBaseUrl,
	        data: JSON.stringify(this.Query),
	        success: callback
	    });
    };
};

//H?rite de 'BaseForm' (common.js)
ErmesManager.Form.prototype = ErmesManager.BaseForm;
ErmesManager.Form.prototype.parent = ErmesManager.BaseForm;
ErmesManager.Form.prototype.constructor = ErmesManager.Form;

/////////////////////////////////////////////////////////
// Sous-module 'event'
ErmesManager.event = (function (pub) {

    var old_onSearchComplete = pub.onSearchComplete; //H?ritage

    pub.onSearchComplete = function (event, $container) {
        var self = this;



        if (ErmesManager.CurrentSearchType !== ErmesManager.SearchType.Detail) {
            var $items = $("div.notice_courte", "#resultats");

            // Calcul des groupes s?mantiques
            if (ErmesManager.isDefined(ErmesManager.Cloud) && this.Info.NBResults > 10 && !ErmesManager.isDefined(this.Info.PazPar2Info)) {
                ErmesManager.Cloud.computeTagCloud(this.Query.query.QueryString);
            }

            $.each(this.Result, function (index, value) {
                $($items[index]).data("result", value);
            });

            ErmesManager.initTooltips($container);

            // Gestion sp?cifique PazPar2
            if (ErmesManager.isDefined(this.Info.PazPar2Info)) {
                if (ErmesManager.isDefined(this.CurrentTimeout)) {
                    clearTimeout(this.CurrentTimeout);
                }
                if (this.Info.PazPar2Info.ActiveClients > 0) {
                    //$("#SearchContext").addClass("chargement_async");
                    $("#global_contenu > div.PORTAL_LAYOUT").addClass("chargement_async");
                    this.CurrentTimeout = setTimeout(function () { self.doSearch($($container)); }, 1000);
                }
                else { //Plus de client actif
                    //$("#SearchContext").removeClass("chargement_async");
                    $("#global_contenu > div.PORTAL_LAYOUT").removeClass("chargement_async");

                    // call holdings
                    this.getHoldings($container);
                }
            }
            else { //Cas d'une recherche Solr
                $("#global_contenu > div.PORTAL_LAYOUT").removeClass("chargement_async");
                // call holdings
                this.getHoldings($container);
            }

            // Navigation th?matique
            var navigationTargetDiv = $("div#lexiconsTargetDiv");
            if (navigationTargetDiv.length != 0) {
                sScenario = this.Query.query.ScenarioCode;
                idesiaNavigator = new IdesiaNavigator();
                idesiaNavigator.init();
            }

        }
        else { //Detail
            $("#notice_longue").data("result", self.Result);


            var dataJson = null;
            if (ErmesManager.isDefined(self.Result.Resource)) {
                dataJson = { Record: { RscId: self.Result.Resource.RscId, Docbase: self.Result.Resource.RscBase, PazPar2Id: self.Query.query.Id }, searchQuery: self.Query.query.SearchQuery };
            }

            if (ErmesManager.isDefined(dataJson)) {
                this.getHoldingsFull($container, dataJson);
            }

            var $form = ErmesManager.findClosestContainer($container);
            var data = $form.data("form");

            if (data.EnrichmentLoaded === false) {
                var title = ErmesManager.isDefined(data.Result.More.Title) ? data.Result.More.Title : null;
                var author = ErmesManager.isDefined(data.Result.More.Author) ? data.Result.More.Author : null;
                var isbn = ErmesManager.isDefined(data.Result.More.Isbn) ? data.Result.More.Isbn : null;
                var isbnList = ErmesManager.isDefined(data.Result.More.IsbnList) ? data.Result.More.IsbnList : null;
                var ean = ErmesManager.isDefined(data.Result.More.Ean) ? data.Result.More.Ean : null;
                var format = ErmesManager.isDefined(data.Result.More.Format) ? data.Result.More.Format : null;


                var query = { query: { Title: title, Author: author, Isbn: isbn, Ean: ean, Format: format, IsbnList: isbnList} };

                data.getEnrichment($container, query);
            }

            $("div#images_scroll").smoothDivScroll({ visibleHotSpots: "always" });

            //SmoothDivScroll (pour les titres amis)
            ErmesManager.afterImgLoad("#images_scroll img", function () {
                $("div#images_scroll").smoothDivScroll("recalculateScrollableArea");
                $("div#images_scroll").smoothDivScroll("showHotSpotBackgrounds");
            });

            //qTip sur les titres amis
            $("img", "div#images_scroll").each(function (i, el) {
                $(this).qtip({
                    content: data.FriendlyTitleResults[i].CustomResult,
                    position: {
                        my: 'top left',
                        at: 'bottom left',
                        viewport: $(window),
                        adjust: { x: 4, y: 0 }
                    },
                    style: {
                        classes: 'ui-tooltip-light ui-tooltip-shadow ui-tooltip-ermes' // Inherit from preset style
                    },
                    show: { solo: true },
                    hide: { fixed: true }
                });
            });

            //Addthis
            if (typeof (addthis) !== 'undefined' && this.Result.Resource !== 'undefined') {
                addthis.toolbox(".addthis_toolbox");
            }
            else {
                $("li.partager_document, li.like_document", "#document_actions").remove();
            }
        }

        // Execution fancybox sur contenu ajax
        $("a.fancybox", $container).fancybox({ ajax: { type: 'GET'} });

        // Restaure la transparence ? 0
        $($container).fadeTo(0, 1);

        // Scroll top
        window.scrollTo(0, 0);

        if (ErmesManager.searchTitle || ErmesManager.detailTitle) {
            switch (ErmesManager.CurrentSearchType) {
                case ErmesManager.SearchType.List: $.address.title(ErmesManager.searchTitle.replace("{0}", this.Query.query.SearchLabel || this.Query.query.QueryString || "Formulaire")); break;
                case ErmesManager.SearchType.Detail:
                    if (ErmesManager.isDefined(this.Result.Resource)) {
                        $.address.title(ErmesManager.detailTitle.replace("{0}", this.Result.Resource.Ttl));
                    }
                    break;
                default: break;
            }
        }

        old_onSearchComplete(event, $container);
    };

    return pub;
} (ErmesManager.event));

/////////////////////////////////////////////////////////
// Sous-module 'callback'

ErmesManager.callback.list = (function (pub) {

    pub.displayMoreFacet = function () {
        var $this = $(this);
        var $facetContainer = $this.closest("ul.facetList");

        $facetContainer.find("li.facet-item-hidden").attr("class", "facet-item");
        $facetContainer.find("a.facet-see-more").hide();
        $facetContainer.find("a.facet-see-less").show();

        return false;
    },
    pub.displayLessFacet = function () {
        var $this = $(this);
        var $facetContainer = $this.closest("ul.facetList");

        $facetContainer.find("li.facet-item").attr("class", "facet-item-hidden");
        $facetContainer.find("a.facet-see-less").hide();
        $facetContainer.find("a.facet-see-more").show();

        return false;
    },
    //Ajout d'un filtre par facette
    pub.addFacetFilter = function () {
        var $container = ErmesManager.findClosestContainer(this);
        var $this = $(this);
        var data = $container.data("form");
        var facetId = $this.closest("ul.facetList").attr("id");
        var facetLabel = $this.find("span.facetLabel").find("span.facetValue").text();
        var parsedFacetFilter = {};

        if (ErmesManager.isDefined(data.Query.query.FacetFilter)) {
            parsedFacetFilter = JSON.parse(data.Query.query.FacetFilter);
        }

        parsedFacetFilter["_" + facetId] = facetLabel; //Chrome workaround : eviter le tri automatique de l'objet json en rendant impossible la conversion de facetId en entier (ajout d'un '_')

        data.Query.query.ForceSearch = true;
        $.extend(data.PreviousQuery.query, data.Query.query); //Deep-clone
        data.Query.query.FacetFilter = JSON.stringify(parsedFacetFilter);
        data.Query.query.Page = 0;

        data.doSearch($container);
        return false;
    };

    //Suppression d'un filtre par facette
    pub.removeFacetFilter = function () {
        var $container = ErmesManager.findClosestContainer(this);
        var $this = $(this);
        var data = $container.data("form");
        var facetId = $this.closest("li").attr("id").substr(5);

        var parsedFacetFilter = JSON.parse(data.Query.query.FacetFilter);
        parsedFacetFilter = ErmesManager.isDefined(parsedFacetFilter) ? parsedFacetFilter : {};
        delete parsedFacetFilter[facetId];

        data.Query.query.ForceSearch = true;
        $.extend(data.PreviousQuery.query, data.Query.query); //Deep-clone
        data.Query.query.FacetFilter = JSON.stringify(parsedFacetFilter);
        data.Query.query.Page = 0;

        data.doSearch($container);
        return false;
    };

    //Suppression query string
    pub.removeQueryString = function () {
        var $container = ErmesManager.findClosestContainer(this);
        var data = $container.data("form");

        data.Query.query.QueryString = "*:*";
        data.doSearch($container);
        return false;
    };

    //Changement de tri
    pub.setSortField = function () {
        var $container = ErmesManager.findClosestContainer(this);
        var data = $container.data("form");

        var newSortField = $(this).attr("data-id");

        // Init
        if (typeof (data.Query.query.SortField) == "undefined") {
            data.Query.query.SortField = "";
        }

        if (data.Query.query.SortField === newSortField) {
            // On a recliqu? sur le m?me tri : changement d'ordre de tri
            data.Query.query.SortOrder = (data.Query.query.SortOrder === 1) ? 0 : 1;
        }
        else {
            // On a cliqu? sur un autre tri que le tri courant : on change de tri
            data.Query.query.SortField = newSortField;
            if (typeof ($(this).attr("data-sort")) == 'undefined') {
                data.Query.query.SortOrder = (newSortField === "" || newSortField === "YearOfPublication_sort") ? 0 : 1;    // On trie par d?faut en d?croissant sur la pertinence et la date, ? l'inverse des autrs champs
            }
            else {
                data.Query.query.SortOrder = $(this).attr("data-sort") == '0' ? 0 : 1;
            }
        }
        data.Query.query.SortField = $(this).attr("data-id");
        data.doSearch($container);

        return false;
    };

    pub.showTemplateEdit = function () {
        var $this = $(this);
        $this.closest("div.notice_courte").find("div.templateContainer").show();

        return false;
    };

    pub.spellChecking = function () {
        var $this = $(this);
        var query = $this.find("span").text();
        ErmesManager.CurrentSearchType = ErmesManager.SearchType.List;
        ErmesManager.Cloud.Data = "";
        var textfield = $("#textfield");
        textfield.val(query);
        ErmesManager.callback.common.search(textfield, { QueryString: query, ResultSize: ErmesManager.getCookieValue(ErmesManager.COOKIES_FORM, "resultSize", 10), Grid: null, ScenarioCode: $("#globalScenario").val(), ForceSearch: true, CloudTerms: [], SearchLabel: "" });
        return false;
    };

    return pub;
} (ErmesManager.callback.list || {}));

ErmesManager.callback.detail = (function (pub) {

    pub.getDetail = function () {
        if (ErmesManager.CurrentSearchType === ErmesManager.SearchType.Detail) { //En cas d'un double-clic sur une notice dans la liste courte...
            return;
        }
        ErmesManager.CurrentSearchType = ErmesManager.SearchType.Detail;
        var $container = ErmesManager.findClosestContainer(this);
        var $this = $(this);
        var data = $container.data("form");
        var recordQuery = {};
        //2 cas : Solr & Pz2
        var index = $this.closest("li").index();
        var recordIndex = $this.closest("li").find("div.notice_courte").siblings("span.numerotation").text();

        //PAZPAR2
        if (ErmesManager.isDefined(data.Result[index].Recid)) {
            recordQuery = { query: { Id: data.Result[index].Recid, Index: parseInt(recordIndex, 10), NBResults: data.Info.NBResults, SearchQuery: data.Query.query} };
        }
        //SOLR
        else {
            recordQuery = { query: { Id: parseInt(recordIndex, 10) - 1, Index: parseInt(recordIndex, 10), NBResults: data.Info.NBResults, SearchQuery: data.Query.query} };
        }

        data.Query = recordQuery;
        data.doSearch($container);
    };

    pub.previousItem = function () {
        var $container = ErmesManager.findClosestContainer(this);
        var data = $container.data("form");

        if (data.Query.query.Index <= 1)
            return false;

        var recordQuery = { query: {} };
        $.extend(recordQuery.query, data.Query.query); //Deep-clone
        recordQuery.query.Id = data.Info.PreviousId;

        if (!ErmesManager.isDefined(recordQuery.query.Id)) {
            return false;
        }

        recordQuery.query.Index--;
        data.Query = recordQuery;
        data.doSearch($container);

        return false;
    };

    pub.nextItem = function () {
        var $container = ErmesManager.findClosestContainer(this);
        var data = $container.data("form");

        if (data.Query.query.Index >= data.Query.query.NBResults)
            return false;

        var recordQuery = { query: {} };
        $.extend(recordQuery.query, data.Query.query); //Deep-clone
        recordQuery.query.Id = data.Info.NextId;

        if (!ErmesManager.isDefined(recordQuery.query.Id)) {
            return false;
        }

        recordQuery.query.Index++;
        data.Query = recordQuery;
        data.doSearch($container);

        return false;
    };

    pub.backToSearch = function () {
        var $container = ErmesManager.findClosestContainer(this);
        data = $container.data("form");
        $.extend(data.Query.query, data.Query.query.SearchQuery);
        ErmesManager.CurrentSearchType = ErmesManager.SearchType.List;
        data.doSearch($container);
        return false;
    };

    return pub;
} (ErmesManager.callback.detail || {}));

ErmesManager.callback.selection = (function (pub) {

    pub.toggleDetailIntoSelection = function () {
        var data = ErmesManager.findClosestContainer(this).data("form");
        var item = data.Result.Resource;
        ErmesManager.selection.addItem(item);
        return false;
    };

    return pub;
} (ErmesManager.callback.selection || {}));

/////////////////////////////////////////////////////////
// Bindings & Init
$(function () {


    /////////////////////////////////////////////////////////
    // Bindings communs

    // Cablage ?venement jquery.Address (deep-linking ajax)
    $.address.externalChange(function (event) {

        if (event.pathNames.length > 0 && !ErmesManager.ExternalChange) {
            var $container = $("div.searchContainer");
            var data = $container.data("form");
            var q = JSON.parse(event.pathNames[1]);
            if (data.Query.query.SearchLabel === "") {
                $("#textfield").val(q.query.QueryString).removeClass("blur");
            }

            switch (event.pathNames[0]) {
                case 'Search': ErmesManager.CurrentSearchType = ErmesManager.SearchType.List; break;
                case 'Detail': ErmesManager.CurrentSearchType = ErmesManager.SearchType.Detail; break;
                default: return false;
            }

            $.address.title(ErmesManager.loadingTitle || "Ermes - Chargement");

            data.Query = q;
            data.doSearch($container);
        }

        return true;
    });

    // Chargement de la s?lection flottante
    ErmesManager.selection.load();

    //Initialisation tagCloud
    ErmesManager.Cloud = new ErmesManager.TagCloud("#tag_cloud");
    ErmesManager.Cloud.initialize("#textfield");

    //Init search Container
    $("div.searchContainer").data("form", new ErmesManager.Form());

    //Binding toggle bouton d?tail selection
    $("a.bouton_detail").live("click", ErmesManager.callback.selection.toggleSelection);

    //Binding show tag form
    $("div.themes a.plus").live("click", ErmesManager.callback.tag.showTagForm);

    //Binding ajout de tags
    $("div.themes ul.tagit_container_tag").live("keypress", ErmesManager.callback.tag.addTag);
    $("div.themes a.tagit_ok").live("click", function () { var e = jQuery.Event("keypress"); e.keyCode = 13; $(this).closest("ul.tagit_container_tag").trigger(e); return false; });

    //Catch submit event
    $("#main_search_form").live("submit", function () {
        var textfield = $("#textfield");
        ErmesManager.StopAutocompletion = true;
        ErmesManager.CurrentSearchType = ErmesManager.SearchType.List;
        ErmesManager.Cloud.Data = "";
        textfield.autocomplete("close");
        ErmesManager.callback.common.search(textfield, { ResultSize: ErmesManager.getCookieValue(ErmesManager.COOKIES_FORM, "resultSize", 10), Grid: null, ScenarioCode: $("#globalScenario").val(), ForceSearch: true, CloudTerms: [], SearchLabel: "" });
        return false;
    });

    //Binding toggle comment form
    $("div.actions a.donner_avis").live("click", ErmesManager.callback.comment.showAddCommentForm);

    //Binding ajout panier
    $("div.actions a.memoriser").live("click", ErmesManager.callback.basket.addToBasket);

    //Binding suppression du panier
    $("div.actions a.oublier").live("click", ErmesManager.callback.basket.removeFromBasket);

    /////////////////////////////////////////////////////////
    // Bindings liste

    //Binding show selection form
    $("div.selections a.plus", "#resultats").live("click", ErmesManager.callback.ofSelection.showSelectionsForm);

    //Binding ajout item selection
    $("div.select > input:checkbox", "#resultats").live("click", ErmesManager.callback.selection.toggleItemIntoSelection);

    //Binding page pr?c?dente
    $("a.precedent", "#resultats_recherche").live("click", ErmesManager.callback.pagination.previousPage);

    //Binding page suivante
    $("a.suivant", "#resultats_recherche").live("click", ErmesManager.callback.pagination.nextPage);

    //Binding filtre par facette
    $("li", "ul.facetList").live("click", ErmesManager.callback.list.addFacetFilter);

    //Binding changement de page
    $("a.page_link", "#resultats_recherche").live("click", ErmesManager.callback.pagination.changePage);

    // Binding changement de la taille de pagination
    $("#pageSize").live("change", ErmesManager.callback.pagination.changeResultSize);

    //Binding suppression filtre par facette
    $("span.facet_remove").live("click", ErmesManager.callback.list.removeFacetFilter);

    $("a.facet-see-more", "#options_resultat").live("click", ErmesManager.callback.list.displayMoreFacet);
    $("a.facet-see-less", "#options_resultat").live("click", ErmesManager.callback.list.displayLessFacet);
    //Binding suppression terme de recherche
    //$("span.query_remove").live("click", ErmesManager.callback.list.removeQueryString);

    //Binding catch link event
    $("#criteres_recherche > ul > li > a > span").live("click", function () { return false; });

    //Binding hover sur notice
    $("ul.notice > li", "#resultats").live("mouseenter", ErmesManager.callback.common.hoverResult);

    //Binding suppression de s?lections openfind sur une ressource
    $("div.selections a.supp", "#resultats").live("click", ErmesManager.callback.ofSelection.removeSelectionResource);

    //Binding suppression de tag openfind sur une ressource
    $("div.themes a.supp").live("click", ErmesManager.callback.tag.removeTagResource);

    //Binding Empty
    $("a.jaime", "#resultats").live("click", function () { return false; });

    //Binding Empty
    $("a.telecharger", "#resultats").live("click", function () { return false; });

    //Binding changement de tri
    $("div#criteres_tri a", "#resultats_recherche").live("click", ErmesManager.callback.list.setSortField);

    //Binding affichage d?tail
    $("div.notice_courte div.notice_corps", "#resultats").live("click", function (e) {
        //On affiche pas le d?tail lors d'un clic sur une ancre.
        if ($(e.target).is("a")) {
            return;
        } else {
            ErmesManager.callback.detail.getDetail.apply(this, arguments);
        }
    });
    $("div.vignette_document", "#resultats").live("click", ErmesManager.callback.detail.getDetail);

    //Binding ?dition template (apparition du conteneur)
    $("a.EditTemplate", "#resultats").live("click", ErmesManager.callback.list.showTemplateEdit);

    //Binding checkbox selectionner toute la page
    $("#check_all").live("change", function () { if ($(this).attr("checked")) { ErmesManager.callback.selection.checkAll(this); } else { ErmesManager.callback.selection.uncheckAll(this); } });

    //Binding clic sur spellcheck
    $("#spellcheck_link").live("click", ErmesManager.callback.list.spellChecking);

    //Capturer la recherche
    $("#capture_search").live("click", ErmesManager.callback.capture.captureSearch);

    //Capturer la zone de recherche
    $("#capture_search_area").live("click", ErmesManager.callback.capture.captureSearchArea);

    //Capturer le formulaire avanc?
    $("#capture_search_grid").live("click", ErmesManager.callback.capture.captureSearchGrid);

    /////////////////////////////////////////////////////////
    // Bindings d?tail

    //Binding show selection form
    $("div.selections a.plus", "#notice_longue").live("click", ErmesManager.callback.ofSelection.showSelectionsForm);

    //Binding ajout item selection
    $("li.ajouter_selection > a", "#document_actions").live("click", ErmesManager.callback.selection.toggleDetailIntoSelection);

    //Binding page pr?c?dente
    $("a.precedent", "#resultats_detail").live("click", ErmesManager.callback.detail.previousItem);

    //Binding page suivante
    $("a.suivant", "#resultats_detail").live("click", ErmesManager.callback.detail.nextItem);

    //Binding onglet
    $("li a:not(.on)", "#onglets").live("click", ErmesManager.callback.detail.showTab);

    //Binding onglet on (catch)
    $("li a.on", "#onglets").live("click", function () { return false; });

    //Binding suppression d'un commentaire
    $("a.delete_comment", "#avis_lecteurs").live("click", ErmesManager.callback.comment.invalidateComment);

    //Binding validation d'un commentaire
    $("a.enable_comment", "#avis_lecteurs").live("click", ErmesManager.callback.comment.validateComment);

    //Binding rediger avis
    $("li.rediger_avis > a", "#document_actions").live("click", function () { $("#notice_longue").find("a.donner_avis").trigger("click"); return false; });

    //Binding retour r?sultats recherche
    $("a", "#lien").live("click", ErmesManager.callback.detail.backToSearch);
    $("span.back_to_search > a", "#ariane").live("click", ErmesManager.callback.detail.backToSearch);

    //Lancement appli CDRom
    $("#ermesLauncher").live("click", ErmesManager.launchAppli);
});


// [EOF] for file search_list.js

// file: tagcloud.js

var ErmesManager = (function (pub) {

    return pub;
} (ErmesManager || {}));

ErmesManager.TagCloud = function (container) {
    this.History = [];
    this.Databases = {};
    this.Container = container;
    this.TextField = {};
    this.Data = '';

    var keepHistory = false;

    this.initialize = function (textField) {
        var self = this;

        self.TextField = textField;

        $.getJSON("/" + CFInstance + "/Ermes/Recherche/Lumen.svc/GetDatabases", null, function (data) {
            self.Databases = data;
            self.loadTemplate();
        });

        $("a.previous_tag").live('click', function () {
            self.History.pop();
            updateTextField();
        });

        // Evenements sur anchor tagCloud
        $("ul.tag_list a", $(this.Container)).live('click', function () {

            // Si event clic, on ajoute le concept cliqu? ? l'historique et on relance une recherche
            self.History.push({
                name: $(this).text(),
                id: self.History.length
            });

            updateTextField();
        });

        $("ul.tag_list a", $(this.Container)).live('hover', function () {
            $("ul.tag_list a").removeClass("highlight");
            $("." + $(this).attr("class")).toggleClass("highlight");

        });

        $("span.tag_term_remove", "#criteres_recherche").live('click', function () {
            removeHistoryTerm($(this).siblings("span.tag_term:first").text());
            updateTextField();
        });

        function updateTextField() {
            // Relancer recherche
            var histoSearch = [];
            var histoLength = self.History.length;

            // Tjs intersection
            for (var i = 1; i < histoLength; i++) {
                histoSearch.push(self.History[i].name);
            }

            keepHistory = true;
            self.Data = "";

            var $container = ErmesManager.findClosestContainer(container);
            var data = $container.data("form");
            data.Query.query.CloudTerms = histoSearch;
            data.Query.query.Page = 0;
            data.doSearch($container);
        };

        function removeHistoryTerm(term) {
            for (var i = 0; i < self.History.length; ++i) {
                if (self.History[i].name === term) {
                    self.History.splice(i, 1);
                    return true;
                }
            }
            return false;
        };
    };



    this.computeTagCloud = function (query) {


        if (query === "" || query === $(this.TextField).attr("title")) {
            return;
        }
        else {
            if (this.Data !== "") {
                this.loadTemplate();
            }
            else {
                if (!keepHistory) {
                    this.History = [];
                    var searchTerms = query;
                    this.History.push({
                        name: $.trim(searchTerms),
                        id: 0
                    });
                }
                else {
                    keepHistory = false;
                }

                var searchedConcept = "";

                for (var i = 0; i < this.History.length; ++i) {
                    searchedConcept += this.History[i].name + " ";
                }

                //                $.getJSON("/TagCloudService/Service.svc/GetGroups", {
                //                    "searchedConcept": $.trim(searchedConcept),
                //                    "nbGroups": 5,
                //                    "nbConcepts": 5,
                //                    "dbName": "Base1"
                //                }, function (data, statut) {
                //                    self.Data = data;
                //                    self.loadTemplate();
                //                });

                var self = this;
                var query = "searchedConcept=" + $.trim(searchedConcept) + "&nbGroups=5&nbConcepts=10&dbName=Base1";
                var callback = function (data, statut) {
                    /*
                    if (!ErmesManager.checkResponse(data)) {
                    return;
                    }
                    */
                    if (typeof (data.success) != "undefined" && data.success == false) {
                        return;
                    }
                    self.Data = data;
                    self.loadTemplate();
                };

                $.ajax({
                    type: "GET",
                    async: true,
                    url: "/" + CFInstance + "/Ermes/Recherche/Lumen.svc/GetGroups",
                    data: query,
                    success: callback
                });
            }
        }
    };

    this.loadTemplate = function () {

        var item = {
            Histo: this.History,
            Tags: this.Data
        };

        $(this.Container).html($("#tagCloudTmpl").tmpl(item));
    };
};

// [EOF] for file tagcloud.js

//package loaded!
packages.complete('BAM_ERMES_SEARCH');

// Served in 251 ms