//*************************************************************** 
//			mwpmenu.js
//
// This script is the creation of Peter Fitchett,
//		pfitchett@snap.net.nz
// 
// (C) Copyright 2003 mwp (Peter Fitchett). All rights reserved.
//
// This notice must be kept in full at the top of this file.
//*************************************************************** 
//
// Images used in the menu
var pict = new Object;
pict.prefix = 'mwpmenu/'
pict.space = 'space.png'
pict.down = 'down.gif'
pict.right = 'right.gif'
pict.level = new Array ('','one.png','two.png','three.png','four.png','all.png')
pict.levels = new Array ('','ones.png','twos.png','threes.png','fours.png','alls.png')

var useCSS = true
var css = '/common/contents.css'
var headInsert = ''
var menuPrefix = ''
var menuSuffix = ''
var menuOpenLevel = 1
var menuOpenChanged = 0
var debug = 0

var isOpera = (navigator.userAgent.indexOf('Opera')>0)? true:false;
var isMac = (navigator.userAgent.indexOf('Mac')>0)? true:false;

var maxLevel = 0;
var menuScroll = 0;

var rootNode = new Object ();
rootNode.myLevel = 0;
rootNode.nodeList = new Array();
rootNode.myID = 0;
rootNode.myHtml = 'root';
rootNode.isHidden = true;
rootNode.isOpen = true;
rootNode.myUrl = '';
rootNode.itemHSpace = '';
rootNode.itemHState = '';
rootNode.itemHName = '';
rootNode.familyHtml = '';

// menu node properties:
//   myID	unique number: 1..n
//   myHtml	html of menu item
//   myUrl	href associated with menu item
//   children	array of child menu items
//   myParent	reference to parent menu item
//   myLevel    menu level
//   isHidden	menu item is not displayed
//   isOpen	open state of family
//   isParent	menu item is parent
//   itemHSpace	html of this menu item - spacer
//   itemHState	html of this menu item - open/closed
//   itemHName	html of this menu item - name
//   nodeList	array of all menu nodes (rootNode)
//			indexed by (node.myID - 1)
//

function addItem (parentNode, menuTxt, menuURL, menuOpen) {
  // add: menuNode = addItem(parentNode, "menuDisplay", "opt.url", false)
  var ii;
  menuNode = new Object();
  menuNode.myID = rootNode.nodeList.length + 1;
  rootNode.nodeList[menuNode.myID - 1] = menuNode;
  menuNode.myHtml = menuTxt;
  if (menuURL != null)
    menuNode.myUrl = menuURL;
  else
    menuNode.myUrl = '';
  menuNode.isHidden = false;
  if (menuOpen != null)
    menuNode.isOpen = menuOpen;
  else
    menuNode.isOpen = false;

  if (parentNode != null) node = parentNode; 
    else node = rootNode;
  if (!node.isParent) {
    node.children = new Array ();
    node.isParent = true;
  } 
  node.itemHState = '';
  node.children[node.children.length] = menuNode;
  menuNode.myParent = node;
  menuNode.myLevel = node.myLevel + 1;
  if (menuNode.myLevel > maxLevel) maxLevel = menuNode.myLevel;
  if (useCSS) {
    menuNode.itemHSpace = '<p class=lvl' + menuNode.myLevel + '>';
  } else {
    menuNode.itemHSpace = '<p>';
    if (menuNode.myLevel > 1) {
      for (ii=0; ii < menuNode.myLevel; ii++)
        menuNode.itemHSpace += '<img src=' + pict.prefix + pict.space + '>';
    } 
  }
  menuNode.itemHState = '';
  if (menuNode.myUrl != '') menuNode.itemHName = '<a href="' + menuNode.myUrl + '">';
  menuNode.itemHName += menuNode.myHtml;
  if (menuNode.myUrl != '') menuNode.itemHName += '</a>';
  menuNode.itemHName += '</p>';
  return menuNode;
} 	// addItem

var html = '';

function getScrollTop () {
  if (LeftFrame.window.pageYOffset != null) // like Netscape
    return LeftFrame.window.pageYOffset;
  if (LeftFrame.document.body.scrollWidth != null) // like IE
    return LeftFrame.document.body.scrollTop;
  return 0;
}	// getScrollTop

function setScrollTop (top) {
  if (LeftFrame.document.body.scrollWidth != null) { // like IE
    LeftFrame.document.body.scrollTop = top;
    return;
  }
  LeftFrame.scrollTo (0, top);
  return;
}	// setScrollTop

function menuHtmlFull (menu) {
var i;
  if (!menu.isHidden) {
    html +='<li>';
    if (menu.myUrl != '') html += '<a href="' + menu.myUrl + '">';
    html += menu.myHtml;
    if (menu.myUrl != '') html += '</a>';
    html += '</li>';
  } 

  if (menu.isParent) {
    if (menu.myLevel > 1) html += '<ul>';
    for (i=0; i < menu.children.length; i++) {
      menuHtmlFull (menu.children[i]);
    }
    if (menu.myLevel > 1) html += '</ul>';
  }
  return html;	
}	// menuHtmlFull

