/* (c) Ger Versluis 2000 version 13.20 October 12, 2005. You may use this script on non commercial sites. www.burmees.nl / menu */ 
/* get browser type and setup initial variables . mas is set to 100 here and map set to 0. map + mas is used to make zindex later*/
if(document.getElementById)
{
   var maa = navigator.userAgent.toLowerCase(), mab = navigator.appVersion.toLowerCase(), mac = maa.indexOf("opera") != - 1 && parseInt(maa.substring(maa.indexOf("opera") + 6)) > 6 ? true : false;
   if((maa.indexOf("opera") == - 1 || mac))
   {
      var mad = ((maa.indexOf("mozilla") != - 1 && maa.indexOf("compatible") == - 1) || mac) ? true : false, mae = (maa.indexOf("msie") != - 1 && ! mac) ? true : false;
      if(MenuUsesFrames && ! parent.frames[0])MenuUsesFrames = 0;
      var maf = ((mab.indexOf("msie 6") != - 1 || mab.indexOf("msie 7") != - 1) && ! mac) ? true : false, mag = (mab.indexOf("mac") != - 1 && mab.indexOf("msie 5") != - 1) ? true : false, FLoc, ScLoc, DcLoc, mah, mai, maj, mak, mal, mam, man, mao, map = 0, maq = 1, mar = 0, mas = 100, FrstCreat = true, Ldd = false, mat = false, mau = false, mav = false, maw = false, max = false, may = false, maz = true, FrstCntnr = null, mba = null, mbb = null, mbc = null, mbd = null, mbe = null, mbf = null, mbg = "", M_Hide = "hidden", M_Show = "visible", P_X = "px", mbh = StartTop, mbi = StartLeft, Par = MenuUsesFrames ? parent : window, Doc = Par.document, Bod = Doc.body, mbj = mad ? Par : Bod, mbk = mad && maa.indexOf("gecko/") != - 1 && maa.indexOf("mac") == - 1 && parseInt(maa.substring(maa.indexOf("gecko/") + 6, maa.indexOf("gecko/") + 12)) >= 200303 ? true : false, mbl, mbm = 0;
      mbn = setInterval("mbo()", BuildPause)
   }
}
function mbo()
{
   mbl = mae ? MenuUsesFrames ? Par.frames[FirstLineFrame].document.readyState == "complete" && Par.frames[SecLineFrame].document.readyState == "complete" ? 1 : 0 : Par.document.readyState == "complete" ? 1 : 0 : MenuUsesFrames ? Par.frames[FirstLineFrame].document.body && Par.frames[SecLineFrame].document.body ? 1 : 0 : Par.document.body ? 1 : 0;
   if(mbl)
   {
      clearInterval(mbn);
      Go()
   }
}
function mbp()
{
   return false
}
/* function to get browser dimensions  */
function mbq()
{
   mao = mae ? mau ? mbb.clientWidth : FLoc.document.body.clientWidth : FLoc.innerWidth;
   mai = mae ? mau ? mbb.clientHeight : FLoc.document.body.clientHeight : FLoc.innerHeight;
   mam = mae ? mav ? mbc.clientWidth : ScLoc.document.body.clientWidth : ScLoc.innerWidth;
   man = mae ? mav ? mbc.clientHeight : ScLoc.document.body.clientHeight : ScLoc.innerHeight;
   if(mbm)mbr(FrstCntnr);
   mar = - 1;
   mbs();
   if(TargetLoc)mbt();
   mbu();
   mbv();
   mbw(FrstCntnr, StartTop, StartLeft);
   if(RememberStatus)mbx()
}
function mby()
{
   Ldd = mat = false;
   SetMenu = "0";
   var M = FrstCntnr ? FrstCntnr.mcd : null;
   if(mae)
   {
      while(M != null)
      {
         if(M.CCn)
         {
            mbz(M.CCn);
            M.CCn = null
         }
         M = M.mca
      }
   }
   mbn = setInterval("mcb()", 100)
}
function mcc()
{
   if(mae)
   {
      mbz(FrstCntnr);
      FrstCntnr = mbf = FLoc = ScLoc = DcLoc = mah = mba = mbd = Doc = Bod = mbj = null
   }
}
function mbz(P)
{
   var M = P.mcd, Mi;
   while(M != null)
   {
      Mi = M;
      if(M.CCn)
      {
         mbz(M.CCn);
         M.CCn.mif = null;
         M.CCn = null
      }
      M = M.mca;
      Mi.mca = null;
      Mi = null
   }
   P.mcd = null
}
/* function to determine when document is ready? then launches function go */
function mcb()
{
   if( ! mae)
   {
      if(ScLoc.document.body)
      {
         clearInterval(mbn);
         Go()
      }
   }
   else if(ScLoc.document.readyState == "complete")
   {
      if(mbn)clearInterval(mbn);
      Go()
   }
}
/* builds menu? */
function Go()
{
   if( ! Ldd)
   {
      mat = false;
      Ldd = true;
      BeforeStart(); if(ScaleMenu)
      {
         if(document.defaultView && document.defaultView.getComputedStyle)maq = parseInt(document.defaultView.getComputedStyle(document.body, '').getPropertyValue("font-size")) / 16;
         else if(mae && document.body.currentStyle)maq = parseInt(document.body.currentStyle.fontSize) / 12
      }
      status = "Building menu";
      FLoc = MenuUsesFrames ? parent.frames[FirstLineFrame] : window;
      ScLoc = MenuUsesFrames ? parent.frames[SecLineFrame] : window;
      DcLoc = MenuUsesFrames ? parent.frames[DocTargetFrame] : window;
      if(MenuUsesFrames)
      {
         if( ! FLoc)FLoc = window;
         if( ! ScLoc)ScLoc = window;
         if( ! DcLoc)DcLoc = window
      }
      if(FLoc == ScLoc)maz = false;
      if(maz)FirstLineHorizontal = MenuFramesVertical ? 0 : FirstLineHorizontal ? FirstLineHorizontal : 1;
      if(maf || mac)
      {
         mbb = FLoc.document.getElementsByTagName("HTML")[0];
         mbc = ScLoc.document.getElementsByTagName("HTML")[0];
         mau = FLoc.document.compatMode.indexOf("CSS") == - 1 ? false : true;
         mav = ScLoc.document.compatMode.indexOf("CSS") == - 1 ? false : true
      }
      mao = mae ? mau ? mbb.clientWidth : FLoc.document.body.clientWidth : FLoc.innerWidth;
      mai = mae ? mau ? mbb.clientHeight : FLoc.document.body.clientHeight : FLoc.innerHeight;
      mam = mae ? mav ? mbc.clientWidth : ScLoc.document.body.clientWidth : ScLoc.innerWidth;
      man = mae ? mav ? mbc.clientHeight : ScLoc.document.body.clientHeight : ScLoc.innerHeight;
      maj = FLoc.document.body;
      mak = ScLoc.document.body;
      mal = ScLoc.document.body;
      if(TakeOverBgColor)maj.style.backgroundColor = maz ? mak.bgColor : mal.bgColor; 
      if(FrstCreat || FLoc == ScLoc)FrstCntnr = mce("Menu", NoOffFirstLineMenus, null);
      else mcf("Menu", NoOffFirstLineMenus); 
      mbr(FrstCntnr);
      mbs();
      if(TargetLoc)mbt();
      mbu();
      mbv();
      mbw(FrstCntnr, StartTop, StartLeft);
      mat = true;
      mah = mae ? ScLoc.document.body : ScLoc;
      mah.onunload = mby;
      mbj.onunload = mcc;
      mbj.onresize = mbq;
      AfterBuild();
      if(RememberStatus)mbx();
      FrstCreat = false;
      if(MenuVerticalCentered == "static" && ! maz)setInterval("mcg()", 50);
      if( ! mae)
      {
         mao = - 1;
         mbq()
      }
      max = true;
      mch();
      status = "Menu ready for use"
   }
}
function mcg()
{
   var TS = mae ? mav ? mbc.scrollTop : ScLoc.document.body.scrollTop : ScLoc.pageYOffset;
   if(TS != mar)
   {
      mar += (TS - mar) * .2;
      if(Math.abs(mar - TS) <= 1)mar = TS;
      FrstCntnr.mci = StartTop + mar;
      FrstCntnr.style.top = FrstCntnr.mif.style.top = FrstCntnr.mci + P_X
   }
}
function mbs()
{
   StartTop = mbh < 1 && mbh > 0 ? mbh * mai : mbh;
   StartLeft = mbi < 1 && mbi > 0 ? mbi * mao : mbi
}
function mbt()
{
   var mcj = FLoc.document.getElementById(TargetLoc);
   while(mcj)
   {
      StartTop += mcj.offsetTop;
      StartLeft += mcj.offsetLeft;
      mcj = mcj.offsetParent
   }
}
function mbu()
{
   if(MenuCentered.indexOf("left") == - 1)
   {
      var Sz = mao - parseInt(FrstCntnr.style.width);
      StartLeft += MenuCentered.indexOf("right") != - 1 ? Sz : Sz / 2;
      if(StartLeft < 0)StartLeft = 0
   }
}
function mbv()
{
   if(MenuVerticalCentered != "top" && MenuVerticalCentered != "static")
   {
      var Sz = mai - parseInt(FrstCntnr.style.height);
      StartTop += MenuVerticalCentered == "bottom" ? Sz : Sz / 2;
      if(StartTop < 0)StartTop = 0
   }
}
function mbr(C)
{
   var mck = C.Lvl == 1 ? mau : mav, M = C.mcd, Mi, i, W = 0, H = 0, Wd, Ht, RI, BRW = C.Lvl == 1 ? BorderWidthMain : BorderWidthSub, mcl = C.Lvl == 1 ? BorderBtwnMain : BorderBtwnSub;
   if(C.Lvl <= FirstLineHorizontal)
   {
      while(M != null)
      {
         W += Math.round((M.Arr[5] < 1 ? (M.Arr[5] * (M.Lvl == 1 ? mao : mam)) : (M.Arr[5] * maq)));
         Mi = M;
         M = M.mca
      }
      W += ((C.mcm - 1) * mcl + 2 * BRW);
      Ht = H = Math.round((Mi.Arr[4] < 1 ? (Mi.Arr[4] * (Mi.Lvl == 1 ? mai : man)) : (Mi.Arr[4] * maq)));
      H += (2 * BRW)
   }
   else
   {
      while(M != null)
      {
         H += Math.round((M.Arr[4] < 1 ? (M.Arr[4] * (M.Lvl == 1 ? mai : man)) : (M.Arr[4] * maq)));
         Mi = M;
         M = M.mca
      }
      H += ((C.mcm - 1) * mcl + 2 * BRW);
      Wd = W = Math.round((Mi.Arr[5] < 1 ? (Mi.Arr[5] * (Mi.Lvl == 1 ? mao : mam)) : (Mi.Arr[5] * maq)));
      W += (2 * BRW)
   }
   C.style.width = C.mif.style.width = W + P_X;
   C.style.height = C.mif.style.height = H + P_X;
   M = C.mcd;
   while(M != null)
   {
      if(M.Arr[5] < 1)
      {
         W = C.Lvl <= FirstLineHorizontal ? (M.Arr[5] * (M.Lvl == 1 ? mao : mam)) : Wd;
         mbm = 1
      }
      else W = (C.Lvl <= FirstLineHorizontal ? M.Arr[5] : Wd) * maq;
      if(M.Arr[4] < 1)
      {
         H = C.Lvl <= FirstLineHorizontal ? Ht : (M.Arr[4] * (M.Lvl == 1 ? mai : man));
         mbm = 1
      }
      else H = (C.Lvl <= FirstLineHorizontal ? Ht : M.Arr[4]) * maq;
      W = Math.round(W);
      H = Math.round(H);
      if(M.mcn.indexOf("<") == - 1)
      {
         M.tpd = TopPaddng < 0 ? (Math.round(H * .5 - M.Arr[12] * maq)) : TopPaddng;
         if(M.tpd < 0 || M.tpd > H)M.tpd = 0;
         M.ltp = LeftPaddng;
         if(M.ltp < 0 || M.ltp > W)M.ltp = 0;
         if((mad && ! mac) || mag || mck)
         {
            M.lx = M.ltp;
            M.tx = M.tpd
         }
      }
      M.style.width = W - M.lx + P_X;
      M.style.height = H - M.tx + P_X;
      M.style.paddingLeft = M.ltp + P_X;
      M.style.paddingTop = M.tpd + P_X;
      if(M.ro)
      {
         RI = (M.Lvl == 1 ? FLoc : ScLoc).document.images[M.rid];
         RI.style.width = W + P_X;
         RI.style.height = H + P_X
      }
      if(M.CCn)mbr(M.CCn);
      M = M.mca
   }
}
/* parameters passed to mbw are frstcntnr (ct), starttop (tp), startleft (lt) . function determines button placement , width and overlap ?? */
function mbw(Ct, Tp, Lt)
{
/* map is incremented here by 1 every time mbw is called and therefore z-index. */
   map ++ ; 
   var a, Mb = Ct.mcd, MWt = parseInt(Mb.style.width) + Mb.lx, MHt = parseInt(Mb.style.height) + Mb.tx, CWt = parseInt(Ct.style.width), CHt = parseInt(Ct.style.height), CCw, CCh, STp, SLt, Ti, Li, Hi, BRW = map == 1 ? BorderWidthMain : BorderWidthSub, mcl = map == 1 ? BorderBtwnMain : BorderBtwnSub;
   if(map == 1 && maz) ! MenuFramesVertical ? Tp = BottomUp ? DistFrmFrameBrdr : mai - CHt - DistFrmFrameBrdr : Lt = RightToLeft ? DistFrmFrameBrdr : mao - CWt - DistFrmFrameBrdr; 
   if(map == 2 && maz) ! MenuFramesVertical ? Tp = BottomUp ? man - CHt : 0 : Lt = RightToLeft ? mam - CWt : 0;
   if(map == 2)
   {
      Tp += VerCorrect;
      Lt += HorCorrect
   }
   Ct.style.top = Ct.mif.style.top = map == 1 ? Tp + P_X : 0;
   Ct.mci = Tp;
   Ct.style.left = Ct.mif.style.left = map == 1 ? Lt + P_X : 0;
   Ct.mco = Lt;
   if(map <= FirstLineHorizontal)
   {
      Hi = 1;
      Li = CWt - MWt - 2 * BRW;
      Ti = 0
   }
   else
   {
      Hi = Li = 0;
      Ti = CHt - MHt - 2 * BRW
   }
   while(Mb != null)
   {
      Mb.style.left = Li + BRW + P_X;
      Mb.style.top = Ti + BRW + P_X;
      if(Mb.CCn)
      {
         if(RightToLeft)CCw = parseInt(Mb.CCn.style.width);
         if(BottomUp)CCh = parseInt(Mb.CCn.style.height);
         if(Hi)
         {
            STp = BottomUp ? Ti - CCh : Ti + MHt + 2 * BRW;
            SLt = RightToLeft ? Li + MWt - CCw : Li
         }
         else
         {
            SLt = RightToLeft ? Li - CCw + ChildOverlap * MWt + BRW : Li + (1 - ChildOverlap) * MWt + BRW;
            STp = map == 1 && maz ? BottomUp ? Ti - CCh + MHt : Ti : BottomUp ? Ti - CCh + (1 - ChildVerticalOverlap) * MHt + 2 * BRW : Ti + ChildVerticalOverlap * MHt
         }
         mbw(Mb.CCn, STp, SLt)
      }
      a = map <= FirstLineHorizontal ? BottomUp ? 9 : 3 : RightToLeft ? 6 : 0;
/* arrows? */
      if(Mb.ai)
      {
         Mb.ai.style.top = (map <= FirstLineHorizontal ? BottomUp ? 2 : MHt - Arrws[a + 2] - 2 : (MHt - Arrws[a + 2]) / 2) + P_X;
         Mb.ai.style.left = (RightToLeft ? 2 : MWt - Arrws[a + 1] - 2) + P_X
      }
      Mb = Mb.mca;
      if(Mb)
      {
         MWt = parseInt(Mb.style.width) + Mb.lx;
         MHt = parseInt(Mb.style.height) + Mb.tx;
         Hi ? Li -= MWt + mcl : Ti -= MHt + mcl
      }
   }
   map --
}
function mbx()
{
   if(mat)
   {
      var i, mcp = FrstCntnr, Str = ScLoc.SetMenu ? ScLoc.SetMenu : "0";
      while(Str.indexOf("_") != - 1 && RememberStatus == 1)
      {
         i = mcp.mcm - parseInt(Str.substring(0, Str.indexOf("_")));
         Str = Str.slice(Str.indexOf("_") + 1);
         mcp = mcp.mcd;
         for(i; i; i -- )mcp = mcp.mca; mcp.OM(); mcp = mcp.CCn
      }
      i = mcp.mcm - parseInt(Str);
      mcp = mcp.mcd;
      for(i; i; i -- )mcp = mcp.mca; if(mbf != null)
      {
         mcq(mbf, 0);
         mbf.mcr = 0
      }
      if(mcp != null)
      {
         mcq(mcp, 1);
         mcp.mcr = 1;
         if(RememberStatus == 1)mcp.OM()
      }
      mbf = mcp;
      mcs(FrstCntnr.mcd);
      mct(FrstCntnr)
   }
}
function mch()
{
   if(max && Ldd)
   {
      mcu(FrstCntnr);
      max = false;
      if(RememberStatus)mct(FrstCntnr);
      if(may)AfterCloseAll();
      may = maw = false
   }
}
function mct(mcv)
{
   var Mbr = mcv.mcd, St;
   while(Mbr != null)
   {
      if(Mbr.mda)
      {
         mcw(Mbr);
         if(Mbr.CCn && RememberStatus == 1)
         {
            St = Mbr.CCn.style;
            St.visibility = M_Show;
            mct(Mbr.CCn)
         }
         break
      }
      else Mbr = Mbr.mca
   }
}
function mcu(CPt)
{
   var Mb = CPt.mcd;
   map ++ ;
   CPt.style.visibility = CPt.mif.style.visibility = map == 1 ? M_Show : M_Hide;
   CPt.Shw = map == 1 ? 1 : 0;
   while(Mb != null)
   {
      if(Mb.mcx)mcy(Mb);
      if(Mb.CCn)mcu(Mb.CCn);
      Mb = Mb.mca
   }
   map --
}
function mcs(Pt)
{
   var PSt, Pc;
   while(Pt)
   {
      if(Pt.mcx)
      {
         Pc = Pt;
         if(Pc != mba)mcy(Pt);
         if(Pt.CCn)
         {
            PSt = Pt.CCn.style;
            if(Pc != mba)
            {
               PSt.visibility = Pt.CCn.mif.style.visibility = M_Hide;
               Pt.CCn.Shw = 0
            }
            mcs(Pt.CCn.mcd)
         }
         break
      }
      Pt = Pt.mca
   }
}
function mcq(mcp, x)
{
   while(mcp != null)
   {
      mcp.mda = x;
      mcp = mcp.mdb.mdc
   }
}
function mdd()
{
   if(UnfoldsOnClick && ! maw && this.Arr[3])
   {
      maw = true;
      mde(this)
   }
   else if(this.Arr[1])
   {
      status = "";
      mcy(this);
      max = true;
      mch();
      if(this.Arr[1].indexOf("javascript:") != - 1)eval(this.Arr[1]);
      else if(DcLoc.location.href != BaseHref + this.Arr[1])DcLoc.location.href = BaseHref + this.Arr[1]
   }
}
/* lots of style formatting here, background images and all like in mdp  THIS FORMATTING IS APPLIED AFTER ROLLING OVER A MENU ITEM. IT THEN STAYS THAT WAY. 
This function is all to do with the hoover section of the admin config.
*/
function mcw(P)
{
   if(P.rob)P.style.backgroundImage = "url(\""+P.mdf+"\")";
   if(P.ro)
   {
      var Lc = P.Lvl == 1 ? FLoc : ScLoc;
      Lc.document.images[P.rid].src = P.ri2
   }
   else
   {
      if(P.Arr[9])P.style.color = P.Arr[9];
      if(HooverBold)P.style.fontWeight = "bold";
/*
e.g. replacing below line with 
P.style.fontStyle = "italic";
 would mean that font is made italic (at any level in menu) pemanently immediately after that link has been rolled over (whether hooveritalic has been set or not in the config.
*/
      if(HooverItalic)P.style.fontStyle = "italic";
      if(HooverUnderLine)P.style.textDecoration = "underline";
      if(HooverTextSize)P.style.fontSize = P.Arr[12] + HooverTextSize + P_X;
      if(HooverVariant)P.style.fontVariant = "small-caps"
   }
   P.mcx = 1
}
/* lots of style formatting here, background images and all like in mdp  THIS FORMATTING IS APPLIED AFTER ROLLING OVER AN ITEM. IT APPLIES AFTER LEAVING ITEM UNLIKE MCW WHICH IS IMMEDIATE
*/
function mcy(P)
{
   P.mcx = 0;
   if(P.rob)P.style.backgroundImage = "url(\""+P.mdg+"\")";
   if(P.ro)
   {
      var Lc = P.Lvl == 1 ? FLoc : ScLoc;
      Lc.document.images[P.rid].src = P.ri1
   }
   else
   {
      if(P.Arr[6])P.style.backgroundColor = P.Arr[6];
      if(P.Arr[8])P.style.color = P.Arr[8];
      if(HooverBold)P.style.fontWeight = "normal";
      if(HooverItalic)P.style.fontStyle = "normal";
      if(HooverUnderLine)P.style.textDecoration = "none";
      if(HooverTextSize)P.style.fontSize = P.Arr[12] + P_X;
      if(HooverVariant)P.style.fontVariant = "normal"
   }
}
function mdh()
{
   if(Ldd && mat)
   {
      if(UnfoldsOnClick && ! maw)
      {
         mba = this;
         max = false;
         mcs(this.mdb.mcd);
         mcw(this);
         status = this.Arr[16]
      }
      else mde(this)
   }
}
function mde(Ptr)
{
   if(mbe)clearTimeout(mbe);
   if(mac && Ptr.Lvl == 1 && MenuUsesFrames && Ptr.CCn)
   {
      var Childs = ScLoc.document.body.children, x = 0;
      if(Childs != null)
      {
         for(i = 0; i < Childs.length; i ++ )
         {
            if(Childs.item(i) == Ptr.CCn)
            {
               x = 1;
               break
            }
         }
      }
      if( ! x)Ptr.CCn = null
   }
   if(Ptr.Arr[3] && ! Ptr.CCn)
   {
      map = Ptr.Lvl;
      Ptr.CCn = mce(Ptr.MN + "_", Ptr.Arr[3], Ptr);
      mbr(Ptr.CCn);
      var Ti, Li, Hi, CCw, CCh, STp, SLt, MWt = parseInt(Ptr.style.width) + Ptr.lx, MHt = parseInt(Ptr.style.height) + Ptr.tx, BRW = map == 1 ? BorderWidthMain : BorderWidthSub;
      if(RightToLeft)CCw = parseInt(Ptr.CCn.style.width);
      if(BottomUp)CCh = parseInt(Ptr.CCn.style.height);
      if(map <= FirstLineHorizontal)
      {
         Hi = 1;
         Li = parseInt(Ptr.style.left) - BRW;
         Ti = 0
      }
      else
      {
         Hi = Li = 0;
         Ti = parseInt(Ptr.style.top) - BRW
      }
      if(Hi)
      {
         STp = BottomUp ? Ti - CCh : Ti + MHt + 2 * BRW;
         SLt = RightToLeft ? Li + MWt - CCw : Li
      }
      else
      {
         SLt = RightToLeft ? Li - CCw + ChildOverlap * MWt + BRW : Li + (1 - ChildOverlap) * MWt;
         STp = map == 1 && maz ? BottomUp ? Ti - CCh + MHt : Ti : BottomUp ? Ti - CCh + (1 - ChildVerticalOverlap) * MHt + 2 * BRW : Ti + ChildVerticalOverlap * MHt + BRW
      }
      mbw(Ptr.CCn, STp, SLt);
      map = 0
   }
   mba = Ptr;
   max = false;
   mcs(Ptr.mdb.mcd);
   if( ! Ptr.mcx)mcw(Ptr);
   if(Ptr.CCn != null && ! Ptr.CCn.Shw)RememberStatus ? mdi() : mbe = setTimeout("mdi()", UnfoldDelay);
   status = Ptr.Arr[16]
}
function mdi()
{
   var P = mba, CSt = P.mdb.style, mdj = P.CCn, mdk = mdj.style, mdl = mdj.mif.style, THt = parseInt(P.style.height), TWt = parseInt(P.style.width), TLt = maz && P.Lvl == 1 && ! FirstLineHorizontal ? 0 : parseInt(CSt.left), TTp = maz && P.Lvl == 1 && FirstLineHorizontal ? 0 : parseInt(CSt.top), CCW = parseInt(mdk.width), CCH = parseInt(mdk.height), TS = mae ? mav ? mbc.scrollTop : ScLoc.document.body.scrollTop : ScLoc.pageYOffset, LS = mae ? mav ? mbc.scrollLeft : ScLoc.document.body.scrollLeft : ScLoc.pageXOffset, SLt = maz && P.Lvl == 1 ? mdj.mco + TLt + LS : mdj.mco + TLt, STp = maz && P.Lvl == 1 ? mdj.mci + TTp + TS : mdj.mci + TTp;
   if( ! may)
   {
      may = true;
      BeforeFirstOpen()
   }
   if(MenuWrap)
   {
      if(RightToLeft)
      {
         if(SLt < LS)SLt = P.Lvl == 1 ? LS : SLt + (CCW + (1 - 2 * ChildOverlap) * TWt);
         if(SLt + CCW > mam + LS)SLt = mam + LS - CCW
      }
      else
      {
         if(SLt + CCW > mam + LS)SLt = P.Lvl == 1 ? mam + LS - CCW : SLt - (CCW + (1 - 2 * ChildOverlap) * TWt);
         if(SLt < LS)SLt = LS
      }
      if(BottomUp)
      {
         if(STp < TS)STp = P.Lvl == 1 ? TS : STp + (CCH - (1 - 2 * ChildVerticalOverlap) * THt);
         if(STp + CCH > man + TS)STp = man + TS - CCH + 0
      }
      else
      {
         if(STp + CCH > TS + man)STp = P.Lvl == 1 ? STp = TS + man - CCH : STp - CCH + (1 - 2 * ChildVerticalOverlap) * THt;
         if(STp < TS)STp = TS
      }
   }
   mdk.top = mdl.top = STp + P_X;
   mdk.left = mdl.left = SLt + P_X;
   if(maf && MenuSlide)
   {
      mdj.filters[0].Apply();
      mdj.filters[0].play()
   }
   mdk.visibility = mdl.visibility = M_Show
}
function mdm()
{
   if(Ldd && mat)
   {
      status = "";
      if(this == mba)
      {
         if(mbe)clearTimeout(mbe);
         if(mbd)clearTimeout(mbd);
         max = true;
         mbd = setTimeout("mch(mba)", DissapearDelay)
      }
   }
}
/* button stylings function? grabbed in   mce function in  MbC.mdu*/
function mdn(mdo, WMu, Mc)
{
   var x = eval(WMu + "[10]") != "" ? eval(WMu + "[10]") : BorderColor, TS = this.style;
   this.Lvl = map;
   this.mcd = null;
   this.mcm = mdo;
   this.mdc = Mc;
   this.Shw = 0;
   this.mco = this.mci = 0;
/* this sets initial background color so have removed so this is not set
   if(x)TS.backgroundColor = x;
*/
/* zindex is set here? */
   TS.zIndex = map + mas;
   if(mae && ! mag)this.mif.style.zIndex = TS.zIndex - 1;
   if(mbk && ! mac && MenuOpacity)TS.MozOpacity = parseInt(MenuOpacity.substring(MenuOpacity.indexOf("=") + 1, MenuOpacity.indexOf(")"))) / 105;
   if(maf)
   {
      mbg = "";
      if(MenuSlide && map != 1)mbg = MenuSlide;
      if(MenuShadow)mbg += MenuShadow;
      if(MenuOpacity)mbg += MenuOpacity;
      if(mbg != "")TS.filter = mbg
   }
   if(mae && ! mag && OverFormElements)this.mif.style.filter = "Alpha(Opacity=0)"
}
/* sets styling, background color, images etc 
sets ta2 to this.arr[2] and mds to this.arr[0]
which looks like that is the main items and sub items background image admin config. not sure which is which yet.
*/
function mdp(MbC, mdq, WMu)
{
   var mdr = map == 1 ? FLoc : ScLoc, t, a, ta2 = this.Arr[2], mds = this.Arr[0];
   this.mca = mdq;
   this.Lvl = map;
   this.mdb = MbC;
   this.CCn = this.ai = null;
   this.mcx = this.mda = this.mcr = this.ro = this.rob = this.lx = this.tx = this.ltp = this.tpd = 0;
   this.OM = mdh;
   this.MN = WMu;
   this.style.overflow = "hidden";
/* changes mouse pointer depending on something */
   this.style.cursor = (this.Arr[1] || (map == 1 && UnfoldsOnClick)) ? mae ? "hand" : "pointer" : "default";
/* picks out rollover background image from mds */
   if(mds.indexOf("rollover") != - 1)
   {
      this.ro = 1;
/* this .ri1 is set to first part of rollover text
and this.ri2 is set to second part
example of rollover text: "rollover?/cms/e107_plugins/q_tree_menu/images/menu-off.jpg?/cms/e107_plugins/q_tree_menu/images/menu-on.jpg"
*/
      this.ri1 = mds.substring(mds.indexOf("?") + 1, mds.lastIndexOf("?"));
      this.ri2 = mds.substring(mds.lastIndexOf("?") + 1, mds.length);
      this.rid = WMu + "i";
      mds = "<img src=\""+this.ri1+"\" name=\""+this.rid+"\">"
   }
   this.mcn = mds;
/* WOOT!! EUREKA ETC. putting this if in here to make sure the level is above the first to change the LowBgColor means the first level of the menu is not affected by the default LowBgColor
EXTRA WOOTS!!
WOOT WOOT WOOT!!
*/
   if(this.Lvl > 1)
	{
		if( ! this.Arr[6])this.Arr[6] = LowBgColor;
	}
   if(this.Arr[6] && ! this.ro)this.style.backgroundColor = this.Arr[6];
   if( ! this.Arr[7])this.Arr[7] = HighBgColor;
   if( ! this.Arr[8])this.Arr[8] = FontLowColor;
   this.style.color = this.Arr[8];
   if( ! this.Arr[9])this.Arr[9] = FontHighColor;
   if( ! this.Arr[11])this.Arr[11] = FontFamily;
   this.style.fontFamily = this.Arr[11];
   if(this.Arr[12] == - 1)this.Arr[12] = FontSize;
   this.style.fontSize = this.Arr[12] * (mad ? 1 : maq) + "px";
   if(this.Arr[13] == - 1)this.Arr[13] = FontBold;
   this.style.fontWeight = this.Arr[13] ? "bold" : "normal";
   if(this.Arr[14] == - 1)this.Arr[14] = FontItalic;
   this.style.fontStyle = this.Arr[14] ? "italic" : "normal";
   if( ! this.Arr[15])this.Arr[15] = MenuTextCentered;
   this.style.textAlign = this.Arr[15];
   if( ! this.Arr[16])this.Arr[16] = this.Arr[1];
/* if background image variable is present ta2. ta2 is set to this.arr[2] */
   if(ta2)
   {
/* if rollover occurs somewhere in ta2 then background image is set to =url\ta2  if rollover is not found in ta2 then background image is set to this.mdg 
can't see how it differentiates between main items background image and sub items background image yet
*/
      if(ta2.indexOf("rollover") == - 1)this.style.backgroundImage = "url(\""+ta2+"\")";
      else
      {
         this.rob = 1;
         this.mdg = ta2.substring(ta2.indexOf("?") + 1, ta2.lastIndexOf("?"));
         this.mdf = ta2.substring(ta2.lastIndexOf("?") + 1, ta2.length);
         this.style.backgroundImage = "url(\""+this.mdg+"\")";
         this.style.backgroundRepeat = "no-repeat";
         this.style.backgroundPosition = BgImgLeftOffset + "px"
      }
   }
/* finds any text element i.e. after a > in the mds */
   if(mds.indexOf("<") == - 1)
   {
      t = mdr.document.createTextNode(mds);
      this.appendChild(t)
   }
   else this.innerHTML = mds;
   if(this.Arr[3])
   {
      a = map <= FirstLineHorizontal ? BottomUp ? 9 : 3 : RightToLeft ? 6 : 0;
      if(Arrws[a])
      {
         t = mdr.document.createElement("img");
         this.appendChild(t);
         t.style.position = "absolute";
         t.src = Arrws[a];
         t.style.width = Arrws[a + 1] * maq + P_X;
         t.style.height = Arrws[a + 2] * maq + P_X;
         this.ai = t
      }
   }
   if(mae)
   {
      this.onselectstart = mbp;
      this.onmouseover = mdh;
      this.onmouseout = mdm;
      this.onclick = mdd
   }
   else
   {
      this.addEventListener("mouseover", mdh, false);
      this.addEventListener("mouseout", mdm, false);
      this.addEventListener("click", mdd, false)
   }
}
/* first function called that works? mce("Menu", NoOffFirstLineMenus, null)
 is called   if(FrstCreat || FLoc == ScLoc)FrstCntnr = mce("Menu", NoOffFirstLineMenus, null);
 if not then mcf is called
 
 also mce(mdv + "_", Mbr.Arr[3], Mbr);
*/
function mce(MNm, No, mdt)
{
   map ++ ;
   var i, Mbr, PMb = null, mdv = MNm + "1", MWd = eval(mdv + "[5]") * maq, MHt = eval(mdv + "[4]") * maq, mdr = map == 1 ? FLoc : ScLoc, MbC = mdr.document.createElement("div"), MIF = ! mae || mag || ! OverFormElements ? MbC : mdr.document.createElement("iframe");
   mdr.document.body.appendChild(MbC);
   if(mae && ! mag && OverFormElements)
   {
      MIF.src = "blank.html";
      mdr.document.body.appendChild(MIF)
   }
   MbC.style.position = MIF.style.position = "absolute";
   MbC.style.visibility = MIF.style.visibility = M_Hide;
   MbC.mif = MIF;
   MbC.mdu = mdn;
   MbC.mdu(No, MNm + "1", mdt);
   for(i = 1; i < No + 1; i ++ )
   {
      mdv = MNm + eval(i);
      Mbr = mdr.document.createElement("div");
      Mbr.style.position = "absolute";
      Mbr.style.visibility = "inherit";
      MbC.appendChild(Mbr);
      Mbr.Arr = eval(mdv);
      if( ! Mbr.Arr[4])Mbr.Arr[4] = MHt;
      if( ! Mbr.Arr[5])Mbr.Arr[5] = MWd;
      Mbr.mdu = mdp;
      Mbr.mdu(MbC, PMb, mdv);
      if(Mbr.Arr[3] && ! BuildOnDemand)
      {
         Mbr.CCn = mce(mdv + "_", Mbr.Arr[3], Mbr)
      }
      PMb = Mbr
   }
   MbC.mcd = Mbr;
   map -- ;
   return(MbC)
}
/* called if frstcreat floc <> scloc instead of above mce */
function mcf(MNm, No)
{
   var Mbr = FrstCntnr.mcd, i, mdv;
   if( ! BuildOnDemand)
   {
      map ++ ;
      for(i = No; i > 0; i -- )
      {
         mdv = MNm + eval(i);
         if(Mbr.Arr[3])Mbr.CCn = mce(mdv + "_", Mbr.Arr[3], Mbr);
         Mbr = Mbr.mca
      }
      map --
   }
   else
   {
      while(Mbr)
      {
         Mbr.CCn = null;
         Mbr = Mbr.mca
      }
   }
}
