(转帖)[译]Struts Menu开发向导

  哈,网络真是一个好东东,早就想在我们站使用菜单技术,可是我对此不熟悉,这里又有一个现存的东西可以拿来用了。

  转自:http://kb.csdn.net/java/Articles/200511/3af84c4b-0aba-47ad-9060-58f81c7592ab.html

  正文:

   您的位置:CSDN 首页 -> 知识库 -> 文章摘要

[译]Struts Menu开发向导

作者: ∣来源:BlogJava∣原文地址∣2005-11-28

 官方英文版向导(http://struts-menu.sourceforge.net/userguide.html)

一、从1.X升级到2.X需要做以下事情:

1、改变你的taglib声明中的URI。

 <% at taglib uri="http://struts-menu.sf.net/tag" prefix="menu" %>

2、改变<plug-in>,使用新的包名"net.sf.navigator." 。

 <plug-in className="net.sf.navigator.menu.MenuPlugIn">

3、改变你的menu-config.xml文件,使用新的包名"net.sf.navigator." 。

 <Displayer name="Simple"

   type="net.sf.navigator.displayer.SimpleMenuDisplayer"/>

二、快速开始:

1、下载最新的struts-menu版本;

2、解包到本地目录;

3、下载Tomcat或者其它Servlet容器;

4、把struts-menu.war包放入Tomcat安装目录的wabapps目录下,并重启Tomcat服务。

5、打开htpp://localhost:8080/struts-menu/

三、把Struts Menu整合到你的应用程序中:

Struts Menu能够被轻易的整合到你的Struts应用程序中,它也可以整合到一个非Struts的应用程序中,但是我不喜欢这样做,所以在此没有提供相应的教程。这里将一步步的带你整合这个标签库。

你需要把struts-menu.jar放到你的WEB-INF/lib目录下。然后使用URI标签声明你的JSP文件中想使用的这个标签库。

如果使用Struts Menu 2.1,你还需要 Jakarta's Standard Tag Library JAR包放入你的WEB-INF/lib目录下。下载地址:http://ibiblio.org/maven/taglibs/jars/standard-1.0.4.jar,这个文件包括例程WAR包文件和二进制发布包。

1、放入struts-menu.jar包到你的应用程序的WEB-INF/lib目录中。

2、在你的struts-config.xml文件中加入plug-in设置。

 <plug-in className="net.sf.navigator.menu.MenuPlugIn">

   <set-property property="menuConfig"

     value="/WEB-INF/menu-config.xml"/>

 </plug-in>

3、你将需要在你的应用程序的/WEB-INF/menu-config.xml文件中定义你的菜单,这里提供一个简单的片断:

 <Menu name="contactMenu" title="Contact" location="?Contact">

   <Item name="email" title="E-Mail" location="?EMail"/>

   <Item name="phone" title="Phone" location="?Phone"/>

 </Menu>

  更多全面的例程,请查看应用程序的web/WEB-INF目录中的menu-config.xml文件,你可以截取一段作为你需要的菜单。完整的属性列表,可以查看MenuBase class's javadocs(http://struts-menu.source......avigator/menu/MenuBase.html)。

4、在你的JSP文件的顶部加入taglib声明:

 <% at taglib uri="http://struts-menu.sf.net/tag" prefix="menu" %>

5、在你的JSP文件中要放置菜单的位置加入taglib代码:

 <menu:useMenuDisplayer name="TabbedMenu"

   bundle="org.apache.struts.action.MESSAGE">

   <menu:displayMenu name="Home"/>

   <menu:displayMenu name="About"/>

 </menu:useMenuDisplayer>

  属性name="TabbedMenu"被定义在menu-config.xml文件的顶部:

 <Displayer name="TabbedMenu"

   type="net.sf.navigator.displayer.TabbedMenuDisplayer"/>

(译注:其实到此步即可在你的JSP文件中添加相应的菜单了,只不过是没有结合Velocity。在menu-config.xml文件的头部可以定义多个Displayer,每个Displayer都有name和type属性,name属性与JSP文件中menu:useMenuDisplayer标签的name属性相对应,即表明使用何种样式,具体的样式定义便在type属性中定义,type属性中是一个class。在menu-config.xml文件中的菜单定义中的name属性则与JSP文件中的menu:displayMenu标签的name属性相对应。)

使用定制的Velocity模版实施你的菜单,你需要整合Velocity到你的WEB应用程序中。如果需要这样做的话,请完成下面的步骤:

1、确定你的menu-config.xml文件有“Velocity”的displayer定义:

 <Displayer name="Velocity"

     type="net.sf.navigator.displayer.VelocityMenuDisplayer"/>

2、加入Velocity的JARs包到你的WEB-INF/lib目录中,下载velocity-1.4-rc1.jar(http://www.ibiblio.org/ma......y/jars/velocity-1.4-rc1.jar)和velocity-tools-view-1.0.jar(http://www.ibiblio.org/ma......velocity-tools-view-1.0.jar)。

3、加入globalMacros.vm(http://cvs.sourceforge.net/viewcvs.py/*checkout*/struts-menu/navigator/web/WEB-INF/classes/globalMacros.vm?content-type=text%2Fplain&rev=1.1(右键另存为))到你的WEB-INF/lib目录中。

4、改变你的JSP文件中displayer的值为“Velocity”,“config”属性指向一个文件(如config="/templates/tabs.html")或者如果tabs.htm在你的WEB-INF/classes目录中的话,则可设config="tabs.html"。

这里提供了一些使用Velocity的displayer例子,可在sample application(http://demo.raibledesigns.com/struts-menu/index.jsp)中查看。它总是在你的菜单需要的时候显示CSS,JavaScript和图像文件。下面有一些在当前的Struts Menu中用到的Velocity模版的例子的链接:

 CoolMenus: Demo(http://demo.raibledesigns......menu/velocity-coolmenu4.jsp),

    Template(http://struts-menu.sourceforge.net/templates/coolmenus.html)

 NiceTabs: Demo, Template

 Tabs: Demo, Template

 XTree: Demo, Template

所有相关的有用的文件如果你需要的话都可以在下面的站点上下载:

 Images (http://struts-menu.sourceforge.net/menu-images/)

 Stylesheets (http://struts-menu.sourceforge.net/styles/)

 Scripts (http://struts-menu.sourceforge.net/scripts/)

 Templates (http://struts-menu.sourceforge.net/templates/)

更多的基于roles的显示/隐藏菜单的信息,请查看FAQs(http://struts-menu.sourceforge.net/faq.html)。

四、在Struts之外使用Struts Menu:

在2.2版中,Menu Repository能够使用MenuContextListener载入:

 <!--

    - Loads the menu-config.xml for struts-menu at startup,

    - by default from "/WEB-INF/menu-config.xml".

    - To override this, add a context-param named "menuConfigLocation"

    - web.xml file.

    -->

 <listener>

     <listener-class>net.sf.navigator.menu.MenuContextListener</listener-class>

 </listener>

或者如果你使用Spring,甚至更容易。仅仅需要加入下面的部分到你的applicationContext.xml文件中:

 <bean id="menu" class="net.sf.navigator.menu.MenuLoader">

   <property name="menuConfig">

     <value>/WEB-INF/menu-config.xml</value>

   </property>

 </bean>

 <!-- The menuConfig property is an optional attribute.  It is set to

     /WEB-INF/menu-config.xml by default. -->

感谢Dan Luputan提供MenuLoader类的源代码。

五、从源文件编译:

要从源文件编译这个项目,执行下面的步骤:

1、下载并安装Maven(http://maven.apache.org/);

2、创建一个环境变量MAVEN_HOME指出你的Maven的安装目录,然后添加$MAVEN_HOME/bin到你的PATH变量中;

3、操纵这个目录你可以扩展源代码,执行“maven.jar”创建target/struts-menu.jar。

要展开struts-menu例程,需要下面的步骤:

1、下载和安装Tomcat;

2、创建一个环境变量CATALINA_HOME指出你的Tomcat的安装目录;

3、执行“maven deploy”把应用程序展开到Tomcat中;

4、打开http://localhost:8080/struts-menu在你喜爱的浏览器中。

如果你喜欢使用Eclipse开发项目,请参考此份开发向导(http://struts-menu.sourceforge.net/devguide.html)。

Robin's Java World 2005-11-28 10:15

--------------------------------------------------------------------------------

2 thoughts on “(转帖)[译]Struts Menu开发向导”

  1.   昨天,把Struts-menu的例子运行了一下,看中了其中的coolmenu1的动态菜单的方案,可是,要把它集成到日记中还需要面对一大堆的js脚本,我对js脚本的知识几乎为零。又考虑到学习日记当前的重心不是集成菜单,而是紧缺功能的实现。所以就放弃了。

      下面是我要面对的两个js脚本文件:

    1、coolmenus3.js

    /**************

    Copyright (c) 2001 Thomas Brattli (www.dhtmlcentral.com)

    eXperience DHTML coolMenus - Get it at  http://www.dhtmlcentral.com

    Version 3.02

    This script can be used freely as long as all copyright messages are

    intact.

    (You can delete the comments below to save space)

    This script takes over for the old Coolmenus2 and CoolFrameMenu

    Visit http://www.dhtmlcentral.com/coolmenus/

    for the latest version of the script.

    Tutorial: http://www.dhtmlcentral.com/tutorial.asp

    Support: http://www.dhtmlcentral.com/forums/forum.asp?FORUM_ID=2&CAT_ID=1&Forum_Title=CoolMenus

    Known bugs:

    Netscape 6: When using padding in the layers you can sometimes get

    strange visual effects on the lowest menu item. Only way to fix is to not use padding.

    Opera: This menu is very close to working on Opera, but as far as I could

    figure out opera don't support innerHTML or document.createElement() which

    makes the changing of the text inside the submenus immpossible. If anyone

    know a solution to this please let me know.

    Explorer 4 for mac: It will not work in this browser, nothing does.

    Explorer 5 for mac: It works fine, but like Netscape 6 it's a little slow and you can get strange visual effects sometimes.

    Script checked and working with:

    PC:

    Netscape 4.03 - Netscape 4.04 -Netscape 4.08 - Netscape 4.73 - Netscape 6 - Netscape 6.01

    Internet Explorer 5.0 - Internet Explorer 5.5 -Internet Explorer 6.0

    MAC:

    Netscape 4 - Explorer 5

    Btw: There is basically just one explanation to why this code is sort of "scrambled": I wanted this file be as small as possible..

    If you want it to be smaller feel free to remove all comments (except for the copyright)

    **************/

    /*************

    Pageobject

    ***************/

    function makePageCoords(win,fr){

            if(!win) win=window

            this.x=0;this.x2=(bw.ns4 || bw.ns6)?win.innerWidth-1:win.document.body.offsetWidth;

            if(!fr&&bw.ie) this.x2-=20; else if(!fr&&bw.ns4) this.x2-=4; else if(bw.ns6) this.x2+=1

            this.y=0;this.y2=(bw.ns4 || bw.ns6)?win.innerHeight:win.document.body.offsetHeight;

            if(bw.ns4&&!win.rows) this.x2+=5; if(!fr&&bw.ie) this.y2-=4; else if(bw.ns4&&fr) this.y2+=4

            this.y2orig=this.y2; this.x50=this.x2/2; this.y50=this.y2/2; return this;

    }

    /*************

    Debugging function

    ***************/

    function debug(txt,ev){if(mDebugging==2) self.status=txt; else alert(txt); if(ev) eval(ev); return false}

    /************

    Scroll function

    *************/

    function cm_checkScrolled(obj){

            if(bw.ns4 || bw.ns6) obj.scrolledY=obj.win.pageYOffset

            else obj.scrolledY=obj.win.document.body.scrollTop

            if(obj.scrolledY!=obj.lastScrolled){

                    if(!obj.useframes){

                            for(i=0;i<obj.l[0].num;i++){var sobj=obj.l[0].o[i].oBorder; sobj.moveY(sobj.y+(obj.scrolledY-obj.lastScrolled))}

                            if(obj.usebar) obj.oBar.moveY(obj.oBar.y+(obj.scrolledY-obj.lastScrolled))

                    }

                    obj.lastScrolled=obj.scrolledY; page.y=obj.scrolledY; page.y2=page.y2orig+obj.scrolledY

                    if(!obj.useframes || bw.ie){ clearTimeout(obj.tim); obj.isover=0; obj.hideSubs(1,0)}

            }if((bw.ns4 || bw.ns6) && !obj.useframes) setTimeout("cm_checkScrolled("+obj.name+")",200)

    }

    /***********************

    Checking if the values are % or not.

    ***************/

    function cm_checkp(num,w,check,istop,ds){

            if(num){ var p=istop?toppage:page

                    if(num.toString().indexOf("%")!=-1){if(w || (check && this.rows)) num=(p.x2*parseFloat(num)/100)

                    else num=(p.y2*parseFloat(num)/100)

                    }else num=eval(num)

            }else num=0; return num

    }

    /************

    Making DIV objects + DIV objects code

    *************/

    function cm_makeObj(obj,name,level,win,nest,o){

            if(o&&(bw.ns4||bw.ns6)) this.evnt=o

            else this.evnt=bw.dom?win.document.getElementById(obj):bw.ie4?win.document.all[obj]:bw.ns4?nest?win.document[nest].document[obj]:win.document[obj]:0;

            if(!this.evnt) return debug('There seems to be an error with this layer:\nFrame: '+win+'\nLayer: '+nest + "." + obj)

            this.css=bw.dom||bw.ie4?this.evnt.style:bw.ns4?this.evnt:0;     this.ref=bw.dom || bw.ie4?win.document:bw.ns4?this.css.document:0;

            this.hideIt=cm_hideIt; this.showIt=cm_showIt; this.writeIt=cm_writeIt; this.setactive=cm_setactive; this.addEvents=cm_addEvents;

            this.moveIt=cm_moveIt; this.clipTo=cm_clipTo; if(name) this.parent=name; this.moveY=cm_moveY; this.l=level; this.clipOut=cm_clipOut;

            this.filterIt=cm_filterIt; this.obj = obj + "Object";   eval(this.obj + "=this"); this.tim=10; this.clipy=0; return this

    }

    function cm_writeIt(text){if(!this.img1){if(bw.ns4){this.ref.write(text);

    this.ref.close()}else this.evnt.innerHTML=text}}; function cm_moveY(y){this.y=y; this.css.top=y}

    function cm_moveIt(x,y){this.x=x; this.y=y; this.css.left=this.x;this.css.top=this.y}

    function cm_showIt(){this.css.visibility="visible"; this.vis=1}; function cm_hideIt(){this.css.visibility="hidden"; this.vis=0}

    function cm_clipOut(px,w,ystop,tim,name){

            if(!this.vis) return; if(this.clipy<ystop-px){this.clipy+=px; this.clipTo(0,w,this.clipy,0,1)

                    this.tim=setTimeout(this.obj+".clipOut("+px+","+w+","+ystop+","+tim+",'"+name+"')",tim)

            }else{if(bw.ns6){this.hideIt();}; this.clipTo(0,w,ystop,0,1); if(bw.ns6){this.showIt()}}

    }

    function cm_filterIt(f){if(this.evnt.filters[0]) this.evnt.filters[0].Stop(); else this.css.filter=f; this.evnt.filters[0].Apply(); this.showIt(); this.evnt.filters[0].Play();}

    function cm_setactive(on,name,frmmouse){

            if(!name) name=this.name; var tobj=this.parent.m[name]

            if(tobj.img){if(tobj.img2){if(on) this.ref.images[tobj.img].src=tobj.img2; else this.ref.images[tobj.img].src=tobj.img1}

            }else{

                    if(on){var color=tobj.c2; var fcolor=tobj.c4; var re=tobj.c3}else{var color=tobj.c1; var fcolor=tobj.c3; var re=tobj.c4}

                    if(color){if(bw.dom || bw.ie4) this.css.backgroundColor=color; else if(bw.ns4) if(color=="transparent") color=null; this.css.bgColor=color}

                    if(fcolor && !bw.ns4){if(bw.ie4) this.evnt.style.color=fcolor; else if(this.evnt.childNodes[0]) this.evnt.style.color=fcolor

                    }else if(fcolor&&frmmouse){t=this.parent.m[name].text; t=t.replace(re,fcolor); this.writeIt(t); if(on) this.addEvents(name,this.parent.name,tobj.lnk,this.parent.useclick)}

                    if(tobj.l==0&&bw.ns6){this.parent.l[0].o[tobj.num].oBorder.hideIt(); this.parent.l[0].o[tobj.num].oBorder.showIt();} //Stupid fix for netscape 6....

            }

    }

    function cm_clipTo(t,r,b,l,w){if(bw.ns4){this.css.clip.top=t;this.css.clip.right=r; this.css.clip.bottom=b;this.css.clip.left=l

    }else{this.css.clip="rect("+t+","+r+","+b+","+l+")"; if(w){this.css.width=r; this.css.height=b}}; this.width=r; this.height=b}

    function cm_addEvents(n,name,url,useclick){

            this.evnt.onmouseover=new Function(name+".mover('"+n+"')");

            this.evnt.onmouseout=new Function(name+".mmout('"+n+"')")

            if(!url && useclick) ev=new Function(name+".mover('"+n+"',1)")

            else ev=new Function(name+".go('"+n+"')")

            if(bw.ns4){this.ref.captureEvents(Event.MOUSEDOWN); this.ref.onmousedown=ev}

            else this.evnt.onclick=ev

    }

    /************

    Making menu object

    *************/

    function cm_makeMenu(name,parent,text,link,target,width,height,img1,img2,bgcoloroff,bgcoloron,textcolor,hovercolor,onclick,onmouseover,onmouseout){

            this.m[name]=new Object(); var obj=this.m[name]; obj.name=name; obj.subs=new Array(); obj.parent=parent; var tt

            obj.lnk=(link==0||link=='')?"":link; obj.target=target

            if(parent!="" && parent){this.m[parent].subs[this.m[parent].subs.length]=name; l=this.m[parent].l+1} else l=0

            obj.l=l; prop1=l<this.level.length?this.level[l]:this.level[this.level.length-1]; prop2=this.level[0]

            if(this.l.length<=l){

                    this.l[l]=new Object(); this.l[l].num=0; if(l==0) this.l[l].names=new Array()

                    this.l[l].clip=prop1["clip"]||prop2["clip"]||0; this.l[l].clippx=prop1["clippx"]||prop2["clippx"]||0

                    this.l[l].cliptim=prop1["cliptim"]||prop2["cliptim"]||0; this.l[l].filter=prop1["filter"]||prop2["filter"]||0

                    this.l[l].border=prop1["border"]||prop2["border"]; this.l[l].maxnum=0

                    this.l[l].bordercolor=prop1["bordercolor"]||prop2["bordercolor"];

                    s=prop1["align"]||prop2["align"]; if(s=="left") s=1; else if(s=="right") s=0;

                    else if(s=="top") s=3; else if(s=="bottom") s=2; this.l[l].align=s; this.aobj[l]=-1;

                    this.l[l].height=prop1["height"]||prop2["height"]; this.l[l].width=prop1["width"]||prop2["width"];

                    this.l[l].style=prop1["style"]||prop2["style"]; this.l[l].tc=textcolor||prop1.textcolor||prop2.textcolor;

                    this.l[l].offsetX=String(prop1["offsetX"])!="undefined"?prop1["offsetX"]:prop2["offsetX"]

                    this.l[l].offsetY=String(prop1["offsetY"])!="undefined"?prop1["offsetY"]:prop2["offsetY"]

            }if(l==0) this.l[l].names[this.l[l].names.length]=name

            if(parent!="" && parent){obj.num=this.m[parent].subs.length-1}else obj.num=this.l[l].num

            this.l[l].num++; prop=l<this.level.length?this.level[l]:this.level[this.level.length-1]

            obj.width=this.checkp(width?width:prop1.width?prop1.width:prop2.width,1,0,1);

            obj.height=this.checkp(height?height:prop1.height?prop1.height:prop2.height,0,0,1);

            if(parent!="" && parent){if(this.m[parent].subs.length>this.l[l].maxnum) this.l[l].maxnum=this.m[parent].subs.length

                    if(this.m[parent].totheight==0) this.m[parent].totheight=this.l[l].border

                    this.m[parent].totheight+=obj.height+ this.l[l].border

                    if(this.m[parent].maxwidth<obj.width) this.m[parent].maxwidth=obj.width+this.l[l].border*2

            }else{this.l[l].maxnum=this.l[l].names.length; this.totwidth+=obj.width; this.totheight+=obj.height

                    this.maxwidth=this.maxwidth>obj.width?this.maxwidth:obj.width; this.maxheight=this.maxheight>obj.height?this.maxwidth:obj.height

            }if(img1) text='<img src="'+img1+'" border="0" name="imgCMenu'+name+'">'

            else if(bw.ns4){text='<font size="'+(prop1.NS4fontSize||prop2.NS4fontSize)+'" face="'+(prop1.NS4font||prop2.NS4font)+'" color="'+(textcolor||this.l[l].tc)+'">'+text+'</font>'}

            if(bw.ns4&&this.useNS4links&&(l==0||!this.useframes) ||(l==0&&img1)){tt=img1&&l==0?this.useclick?this.name+".mover('"+name+"',1);":this.name+".go('"+name+"');":"";text='<a href="#" onclick="'+tt+'return false" class="clNS4">'+text+'</a>'}

            if(img1){obj.preimg1=new Image(); obj.preimg1.src=img1}; if(img2){obj.preimg2=new Image(); obj.preimg2.src=img2}

            if(img2) obj.img="imgCMenu"+name; else obj.img=0; obj.img1=img1||""; obj.img2=img2||""; obj.text=text; obj.subx=-1;

            obj.c1=bgcoloroff||prop1.bgcoloroff||prop2.bgcoloroff; obj.c2=bgcoloron||prop1.bgcoloron||prop2.bgcoloron;

            obj.c3=textcolor||this.l[l].tc; obj.c4=hovercolor||prop1.hovercolor||prop2.hovercolor;  obj.suby=-1;

            obj.mclick=onclick||""; obj.mover=onmouseover||""; obj.mout=onmouseout||"";     obj.totheight=0; obj.maxwidth=0;

    }

    /************

    Onmouseout

    *************/

    function cm_mout(name,cl){

            if(!name&&cl&&!this.isover){this.isclicked=0; this.hideSubs(1,0,0,0,1);  this.aobj[0]=-1; return}

            if(!name) return; var l=this.m[name].l;

            if((this.m[name].subs.length==0||!this.loaded)||(this.useclick&&!this.isclicked)){if((this.aobj[l+1]==-1||l>=this.l.length-1)&&this.aobj[l]!=-1){this.aobj[l].setactive(0,0,1); this.aobj[l]=-1;}}

            if(this.m[name].mout!="") eval(this.m[name].mout)

            if(this.useclick){this.isover=0; return}; clearTimeout(this.tim);

            if(!(!bw.ie&&this.useframes&&l==0&&this.aobj1)){ this.isover=0; this.aobj1=0; this.tim=setTimeout(this.name+".hideSubs(1,0,0,0,1)",this.wait)}

    }

    /************

    Onmouseover

    *************/

    function cm_mover(name,cl){

            clearTimeout(this.tim); this.isover=1; var l=this.m[name].l;

            if(this.aobj[l].name==name){

                    if(this.aobj[l+1]!=-1 && l<this.l.length-1){

                            this.aobj[l+1].setactive(0,0,1); this.aobj[l+1]=-1; this.hideSubs(l+2,1); return

                    }else if((!this.useclick)||(this.useclick&&this.isclicked)) return

            }if(this.m[name].mover!="") eval(this.m[name].mover)

            var num=this.m[name].num; var obj=this.l[l].o[num]

            if(this.aobj[l].name!=name){if(this.aobj[l]!=-1) this.aobj[l].setactive(0,0,1); this.aobj[l]=obj; this.aobj[l].name=name; obj.setactive(1,0,1)}

            if(l==1)this.aobj1=1; if(l==0 && cl && this.useclick) this.isclicked=1;

            if(!this.isclicked&&this.useclick) return; if(!this.loaded) return;

            this.showSubs(name,l,num,cl)

    }

    /************

    Hiding subelements

    *************/

    function cm_hideSubs(l,system,cl,sys2,hc){

            if(this.isover && !system) return

            if(l==1 && this.aobj[0]!=-1&&!sys2){this.aobj[0].setactive(0,0,1);this.aobj[0]=-1}

            if(!this.loaded) return; if(cl==1) return

            for(i=l;i<this.l.length;i++){if(this.l[i].oBorder.vis==0) break; this.l[i].oBorder.hideIt(); this.aobj[i]=-1;}

            if(hc&&this.hcode){eval(this.hcode); this.hcode=""}

    }

    /************

    Get x/y coords. Only the first time 🙂

    *************/

    function cm_getCoords(name,l,num,topalign,align,ln,border,cn,lev1b){

            if(cn==5){ this.m[name].subx=0; this.m[name].suby=0; return }//Just in case infinitive loops

            if(l==1) var pobj=this.l[l-1].o[num].oBorder

            else var pobj=this.l[l-1].oBorder

            var x=pobj.x; var y=pobj.y;

            if(l!=1){y+=this.l[l-1].o[num].y}

            pborder=this.l[l-1].border;

            lx=x+pobj.width; rx=x-this.m[name].maxwidth- (this.l[l-1].offsetX*2)

            if(align==0){if(l==1){y+=border} if(l==1&&this.useframes) x=0; else x=lx

            }else if(align==1){x=rx; if(l==1){if(this.useframes) x=page.x2 - this.m[name].maxwidth; y+=border}}

            if((align==2||topalign==2)&&lev1b!=3){

                    if(l!=1 && (align!=1&&align!=0)){if(topalign==1) x=rx; else x=lx}

                    if(l==1) if(this.useframes) y=0; else y+=this.m[name].height+border+pborder;

            }if((align==3||topalign==3)&&lev1b!=2){

                    if(l!=1&&align!=1&&align!=0){if(topalign==1) x=rx; else x=lx}

                    if(this.useframes&&l==1) y=page.y2 - this.m[name].totheight - this.l[l-1].offsetY*2

                    else y-=this.m[name].totheight - this.l[l].offsetY*2; if(l!=1||lev1b==3) y+=this.m[name].height

            }this.m[name].scrollY=this.lastScrolled; this.m[name].subx=x+this.l[l-1].offsetX;

            this.m[name].suby=y+this.l[l-1].offsetY; if(this.useframes&&l==1&&align!=3) this.m[name].suby+=this.lastScrolled

            if(this.pagecheck&&(l!=1||!this.useframes)) this.checkPage(name,l,num,topalign,align,ln,border,cn)

    }

    /************

    Checking page coords

    *************/

    function cm_checkPage(name,l,num,topalign,align,ln,border,cn){

            cn++;

            if(this.m[name].subx+this.m[name].maxwidth>page.x2){

                    if(align!=1){if(align==3&&topalign!=0) topalign=3; align=1; this.getCoords(name,l,num,topalign,align,ln,border,cn)}

            }else if(this.m[name].subx<page.x){

                    if(align!=0){if(align==3) topalign=3; align=0; this.getCoords(name,l,num,topalign,align,ln,border,cn)}

            }else if((this.m[name].suby+this.m[name].totheight)>page.y2){

                    if(l==1){topalign=3; this.getCoords(name,l,num,topalign,align,ln,border,cn,3)}

                    else if(align!=3){ align=3; this.getCoords(name,l,num,topalign,align,ln,border,cn)}

            }else if(this.m[name].suby<page.y){

                    if(l==1){topalign=2; this.getCoords(name,l,num,topalign,align,ln,border,cn,2)}

                    else if(align!=2){align=2; this.getCoords(name,l,num,topalign,align,ln,border,cn)}

            }

    }

    /************

    Showing subelements

    *************/

    function cm_showSubs(name,l,num,cl){

            l+=1; if(l>=this.l.length) return; ln=this.m[name].subs.length

            if(ln==0){this.hideSubs(l,1,0,1); return}

            else this.hideSubs(l+1,1); var border=this.l[l].border; this.aobj[l]=-1

            if(this.useframes&&(bw.ns4||bw.ns6)) cm_checkScrolled(this)

            if((this.m[name].subx==-1 || this.m[name].suby==-1) || this.m[name].scrollY!=this.lastScrolled || this.isresized){

                    var topalign=this.l[0].align; var align=this.l[l-1].align;

                    this.getCoords(name,l,num,topalign,align,ln,border,0)

            }var x=this.m[name].subx; var y=this.m[name].suby;

            var bobj=this.l[l].oBorder; bobj.hideIt();

            if(this.l[l-1].clip&&!(this.l[l-1].filter&&bw.filter)){

                    clearTimeout(bobj.tim); bobj.clipy=0; bobj.clipTo(0,this.m[name].maxwidth,0,0);

            }else bobj.clipTo(0,this.m[name].maxwidth,this.m[name].totheight,0,1)

            bobj.moveIt(x,y); var yy=border

            for(i=0;i<this.l[l].maxnum;i++){

                    var obj=this.l[l].o[i]

                    if(i<ln){

                            var n=this.m[name].subs[i]; obj.aname=n; if(!bw.ns4||!this.NS4hover) obj.writeIt(this.m[n].text)

                            obj.addEvents(n,this.name,this.m[n].lnk,this.useclick); var w=this.m[n].width; var h=this.m[n].height

                            if(obj.y!=yy) obj.moveY(yy); yy+=h+border; if(!obj.img) obj.setactive(0,n,1);

                            if(obj.width!=w||obj.height!=h) obj.clipTo(0,w,h,0,1); obj.css.visibility="inherit"

                    }else obj.hideIt()

            }if(this.l[l-1].filter&&bw.filter) bobj.filterIt(this.l[l-1].filter)

            else if(this.l[l-1].clip){bobj.showIt(); bobj.clipOut(this.l[l-1].clippx,this.m[name].maxwidth,this.m[name].totheight,this.l[l-1].cliptim,name);}

            else bobj.showIt();

            if(!bw.ns4&&this.checkselect){ //CHECKING FOR SELECT BOXES

                    for(i=0;i<this.sel.length;i++){

                            selx=0; sely=0; var selp;

                            if(this.sel[i].offsetParent){selp=this.sel[i]; while(selp.offsetParent){selp=selp.offsetParent; selx+=selp.offsetLeft; sely+=selp.offsetTop;}}

                            selx+=this.sel[i].offsetLeft; sely+=this.sel[i].offsetTop

                            selw=this.sel[i].offsetWidth; selh=this.sel[i].offsetHeight

                            if(((selx+selw)>this.m[name].subx && selx<(this.m[name].subx+this.m[name].maxwidth))

                            &&((sely+selh)>this.m[name].suby && sely<(this.m[name].suby+this.m[name].totheight))){

                                    if(this.sel[i].style.visibility!="hidden"){this.sel[i].level=l; this.sel[i].style.visibility="hidden"; this.hcode+=this.name+".sel["+i+"].style.visibility='visible';"}

                            }else if(l<=this.sel[i].level) this.sel[i].style.visibility="visible"

                    }

            }else if(bw.ns4&&this.hideForm){eval(this.hideForm+".visibility='hide'"); this.hcode=this.hideForm+".visibility='show'"}

    }

    /************

    Making all top elements

    *************/

    function cm_makeTop(rr){

            var m,rows,border,x,y,mpa

            m=this.menuplacement; rows=this.rows; this.pxbetween=this.checkp(this.pxbetween,0,1,1)

            border=this.l[0].border;y=this.checkp(this.fromtop,0,0,1)+border;x=this.checkp(this.fromleft,0,0,1)+border

            if(m=="bottomcenter"||m=="bottom"){

                    if(m=="bottomcenter") x=toppage.x2/2-(this.totwidth+border*this.l[0].num+this.pxbetween*(this.l[0].num-1))/2

                    y=toppage.y2-this.maxheight-border

            }else if(m=="right") x=toppage.x2-this.maxwidth-border*2

            else if(m=="bottom") y=toppage.y2-this.maxheight-border*2

            else if(m=="center"){if(rows==0) x=toppage.x2/2 -  (this.maxwidth+border*2)/2; else x=toppage.x2/2 - (this.totwidth + border*this.l[0].num +this.pxbetween*(this.l[0].num-1))/2}

            else if(m.toString().indexOf(",")>-1) mpa=1

            if(this.usebar){ var bx,by,bww,bh,oBb

                    oNS=bw.ns6?this.oNS[this.l[0].maxnum]:0

                    this.oBar=new cm_makeObj('div'+this.name+'Bar',0,0,window,0,oNS)

                    if(this.barx=="menu") bx=mpa&&rows?this.checkp(m[0],1,0,1)-border:x-border; else{ bx=this.checkp(this.barx,1,0,1) }

                    if(this.bary=="menu") by=mpa&&!rows?this.checkp(m[0],0,0,1)-border:y-border; else by=this.checkp(this.bary,0,0,1);  this.oBar.moveIt(bx,by)

                    if(this.barwidth=="menu"){bww=rows?mpa?(this.checkp(m[m.length-1],1,0,1)-bx)+this.m[this.l[0].names[this.l[0].num-1]].width+border:(this.totwidth +this.pxbetween*(this.l[0].num-1)):this.maxwidth;

                    bww+=!rows?border*2:0;}else bww=this.checkp(this.barwidth,1,0,1);

                    if(bw.ie&&rows&&this.barwidth=="100%"&&this.useframes) bww+=parseInt(self.document.body.leftMargin)*2

                    if(this.barheight=="menu"){bh=!rows?mpa?(this.checkp(m[m.length-1],0,0,1)-by)+this.m[this.l[0].names[this.l[0].num-1]].height+border:(this.totheight + this.pxbetween*(this.l[0].num-1)):this.maxheight;

                    bh+=rows?this.l[0].border*2:0;} else bh=this.checkp(this.barheight,0,0,1);

                    this.oBar.clipTo(0,bww,bh,0,1);

                    if(this.barinheritborder&&border){oBb=new cm_makeObj('div'+this.name+'Barb',0,0,window,'div'+this.name+'Bar');

                    oBb.moveIt(border,border); oBb.clipTo(0,bww-border*2,bh-border*2,0,1); oBb=null;}

            }this.l[0].o=new Array()

            for(j=0;j<this.l[0].maxnum;j++){

                    this.l[0].o[j]=new cm_makeObj('div'+this.name+'0_'+j,this,0,window,'div'+this.name+'0_'+j+'b'); if(bw.ns6) oNS=this.oNS[j]; else oNS=0

                    this.l[0].o[j].oBorder=new cm_makeObj('div'+this.name+'0_'+j+'b',0,0,window,0,oNS)

                    obj=this.l[0].o[j]; w=this.m[this.l[0].names[j]].width; h=this.m[this.l[0].names[j]].height

                    obj.addEvents(this.l[0].names[j],this.name,this.m[this.l[0].names[j]].lnk,this.useclick); obj.clipTo(0,w,h,0,1)

                    if(mpa){if(rows==1) x=this.checkp(m[j],0,1,1); else y=this.checkp(m[j],0,0,1)}

                    obj.moveIt(border,border);

                    obj.setactive(0,this.l[0].names[j])

                    obj.oBorder.moveIt(x-border,y-border); obj.oBorder.clipTo(0,w+border*2,h+border*2,0,1); obj.oBorder.showIt()

                    if(rows==0) y+=h+border+this.pxbetween

                    else x+=w+border+this.pxbetween; obj.showIt()

            }if(!rr){

                    if(this.useclick) coolFMouseup+=this.name+".mmout('',1);"; if(!this.useframes&&!bw.ns4) this.refresh()

                    else if(!this.useframes&&bw.ns4){l=""; if(onload){l=String(onload.toString()); l=l.replace("function onload(event)",""); l=l.slice(25,l.length-2)} l+=this.name+ ".refresh();"; onload=new Function(l)}

                    if(this.resizecheck) setTimeout('window.onresize=new Function("'+this.name+'.resized()")',500)

                    if(this.checkscroll){if(bw.ns4 || bw.ns6){if(this.checkscroll!=2&&this.useframes!=1){setTimeout("cm_checkScrolled("+this.name+")",200)}}}

                    if(this.useframes&&!rr) this.checkFrame(0); else this.win=window

            }

    }

    /************

    Refreshing/making all sub elements

    *************/

    function cm_refresh(ev){

            var border,obj,oNS,oNS2

            if(this.useframes) page=new makePageCoords(this.win,this.useframes); else page=toppage

            for(i=1;i<this.l.length;i++){

                    this.l[i].o=new Array();

                    border=this.l[i].border; defheight=this.checkp(this.l[i].height)

                    if(bw.ns4){oNS=new Layer(this.l[i].width,this.win); oNS.zIndex=(500+i);  if(this.l[i].border) oNS.bgColor=this.l[i].bordercolor;}

                    else if(bw.ns6){oNS=document.createElement("DIV"); oNS.setAttribute("style",this.ns6styleb[i]); this.win.document.body.appendChild(oNS)}

                    this.l[i].oBorder=new cm_makeObj('div'+this.name+i+"b",0,0,this.win,0,oNS)

                    for(j=0;j<this.l[i].maxnum;j++){

                            if(bw.ns4){oNS2=new Layer(this.l[i].width,oNS);}

                            else if(bw.ns6){oNS2=document.createElement("DIV");     oNS2.setAttribute("style",this.ns6style[i]); oNS.appendChild(oNS2)}

                            this.l[i].o[j]=new cm_makeObj('div'+this.name+i+'_'+j,this,i,this.win,0,oNS2)

                            obj=this.l[i].o[j]; if(!obj.addEvents) return; obj.moveIt(border,(border+defheight)*j + border)

                    }      

            }this.loaded=1;

            if(this.checkscroll&&bw.ie){this.win.document.body.onscroll=new Function("cm_checkScrolled("+this.name+")"); cm_checkScrolled(this)}

            if(this.useclick){this.win.document.onmouseup=new Function(coolFMouseup); if(this.useframes) document.onmouseup=new Function(coolFMouseup); }

            if(!bw.ns4&&this.checkselect) this.sel=bw.ie4?this.win.document.all.tags("SELECT"):this.win.document.getElementsByTagName("SELECT")

    }

    function cm_NS6_createElement(st,inn){el=document.createElement("DIV"); if(st) el.setAttribute("style",st); if(inn) el.innerHTML=inn; document.body.appendChild(el); return el}

    /************

    Making code

    *************/

    function cm_construct(){

            this.level=null; var str=""; var str2=""; var frstr=""; var tempstr; num=bw.ie?this.l.length:1;

            for(i=0;i<num;i++){

                    if(i!=0) frstr+='<div id="div'+this.name+i+'b" style="'+this.ns6styleb[i]+'" class="cl'+this.name+i+'b">\n'

                    for(j=0;j<this.l[i].maxnum;j++){

                            tempstr='<div id="div'+this.name+i+'_'+j+'" '; if(i!=0) tempstr+='style="'+this.ns6style[i]+'"'

                            if(i==0){n=this.l[0].names[j]; txt=this.m[n].text

                                    if(!bw.ns6){

                                            str+='<div id="div'+this.name+'0_'+j+'b" class="cl'+this.name+'b'+i+'">'

                                            str+=tempstr+' class="cl'+this.name+i+'">'+txt+'</div>'; str+='</div>\n'

                                    }else this.oNS[j]=cm_NS6_createElement(this.ns6styleb[i],tempstr+' class="cl'+this.name+i+'">'+txt+'</div>')

                            }else frstr+=tempstr+'"></div>\n'

                    }if(i!=0){frstr+='</div>\n'}

            }if(this.usebar){

                    if(this.barinheritborder) str2='<div id="div'+this.name+'Barb"></div>';

                    if(bw.ns6) this.oNS[this.l[0].maxnum]=cm_NS6_createElement(this.ns6styleb[this.ns6styleb.length-1],str2)

                    else{str+='<div id="div'+this.name+'Bar">';str+=str2+'</div>\n'}

            }if(!this.useframes&&bw.ie) str+=frstr; else this.frstr=frstr; if(!bw.ns6) document.write(str)

            this.makeTop(); if(this.useframes) window.onerror=cm_check_error;

    }

    coolFrameError=0//Trapping external pages in frame error!

    function cm_check_error(e){e=e.toLowerCase(); if(e.indexOf("access")>-1||e.indexOf("permission")>-1){coolFrameError=1; return true;}else return false}

    /**************

    Make styles

    **************/

    function cm_makeStyle(){

            var str="<style>\n"; var zindex=150;  var c,w,st,bg

            this.ns6style=new Array(); this.ns6styleb=new Array()

            for(i=0;i<this.l.length;i++){

                    if(i==0){if(bw.ns4){w="width:" +this.l[0].width+";"; this.l[i].style=""} else w=""; str+='.cl'+this.name+i+'{position:absolute; '+w+' background-color:transparent; color:'+this.l[i].tc+';'+this.l[i].style+'; cursor:pointer; cursor:hand; visibility:inherit; z-index:'+zindex+'}\n'}

                    else{st='position:absolute; '+this.l[i].style+';  cursor:pointer; cursor:hand; visibility:inherit; z-index:'+zindex; this.ns6style[i]=st}

                    bc=this.l[i].border?bw.ns4?'layer-background-color:'+this.l[i].bordercolor:'; background-color:'+this.l[i].bordercolor:"";

                    if(!bw.ns4) bc+="; overflow:hidden"

                    tempstr='position:absolute; clip:rect(0,0,0,0); visibility:hidden; '+bc+'; z-index:'+(zindex-50)

                    if(i==0&&!bw.ns6) str+='.cl'+this.name+'b'+i+'{'+tempstr+'}\n';

                    else this.ns6styleb[i]=tempstr; zindex+=100

            }      

            if(this.usebar){

                    bg=this.barinheritborder?this.l[0].bordercolor:this.barcolor

                    st='z-index:80; position:absolute; background-color:'+bg+'; layer-background-color:'+bg

                    if(!bw.ns6) str+='#div'+this.name+'Bar{'+st+'}\n'; else this.ns6styleb[this.ns6styleb.length]=st

                    if(this.barinheritborder){str+='#div'+this.name+'Barb{z-index:85; position:absolute; background-color:'+this.barcolor+'; layer-background-color:'+this.barcolor+'}\n'}

            }

            if(bw.ns4) str+="A.clNS4{text-decoration:none; padding:"+this.NS4padding+"}\n"; document.write(str+"\n</style>\n")

    }

    /************

    Refreshing page if it's resized

    *************/

    function cm_resized(){

            page2=new makePageCoords(window,this.useframes);

            if(page2.x2!=toppage.x2 || page2.y2!=toppage.y2){

                    if(!bw.ns4){

                            toppage=new makePageCoords(window,this.useframes); this.makeTop(1)

                            if(!this.useframes) page=toppage; this.isresized=1; eval(this.resizecode)

                    }else{this.win.location.reload(); location.reload()}

            }if(!bw.ns4&&this.useframes){page=new makePageCoords(this.win,this.useframes)}

    }

    /************

    Going to another page

    *************/

    function cm_go(name){

            obj=this.m[name]; url=obj.lnk; target=obj.target; fc=obj.mclick

            if(url){

                    if(this.useframes&&!coolFrameError) loc=this.win.location.href; else loc=location.href

                    if(fc) eval(fc); url=this.checkFolder(loc.toString(),url); this.isover=0;

                    this.hideSubs(1,0,1); this.isclicked=0; this.aobj[0]=-1

                    if(String(target)=="undefined" || target=="" || target==0 || target=="_self"){

                            this.win.location.href=url

                    }else if(target=="_blank") window.open(url)

                    else if(target=="_top" || target=="window") top.location.href=url 

                    else if(top[target]) top[target].location.href=url

                    else{fr=findFrame(target); if(fr) fr.location.href=url}

            }else if(fc) eval(fc)

    }

    /************

    Getting folders - THANKS TO DCAGE FOR THIS FIX

    *************/

    function cm_checkFolder(tmp,url){

            if(url.indexOf("mailto:")>-1 || url.indexOf("/")==0 || url.indexOf("http://")==0) return url

            else if(this.useframes && bw.ie || bw.ns6) return url

            var addr=''; var lvl=''; var off_cnt=0; var cnt=0;

            if(tmp.indexOf('file:')>-1 || tmp.charAt(1)==':') addr=this.offlineUrl;

            else if(tmp.indexOf('http:')>-1) addr=this.onlineUrl;

            for(var i=0;i<addr.length;i++){if(addr.charAt(i)=='\/') off_cnt+=1}

            for(var i=0;i<tmp.length;i++){if(tmp.charAt(i)=='\/'){ cnt+=1; if(cnt>off_cnt) lvl+='../'; }}

            return lvl + url

    }

    /************

    Checkloaded for the frames version

    *************/

    function cm_checkLoaded(ev,ns){

            coolFName=eval(coolFName)

            var ok=0

            if(document.layers){

                    if(ns){coolFName.refresh(); coolFName.nsload=1; ok=1; coolFrameError=0

                    }else if(ev.target.name==coolFName.frame&&!coolFName.nsload){coolFName.refresh(); ok=1; coolFrameError=0; routeEvent(ev)}

            }else if(bw.ie){

                    if (coolFName.win.document.readyState == "complete"){

                            coolFName.win.document.body.insertAdjacentHTML("beforeEnd",coolFName.frstr)

                            coolFName.win.document.body.onunload=cm_unloaded; coolFName.refresh(); ok=1; coolFrameError=0

                    }else setTimeout("cm_checkLoaded()",200)

            }else if(bw.ns6){

                    if(coolFName.win.document){

                            if(coolFName.win.document.body){coolFName.win.addEventListener("unload", cm_unloaded, true); coolFName.refresh(); ok=1; coolFrameError=0}

                            else setTimeout("cm_checkLoaded()",200)

                    }else setTimeout("cm_checkLoaded()",200)

            }

    }

    function cm_unloaded(ev){coolFName=eval(coolFName); if(!coolFName) return; if(document.layers && ev.target.name!=coolFName.frame) return; else coolFName.nsload=0; coolFName.loaded=0; if(!document.layers) setTimeout("cm_checkLoaded()",200)}

    /************

    Make menu object

    *************/

    var coolFName=""; var onload; var coolFMouseup="";

    function makeCoolMenu(name){

            coolFName=name; this.name=name; this.lastScrolled=0;

            this.win=window; toppage=new makePageCoords(window,parent.frames.length);

            this.aobj=new Array(); this.m=new Array(); this.l=new Array()

            this.level=new Array(); this.resized=cm_resized;

            this.makeMenu=cm_makeMenu; this.showSubs=cm_showSubs; this.makeTop=cm_makeTop;

            this.getCoords=cm_getCoords; this.checkPage=cm_checkPage;

            this.mmout=cm_mout; this.mover=cm_mover; this.checkp=cm_checkp;

            this.hideSubs=cm_hideSubs; this.construct=cm_construct;

            this.makeStyle=cm_makeStyle; this.refresh=cm_refresh;

            this.go=cm_go; this.frstr=""; this.mobj=new Array()

            this.totwidth=0; this.totheight=0; this.maxwidth=0; this.maxheight=0

            this.tim=10; this.loaded=0; this.isover=false; this.checkFrame=cm_checkFrame;

            this.checkFolder=cm_checkFolder; this.hcode=""; this.oNS=new Array(); this.oNS2=new Array()

            bw.filter=(bw.ie6||bw.ver.indexOf("MSIE 5.5")>-1) && !bw.mac

    }

    /************

    Find frame

    *************/

    function findFrame(frameName){

            obj=top; var frameObj=0;

            for(i=0;i<obj.frames.length;i++){

                    if(obj.frames[i].name==frameName){frameObj=obj.frames[i]; break;}; ln=obj.frames[i].frames.length

                    for(j=0;j<ln;j++){

                            if(obj.frames[i].frames[j].name==frameName){frameObj=obj.frames[i].frames[j];  break}; ln2=obj.frames[i].frames[j].frames.length

                            for(a=0;a<ln2;a++){

                                    if(obj.frames[i].frames[j].frames[a].name==frameName){frameObj=obj.frames[i].frames[j].frames[a]; break}

                            }

                    }

            }return frameObj

    }

    /************

    Checking for frame

    *************/

    function cm_checkFrame(num){

            var fr; if(num==10){debug('Frame: '+this.frame+' doesn\'t exist - Value: '+fr + " - Could not build menus."); return}

            if(!top.frames[this.frame]) fr=findFrame(this.frame); else fr=top.frames[this.frame]

            if(!fr){num++; setTimeout(this.name+".checkFrame("+num+")",500)

            }else{ this.win=fr

                    if(bw.ns4){

                            top.frames.captureEvents(Event.UNLOAD); top.frames.captureEvents(Event.LOAD); top.frames.onunload=cm_unloaded;

                            top.frames.onload = cm_checkLoaded;     setTimeout("cm_checkLoaded(0,1)",1000)

                    }else if((bw.ie||bw.ns6)) setTimeout("cm_checkLoaded()",200)

            }

    }      

    2、coolmenu-config.js

    /*****************************************************************************

    Default browsercheck - Leave this one

    ******************************************************************************/

    function lib_bwcheck(){ //Browsercheck (needed)

            this.ver=navigator.appVersion; this.agent=navigator.userAgent

            this.dom=document.getElementById?1:0

            this.ie5=(this.ver.indexOf("MSIE 5")>-1 && this.dom)?1:0;

            this.ie6=(this.ver.indexOf("MSIE 6")>-1 && this.dom)?1:0;

            this.ie4=(document.all && !this.dom)?1:0;

            this.ie=this.ie4||this.ie5||this.ie6

            this.mac=this.agent.indexOf("Mac")>-1

            this.opera5=this.agent.indexOf("Opera 5")>-1

            this.ns6=(this.dom && parseInt(this.ver) >= 5) ?1:0;

            this.ns4=(document.layers && !this.dom)?1:0;

            this.bw=(this.ie6 || this.ie5 || this.ie4 || this.ns4 || this.ns6 || this.opera5 || this.dom)

            return this

    }

    var bw=new lib_bwcheck() //Making browsercheck object

    var mDebugging=2 //General debugging variable. Set to 0 for no debugging, 1 for alerts or 2 for status debugging.

    oCMenu=new makeCoolMenu("oCMenu") //Making the menu object. Argument: menuname

    oCMenu.useframes=0 //Do you want to use the menus as coolframemenu or not? (in frames or not) - Value: 0 || 1

    oCMenu.frame="" //The name of your main frame (where the menus should appear). Leave empty if you're not using frames - Value: "main_frame_name"

    oCMenu.useclick=0 //If you want the menu to be activated and deactivated onclick only set this to 1. - Value: 0 || 1

    /*If you set this to 1 you will get a "hand" cursor when moving over the links in NS4.

    NOTE: This does not apply to the submenus if the menu is used in frames due some mayor problems with NS4*/

    oCMenu.useNS4links=1

    //After adding the "hover effect" for netscape as well, all styles are lost. But if you want padding add it here.

    oCMenu.NS4padding=2

    //If you have select boxes close to your menu the menu will check for that and hide them if they are in the way of the menu.

    //This feature does unfortunatly not work in NS4!

    oCMenu.checkselect=1

    /*If you choose to have this code inside a linked js, or if your using frames it's important to set these variables.

    This will help you get your links to link to the right place even if your files are in different folders.

    The offlineUrl variable is the actual path to the directory where you js file are locally.

    This is just so you can test it without uploading. Remember to start it with file:/// and only use slashes, no backward slashes!

    Also remember to end with a slash                                                                                                 */

    oCMenu.offlineUrl="file:///C|/Inetpub/wwwroot/dhtmlcentral/" //Value: "path_to_menu_file_offline/"

    //The onlineUrl variable is the online path to your script. Place in the full path to where your js file is. Remember to end with a slash.

    oCMenu.onlineUrl="http://www.dhtmlcentral.com/coolmenus/examples/withoutframes/" //Value: "path_to_menu_file_online/"

    oCMenu.pagecheck=1 //Do you want the menu to check whether any of the subitems are out of the bouderies of the page and move them in again (this is not perfect but it hould work) - Value: 0 || 1

    oCMenu.checkscroll=0 //Do you want the menu to check whether the page have scrolled or not? For frames you should always set this to 1. You can set this to 2 if you want this feature only on explorer since netscape doesn't support the window.onscroll this will make netscape slower (only if not using frames) - Value: 0 || 1 || 2

    oCMenu.resizecheck=1 //Do you want the page to reload if it's resized (This should be on or the menu will crash in Netscape4) - Value: 0 || 1

    oCMenu.wait=1000 //How long to wait before hiding the menu on mouseout. Netscape 6 is a lot slower then Explorer, so to be sure that it works good enough there you should not have this lower then 500 - Value: milliseconds

    //Background bar properties

    oCMenu.usebar=1 //If you want to use a background-bar for the top items set this on - Value: 1 || 0

    oCMenu.barcolor="lightblue" //The color of the background bar - Value: "color"

    oCMenu.barwidth="850" //The width of the background bar. Set this to "menu" if you want it to be the same width as the menu. (this will change to match the border if you have one) - Value: px || "%" || "menu"

    oCMenu.barheight="menu" //The height of the background bar. Set this to "menu" if you want it to be the same height as the menu. (this will change to match the border if you have one) - Value: px || "%" || "menu"

    oCMenu.barx=0 //The left position of the bar. Set this to "menu" if you want it be the same as the left position of the menu. (this will change to match the border if you have one)  - Value: px || "%" || "menu"

    oCMenu.bary="menu" //The top position of the bar Set this to "menu" if you want it be the same as the top position of the menu. (this will change to match the border if you have one)  - Value: px || "%" || "menu"

    oCMenu.barinheritborder=0 //Set this to 1 if you want the bar to have the same border as the top menus - Value: 0 || 1

    //Placement properties

    oCMenu.rows=1 //This controls whether the top items is supposed to be laid out in rows or columns. Set to 0 for columns and 1 for row - Value 0 || 1

    oCMenu.fromleft=20 //This is the left position of the menu. (Only in use if menuplacement below is 0 or aligned) (will change to adapt any borders) - Value: px || "%"

    oCMenu.fromtop=50 //This is the left position of the menu. (Only in use if menuplacement below is 0 or aligned) (will change to adapt any borders) - Value: px || "%"

    oCMenu.pxbetween=30 //How much space you want between each of the top items. - Value: px || "%"

    /*You have several different ways to place the top items.

    You can have them right beside eachother (only adding the pxbetween variable)

    oCMenu.menuplacement=0

    You can have them aligned to one of the sides - This is mostly when not using frames, but can be used in both conditions

    Values: (If you get strange results check the fromleft,fromtop and pxbetween variables above)

    For menus that are placed in columns (align=left or align=right (se below)) you can align them to the "right" or "center"

    For menus that are placed in rows (align=top or align=bottom (se below)) you can align them to the "bottom", "center" or "bottomcenter"

    oCMenu.menuplacement="center"

    Yo

Comments are closed.