loader = (isFrames) ? (NS) ? parent : parent.document.body : window;
  loader.onload = startIt;

  if(NS){
      origWidth = loader.innerWidth;
      origHeight = loader.innerHeight;
      loader.onresize = reDo;
  }
  isLoaded = false;
  NSresized = false;

  if (!window.menuVersion) {
      clickKill = showVisited = NSfontOver = keepHilite = clickStart = false;
  }

  isWin = (navigator.appVersion.indexOf("Win") != -1)
  if (!isWin && !isMac) NSfontOver = showVisited = false;

  mSecsVis = secondsVisible*1000;
  isRight = (window.navFrLoc && navFrLoc == "right");

imgSuf = (isRight) ? ">"  : "ALIGN=RIGHT>";
 imgStr = "<IMG SRC=" + imgSrc + " WIDTH=" + imgSiz + " HEIGHT=" + imgSiz +" BORDER=0 VSPACE=2 " + imgSuf;
 spStr = (isRight && NS) ? "<SPACER TYPE=HORIZONTAL SIZE="+imgSiz+">" : "";

  areCreated = false;
  menuLoc = null;

  function initVars() {
      if(areCreated) {
          for(i=1; i<topCount; i++) {
              cur = eval("elMenu"+i);
              clearTimeout(cur.hideTimer);
              cur.hideTimer=null;
          }
          clearTimeout(allTimer);
      }
      topCount = 1;
      areCreated = false;
      beingCreated = false;
      isOverMenu = false;
      currentMenu = null;
      allTimer = null;
  }

  initVars();

  function NSunloaded(){
      isLoaded = false;
  }

  function NSloaded(e){
      if (e.target.name == mainFrName) {
          initVars();
          startIt();
      }
  }

  function IEunloaded() {
      initVars();
      isLoaded = false;
      setTimeout("keepTrack()",50)
  }

  function keepTrack() {
      if (menuLoc.document.readyState == "complete") {
          initVars();
          startIt();
      }
      else {
          setTimeout("keepTrack()",50);
      }
  }

  function startIt() {
      isLoaded = true;
      if (isFrames) {
          menuLoc = eval("parent.frames." + mainFrName);
          if (NS) {
              loader.captureEvents(Event.LOAD);
              loader.onload = NSloaded;
              menuLoc.onunload = NSunloaded;
          }
          if (IE4) {
              menuLoc.document.body.onunload = IEunloaded;
          }
      }
      else {
          menuLoc = window;
      }
      menuLoc.nav = nav = window;
      if (clickKill) {
          if (NS) menuLoc.document.captureEvents(Event.MOUSEDOWN);
          menuLoc.document.onmousedown = clicked;
      }
      makeTop();    
  }

  function makeTop(){
      beingCreated = true;

      while(eval("window.arMenu" + topCount)) {
          (NS) ? makeMenuNS(false,topCount) : makeMenuIE(false,topCount);
          topCount++
      }

      status = ""
      areCreated = true;
      beingCreated = false;
  }

  function makeMenuNS(isChild,menuCount,parMenu,parItem) {
      tempArray = eval("arMenu" + menuCount);
      
      if (!isChild) {
          tempWidth = tempArray[0] ? tempArray[0] : menuWidth;
          menu = makeElement("elMenu" + menuCount,tempWidth);
      }
      else {
          menu = makeElement("elMenu" + menuCount,null,parMenu);
      }
      menu.array = tempArray;
      menu.setMenuTree = setMenuTree;
      menu.setMenuTree(isChild,parMenu);

      while (menu.itemCount < menu.maxItems) {
          menu.itemCount++;
          status = ": Loading Menus " + menuCount + " / " + menu.itemCount;
          prevItem = (menu.itemCount > 1) ? menu.item : null;
          itemName = "item" + menuCount + "_" + menu.itemCount;

          menu.item = makeElement(itemName,null,null,menu);

          menu.item.prevItem = prevItem;
          menu.item.setup = itemSetup;
          menu.item.setup(menu.itemCount,menu.array);
          if (menu.item.hasMore) {
              makeMenuNS(true,menuCount + "_" + menu.itemCount,menu,menu.item);
              menu = menu.parentMenu;
          }
      }

      menu.lastItem = menu.item;
      menu.setup(isChild,parMenu,parItem);
  }

  function setMenuTree(isChild,parMenu) {
      if (!isChild) {
          this.menuWidth = this.array[0] ? this.array[0] : menuWidth;
          this.menuLeft = this.array[1];
          this.menuTop = this.array[2];
          this.menuFontColor = this.array[3] ? this.array[3] : fntCol;
          this.menuFontOver = this.array[4] ? this.array[4] : overFnt;
          this.menuBGColor = this.array[5] ? this.array[5] : backCol;
          this.menuBGOver = this.array[6] ? this.array[6] : overCol;
          this.menuBorCol = this.array[7] ? this.array[7] : borCol;
          this.menuSeparatorCol = this.array[8] ? this.array[8] : separatorCol;
          this.treeParent = this;
          this.startChild = this;
      }
      else {
          this.menuWidth = parMenu.menuWidth;
          this.menuLeft = parMenu.menuLeft;
          this.menuTop = parMenu.menuTop;
          this.menuFontColor = parMenu.menuFontColor;
          this.menuFontOver = parMenu.menuFontOver;
          this.menuBGColor = parMenu.menuBGColor;
          this.menuBGOver = parMenu.menuBGOver;
          this.menuBorCol = parMenu.menuBorCol;
          this.menuSeparatorCol = parMenu.menuSeparatorCol;
          this.treeParent = parMenu.treeParent;
      }

      this.maxItems = (isChild) ? this.array.length/3 : (this.array.length-9)/3;
      this.hasParent = isChild;
      this.setup = menuSetup;
      this.itemCount = 0;
  }

  function makeMenuIE(isChild,menuCount,parMenu) {

      menu = makeElement("elMenu" + menuCount);
      menu.array = eval("arMenu" + menuCount);

      menu.setMenuTree = setMenuTree;
      menu.setMenuTree(isChild,parMenu);

      menu.itemStr = "";
      
      while (menu.itemCount < menu.maxItems) {
          menu.itemCount++;
          status = "Welcome to UISCPL.com: Loading Menus " + menuCount + " / " + menu.itemCount;
          itemName = "item" + menuCount + "_" + menu.itemCount;

          arrayPointer = (isChild) ? (menu.itemCount-1)*3 :((menu.itemCount-1)*3)+9;
          dispText = menu.array[arrayPointer];
          hasMore = menu.array[arrayPointer + 2];
          htmStr = (hasMore) ? imgStr + dispText : dispText;
          menu.itemStr += "<SPAN ID=" + itemName + " STYLE=\"width:" + menu.menuWidth + "\">" + htmStr + "</SPAN><BR>";

          if (hasMore) {
              makeMenuIE(true,menuCount + "_" + menu.itemCount,menu);
              menu = menu.parentMenu;
          }    
      }

      menu.innerHTML = menu.itemStr;
      itemColl = menu.children.tags("SPAN");
      for (i=0; i<itemColl.length; i++) {
          it = itemColl(i);
          it.setup = itemSetup;
          it.setup(i+1,menu.array);
      }
      menu.lastItem = itemColl(itemColl.length-1);
      menu.setup(isChild,parMenu);
  }

  function makeElement(whichEl,whichWidth,whichParent,whichContainer) {
      if (NS) {
          if (whichWidth) {
              elWidth = whichWidth;
          }
          else {
              elWidth = (whichContainer) ? whichContainer.menuWidth : whichParent.menuWidth;
              if (whichContainer) elWidth = elWidth-(borWid*2)-(itemPad*2);
          }

      if (!whichContainer) whichContainer = menuLoc;
  // next 2 lines new to version 3.03:
          tmpLyr = new Layer(elWidth,whichContainer);
          eval(whichEl + "= tmpLyr");
      }
      else {
          elStr = "<DIV ID=" + whichEl + " STYLE='position:absolute'></DIV>";
          menuLoc.document.body.insertAdjacentHTML("BeforeEnd",elStr);
          if (isFrames) eval(whichEl + "= menuLoc." + whichEl);
      }
      return eval(whichEl);
  }

  function itemSetup(whichItem,whichArray) {
      this.onmouseover = itemOver;
      this.onmouseout = itemOut;
      this.container = (NS) ? this.parentLayer : this.offsetParent;

      arrayPointer = (this.container.hasParent) ? (whichItem-1)*3 : ((whichItem-1)*3)+9;

      this.dispText = whichArray[arrayPointer];
      this.linkText = whichArray[arrayPointer + 1];
      this.hasMore = whichArray[arrayPointer + 2];

      if (IE4 && this.hasMore) {
          this.child = eval("elMenu" + this.id.substr(this.id.indexOf("_")-1));
          this.child.parentMenu = this.container;
          this.child.parentItem = this;
      }

      if (this.linkText) {
          if (NS) {
              this.captureEvents(Event.MOUSEUP)
              this.onmouseup = linkIt;
          }
          else {
              this.onclick = linkIt;
              this.style.cursor = "hand";
          }
      }

      if (NS) {
          htmStr = this.dispText;
           this.document.tags.A.textDecoration = "none";
          if (fntBold) htmStr = htmStr.bold();
          if (fntItal) htmStr = htmStr.italics();
          htmStr = "<FONT FACE=" + fntFam + " POINT-SIZE=" + fntSiz + ">" + htmStr+ "</FONT>";
          
          if (this.linkText) {
              with (this.document) {
                  linkColor = this.container.menuFontColor;
                  alinkColor = this.container.menuFontColor;
                  vlinkColor = (showVisited) ? showVisited : this.container.menuFontColor;
              }
              htmStrOver = htmStr.fontcolor(this.container.menuFontOver).link("javascript:void(0)");
              htmStr = htmStr.link("javascript:void(0)");
          }
          else {
              htmStrOver = htmStr.fontcolor(this.container.menuFontOver);
              htmStr = htmStr.fontcolor(this.container.menuFontColor);
          }
          
          this.htmStr = (this.hasMore) ? imgStr + htmStr : spStr + htmStr;
          this.htmStrOver = (this.hasMore) ? imgStr + htmStrOver : spStr + htmStrOver;        
          
          this.document.write(this.htmStr);
          this.document.close();
          
          this.visibility = "inherit";
          this.bgColor = this.container.menuBGColor;

          if (whichItem == 1) {
              this.top = borWid + itemPad;
          }
          else {
              this.top = this.prevItem.top + this.prevItem.clip.height + separator;
          }

          this.left = borWid + itemPad;
          this.clip.top = this.clip.left = -itemPad;
          this.clip.bottom += itemPad;
          this.clip.right = this.container.menuWidth-(borWid*2)-itemPad;        
      }
      else {
          with (this.style) {
              padding = itemPad;
              if (isRight && !this.hasMore) paddingLeft = parseInt(padding)+imgSiz;
              color = this.container.menuFontColor;
              fontSize = fntSiz + "pt";
              fontWeight = (fntBold) ? "bold" : "normal";
              fontStyle =    (fntItal) ? "italic" : "normal";
              fontFamily = fntFam;
          
              borderBottomWidth = separator + "px";
              borderBottomColor = this.container.menuSeparatorCol;
              borderBottomStyle = "solid";
              backgroundColor = this.container.menuBGColor;
          }
      }
  }    

  function menuSetup(hasParent,openCont,openItem) {
      this.onmouseover = menuOver;
      this.onmouseout = menuOut;
      
      this.showIt = showIt;
      this.keepInWindow = keepInWindow;
      this.hideTree = hideTree
      this.hideParents = hideParents;
      this.hideChildren = hideChildren;
      this.hideTop = hideTop;
      this.hasChildVisible = false;
      this.isOn = false;
      this.hideTimer = null;

      this.childOverlap = (perCentOver != null) ? ((perCentOver/100) * this.menuWidth) : childOverlap;
      this.currentItem = null;
      this.hideSelf = hideSelf;
          
      if (hasParent) {
          this.hasParent = true;
          this.parentMenu = openCont;
          if (NS) {
              this.parentItem = openItem;
              this.parentItem.child = this;
          }
      }
      else {
          this.hasParent = false;
      }

      if (NS) {
          this.bgColor = this.menuBorCol;
          this.fullHeight = this.lastItem.top + this.lastItem.clip.bottom + borWid;
          this.clip.right = this.menuWidth;
          this.clip.bottom = this.fullHeight;
      }
      else {
          with (this.style) {
              width = this.menuWidth;
              borderWidth = borWid;
              borderColor = this.menuBorCol;
              borderStyle = borSty;
          }

          this.lastItem.style.border="";
          this.fullHeight = this.scrollHeight;
          this.showIt(false);
          this.onselectstart = cancelSelect;
          this.moveTo = moveTo;
          this.moveTo(0,0);
          
      }
  }

  function popUp(menuName,e){
      if (NS && NSresized) startIt();
      if (!isLoaded) return;
      linkEl = (NS) ? e.target : event.srcElement;
      if (clickStart) linkEl.onclick = popMenu;
      if (!beingCreated && !areCreated) startIt();
      linkEl.menuName = menuName;    
      if (!clickStart) popMenu(e);
  }

  function popMenu(e){
      if (!isLoaded || !areCreated) return true;

      eType = (NS) ? e.type : event.type;
      if (clickStart && eType != "click") return true;
      hideAll();

      linkEl = (NS) ? e.target : event.srcElement;
      
      currentMenu = eval(linkEl.menuName);
      currentMenu.hasParent = false;
      currentMenu.treeParent.startChild = currentMenu;
      
      if (IE4) menuLocBod = menuLoc.document.body;
      if (!isFrames) {
          xPos = (currentMenu.menuLeft) ? currentMenu.menuLeft : (NS) ? e.pageX : (event.clientX + menuLocBod.scrollLeft);
          yPos = (currentMenu.menuTop) ? currentMenu.menuTop : (NS) ? e.pageY : (event.clientY + menuLocBod.scrollTop);
      }
      else {
          switch (navFrLoc) {
              case "left":
                  xPos = (currentMenu.menuLeft) ? currentMenu.menuLeft : (NS) ? menuLoc.pageXOffset : menuLocBod.scrollLeft;
                  yPos = (currentMenu.menuTop) ? currentMenu.menuTop : (NS) ? (e.pageY-pageYOffset)+menuLoc.pageYOffset : event.clientY + menuLocBod.scrollTop;
                  break;
              case "top":
                  xPos = (currentMenu.menuLeft) ? currentMenu.menuLeft : (NS) ? (e.pageX-pageXOffset)+menuLoc.pageXOffset : event.clientX + menuLocBod.scrollLeft;
                  yPos = (currentMenu.menuTop) ? currentMenu.menuTop : (NS) ? menuLoc.pageYOffset : menuLocBod.scrollTop;
                  break;
              case "bottom":
                  xPos = (currentMenu.menuLeft) ? currentMenu.menuLeft : (NS) ? (e.pageX-pageXOffset)+menuLoc.pageXOffset : event.clientX + menuLocBod.scrollLeft;
                  yPos = (currentMenu.menuTop) ? currentMenu.menuTop : (NS) ? menuLoc.pageYOffset+menuLoc.innerHeight : menuLocBod.scrollTop + menuLocBod.clientHeight;
                  break;
              case "right":
                  xPos = (currentMenu.menuLeft) ? currentMenu.menuLeft : (NS) ? menuLoc.pageXOffset+menuLoc.innerWidth : menuLocBod.scrollLeft+menuLocBod.clientWidth;
                  yPos = (currentMenu.menuTop) ? currentMenu.menuTop : (NS) ? (e.pageY-pageYOffset)+menuLoc.pageYOffset : event.clientY + menuLocBod.scrollTop;
                  break;
          }
      }

      currentMenu.moveTo(xPos,yPos);
      currentMenu.keepInWindow()
      currentMenu.isOn = true;
      currentMenu.showIt(true);

      return false;
  }

  function menuOver() {
      this.isOn = true;
      isOverMenu = true;
      currentMenu = this;
      if (this.hideTimer) clearTimeout(this.hideTimer);
  }

  function menuOut() {
      if (IE4) {
          theEvent = menuLoc.event;
          if (theEvent.srcElement.contains(theEvent.toElement)) return;
      }
      this.isOn = false;
      isOverMenu = false;
      if (!clickKill) allTimer = setTimeout("currentMenu.hideTree()",10);  

  }

  function itemOver(){
      if (keepHilite) {
          if (this.container.currentItem && this.container.currentItem != this) {
              if (NS) {
                  this.container.currentItem.bgColor = this.container.menuBGColor;
                  if (NSfontOver) {
                      with (this.container.currentItem.document) {
                          linkColor = this.container.menuFontColor;
                          write(this.container.currentItem.htmStr)
                          close();
                      }
                  }
              }
              else {
                  with (this.container.currentItem.style) {
                      backgroundColor = this.container.menuBGColor;
                      color = this.container.menuFontColor;
                  }
              }
          }
      }

      if (IE4) {
          theEvent = menuLoc.event;
          if (theEvent.srcElement.tagName == "IMG") return;
          this.style.backgroundColor = this.container.menuBGOver;
          this.style.color = this.container.menuFontOver;
      }
      else {
          this.bgColor = this.container.menuBGOver;
          if (NSfontOver) {
              this.document.write(this.htmStrOver);
              this.document.close();
          }

      }

      this.container.currentItem = this;

      if (this.container.hasChildVisible) {
          this.container.hideChildren(this);
      }

      if (this.hasMore) {
          horOffset = (isRight) ? (this.container.childOverlap - this.container.menuWidth) : (this.container.menuWidth - this.container.childOverlap);

          if (NS) {
              this.childX = this.container.left + horOffset;
              this.childY = this.pageY + childOffset;
          }
          else {
              this.childX = this.container.style.pixelLeft + horOffset;
              this.childY = this.offsetTop + this.container.style.pixelTop + childOffset;
          }

          this.child.moveTo(this.childX,this.childY);
          this.child.keepInWindow();
          this.container.hasChildVisible = true;
          this.container.visibleChild = this.child;
          this.child.showIt(true);
      }
  }

  function itemOut() {
      if (IE4) {
          theEvent = menuLoc.event;
          if (theEvent.srcElement.contains(theEvent.toElement)
       || (theEvent.fromElement.tagName=="IMG" && theEvent.toElement.contains(theEvent.fromElement)))
          return;
          if (!keepHilite) {
              this.style.backgroundColor = this.container.menuBGColor;
              this.style.color = this.container.menuFontColor;
          }
      }
      else {
          if (!keepHilite) {
              this.bgColor = this.container.menuBGColor;
              if (NSfontOver) {
                  with (this.document) {
                      linkColor = this.container.menuFontColor;
                      write(this.htmStr);
                      close();
                  }
              }
      
          }
          if (!isOverMenu && !clickKill) {
              allTimer = setTimeout("currentMenu.hideTree()",10); 
          }
      }
  }

  function moveTo(xPos,yPos) {
      this.style.pixelLeft = xPos;
      this.style.pixelTop = yPos;
  }

  function showIt(on) {
      if (NS) {
          this.visibility = (on) ? "show" : "hide";
          if (keepHilite && this.currentItem) {
              this.currentItem.bgColor = this.menuBGColor;
              if (NSfontOver) {
                  with (this.currentItem.document) {
                      write(this.currentItem.htmStr);
                      close();
                  }
              }
          }
      }
      else {
          this.style.visibility = (on) ? "visible" : "hidden";
          if (keepHilite && this.currentItem) {
              with (this.currentItem.style) {
                  backgroundColor = this.menuBGColor;
                  color = this.menuFontColor;
              }
          }
      }
      this.currentItem = null;
  }

  function keepInWindow() {
      scrBars = 20;
      botScrBar = (isFrames && navFrLoc=="bottom") ? (borWid*2) : scrBars;
      rtScrBar = (isFrames && navFrLoc=="right") ? (borWid*2) : scrBars;
      if (NS) {
          winRight = (menuLoc.pageXOffset + menuLoc.innerWidth) - rtScrBar;
          rightPos = this.left + this.menuWidth;
     
          if (rightPos > winRight) {
              if (this.hasParent) {
                  parentLeft = this.parentMenu.left;
                  newLeft = ((parentLeft-this.menuWidth) + this.childOverlap);
                  this.left = newLeft;
              }
              else {
                  dif = rightPos - winRight;
                  this.left -= dif;
              }
          }

          winBot = (menuLoc.pageYOffset + menuLoc.innerHeight) - botScrBar ;
          botPos = this.top + this.fullHeight;

          if (botPos > winBot) {
              dif = botPos - winBot;
              this.top -= dif;
          }
          
          winLeft = menuLoc.pageXOffset;
          leftPos = this.left;

          if (leftPos < winLeft) {
              if (this.hasParent) {
                  parentLeft = this.parentMenu.left;
                  newLeft = ((parentLeft+this.menuWidth) - this.childOverlap);
                  this.left = newLeft;
              }
              else {
                  this.left = 5;
              }
          }
      }
      else {
          winRight = (menuLoc.document.body.scrollLeft + menuLoc.document.body.clientWidth) - rtScrBar;
          rightPos = this.style.pixelLeft + this.menuWidth;
      
          if (rightPos > winRight) {
              if (this.hasParent) {
                  parentLeft = this.parentMenu.style.pixelLeft;
                  newLeft = ((parentLeft - this.menuWidth) + this.childOverlap);
                  this.style.pixelLeft = newLeft;
              }
              else {
                  dif = rightPos - winRight;
                  this.style.pixelLeft -= dif;
              }
          }

          winBot = (menuLoc.document.body.scrollTop + menuLoc.document.body.clientHeight) - botScrBar;
          botPos = this.style.pixelTop + this.fullHeight;

          if (botPos > winBot) {
              dif = botPos - winBot;
              this.style.pixelTop -= dif;
          }
          
          winLeft = menuLoc.document.body.scrollLeft;
          leftPos = this.style.pixelLeft;

          if (leftPos < winLeft) {
              if (this.hasParent) {
                  parentLeft = this.parentMenu.style.pixelLeft;
                  newLeft = ((parentLeft+this.menuWidth) - this.childOverlap);
                  this.style.pixelLeft = newLeft;
              }
              else {
                  this.style.pixelLeft = 5;
              }
          }
      }
  }

  function linkIt() {
          if (this.linkText.indexOf("javascript")!=-1){
          eval(this.linkText);
          return true
      }
          menuLoc.location.href = this.linkText;
          return false;
  }

  function popDown(menuName){
      if (!isLoaded || !areCreated) return;
      whichEl = eval(menuName);
      whichEl.isOn = false;
      if (!clickKill) whichEl.hideTop();
  }

  function hideAll() {
      for(i=1; i<topCount; i++) {
          temp = eval("elMenu" + i + ".startChild");
          temp.isOn = false;
          if (temp.hasChildVisible) temp.hideChildren();
          temp.showIt(false);
      }    
  }

  function hideTree() { 
      allTimer = null;
      if (isOverMenu) return;
      if (this.hasChildVisible) {
          this.hideChildren();
      }
      this.hideParents();
  }

  function hideTop() {
      whichEl = this;
      (clickKill) ? whichEl.hideSelf() : (this.hideTimer = setTimeout("whichEl.hideSelf()",mSecsVis));
  }

  function hideSelf() {
      this.hideTimer = null;
      if (!this.isOn && !isOverMenu) { 
          this.showIt(false);
      }
  }

  function hideParents() {
      tempMenu = this;
      while (tempMenu.hasParent) {
          tempMenu.showIt(false);
          tempMenu.parentMenu.isOn = false;        
          tempMenu = tempMenu.parentMenu;
      }
      tempMenu.hideTop();
  }

  function hideChildren(item) {
      tempMenu = this.visibleChild;
      while (tempMenu.hasChildVisible) {
          tempMenu.visibleChild.showIt(false);
          tempMenu.hasChildVisible = false;
          tempMenu = tempMenu.visibleChild;
      }

      if (!this.isOn || !item.hasMore || this.visibleChild != this.child) {
          this.visibleChild.showIt(false);
          this.hasChildVisible = false;
      }
  }

  function cancelSelect(){return false}

  function reDo(){
      if (loader.innerWidth==origWidth && loader.innerHeight==origHeight) return;
      initVars();
      NSresized=true;
      menuLoc.location.reload();
  }

  function clicked() {
      if (!isOverMenu && currentMenu!=null && !currentMenu.isOn) {
          whichEl = currentMenu;
          whichEl.hideTree();
      }
  }

  window.onerror = handleErr;

  function handleErr(){
      arAccessErrors = ["permission","access"];
      mess = arguments[0].toLowerCase();
      found = false;
      for (i=0;i<arAccessErrors.length;i++) {
          errStr = arAccessErrors[i];
          if (mess.indexOf(errStr)!=-1) found = true;
      }
      return found;
  }


  // end

