Go4Expert

Go4Expert (http://www.go4expert.com/)
-   Web Design, HTML And CSS Forums (http://www.go4expert.com/forums/web-design-forum/)
-   -   Help with 2 level tab menu (http://www.go4expert.com/forums/help-2-level-tab-menu-t11254/)

bigalo 10Jun2008 22:18

Help with 2 level tab menu
 
Hello,

I'm stuck and would like some help. I have a horizontal tab structure with subtabs. Right now the main tabs are activated onclick and they show their respective subtabs. I would like to add the same functionality to the subtabs so that when they are clicked, the style changes and the clicked subtab shows as active. I would also like to have the cookies applied to the subtabs and subtab contents as well. Can anyone please help?

Code:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Untitled Document</title>
<style type="text/css">
        body{
                font-family: Trebuchet MS, Lucida Sans Unicode, Arial, sans-serif;
                margin-top:0px;
                                       
        }
        .bodyText{
                padding-left:10px;
                padding-right:10px;
                border-top:1px solid #000000;       
        }
        .bodyText p{
                margin-top:5px;
        }
        #mainContainer{
                width:760px;
                height:600px;
                border:1px solid #000000;
                margin:0 auto;
                background-image:url('../../images/heading3.gif');
                background-repeat:no-repeat;
                padding-top:85px;                       
        }
        #mainMenu{
                background-color: #FFF;        /* Background color of main menu */
                font-family: Trebuchet MS, Lucida Sans Unicode, Arial, sans-serif;        /* Fonts of main menu items */
                font-size:0.9em;        /* Font size of main menu items */
                border-bottom:1px solid #000000;        /* Bottom border of main menu */
                height:30px;        /* Height of main menu */
               
                position:relative;        /* Don't change this position attribute */
               
        }
        #mainMenu a{
                padding-left:5px;        /* Spaces at the left of main menu items */
                padding-right:5px;        /* Spaces at the right of main menu items */
                font-weight:bold;
                /* Don't change these two options */
                position:absolute;
                bottom:-1px;        /* Change this value to -2px if you're not using a strict doctype */
        }
        #submenu{               
                font-family: Trebuchet MS, Lucida Sans Unicode, Arial, sans-serif;        /* Font  of sub menu items */
                background-color:#E2EBED;        /* Background color of sub menu items */
               
                width:100%;        /* Don't change this option */
               
        }       
        #submenu div{
                white-space:nowrap;        /* Don't change this option */
               
        }
        /*
        Style attributes of active menu item
        */
        #mainMenu .activeMenuItem{
                /* Border options */
                border-left:1px solid #000000;
                border-top:1px solid #000000;
                border-right:1px solid #000000;               
                background-color: #E2EBED;        /* Background color */
               
                cursor:pointer;       
        }
       
        #mainMenu .activeMenuItem img{
                position:absolute;
                bottom:0px;
                right:0px;
        }
               
        #mainMenu .inactiveMenuItem{               
                color: #000;
                cursor:pointer;       
        }
       
        #submenu a{       
                text-decoration:none;       
                padding-left:5px;       
                padding-right:5px;
                color: #000;       
                font-size:0.9em;
        }
       
        #submenu a:hover{
                color: #FF0000;        /* Red color when the user moves the mouse over sub menu items */
        }
       
        </style>
