nlsMenu = { };
nlsMenuMgr = { };
nlsWinElmt = [ ];
ag0 = navigator.userAgent;
nls_isIE = (ag0.indexOf ("MSIE") >= 0);
nls_isIE5 = (ag0.indexOf ("MSIE 5.0") >= 0);
nls_isSafari = (ag0.indexOf ("Safari") >= 0);
nls_isOpera = (ag0.indexOf ("Opera") >= 0);
if (nls_isOpera) { nls_isIE = false; nls_isIE5 = false };




function NlsMenuManager( mgr)
{
  this.mgrId = mgr;
  this.menus = { };
  this.menubar = null;
  this.timeout = 1000;
  this.flowOverFormElement = false;
  this.assocMenuMgr =[];
  this.defaultEffect = null;
  this.icPath = "";
  this.memorizeSel = false;
  this.rt = { };
  this.tmId = null;
  this.setTimeout = function (a, t) { this.tmId = window.setTimeout (a, t); };
  this.clearTimeout = function () { if (this.tmId != null) { window.clearTimeout (this.tmId); this.tmId = null } };
  nlsMenuMgr[mgr] = this;
  if( nls_isIE) window.attachEvent( "onload", function () { nlsMenuMgr[mgr].init (); });
  return this;
};





NlsMnMgr = NlsMenuManager.prototype;


NlsMnMgr.createMenu = function( mId)
{
  var m = new NlsMenu (mId);
  m.mgr = this;
  m.mgrId = this.mgrId;
  m.icPath = this.icPath;
  m.useEffect (this.defaultEffect);
  if (this.design) { m.$menuItemClick = NlsMenu.$dsItemClick }
  this.menus[mId] = m;
  return m;
};





  
NlsMnMgr.createMenubar = function( mbarId)
{
  if (this.menubar) alert ("Menubar already exists!");
  var m = new NlsMenubar (mbarId);
  m.mgr = this;
  m.mgrId = this.mgrId;
  m.icPath = this.icPath;
  if (this.design) { m.$menuItemClick = NlsMenu.$dsItemClick }
  this.menubar = m;
  return m;
};







NlsMnMgr.renderMenus = function( plc)
{
  if (plc && plc != "")
    {
      var d = NlsMenu.$GE (plc), s = "";
      if (!d)
	{
	  d = document.createElement ("SPAN");
	  d.id = plc;
	  document.body.insertBefore( d, document.body.childNodes[0]);
	}
      for (it in this.menus)
	{
	  s += this.menus[it].renderMenu ();
	}
      d.innerHTML = s;
      d.style.display = ""
    }
  else
    {
      for (it in this.menus)
	{
	  document.write (this.menus[it].renderMenu ());
	}
    }
};




NlsMnMgr.renderMenubar = function( plc, incSub)
{
  if (this.menubar)
    {
      var mbar = this.menubar.renderMenubar ();
      if (plc && plc != "")
	{
	  var d = NlsMenu.$GE (plc);
	  d.style.display = "";
	  d.innerHTML = mbar}
      else
	{
	  document.write (mbar);
	}
      if (incSub != false)
	{
	  this.renderMenus (this.mgrId);
	}
    }
  if (this.memorizeSel) this.loadPath ();
};





NlsMnMgr.hideMenus = function( )
{
  for (var it in this.menus)
    {
      if (this.menus[it].rt.active) this.menus[it].hideMenu ();
    }
  if (this.menubar) this.menubar.hideMenu ();
};





NlsMnMgr.addAssocMenuMgr = function( frm, mgrId)
{
  this.assocMenuMgr[this.assocMenuMgr.length] =[frm, mgrId];
};






NlsMnMgr.getMenu = function( mId)
{
  return this.menus[mId]
};




NlsMnMgr.init = function( )
{
  if (this.menubar) this.menubar.init ();
};





NlsMnMgr.setMenusProperties = function( opts)
{
  var mn;
  for (var m in opts)
    {
      mn = nlsGetMenu (m);
      if (mn) mn.setProperties (opts[m]);
    }
};






function listAllWinElmt( )
{
  nlsWinElmt =[];
  var arrWinEl = document.getElementsByTagName ("SELECT");
  var elm;
  var tmp;
  var x;
  var y;
  for (var i = 0; i < arrWinEl.length; i++)
    {
      elm = arrWinEl[i];
      tmp = elm;
      x = 0;
      y = 0;
      while (tmp != null)
	{
	  x += tmp.offsetLeft;
	  y += tmp.offsetTop;
	  tmp = tmp.offsetParent;
	}
      nlsWinElmt[nlsWinElmt.length] = { e:elm, x1:x, y1:y, x2:x+elm.offsetWidth, y2:y+elm.offsetHeight };
    }
}






