/**
 * "Surligne" automatiquement des liens en se basant sur un de leur parametre
 * Par defaut regle pour aider sur les articles WLP (cherche des id de IdDocs)
 */
LinkHighlighter = Class.create();

LinkHighlighter.prototype = {
    /**
     * Cree l'objet LinkHighlighter suivant les options passée optionnellement en parametre
     * @constructor
     * @param {Array of DOMElements} [_highlightableElements] liste des élements (qui doivent etre etendu par prototype, donc passage par $ pour chacun ou $$ pour faire le tableau) surlignable. Tous les liens de la page par défaut.
     * @param {String} [_cssClass] classe CSS activant le surlignage(doit correspondre a une vrai classe CSS). "highlight" par défaut.
     * @param {Function} [_rule] fonction prenant l'element et la valeur à tester en parametre, retourne vrai pour dire qu'il faut higlighter l'element.
     * @param {String} [_defaultValue] valeur a tester  si non precisee lors de l'appel a highlight.
     */
    initialize: function(_highlightableElements, _cssClass, _rule, _defaultValue){
        this.highlightableElements = _highlightableElements || $$("A");
        this.cssClass = _cssClass || "highlight";
        this.rule = _rule ||
        function(element, value){
            return element.hasParameterValue("idDoc", value);
        };
        this.defaultValue = _defaultValue || "0";
        this.lastValue = this.defaultValue;
    },
    /**
     * Nettoie toute les surlignage sur les objets surveilles
     */
    clean: function(){
        this.highlightableElements.invoke("removeClassName", this.cssClass);
    },
    /**
     * Surligne les objets correspondant au parametre.
     * @param {Object} [_value] Valeur a tester par la regle. Utilise la valeur par defaut si non precise.
     */
    highlight: function(_value){
        this.lastValue = _value || this.lastValue;
        
        var checkRule = function(e){
            if (this.rule(e, this.lastValue) && !e.hasClassName(this.cssClass)) 
                e.addClassName(this.cssClass)
        }
.bind(this);
        
        this.highlightableElements.each(checkRule);
    },
    /**
     * Nettoie et surligne
     * @param {Object} [_value]
     * @see LinkHighlighter.clean
     * @see LinkHighlighter.highlight
     */
    refresh: function(_value){
        this.clean();
        this.highlight(_value);
    }
}

