troubleshooting Question

Javascript tab menu loading after Google Ads

Avatar of Jack
Jack asked on
JavaScript
7 Comments1 Solution120 ViewsLast Modified:
I utilized a tab menu written in HTML and CSS and running with javascript. The tab menu can be seen working here as DD Tab Menu. Everything works great except one issue: when I add Google Ads, it will not load until Google ads is loaded. The Google Ads is set 'async' so it is supposed to load last.

Usually one doesn't notice, however some times when there is a problem with the Google ads network, the tab menu will not load. I could not figure out why. The javascript for the tab menu is:

var tabmenu={
    disabletablinks: true, 
    snap2original: [false, 300], 

    currentpageurl: window.location.href.replace("http://"+window.location.hostname, "").replace(/^\//, ""), 

definemenu:function(tabid, dselected){
    this[tabid+"-menuitems"]=null
    this[tabid+"-dselected"]=-1
    this.addEvent(window, function(){tabmenu.init(tabid, dselected)}, "load")
},

showsubmenu:function(tabid, targetitem){
    var menuitems=this[tabid+"-menuitems"]
    this.clearrevert2default(tabid)
 for (i=0; i<menuitems.length; i++){
        menuitems[i].className=""
        if (typeof menuitems[i].hasSubContent!="undefined")
            document.getElementById(menuitems[i].getAttribute("rel")).style.display="none"
    }
    targetitem.className="current"
    if (typeof targetitem.hasSubContent!="undefined")
        document.getElementById(targetitem.getAttribute("rel")).style.display="block"
},

isSelected:function(menuurl){
    var menuurl=menuurl.replace("http://"+menuurl.hostname, "").replace(/^\//, "")
    return (tabmenu.currentpageurl==menuurl)
},

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
},

revert2default:function(outobj, tabid, e){
    if (!tabmenu.isContained(outobj, tabid, e)){
        window["hidetimer_"+tabid]=setTimeout(function(){
            tabmenu.showsubmenu(tabid, tabmenu[tabid+"-dselected"])
        }, tabmenu.snap2original[1])
    }
},

clearrevert2default:function(tabid){
 if (typeof window["hidetimer_"+tabid]!="undefined")
        clearTimeout(window["hidetimer_"+tabid])
},

addEvent:function(target, functionref, tasktype){ //assign a function to execute to an event handler (ie: onunload)
    var tasktype=(window.addEventListener)? tasktype : "on"+tasktype
    if (target.addEventListener)
        target.addEventListener(tasktype, functionref, false)
    else if (target.attachEvent)
        target.attachEvent(tasktype, functionref)
},

init:function(tabid, dselected){
    var menuitems=document.getElementById(tabid).getElementsByTagName("a")
    this[tabid+"-menuitems"]=menuitems
    for (var x=0; x<menuitems.length; x++){
        if (menuitems[x].getAttribute("rel")){
            this[tabid+"-menuitems"][x].hasSubContent=true
            if (tabmenu.disabletablinks)
                menuitems[x].onclick=function(){return false}
            if (tabmenu.snap2original[0]==true){
                var submenu=document.getElementById(menuitems[x].getAttribute("rel"))
                menuitems[x].onmouseout=function(e){tabmenu.revert2default(submenu, tabid, e)}
                submenu.onmouseover=function(){tabmenu.clearrevert2default(tabid)}
                submenu.onmouseout=function(e){tabmenu.revert2default(this, tabid, e)}
            }
        }
        else //for items without a submenu, add onMouseout effect
            menuitems[x].onmouseout=function(e){this.className=""; if (tabmenu.snap2original[0]==true) tabmenu.revert2default(this, tabid, e)}
        menuitems[x].onmouseover=function(){tabmenu.showsubmenu(tabid, this)}
        if (dselected=="auto" && typeof setalready=="undefined" && this.isSelected(menuitems[x].href)){
            tabmenu.showsubmenu(tabid, menuitems[x])
            this[tabid+"-dselected"]=menuitems[x]
            var setalready=true
        }
        else if (parseInt(dselected)==x){
            tabmenu.showsubmenu(tabid, menuitems[x])
            this[tabid+"-dselected"]=menuitems[x]
        }
    }
}
}

Any assistance is appreciated. Thanks in advance.
ASKER CERTIFIED SOLUTION
Jack

Our community of experts have been thoroughly vetted for their expertise and industry experience.

Join our community to see this answer!
Unlock 1 Answer and 7 Comments.
Start Free Trial
Learn from the best

Network and collaborate with thousands of CTOs, CISOs, and IT Pros rooting for you and your success.

Andrew Hancock - VMware vExpert
See if this solution works for you by signing up for a 7 day free trial.
Unlock 1 Answer and 7 Comments.
Try for 7 days

”The time we save is the biggest benefit of E-E to our team. What could take multiple guys 2 hours or more each to find is accessed in around 15 minutes on Experts Exchange.

-Mike Kapnisakis, Warner Bros