function NlsMenuItem( id, capt, url, ico, enb, xtra, subId, title)
{
  this.id = id;
  this.intKey = "";
  this.capt = capt;
  this.url = $aonvl (url, "");
  this.ico = (ico == null || ico == "" || ico.length == 0) ? null : ico;
  this.enable = $aonvl (enb, true);
  this.xtra = xtra;
  this.stlprf = "";
  this.target = null;
  this.title = title == null ? "" : title;
  this.itemEffect = null;
  this.visible = "false";
  this.state = 1;
  this.selected = false;
  this.subMenuId = $aonvl (subId, "");
  this.crsFrame = false;
  this.subFrame = null;
  this.subPos =[null, null];
  this.subPosAdj =[0, 0];
  this.subDir =["right", "down"];
  this.useItemEffect = function (effName) { this.itemEffect = new NlsMenuItemEffect (this.intKey, effName); };
  this.rt = { subUrl:null, loaded:0 };
  return this;
}





function NlsMenuSeparator( cstSeparator)
{
  this.stlprf = "";
  this.intKey = "";
  this.seprt = $aonevl (cstSeparator, "");
  this.render = function ()
    {
      if (this.seprt != "") return this.seprt;
      return ("<table border=0 cellpadding=0 cellspacing=0 width='100%' height='0%'><tr>" + "<td class=\"" + this.stlprf + "nlsseparator\"></td>" + "</tr></table>");
    }
  return this;
}




function NlsCustomMenuItem( cst)
{
  this.intKey = "";
  this.cstMenu = $aonvl (cst, "&nbsp;");
  return this;
}





function NlsMenu( mId)
{
  var o = { lsItm:null, mgrId:"", mgr:null, winElmt:null, container:null, customBorder:null, shadow:new NlsMenuShadow( "none", "5px", mId), count:0, effect:null, srItems:[], rt:{ready:true, active:false}, mId:mId, stlprf:"", subMenuIc:null, target:"_self", icPath:"", itemSpc:"", stretchItem:true, selection:false, showIcon:false, showSubIcon:true, absWidth:"", orient:"V", defItmEff:null, defPos:[0, 0], maxItemCol:100, zIndex:100, wnd:window, itemIco:null };
  this.setProperties( o);
  this.items = { };
  nlsMenu[ mId] = this;
  return this;
}





function NlsMenubar( mId)
{
  var mnBar = new NlsMenu( mId);
  mnBar.isMenubar = true;
  mnBar.isMenuOpened = false;
  mnBar.firstClickOnly = true;
  mnBar.dropOnClick = false;
  mnBar.renderMenubar = function () { return mnBar.renderMenu (); };
  mnBar.rt.active = true;
  return mnBar;
};






NLSMENU = NlsMenu.prototype;




NLSMENU.addItem = function( key, capt, url, ico, enb, xtra, subId, title)
{
  key = (key ? key : this.count + 1);
  var intKey = this.mId + "_" + key, it = new NlsMenuItem( key, capt, url, ico, enb, xtra, subId, title);
  this.add (intKey, it);
  if (this.defItmEff != null && typeof (NlsMenuItemEffect) != "undefined") { it.useItemEffect (this.defItmEff); }
  return it;
};





NLSMENU.addSeparator = function (sepr)
{
  var intKey = "sep_" + this.count;
  var it = new NlsMenuSeparator( sepr ? sepr : null);
  it.stlprf = this.stlprf;
  this.add( intKey, it);
  return it;
};





NLSMENU.addSubmenu = function( key, subId, crsFrame, subFrame, subPos, subPosAdj, subDir)
{
  var it = this.getItemById (key);
  it.subMenuId = subId;
  it.subFrame = $aonvl( subFrame, null);
  it.crsFrame = $aonvl( crsFrame, false);
  it.subPos = $aonvl( subPos,[null, null]);
  it.subPosAdj = $aonvl( subPosAdj,[0, 0]);
  it.subDir = $aonvl( subDir,["right", "down"]);
  return it;
};





NLSMENU.addCustomMenu = function( custom)
{
  var intKey = "cst_" + this.count;
  var it = new NlsCustomMenuItem( custom);
  this.add( intKey, it);
  return it;
};






NLSMENU.add = function( intKey, it)
{
  it.mId = this.mId;
  it.intKey = intKey;
  this.items[intKey] = it;
  this.srItems[this.srItems.length] = it;
  this.count++;
};





NLSMENU.getItemById = function( key)
{
  return this.items[this.mId + "_" + key];
};





NLSMENU.setItemStyle = function( key, stlprf)
{
  this.getItemById (key).stlprf = stlprf
};





NLSMENU.setItemText = function( key, tx)
{
  var it = this.getItemById (key);
  it.capt = tx;
  var oD = NlsMenu.$GE (it.intKey + "x2");
  if (oD) oD.innerHTML = tx;
};





NLSMENU.enableItem = function( key, b)
{
  var it = this.getItemById( key);
  it.enable = b;
  setMnStyle( NlsMenu.$GE (it.intKey), (b ? (it.selected ? "S" : "N") : "D"), NlsMenu.getPrf( it, this));
  setMnIcon (this, it, "N");
};





NLSMENU.dropShadow = function( pos, offset)
{
  if( this.shadow)
    {
      this.shadow.pos = pos;
      this.shadow.offset = (offset ? offset : "5px");
    }
  else
    {
      this.shadow = new NlsMenuShadow (pos, offset, this.mId);
    }
};




NLSMENU.useEffect = function( efN)
{
  if (efN != null && efN != "") { this.effect = new NlsMenuEffect (this.mId, efN); }
};





