(function(J) {

    J.organicTabs = function(el, options) {
    
        var base = this;
        base.Jel = J(el);
        base.Jnav = base.Jel.find(".nav");
                
        base.init = function() {
        
            base.options = J.extend({},J.organicTabs.defaultOptions, options);
            
            // Accessible hiding fix
            J(".hide").css({
                "position": "relative",
                "top": 0,
                "left": 0,
                "display": "none"
            }); 
            
            base.Jnav.delegate("li > a", "click", function() {
            
                // Figure out current list via CSS class
                var curList = base.Jel.find("a.current").attr("href").substring(1),
                
                // List moving to
                    JnewList = J(this),
                    
                // Figure out ID of new list
                    listID = JnewList.attr("href").substring(1),
                
                // Set outer wrapper height to (static) height of current inner list
                    JallListWrap = base.Jel.find(".list-wrap"),
                    curListHeight = JallListWrap.height();
                JallListWrap.height(curListHeight);
                                        
                if ((listID != curList) && ( base.Jel.find(":animated").length == 0)) {
                                            
                    // Fade out current list
                    base.Jel.find("#"+curList).fadeOut(base.options.speed, function() {
                        
                        // Fade in new list on callback
                        base.Jel.find("#"+listID).fadeIn(base.options.speed);
                        
                        // Adjust outer wrapper to fit new list snuggly
                        var newHeight = base.Jel.find("#"+listID).height();
                        JallListWrap.animate({
                            height: newHeight
                        });
                        
                        // Remove highlighting - Add to just-clicked tab
                        base.Jel.find(".nav li a").removeClass("current");
                        JnewList.addClass("current");
                            
                    });
                    
                }   
                
                // Don't behave like a regular link
                // Stop propegation and bubbling
                return false;
            });
            
        };
        base.init();
    };
    
    J.organicTabs.defaultOptions = {
        "speed": 300
    };
    
    J.fn.organicTabs = function(options) {
        return this.each(function() {
            (new J.organicTabs(this, options));
        });
    };
    
})(jQuery);
