AttachEvent(window,'load',function()

{
        var tocTag='ul',tocClass='tabset_tabs',tabTag='a',contentClass='tabset_content';

        function FindEl(tagName,evt)
        {
            if(!evt&&window.event)
                evt=event;

            if(!evt)
                return DebugOut("Can't find an event to handle in DLTabSet::SetTab",0);

            var el=evt.currentTarget||evt.srcElement;

            while(el&&(!el.tagName||el.tagName.toLowerCase()!=tagName))
                el=el.parentNode;
                
            return el;
        }

        function SetTabActive(tab)

        {
                ActiveTab = tab;

                var str = ActiveTab.toString();
                var lastpos = str.length - 1;

                SetTabs(str.charAt(lastpos));
                 
                if(tab.tabTOC.activeTab)
                {
                    if(tab.tabTOC.activeTab==tab)
                        return;

                    KillClass(tab.tabTOC.activeTab,'active');

                    if(tab.tabTOC.activeTab.tabContent)
                        KillClass(tab.tabTOC.activeTab.tabContent,'tabset_content_active');

                    if(tab.tabTOC.activeTab.prevTab)
                        KillClass(tab.tabTOC.activeTab.previousTab,'preActive');

                    if(tab.tabTOC.activeTab.nextTab)
                        KillClass(tab.tabTOC.activeTab.nextTab,'postActive');
                }

                AddClass(tab.tabTOC.activeTab=tab,'active');

                if(tab.tabContent)
                    AddClass(tab.tabContent,'tabset_content_active');

                if(tab.prevTab)
                    AddClass(tab.prevTab,'preActive');
                    
                if(tab.nextTab)
                    AddClass(tab.nextTab,'postActive');

        }

        function SetTabFromAnchor(evt)
        {
            SetTabActive(FindEl('a',evt).semanticTab);
        }

        function Init()
        {

            window.everyTabThereIsById={};
            
            var anchorMatch=/#([a-z][\w.:-]*)$/i,match;
            
            var activeTabs=[];
            
            var tocs=document.getElementsByTagName(tocTag);

            for(var i=0,len=tocs.length;i<len;i++)
            {

                var toc=tocs[i];

                if(!HasClass(toc,tocClass))continue;
                    var lastTab;

                var tabs=toc.getElementsByTagName(tabTag);

                for(var j=0,len2=tabs.length;j<len2;j++)
                {
                    var tab=tabs[j];
                    if(!tab.href||!(match=anchorMatch.exec(tab.href)))
                        continue;

                    if(lastTab)
                    {
                        tab.prevTab=lastTab;lastTab.nextTab=tab;
                    }

                    tab.tabTOC=toc;
                    everyTabThereIsById[tab.tabID=match[1]]=tab;
                    tab.tabContent=document.getElementById(tab.tabID);

                    if(HasClass(tab,'active'))
                        activeTabs[activeTabs.length]=tab;
                        
                    lastTab=tab; 
                }

                AddClass(toc.getElementsByTagName('li')[0],'firstchild');

            }

            for(var i=0,len=activeTabs.length;i<len;i++)
            {
                SetTabActive(activeTabs[i]);
            }

            for(var i=0,len=document.links.length;i<len;i++)
            {
                var a=document.links[i];
                
                if(!(match=anchorMatch.exec(a.href)))
                continue;
                
                if(a.semanticTab=everyTabThereIsById[match[1]])
                    AttachEvent(a,'click',SetTabFromAnchor,false);
            }

            if((match=anchorMatch.exec(location.href))&&(a=everyTabThereIsById[match[1]]))
                SetTabActive(a);
                
            AddStyleSheet('tabtastic.css',0);
                
            }

    Init();

}

,false);