var jQuery = jQuery || {};
var bm = bm || {};

bm.toggleContent = (function ($) {
    var ToggleContent = function (element, options) {
        this.$element = $(element);
        this.init();
    }

    ToggleContent.VERSION = '1.0.1';

    ToggleContent.DEFAULTS = {
        filter: {}
    };

    ToggleContent.prototype.init = function () {
        this.$element.addClass('toggleContent');
        addEvents.call(this);
        //this.update();
    };


    var addEvents = function () {
        var self = this;
        //this.$element.on('click', 'a.js-toggleContent--hide', hideContent);
        this.$element.on('click', 'a', function(e){e.stopPropagation()});
        this.$element.on('click', clickHandler);
    }


    var hideContent = function(e) {
        var changeClass =   'toggleContent--open';
        var $parent = $(this).closest('.'+changeClass);
        $parent
            .removeClass(changeClass)
            .trigger('hideItem.bm.toggleContent');
        e.preventDefault();
        e.stopPropagation();
    }


    var clickHandler = function(e){
        var changeClass =   'toggleContent--open';
        var $this = $(this);
        var group = $($this).attr('data-group');
        var $groupItems = $('.js-toggleContent[data-group='+group+']');
        // change size of item via class
        if ($this.hasClass(changeClass)){
            $this.removeClass(changeClass)
                .trigger('hideItem.bm.toggleContent');
        } else {
            $groupItems.filter('.'+changeClass)
                .removeClass(changeClass)
                .trigger('hideItem.bm.toggleContent');
            $this
                .addClass(changeClass)
                .trigger('openItem.bm.toggleContent');
        }
        e.preventDefault();
    }


    // ToggleContent PLUGIN DEFINITION
    // ==========================

    function Plugin(option) {
        return this.each(function () {
            var $this = $(this);
            var pluginData = $this.data('bm.filterTrigger');

            if (!pluginData) {
                var options = $.extend({}, ToggleContent.DEFAULTS, $this.data(), typeof option === 'object' && option);

                pluginData = new ToggleContent(this, options);
                $this.data('bm.toggleContent', pluginData);
            } else {
                if (typeof option === 'string') {
                    pluginData[option]();
                } else {
                    pluginData.update(option);
                }
            }
        });
    }

    var old = $.fn.toggleContent;

    $.fn.toggleContent = Plugin;
    $.fn.toggleContent.Constructor = ToggleContent;


    // Contentfilter NO CONFLICT
    // ====================

    $.fn.toggleContent.noConflict = function () {
        $.fn.toggleContent = old;
        return this;
    };
}(jQuery));
