Need to hide a div with javascript!

Discussion in 'JavaScript' started by cscott5288, Jun 16, 2009.

  1. #1
    Hi,

    I am using this great little dynamic drive mouse over tab script: http://www.dynamicdrive.com/dynamicindex1/mouseovertabs.htm and have encountered a minor problem.

    I want the lower sub menu to only display when I mouseover the main menu. Right now the menu items on the sub menu are hidden when there is no mouseover, but I want the entire gray block sub menu to be hidden, unless there is a mouseover of one of the main menu items.

    Is there a simple way to do this by altering the javascript? Or maybe creating a new one to toggle the div visible/invisible on mouseover?

    Here is the Javascript:

    //Mouseover Tabs Menu: By http://www.dynamicdrive.com
    //** Aug 4th, 08': Script creation date
    
    var mouseovertabsmenu={
    
    disappeardelay: 250, //set delay in miliseconds before sub menu disappears onmouseout
    ajaxloadingmsg: 'Loading Sub Menu Contents...', //Message to show inside sub menu while fetching contents
    
    ///////No need to edit beyond here//////////////////////
    
    tabsmenutree:{},
    
    initializetabs:function(tabsmenuid, submenuid, tabcontentsLength, disappearBool){
    	var tabmenu=document.getElementById(tabsmenuid)
    	var tablinks=tabmenu.getElementsByTagName("a")
    	var submenu=document.getElementById(submenuid)
    	var selected=null, tablinks_count=0
    	for (var i=0; i<tablinks.length; i++){
    		tablinks[i]._parentid=tabsmenuid
    		var relattr=tablinks[i].getAttribute("rel")
    		if (/^gotsubmenu/i.test(relattr) && tablinks_count<tabcontentsLength){ //if "rel" attribute starts with="gotsubmenu" and a tab content exists for this tab based on its order
    			tablinks[i]._pos=tablinks_count //remember position of this tab relative to its active peers
    			if (relattr.indexOf("[selected]")!=-1){
    				selected=tablinks_count
    			}
    			this.addEvent(tablinks[i], function(){
    				var tabsmenutree=mouseovertabsmenu.tabsmenutree[this._parentid]
    				mouseovertabsmenu.clearhidetimer(tabsmenutree.submenu.hidetimer)
    				mouseovertabsmenu.showsubmenu(this)
    			}, "mouseover")
    			tablinks_count++
    			this.tabsmenutree[tabsmenuid].tabs.push(tablinks[i]) //add this tab to tab collection
    		}
    		else{ //else for regular tab links (with no "rel" attribute)
    			this.addEvent(tablinks[i], function(){
    				mouseovertabsmenu.hidesubmenu(this._parentid)
    			}, "mouseover")
    		}
    	}
    	this.addEvent(submenu, function(e){
    		mouseovertabsmenu.clearhidetimer(this.hidetimer)
    	}, "mouseover")
    	if (disappearBool==true){
    		this.addEvent(submenu, function(e){ //hide submenu contents when mouse rolls out of submenu DIV
    			if (!mouseovertabsmenu.isContained(this, e)){
    				var cursubmenuobj=this
    				this.hidetimer=setTimeout(function(){mouseovertabsmenu.hidesubmenu(cursubmenuobj._parentid)}, mouseovertabsmenu.disappeardelay)
    			}
    		}, "mouseout")
    	}
    	var urlselected=this.urlparamselect(tabsmenuid)
    	//return position of selected tab (relative to its peers), or null
    	return typeof urlselected=="number"? urlselected : document.getElementById(urlselected)? document.getElementById(urlselected)._pos : selected
    },
    
    ajaxload:function(tabsmenuid, submenuid, disappearBool, url){
    	var page_request = false
    	if (window.ActiveXObject){ //Test for support for ActiveXObject in IE first (as XMLHttpRequest in IE7 is broken)
    		try {
    		page_request = new ActiveXObject("Msxml2.XMLHTTP")
    		} 
    		catch (e){
    			try{
    			page_request = new ActiveXObject("Microsoft.XMLHTTP")
    			}
    			catch (e){}
    		}
    	}
    	else if (window.XMLHttpRequest) // if Mozilla, Safari etc
    		page_request = new XMLHttpRequest()
    	else
    		return false
    	var tabsmenutree=this.tabsmenutree[tabsmenuid]
    	tabsmenutree.submenu.innerHTML=this.ajaxloadingmsg
    	var ajaxfriendlyurl=url.replace(/^http:\/\/[^\/]+\//i, "http://"+window.location.hostname+"/") 
    	page_request.onreadystatechange=function(){
    		mouseovertabsmenu.ajaxpopulate(page_request, tabsmenuid, submenuid, disappearBool, ajaxfriendlyurl)
    	}
    	var bustcache=(ajaxfriendlyurl.indexOf("?")!=-1)? "&"+new Date().getTime() : "?"+new Date().getTime()
    	page_request.open('GET', ajaxfriendlyurl+bustcache, true)
    	page_request.send(null)
    },
    
    ajaxpopulate:function(page_request, tabsmenuid, submenuid, disappearBool, url){
    	if (page_request.readyState == 4 && (page_request.status==200 || window.location.href.indexOf("http")==-1)){
    		var tabsmenutree=this.tabsmenutree[tabsmenuid]
    		tabsmenutree.submenu.innerHTML=page_request.responseText
    		var innerdivs=tabsmenutree.submenu.getElementsByTagName("div")
    		for (var i=0; i<innerdivs.length; i++){
    			if (/tabsmenucontent/i.test(innerdivs[i].className)){
    				tabsmenutree.submenu_divs.push(innerdivs[i])
    			}
    		}
    		var selected=this.initializetabs(tabsmenuid, submenuid, tabsmenutree.submenu_divs.length, disappearBool)
    		if (selected!=null && selected<tabsmenutree.submenu_divs.length){
    			innerdivs[selected].style.display="block"
    			this.css(tabsmenutree.tabs[selected], "selected", "add")
    			tabsmenutree.submenu._prevselected=selected
    		}
    	}
    },
    
    showsubmenu:function(linkobj){
    	var tabsmenutree=this.tabsmenutree[linkobj._parentid]
    	this.hidesubmenu(linkobj._parentid)
    	var selected=parseInt(linkobj._pos)
    	tabsmenutree.submenu_divs[selected].style.display="block"
    	this.css(tabsmenutree.tabs[selected], "selected", "add")
    	tabsmenutree.submenu._prevselected=selected
    },
    
    hidesubmenu:function(tabsmenuid){
    	var tabsmenutree=this.tabsmenutree[tabsmenuid]
    	var prevselectedindex=tabsmenutree.submenu._prevselected
    	if (typeof prevselectedindex!="undefined"){
    		tabsmenutree.submenu_divs[prevselectedindex].style.display="none"
    		this.css(tabsmenutree.tabs[prevselectedindex], "selected", "remove")
    	}
    },
    
    clearhidetimer:function(timerid){
    	if (timerid)
    		clearTimeout(timerid)
    },
    
    css:function(el, targetclass, action){
    	var needle=new RegExp("(^|\\s+)"+targetclass+"($|\\s+)", "ig")
    	if (action=="check")
    		return needle.test(el.className)
    	else if (action=="remove")
    		el.className=el.className.replace(needle, "")
    	else if (action=="add" && !needle.test(el.className))
    		el.className+=" "+targetclass
    },
    
    isContained:function(m, e){
    	var e=window.event || e
    	var c=e.relatedTarget || ((e.type=="mouseover")? e.fromElement : e.toElement)
    	while (c && c!=m)try {c=c.parentNode} catch(e){c=m}
    	if (c==m)
    		return true
    	else
    		return false
    },
    
    urlparamselect:function(tabsmenuid){
    	var result=window.location.search.match(new RegExp(tabsmenuid+"=(\\w+)", "i")) //check for "?tabsmenuid=id_or_pos_of_selected_tab" in URL
    	var selectedtabstr=RegExp.$1
    	return /^\d+$/.test(selectedtabstr)? parseInt(selectedtabstr) : selectedtabstr //return position or ID of selected tab (or null if niether found)
    },
    
    
    addEvent:function(target, functionref, tasktype){
    	if (target.addEventListener)
    		target.addEventListener(tasktype, functionref, false);
    	else if (target.attachEvent)
    		target.attachEvent('on'+tasktype, function(){return functionref.call(target, window.event)});
    },
    
    init:function(tabsmenuid, submenuid, disappearBool){
    	this.tabsmenutree[tabsmenuid]={} 
    	this.tabsmenutree[tabsmenuid].tabs=[] //array referencing the active tab links in this menu (ones with a "rel=gotsubmenu" attr)
    	this.tabsmenutree[tabsmenuid].submenu=null //reference submenu DIV for this menu
    	this.tabsmenutree[tabsmenuid].submenu_divs=[] //array referencing the submenu contents (external DIVs with class="tabsmenucontent")
    	var submenu=document.getElementById(submenuid)
    	submenu._parentid=tabsmenuid
    	this.tabsmenutree[tabsmenuid].submenu=submenu //remember this DIV as menu's submenu container
    	var remoteurl=submenu.getElementsByTagName("a")[0].getAttribute("href")
    	this.ajaxload(tabsmenuid, submenuid, disappearBool, remoteurl)
    }
    
    }
    
    document.write('<style type="text/css">\n.tabsmenucontent{display:none}\n</style>')
    Code (markup):
    I would appreciate any help because I am an absolute beginner when it comes to javascript!
     
    cscott5288, Jun 16, 2009 IP