//ACCORDION
//© Websir(websir.co.uk)
//created by James Crockford on 19/11/09 22:37 GMT
//updated 03/12/09 22:27 GMT (added effects + innitial hide rather than slideup)
//
//DESCRIPTION
//sets up simple up/down accordion functionality
//
//VARIABLES
// effect = the jquery effect used in the animation of the content
// collapse = boolean - when the current header is clicked should it retract
// addsClass = classname to add to header & content when active

(function($) {
    $.fn.accordion = function(options){
        var defaults = {
            effect: "slide",
            collapse: true,
            addsClass: 'acc_current'
        };

        var options = $.extend(defaults, options);
        var head;
        var content;

        return this.each(function(i){
                var aC = options.addsClass;
                var effect=options.effect;
                var collapse=options.collapse;

                var obj=$(this);

                obj.children().each(function(i){
                    if(i==0)head=this.nodeName;
                    if(i==1)content=this.nodeName;
                });

                //hide the content
                obj.children(content).hide();

                //header click function
                obj.children(head).click(function(){
                    var ti = obj.children(head).index(this);

                    // if collapse is set and the element is current -> retract single element
                    if(collapse==true&&$(this).hasClass(aC)){
                        switch(effect) {
                            case "slide":
                                obj
                                .children(head)
                                .removeClass(aC)
                                .end()
                                .children(content)
                                .eq(ti).removeClass(aC).slideUp();
                            break;
                            case "normal":
                                obj
                                .children(head)
                                .removeClass(aC)
                                .end()
                                .children(content)
                                .eq(ti).removeClass(aC).hide();
                            break;
                        }

                    //or set all to retract and expand single element
                    } else {
                        switch(effect){
                            case "slide":
                               obj
                               .children(head)
                               .removeClass(aC)
                               .eq(ti)
                               .addClass(aC)
                               .end().end()
                               .children(content)
                               .removeClass(aC)
                               .slideUp()
                               .eq(ti)
                               .addClass(aC)
                               .slideDown();
                           break;
                           case "normal":
                               obj
                               .children(head)
                               .removeClass(aC)
                               .eq(ti)
                               .addClass(aC)
                               .end().end()
                               .children(content)
                               .removeClass(aC)
                               .hide()
                               .eq(ti)
                               .addClass(aC)
                               .show();
                           break;
                        }
                    }
                });         
            });
    };
})(jQuery);
