//** chrome drop down menu- author: dynamic drive (http://www.dynamicdrive.com) //** updated: july 14th 06' to v2.0 //1) ability to "left", "center", or "right" align the menu items easily, just by modifying the css property "text-align". //2) added an optional "swipe down" transitional effect for revealing the drop down menus. //3) support for multiple chrome menus on the same page. //** updated: nov 14th 06' to v2.01- added iframe shim technique //** updated: july 23rd, 08 to v2.4 //1) main menu items now remain "selected" (css class "selected" applied) when user moves mouse into corresponding drop down menu. //2) adds ability to specify arbitrary html that gets added to the end of each menu item that carries a drop down menu (ie: a down arrow image). //3) all event handlers added to the menu are now unobstrusive, allowing you to define your own "onmouseover" or "onclick" events on the menu items. //4) fixed elusive js error in ff that sometimes occurs when mouse quickly moves between main menu items and drop down menus //** updated: oct 29th, 08 to v2.5 (only .js file modified from v2.4) //1) added ability to customize reveal animation speed (# of steps) //2) menu now works in ie8 beta2 (a valid doctype at the top of the page is required) var cssdropdown={ disappeardelay: 250, //set delay in miliseconds before menu disappears onmouseout dropdownindicator: '', //specify full html to add to end of each menu item with a drop down menu enablereveal: [true, 5], //enable swipe effect? [true/false, steps (number of animation steps. integer between 1-20. smaller=faster)] enableiframeshim: 1, //enable "iframe shim" in ie5.5 to ie7? (1=yes, 0=no) //no need to edit beyond here//////////////////////// dropmenuobj: null, asscmenuitem: null, domsupport: document.all || document.getelementbyid, standardbody: null, iframeshimadded: false, revealtimers: {}, getposoffset:function(what, offsettype){ var totaloffset=(offsettype=="left")? what.offsetleft : what.offsettop; var parentel=what.offsetparent; while (parentel!=null){ totaloffset=(offsettype=="left")? totaloffset+parentel.offsetleft : totaloffset+parentel.offsettop; parentel=parentel.offsetparent; } return totaloffset; }, 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 }, showmenu:function(dropmenu, e){ if (this.enablereveal[0]){ if (!dropmenu._trueheight || dropmenu._trueheight<10) dropmenu._trueheight=dropmenu.offsetheight cleartimeout(this.revealtimers[dropmenu.id]) dropmenu.style.height=dropmenu._curheight=0 dropmenu.style.overflow="hidden" dropmenu.style.visibility="visible" this.revealtimers[dropmenu.id]=setinterval(function(){cssdropdown.revealmenu(dropmenu)}, 10) } else{ dropmenu.style.visibility="visible" } this.css(this.asscmenuitem, "selected", "add") }, revealmenu:function(dropmenu, dir){ var curh=dropmenu._curheight, maxh=dropmenu._trueheight, steps=this.enablereveal[1] if (curh