		// For each menu you create, you must create a matching "FSMenu" JavaScript object to represent
		// it and manage its behaviour. You don't have to edit this script at all if you don't want to;
		// these comments are just here for completeness. Also, feel free to paste this script into the
		// external .JS file to make including it in your pages easier!
		
		// Here's a menu object to control the above list of menu data:
		var listMenu = new FSMenu('listMenu', true, 'display', 'block', 'none');
		
		// The parameters of the FSMenu object are:
		//  1) Its own name in quotes.
		//  2) Whether this is a nested list menu or not (in this case, true means yes).
		//  3) The CSS property name to change when menus are fsmShown and hidden.
		//  4) The visible value of that CSS property.
		//  5) The hidden value of that CSS property.
		//
		// Next, here's some optional settings for delays and highlighting:
		//  * fsmShowDelay is the time (in milliseconds) to display a new child menu.
		//    Remember that 1000 milliseconds = 1 second.
		//  * switchDelay is the time to switch from one child menu to another child menu.
		//    Set this higher and point at 2 neighbouring items to see what it does.
		//  * fsmHideDelay is the time it takes for a menu to fsmHide after mouseout.
		//    Set this to a negative number to disable hiding entirely.
		//  * cssLitClass is the CSS classname applied to parent items of active menus.
		//  * fsmShowOnClick will, suprisingly, set the menus to fsmShow on click. Pick one of 3 values:
		//    0 = all mouseover, 1 = first level click, sublevels mouseover, 2 = all click.
		//  * fsmHideOnClick fsmHides all visible menus when one is clicked (defaults to true).
		//  * animInSpeed and animOutSpeed set the animation speed. Set to a number
		//    between 0 and 1 where higher = faster. Setting both to 1 disables animation.
		
		listMenu.fsmShowDelay = 600;
		listMenu.switchDelay = 500;
		listMenu.fsmHideDelay = 200;
		listMenu.cssLitClass = 'highlighted';
		listMenu.fsmShowOnClick = 0;
		//listMenu.fsmHideOnClick = true;
		listMenu.animInSpeed = 0.2;
		listMenu.animOutSpeed = 0.2;
		
		
		// Now the fun part... animation! This script supports animation plugins you
		// can add to each menu object you create. I have provided 3 to get you started.
		// To enable animation, add one or more functions to the menuObject.animations
		// array; available animations are:
		//  * FSMenu.animSwipeDown is a "swipe" animation that sweeps the menu down.
		//  * FSMenu.animFade is an alpha fading animation using tranparency.
		//  * FSMenu.animClipDown is a "blind" animation similar to 'Swipe'.
		// They are listed inside the "fsmenu.js" file for you to modify and extend :).
		
		// I'm applying two at once to listMenu. Delete this to disable!
		listMenu.animations[listMenu.animations.length] = FSMenu.animFade;
		listMenu.animations[listMenu.animations.length] = FSMenu.animSwipeDown;
		//listMenu.animations[listMenu.animations.length] = FSMenu.animClipDown;
		
		
		// Finally, on page load you have to activate the menu by calling its 'activateMenu()' method.
		// I've provided an "fsmAddEvent" method that lets you easily run page events across browsers.
		// You pass the activateMenu() function two parameters:
		//  (1) The ID of the outermost <ul> list tag containing your menu data.
		//  (2) A node containing your submenu popout arrow indicator.
		// If none of that made sense, just cut and paste this next bit for each menu you create.
		
		var arrow = null;
		if (document.createElement && document.documentElement) {
			arrow = document.createElement('span');
			arrow.appendChild(document.createTextNode('>'));

			// Feel free to replace the above two lines with these for a small arrow image...
			//arrow = document.createElement('img');
			//arrow.src = 'arrow.gif';
			//arrow.style.borderWidth = '0';
			arrow.className = 'subind';
		}

		fsmAddEvent(window, 'load', new Function('listMenu.activateMenu("listMenuRoot", arrow)'));
	
		
		// You may wish to leave your menu as a visible list initially, then apply its style
		// dynamically on activation for better accessibility. Screenreaders and older browsers will
		// then see all your menu data, but there will be a 'flicker' of the raw list before the
		// page has completely loaded. If you want to do this, remove the CLASS="..." attribute from
		// the above outermost UL tag, and uncomment this line:
		fsmAddEvent(window, 'load', new Function('getRef("listMenuRoot").className="menulist"'));
		
		
		// To create more menus, duplicate this section and make sure you rename your
		// menu object to something different; also, activate another <ul> list with a
		// different ID, of course :). You can hae as many menus as you want on a page.


		// Activation: Include the ID for your menu in here.
		fsmAddEvent(window, 'load', new Function('activePageHighlight("listMenuRoot")'));

		function activePageHighlight(elm)
		{
			if (typeof elm == 'string') elm = document.getElementById(elm);

			if (!elm) return;
	
			var links = elm.getElementsByTagName('a'), chosen = null;
		
			for (var i = 0; i < links.length; i++) {
				if (links.item(i).href.indexOf(location.pathname) > -1)
				if (!chosen || links[i].href.length > chosen.href.length) chosen = links[i];
			}
		
			while (chosen && chosen.className != 'menulist') {
				if (chosen.nodeName.toLowerCase() == 'li') {
					chosen.getElementsByTagName('a').item(0).className = 'current-page';
				}
				
				chosen = chosen.parentNode;
			}
		};


