/* 
* @name simplyTabs
* @version r1 _ 01.03.2009
*/
(function($)
{
    $.fn.simplyTabs = function(options)
    {

        // build main options before element iteration
        var opts = $.extend({}, $.fn.simplyTabs.defaults, options);
        // iterate and reformat each matched element
        return this.each(function()
        {

            var $tabContainer = $(this).addClass('simplyTabs');
            // build element specific options
            var o = $.meta ? $.extend({}, opts, $tabContainer.data()) : opts;

            if ($(o.tabsNavMenuSelector, $tabContainer).length > 0)
            {
                var $menu = $(o.tabsNavMenuSelector);
                $menu.addClass(o.tabsNavMenuClass);
                $('a', $menu).addClass(o.tabsNavMenuItemClass).each(function(index)
                {
                    var $thisMenuItem = $(this);
                    // check if this anchor targets an existing identifier
                    var panelSelector = this.hash;
                    var $panel = $(panelSelector);
                    if ($panel.length)
                    {
                        // if so, turn the element into a tab panel
                        $panel.addClass(o.tabsPanelClass);
                        // ... the link into a tab activator
                        $thisMenuItem.addClass(o.tabsNavMenuItemClass);
                        if (index == o.selectedTab)
                        {
                            $panel.addClass(o.visibleTabClass);
                            $thisMenuItem.addClass(o.selectedTabClass);
                        } else
                        {
                            $panel.addClass(o.invisibleTabClass);
                        }
                    }
                });
                // then assign tab (des)activation behavior to anchors
                $('a.' + o.tabsNavMenuItemClass).bind('click.simplyTabs', function(e)
                {
                    e.preventDefault();
                    var $this = $(this);
                    // switch panel
                    var selectedPanel = this.hash;

                    var $tabContainer = $(this).parents('.simplyTabs');
                    $('.' + o.tabsPanelClass, $tabContainer).removeClass(o.visibleTabClass).addClass(o.invisibleTabClass);
                    $(selectedPanel).addClass(o.visibleTabClass);
                    // update menu
                    $('a.' + o.tabsNavMenuItemClass, $tabContainer).removeClass(o.selectedTabClass);
                    $this.addClass(o.selectedTabClass);

                    if (jQuery.isFunction(o.onShow))
                    {

                        o.onShow.apply(this);

                    }

                });
            }
        });
    };

    //
    // plugin defaults
    //
    $.fn.simplyTabs.defaults = {
        tabsNavMenuSelector: 'ul.tabsNavMenu'
        , tabsNavMenuClass: 'tab-menu'
        , tabsPanelClass: 'tab-panel'
        , tabsNavMenuItemClass: 'tab-menu-item'
        , visibleTabClass: 'tab-visible'
        , invisibleTabClass: 'tab-hidden'
        , selectedTab: 1
        , selectedTabClass: 'tab-menu-item-selected'
        , onShow: null
    };
    //
    // end of closure
    //
})(jQuery);
