/*
	cm2.js
	Collapsable menu system
	Copyright (c) 2002 Aaron Collegeman, Collegeman Software Engineering
*/
	var CM_version = 2.35;

/*
 	TO DO LIST:
		( ) create addSeparator function
		( ) transparency (get from W3C)
		( ) window.status with description of items
		( ) support for dynamic modification (disabling of menus and items)
		( ) onClick closes menus
		( ) keeping the pointing hand while over the div tags
		( ) preload arrow images
		( ) add a command for plain output (for collaberative menu systems)
*/

CM_debugDisplay = false;
CM_net6Offsets = false;
CM_net4Offsets = false;
CM_centering = false;
CM_supportNet4 = true;
CM_operatingStatus = true;
CM_itemClass = null;

// init CM object if navigator version is greater than 3
if (parseInt(navigator.appVersion) >= 3) { 
	var CM = new Object(); 
	CM.menus = new Array();
	CM.menuNames = new Array();
	CM.items = new Array();
	CM.itemNames = new Array();
	
	CM.init = false;
	CM.drawn = false;

	CM.defaults = new Object();
	CM.defaults.menuBgColor = '#ece9e8';
	CM.defaults.menuLabelColor = '#000000';
	CM.defaults.itemLabelColor = '#000000';
	CM.defaults.itemBgHighlight = '#aaaaaa';
	CM.defaults.itemLabelHighlight = '#ffffff';
	CM.defaults.itemLabelSize = 8;
	CM.defaults.itemLabelFont = 'MS Sans Serif, sans-serif';
	CM.defaults.menuBorderColor = '#aaaaaa';
	CM.defaults.clientWidth = 973;
	CM.defaults.arrowOff = '/images/cm.system.arrowOff.gif';
	CM.defaults.arrowOn = '/images/cm.system.arrowOn.gif';
	CM.defaults.spacer = '/images/spacer.gif';
	CM.defaults.Refresh = 600;
	CM.defaults.net6Yoffset = -4;
	CM.defaults.net6Xoffset = -3;
	CM.defaults.net4Yoffset = 1;
	CM.defaults.net4Xoffset = 11;
	CM.defaults.subMenuOffset = 5;
	CM.defaults.charWidth = 5;
}


/*
	navigator software and version
*/
if (parseInt(navigator.appVersion) >= 3) {
	
	CM.nav = new Object();
	CM.nav.Ver = parseInt(navigator.appVersion);
	
	// browser test variables
	CM.nav.isIE = null;
	CM.nav.isNet = null;
	CM.nav.isIE4 = null; // navigator.appVersion for all versions of IE is 4
	CM.nav.isNet4 = null;
	CM.nav.isNet6 = null;
	
	// is browser IE?
	if (navigator.appName.indexOf('MSIE') > -1 || navigator.appName.indexOf('Microsoft Internet Explorer') > -1) {
		CM.nav.isIE = true;
		if (CM.nav.Ver >= 4 && CM.nav.Ver < 5) {
			CM.nav.isIE4 = true;
		}
	}
	
	// is browser Netscape?
	else if (navigator.appName.indexOf('Netscape') > -1) {
		CM.nav.isNet = true;
		if (CM.nav.Ver >= 4 && CM.nav.Ver < 5) {
			CM.nav.isNet4 = true;
			CM.defaults.Refresh = 900;
		}
		else if (CM.nav.Ver >= 5) {
			CM.nav.isNet6 = true;
		}
	}
}

