;
(function ($, window, document, undefined) {
    'use strict';

    Foundation.libs.accordion = {
        name: 'accordion',

        version: '5.5.0',

        settings: {
            content_class: 'content',
            active_class: 'active',
            multi_expand: false,
            toggleable: true,
            callback: function () {
            }
        },

        init: function (scope, method, options) {
            this.bindings(method, options);
        },

        events: function () {
            var self = this;
            var S = this.S;
            S(this.scope)
                .off('.fndtn.accordion')
                .on('click.fndtn.accordion', '[' + this.attr_name() + '] > .accordion-navigation > a', function (e) {
                    var accordion = S(this).closest('[' + self.attr_name() + ']'),
                        groupSelector = self.attr_name() + '=' + accordion.attr(self.attr_name()),
                        settings = accordion.data(self.attr_name(true) + '-init') || self.settings,
                        target = S('#' + this.href.split('#')[1]),
                        aunts = $('> .accordion-navigation', accordion),
                        siblings = aunts.children('.' + settings.content_class),
                        active_content = siblings.filter('.' + settings.active_class);

                    e.preventDefault();

                    if (accordion.attr(self.attr_name())) {
                        siblings = siblings.add('[' + groupSelector + '] dd > ' + '.' + settings.content_class);
                        aunts = aunts.add('[' + groupSelector + '] .accordion-navigation');
                    }

                    if (settings.toggleable && target.is(active_content)) {
                        target.parent('.accordion-navigation').toggleClass(settings.active_class, false);
                        target.toggleClass(settings.active_class, false);
                        settings.callback(target);
                        target.triggerHandler('toggled', [accordion]);
                        accordion.triggerHandler('toggled', [target]);
                        return;
                    }

                    if (!settings.multi_expand) {
                        siblings.removeClass(settings.active_class);
                        aunts.removeClass(settings.active_class);
                    }

                    target.addClass(settings.active_class).parent().addClass(settings.active_class);
                    settings.callback(target);
                    target.triggerHandler('toggled', [accordion]);
                    accordion.triggerHandler('toggled', [target]);
                });
        },

        off: function () {
        },

        reflow: function () {
        }
    };
}(jQuery, window, window.document));