NLSMENU.renderMenu = function ()
{
  var scPath = "", sbIc = null;
  var allScs = (document.getElementsByTagName ? document.getElementsByTagName( "SCRIPT") : document.scripts);
  for( var i = 0; i < allScs.length; i++)
    {
      if( allScs[i].src.toLowerCase ().indexOf ("nlsmenu.js") >= 0)
	{
	  scPath = allScs[i].src.replace (/nlsmenu.js/gi, "");
	}
    }

  if( !this.subMenuIc)
    {
      sbIc =[scPath + "img/submenu.gif", scPath + "img/submenuovr.gif"];
    }
  else
    {
      sbIc =[this.icPath + this.subMenuIc[0]];
      if (this.subMenuIc[1]) sbIc[1] = this.icPath + this.subMenuIc[1];
    }
  var cs = "<table cellpadding='0' cellspacing='0' ";
  var sAbs = (this.absWidth == "" ? "" : "width='" + this.absWidth + "'");
  var usel = "unselectable='on' style='-moz-user-select:none;user-select:none;'";
  var s = ["<table cellpadding='0' cellspacing='" + $aonevl( this.itemSpc, "0") + "' width='100%'>"];
  var tmpCnt = 0, prf, it, mn, ic, j = 1, k = 1, l, ts, isV = (this.orient == "V");
  for( var i = 0; i < this.srItems.length; i++)
    {
      it = this.srItems[i];
      mn = nlsMenu[it.subMenuId];
      if (!it.crsFrame)
	{
	  if (mn) mn.prIt = it.intKey;
	  if (!mn && it.rt && !it.rt.subUrl) { it.subMenuId = ""; }
	}
      prf = NlsMenu.getPrf( it, this);
      if( it.constructor == NlsMenuSeparator)
	{
	  it.stlprf = prf;
	  ts = "<td class='" + prf + "nlsseparatorcontainer'>" + it.render () + "</td>";
	  s[j++] = (isV ? ("<tr>" + ts + "</tr>") : ts);
	}
      else if( it.constructor == NlsCustomMenuItem)
	{
	  ts = "<td>" + it.cstMenu + "</td>";
	  s[j++] = isV ? ("<tr>" + ts + "</tr>") : ts;
	}
      else
	{
	  if( isV) s[j++] = "<tr>";
	  else
	    {
	      if( tmpCnt == 0) s[j++] = "<tr>";
	      tmpCnt++;
	    }
	  l =[];
	  k = 0;
	  l[k++] = "<td align='center' id=\"@itId\" class=\"" + prf + "nlsitemcontainer\" onmouseover=\"$nlsItemOver(event,'@mId','@itId')\" onclick=\"return nlsMenu['@mId'].$menuItemClick(event, '@itId');\" onmouseout=\"$nlsItemOut(event, '@mId')\">";
	  l[k++] = cs + (this.stretchItem ? "width='100%'" : "") + " height='100%'><tr style=\"cursor:pointer;\" title=\"" + it.title + "\">";
	  if (this.showIcon)
	    {
	      l[k++] = "<td id=\"@itIdx1\" class=\"" + prf + "nlsiconcell\" align=\"center\" nowrap " + usel + ">";
	      ic = $aonevl (it.ico, this.itemIco);
	      if( ic)
		{
		  if (ic[0]) l[k++] = "<img id=\"ic_@itId\" " + (it.enable ? "" : "style='display:none'") + " src=\"" + this.icPath + ic[0] + "\">";
		  if (ic[1]) l[k++] = "<img id=\"icovr_@itId\" style='display:none' src=\"" + this.icPath + ic[1] + "\">";
		  if (ic[2]) l[k++] = "<img id=\"icdis_@itId\" " + (!it.enable ? "" : "style='display:none'") + " src=\"" + this.icPath + ic[2] + "\">";
		}
	      l[k++] = "</td>";
	    }
	  l[k++] = "<td align='left' id=\"@itIdx2\" class=\"" + prf + (it.enable ? "nlsitem\"" : "nlsitemdisable\"") + " nowrap " + usel + ">" + it.capt + "</td>";
	  if( this.showSubIcon && it.subMenuId != "")
	    {
	      l[k++] = "<td id=\"@itIdx3\" class=\"" + prf + "nlssubmenucell\" align=\"center\" nowrap>" + (it.subMenuId != "" ? "<img id='subic_@itId' src=\"" + sbIc[0] + "\">" + (sbIc.length > 1 ? "<img id='subicovr_@itId' style='display:none' src=\"" + sbIc[1] + "\">" : "") : "") + "</td>";
	    }
	  l[k++] = "</tr></table>";
	  l[k++] = "</td>";
	  s[j++] = l.join ("").replace (/@itId/g, it.intKey);
	  if( isV) s[j++] = "</tr>";
	  else if( !isV && tmpCnt == this.maxItemCol)
	    {
	      s[j++] = "</tr>";
	      tmpCnt = 0;
	    }
	}
    }
  if( !isV && tmpCnt != 0)
    {
      if( this.srItems.length > this.maxItemCol)
	{
	  while( ++tmpCnt <= this.maxItemCol)
	    s[j++] = "<td class=\"" + prf + "nlsitemcontainer\">&nbsp;</td>";
	}
      s[j++] = "</tr>"
    }
  s[j++] = "</table>";
  l =[];
  l = [cs + "class='" + this.stlprf + "nlsmenu' " + sAbs + ">"], j = 1;
  l[j++] = "<tr><td><div id='mcnt_@mId'>" + s.join ("") + "</div></td></tr>";
  l[j++] = "</table>";
  ts = l.join( "");
  if( this.customBorder != null) ts = this.customBorder.applyBorder (ts, this.stlprf);
  ts = this.shadow.dropShadow (ts);
  s =[];
  j = 0;
  s[j++] = "<div " + (nls_isIE && !this.isMenubar ? "style='position:absolute;z-index:" + (this.zIndex - 1) + ";'" : "") + ">" + ts;
  if( !this.isMenubar && nls_isIE && !nls_isIE5 && this.mgr.flowOverFormElement)
    {
      s[j++] = "<iframe id='@mIdifrm' scrolling='no' frameborder=0 width='1' height='1' style='position:absolute;top:0px;left:0px;z-index:-1;filter:alpha(opacity=0)' src='" + scPath + "img/blank.gif" + "'></iframe>";
    }
  s[j++] = "</div>";
  ts = s.join( "");
  if( arguments[0] == "content") { }
  else
    {
      ts = "<div id='@mId' style=" + (this.isMenubar ? "''" : "'position:absolute;z-index:" + this.zIndex + ";display:none;'") + " onmouseover=\"$nlsMenuOver('" + this.mgrId + "', '@mId')\" onmouseout=\"$nlsMenuOut('" + this.mgrId + "')\">" + ts + "</div>"
    }
  return ts.replace (/@mId/g, this.mId);
};