function menuItem (menu) {
var ii;
if (!menu.isHidden) {
  if ((menuOpenChanged == 1) || (menu.itemHState == '')) {
    if (menu.isParent) {
      menu.itemHState = '<a href="javascript:parent.switchmenu(' + menu.myID + ');">';
      if ((menuOpenLevel > menu.myLevel) || (menu.isOpen) || (menu.isHidden)) 
        menu.itemHState += '<img src=' + pict.prefix + pict.down + ' border=0 alt="Close">';
      else menu.itemHState += '<img src=' + pict.prefix + pict.right + ' border=0 alt="Open">';
      menu.itemHState += '</a>';
    } else 
        menu.itemHState = '<img src=' + pict.prefix + pict.space + '>';
  }
  if (menu.itemHName == '') {
    if (menu.myUrl != '') menu.itemHName += '<a href="' + menu.myUrl + '">';
    menu.itemHName += menu.myHtml;
    if (menu.myUrl != '') menu.itemHName += '</a>';
    menu.itemHName += '</p>';
  }
  html += menu.itemHSpace + menu.itemHState + menu.itemHName
}
return;
}	// menuItem

function menuHtml (menu) {
var i;
  if ((isOpera) && (isMac)) {
    html = ''
    return menuHtmlFull(menu);
  }
  menuItem (menu);
  if ((menu.isParent) && 
          ((menuOpenLevel > menu.myLevel) || 
	     (menu.isOpen) || (menu.isHidden))) {
    for (i=0; i < menu.children.length; i++) 
	menuHtml (menu.children[i]);
  }
  return '';	
}	// menuHtml


function imagealt (lvl) {
  if (lvl == 1) return ' alt="Default: All levels closed"';
  else 
    if (lvl == pict.level.length - 1) return ' alt="Default: Open all levels"';
    else return ' alt="Default: Open to level ' + i + '"';
}

function menuLevel () {
var lvl = menuOpenLevel;
var lhtml = '<nobr>';
  if ((isOpera) && (isMac)) 
    return '<br>';
  if (lvl >= pict.level.length) lvl = pict.level.length - 1;
  for (i=1; i < pict.level.length; i++) {
    if ((i < maxLevel) || (i = pict.level.length - 1)) {
      lhtml = lhtml + '<img src=' + pict.prefix + pict.space + '>';
      if (i == lvl) lhtml = lhtml + '<img src=' + pict.prefix + pict.levels[i] + imagealt (i) + '>';
      else lhtml = lhtml + '<a href="javascript:parent.switchlevel(' + i + ');">' +
		'<img src=' + pict.prefix + pict.level[i] + ' border=0' +
		imagealt (i) + '></a>';
    }
  }
  lhtml = lhtml + '</nobr><br><br>';
  return lhtml;
}

function loadmenu () {
var xxx = '';
  html = '';
  xxx =	'<HTML><HEAD>' + 
	headInsert +
	((useCSS)?'<link rel="stylesheet" type="text/css" href="' + css + '">':'') +
	'</HEAD><BODY><div align=left>' +
	menuPrefix +
        //  'Scroll Top = ' + menuScroll +
	'<br>' +
	menuLevel () + 
	menuHtml (rootNode) +
	html +
	menuSuffix +
	'<script>parent.setScrollTop(' + menuScroll + ');</script>' +
	'</div></BODY></HTML>';
  //  LeftFrame.document.open("text/html", "replace");
  if (isOpera) LeftFrame.document.clear ();
  else 
    if (LeftFrame.document.all) LeftFrame.document.open("text/html","replace");
    else LeftFrame.document.open();
  LeftFrame.document.write(xxx);
  LeftFrame.document.close();
  LeftFrame.focus();
  if (debug == 1) {
    eval("xxx = xxx.replace(/</g,'{');");
    //    RightFrame.document.open("text/html", "replace");
    if (isOpera) RightFrame.document.clear ();
    else 
      if (RightFrame.document.all) RightFrame.document.open("text/html","replace");
      else RightFrame.document.open();
    RightFrame.document.write(xxx);
    RightFrame.document.close();
  }
  return null;
}	// loadmenu

function switchmenu (nx) {
  menuScroll = getScrollTop();
  menu = rootNode.nodeList[nx - 1];
  menu.isOpen = !menu.isOpen;
  menu.itemHState = '';
  loadmenu ();
}

function switchlevel (nx) {
  if (nx == 5) menuOpenLevel =99;
  else menuOpenLevel =nx;
  menuScroll = 0;
  menuOpenChanged = 1;
  loadmenu ();
  menuOpenChanged = 0;
}


