// OBJECT BROWSERCHECK function flexmenu_browsercheck() { this.ver = navigator.appVersion; this.agent = navigator.userAgent.toLowerCase(); this.dom = document.getElementById?1:0; this.op5 = (this.agent.indexOf("opera 5") > -1 || this.agent.indexOf("opera/5") > -1) && window.opera; this.op6 = (this.agent.indexOf("opera 6") > -1 || this.agent.indexOf("opera/6") > -1) && window.opera; this.ie5 = (this.agent.indexOf("msie 5") > -1 && !this.op5 && !this.op6); this.ie55 = (this.ie5 && this.agent.indexOf("msie 5.5") > -1); this.ie6 = (this.agent.indexOf("msie 6") > -1 && !this.op5 && !this.op6); this.ie4 = (this.agent.indexOf("msie") > -1 && document.all && !this.op5 && !this.op6 && !this.ie5 && !this.ie6); this.ie = (this.ie4 || this.ie5 || this.ie6); this.mac = (this.agent.indexOf("mac") > -1); this.ns6 = (this.agent.indexOf("gecko") > -1 || window.sidebar); this.ns4 = (!this.dom && document.layers) ? 1 : 0; this.browser = (this.ie6 || this.ie5 || this.ie4 || this.ns4 || this.ns6 || this.op5 || this.op6); this.usedom = this.ns6; //Use dom creation this.reuse = this.ie || this.usedom; //Reuse layers this.px = this.dom && !this.op5 ? "px" : ""; return this; } var browser=new flexmenu_browsercheck(); // VARIABLE DECLARATION var flexmenupage, flexmenu_eventlayer=0, flexmenu_eventlayerE=0; // OBJECTS CROSSBROWSER FUNCTIONS function flexmenu_message(txt) { alert(txt); return false; } function flexmenu_makeObj(obj,nest,o) { if (browser.usedom && o) { this.evnt = o; } else { nest = (!nest) ? "" : 'document.layers.'+nest+'.'; this.evnt=browser.dom ? document.getElementById(obj): browser.ie4 ? document.all[obj] : browser.ns4 ? eval(nest+"document.layers."+obj) : 0; } if (!this.evnt) { return flexmenu_message('The layer does not exist ('+obj+')'+'- \nIf your using Netscape please check the nesting of your tags (on the entire page)\nNest:'+nest); } this.css = browser.dom || browser.ie4 ? this.evnt.style : this.evnt; this.ok = 0; this.ref = browser.dom || browser.ie4 ? document : this.css.document; this.obj = obj + "Object"; eval(this.obj + "=this"); this.x = 0; this.y = 0; this.w = 0; this.h = 0; this.vis = 0; return this; } flexmenu_makeObj.prototype.moveIt = function(x,y) { this.x = x; this.y = y; this.css.left = x + browser.px; this.css.top = y + browser.px; } flexmenu_makeObj.prototype.showIt = function(o) { this.css.visibility = "visible"; this.vis = 1; if (browser.op5 && this.arr) { this.arr.showIt(); } } // alert('showing arrow')}} flexmenu_makeObj.prototype.hideIt = function(no) { this.css.visibility = "hidden"; this.vis = 0; } flexmenu_makeObj.prototype.clipTo = function(t,r,b,l,setwidth) { this.w = r; this.h = b; if (browser.ns4) { this.css.clip.top = t; this.css.clip.right = r; this.css.clip.bottom = b; this.css.clip.left = l; } else { if(t<0)t = 0; if(r<0)r = 0; if(b<0)b = 0; if(b<0)b = 0; this.css.clip="rect("+t+browser.px+","+r+browser.px+","+b+browser.px+","+l+browser.px+")"; if (setwidth) { if (browser.op5 || browser.op6) { this.css.pixelWidth = r; this.css.pixelHeight = b; } else { this.css.width = r+browser.px; this.css.height = b+browser.px; } } } } function flexmenu_active(on,h) { if (this.o.arr) { on ? this.o.arr.hideIt() : browser.op5 ? this.o.arr.showIt() : this.o.arr.css.visibility = "inherit"; } if (browser.reuse||browser.usedom) { if(!this.img2) { this.o.evnt.className = on ? this.cl2 : this.cl; } else { document.images["img"+this.name].src = on ? this.img2.src : this.img1.src; } if (on && browser.ns6) { this.o.hideIt(); this.o.css.visibility = 'inherit'; } //netscape 6 bug fix } else { if (!this.img2) { if (on) { this.o.over.showIt(); } else { this.o.over.hideIt(); } } else { this.o.ref.images["img"+this.name].src = on ? this.img2.src : this.img1.src; } this.isactive = on ? 1 : 0; } } // OBJECT PAGE function flexmenu_page() { this.x=0; this.x2 =(!browser.ie) ? window.innerWidth : document.body.offsetWidth-20; this.y = 0; this.orgy = this.y2 = (!browser.ie) ? window.innerHeight : document.body.offsetHeight-6; this.x50 = this.x2/2; this.y50 = this.y2/2; return this; } // CHECK POSITIONS function flexmenu_cp(num,w,minus) { if (num) { if (num.toString().indexOf("%") != -1) { var t = w ? flexmenupage.x2 : flexmenupage.y2; num=parseInt((t*parseFloat(num)/100)); if (minus) { num -= minus; } } else { num = eval(num); } } else { num = 0; } return num; } // OBJECT LEVEL function flexmenu_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.arrowWidth = a[12]||null; c.arrowHeight = a[13]||null; return c; } // MAKING THE MENU OBJECT function makeFM(name) { var c=this; c.mc=0; c.name = name; c.m = new Array(); c.level = new Array(); c.l = new Array(); c.tim = 100; c.isresized = 0; c.isover = 0; c.zIndex = 100; c.bar = 0; c.z = 0; c.totw = 0; c.toth = 0; c.maxw = 0; c.maxh = 0; flexmenupage = new flexmenu_page(); } // EVENTS makeFM.prototype.onshow=""; makeFM.prototype.onhide=""; makeFM.prototype.onconstruct=""; // CREATING LAYERS function flexmenu_divCreate(id,cl,txt,w,c,app,ex,txt2) { if (browser.usedom) { var div = document.createElement("DIV"); 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=flexmenu_divCreate(id+'_a','clFMAbs','',0,1,d1); } str += ""; } str += "\n"; if (!browser.reuse) { m.txt = null; m.d2 = null; m.d3 = null; } if (browser.usedom) { if (l == 0) { document.body.appendChild(d1); } str=''; } return str; } // GET ALIGN NUM FROM TEXT (BETTER TO EVALUATE NUMBERS LATER) function flexmenu_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; } // MAKING EACH INDIVIDUAL MENU makeFM.prototype.makeMenu = function(name,parent,txt,lnk,targ,w,h,alt,img1,img2,cl,cl2,align,rows,nolink,onclick,onmouseover,onmouseout) { var c = this; if (!name) { name = c.name+""+c.mc; } var p = parent!="" && parent && c.m[parent] ? parent : 0; if (c.mc==0) { var tmp = location.href; if (tmp.indexOf('file:') > -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 = flexmenu_divCreate(c.name+'bbar_0',c.barClass,'',0,1); c.bar = flexmenu_divCreate(c.name+'bbar',c.barBorderClass,'',1,1,0,0,c.bar1); if (browser.usedom) { c.bar.appendChild(c.bar1); } } } var create = 1, img, arrow; var m = c.m[name] = new Object(); 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"] = flexmenu_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 = flexmenu_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.level[l] = p1 = p2 = null; if (l!=0) { c.l[l].str = c.l[l].app = flexmenu_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] = flexmenu_divCreate(c.name+ '_a' +(l-1)+'_'+c.l[l-1].arnum,'clFMAbs','',0,1,c.l[l-1].app); c.l[l-1].arnum++; } } } if (browser.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.w = flexmenu_cp(w||c.l[l].width,1); m.h = flexmenu_cp(h||c.l[l].height,0); m.txt = txt; m.lnk = lnk; if (align) { align=flexmenu_checkalign(align); } m.align = align||c.l[l].align; m.cl = cl = cl||c.l[l].regClass; m.targ = targ; m.cl2 = cl2||c.l[l].overClass; m.create = create; m.mover = onmouseover; m.out = onmouseout; m.onclck = onclick; m.active = flexmenu_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.cl = "clFMAbs"; m.txt = ''; if (!browser.reuse && !nolink) { m.txt = ''; } m.txt += ''+alt+' 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+"'"; } } // GETTING X/Y COORDS FOR SUBS makeFM.prototype.getcoords = function(m,bx,by,x,y,maxw,maxh,ox,oy) { var a = m.align; x += m.o.x; y += m.o.y; switch (a) { 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 } // SHOWING SUB ELEMENTS makeFM.prototype.showsub = function(el) { var c=this, pm=c.m[el]; if (!pm.b || (c.isresized&&pm.lev>0)) { pm.b = c.l[pm.lev].b; } c.isover = 1; clearTimeout(c.tim); 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; var x=bx, y=by, maxw=0, maxh=0, cn=0; b.hideIt(); for (var i=0; i maxw) { maxw = m.w; } maxh = y; } else { x += m.w+bx; if (m.h > maxh) { maxh = m.h; } maxw=x; } o.css.visibility = "inherit"; if (browser.op5||browser.op6) { o.showIt(); } } else { o = c.m[c.l[l].m[i]].o; o.hideIt(); } } if (!rows) { maxw += bx*2; } else { maxh += by*2; } b.clipTo(0,maxw,maxh,0,1); if (!pm.subx || !pm.suby || c.srollY > 0 || c.isresized) { c.getcoords(pm,c.l[l-1].borderX,c.l[l-1].borderY,pm.b.x,pm.b.y,maxw,maxh,c.l[l-1].offsetX,c.l[l-1].offsetY); } x = pm.subx; y = pm.suby; b.moveIt(x,y); if (c.onshow) { eval(c.onshow); } b.showIt(); } // HIDE SUB ELEMENTS makeFM.prototype.hidesub = function(l,el){ var c = this,tmp,m,i,j; if (!l) { if(!l) { l=1; } } for (i=l-1; i 0 && 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(browser.op5||browser.op6) { for(j=0; j l) { for(j=0; j 0) { 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; i 0) { m.b = bobj; nest = i; } else { m.b = new flexmenu_makeObj(c.name + "_"+name+"_0","",m.d1); m.b.css.zIndex = c.z; 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 flexmenu_makeObj(id,nest+"_0",m.d2); o.z = o.css.zIndex = c.z+1; if (browser.reuse) { c.l[l].o[oc] = o; oc++; } if (l == 0 && m.img1) { o.css.visibility = 'inherit'; } if (browser.op5) { o.showIt(); } o.arr = 0; } if (!browser.reuse || l == 0) { o.clipTo(0,w,h,0,1); } o.moveIt(bx,by); o.z = o.css.zIndex = c.z+2; if (j -1){ mpa = 1; } break; } for (i=0; i flexmenupage.x2+off || page2.y2 > flexmenupage.orgy+off){ if (browser.ie || browser.ns6) { flexmenupage = page2; this.isresized = 1; if(this.onresize) { eval(this.onresize); } this.construct(1); if (this.onafterresize) { eval(this.onafterresize); } } else { flexmenu_inresize=1; location.reload(); } } } // ON CLICK OF AN ITEM makeFM.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; } }