
//*** This library is copyright 2004 by Gavin Kistner, gavin@refinery.com

//*** It is covered under the license viewable at http://phrogz.net/JS/_ReuseLicense.txt

//*** Reuse or modification is free provided you abide by the terms of that license.

//*** (Including the first two lines above in your source code mostly satisfies the conditions.)

 

//*** Tabtastic -- see http://phrogz.net/JS/Tabstatic/index.html

//*** Version 1.0 20040430 Initial release.

//*** 1.0.2 20040501 IE5Mac, IE6Win compat.

//*** 1.0.3 20040501 Removed IE5Mac/Opera7 compat. (see http://phrogz.net/JS/Tabstatic/index.htmlnotes)

//*** 1.0.4 20040521 Added scroll-back hack to prevent scrolling down to page anchor. Then commented out :)

//*** 1.0.5 20061017 Added code to change the href of a tab to "javascript:void(o);" to get rid of the nasty browsers habbit of jumping to odd parts of the screen when clicking a tab. (Added by Cees-Jan Kiewiet aka WyriHaximus (http://www.wyrihaximus.net)).

 

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){

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.tabContent) tab.tabTOC.activeTab.tabContent.style.display='';

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.tabContent) tab.tabContent.style.display='block';

if (tab.prevTab) AddClass(tab.prevTab,'preActive');

if (tab.nextTab) AddClass(tab.nextTab,'postActive');

}

function SetTabFromAnchor(evt){

//setTimeout('document.body.scrollTop='+document.body.scrollTop,1);

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);

a.href="javascript:void(0);";

}

}


if ((match=anchorMatch.exec(location.href)) && (a=everyTabThereIsById[match[1]])) SetTabActive(a);


//Comment out the next line and include the file directly if you need IE5Mac or Opera7 support.

AddStyleSheet('/files/0/17/tabtastic.css',0);

}

Init();

},false);
