

var Explanation = {
        
        
    enable: function(trigger, explanation) {
        // initially hide the explanation
        DOMUtil.addClass(explanation, "hidden");
        // show the explanation when the trigger is clicked
        EventHandling.addHandler(trigger, "click", function() {
            if (!DOMUtil.removeClass(explanation, "hidden")) {
                DOMUtil.addClass(explanation, "hidden");
            }
        });
        var closes = DOMUtil.getElementsByClassName(explanation, "close");
        for (var i = 0; i < closes.length; i++) {
            // hide the trigger when a close element is clicked
            EventHandling.addHandler(closes[i], "click", function() {
                DOMUtil.addClass(explanation, "hidden");
            });
        }
    }, // enable
    
    
    // enable explanation triggers in the new content
    enableExplanations: function(element) {
        var triggers = DOMUtil.getElementsByClassName(element, "trigger");
        for (var i = 0; i < triggers.length; i++) {
            // extract the subject name from the trigger ID
            var subject = triggers[i].id.replace(/_trigger$/, "");
            if (subject == triggers[i].id) {
                // malformed trigger name
                continue;
            }
            // find the explanation by subject name
            var explanation = document.getElementById(subject + "_explanation");
            if (explanation) {
                this.enable(triggers[i], explanation);
            }
        }
    }, // enableExplanations
    
    
    // respond to new content loaded into the specified content target
    loadedContent: function(loader) {
        this.enableExplanations(loader.element);
    }, // loadedContent
    
    
    // enables explanation initialization for the new loader
    addedContentLoader: function(loader) {
        this.loadedContent(loader);
        loader.addContentListener(this);
    }, // createdContentTarget
    
    
    // initializes the explanation management system
    initialize: function() {
        for (var i = 0; i < ContentLoader.rootLoaders.length; i++) {
            this.addedContentLoader(ContentLoader.rootLoaders[i]);
            ContentLoader.rootLoaders[i].addLoaderListener(this);
        }
    } // initialize
    

}; // Explanation


// initialize on load
EventHandling.executeOnLoad(function() { Explanation.initialize(); });

