function TCWmenu( menu_id )
{

//==========================================================================
// Start of the AnimatedMenu functions
//==========================================================================

	function debugIt( node, depth )
	{
		addUniqueClassName(node,'dom-'+depth+'-'+node_index);
		node_index++;
	}
	
	function setupTCWMenus()
	{
//	  walkDOMTree( menu_node, myself.debugIt );
//		printDOMTree( menu_node );
		setupMainMenu();
		setupDropDownMenus();
		return true;
	}

	function setupMainMenu()
	{
		var item, a_elem;
		menu_width = ul_node.clientWidth;
		main_bg_height = ul_node.clientHeight;
		top_bg_image_height = top_img.height; // here so called after images load

// Divide the root node width evenly between the main menu items,
// then	adjust the main menu width to account for fractional pixels	
	  var item_width = Math.floor((menu_width /li_nodes.length )) - 1;
		ul_node.style.clientWidth = item_width*li_nodes.length;
		
		for(i=0;i<li_nodes.length;i++)
		{
			item = li_nodes[i];
			a_elem = getChildElementsByTagName( 'A', item )[0];
			if(even_spaced)
			{
			  item.style.width = item_width + 'px';
			}
			a_elem.style.height = main_bg_height + 'px';
			a_elem.style.lineHeight = main_bg_height + 'px';
			item.style.backgroundImage = 'url(' + top_bg_image + ')';
			item.style.backgroundPosition = '0px 0px';
			item.onmouseover = doFlash;
			item.onmouseout = endFlash;
			item.setAttribute('z_bg_top',0);
			item.setAttribute('z_new_bg_top',0);
		}
	}
	
	function setupDropDownMenus()
	{
	  function sddm( node )
		{
		  var i, ul_node, a_node, sub_nodes;
			node.onmouseover = doFlash;
			node.onmouseout = endFlash;

			ul_node = node.getElementsByTagName( 'UL' )[0];
			if(ul_node !== undefined) // undef if no submenu.
			{
				ul_node.style.display = 'none';
				a_node = node.getElementsByTagName( 'A' )[0];
				addUniqueClassName( a_node, "has_submenu");
				sub_nodes = getChildElementsByTagName('LI',ul_node);
				for(i=0;i<sub_nodes.length;i++)
				{
					sddm( sub_nodes[i] );
				}
			}
			
		}
		var i;
		var node;
		for(i=0;i<li_nodes.length;i++)
		{
			node = li_nodes[i];
			sddm( node );
		}
	}
	
//==========================================================================
// Start of the AnimatedMenu functions
//==========================================================================

	function rotateEm() // appears to rotate the background image
	{
		var i, delta, y, new_y, old_y;
		var node;
		var result = false;
		for(i=0;i<li_nodes.length;i++)
		{
			node = li_nodes[i];
			old_y = y = parseFloat(node.getAttribute('z_bg_top'));
			new_y = parseFloat(node.getAttribute('z_new_bg_top'));
			if(!linear_slide)// asymptotic
			{
				y = y + ((new_y - y)/10);
			}
			else
			{
				if(new_y < y - 0.5)
				{
					y = y - ((top_bg_image_height-main_bg_height)/20);
				}
				else if (new_y > y + 0.5)
				{
					y = y + ((top_bg_image_height-main_bg_height)/20);
				}
			}
			delta = Math.abs(y-new_y);
			node.style.backgroundPosition = '0 ' + y + 'px';
			node.setAttribute('z_bg_top',y);
			if(delta > 0.5)
			{
				result = true;
			}
		}
		if(!result) // we haven't moved anything
		{
		  if(flashTimer >= 0){ clearInterval(flashTimer); }
			flashTimer = -1;
		}
	}
	
	function flashEm()
	{
		if(flashTimer >= 0){ clearInterval(flashTimer); }
	  flashTimer = setInterval(myself.rotateEm,16);
	}
	
	function doFlash()
	{
	  var sub_menu;
	  if(this.parentNode === ul_node) // See if this is a main menu element
		{
		  var delta = -(top_bg_image_height - main_bg_height);
			this.setAttribute('z_new_bg_top', delta );
			this.setAttribute('debug_bg_top', delta );
			flashEm();
			sub_menu = this.getElementsByTagName('UL');
			if(sub_menu.length > 0)
			{
			  sub_menu = sub_menu[0];
				if(sub_menu !== null)
				{
					if(sub_menu.style !== null)
					{
						sub_menu.style.display = 'block';
					}
				}
			}
		}
		else
		{
			sub_menu = this.getElementsByTagName('UL');
			if(sub_menu.length > 0)
			{
			  sub_menu = sub_menu[0];
				if(sub_menu !== null)
				{
					if(sub_menu.style !== undefined)
					{
						sub_menu.style.display = 'block';
					}
				}
			}
		}
	}
	
	function endFlash()
	{
		var sub_menu;
	  if(this.parentNode === ul_node) // See if this is a main menu element
		{
			this.setAttribute('z_new_bg_top', 0 );
			flashEm();
			sub_menu = this.getElementsByTagName('UL')[0];
		}
		else
		{
			sub_menu = this.getElementsByTagName('UL')[0];
		}		
		if(sub_menu !== undefined)
		{
			if(sub_menu.style !== null){sub_menu.style.display = 'none';}
		}
	}
	
//==========================================================================
// Start of the AnimatedMenu main code
//==========================================================================

//  var menu_node = document.getElementById( menu_id );
	var ul_node = document.getElementById( menu_id );//menu_node.getElementsByTagName( 'UL' )[0];
	var li_nodes = getChildElementsByTagName( 'LI', ul_node );

	var myself = this; // IE doesn't like using self = this;

	myself.debugIt = debugIt;
	myself.rotateEm = rotateEm;
	
	// Get the image size

	var top_bg_image = ul_node.getAttribute('top-bg-image');
	var top_img = new Image();
//	top_img.onload = setupTCWMenus;
	top_img.src = top_bg_image;
	var top_bg_image_height; 
	var main_bg_height;
	var menu_width;
	
	var flashTimer = -1;
	
	var node_index = 0;	// for debug and development
	
	// Get the menu options	
	var even_spaced = ul_node.getAttribute('even-spaced') !== null;
	var linear_slide = ul_node.getAttribute('linear-slide') !== null;

	window.onresize = setupTCWMenus;
//	window.onload = setupTCWMenus; // This KILLS Point2 links (?????)
	
	var IE = false;
	if(document.all){ IE=true;}  // For internet explorer hacks

	setupTCWMenus();

//	printDOMTree( menu_node );

}


