var menus = new Array;
var menustruct = new Array();
var bodyref;
var offsetleft = 5;
var offsettop = 20;
var suboffsettop = 30;
var shadowoffset = 7;
var shadowcast = 4;
var toobj;

// Config preferences
var basetab = "    "; // Adjust to suit starting point of code indentation
var showimages = true;  // flag to disable loading of images into menu
var imgdir = "menuimages/";  // base directory for images
var imgheight = "24px";   // height of menu images

var navcolouroff = "#EDEDED";  // background colour of main menu
var navcolouron = " #3D59AB";  // highlighted background colour of main menu
var navtextoff = "black";   // text colour of main menu
var navtexton = "white";   // highlighted text colour of main menu

var mnucolouroff = "snow";  // background colour of sub menus
var mnucolouron = " #3D59AB";  // highlighted background colour of sub menus
var mnutextoff = "black";   // text colour of sub menus
var mnutexton = "white";   // highlighted text colour of sub menus
var mnuborder = "silver outset 1pt";   // border colour for sub menus


function GetMenus() {

  bodyref = document.body;
  bodyref.style.width = "95%";
  LoadArray();
  bodyref.innerHTML = bodyref.innerHTML + BuildMenuHTML();
  SetStyle();

}


function LoadArray() {

  // Main Menu Bar
  xmenu = new Menu(0, 'menubar');
  xmenu.addItem(new MenuItem('home', 'Home', 'index.php'));
  xmenu.addItem(new MenuItem('personal', 'About Me', null, null, 'mnupersonal'));
  xmenu.addItem(new MenuItem('scuba', 'Scuba', null, null, 'mnuscuba'));
  xmenu.addItem(new MenuItem('misc', 'Misc', null, null, 'mnumisc'));
  xmenu.addItem(new MenuItem('links', 'Links', null, null, 'mnulinks'));
  CreateMenu();


  // Level 1 menus
  xmenu = new Menu(1, 'mnupersonal');
  xmenu.addItem(new MenuItem('aboutme', 'About Me', 'aboutme.php', 'aboutme.gif'));
  xmenu.addItem(new MenuItem(null, null, null, null, null, true));
  xmenu.addItem(new MenuItem('school', 'School Life', 'schoollife.php', 'school.gif'));
  xmenu.addItem(new MenuItem('fe', 'Further Education', null, 'furthereducation.gif', 'subfe'));
  xmenu.addItem(new MenuItem('uni', 'University', 'university.php', 'university.gif'));
  xmenu.addItem(new MenuItem(null, null, null, null, null, true));
  xmenu.addItem(new MenuItem('cv', 'CV', 'cv.php', 'cv.gif'));
  xmenu.addItem(new MenuItem('certs', 'Certificates', 'certs.php', 'certificates.gif'));
  xmenu.addItem(new MenuItem('software', 'Software', null, 'software.gif', 'subsoftware'));
  CreateMenu();

  xmenu = new Menu(1, 'mnuscuba');
  xmenu.addItem(new MenuItem('aboutscuba', 'About Scuba Diving', 'divingquals.php', 'aboutscuba.gif'));
  xmenu.addItem(new MenuItem('divesites', 'Dive Sites', null, 'divesites.gif', 'subdivesites'));
  xmenu.addItem(new MenuItem('diveliks', 'Useful Diving Links', null, 'usefuldivelinks.gif', 'subdivelinks'));
  CreateMenu();

  xmenu = new Menu(1, 'mnumisc');
  xmenu.addItem(new MenuItem('activities', 'Activities', null, 'activities.gif', 'subactivities'));
  xmenu.addItem(new MenuItem(null, null, null, null, null, true));
  xmenu.addItem(new MenuItem('humour', 'Humour', null, 'humour.gif', 'subhumour'));
  xmenu.addItem(new MenuItem(null, null, null, null, null, true));
  xmenu.addItem(new MenuItem('goldie', 'A Tribute To Goldie', 'slideshow.php?key=goldie', 'goldie.gif'));
  CreateMenu();

  xmenu = new Menu(1, 'mnulinks');
  xmenu.addItem(new MenuItem('complinks', 'Computing', null, 'computing.gif', 'subcomplinks'));
  xmenu.addItem(new MenuItem('divelinks', 'Diving', null, 'usefuldivelinks.gif', 'subdivelinks'));
  xmenu.addItem(new MenuItem('langlinks', 'Languages', null, 'languages.gif', 'sublanglinks'));
  xmenu.addItem(new MenuItem('joblinks', 'Job Hunting', null, 'jobsearch.gif', 'subjoblinks'));
  xmenu.addItem(new MenuItem('misclinks', 'Misc', null, 'usefullink.gif', 'submisclinks'));
  CreateMenu();


  // Level 2 menus
  xmenu = new Menu(2, 'subfe');
  xmenu.addItem(new MenuItem('computing', 'Computing', 'computing.php', 'computing.gif'));
  xmenu.addItem(new MenuItem('engineering', 'Engineering', 'engineering.php', 'engineering.gif'));
  xmenu.addItem(new MenuItem('tesol', 'TESOL', 'tesol.php', 'tesol.gif'));
  CreateMenu();

  // name, caption, url, image, submenu, separator, popup, height, width, scrollbars, showtoolbar
  xmenu = new Menu(2, 'subsoftware');
  xmenu.addItem(new MenuItem('invaders', 'Invaders', 'invaders.php', 'softwarelink.gif', null, false, true, 450, 750));
  xmenu.addItem(new MenuItem('messenger', 'Winsock Messenger', 'messenger.php', 'softwarelink.gif', null, false, true, 450, 750));
  xmenu.addItem(new MenuItem('carddesigner', 'Card Designer', 'carddesigner.php', 'softwarelink.gif', null, false, true, 450, 750));
  xmenu.addItem(new MenuItem('mnubar', 'Menu Bar', 'menubar.php', 'softwarelink.gif', null, false, true, 450, 750));
  xmenu.addItem(new MenuItem('ctrlpad', 'Control Pad', 'controlpad.php', 'softwarelink.gif', null, false, true, 450, 750));
  xmenu.addItem(new MenuItem('tooltips', 'Baloon Tips', 'baloontips.php', 'softwarelink.gif', null, false, true, 350, 550));
  xmenu.addItem(new MenuItem('tts', 'Text To Speech', 'texttospeech.php', 'softwarelink.gif', null, false, true, 350, 450));
  xmenu.addItem(new MenuItem('langtutor', 'Language Tutor', 'languagetutor.php', 'softwarelink.gif', null, false, true, 450, 750));
  CreateMenu();

  xmenu = new Menu(2, 'subdivesites');
  xmenu.addItem(new MenuItem('barbados', 'Barbados', 'barbados.php', 'barbados.gif'));
  xmenu.addItem(new MenuItem('northwales', 'North Wales', 'nwales.php', 'northwales.gif'));
  xmenu.addItem(new MenuItem('redsea', 'Red Sea', 'redsea.php', 'redsea.gif'));
  xmenu.addItem(new MenuItem('thailand', 'Thailand', 'thailand.php', 'thailand.gif'));
  CreateMenu();

  xmenu = new Menu(2, 'subdivelinks');
  xmenu.addItem(new MenuItem('padi', 'PADI', 'http://www.padi.com', 'divelink.gif', null, false, true, 600, 800));
  xmenu.addItem(new MenuItem('deesports', 'Dee Sports', 'http://www.deesports.co.uk', 'divelink.gif', null, false, true, 600, 800));
  xmenu.addItem(new MenuItem('ssdivers', 'South Siam Divers', 'http://www.southsiamdivers.com', 'divelink.gif', null, false, true, 600, 800));
  xmenu.addItem(new MenuItem('onestop', 'One Stop Dive', 'http://www.onestopdive.com', 'divelink.gif', null, false, true, 600, 800));
  xmenu.addItem(new MenuItem('all4div', 'All 4 Diving', 'http://www.all4diving.com', 'divelink.gif', null, false, true , 600, 800));
  xmenu.addItem(new MenuItem('kontiki', 'Kon-Tiki', 'http://www.kontiki-thailand.com', 'divelink.gif', null, false, true, 600, 800));
  xmenu.addItem(new MenuItem('easydiv', 'Easy Divers - Koh Samui', 'http://www.samuieasydivers.com/', 'divelink.gif', null, false, true, 600, 800));
  xmenu.addItem(new MenuItem('aware', 'Project AWARE', 'http://www.projectaware.org/uk/english/', 'divelink.gif', null, false, true, 600, 800));
  xmenu.addItem(new MenuItem('divernet', 'DiverNet Magazine', 'http://www.divernet.co.uk', 'divelink.gif', null, false, true, 600, 800));
  xmenu.addItem(new MenuItem('divemach', 'Dive Machine', 'http://www.divemachine.com/index.htm', 'divelink.gif', null, false, true, 600, 800));
  xmenu.addItem(new MenuItem('marinebio', 'Marine Bio', 'http://www.marinebio.org', 'divelink.gif', null, false, true, 600, 800));
  xmenu.addItem(new MenuItem('vivian', 'Vivian Quarry', 'http://www.divevivian.com', 'divelink.gif', null, false, true, 600, 800));
  xmenu.addItem(new MenuItem('emperordiv', 'Emperor Divers', 'http://www.emperordivers.com', 'divelink.gif', null, false, true, 600, 800));
  xmenu.addItem(new MenuItem('divetribe', 'The Dive Tribe', 'http://www.divetribe.com', 'divelink.gif', null, false, true, 600, 800));
  xmenu.addItem(new MenuItem('wadigimal', 'Wadi Gimal', 'http://www.shams-dive.com/alam_english/default.asp', 'divelink.gif', null, false, true, 600, 800));
  xmenu.addItem(new MenuItem('divingadven', 'Diving Adventures', 'http://www.caribzones.com/divingadventures.html', 'divelink.gif', null, false, true, 600, 800));
  CreateMenu();

  xmenu = new Menu(2, 'subactivities');
  xmenu.addItem(new MenuItem('batobrelay', 'Jubilee Baton Relay', 'batonrelay.php', 'baton.gif'));
  xmenu.addItem(new MenuItem('bikeride', '700 Mile Sponsored Cycle Ride', 'cycleride.php', 'bike.gif'));
  xmenu.addItem(new MenuItem('wedding', 'The BIG Day', 'sita.php', 'wedding.gif', null, false, true, 500, 750, true, true));
  CreateMenu();

  xmenu = new Menu(2, 'subhumour');
  xmenu.addItem(new MenuItem('mars', 'Mars-gate', 'marsgate.php', 'humour.gif', null, false, true, 480, 750, true, true));
  xmenu.addItem(new MenuItem('dangerweb', 'Dangerous Web Site', 'dangeroussite.php', 'humour.gif', null, false, true, 480, 750, true, true));
  xmenu.addItem(new MenuItem('felix', 'Storm in a catfood bowl', 'stormincatfood.php', 'humour.gif', null, false, true, 480, 750, true, true));
  CreateMenu();

  xmenu = new Menu(2, 'subcomplinks');
  xmenu.addItem(new MenuItem('mcp', 'MCP Member Sites', 'https://mcp.microsoft.com/mcp/default.mspx', 'computing.gif', null, false, true, 600, 800));
  xmenu.addItem(new MenuItem('w3c', 'WC3', 'http://www.w3.org/', 'computing.gif', null, false, true, 600, 800));
  xmenu.addItem(new MenuItem('bcs', 'BCS', 'http://www.bcs.org/', 'computing.gif', null, false, true, 600, 800));
  xmenu.addItem(new MenuItem('expertsex', 'Experts Exchange', 'http://www.experts-exchange.com', 'computing.gif', null, false, true, 600, 800));
  xmenu.addItem(new MenuItem('about', 'About', 'http://www.about.com/compute/', 'computing.gif', null, false, true, 600, 800));
  xmenu.addItem(new MenuItem('regexpres', 'Regular Expressions', 'http://www.regexplib.com/Default.aspx', 'computing.gif', null, false, true, 600, 800));
  xmenu.addItem(new MenuItem('jspbasic', 'JSP Basics', 'http://java.sun.com/products/jsp/html/jspbasics.fm.html', 'computing.gif', null, false, true, 600, 800));
  xmenu.addItem(new MenuItem('phpman', 'PHP Manual', 'http://www.phpbuilder.com/manual/en/', 'computing.gif', null, false, true, 600, 800));
  xmenu.addItem(new MenuItem('yahoodev', 'Yahoo Developer Network', 'http://developer.yahoo.com//', 'computing.gif', null, false, true, 600, 800));
  xmenu.addItem(new MenuItem('webservs', 'WebserviceX.NET', 'http://www.webservicex.net/WCF/Default.aspx', 'computing.gif', null, false, true, 600, 800));
  xmenu.addItem(new MenuItem('context', 'Context Editor', 'http://www.context.cx/', 'computing.gif', null, false, true, 600, 800));
  xmenu.addItem(new MenuItem('howstuff', 'How stuff works', 'http://computer.howstuffworks.com/', 'computing.gif', null, false, true, 600, 800));
  xmenu.addItem(new MenuItem('w3schools', 'W3 Schools', 'http://www.w3schools.com/', 'computing.gif', null, false, true, 600, 800));
  CreateMenu();

  xmenu = new Menu(2, 'sublanglinks');
  xmenu.addItem(new MenuItem('freetrans', 'Free Translation', 'http://www.freetranslation.com/', 'languages.gif', null, false, true, 600, 800));
  xmenu.addItem(new MenuItem('thaidic', 'Thai Dictionary', 'http://www.thai-language.com/dict/', 'languages.gif', null, false, true, 600, 800));
  xmenu.addItem(new MenuItem('learnthai', 'Learning Thai', 'http://www.learningthai.com/', 'languages.gif', null, false, true, 600, 800));
  xmenu.addItem(new MenuItem('thaionline', 'Thai Language Online', 'http://www.thai-language-online.com/', 'languages.gif', null, false, true, 600, 800));
  xmenu.addItem(new MenuItem('subtesol', 'TESOL', 'http://www.teachenglish.co.uk/', 'languages.gif', null, false, true, 600, 800));
  xmenu.addItem(new MenuItem('engpage', 'English Page', 'http://www.englishpage.com', 'languages.gif', null, false, true, 600, 800));
  CreateMenu();

  xmenu = new Menu(2, 'subjoblinks');
  xmenu.addItem(new MenuItem('planrecruit', 'Planet Recruit', 'http://www.planetrecruit.com/', 'jobsearch.gif', null, false, true, 600, 800));
  xmenu.addItem(new MenuItem('gojob', 'Go Jobsite', 'http://www.gojobsite.co.uk/', 'jobsearch.gif', null, false, true, 600, 800));
  xmenu.addItem(new MenuItem('jobserve', 'Job Serve', 'http://www.jobserve.com/', 'jobsearch.gif', null, false, true, 600, 800));
  xmenu.addItem(new MenuItem('monster', 'Monster', 'http://www.monster.co.uk/', 'jobsearch.gif', null, false, true, 600, 800));
  xmenu.addItem(new MenuItem('applegate', 'Applegate', 'http://www.applegate.co.uk/', 'jobsearch.gif', null, false, true, 600, 800));
  CreateMenu();

  xmenu = new Menu(2, 'submisclinks');
  xmenu.addItem(new MenuItem('nifty', 'Nifty List', 'http://www.niftylist.co.uk', 'usefullink.gif', null, false, true, 600, 800));
  xmenu.addItem(new MenuItem('neurology', 'Institute of Neurology', 'http://www.ion.ucl.ac.uk', 'usefullink.gif', null, false, true, 600, 800));
  xmenu.addItem(new MenuItem('saxfingers', 'Sax Alternative Fingerings', 'http://www.wfg.woodwind.org/sax/sax_alt_2.html', 'usefullink.gif', null, false, true, 600, 800));
  xmenu.addItem(new MenuItem('linkedin', 'LinkedIn Network', 'http://www.linkedin.com', 'usefullink.gif', null, false, true, 600, 800));
  xmenu.addItem(new MenuItem('motleyfool', 'Motley Fool', 'http://www.fool.co.uk/', 'usefullink.gif', null, false, true, 600, 800));
  CreateMenu();


  // Level 3 menus

}