NLSMENU.init = function( )
{
  var v = this.rt.vshade;
  if( !v) v = NlsMenu.$GE ("vshade_" + this.mId);
  var itm = this.rt.actmn;
  if( !itm) itm = NlsMenu.$GE ("actmn_" + this.mId);
  if( v)
    {
      var o = itm.childNodes[0].offsetHeight - parseInt (this.shadow.offset);
      if (o >= 0) v.style.height = o + "px";
    }
  this.rt.actmn = itm;
  this.rt.vshade = v
};






function NlsMenuShadow( pos, offset, mId)
{
  this.pos = pos;
  this.offset = offset;
  this.mId = mId;
  this.dropShadow = function( smenu)
    {
      var mn = nlsMenu[this.mId];
      var cs = "<table cellpadding=0 cellspacing=0 ";
      var shadow = "<div>" + cs + "id='effwin_" + this.mId + "' height='0px'>";
      var hshadow = "<td style='padding-@@PAD:" + this.offset + ";'>" + cs + "width='100%' height='5px' class='" + mn.stlprf + "horzshadow'><tr><td></td></tr></table></td>";
      var vshadow = "<td style='padding-@@PAD:" + this.offset + ";height:100%;'>" + cs + "id='vshade_" + this.mId + "' width='5px' height='100%' class='" + mn.stlprf + "vertshadow'><tr><td></td></tr></table></td>";
      var menutd = "<td id='actmn_" + this.mId + "'>" + smenu + "</td>"; var cornertd = "<td class='" + mn.stlprf + "cornshadow' width='5px' height='5px'></td>"; var av = [vshadow.replace (/@@PAD/gi, "top"), vshadow.replace (/@@PAD/gi, "bottom")];
      var ah = [hshadow.replace (/@@PAD/gi, "left"), hshadow.replace (/@@PAD/gi, "right")];
      switch( this.pos)
	{
	case "none":        { shadow += "<tr>" + menutd + "</tr>"; } break;
	case "bottomright": { shadow += "<tr>" + menutd + av[0] + "</tr><tr>" + ah[0] + cornertd + "</tr>"; } break;
	case "bottomleft":  { shadow += "<tr>" + av[0] + menutd + "</tr><tr>" + cornertd + ah[1] + "</tr>"; } break;
	case "topleft":     { shadow += "<tr>" + cornertd + ah[1] + "</tr><tr>" + av[1] + menutd + "</tr>"; } break;
	case "topright":    { shadow += "<tr>" + ah[0] + cornertd + "</tr><tr>" + menutd + av[1] + "</tr>"; } break;
	}
      return shadow + "</table></div>";
    }
};




// HACKED:: Removed the stuff that we never turn out to need, just to simplify things.
//   The order of operations in the two "v = ..." lines that remain was causing the menu to display in the wrong direction in IE.  Fixed with parentheses to force order of operations.
//   OK, so why does order of operations matter?  With addition and subtraction it should make no difference.
//   At this point, I don't care.  I wasted two and a half days chasing this down.  As long as it works, the hack stays.
function $mPos( p1, p2, c, m, adj, scr, dr, drIdx, drVal)
{
	//  document.getElementById( 'debug').innerHTML='p1 = '+p1+' : p2 = '+p2+' : c = '+c+' : m = '+m+' : adj = '+adj+' : scr = '+scr;
  var v = 0;
  if( drVal == "left" || drVal == "up")
    { /*
      if( p2 + m > c)
	{
	  if( p1 >= m)
	    {
	      v = p1 - m + adj + scr;
	      dr[drIdx] = drVal;
	    }
	  else
	    {
	      v = (c < m ? m : c) - m - 1 + scr;
	    }
	}
      else
	{ */
	  v = p2 + (scr - adj);
	/* } */
    }
  else
    {
/*
      if( p1 - m < 0)
	{
	  if( p2 + m < c)
	    {
	      v = p2 - adj + scr;
	      dr[drIdx] = drVal;
	    }
	  else
	    {
	      v = scr;
	    }
	}
      else
	{
*/
	  v = p1 - (m + adj + scr);
	/* } */
    }
  return v;
}