/*
	addMenu()
	creates a new menu object
*/
function CM_addMenu(x, y, width, height, triggerLoc, refName, bgColor, borderColor, labelColor, isSub, parentName) {

	var menuIndex = CM.menus.length;

	var menuName = "menu" + menuIndex;
	
	if (isSub) {
		// check parent reference
		if (eval("CM." + parentName) == null) { return CM_error("no menu named " + parentName + " exists to be parent of " + refName); }
		// ensure that parentName is the internal reference
		parentName = eval("CM." + parentName + ".name");
		var subMenuIndex = eval("CM." + parentName + ".subMenus.length");
		menuName = parentName + "sub" + subMenuIndex;
	}
	
	// check reference
	if (eval("CM." + refName)) { return CM_error("reference name for menu " + menuName + " of " + refName + " already exists"); }
	
	// if no reference name supplied, set equal to menuName
	if (refName == null) { refName = menuName; }

	// error handling
	if (x == null) { return CM_error("x coord for " + refName + " undefined"); }
	if (y == null) { return CM_error("y coord for " + refName + " undefined"); }
	if (width < 1) { return CM_error("width for " + refName + " undefined or less than 1"); }
	if (height < 1) { return CM_error("height for " + refName + " undefined or less than 1"); }

	// netscape offsets
	if (CM.nav.isNet6 && CM_net6Offsets) {
		x += CM.defaults.net6Xoffset;
		y += CM.defaults.net6Yoffset;
	}
	else if (CM.nav.isNet4 && CM_net4Offsets) {
		x += CM.defaults.net4Xoffset;
		y += CM.defaults.net4Yoffset;
	}
	
	if (triggerLoc != 'left' && triggerLoc != 'right' && triggerLoc != 'top' && triggerLoc != 'bottom') {
		return CM_error("trigger location for " + refName + " undefined or bad (" + triggerLoc + ")");
	}
	
		if (bgColor == null) { bgColor = CM.defaults.menuBgColor; }
		if (labelColor == null) { labelColor = CM.defaults.menuLabelColor; }
		if (borderColor == null) { borderColor = CM.defaults.menuBorderColor; }
	
	
	// create new menu object reference and store data
	var menu = new Object(); // variable reference to object for easier storing of data
	CM.menus[menuIndex] = new Object();
	CM.menus[menuIndex] = menu; // reference stored in an array for indexing purposes
	CM.menuNames[refName] = new Object();
	CM.menuNames[refName] = menu; // external references
	eval("CM." + menuName + " = new Object();"); // reference stored as an object off the CM module
	eval("CM." + menuName + " = menu;");
	eval("CM." + refName + " = new Object();");
	eval("CM." + refName + " = menu;");
	
	menu.name = menuName; // name used for internal referencing (functions)
	menu.ref = refName; // name used for external references (client, menu setup)
	
	menu.left = x;
	menu.x = x;
	menu.top = y;
	menu.bottom = y + height;
	menu.width = width;
	menu.height = height;
	menu.triggerLoc = triggerLoc;
	menu.items = new Array();
	menu.subMenus = new Array();
	menu.subVisible = false;
	menu.isVisible = false;
	menu.trigger = false; // for all menus not triggered by items
	
	// sub menu properties
	menu.isSub = null;
	menu.parentName = null;
	
	if (isSub) {
		
		menu.isSub = true;
		menu.parentName = parentName;
		
		// create a parent reference
		menu.parent = new Object();
		eval("menu.parent=CM." + parentName);
	
		// create a reference to this sub menu in the parent menu object and parent subMenus array
		eval("menu.parent." + menuName + "=new Object();");
		eval("menu.parent." + menuName + "=menu;");
		menu.parent.subMenus[menu.parent.subMenus.length] = menu;
	
		// set left from x coord
		if (triggerLoc == 'left') {
			menu.left = menu.parent.width - CM.defaults.subMenuOffset;
		}
		else {
			menu.left = CM.defaults.subMenuOffset - menu.width;
		}
		menu.x = menu.parent.x + menu.left;
	}
	else if (CM_centering) {
		menu.left /= CM.defaults.clientWidth;
	}
	
	menu.labelColor = labelColor;
	menu.bgColor = bgColor;
	menu.borderColor = borderColor;
	
}

