/*global $*/

var MJ = MJ || {};

MJ.Controllers = MJ.Controllers || {};

/**
 * Controller for the gallery
 */
MJ.Controllers.Gallery = (function () {
    var elements = {},
        lightboxArray = [],
        view;
        
    /**
     * Creates hash of array triggers and required data
     *
     * @private
     */
    function createLightboxArray() {
        var triggers = elements.triggers,
            currentTrigger,
            position,
            i,
            triggersLength = triggers.length;
            
        for (i = 0; i < triggersLength; i += 1) {
            currentTrigger = $(triggers[i]);
            currentTrigger.data('key', i);
            position = i + 1;
            lightboxArray.push({
                alt : currentTrigger.attr('data-alt'),
                image : currentTrigger.attr('data-image'),
                licencing : currentTrigger.attr('data-licencing'),
                permalink : currentTrigger.attr('href'),
                position : 'Image ' + position + ' of ' + triggersLength,
                title : currentTrigger.attr('data-title')
            });
        }
    }
    
    /**
     * Makes gallery links open the correct lightbox image
     */
    function enableTriggers() {
        
        elements.rootNode.bind('click', function (e) {
            var trigger = $(e.target);

            if ((trigger.is('a')) || (trigger.is('img'))) {
                trigger = trigger.closest('a');
                view.showInterstitial();            
                view.reveal(lightboxArray, trigger.data('key'));
            }
            e.preventDefault();
        });
    }
    
    /**
     * Initialises the controller for the search input field
     *
     * @public
     */
    function init() {        
        elements.rootNode = $('#gallery');
        elements.triggers = elements.rootNode.find('a');
        if (elements.rootNode.length > 0) {
            view = new MJ.Views.Gallery(MJ.Controllers.Gallery, elements);
            view.createDOM();
        }
    }
    
    /**
     * Enables lightbox functionality
     *
     * @public
     */
    function enableLightbox() {
        createLightboxArray();
        enableTriggers();
    }
    
    return {
        enableLightbox  : enableLightbox,
        init            : init
    };
}());

MJ.Controllers.Gallery.init();