function BuildMenuHTML() {
  var ptr;
  var str = "";
  var checklevel = 1;
  var shadowname = "";

  for (ptr = 0; ptr < menustruct.length; ptr ++) {
    if (menustruct[ptr].level == checklevel) {
      switch (menustruct[ptr].level) {
        case 1: shadowname = "mnushadow";
                break;
        case 2: shadowname = "submnushadow";
                break;
        case 3: shadowname = "childmnushadow";
                break;
        default: shadowname = "";
      }
      if (shadowname != "") {
        str += basetab + "<div id=" + shadowname + " class=shadow style=display:none>\n";
        str += basetab + "</div>\n";
      }
      checklevel ++;
    }
    if (menustruct[ptr].level == 0) {
      str += BuildNavMenu(menustruct[ptr]);
    }
    else {
      str += BuildSubMenu(menustruct[ptr]);
    }
  }
  return str;
}


function BuildNavMenu(obj) {
  var ptr;
  var buf = "";
  var xclass = "";
  var mouseover = "";
  var mouseout = "";
  var mouseclick;

  xclass = "menubar";
  buf += basetab + "<table id=" + obj.id + " class=" + xclass + " onmouseover=\"togglemenu(1);\" onmouseout=\"togglemenu(0);\">\n";
  buf += basetab + "  <tr>\n";

  for (ptr = 0; ptr < obj.items.length; ptr ++) {
    mouseover = " onmouseover=\"showmenu('" + obj.items[ptr].id + "', '" + obj.items[ptr].submenu + "', 0); highlight('" + obj.items[ptr].id + "', 1);\"";
    mouseout = " onmouseout=\"highlight('" + obj.items[ptr].id + "', 0);\"";
    mouseclick = "";
    if (obj.items[ptr].command != null) {
      if (obj.items[ptr].popup == true) {
        mouseclick = " onclick=\"popupdynamic('" + obj.items[ptr].command + "', " + obj.items[ptr].height + ", " + obj.items[ptr].width + ", '" + obj.items[ptr].showtoolbar + "', '" + obj.items[ptr].scrollbars + "');\"";
      }
      else {
        mouseclick = " onclick=\"gotourl('" + obj.items[ptr].command + "');\"";
      }
    }
    buf += basetab + "    <td class=" + xclass + " id=" + obj.items[ptr].id + mouseover + mouseout + mouseclick + ">" + obj.items[ptr].caption + "</td>\n";
  }
  buf += basetab + "  </tr>\n";
  buf += basetab + "</table>\n";

  return buf;

}