/*
	addSubMenu()
	creates a new sub menu object for a given menu object
*/
function CM_addSubMenu(y, width, height, parentName, triggerLoc, refName, bgColor, borderColor, labelColor) {
	
	var menuIndex = CM.menus.length;

	// check parent reference
	if (eval("CM." + parentName) == null) {
		return CM_error("parent " + parentName + " referenced for sub menu " + refName + " undefined");
	}	
	
	menuName = parentName + "sub" + menuIndex;
	
	// check reference
	if (eval("CM." + refName)) { return CM_error("reference name for sub menu " + menuName + " of " + refName + " already exists"); }
	
	// if no reference name supplied, set equal to menuName
	if (refName == null) { refName = menuName; }

	if (y == null) { return CM_error("y offset for " + refName + " undefined"); }
	if (width < 1) { return CM_error("width for " + refName + " undefined or less than 1"); }
	if (height < 1) { return CM_error("height for " + refName + " undefined or less than 1"); }

	if (triggerLoc != 'left' && triggerLoc != 'right') {
		// set triggerLoc to default of 'left'
		triggerLoc = 'left';
	}

	// set x coord
	var parent = new Object();
	parent = eval ("CM." + parentName);
	
	// set y offset
	y += eval("CM." + parentName + ".top");
	
	CM_addMenu(1, y, width, height, triggerLoc, refName, bgColor, borderColor, labelColor, true, parentName);
	
}

/* 
	addItem()
	creates a new item object on a given menu object
*/
function CM_addItem(menuName, label, action, bgHighlight, labelHighlight, bgColor, labelColor) {
	
	var menu = eval("CM." + menuName);
	
	// check menu reference
	if (menu == null) { return CM_error("menu " + menuName + " referenced for item undefined"); }

	// check style references
	if (bgColor == null) { bgColor = menu.bgColor; }
	if (labelColor == null) { labelColor = menu.labelColor; }
	if (bgHighlight == null) { bgHighlight = CM.defaults.itemBgHighlight; }
	if (labelHighlight == null) { labelHighlight = CM.defaults.itemLabelHighlight; } 
	
	// create item name
	var itemIndex = menu.items.length;
	var itemName = menu.name + "item" + itemIndex;
	
	if (eval("CM." + itemName)) { return CM_error("item " + itemName + " already exists"); }

	if (label == null) { return CM_error("no label provided for item " + itemName); }
	
	if (action == null) { return CM_error("no action specified for item " + itemName); }
	 
	// create object and references
	var item = new Object();
	menu.items[itemIndex] = item;
	eval("CM." + itemName + "=new Object();");
	eval("CM." + itemName + "=item");
	// create parent object reference
	item.parent = new Object();
	item.parent = menu;
	
	item.name = itemName;
	item.parentName = menu.name;
	item.action = action;
	
	item.isTrigger == false;
	item.trigger = null;
	
	if (CM_isTrigger(item.action)) {
		
		if (eval("CM." + CM_isTrigger(item.action)) == eval("CM." + menuName)) {
			return CM_error("menu and triggered menu cannot be the same");
		}
		
		item.isTrigger = true;
		item.triggerName = CM_isTrigger(item.action);
		eval("CM." + item.triggerName + ".trigger=item;");
		item.trigger = eval("CM." + item.triggerName);
	}
	
	// style references
	item.bgColor = bgColor;
	item.labelColor = labelColor;
	item.bgHighlight = bgHighlight;
	item.labelHighlight = labelHighlight;
	item.label = label;
}

/*
	Trigger(menuName) 
	creates and returns a new trigger statement
*/
function CM_Trigger(menuName) {
	
	if (eval("CM." + menuName) == null) {
		return CM_error("menu " + menuName + " referenced for a trigger statement is undefined");
	}
	
	return "trigger://" + menuName;

}

