About
//** All Levels Navigational Menu- (c) Dynamic Drive DHTML code library: http://www.dynamicdrive.com
//** Script Download/ instructions page: http://www.dynamicdrive.com/dynamicindex1/ddlevelsmenu/
//** Usage Terms: http://www.dynamicdrive.com/notice.htm
//** Current version: 2.2 See changelog.txt for details
if (typeof dd_domreadycheck=="undefined") //global variable to detect if DOM is ready
var dd_domreadycheck=false;
var moveLeft={};
var moveUp={};
var ddlevelsmenu={
enableshim: false,//true, //enable IFRAME shim to prevent drop down menus from being hidden below SELECT or FLASH elements? (tip: disable if not in use, for efficiency)
arrowpointers:{
//downarrow: ["ddlevelsfiles/arrow-down.gif", 11,7], //[path_to_down_arrow, arrowwidth, arrowheight]
downarrow: ["ddlevelsfiles/spacer.gif", 0,0],
rightarrow: ["ddlevelsfiles/spacer.gif", 0,0],
//rightarrow: ["ddlevelsfiles/arrow-right.gif", 12,12], //[path_to_right_arrow, arrowwidth, arrowheight]
//showarrow: {toplevel: true, sublevel: true} //Show arrow images on top level items and sub level items, respectively?
showarrow: {toplevel: false, sublevel: false}
},
hideinterval: 500, //delay in milliseconds before entire menu disappears onmouseout.
effects: {enableswipe: false, enablefade: true, duration: 300},
//effects: {enableswipe: true, enablefade: true, duration: 200},
httpsiframesrc: "blank.htm", //If menu is run on a secure (https) page, the IFRAME shim feature used by the script should point to an *blank* page *within* the secure area to prevent an IE security prompt. Specify full URL to that page on your server (leave as is if not applicable).
///No need to edit beyond here////////////////////
topmenuids: [], //array containing ids of all the primary menus on the page
topitems: {}, //object array containing all top menu item links
subuls: {}, //object array containing all ULs
lastactivesubul: {}, //object object containing info for last mouse out menu item's UL
topitemsindex: -1,
ulindex: -1,
hidetimers: {}, //object array timer
shimadded: false,
nonFF: !/Firefox[\/\s](\d+\.\d+)/.test(navigator.userAgent), //detect non FF browsers
getoffset:function(what, offsettype){
return (what.offsetParent)? what[offsettype]+this.getoffset(what.offsetParent, offsettype) : what[offsettype]
},
getoffsetof:function(el,mainmenuid){
el._offsets={left:this.getoffset(el, "offsetLeft")+parseInt(moveLeft[mainmenuid]), top:this.getoffset(el, "offsetTop")+parseInt(moveUp[mainmenuid])}
//alert(this.getoffset(el, "offsetTop"))
},
getwindowsize:function(){
this.docwidth=window.innerWidth? window.innerWidth-10 : this.standardbody.clientWidth-10;
this.docheight=window.innerHeight? window.innerHeight-15 : this.standardbody.clientHeight-18
},
gettopitemsdimensions:function(){
for (var m=0; m0){
this.shimmy.topshim.style.left=scrollX+"px";
this.shimmy.topshim.style.top=scrollY+"px";
this.shimmy.topshim.style.width="99%";
this.shimmy.topshim.style.height=topgap+"px" //distance from top window edge to top of menu item
}
if (bottomgap>0){
this.shimmy.bottomshim.style.left=scrollX+"px";
this.shimmy.bottomshim.style.top=header._offsets.top + header._dimensions.h +"px";
this.shimmy.bottomshim.style.width="99%";
this.shimmy.bottomshim.style.height=bottomgap+"px" //distance from bottom of menu item to bottom window edge
}
}
},
hideshim:function(){
this.shimmy.topshim.style.width=this.shimmy.bottomshim.style.width=0;
this.shimmy.topshim.style.height=this.shimmy.bottomshim.style.height=0
},
buildmenu:function(mainmenuid, header, submenu, submenupos, istoplevel, dir){
header._master=mainmenuid; //Indicate which top menu this header is associated with
header._pos=submenupos; //Indicate pos of sub menu this header is associated with
header._istoplevel=istoplevel;
if (istoplevel){
this.addEvent(header, function(e){
ddlevelsmenu.hidemenu(ddlevelsmenu.subuls[this._master][parseInt(this._pos)])
}, "click")
}
this.subuls[mainmenuid][submenupos]=submenu;
header._dimensions={w:header.offsetWidth, h:header.offsetHeight, submenuw:submenu.offsetWidth, submenuh:submenu.offsetHeight};
this.getoffsetof(header);
submenu.style.left=0;
submenu.style.top=0;
submenu.style.visibility="hidden";
this.addEvent(header, function(e){ //mouseover event
//alert('test')
if (!ddlevelsmenu.isContained(this, e)){
var submenu=ddlevelsmenu.subuls[this._master][parseInt(this._pos)];
if (this._istoplevel){
ddlevelsmenu.css(this, "selected", "add");
clearTimeout(ddlevelsmenu.hidetimers[this._master][this._pos])
}
ddlevelsmenu.getoffsetof(header,mainmenuid);
var scrollX=window.pageXOffset? window.pageXOffset : ddlevelsmenu.standardbody.scrollLeft;
var scrollY=window.pageYOffset? window.pageYOffset : ddlevelsmenu.standardbody.scrollTop;
var submenurightedge=this._offsets.left + this._dimensions.submenuw + (this._istoplevel && dir=="topbar"? 0 : this._dimensions.w);
var submenubottomedge=this._offsets.top + this._dimensions.submenuh;
//Sub menu starting left position
var menuleft=(this._istoplevel? this._offsets.left + (dir=="sidebar"? this._dimensions.w : 0) : this._dimensions.w);
if (submenurightedge-scrollX>ddlevelsmenu.docwidth){
menuleft+= -this._dimensions.submenuw + (this._istoplevel && dir=="topbar" ? this._dimensions.w : -this._dimensions.w);
}
submenu.style.left=menuleft+"px";
//Sub menu starting top position
var menutop=(this._istoplevel? this._offsets.top + (dir=="sidebar"? 0 : this._dimensions.h) : this.offsetTop);
if (submenubottomedge-scrollY>ddlevelsmenu.docheight){ //no room downwards?
if (this._dimensions.submenuh