function BuildSubMenu(obj) {
  var ptr;
  var buf = "";
  var xclass = "";
  var mouseover = "";
  var mouseout = "";
  var mouseclick;
  var cellpad;
  var colspan = 3;
  
  if (showimages == false) colspan = 2;

  switch (obj.level) {
    case 1: xclass = "menu";
            break;
    case 2: xclass = "submenu";
            break;
    case 3: xclass = "childmenu";
            break;
  }
  cellpad = " style=display:none cellpadding=4 cellspacing=0 border=0";
  buf += basetab + "<table id=" + obj.id + " class=" + xclass + cellpad + " onmouseover=\"togglemenu(1);\" onmouseout=\"togglemenu(0);\">\n";

  for (ptr = 0; ptr < obj.items.length; ptr ++) {
    if (obj.items[ptr].separator == true) {
      buf += "  <tr class=divider><td colspan=" + colspan + "><hr></td></tr>\n";
    }
    else {
      if (obj.items[ptr].submenu == null) {
        switch (obj.level) {
          case 1: mouseover = " onmouseover=\"hideallsubmenus(); highlight('" + obj.items[ptr].id + "', 1);\"";
                  break;
          case 2: mouseover = " onmouseover=\"hideallchildmenus(); highlight('" + obj.items[ptr].id + "', 1);\"";
                  break;
          case 3: mouseover = " onmouseover=\"highlight('" + obj.items[ptr].id + "', 1);\"";
                  break;
        }
      }
      else {
        mouseover = " onmouseover=\"showmenu('" + obj.items[ptr].id + "', '" + obj.items[ptr].submenu + "', " + obj.level + "); highlight('" + obj.items[ptr].id + "', 1);\"";
      }
      mouseout = " onmouseout=\"highlight('" + obj.items[ptr].id + "', 0);\"";
      mouseclick = "";
      if (obj.items[ptr].command != null) {
        if (obj.items[ptr].popup==true) {
          mouseclick = " onclick=\"popupdynamic('" + obj.items[ptr].command + "', " + obj.items[ptr].height + ", " + obj.items[ptr].width + ", '" + obj.items[ptr].showtoolbar + "', '" + obj.items[ptr].scrollbars + "');\"";
        }
        else {
          mouseclick = " onclick=\"gotourl('" + obj.items[ptr].command + "');\"";
        }
      }
      buf += basetab + "  <tr  id=" + obj.items[ptr].id + mouseover + mouseout + mouseclick + ">\n";
      if (showimages == true) buf += basetab + "    <td><img src=" + imgdir + obj.items[ptr].image + " class=menuimg></td>\n";
      if (obj.items[ptr].submenu == null) {
        buf += basetab + "    <td colspan=2>" + obj.items[ptr].caption + "&#160; &#160;</td>\n";
      }
      else {
        buf += basetab + "    <td>" + obj.items[ptr].caption + "&#160; &#160;</td>\n";
        buf += basetab + "    <td class=submenu><img src=" + imgdir + "right-arrow.gif class=menuimg></td>\n";
      }

      buf += basetab + "  </tr>\n";
    }
  }

  buf += basetab + "</table>\n";

  return buf;
}


