//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',
			after: false
        };

        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);
				
				if(options.after==false) {
				head=obj.children().eq(0)[0].nodeName; 				
				content=obj.children().eq(1)[0].nodeName;
				} else {
				head=obj.children().eq(1)[0].nodeName; 				
				content=obj.children().eq(0)[0].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;
                        }
                    }
                return false;
				});         
            });
    };
})(jQuery);
