//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
    $.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){
                        switch(effect) {
                            case "slide":
                                obj
                                .children(head)
                                .toggleClass(aC)
                                .end()
                                .children(content)
                                .eq(ti).removeClass(aC).toggle(300);
                            break;
                            case "normal":
                                obj
                                .children(head)
                                .toggleClass(aC)
                                .end()
                                .children(content)
                                .eq(ti).removeClass(aC).toggle();
                            break;
                        }

                    //or set all to retract and expand single element
                    } 
                    
                    if (collapse==false) {
                        switch(effect){
                            case "slide":
                               obj
                               .parent()
                               .children('div')
                               .children(head)
                               .removeClass(aC)
                               .parent()
                               .children(content)
                               .slideUp();

                               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
                               .parent()
                               .children('div')
                               .children(head)
                               .removeClass(aC)
                               .parent()
                               .children(content)
                               .hide();

                               obj
                               .children(head)
                               .removeClass(aC)
                               .eq(ti)
                               .addClass(aC)
                               .end().end()
                               .children(content)
                               .removeClass(aC)
                               .hide()
                               .eq(ti)
                               .addClass(aC)
                               .show();

                           break;
                        }
                    }
                });         
            });
    };
