/**************************************************************************** DHTML library from DHTMLCentral.com * Copyright (C) 2001 Thomas Brattli 2001 * This script was released at DHTMLCentral.com * Visit for more great scripts! * This may be used and changed freely as long as this msg is intact! * We will also appreciate any links you could give us. * * Made by Thomas Brattli 2001 ***************************************************************************/ /*Variable declaration*/ var cm_eventlayer,cm_eventlayerE,MenusList var wins /**Capturing resize**/ var cm_inresize=0 function cm_resized() { if(cm_inresize) return cmpage=new cm_page(); if(bw.ie||bw.ns6) { this.isresized=1; this.display(1); if(wins) window.onload() } else { cm_inresize=1; location.reload() } } /**Level object**/ function cm_makeLevel() { var c=this, a=arguments; c.width=a[0]||null; c.height=a[1]||null; c.regClass=a[2]||null; c.overClass=a[3]||null; c.borderX=a[4]||null; c.borderY=a[5]||null; c.borderClass=a[6]||null; c.rows=a[7]>-1?a[7]:null; c.align=a[8]||null; c.offsetX=a[9]||null; c.offsetY=a[10]||null; c.arrow=a[11]||null; c.arrowo=a[12]||null; // for roll over image c.arrowWidth=a[13]||null; c.arrowHeight=a[14]||null; c.borderWidth=a[15]||0; c.rightAlign=a[16]||0; return c } /***get align num from text (better to evaluate numbers later)**/ function cm_checkalign(a){ switch(a){ case "right": return 1; break; case "left": return 2; break; case "bottom": return 3; break; case "top": return 4; break; case "righttop": return 5; break; case "lefttop": return 6; break; case "bottomleft": return 7; break; case "topleft": return 8; break; } return null } /***check positions**/ function cm_cp(num,w,minus){ if(num){ if(num.toString().indexOf("%")!=-1){ var t = w?cmpage.x2:cmpage.y2; num=parseInt((t*parseFloat(num)/100)) if(minus) num-=minus } else num=eval(num); } else num=0; return num } /***Creating layers**/ function cm_divCreate(id,cl,txt,w,c,app,ex,txt2,sty) { if(bw.usedom) { var div=document.createElement("DIV"); if (sty) div.STYLE=sty; if (cl) div.className=cl; div.id=id; if(txt) div.innerHTML=txt; if(app) { app.appendChild(div); return div } if(w) document.body.appendChild(div); return div } else { var dstr='
',0,1) } str+='
'; if(l==0) { if(arrow)str+=m.d3=cm_divCreate(id+'_a',imgCl,'',0,1,d1); str+="" } str+="\n"; if(!bw.reuse){ m.txt=null; m.d2=null; m.d3=null; } if(bw.usedom){ if(l==0) document.body.appendChild(d1); str='' } return str } var cm_sl=0;//reset on reload function _hideIESelects(x,y,w,h) { if (bw.ie && w>0 && h>0) { var s=cm_sl; if(!s){ s=cm_sl=document.getElementsByTagName('select'); for(var i=0; ix && sy+sh>y){s[i].style.visibility="hidden";s[i].vis=0;} } } } } } } } function _showIESelects() { if (bw.ie) { var s=cm_sl; if(!s){s=cm_sl=document.getElementsByTagName('select');} if(s){ for(var i=0; i-1||tmp.charAt(1)==':') c.root=c.offlineRoot; else c.root=c.onlineRoot if(c.useBar){ if(!c.barBorderClass) c.barBorderClass=c.barClass; c.bar1=cm_divCreate(c.name+'bbar_0',c.barClass,'',0,1); c.bar=cm_divCreate(c.name+'bbar',c.barBorderClass,'',1,1,0,0,c.bar1); if(bw.usedom) c.bar.appendChild(c.bar1); } } var create=1,img,arrow; var m=c.m[name]= new Object(); if (!txt && nolink) m.spacer=1; else m.spacer=0; m.name=name; m.subs=new Array(); m.parent=p; m.arnum=0; m.arr=0 var l=m.lev=p?c.m[p].lev+1:0; c.mc++; m.hide=0; if(l>=c.l.length){ var p1,p2=0; if(l>=c.level.length) p1=c.l[c.level.length-1]; else p1=c.level[l]; c.l[l]=new Array(); if(!p2) p2=c.l[l-1] if(l!=0){ if(isNaN(p1.align)) p1["align"]=cm_checkalign(p1.align) for(i in p1){ if(i!="str"&&i!="m"){ if(p1[i]==null) c.l[l][i]=p2[i]; else c.l[l][i]=p1[i] } } } else { c.l[l]=c.level[0]; c.l[l].align=cm_checkalign(c.l[l].align) } c.l[l]["str"]=''; c.l[l].m=new Array(); if(!c.l[l].borderClass) c.l[l].borderClass=c.l[l].regClass c.l[l].app=0; c.l[l].max=0; c.l[l].arnum=0; c.l[l].o=new Array(); c.l[l].arr=new Array() c.l[l].arro=new Array() // for roll over image c.level[l]=p1=p2=null if(l!=0) c.l[l].str=c.l[l].app=cm_divCreate(c.name+ '_' +l+'_0',c.l[l].borderClass,'') } if(p){ p=c.m[p]; p.subs[p.subs.length]=name; if(p.subs.length==1&&c.l[l-1].arrow){ p.arr=1; if(p.parent){ c.m[p.parent].arnum++ if(c.m[p.parent].arnum>c.l[l-1].arnum){ c.l[l-1].str+=c.l[l-1].arr[c.l[l-1].arnum]=cm_divCreate(c.name+ '_a' +(l-1)+'_'+c.l[l-1].arnum,c.imgClass,'',0,1,c.l[l-1].app); // for roll over image c.l[l-1].str+=c.l[l-1].arro[c.l[l-1].arnum]=cm_divCreate(c.name+ '_ao' +(l-1)+'_'+c.l[l-1].arnum,c.imgClass,'',0,1,c.l[l-1].app); c.l[l-1].arnum++ } } } if(bw.reuse) if(p.subs.length>c.l[l].max) c.l[l].max = p.subs.length; else create=0 } m.rows=rows>-1?rows:c.l[l].rows; m.cl=cl=cl||c.l[l].regClass; // for finding our full size menu if(w=="menu"){ m.fullw=1;w=0; } if(h=="menu"){ m.fullh=1;h=0; } if(m.fullw || m.fullh){ // creat an temp div for measuring the size later; sty="position:absolute;overflow:visible;top:-1000;left:-1000;visiblity:visible;z-index:-10;"; var temp= new cm_divCreate(c.name+"temp"+c.numFootPrt,m.cl,txt,1,1,0,'','',sty); var tempObj=m.footprt= new cm_makeObj(c.name+"temp"+c.numFootPrt,0,temp); tempObj.hideIt(); c.numFootPrt++; m.fullsize=1; } m.w=cm_cp(w||c.l[l].width,1); m.h=cm_cp(h||c.l[l].height,0); m.txt=txt; m.lnk=lnk; if(align) align=cm_checkalign(align); m.align=align||c.l[l].align; m.targ=targ; m.cl2=cl2||c.l[l].overClass; m.create=create; m.mover=onmouseover; m.out=onmouseout; m.onclck=onclick; m.active = cm_active; m.isactive=0; m.nolink=nolink if(create) c.l[l].m[c.l[l].m.length]=name if(img1){ m.img1 = new Image(); m.img1.src=c.root+img1; if(!img2) img2=img1; m.img2 = new Image(); m.img2.src=c.root+img2; m.txt=''; if(!bw.reuse&&!nolink) m.txt=''; m.txt+='c.maxw) c.maxw=m.w; if(m.h>c.maxh) c.maxh=m.h; c.totw+=c.pxBetween+m.w+c.l[0].borderX; c.toth+=c.pxBetween+m.h+c.l[0].borderY } if(lnk && !onmouseover) m.mover="self.status='"+c.root+m.lnk+"'" } /***Make all menu div objects**/ makeCM.prototype.makeObjects=function(nowrite){ var c=this,oc,name,bx,by,w,h,l,no,ar,id,nest if(!nowrite){ for(i=0;i0) document.body.appendChild(c.l[i].app) c.l[i].str=null //Probably need this on frames version though } } c.z=c.zIndex+2 for(i=0;i0){ m.b=bobj; nest=i } else { m.b= new cm_makeObj(c.name + "_"+name+"_0","",m.d1); m.b.css.zIndex=c.z; // width can only be gotten after page loaded if (!m.fullsize) m.b.clipTo(0,w+bx*2,h+by*2,0,1); nest=name } id=c.name+"_"+name; nest=c.name+"_"+nest; if(m.create){ o=m.o=new cm_makeObj(id,nest+"_0",m.d2); o.z=o.css.zIndex=c.z+1; if(bw.reuse){ c.l[l].o[oc]=o; oc++ } if(l==0&&m.img1) o.css.visibility='inherit'; if(bw.op5) o.showIt(); o.arr=0; // for roll over image o.arro=0; } if((!bw.reuse||l==0)&&(!m.fullsize)) o.clipTo(0,w,h,0,1); if(m.spacer&&l==0){ o.evnt.onmouseover=''; o.evnt.onclick=''; o.css.cursor="auto"; m.b.css.cursor="auto"; } o.moveIt(bx,by); o.z=o.css.zIndex=c.z+2 if(j0)) pm.b=c.l[pm.lev].b; c.isover=1 clearTimeout(c.tim); if(!c.ev.vis){ var scx=cmpage.scrollX(); var scy=cmpage.scrollY(); if (c.ev.x!=scx || c.ev.y!=scy) c.ev.moveIt(scx,scy); c.ev.showIt() } var ln=pm.subs.length,l=pm.lev+1 if(c.l[pm.lev].a==el&&l!=c.l.length){ if(c.l[pm.lev+1].a) c.hidesub(l+1,el); return } c.hidesub(l,el); if(pm.mover) eval(pm.mover); if(!pm.isactive) pm.active(1); c.l[pm.lev].a = el; if(ln==0) return; var b = c.l[l].b, bx=c.l[l].borderX, by=c.l[l].borderY, rows=pm.rows, borderw=c.l[l].borderWidth var x=bx,y=by,maxw=0,maxh=0,cn=0,arrow=0,totalw=0,arrspc=0,arrw=0 if(c.l[l].arrowWidth){ arrspc=0; arrw=c.l[l].arrowWidth+arrspc*2; } b.hideIt() // get full size dimemsions for menus for(i=0;im.w) m.w=fw; } if(m.fullh){ m.footprt.setWidth(m.w); var fh=m.footprt.getHeight(); if(fh>m.h) m.h=fh; } m.fullsize=0; } if(!rows){ if(m.arr){ if(!m.wwarr) { m.w+=arrw; m.wwarr=1; } } if(m.w>maxw) maxw=m.w; } else { if(m.h>maxh) maxh=m.h; } } } // position menu items for(var i=0;i0&&i>l-1) c.l[i].b.hideIt() if(c.l[i].a&&c.l[i].a!=el){ m=c.m[c.l[i].a]; m.active(0,1); if(m.mout) eval(m.mout); c.l[i].a=0 if(i>0&&i>l-1) if(bw.op5||bw.op6) for(j=0;jl){ for(j=0;j(cmpage.x2+cmpage.scrollX(1))){ var tx2=(x-maxw-bx-ox); if(tx2<0) x=tx1; else x=tx2-ox; } else x=tx1; break; /* case 1: x+=m.w+bx; break; */ case 2: x-=maxw+bx; break; case 3: y+=m.h+by; break; case 4: y-=maxh+by; break; case 5: x-=maxw+bx; y-=maxh-m.h; break; case 6: x+=m.w+bx; y-=maxh-m.h; break; case 7: y+=m.h+by; x-=maxw-m.w; break; case 8: y-=maxh+by; x-=maxw-m.w+bx; break; } m.subx=x+ox; m.suby=y+oy } /**Constructing and initiating top items and bar**/ makeCM.prototype.construct=function(nowrite) { var c=this; if(!c.l[0]||c.l[0].m.length==0) return; if(!nowrite){ var ev=c.name+".isover=0; "+c.name+".tim=setTimeout('if(!"+c.name+".isover)"+c.name+".hidesub()',"+c.wait+")" if(!cm_eventlayer){ var d=cm_makeObj('divCMEvent'); if(!d){ var sty="position:absolute;z-index:300;width:100%;height:100%;left:0;top:0;visibility:hidden;"; d=cm_divCreate('divCMEvent',c.cmClass,'',1,1,0,0,'',sty) } cm_eventlayerE=ev; cm_eventlayer=new cm_makeObj('divCMEvent',"",d); cm_eventlayer.moveIt(0,0); cm_eventlayer.clipTo(0,cmpage.x2,cmpage.y2,0,1); cm_eventlayer.w=cmpage.x2; cm_eventlayer.y=cmpage.y2; c.ev=cm_eventlayer; } else { c.ev=cm_eventlayer; cm_eventlayerE+=";"+ev; } c.ev.evnt.onmouseover=new Function(cm_eventlayerE); c.ev.css.zIndex=c.zIndex; if(c.resizeCheck){ var rsfunc=c.name+".resized();"; appendToHandler("onresize",rsfunc); } } c.makeObjects(nowrite); } makeCM.prototype.display=function(nowrite) { var c=this; if(!c.l[0]||c.l[0].m.length==0) return; if(c.ev && (cmpage.x2!=c.ev.w || cmpage.y2!=c.ev.h)) c.ev.clipTo(0,cmpage.x2,cmpage.y2,0,1); var mpa,o,maxw=c.maxw,maxh=c.maxh,i,totw=c.totw,toth=c.toth,m,px=c.pxBetween var bx=c.l[0].borderX,by=c.l[0].borderY,x=c.fromLeft,y=c.fromTop,mp=c.menuPlacement,rows=c.rows var borderw=c.l[0].borderWidth; if(c.posCheck){ if(!c.posAnchor) c.posAnchor= new cm_makeObj(c.posCheck); if(c.posAnchor.evnt){ x=c.fromLeft=_getPageOffsetLeft(c.posAnchor.evnt); y=c.fromTop=_getPageOffsetTop(c.posAnchor.evnt); } } if(c.borderSpc){ x+=c.borderSpc; y+=c.borderSpc; } if(!mp) mp=""; if(mp.toString().indexOf(",")>-1) mpa=1; if (c.l[0].rightAlign) x-=totw; for(i=0;im.w){ totw+=(fw-m.w); c.totw=totw; } } else if(fw>maxw){ maxw=fw; totw=maxw+bx*2; if(c.borderSpc) totw+=c.borderSpc*2; c.maxw=maxw; c.totw=totw; } if(fw>m.w) m.w=fw; } if(m.fullh){ m.footprt.setWidth(m.w); var fh=m.footprt.getHeight(); if(!rows){ if(fh>m.h){ toth+=(fh-m.h); c.toth=toth; } } else if(fh>maxh){ maxh=fh; toth=maxh+by*2; if(c.borderSpc) toth+=c.borderSpc*2; c.maxh=maxh; c.toth=toth; } if(fh>m.h) m.h=fh; } if(bw.ns6){ o.setWidth(m.w-2*borderw); o.setHeight(m.h-2*borderw); o.clipTo(0,m.w,m.h,0); m.o.clipTo(0,m.w-2*borderw,m.h-2*borderw,0,1); } else { o.clipTo(0,m.w,m.h,0,1); m.o.clipTo(0,m.w,m.h,0,1); } m.fullsize=0; } } if(!bw.ie && initw) aobj.setWidth(totw); } } } makeCM.prototype.reposition=function(){ var c=this; if(c.posAnchor&&c.posAnchor.evnt){ var x=_getPageOffsetLeft(c.posAnchor.evnt); var y=_getPageOffsetTop(c.posAnchor.evnt); if(x!=c.fromLeft||y!=c.fromTop) c.display(1); } } /**Onclick of an item**/ makeCM.prototype.onclck=function(m){ m=this.m[m] if(m.onclck) eval(m.onclck); lnk=m.lnk; targ=m.targ if(lnk){ if(lnk.indexOf("mailto")!=0 && lnk.indexOf("http")!=0) lnk=this.root+lnk if(String(targ)=="undefined" || targ=="" || targ==0 || targ=="_self") location.href=lnk else if(targ=="_blank") window.open(lnk) else if(targ=="_top" || targ=="window") top.location.href=lnk else if(top[targ]) top[targ].location.href=lnk else if(parent[targ]) parent[targ].location.href=lnk }else return false }