function showmenu(parentctrl, childctrl, xlevel) {

  switch (xlevel) {
    case 0: hideallmenus();
            break;

    case 1: hideallsubmenus();
            break;

    case 2: hideallchildmenus();
            break;
  }

  xchild = null;
  if (childctrl != null) xchild = document.getElementById(childctrl);

  if (xchild) {
    if (xchild.style.display != "") {
      xparent = document.getElementById(parentctrl);
      switch (xlevel) {
        case 0: xchild.style.top = xparent.offsetTop + offsettop;
                xchild.style.width = "auto";
                xchild.style.left = xparent.offsetLeft + xparent.offsetParent.offsetLeft;
                xshadow = document.getElementById("mnushadow");
                break;

        case 1: xchild.style.top = xparent.offsetTop + suboffsettop;
                xchild.style.width = "auto";
                xchild.style.left = xparent.offsetParent.offsetLeft + xparent.offsetWidth;;
                xshadow = document.getElementById("submnushadow");
                break;

        case 2: xchild.style.top = xparent.offsetTop + suboffsettop;
                xchild.style.width = "auto";
                xchild.style.left = xparent.offsetParent.offsetLeft + xparent.offsetWidth;;
                xshadow = document.getElementById("childmnushadow");
                break;
      }

      xchild.style.display = "";

      // If the menu goes past the bottom of the body, move it up
      if ((xchild.offsetTop + xchild.offsetHeight) > (bodyref.offsetHeight - 4)) {
        xchild.style.top = bodyref.offsetHeight - xchild.offsetHeight - 10;
      }

      // if the menu overruns the page then move it in or flip it round
      if ((xchild.offsetLeft + xchild.offsetWidth) > (bodyref.offsetWidth - (xchild.offsetWidth / 3))) {
        if (xparent.offsetParent.offsetLeft<50) {
          xchild.style.left = bodyref.offsetWidth - xchild.offsetWidth - 24;
        }
        else {
          xchild.style.left = xparent.offsetParent.offsetLeft - xchild.offsetWidth + offsetleft;
        }
      }

      // If the menu is too far left, make the left at 0
      if (xchild.offsetLeft < 0) {
        xchild.style.left = 0;
      }

      xshadow.style.top = xchild.offsetTop + shadowoffset;
      xshadow.style.left = xchild.offsetLeft + shadowoffset;
      xshadow.style.height = xchild.offsetHeight - shadowcast;
      xshadow.style.width = xchild.offsetWidth - shadowcast;
      xshadow.style.display = ""
    }
  }
}

