function jsmDisplay() {
  var i;

  if (!ItemParent) {
    ItemParent = new Array();
    jsmParents(m0,-1);
  }

  if (!jsmExpand) {
      jsmExpand = new Array();
      for (i = 0; i < jsmIndex; i++)
        jsmExpand[i] = 0;
      jsmSelected = -1;
  }
  jsmDocument = window.frames[jsmFrame].document;

  jsmDepth = 0;
  jsmBars = new Array();

  jsmSelectedFound = false;
  jsmScrollX = 36;
  jsmScrollY = 18;

  if (document.images)
    jsmDocument.open("text/html", "replace");
  else
    jsmDocument.open("text/html");
  jsmDocument.writeln('<head>');
  jsmDocument.writeln('<base href="' + jsmBase + '">');
  jsmDocument.writeln('<title>' + jsmRoot + '</title>');
  jsmDocument.writeln('<style type="text/css">a {text-decoration:none;}</style>');
  if (jsmstyles)
    jsmDocument.writeln('<link rel="stylesheet" href="' + jsmstyles + '" type="text/css">');
  jsmDocument.writeln('</head>');
  jsmDocument.writeln('<body background="' + jsmBackground + '" bgcolor="' + jsmBgColor + '" text="' + jsmFgColor + '" link="' + jsmFgColor + '" alink="' + jsmFgColor + '" vlink="' + jsmFgColor + '" onLoad="parent.jsmScroll();">');
  jsmDocument.writeln('<table border=0 cellpadding=0 cellspacing=0>');
  jsmDocument.write('<tr valign=top><td>');
  jsmDocument.write('<a href="'+ jsmRootLink + '" target="main" onClick="return parent.jsmClickRoot();">');
  jsmDocument.write('<img src="' + jsmRootIcon + '" align=left border=0 vspace=0 hspace=0>');
  jsmDocument.write('<font face="' + jsmFont + '" size=' + jsmFontSize + '>&nbsp;' + jsmRoot + '&nbsp;</font>');
  jsmDocument.writeln('</td></tr>');
  jsmListItems(m0);
  jsmDocument.writeln('</table>');
  jsmDocument.writeln('</body>');
  jsmDocument.close();
}

function jsmItem(text, url, target, icon) {
  this.text = text;
  if (url)
    this.url = url;
  else
    this.url = "";
  if (target)
    this.target = target;
  else
    this.target = "";
  if (icon)
    this.icon = icon;
  else
    this.icon = "";
  this.submenu = null;
  this.index = jsmIndex++;
  this.makeSubmenu = jsmMakeSubmenu;
}


function jsmMakeSubmenu(menu) {
  this.submenu = menu;
}



function jsm() {
  this.items = new Array();
  this.addItem = jsmAddItem;
}


var jsmIndex = 0;
var jsmDocument;       // Handle to the menu frame document.
var jsmWidth;          // Menu width in pixels.
var jsmExpand;         // Array created from first cookie.
var jsmSelected;       // Index of selected menu item from other cookie.
var jsmSelectedFound;  // Indicates if we've displayed the selected item.
var jsmScrollX;        // Amount to scroll the window right, if needed.
var jsmScrollY;        // Amount to scroll the window down, if needed.
var jsmLastItem;       // Flag indicating if we are on a menu's last item.
var jsmDepth;          // Keeps track the current menu level.
var jsmBars;           // Keeps track of image placement from row to row.
var ItemParent;


function jsmAddItem(item) {
  this.items[this.items.length] = item;
  return (this.items.length - 1);
}


function jsmListItems(menu) {
  var i;

  for (i = 0; i < menu.items.length; i++) {
    if (i == menu.items.length - 1)
      jsmLastItem = true;
    else
      jsmLastItem = false;
    jsmDisplayItem(menu.items[i]);
  }
}


