1. We have moved from vBulletin to XenForo and you are viewing the site in the middle of the move. Though the functional aspect of everything is working fine, we are still working on other changes including the new design on Xenforo.
    Dismiss Notice

Help with 2 level tab menu

Discussion in 'Web Design, HTML And CSS Forums' started by bigalo, Jun 10, 2008.

  1. bigalo

    bigalo New Member

    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>
    
     
  2. kosstr12

    kosstr12 New Member

    Honestly, The only way you'll learn this effectively is if you stop using templates and learn CSS/JavaScript, and everything about the languages.
     

Share This Page