/*
	isTrigger(action)
	returns true if action includes "trigger://"
*/
function CM_isTrigger(action) {
	
	if (action.indexOf('trigger://') > -1) {
		return action.substring(10,action.length);
	}
	else {
		return false;
	}
	
}	
	
/*
	CM_error(des, lvl)
	handles errors
	des: full description of error
	lvl: level of error, default is unrecoverable
	0 - unrecoverable
	1 - warning
	2 - debug
*/
function CM_error(des, lvl) {

	var error = "";
	var line = "--------------------------------------\n";
	des += '\n';
	
	if (!lvl) { error += "UNRECOVERABLE ERROR:\n"; }
	else if (lvl == 1) { error += "WARNING:\n"; }
	else if (lvl == 2) { error += "DEBUG:\n"; }	
	else { return 0; }
	
	error += line;
	error += des;
	error += line;
	
	if (!lvl) { 
		error += "Press [OK] to cancel execution.";
		alert(error);
		document.write("{Unrecoverable run-time error occured: " + des + "}"); 
		history.back();
		return lvl;
	}
	else if (lvl == 1) {
		error += "Press [OK] to continue execution.";
		if( !confirm(error) ) { history.back(); }
		else { document.write( "{Run-time error occured: " + des + "}"); }
		return lvl;
	} 
	else if (lvl == 2) {
		alert(error);
		return lvl;
	}
	else { 
		return 0; 
	}
}


