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);

}
