﻿(function($) {

    $.fn.collapsible = function(head, content, options) {
        var defaults = {
            defaultExpanded: 0,
            expandedIndexRow: -1,
            selectedClass: "selected-collapse",
            slideSpeed: "fast"
        };
        
        var settings = $.extend(defaults, options||{});

        return this.each(function() {
            
            var jqContainer = this.className == "" ? this : $("." + this.className);
            var jqHeading = $("." + head, this);
            var jqContent = $("." + content, this).hide();
            jqContainer.find("." + content + "." + settings.selectedClass).show();  
                  
            //make sure that the expanded row specified exists
            if (settings.expandedIndexRow >= 0 && jqContainer.length > settings.expandedIndexRow) {
                //check if this row is configured to be expanded by default
                if (jqContainer.index(this) == settings.expandedIndexRow) {
                    //make sure that the specified collapse set exists
                    if (settings.defaultExpanded >= 0 && settings.defaultExpanded < jqContent.length) {
                        jqContent.eq(settings.defaultExpanded).show().addClass(settings.selectedClass);
                        jqHeading.eq(settings.defaultExpanded).addClass(settings.selectedClass);
                    }
                }
            }
            else {
                if (settings.defaultExpanded >= 0 && settings.defaultExpanded < jqContent.length && jqContainer.find("." + settings.selectedClass).length == 0) {
                    jqContent.eq(settings.defaultExpanded).show().addClass(settings.selectedClass);
                    jqHeading.eq(settings.defaultExpanded).addClass(settings.selectedClass);
                }
           }

            //collapse function
            jqHeading.click(function() {
                var setIndex = $("." + head, this.parentNode).index(this);

                jqHeading.removeClass(settings.selectedClass);
                jqContent.removeClass(settings.selectedClass);

                jqContent.animate({height: "hide", opacity:"hide"}, settings.slideSpeed, "swing")
                    .eq(setIndex).animate({height: "show", opacity:"show"}, settings.slideSpeed, "swing"); 

                jqHeading.eq(setIndex).addClass(settings.selectedClass);
                jqContent.eq(setIndex).addClass(settings.selectedClass);

                return false;

            });
        });
    };

})(jQuery);