NLSMENU.showMenu = function( x1, y1, x2, y2, orn, subDir, subAdj)
{
  this.mgr.clearTimeout ();
  if( this.menuOnShow( this.mId) == false) return;
  var ctx = NlsMenu.$GE( this.mId);
  if( typeof ctx != "[object]" || !ctx)
    {
      var dv = document.createElement( "div");
      dv.innerHTML = this.renderMenu( );
      document.body.insertBefore( dv, document.body.childNodes[0]);
      ctx = NlsMenu.$GE( this.mId);
    }

  /*
    var temp = '';
    var obj;
    for( x in ctx)
    try { temp += x + ": " + ctx[x] + "\n"; } catch( crap) { }
    alert(temp);
  */

  // Looks like Winders can't handle it when the code is inserted runtime into the html.
  // The contents of ctx are crap in IE not null, but not an object either.
  // ctx is a menu in firefox, but IE is an array containing { [length=2], [subProduct=[object]], [subProduct=[object]] }
  // We need to get to the subProduct object, and see what it's packing.  Maybe the menu in question, but, if so, why the extra
  // layer of abstraction?  This will be a problem with dropping code into an object at runtime.  Maybe IE wants to evaluate the
  // code in advance, and we are then replacing it.
  // ctx.innerHTML=eval(ctx.innerHTML);  // jams things up with some guts to look at anyway.

  ctx.style.visibility = "hidden";
  ctx.style.display = "";
  if (nls_isIE) this.init( );
  var w = window, d = document.body, de = document.documentElement;
  var scrOffX = w.scrollX || d.scrollLeft || de.scrollLeft;
  var scrOffY = w.scrollY || d.scrollTop || de.scrollTop;
  var cW = w.innerWidth || d.clientWidth, cH = w.innerHeight || d.clientHeight;
  try { var mW = ctx.childNodes[0].offsetWidth, mH = ctx.childNodes[0].offsetHeight; } catch( x) { }
  var sDir = (subDir ?[subDir[0], subDir[1]] :["right", "down"]);
  var adjX = (subAdj ? subAdj[0] : this.defPos[0]), adjY = (subAdj ? subAdj[1] : this.defPos[1]);
  var dmfrm = NlsMenu.$GE (this.mId + "ifrm");
  if (dmfrm)
    {
      var actMn = NlsMenu.$GE ("actmn_" + this.mId).children[0];
      dmfrm.width = actMn.offsetWidth;
      dmfrm.height = actMn.offsetHeight;
    }
  var mX = 0, mY = 0;
  if (orn == "V")
    {
      mX = $mPos (x1, x2, cW, mW, adjX, scrOffX, sDir, 0, (sDir[0] == "right" ? "left" : "right"));
      mY = $mPos (y2, y1, cH, mH, -adjY, scrOffY, sDir, 1, (sDir[1] == "down" ? "up" : "down"));
    }
  else
    {
      mX = $mPos (x2, x1, cW, mW, -adjX, scrOffX, sDir, 0, (sDir[0] == "right" ? "left" : "right"));
      mY = $mPos (y1, y2, cH, mH, adjY, scrOffY, sDir, 1, (sDir[1] == "down" ? "up" : "down"));
    }
  if( nls_isIE5 || !this.mgr.flowOverFormElement)
    {
      if (this.winElmt == null) hideWinElmt (this, { x1:mX, y1:mY, x2:mX + mW, y2:mY + mH });
      if (this.winElmt == null) this.winElmt =[];
      for( var i = 0; i < this.winElmt.length; i++)
	{
	  this.winElmt[i].style.visibility = "hidden";
	}
    }
  try { with( ctx.style)
         {
	   left = mX + "px";
	   top = mY + "px";
	   zIndex = this.zIndex;
	   if( this.effect)
	     {
	       with( this.effect)
		 {
		   prop["dir"] = sDir[(orn == "V" ? 0 : 1)];
		   start( false);
		   visibility = "visible";
		   run( );
		 }
	     }
	   else
	     {
	       visibility = "visible";
	     }
	 }
  } catch( x) { }
  this.rt.active = true
};






function $fInts( o, p)
{
  return ((o.x1 >= p.x1 && o.x1 <= p.x2) || (o.x2 >= p.x1 && o.x2 <= p.x2) || (o.x1 < p.x1 && o.x2 > p.x2)) && ((o.y1 >= p.y1 && o.y1 <= p.y2) || (o.y2 >= p.y1 && o.y2 <= p.y2) || (o.y1 < p.y1 && o.y2 > p.y2));
}