/*
	Draw()
	creates the menus
*/
function CM_Draw() {

	CM.drawn = true;
	
	// support for stylesheets
	if (!CM_itemClass) {
		document.writeln('<style>.CMitem{text-decoration:none; font-family:' + CM.defaults.itemLabelFont + '; font-size:' + CM.defaults.itemLabelSize + 'pt; font-weight:normal; color:' + CM.defaults.itemLabelColor + ';}</style>');
		CM_itemClass = 'CMitem';		
	}
	
	if (CM.nav.isNet4 && CM_supportNet4) {
	
		// draw all menus
		for (var menuIndex = 0; menuIndex < CM.menus.length; menuIndex++) {
	
			var menu = new Object();
			menu = CM.menus[menuIndex];

			// IMPLEMENT USING A TABLE IN A LAYER TAG
			document.write('<layer name="' + menu.name + '" left="' + menu.x + '" top="' + menu.top + '" ');
			document.write('onmouseover="CM_showMenu(\'' + menu.name + '\',event,\'menu\');" ');
			document.write('onmouseout="CM_hideMenu(\'' + menu.name + '\',event,\'menu\');"');
			
			if (!CM_debugDisplay) {
				document.write(' visibility="hide"');
			}
			
			document.writeln('>');
			
			// open two table: one for border, the other for background
			document.write('<table border="0" width="' + menu.width + '" cellpadding="1" cellspacing="0" bgcolor="' + menu.borderColor + '"><tr><td>');
			document.write('<table border="0" width="100%" cellpadding="2" cellspacing="0" bgcolor="' + menu.bgColor + '">');
			
			// each item is a separate row on the table
			for (var itemIndex = 0; itemIndex < menu.items.length; itemIndex++) {
			
				var item = new Object();
				item = menu.items[itemIndex];
				
				// item content
				var href = item.action;
				
				// prepare two sets of mouse events: one for the link, and one for the layer
				var l_over = ' onmouseover="';
				var l_out = ' onmouseout="';
				
				// triggers
				if (item.isTrigger)
				{
					l_over += 'CM_showMenu(\'' + item.triggerName + '\',event,\'menu\'); return CM_Status(\'' + item.trigger + '\');';
					l_out += 'CM_hideMenu(\'' + item.triggerName + '\',event,\'menu\'); return CM_Status(\'\');';
					href = 'javascript:void(0);';
				}
				else {
					// emphasis only
					l_over += 'CM_Emphasis(\'over\',\'' + item.name + '\',\'' + item.bgHighlight + '\');';
					l_out += 'CM_Emphasis(\'out\',\'' + item.name + '\',\'' + item.parent.bgColor + '\');';
				}
				
				l_over += '" ';
				l_out += 'CM_showMenu(\'' + menu.name + '\',event,\'menu\');"';
				
				var itemContent = '<a class="' + CM_itemClass + '" href="' + href + '" ' + l_over + l_out + '>' + item.label + '</a>';
				
				// PUT THE SPACER IN THE LABEL COLUMN
				document.write('<tr><td width="100%">' + itemContent);
				if (item.isTrigger) {
					var labelWidth = item.label.length * CM.defaults.charWidth;
					var spacerWidth = menu.width - labelWidth - 40;
					document.write('<a href="javascript:void(0);" ' + l_out + l_over + '><img src="' + CM.defaults.spacer + '" height="11" width="' + spacerWidth + '" border="0"></a>');
				}
				document.write('</td>');

				if (item.isTrigger) {
					document.write('<td align="right"><a href="javascript:void(0);" ' + l_out + l_over + '><img src="' + CM.defaults.arrowOff + '" name="' + item.name + 'arr" id="' + item.name + 'arr" border="0"></a></td>');
				}
				else{
					document.write('<td><img src="' + CM.defaults.spacer + '"></td>');
				}
				
				document.write('</tr>');
			}
			
			// finish tables and layer
			document.writeln('</table></td></tr></table></layer>');
			
		}
	
	
	}

	else if (CM.nav.isIE4 || CM.nav.isNet6) {

		// draw all menus
		for (var menuIndex = 0; menuIndex < CM.menus.length; menuIndex++) {
			
			var menu = new Object();
			menu = CM.menus[menuIndex];
			
			// first, open a <div> for the menu background
			document.write('<div name="' + menu.name + '" id="' + menu.name + '" style="position:absolute; padding:1px; ');
		
			document.write('top:' + menu.top + 'px; left:' + menu.x + 'px; ');
			document.write('width:' + menu.width + 'px; height:' + menu.height + 'px; ');
			document.write('background-color:' + menu.bgColor + '; '); 
			document.write('border-width:1px; border-color:' + menu.borderColor + '; border-style:solid; ');
			
			if (!CM_debugDisplay) {
				document.write('visibility:hidden; ');
			}
			
			document.writeln('" ');
			
			document.writeln('onmouseout="CM_hideMenu(\'' + menu.name + '\',event,\'menu\');"' );
			document.writeln('onmouseover="CM_showMenu(\'' + menu.name + '\',event,\'menu\');"');
			
			document.writeln('>');
			
			// draw all items for menus
			for (var itemIndex = 0; itemIndex < menu.items.length; itemIndex++) {
				
				var item = new Object();
				item = menu.items[itemIndex];

				var href = item.action;
				
				document.write('<div name="' + item.name + '" id="' + item.name + '" style="padding-left:5px; padding-top:2px; padding-bottom:2px;"');
			
				// prepare mouse events
				var onmouseover = 'onmouseover="';
				var onmouseout = 'onmouseout="';
				
				// triggers
				if (item.isTrigger)
				{
					onmouseover += 'CM_showMenu(\'' + item.triggerName + '\',event,\'item\');';
					onmouseout += 'CM_hideMenu(\'' + item.triggerName + '\',event,\'item\');';
					href = "javascript:void(0)";
				}
				else {
					onmouseover += 'CM_Emphasis(\'over\',\'' + item.name + '\',\'' + item.bgHighlight + '\');';
					onmouseout += 'CM_Emphasis(\'out\',\'' + item.name + '\',\'' + item.parent.bgColor + '\');';				
				}
				
				// complete mouse events
				document.write(onmouseover + '" ' + onmouseout + '"');
			
				document.write('>');
			
				// arrow comes before item in IE
				if (CM.nav.isIE4 && item.isTrigger) {
					document.write('<img src="' + CM.defaults.arrowOff + '" align="right" name="' + item.name + 'arr" id="' + item.name + 'arr">');
				}
				
				// description
				document.write('<a class="' + CM_itemClass + '" name="' + item.name + 'lbl" id="' + item.name + 'lbl" href="' + href +'">' + item.label + '</a>')
				
				// arrow comes after item in Netscape 
				if (CM.nav.isNet6 && item.isTrigger) {
					document.write('<img src="' + CM.defaults.spacer + '" height="1" width="5" id="' + item.name + 'spa" name="' + item.name + 'spa"><img src="' + CM.defaults.arrowOff + '" id="' + item.name + 'arr" name="' + item.name + 'arr">');
				}
				
				document.writeln('</div>');
				
			}
	
			// </div>
			document.writeln('</div>');

		}
		
		// running messages
		if (CM_operatingStatus) {
			CM_Status('cmII v' + CM_version + ' running: ' + CM.menus.length + ' menus drawn');
		}
	}
}