function hideallmenus() {
  var i;
  
  xmenu = document.getElementsByTagName('table');
  if(xmenu.length>0) {
    for (i=0; i<xmenu.length; i++) {
      if (xmenu[i].className=="menu" || xmenu[i].className=="submenu"){
        xmenu[i].style.display = "none";
      }
    }
  }
  xshadow = document.getElementById('mnushadow');
  if (xshadow) xshadow.style.display = "none";
  xshadow = document.getElementById('submnushadow');
  if (xshadow) xshadow.style.display = "none";
  xshadow = document.getElementById('childmnushadow');
  if (xshadow) xshadow.style.display = "none";
}

function hideallsubmenus() {
  var i;

  xmenu = document.getElementsByTagName('table');
  if(xmenu.length>0) {
    for (i=0; i<xmenu.length; i++) {
      if (xmenu[i].className=="submenu"){
        xmenu[i].style.display = "none";
      }
    }
  }
  xshadow = document.getElementById('submnushadow');
  if (xshadow) xshadow.style.display = "none";
}

function hideallchildmenus() {
  var i;

  xmenu = document.getElementsByTagName('table');
  if(xmenu.length>0) {
    for (i=0; i<xmenu.length; i++) {
      if (xmenu[i].className=="childmenu"){
        xmenu[i].style.display = "none";
      }
    }
  }
  xshadow = document.getElementById('childmnushadow');
  if (xshadow) xshadow.style.display = "none";
}