function hideWinElmt( mn, p)
{
  var o;
  for( var i = 0; i < nlsWinElmt.length; i++)
    {
      o = nlsWinElmt[i];
      if ($fInts (o, p) || $fInts (p, o))
	{
	  if( o.e.style.visibility != "hidden")
	    {
	      o.e.style.visibility = "hidden";
	      if( mn.winElmt == null) mn.winElmt =[];
	      mn.winElmt[mn.winElmt.length] = o.e;
	    }
	}
    }
}





NLSMENU.showMenuAbs = function( x, y)
{
  var ctx = NlsMenu.$GE (this.mId);
  ctx.style.top = y + "px";
  ctx.style.left = x + "px";
  ctx.style.display = "";
  this.rt.active = true
};





NLSMENU.hideMenu = function( )
{
  var ctx = NlsMenu.$GE (this.mId);
  if( !ctx) return;
  if( !this.isMenubar)
    {
      this.rt.active = false;
      if( this.effect)
	{
	  this.effect.start( true);
	  if(( nls_isIE && this.effect.effName != "aoslide") || nls_isOpera && this.effect.effName != "aoslide")
	    {
	      ctx.style.visibility = "hidden";
	    }
	  else
	    {
	      this.effect.onHide = function( )
		{
		  ctx.style.visibility = "hidden";
		};
	    }
	  this.effect.run( );
	}
      else
	{
	  ctx.style.visibility = "hidden";
	}
      this.menuOnHide (this.mId);
    }
  else
    {
      this.isMenuOpened = false;
    }
  if( this.lsItm != null)
    {
      var it = this.items[this.lsItm.id];
      if( it.state != 2 && !it.selected)
	{
	  setMnStyle (this.lsItm, (it.enable ? "N" : "D"), NlsMenu.getPrf (it, this));
	  setMnIcon (this, it, "N");
	}
      this.lsItm = null;
    }
  if( this.winElmt != null && this.winElmt.length > 0)
    {
      for( i = 0; i < this.winElmt.length; i++)
	{
	  this.winElmt[i].style.visibility = "visible";
	}
    }
  $wrtStatus( "");
};





NLSMENU.hasSubmenu = function( key)
{
  var it = this.getItemById (key), w = (it.crsFrame ? it.subFrame : window);
  return w.nlsGetMenu (it.subMenuId);
};





function $itemClick( mn, it)
{
  var mgr = nlsMenuMgr[mn.mgrId];
  mgr.hideMenus( );
  $crsFrameDo (mgr, function (f, mg) { f.hideAllNlsMenu (); });
  var trgt = it.target;
  if( trgt == null) trgt = $aonvl (mn.target, "_self");
  if( it.url != "")
    {
      open( it.url, trgt);
    }
  else
    {
      return mn.menuOnClick (mn.mId, it.id);
    }
}





NLSMENU.$menuItemClick = function( e, itemId)
{
  var it = this.items[itemId];
  if( !it.enable) return;
  var prf = NlsMenu.getPrf( it, this), oIt = NlsMenu.$GE( itemId), mgr = this.mgr;
  if( this.isMenubar && this.dropOnClick && (this.hasSubmenu( it.id) || it.rt.subUrl))
    {
      if( !this.isMenuOpened)
	{
	  NlsMenu.showMenu( this, it);
	  if( this.firstClickOnly) this.isMenuOpened = true;
	}
      else
	{
	  mgr.hideMenus( );
	  setMnStyle( oIt, (it.enable ? "O" : "D"), prf);
	  setMnIcon( this, it, "O");
	  this.isMenuOpened = false;
	  return null;
	}
    }
  else
    {
      if( it.toggle)
	{
	  this.setItemState( itemId, (it.state == 1 ? 2 : 1));
	}
      else if( this.selection)
	{
	  this.setSelection( itemId, true);
	}
      else if( mgr.memorizeSel)
	{
	  mgr.selectPath( this.mId, it.id);
	  mgr.savePath( itemId);
	}
      return $itemClick( this, it);
    }
};





NLSMENU.menuOnClick = function( menuId, itemId) { return true; };
NLSMENU.menuOnShow = function( menuId) { return true; };
NLSMENU.menuOnHide = function( menuId) { return true; };





NLSMENU.reload = function( dh)
{
  var ef = this.effect;
  if( ef)
    {
      ef.elm = null;
      ef.prop["init"] = false;
    }
  this.lsItm = null;
  if( dh != true) this.mgr.hideMenus( );
  var m = NlsMenu.$GE( this.mId);
  m.innerHTML = this.renderMenu ("content");
};





NLSMENU.setProperties = function( obj)
{
  for( var p in obj)
    {
      if( p == "items")
	{
	  for( var it in obj[p])
	    {
	      this.setItemProperties (it, obj[p][it]);
	    }
	}
      else
	this[p] = obj[p];
    }
};





NLSMENU.setItemProperties = function( id, obj)
{
  var it = this.getItemById( id);
  for( var p in obj)
    {
      it[p] = obj[p];
    }
};