function CM_Status(msg) {
/*
	updates window status bar
*/
	window.status = msg;
	return true;

}

function CM_Emphasis(em, itemName, evt) {
/*
	modify the background color of a div object to highlight
*/
	var item = eval("CM." + itemName);
	
	if (CM.nav.isIE4 || CM.nav.isNet6) {
		
		var div = document.getElementById(itemName);
		var lbl = document.getElementById(itemName + "lbl");
		if (em) {
			if (em == "over") {
				div.style.backgroundColor = item.bgHighlight;
				lbl.style.color = item.labelHighlight;
			}
			else if (em == "out") {
				div.style.backgroundColor = item.parent.bgColor;
				lbl.style.color = item.parent.labelColor;
			}
		}
		
	}
}

/*
	showMenu()
	changes menu status to visible
*/
function CM_showMenu(menuName, e, type) {
	
	if (CM.menus.length <= 0) {
		return 0;
	}
	
	// create menu object
	var menu = new Object();
	menu = eval("CM." + menuName);
	
	// set menu to visible
	menu.isVisible = true;
	
	// if menu has a parent, tell parent menu is displayed
	if (menu.parent) {
		menu.parent.subVisible = true;
		
		// if trigger was a menu, tell all parents to stay open
		if (type == 'menu') {
			var parent = new Object();
			var parent = menu.parent;
			do 
			{
				parent.isVisible = true;
				parent = parent.parent;
			} while (parent != null);
		}
	}

}

/* 
	hideMenu()
	changes menu status to invisible
*/
function CM_hideMenu(menuName, e, type) {

	if (CM.menus.length <= 0) {
		return 0;
	}

	// create menu object
	var menu = new Object();
	menu = eval("CM." + menuName);
	
	// if menu has children, check children
	if (menu.subVisible) {
		menu.isVisible = true;
	}
	else if (!menu.subVisible) {
		menu.isVisible = false;
		// tell parent that sub is closed
		if (menu.parent) {
			menu.parent.subVisible = false;
		}
		
		// if trigger was a menu, tell all parents to close
		if (type == 'menu' && menu.parent) {
			var parent = new Object();
			var parent = menu.parent;
			do 
			{
				parent.isVisible = false;
				parent = parent.parent;
			} while (parent != null);
		}
	}

}