// MENU REPOSITIONING: This will stop menus showing outside visible screen boundaries.
// To activate:
//  1) Paste this after you create your "new FSMenu" object.
//  2) Make sure the last line contains the correct menu object name, and
//     duplicate for each of the menu objects to which you want this to apply.

page.winW=function()
 { with (this) return Math.max(minW, MS?win.document[db].clientWidth:win.innerWidth) };
page.winH=function()
 { with (this) return Math.max(minH, MS?win.document[db].clientHeight:win.innerHeight) };
page.scrollX=function()
 { with (this) return MS?win.document[db].scrollLeft:win.pageXOffset };
page.scrollY=function()
 { with (this) return MS?win.document[db].scrollTop:win.pageYOffset };

function repositionMenus(mN) { with (this)
{
 var menu = this.menus[mN].lyr;

 // Showing before measuring corrects MSIE bug.
 menu.sty.display = 'block';
 // Reset to and/or store original margins.
 if (!menu._fsm_origML) menu._fsm_origML = menu.ref.currentStyle ?
  menu.ref.currentStyle.marginLeft : (menu.sty.marginLeft || 'auto');
 if (!menu._fsm_origMT) menu._fsm_origMT = menu.ref.currentStyle ?
  menu.ref.currentStyle.marginTop : (menu.sty.marginTop || 'auto');
 menu.sty.marginLeft = menu._fsm_origML;
 menu.sty.marginTop = menu._fsm_origMT;

 // Calculate absolute position within document.
 var menuX = 0, menuY = 0,
  menuW = menu.ref.offsetWidth, menuH = menu.ref.offsetHeight,
  vpL = page.scrollX(), vpR = vpL + page.winW() - 16,
  vpT = page.scrollY(), vpB = vpT + page.winH() - 16;
 var mp = page.elmPos(menu.ref);
 var pp = page.elmPos(this.menus[mN].par.ref);

 // Compare position to viewport, reposition accordingly.
 var mgL = 0, mgT = 0;
 if (mp.x + menuW > vpR) mgL = pp.x - mp.x - menuW;
 if (mp.x + mgL < vpL) mgL = vpL - mp.x;
 if (mp.y + menuH > vpB) mgT = vpB - mp.y - menuH;
 if (mp.y + mgT < vpT) mgT = vpT - mp.y;

// if (mgL) menu.sty.marginLeft = mgL + 'px';
 if (mgL) menu.sty.marginLeft = '-300px';

 if (mgT) menu.sty.marginTop = mgT + 'px';
}};

// Set this to process menu show events for a given object.
fsmAddEvent(listMenu, 'show', repositionMenus, true);