function setMnIcon( mn, mnItm, f)
{
  var tf = (mnItm.enable ? f : "D"), ico = $aonevl( mnItm.ico, mn.itemIco);
  if( mn.showIcon && ico && ico.length > 1)
    {
      var k = mnItm.intKey;
      var c = NlsMenu.$GE( "ic_" + k), o = NlsMenu.$GE( "icovr_" + k), d = NlsMenu.$GE ("icdis_" + k);
      c.style.display = (tf == "N" || (tf == "D" && !d) ? "" : "none");
      o.style.display = (tf == "O" ? "" : "none");
      if( d) d.style.display = (tf == "D" ? "" : "none");
    }
  if( mn.showSubIcon && mnItm.subMenuId != "")
    {
      var ic = NlsMenu.$GE( "subicovr_" + mnItm.intKey);
      if( ic)
	{
	  ic.style.display = (tf == "O" ? "" : "none");
	  ic = NlsMenu.$GE( "subic_" + mnItm.intKey);
	  if( ic) ic.style.display = (tf == "N" || tf == "D" ? "" : "none");
	}
    }
}





function setMnStyle( it, s, prefix)
{
  var suff = (s == "O" ? "over" : (s == "S" ? "sel" : "")), cn;
  it.className = prefix + "nlsitemcontainer" + suff;
  if( !it.childNodes[0].rows) return;
  var r = it.childNodes[0].rows[0], rc = null;
  for( var i = 0; i < r.cells.length; i++)
    {
      rc = r.cells[i];
      if (rc.id == it.id + "x1") cn = prefix + "nlsiconcell" + suff;
      if (rc.id == it.id + "x2") cn = prefix + "nlsitem" + (s == "D" ? "disable" : suff);
      if (rc.id == it.id + "x3") cn = prefix + "nlssubmenucell" + suff;
      rc.className = cn;
    }
}




function nls_getXY( oIt)
{
  var p = { };
  p.x = 0;
  p.y = 0;
  p.x2 = 0;
  p.y2 = 0;
  var tmp = oIt;
  var d = document;
  while( tmp)
    {
      p.x += tmp.offsetLeft;
      p.y += tmp.offsetTop;
      tmp = tmp.offsetParent;
    }
  p.x -= (window.scrollX || d.body.scrollLeft || d.documentElement.scrollLeft);
  p.y -= (window.scrollY || d.body.scrollTop || d.documentElement.scrollTop);
  if( oIt)
    {
      p.x2 = p.x + oIt.offsetWidth;
      p.y2 = p.y + oIt.offsetHeight;
    }
  return p;
}





NlsMenu.showMenu = function( mn, it)
{
  if( it.rt.subUrl && it.rt.loaded == 0)
    {
      NlsMenuUtil.loadAJAXMenu( mn, it);
    }
  else
    {
      NlsMenu.$showMenu (mn, it);
    }
};

  
  

NlsMenu.$showMenu = function( prMenu, it)
{
  var oIt = NlsMenu.$GE( it.intKey);
  if( it.subMenuId != "" && it.enable == true)
    {
      var p = nls_getXY( oIt), smn;
      if( it.crsFrame)
	{
	  var ps = it.subPos;
	  if( ps[0] == "REL") { }
	  else
	    {
	      p.x = ps[0];
	      p.x2 = p.x;
	    }
	  if( ps[1] == "REL") { }
	  else
	    {
	      p.y = ps[1];
	      p.y2 = p.y;
	    }
	  if( !it.subFrame.nlsGetMenu) return;
	  smn = it.subFrame.nlsGetMenu( it.subMenuId);
	  if( !smn) return;
	}
      else
	{
	  smn = nlsGetMenu( it.subMenuId);
	  if( !smn) return;
	  if( smn.zIndex <= prMenu.zIndex)
	    {
	      smn.zIndex = prMenu.zIndex + 1;
	    }
	  var ma = prMenu.rt.ma;
	  if( ma)
	    {
	      p.y -= ma.scrollTop;
	      p.y2 -= ma.scrollTop;
	    }
	}
      smn.showMenu( p.x, p.y, p.x2, p.y2, prMenu.orient, it.subDir, it.subPosAdj);
    }
};






NlsMenu.getPrf = function (it, mn)
{
  return $aonevl( it.stlprf, mn.stlprf);
};






function nls_showMenu( mId, oIt, orient, subDir, subPosAdj)
{
  var mn = nlsGetMenu( mId), p;
  if( !mn)
    {
      hideAllNlsMenu( );
      return;
    }
  mn.mgr.clearTimeout( );
  if( mn.rt.active) return;
  p = nls_getXY( oIt);
  mn.mgr.hideMenus( );
  mn.showMenu( p.x, p.y, p.x2, p.y2, orient, subDir, subPosAdj);
}






function nls_hideMenu( mId)
{
  var m = nlsGetMenu( mId);
  if( m) $nlsMenuOut (m.mgrId);
}






function $nlsMenuOver( mgrId, mId)
{
  var mgr = nlsMenuMgr[mgrId], mn = mgr.getMenu( mId);
  mgr.clearTimeout( );
  if( mgr.rt.cmId != mId)
    {
      clearTimeout( mgr.rt.ctm);
      mgr.rt.ctm = null;
    }
  $crsFrameDo( mgr, function( f, mg) { f.clearTimeout (mg.rt.ctm); mg.rt.ctm = null; });
  if( mgr.rt.cmId != mId) $$nlsItemOver1( null, mId + "_dmy");
}