function highlight(id, onoff) {
  xctrl = document.getElementById(id);

  if (onoff==1) {
    if (xctrl.className == "menubar") {
      xctrl.style.background = navcolouron;
      xctrl.style.color = navtexton;
      xctrl.style.cursor = "pointer"
    }
    else {
      xctrl.style.background = mnucolouron;
      xctrl.style.color = mnutexton;
      xctrl.style.cursor = "pointer"
    }
  }
  else {
    if (xctrl.className == "menubar") {
      xctrl.style.background = navcolouroff;
      xctrl.style.color = navtextoff;
      xctrl.style.cursor = "pointer"
    }
    else {
      xctrl.style.background = mnucolouroff;
      xctrl.style.color = mnutextoff;
      xctrl.style.cursor = "pointer"
    }
  }
}


function togglemenu(onoff) {
  if (onoff==1) {
    clearTimeout(toobj);
  }
  else {
    toobj = setTimeout ("hideallmenus()", 300);
  }
}

function CreateMenu() {

  menustruct[menustruct.length] = menus[0];

}

function MenuRegister(item) {
  menus[menus.length] = item;
}

function MenuItem(id, caption, command, image, submenu, separator, popup, height, width, scrollbars, showtoolbar) {
  // these become the tr and td tags
  this.id = id;
  this.caption = caption;
  this.command = command;
  this.image = image;
  this.submenu = submenu;
  this.separator = (separator==true) ? true : false;
  this.popup = (popup==true) ? true : false;
  this.height = height;
  this.width = width;
  this.scrollbars = (scrollbars==true) ? 'yes' : 'no';
  this.showtoolbar = (showtoolbar==true) ? 'yes' : 'no';
  MenuRegister(this);
}