/*
	Translate() 
	moves all top level menus on client resize
*/
function CM_Translate() {

	if (CM.nav.isNet4) {
		return 0;
	}
	
	if (CM.menus.length <= 0 || !CM.drawn || !CM_centering) {
		return 0;
	}
	
	// client width
	if (CM.nav.isNet) {
		CM.clientWidth = window.innerWidth;
	}
	else if (CM.nav.isIE) {
		CM.clientWidth = document.body.clientWidth;
	}
	
	for (var i=0; i<CM.menus.length; i++) {
		
		if (!CM.menus[i].isSub) {
		
			if (CM.nav.isNet4) {
				var obj = document.layers[CM.menus[i].name];
				CM.menus[i].x = Math.round(CM.menus[i].left * CM.clientWidth);
				obj.left = CM.menus[i].x;
			}
		
			if (CM.nav.isIE4 || CM.nav.isNet6) {
				var obj = document.getElementById(CM.menus[i].name);
				CM.menus[i].x = Math.round(CM.menus[i].left * CM.clientWidth);
				obj.style.left = CM.menus[i].x;
			}
			
			if (CM.menus[i].subMenus.length) {
				CM_TranslateSubMenus(CM.menus[i]);
			}
		}
	}
}

function CM_TranslateSubMenus(menu) {

	if (menu.subMenus.length <= 0 || !CM.drawn || !CM_centering) {
		return 0;
	}
	
	
	
	for (var i=0; i<menu.subMenus.length; i++) {
	
		var subMenu = menu.subMenus[i];
	
		if (CM.nav.isNet4) {
		
			var obj = document.layers[CM.menus[i].name];
			subMenu.x = subMenu.parent.x + subMenu.left;
			obj.left = subMenu.x;
			
			if (subMenu.subMenus.length) {
				CM_TranslateSubMenus(subMenu);
			}	
		}
		
		if (CM.nav.isIE4 || CM.nav.isNet6) {
			
			var obj = document.getElementById(subMenu.name);
			subMenu.x = subMenu.parent.x + subMenu.left;
			obj.style.left = subMenu.x;
			
			if (subMenu.subMenus.length) {
				CM_TranslateSubMenus(subMenu);
			}
		}
	}
}

/*
	init()
	runs in a timeout, updating objects
*/
function CM_Init() {

	if (CM.nav.isNet4 && !CM_supportNet4) {
		return 0;
	}

	if (!CM.init && CM_debugDisplay) {
		CM_error("CM.defaults.clientWidth = " + CM.defaults.clientWidth,2);
	}

	if (!CM.init && CM_centering) {
		CM_Translate();
	}
	
	if (CM.menus.length <= 0) {
		return 0;
	}
	
	if (CM_debugDisplay) {
		return 0;
	}
	
	if (CM.menus.length) {
		CM.init = true;
	}
	
	for (var i=0; i < CM.menus.length; i++) {
		
		if (CM.nav.isNet4) {
		
			var menu = new Object();
			menu = CM.menus[i];
			
			if (menu.isVisible) {
				// make menu visible
				eval("document." + menu.name + ".visibility='visible';");		
			}
			else if (!menu.isVisible && !menu.subVisible) {
				// make menu hidden
				eval("document." + menu.name + ".visibility='hidden';");
			}
			
		}
		
		if (CM.nav.isIE4 || CM.nav.isNet6) {
			var menu = new Object();
			menu = CM.menus[i];
			var obj = new Object();
			var obj = document.getElementById(menu.name);
			
			if (menu.isVisible) {
				obj.style.visibility = 'visible';
			}
			else if (!menu.isVisible && !menu.subVisible) {
				obj.style.visibility = 'hidden';
			}
			
			// change trigger emphasis
			if (menu.trigger) {
				var div = document.getElementById(menu.trigger.name);
				var lbl = document.getElementById(menu.trigger.name + "lbl");
				var img = eval("document." + menu.trigger.name + "arr");
				if (menu.isVisible) {
					div.style.backgroundColor = menu.trigger.bgHighlight;
					lbl.style.color = menu.trigger.labelHighlight;
					img.src = CM.defaults.arrowOn;
				}
				else if (!menu.isVisible) {
					div.style.backgroundColor = menu.trigger.parent.bgColor;
					lbl.style.color = menu.trigger.parent.labelColor;
					img.src = CM.defaults.arrowOff;
				}
			}
		}
	}
	setTimeout('CM_Init()',CM.defaults.Refresh);
}