function $nlsMenuOut (mgrId)
{
  var mgr = nlsMenuMgr[mgrId];
  if( mgr.design == true) return;
  mgr.clearTimeout( );
  mgr.setTimeout( function( ) { mgr.hideMenus( ); }, mgr.timeout);
  $crsFrameDo( mgr, function( f, mg) { mg.clearTimeout (); mg.setTimeout( function( ) { mg.hideMenus( ); }, mg.timeout); });
}



function $nlsItemOver( e, mId, itId)
{
  $$nlsItemOver1( e, itId);
  $$nlsItemOver2( mId, itId);
  e.cancelBubble = true;
}





function $nlsItemOut( e, mId)
{
  var mn = nlsMenu[mId], mgr = mn.mgr;
  mgr.rt.cmId = mId;
  mgr.rt.ctm = setTimeout( function( ) { $$nlsItemOver1( e, mId + "_$dmy") }, 300);
}




function $$nlsItemOver1( e, itId)
{
  var m = itId.split ("_"), mn = nlsMenu[m[0]], mgr = mn.mgr;
  if( mgr.rt.cmId)
    {
      clearTimeout( mgr.rt.ctm);
      mgr.rt.ctm = null;
    }
  $crsFrameDo( mgr, function( f, mg) { f.clearTimeout (mg.rt.ctm); mg.rt.ctm = null; });
  if( mn.mgr.design == true) return;
  if( !mn.rt.active || !mn.rt.ready) return;
  var it = null, st = "", nli = null, li = mn.lsItm;
  if( li != null)
    {
      it = mn.items[li.id];
      if( !it) return;
      if( it.intKey == itId) return;
      if( it.state != 2 && !it.selected)
	{
	  var st = NlsMenu.getPrf( it, mn);
	  var ef = ( it.itemEffect != null);
	  if( ef)
	    {
	      it.itemEffect.init( );
	    }
	  setMnStyle( li, (it.enable ? "N" : "D"), st);
	  setMnIcon( mn, it, "N");
	  if( ef)
	    {
	      it.itemEffect.start( );
	    }
	}
      var w = it.crsFrame ? it.subFrame : window, tmp = null;
      if( w.nlsGetMenu)
	tmp = w.nlsGetMenu( it.subMenuId);
      while( tmp != null)
	{
	  nli = null;
	  if( tmp.lsItm)
	    {
	      it = tmp.items[tmp.lsItm.id];
	      w = it.crsFrame ? it.subFrame : tmp.wnd;
	      nli = w.nlsGetMenu( it.subMenuId);
	    }
	  tmp.hideMenu( );
	  tmp = nli;
	}
    }
  mn.lsItm = null;
  var oIt = NlsMenu.$GE( itId);
  it = mn.items[itId];
  if( !it) return;
  $wrtStatus( it.url);
  if( it.state != 2 && !it.selected)
    {
      if( it.itemEffect != null)
	{
	  it.itemEffect.init( );
	}
      setMnStyle( oIt, (it.enable ? "O" : "D"), NlsMenu.getPrf( it, mn));
      setMnIcon( mn, it, "O");
      if( it.itemEffect != null)
	{
	  it.itemEffect.start( );
	}
    }
  if( !mn.isMenubar || (mn.isMenubar && !mn.dropOnClick) || (mn.isMenubar && mn.dropOnClick && mn.isMenuOpened))
    {
      NlsMenu.showMenu( mn, it);
    }
  mn.lsItm = oIt;
}





function $$nlsItemOver2( mId, itId)
{
  var mn = nlsMenu[mId], mgr = mn.mgr;
  if( mgr.design == true) return;
  mgr.clearTimeout( );
  $crsFrameDo( mgr, function( f, mg) { mg.clearTimeout( ); } );
  for( var it in nlsMenuMgr)
    {
      if( it != mgr.mgrId)
	{
	  nlsMenuMgr[it].hideMenus ();
	}
    }
}





function $crsFrameDo( mgr, f)
{
  var a = mgr.assocMenuMgr, frm;
  if( a && a.length > 0)
    {
      for( var i = 0; i < a.length; i++)
	{
	  frm = a[i];
	  if( !frm[0].nlsMenuMgr) continue;
	  f( frm[0], frm[0].nlsMenuMgr[frm[1]]);
	}
    }
}





function nlsGetMenu( mId)
{
  return nlsMenu[mId];
}





function hideAllNlsMenu( )
{
  for( it in nlsMenu)
    {
      if( nlsMenu[it].rt.active) nlsMenu[it].hideMenu( );
    }
}




function $wrtStatus( s)
{
  if( typeof( window.status) != "undefined")
    window.status = s;
}




function $aonvl( v, c)
{
  if( v) return v;
  else return c;
}





function $aonevl( v, c)
{
  if( !v || v == "") return c;
  else return v;
}





NlsMenu.$GE = function( id)
{
  if( document.getElementById) { return document.getElementById( id); }
  else if( document.all) { return document.all( id); }
  else return id;
};