function Menu(level, id) // this becomes the table tag
{
  menus = new Array();
  this.items = new Array();
  this.level = level;
  this.id = id;
  MenuRegister(this);
  this.update = true;
}

function MenuAddItem(item)
{
  this.items[this.items.length] = item;
}

Menu.prototype.addItem = MenuAddItem;

function SetStyle() {
 
  var i;
  var xmenu = document.getElementsByTagName('table');

  if(xmenu.length>0) {
    for (i=0; i<xmenu.length; i++) {
      switch (xmenu[i].className) {
        case "menubar":   xmenu[i].style.background = navcolouroff;
                          xmenu[i].style.color = navtextoff;
                          xmenu[i].style.border = mnuborder;
                          break;

        case "menu":      xmenu[i].style.background = mnucolouroff;
                          xmenu[i].style.color = mnutextoff;
                          xmenu[i].style.border = mnuborder;
                          break;

        case "submenu":   xmenu[i].style.background = mnucolouroff;
                          xmenu[i].style.color = mnutextoff;
                          xmenu[i].style.border = mnuborder;
                          break;

        case "childmenu": xmenu[i].style.background = mnucolouroff;
                          xmenu[i].style.color = mnutextoff;
                          xmenu[i].style.border = mnuborder;
                          break;
      }
    }
  }

  if (navigator.appName.indexOf("Microsoft")==-1) {
    SetLeft();
  }
  
  var ximg = document.getElementsByTagName('img');

  if(ximg.length>0) {
    for (i=0; i<ximg.length; i++) {
      if (ximg[i].className == "menuimg") ximg[i].style.height = imgheight;
    }
  }

}

function SetLeft() {
  // set the left property to zero if not ie
  var ptr;

  ptr = document.getElementById('menubar');
  if (ptr) ptr.style.left="0px";

}

function gotourl(url, popup) {

  if (popup==1) {
    window.open(url);
  }
  else {
    if (navigator.appName.indexOf("Microsoft")!=-1) {
      window.navigate(url);
    }
    else {
      window.location = url;
    }
  }
  hideallmenus();
}

function popupdynamic(url, height, width, menu, canscroll) {
  x = Math.random() * 50;
  y = Math.random() * 50;
  window.open(url, "", "top = " + y + ", left = " + x + ", height = " + height + ", width = " + width + ", menubar = no, resizable = yes, toolbar = " + menu + ", location = " + menu + ", status = no, scrollbars = " + canscroll);
}
