domtab={
    tabClass:'domtab',
    listClass:'domtabs',
    activeClass:'active',
    contentElements:'div',
    backToLinks:/#top/,
    printID:'domtabprintview',
    showAllLinkText:'show all content',
    prevNextIndicator:'doprevnext',
    prevNextClass:'prevnext',
    prevLabel:'previous',
    nextLabel:'next',
    prevClass:'prev',
    nextClass:'next',
    init:function(){
        var temp;
        if(!document.getElementById || !document.createTextNode){return;}
        var tempelm=document.getElementsByTagName('div');
        for(var i=0;i<tempelm.length;i++){
            if(!domtab.cssjs('check',tempelm[i],domtab.tabClass)){continue;}
            domtab.initTabMenu(tempelm[i]);
            domtab.removeBackLinks(tempelm[i]);
            if(domtab.cssjs('check',tempelm[i],domtab.prevNextIndicator)){
                domtab.addPrevNext(tempelm[i]);
            }
            domtab.checkURL();
        }
        if(document.getElementById(domtab.printID)
           && !document.getElementById(domtab.printID).getElementsByTagName('a')[0]){
            var newlink=document.createElement('a');
            newlink.setAttribute('href','#');
            domtab.addEvent(newlink,'click',domtab.showAll,false);
            newlink.onclick=function(){return false;}
            newlink.appendChild(document.createTextNode(domtab.showAllLinkText));
            document.getElementById(domtab.printID).appendChild(newlink);
        }
    },
    checkURL:function(){
        var id;
        var loc=window.location.toString();
        loc=/#/.test(loc)?loc.match(/#(\w.+)/)[1]:'';
        if(loc==''){return;}
        var elm=document.getElementById(loc);
        if(!elm){return;}
        var parentMenu=elm.parentNode.parentNode.parentNode;
        parentMenu.currentSection=loc;
        parentMenu.getElementsByTagName(domtab.contentElements)[0].style.display='none';
        domtab.cssjs('remove',parentMenu.getElementsByTagName('a')[0].parentNode,domtab.activeClass);
        var links=parentMenu.getElementsByTagName('a');
        for(i=0;i<links.length;i++){
            if(!links[i].getAttribute('href')){continue;}
            if(!/#/.test(links[i].getAttribute('href').toString())){continue;}
            id=links[i].href.match(/#(\w.+)/)[1];
            if(id==loc){
                var cur=links[i].parentNode.parentNode;
                domtab.cssjs('add',links[i].parentNode,domtab.activeClass);
                break;
            }
        }
        domtab.changeTab(elm,1);
        elm.focus();
        cur.currentLink=links[i];
        cur.currentSection=loc;
    },
    showAll:function(e){
        document.getElementById(domtab.printID).parentNode.removeChild(document.getElementById(domtab.printID));
        var tempelm=document.getElementsByTagName('div');
        for(var i=0;i<tempelm.length;i++){
            if(!domtab.cssjs('check',tempelm[i],domtab.tabClass)){continue;}
            var sec=tempelm[i].getElementsByTagName(domtab.contentElements);
            for(var j=0;j<sec.length;j++){
                sec[j].style.display='block';
            }
        }
        var tempelm=document.getElementsByTagName('ul');
        for(i=0;i<tempelm.length;i++){
            if(!domtab.cssjs('check',tempelm[i],domtab.prevNextClass)){continue;}
            tempelm[i].parentNode.removeChild(tempelm[i]);
            i--;
        }
        domtab.cancelClick(e);
    },
    addPrevNext:function(menu){
        var temp;
        var sections=menu.getElementsByTagName(domtab.contentElements);
        for(var i=0;i<sections.length;i++){
            temp=domtab.createPrevNext();
            if(i==0){
                temp.removeChild(temp.getElementsByTagName('li')[0]);
            }
            if(i==sections.length-1){
                temp.removeChild(temp.getElementsByTagName('li')[1]);
            }
            temp.i=i;
            temp.menu=menu;
            sections[i].appendChild(temp);
        }
    },
    removeBackLinks:function(menu){
        var links=menu.getElementsByTagName('a');
        for(var i=0;i<links.length;i++){
            if(!domtab.backToLinks.test(links[i].href)){continue;}
            links[i].parentNode.removeChild(links[i]);
            i--;
        }
    },
    initTabMenu:function(menu){
        var id;
        var lists=menu.getElementsByTagName('ul');
        for(var i=0;i<lists.length;i++){
            if(domtab.cssjs('check',lists[i],domtab.listClass)){
                var thismenu=lists[i];
                break;
            }
        }
        if(!thismenu){return;}
        thismenu.currentSection='';
        thismenu.currentLink='';
        var links=thismenu.getElementsByTagName('a');
        for(i=0;i<links.length;i++){
            if(!/#/.test(links[i].getAttribute('href').toString())){continue;}
            id=links[i].href.match(/#(\w.+)/)[1];
            if(document.getElementById(id)){
                domtab.addEvent(links[i],'click',domtab.showTab,false);
                links[i].onclick=function(){return false;}
                domtab.changeTab(document.getElementById(id),0);
            }
        }
        id=links[0].href.match(/#(\w.+)/)[1];
        if(document.getElementById(id)){
            domtab.changeTab(document.getElementById(id),1);
            thismenu.currentSection=id;
            thismenu.currentLink=links[0];
            domtab.cssjs('add',links[0].parentNode,domtab.activeClass);
        }
    },
    createPrevNext:function(){
        var temp=document.createElement('ul');
        temp.className=domtab.prevNextClass;
        temp.appendChild(document.createElement('li'));
        temp.getElementsByTagName('li')[0].appendChild(document.createElement('a'));
        temp.getElementsByTagName('a')[0].setAttribute('href','#');
        temp.getElementsByTagName('a')[0].innerHTML=domtab.prevLabel;
        temp.getElementsByTagName('li')[0].className=domtab.prevClass;
        temp.appendChild(document.createElement('li'));
        temp.getElementsByTagName('li')[1].appendChild(document.createElement('a'));
        temp.getElementsByTagName('a')[1].setAttribute('href','#');
        temp.getElementsByTagName('a')[1].innerHTML=domtab.nextLabel;
        temp.getElementsByTagName('li')[1].className=domtab.nextClass;
        domtab.addEvent(temp.getElementsByTagName('a')[0],'click',domtab.navTabs,false);
        domtab.addEvent(temp.getElementsByTagName('a')[1],'click',domtab.navTabs,false);
        temp.getElementsByTagName('a')[0].onclick=function(){return false;}
        temp.getElementsByTagName('a')[1].onclick=function(){return false;}
        return temp;
    },
    navTabs:function(e){
        var li=domtab.getTarget(e);
        var menu=li.parentNode.parentNode.menu;
        var count=li.parentNode.parentNode.i;
        var section=menu.getElementsByTagName(domtab.contentElements);
        var links=menu.getElementsByTagName('a');
        var othercount=(li.parentNode.className==domtab.prevClass)?count-1:count+1;
        section[count].style.display='none';
        domtab.cssjs('remove',links[count].parentNode,domtab.activeClass);
        section[othercount].style.display='block';
        domtab.cssjs('add',links[othercount].parentNode,domtab.activeClass);
        var parent=links[count].parentNode.parentNode;
        parent.currentLink=links[othercount];
        parent.currentSection=links[othercount].href.match(/#(\w.+)/)[1];
        domtab.cancelClick(e);
    },
    changeTab:function(elm,state){
        do{
            elm=elm.parentNode;
        } while(elm.nodeName.toLowerCase()!=domtab.contentElements)
        elm.style.display=state==0?'none':'block';
    },
    showTab:function(e){
        var o=domtab.getTarget(e);
        if(o.parentNode.parentNode.currentSection!=''){
            domtab.changeTab(document.getElementById(o.parentNode.parentNode.currentSection),0);
            domtab.cssjs('remove',o.parentNode.parentNode.currentLink.parentNode,domtab.activeClass);
        }
        var id=o.href.match(/#(\w.+)/)[1];
        o.parentNode.parentNode.currentSection=id;
        o.parentNode.parentNode.currentLink=o;
        domtab.cssjs('add',o.parentNode,domtab.activeClass);
        domtab.changeTab(document.getElementById(id),1);
        document.getElementById(id).focus();
        domtab.cancelClick(e);
    },
    getTarget:function(e){
        var target = window.event ? window.event.srcElement : e ? e.target : null;
        if (!target){return false;}
        if (target.nodeName.toLowerCase() != 'a'){target = target.parentNode;}
        return target;
    },
    cancelClick:function(e){
        if (window.event){
            window.event.cancelBubble = true;
            window.event.returnValue = false;
            return;
        }
        if (e){
            e.stopPropagation();
            e.preventDefault();
        }
    },
    addEvent: function(elm, evType, fn, useCapture){
        if (elm.addEventListener)
        {
            elm.addEventListener(evType, fn, useCapture);
            return true;
        } else if (elm.attachEvent) {
            var r = elm.attachEvent('on' + evType, fn);
            return r;
        } else {
            elm['on' + evType] = fn;
        }
    },
    cssjs:function(a,o,c1,c2){
        switch (a){
            case 'swap':
                o.className=!domtab.cssjs('check',o,c1)?o.className.replace(c2,c1):o.className.replace(c1,c2);
            break;
            case 'add':
                if(!domtab.cssjs('check',o,c1)){o.className+=o.className?' '+c1:c1;}
            break;
            case 'remove':
                var rep=o.className.match(' '+c1)?' '+c1:c1;
                o.className=o.className.replace(rep,'');
            break;
            case 'check':
                var found=false;
                var temparray=o.className.split(' ');
                for(var i=0;i<temparray.length;i++){
                    if(temparray[i]==c1){found=true;}
                }
                return found;
            break;
        }
    }
}
domtab.addEvent(window, 'load', domtab.init, false);