<script type="text/javascript">

        var menuAlignment = 'left';        // Align menu to the left or right?               
        var topMenuSpacer = 0; // Horizontal space(pixels) between the main menu items       
        var activateSubOnClick = false; // if true-> Show sub menu items on click, if false, show submenu items onmouseover
        var leftAlignSubItems = false;        // left align sub items t
       
        var activeMenuItem = false;        // Don't change this option. It should initially be false
        var activeTabIndex = 0;        // Index of initial active tab        (0 = first tab) - If the value below is set to true, it will override this one.
        var rememberActiveTabByCookie = true;        // Set it to true if you want to be able to save active tab as cookie
       
        var MSIE = navigator.userAgent.indexOf('MSIE')>=0?true:false;
        var Opera = navigator.userAgent.indexOf('Opera')>=0?true:false;
        var navigatorVersion = navigator.appVersion.replace(/.*?MSIE ([0-9]\.[0-9]).*/g,'$1')/1;
               

        function Get_Cookie(name) {
          var start = document.cookie.indexOf(name+"=");
          var len = start+name.length+1;
          if ((!start) && (name != document.cookie.substring(0,name.length))) return null;
          if (start == -1) return null;
          var end = document.cookie.indexOf(";",len);
          if (end == -1) end = document.cookie.length;
          return unescape(document.cookie.substring(len,end));
        }
        // This function has been slightly modified
        function Set_Cookie(name,value,expires,path,domain,secure) {
                expires = expires * 60*60*24*1000;
                var today = new Date();
                var expires_date = new Date( today.getTime() + (expires) );
            var cookieString = name + "=" +escape(value) +
              ( (expires) ? ";expires=" + expires_date.toGMTString() : "") +
              ( (path) ? ";path=" + path : "") +
              ( (domain) ? ";domain=" + domain : "") +
              ( (secure) ? ";secure" : "");
            document.cookie = cookieString;
        }       
       
        function showHide()
        {
                if(activeMenuItem){
                        activeMenuItem.className = 'inactiveMenuItem';       
                        var theId = activeMenuItem.id.replace(/[^0-9]/g,'');
                        document.getElementById('submenu_'+theId).style.display='none';
                        var img = activeMenuItem.getElementsByTagName('IMG');
                        if(img.length>0)img[0].style.display='none';                       
                }

                var img = this.getElementsByTagName('IMG');
                if(img.length>0)img[0].style.display='inline';
                               
                activeMenuItem = this;               
                this.className = 'activeMenuItem';
                var theId = this.id.replace(/[^0-9]/g,'');
                document.getElementById('submenu_'+theId).style.display='block';
               

                               
                if(rememberActiveTabByCookie){
                        Set_Cookie('dhtmlgoodies_tab_menu_tabIndex','index: ' + (theId-1),100);
                }
        }
       
        function initMenu()
        {
                var mainMenuObj = document.getElementById('mainMenu');
                var menuItems = mainMenuObj.getElementsByTagName('A');
                if(document.all){
                        mainMenuObj.style.visibility = 'hidden';
                        document.getElementById('submenu').style.visibility='hidden';
                }               
                if(rememberActiveTabByCookie){
                        var cookieValue = Get_Cookie('dhtmlgoodies_tab_menu_tabIndex') + '';
                        cookieValue = cookieValue.replace(/[^0-9]/g,'');
                        if(cookieValue.length>0 && cookieValue<menuItems.length){
                                activeTabIndex = cookieValue/1;
                        }                       
                }
               
                var currentLeftPos = 15;
                for(var no=0;no<menuItems.length;no++){                       
                        if(activateSubOnClick)menuItems[no].onclick = showHide; else menuItems[no].onmouseover = showHide;
                        menuItems[no].id = 'mainMenuItem' + (no+1);
                        if(menuAlignment=='left')
                                menuItems[no].style.left = currentLeftPos + 'px';
                        else
                                menuItems[no].style.right = currentLeftPos + 'px';
                        currentLeftPos = currentLeftPos + menuItems[no].offsetWidth + topMenuSpacer;
                       
                        var img = menuItems[no].getElementsByTagName('IMG');
                        if(img.length>0){
                                img[0].style.display='none';
                                if(MSIE && !Opera && navigatorVersion<7){
                                        img[0].style.bottom = '-1px';
                                        img[0].style.right = '-1px';
                                }
                        }
                                               
                        if(no==activeTabIndex){
                                menuItems[no].className='activeMenuItem';
                                activeMenuItem = menuItems[no];
                                var img = activeMenuItem.getElementsByTagName('IMG');
                                if(img.length>0)img[0].style.display='inline';       
                                                       
                        }else menuItems[no].className='inactiveMenuItem';
                        if(!document.all)menuItems[no].style.bottom = '-1px';
                        if(MSIE && navigatorVersion < 6)menuItems[no].style.bottom = '-2px';
                       

                }               
               
                var mainMenuLinks = mainMenuObj.getElementsByTagName('A');
               
                var subCounter = 1;
                var parentWidth = mainMenuObj.offsetWidth;
                while(document.getElementById('submenu_' + subCounter)){

                        var subItem = document.getElementById('submenu_' + subCounter);
                       
                        if(leftAlignSubItems){
                                // No action
                        }else{                                                       
                                var leftPos = mainMenuLinks[subCounter-1].offsetLeft;
                                document.getElementById('submenu_'+subCounter).style.paddingLeft =  leftPos + 'px';
                                subItem.style.position ='absolute';
                                if(subItem.offsetWidth > parentWidth){
                                        leftPos = leftPos - Math.max(0,subItem.offsetWidth-parentWidth);       
                                }
                                subItem.style.paddingLeft =  leftPos + 'px';
                                subItem.style.position ='static';
                                       
                               
                        }
                        if(subCounter==(activeTabIndex+1)){
                                subItem.style.display='block';
                        }else{
                                subItem.style.display='none';
                        }
                       
                        subCounter++;
                }
                if(document.all){
                        mainMenuObj.style.visibility = 'visible';
                        document.getElementById('submenu').style.visibility='visible';
                }               
                document.getElementById('submenu').style.display='block';
        }
        window.onload = initMenu;       
        </script>
</head>
<body>
  <!-- This is the start of the menu -->
  <div id="mainMenu">
    <a>Products</a> <a>Support</a> <a>About us</a> <a>Download</a>
  </div>
  <div id="submenu">
    <!-- The first sub menu -->
    <div id="submenu_1">
      <a href="javascript:void(0);">Product 1</a> <a href="javascript:void(0);">Product 2</a> <a href="javascript:void(0);">Product 3</a>
    </div>
    <!-- Second sub menu -->
    <div id="submenu_2">
      <a href="javascript:void(0);">Phone</a> <a href="javascript:void(0);">Email</a> <a href="javascript:void(0);">Knowledge base</a>
    </div>
    <!-- Third sub menu -->
    <div id="submenu_3">
      <a href="javascript:void(0);">History</a> <a href="javascript:void(0);">The team</a> <a href="javascript:void(0);">Contact us</a> <a href="javascript:void(0);">Visions</a>
    </div>
    <!-- Fourth sub menu -->
    <div id="submenu_4">
      <a href="javascript:void(0);">Patches</a> <a href="javascript:void(0);">Whitepapers</a> <a href="javascript:void(0);">Tab menu</a> <a href="javascript:void(0);">Color picker</a> <a href="javascript:void(0);">Window scripts</a> <a href="javascript:void(0);">Games</a>
    </div>
  </div>
</body>
</html>


kosstr12 13Aug2008 06:57

Re: Help with 2 level tab menu
 
Honestly, The only way you'll learn this effectively is if you stop using templates and learn CSS/JavaScript, and everything about the languages.


All times are GMT +5.5. The time now is 16:14.