// 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 = '
"+txt;
if (txt2) {
dstr += txt2;
}
if (c) {
dstr += '
';
}
if (w) {
document.write(dstr);
} else {
return dstr;
}
}
return "";
}
// GETTING LAYER STRING FOR EACH MENU
function flexmenu_getLayerStr(m,app,name,fill,clb,arrow,ah,aw,root) {
var no=m.nolink,arrstr='', l=m.lev,str='', txt=m.txt, ev='', id=name + '_' + m.name, d1;
if (app) {
d1=app;
}
if ((!browser.reuse || l==0) && !no) {
ev = ' onmouseover="'+name+'.showsub(\''+m.name+'\')"'+' onmouseout="'+name+'.mout(\''+m.name+'\')"'+' onclick="'+name+'.onclck(\''+m.name+'\'); return false" ';
}
if (browser.reuse && l!=0) {
txt='';
}
if (l == 0) {
str += d1 = flexmenu_divCreate(id+'_0',clb,'');
}
str += m.d2 = flexmenu_divCreate(id,m.cl,txt,0,0,d1,ev);
if (l==0 && browser.usedom) {
m.d2.onclick = new Function(name+'.onclck("'+m.name+'")');
m.d1 = d1;
m.d2.onmouseover = new Function(name+'.showsub("'+m.name+'")');
m.d2.onmouseout = new Function(name+'.mout("'+m.name+'")'); //Added 4.02
}
if (!browser.reuse && !m.img1 && !no) {
str += flexmenu_divCreate(id+'_1',m.cl2,txt,0,1);
str += flexmenu_divCreate(id+'_3',"clFMAbs",'
',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 += '
';
if (!browser.reuse&&!nolink) {
m.txt+=''
}
} else {
m.img1=0;
m.img2=0;
}
if (l==0||create) {
c.l[l].str += flexmenu_getLayerStr(m,c.l[l].app,c.name,c.fillImg,c.l[l].borderClass,c.l[l].arrow,c.l[l].arrowWidth,c.l[l].arrowHeight,c.root);
}
if (l==0) {
if (m.w > 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";
}
if (!browser.usedom) {
document.write(c.l[i].str);
} else if (i > 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;
}
}