﻿(function() {
    if (typeof (this.ModuleSchedulePublic.Search) == "undefined") {
        this.ModuleSchedulePublic.Search = {};
    }
    if (typeof (this.ModuleSchedulePublic.Search.FilterBar) == "undefined") {
        this.ModuleSchedulePublic.Search.FilterBar = {};
    }

    //Choix d'un filtre
    ModuleSchedulePublic.Search.FilterBar.SetFilter = function(selected, filterName, optionValue, optionText, deleteLinkLabel) {

        var sessionForm = document.getElementById('sessionForm');
        var filterType = document.getElementById(filterName);
        if ((filterType == null) || (typeof (filterType) == 'undefined')) {
            filterType = document.createElement('input');
            filterType.type = 'hidden';
            filterType.id = filterName;
            filterType.name = filterName;
            sessionForm.appendChild(filterType);
            filterType.value = optionValue;
        } else {
            if (filterType.value != '') {
                filterType.value += ',';
            }
            filterType.value += optionValue;
        }

        //création d'un objet filtre
        ModuleSchedulePublic.Search.FilterBar.CreateFilterElement(selected.id, filterName, optionValue, optionText, deleteLinkLabel);

        //désactivation de la liste des filtres
        selected.className = 'mFilterItemHidden';

        //rafraichissement de la liste
        ModuleSchedulePublic.RefreshSessionList();

    }

    //ajout du filtre selectionné à la liste des filtres choisis
    ModuleSchedulePublic.Search.FilterBar.CreateFilterElement = function(selectedId, filterName, filterValue, optionText, deleteLinkLabel) {

        //la div conteneur
        var chosenFilterContainer = document.createElement('li');
        chosenFilterContainer.id = 'containerFilterItem' + filterValue;

        //le span d'affichage du titre du filtre
        var chosenFilter = document.createElement('span');
        chosenFilter.innerHTML = optionText;
        chosenFilter.className = 'mChosenFilterLabel';
        chosenFilterContainer.appendChild(chosenFilter);

        //le lien de suppression du filtre
        var chosenFilterDelete = document.createElement('a');
        chosenFilterDelete.innerHTML = deleteLinkLabel;
        chosenFilterDelete.href = '#';
        chosenFilterDelete.className = 'mDeleteFilterLink';
        dojo.connect(chosenFilterDelete, 'onclick', dojo.hitch(this, "DeleteFilterItem", selectedId, filterName, filterValue));
        chosenFilterContainer.appendChild(chosenFilterDelete);

        //ajout de la div conteneur
        var chosenItem = document.getElementById('chosenItem_' + filterName);
        chosenItem.appendChild(chosenFilterContainer);

    }

    //supprime le filtre de la liste
    ModuleSchedulePublic.Search.FilterBar.DeleteFilterItem = function(selectedId, filterName, filterValue) {

        //suppression de l'affichage du filtre
        var chosenFilterContainer = document.getElementById('containerFilterItem' + filterValue);
        var chosenItem = document.getElementById('chosenItem_' + filterName);
        chosenItem.removeChild(chosenFilterContainer);

        //suppression du filtre dans le champ hidden
        var activesFilters = document.getElementById(filterName).value.split(',');
        activesFilters = ModuleSchedulePublic.Search.FilterBar.RemoveItem(activesFilters, filterValue);
        var filterType = document.getElementById(filterName);
        filterType.value = activesFilters.join(',');

        //réactivation dans la liste de sélection
        var selected = document.getElementById(selectedId);
        selected.className = 'mFilterItem';

        //rafraichissement de la liste
        ModuleSchedulePublic.RefreshSessionList();
    }

    ModuleSchedulePublic.Search.FilterBar.ToggleFilterItems = function(filterId) {
        var filterItemsContainer = document.getElementById('filterItems_' + filterId);
        if (filterItemsContainer.className == 'mFilterItemsHidden') {
            filterItemsContainer.className = 'mFilterItemsDisplayed';
        } else {
            filterItemsContainer.className = 'mFilterItemsHidden';
        }
    }

    //remove item (string or number) from an array
    ModuleSchedulePublic.Search.FilterBar.RemoveItem = function(originalArray, itemToRemove) {
        var j = 0;
        while (j < originalArray.length) {
            if (originalArray[j] == itemToRemove) {
                originalArray.splice(j, 1);
            } else { j++; }
        }
        return originalArray;
    }

})();