function jsmDisplayItem(item) {
  var bars, cmd, expanded, i, img, alt, link, more, submenu;

  if (item.index == jsmSelected)
    jsmSelectedFound = true;
  if (!jsmSelectedFound)
    jsmScrollY += 18;

  if (jsmExpand[item.index] == 1)
    expanded = true;
  else
    expanded = false;

 
  if (item.submenu)
  {
    submenu = true;
  }
  else
    submenu = false;
  if (item.url != "")
    link = true;
  else
    link = false;
  cmd = "return parent.jsmClick(" + item.index + ", " + link + ", " + submenu + ");";

  jsmDocument.write('<tr valign=top><td nowrap>');

  bars = new Array();
  
  for (i = 0; i < jsmDepth; i++) {
    if (jsmBars[i]) {
      jsmDocument.write('<img src="' + jsmVertical + '" align=left border=0 vspace=0 hspace=0>');
      bars[i] = true;
    }
    else {
      jsmDocument.write('<img src="' + jsmSpace + '" align=left border=0 vspace=0 hspace=0>');
      bars[i] = false;
    }
    if (item.index == jsmSelected)
      jsmScrollX += 18;
  }

  more = false;
  if (item.submenu && jsmFolders >= 0)
    for (i = 0; i < item.submenu.items.length; i++)
      if (item.submenu.items[i].submenu != null || jsmFolders == 1)
        more = true;

  if (!more) {
    if (jsmLastItem) {
      img = jsmCorner;
      bars[bars.length] = false;
    }
    else {
      img = jsmT;
      bars[bars.length] = true;
    }
    jsmDocument.write('<img src="' + img + '" align=left border=0 vspace=0 hspace=0>');
  }

  if (item.url != "")
    jsmDocument.write('<a href="' + item.url + '" target="' + item.target + '" onClick="' + cmd + '">');
  else
    jsmDocument.write('<a href="#" onClick="' + cmd + '">');

  if (more) {
    if (expanded) {
      if (jsmLastItem) {
        img = jsmCornerMinus;
        bars[bars.length] = false;
      }
      else {
        img = jsmTMinus;
        bars[bars.length] = true;
      }
    }
    else {
      if (jsmLastItem) {
        img = jsmCornerPlus;
        bars[bars.length] = false;
      }
      else {
        img = jsmTPlus;
        bars[bars.length] = true;
      }
    }
    jsmDocument.write('<img src="' + img + '" align=left border=0 vspace=0 hspace=0>');
  }

  jsmDocument.write('<img src="' + item.icon + '"' + ' alt="' + item.text + '"' + ' align=left border=0 vspace=0 hspace=0>');

  if (item.index == jsmSelected)
    jsmDocument.write('<font face="' + jsmFont + '" size=' + jsmFontSize + '>&nbsp;<span style="background-color:' + jsmHiBg + ';color:' + jsmHiFg + ';">' + item.text + '</span></font>');
  else
    jsmDocument.write('<font face="' + jsmFont + '" size=' + jsmFontSize + '>&nbsp;' + item.text + '</font>');
  jsmDocument.write('</a>');
  jsmDocument.writeln('</td></tr>');

  jsmBars = bars;

  if (item.submenu && expanded) {
    jsmDepth++;
    jsmListItems(item.submenu);
    jsmDepth--;
    jsmParents(item.submenu,item.index);
  }
}

function jsmParents(menu, parent) {
   for (i = 0; i < menu.items.length; i++) {
      ItemParent[menu.items[i].index] = parent;
   }
}

function jsmClick(n, link, submenu) {
  var date, cookie, parent, parent2, weiter, jsmExpandOrg;

  if (!jsmExpand)
    jsmDisplay();

  if (jsmautoclose == "1") {
    if (submenu) {
         jsmExpandOrg = jsmExpand[n];
         for (i = 0; i < jsmIndex; i++)
           jsmExpand[i] = 0;

         parent = n;
         weiter = true;

         while(weiter) {
           jsmExpand[parent] = 1;
           parent2 = parent;
           if ( ItemParent[parent2] > -1) {
             parent = ItemParent[parent2];
             weiter = true;
           }
           else
             weiter = false;
         }
         jsmExpand[n] = 1 - jsmExpandOrg;
    }
  }
  else {
    if (submenu)
      jsmExpand[n] = 1 - jsmExpand[n];
  }

  jsmSelected = n;

  setTimeout("jsmDisplay()", 410);

  return link;
}

function jsmClickRoot() {
  jsmExpand = null;
  jsmSelected = null;

  setTimeout("jsmDisplay()", 410);

  return;
}

function jsmScroll() {
  var win, height, width;

  win = window.frames[jsmFrame];

  if (document.layers) {
    height = win.innerHeight;
    width = win.innerWidth;
  }
  else if (document.all) {
    height = win.document.body.clientHeight;
    width = win.document.body.clientWidth;
  }
  else if (document.images) {
    win.scroll(0, jsmScrollY);
    return;
  }
  else
    return;

  
  if (jsmScrollY > (height - 80) )
    win.scrollBy(0, jsmScrollY);
  if (jsmScrollX > width)
    win.scrollBy(jsmScrollX, 0);
}

