var _cmIDCount = 0;
var _cmIDName = 'cmSubMenuID';

var _cmTimeOut = null;
var _cmCurrentItem = null;

var _cmNoAction = new Object();
var _cmSplit = new Object();

var _cmItemList = new Array();
var _cmIdList = new Array();

var _cmNodeProperties = {
	mainFolderLeft: '',
	mainFolderRight: '',
	mainItemLeft: '',
	mainItemRight: '',

	folderLeft: '',
	folderRight: '',
	itemLeft: '',
	itemRight: '',
	mainSpacing: 0,
	subSpacing: 0,
	delay: 500
};

function cmNewID() {
	return _cmIDName+(++_cmIDCount);
}

function cmActionItem(item, prefix, isMain, idSub, orient, nodeProperties) {
	_cmItemList[_cmItemList.length] = item;
	var index = _cmItemList.length-1;
	idSub = (!idSub)? 'null': ('\''+idSub+'\'');
	orient = '\''+orient+'\'';
	prefix = '\''+prefix+'\'';
	return ' onMouseOver="cmItemMouseOver(this, '+prefix+', '+isMain+', '+idSub+', '+orient+', '+index+')" onMouseOut="cmItemMouseOut(this, '+nodeProperties.delay+')" onMouseDown="cmItemMouseDown(this, '+index+')" onMouseUp="cmItemMouseUp(this, '+index+')"';
}

function cmNoActionItem(item, prefix) {
	return item[1];
}

function cmSplitItem(prefix, isMain, vertical) {
	var classStr = 'cm'+prefix;
	if (isMain) {
		classStr += 'Main';
		if (vertical) {
			classStr += 'HSplit';
		} else {
			classStr += 'VSplit';
		}
	} else {
		classStr += 'HSplit';
	}
	var item = eval(classStr);
	return cmNoActionItem(item, prefix);
}

/*function cmDrawSubMenu (subMenu, prefix, id, orient, nodeProperties) {
	var str = '';//<div class="' + prefix + 'SubMenu" id="' + id + '"><table summary="sub menu" cellspacing="' + nodeProperties.subSpacing + '" class="' + prefix + 'SubMenuTable">';
*/
function cmDrawSubMenu(subMenu, prefix, id, orient, nodeProperties) {
	var str = '<div class="'+prefix+'SubMenu" id="'+id+'"><table class="'+prefix+'SubMenuTable" cellspacing="'+ nodeProperties.subSpacing+'" summary="sub menu">';

	var strSub = '';

	var item;
	var idSub;
	var hasChild;

	var i;

	var classStr;

	for (i=5; i<subMenu.length; ++i) {
		item = subMenu[i];
		if (!item)
			continue;

		hasChild = (item.length>5);
		idSub = hasChild? cmNewID(): null;

		str += '<tr class="'+prefix+'MenuItem"'+cmActionItem(item, prefix, 0, idSub, orient, nodeProperties)+'>';

		if (item == _cmSplit) {
			str += cmSplitItem (prefix, 0, true);
			str += '</tr>';
			continue;
		}

		if (item[0] == _cmNoAction) {
			str += cmNoActionItem (item, prefix);
			str += '</tr>';
			continue;
		}

		classStr = prefix + 'Menu';
		classStr += hasChild ? 'Folder' : 'Item';

		str += '<td class="' + classStr + 'Left">';

		if (item[0] != null && item[0] != _cmNoAction)
			str += item[0];
		else
			str += hasChild ? nodeProperties.folderLeft : nodeProperties.itemLeft;

		str += '<td class="'+classStr+item[3]+'Text" nowrap>'+item[1];

//		str += '<td class="' + classStr + 'Right">';

		if (hasChild) {
			str += nodeProperties.folderRight;
			strSub += cmDrawSubMenu (item, prefix, idSub, orient, nodeProperties);
		} else
			str += nodeProperties.itemRight;
/*		if (item[3] != null && item[0] != _cmNoAction)
			if (item[3] == '1') {
				levelStr = '1';
			} else {
				if (item[3] == '2') {
					levelStr = '2';
				} else {
					if (item[3] == '3') {
						levelStr = '3';
					} else {
						str += item[0];
					}
					str += item[0];
				}
			}
		else
			str += nodeProperties.itemLeft;
//			str += hasChild ? nodeProperties.folderLeft : nodeProperties.itemLeft;

		str += '<td nowrap class="'+classStr+levelStr+'Text">'+item[1];
*/
		str += '</td></tr><tr><td class="'+classStr+'Left"><img src="/images/level'+item[3]+'sep.gif" width="19" height="1" border="0" alt=""></td><td class="'+classStr+'Sep'+item[3]+'"><img src="images/o.gif" width="1" height="1" border="0" alt=""></td></tr>';
/*		if (hasChild) {
			str += cmDrawSubMenu (item, prefix, idSub, orient, nodeProperties);
			//if(item[1]=='Kohler') alert(str);
		}
*/
	}

	str += '</table></div>' + strSub;
	return str;
}

function cmDraw(id, menu, orient, nodeProperties, prefix) {
	var obj = cmGetObject(id);

	if (!nodeProperties) {
		nodeProperties = _cmNodeProperties;
	}
	if (!prefix) {
		prefix = '';
	}

	var str = '<table class="'+prefix+'Menu" cellpadding="0" cellspacing="'+nodeProperties.mainSpacing+'" border="0" summary="main menu">'; //!!!
	var strSub = '';

	if (!orient) {
		orient = 'hbr';
	}

	var orientStr = String(orient);
	var orientSub;
	var vertical;

	if (orientStr.charAt(0)=='h') {
		orientSub = 'v'+orientStr.substr(1, 2);
		str += '<tr>';
		vertical = false;
	} else {
		orientSub = 'v'+orientStr.substr(1, 2);
		vertical = true;
	}

var a=0;
	var i;
	var item;
	var idSub;
	var hasChild;
	var classStr;

	for (i=0; i<menu.length; ++i) {
		item = menu[i];

		if (!item) {
			continue;
		}
//a++;
		str += vertical? '<tr': '<td';// id="td'+a+'"';
//		str += '<tr';
		str += ' class="'+prefix+'MainItem"';

		hasChild = (item.length>5);
		idSub = hasChild? cmNewID(): null;
//alert(cmActionItem(item, prefix, 1, idSub, orient, nodeProperties));
		str += cmActionItem(item, prefix, 1, idSub, orient, nodeProperties)+'>';

		if (item == _cmSplit) {
			str += cmSplitItem(prefix, 1, vertical);
			str += vertical? '</tr>': '</td>';
			continue;
		}

		if (item[0] == _cmNoAction) {
			str += cmNoActionItem(item, prefix);
			str += vertical? '</tr>': '</td>';
			continue;
		}

		classStr = prefix+'Main'+(hasChild? 'Folder': 'Item');

		str += '<table cellpadding="0" cellspacing="0" border="0"><tr>';
//		str += vertical? '<td': '<span';
//		str += '<td';
//		str += ' class="'+classStr+'Left">';
//		str += (item[0] == null)? (hasChild? nodeProperties.mainFolderLeft: nodeProperties.mainItemLeft): item[0];
//		str += vertical? '</td>': '</span>';
//		str += '</td>';

//		str += vertical? '<td': '<span';
		str += '<td';
		str += ' class="'+classStr+'Text">';
		str += (item[0] == null)? (hasChild? nodeProperties.mainFolderLeft: nodeProperties.mainItemLeft): item[0];
		str += item[1];
//		str += vertical? '</td>': '</span>';
		str += '</td>';

//		str += vertical? '<td': '<span';
		str += '<td';
		str += ' class="'+classStr+'Right" id="MainItem'+(_cmItemList.length-1)+'">';
		_cmIdList[a] = _cmItemList.length-1;
		a++;
//		str += hasChild? nodeProperties.mainFolderRight: nodeProperties.mainItemRight;
		str += '<IMG src="/images/o.gif" width="9" height="34" alt="">';
//		str += vertical? '</td>': '</span>';
//		str += vertical? '</tr>': '</td>';
		str += '</td>';
		str += '</tr></table>';

		if (hasChild) {
//			strSub += '<div class="'+prefix+'SubMenu" id="'+idSub+'"><table summary="sub menu" cellspacing="'+nodeProperties.subSpacing+'" class="'+prefix+'SubMenuTable">';
			strSub += cmDrawSubMenu(item, prefix, idSub, orientSub, nodeProperties);
//			strSub += '</table></div>';
		}
	}
//alert(document.td1.style.width);
	if (!vertical) {
		str += '</tr>';
	}
	str += '</table>'+strSub;
	obj.innerHTML = str;
}

function cmItemMouseOver(obj, prefix, isMain, idSub, orient, index) {
	clearTimeout(_cmTimeOut);
//if (isMain) {
//alert(prefix+' - '+index);
//}
	if (!obj.cmPrefix) {
		obj.cmPrefix = prefix;
		obj.cmIsMain = isMain;
	}

	var thisMenu = cmGetThisMenu(obj, prefix);

	if (!thisMenu.cmItems) {
		thisMenu.cmItems = new Array();
	}
	var i;
	for (i=0; i<thisMenu.cmItems.length; ++i) {
		if (thisMenu.cmItems[i]==obj) {
			break;
		}
	}
	if (i==thisMenu.cmItems.length) {
		thisMenu.cmItems[i] = obj;
	}

	if (_cmCurrentItem) {
		if (_cmCurrentItem==thisMenu) {
			return;
		}

		var thatPrefix = _cmCurrentItem.cmPrefix;
		var thatMenu = cmGetThisMenu(_cmCurrentItem, thatPrefix);
		if (thatMenu!=thisMenu.cmParentMenu) {
			if (_cmCurrentItem.cmIsMain) {
				_cmCurrentItem.className = thatPrefix+'MainItem';
//				eval('MainItem'+index+'.className = \'ThemeOfficeMainItemRight\'');
			} else {
				_cmCurrentItem.className = thatPrefix+'MenuItem';
			}
			if (thatMenu.id!=idSub) {
				cmHideMenu(thatMenu, thisMenu, thatPrefix);
			}
		}
	}

	_cmCurrentItem = obj;

	cmResetMenu(thisMenu, prefix);

	var item = _cmItemList[index];
	var isDefaultItem = cmIsDefaultItem(item);

	if (isDefaultItem) {
		if (isMain) {
			obj.className = prefix+'MainItemHover';
//			document.ThemeOfficeMainFolder0.className='ThemeOfficeMainItemRightHover';
//			ThemeOfficeMainFolder0.className = 'ThemeOfficeMainItemRightHover';
			eval('MainItem'+index+'.className = \'ThemeOfficeMainItemRightHover\'');
		} else {
//			obj.className = prefix+'MenuItemHover';
			obj.className = prefix+'MenuItem'+item[3]+'Hover';
			var i=_cmIdList.length-1;
			while (index<_cmIdList[i]) {
				i--;
			}
			eval('MainItem'+_cmIdList[i]+'.className = \'ThemeOfficeMainItemRightHover\'');
		}
	}

	if (idSub) {
		var subMenu = cmGetObject(idSub);
		cmShowSubMenu(obj, prefix, subMenu, orient);
	}

	var descript = '';
	if (item.length>4) {
		descript = (item[4]!=null)? item[4]: (item[2]? item[2]: descript);
	} else if (item.length>2) {
		descript = (item[2]? item[2]: descript);
	}
	window.defaultStatus = descript;
}

function cmItemMouseOut(obj, delayTime) {
	if (!delayTime) {
		delayTime = _cmNodeProperties.delay;
	}
	_cmTimeOut = window.setTimeout('cmHideMenuTime()', delayTime);
	window.defaultStatus = '';
}

function cmItemMouseDown(obj, index) {
	if (cmIsDefaultItem(_cmItemList[index])) {
		if (obj.cmIsMain) {
			obj.className = obj.cmPrefix+'MainItemActive';
			eval('MainItem'+index+'.className = \'ThemeOfficeMainItemRightActive\'');
		} else {
			obj.className = obj.cmPrefix+'MenuItemActive';
		}
	}
}

function cmItemMouseUp(obj, index) {
	var item = _cmItemList[index];

	var link = null, target = '_self';

	if (item.length>2) {
		link = item[2];
	}
/*	if (item.length > 3) {
		target = item[3] ? item[3] : target;
	}
*/
	if (link!=null && target=='moswindow') {
		window.open (link, '', 'toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=yes,width=780,height=550');
	} else
		if (link!=null) {
			window.open(link, target);
		}

	var prefix = obj.cmPrefix;
	var thisMenu = cmGetThisMenu(obj, prefix);

	var hasChild = (item.length>5);
	if (!hasChild) {
		if (cmIsDefaultItem(item)) {
			if (obj.cmIsMain) {
				obj.className = prefix+'MainItem';
			} else {
				obj.className = prefix+'MenuItem';
			}
		}
		cmHideMenu(thisMenu, null, prefix);
	} else {
		if (cmIsDefaultItem(item)) {
			if (obj.cmIsMain) {
				obj.className = prefix+'MainItemHover';
				eval('MainItem'+index+'.className = \'ThemeOfficeMainItemRightHover\'');
			} else {
//				obj.className = prefix+'MenuItemHover';
				obj.className = prefix+'MenuItem'+item[3]+'Hover';
			}
		}
	}
}

function cmMoveSubMenu(obj, subMenu, orient) {
	var mode = String (orient);
	var p = subMenu.offsetParent;
	if (mode.charAt (0) == 'h') {
		if (mode.charAt (1) == 'b')
			subMenu.style.top = (cmGetYAt (obj, p) + obj.offsetHeight) + 'px';
		else
			subMenu.style.top = (cmGetYAt (obj, p) - subMenu.offsetHeight) + 'px';
		if (mode.charAt (2) == 'r')
			subMenu.style.left = (cmGetXAt (obj, p)) + 'px';
		else
			subMenu.style.left = (cmGetXAt (obj, p) + obj.offsetWidth - subMenu.offsetWidth) + 'px';
	} else {
		if (mode.charAt (2) == 'r')
			subMenu.style.left = (cmGetXAt (obj, p) + obj.offsetWidth) + 'px';
		else
			subMenu.style.left = (cmGetXAt (obj, p) - subMenu.offsetWidth) + 'px';
		if (mode.charAt (1) == 'b')
			subMenu.style.top = (cmGetYAt (obj, p)) + 'px';
		else
			subMenu.style.top = (cmGetYAt (obj, p) + obj.offsetHeight - subMenu.offsetHeight) + 'px';
	}
}

function cmShowSubMenu(obj, prefix, subMenu, orient) {
	if (!subMenu.cmParentMenu) {
		var thisMenu = cmGetThisMenu (obj, prefix);
		subMenu.cmParentMenu = thisMenu;
		if (!thisMenu.cmSubMenu)
			thisMenu.cmSubMenu = new Array ();
		thisMenu.cmSubMenu[thisMenu.cmSubMenu.length] = subMenu;
	}

	cmMoveSubMenu (obj, subMenu, orient);
	subMenu.style.visibility = 'visible';

	if (document.all) {
		subMenu.cmOverlap = new Array ();
		cmHideControl ("IFRAME", subMenu);
		cmHideControl ("SELECT", subMenu);
		cmHideControl ("OBJECT", subMenu);
	}
}

function cmResetMenu(thisMenu, prefix) {
	if (thisMenu.cmItems) {
		var i;
		var str;
		var items = thisMenu.cmItems;
		for (i=0; i<items.length; ++i) {
			if (items[i].cmIsMain) {
				str = prefix+'MainItem';
			} else {
				str = prefix+'MenuItem';
			}
			if (items[i].className!=str) {
				items[i].className = str;
			}
		}
		for (i=0; i<_cmIdList.length; i++) {
//			if (items[i].className!=str) {
			eval('MainItem'+_cmIdList[i]+'.className = \'ThemeOfficeMainItemRight\'');
//			}
		}
	}
}

function cmHideMenuTime() {
	if (_cmCurrentItem) {
		var prefix = _cmCurrentItem.cmPrefix;
		cmHideMenu(cmGetThisMenu(_cmCurrentItem, prefix), null, prefix);
	}
}

function cmHideMenu(thisMenu, currentMenu, prefix) {
	var str = prefix+'SubMenu';

	if (thisMenu.cmSubMenu) {
		var i;
		for (i=0; i<thisMenu.cmSubMenu.length; ++i) {
			cmHideSubMenu(thisMenu.cmSubMenu[i], prefix);
		}
	}

	while (thisMenu && thisMenu != currentMenu) {
		cmResetMenu(thisMenu, prefix);
		if (thisMenu.className == str) {
			thisMenu.style.visibility = 'hidden';
			cmShowControl (thisMenu);
		} else
			break;
		thisMenu = cmGetThisMenu (thisMenu.cmParentMenu, prefix);
	}
}

function cmHideSubMenu(thisMenu, prefix) {
	if (thisMenu.style.visibility == 'hidden')
		return;
	if (thisMenu.cmSubMenu) {
		var i;
		for (i = 0; i < thisMenu.cmSubMenu.length; ++i) {
			cmHideSubMenu (thisMenu.cmSubMenu[i], prefix);
		}
	}
	cmResetMenu (thisMenu, prefix);
	thisMenu.style.visibility = 'hidden';
	cmShowControl (thisMenu);
}

function cmHideControl(tagName, subMenu) {
	var x = cmGetX (subMenu);
	var y = cmGetY (subMenu);
	var w = subMenu.offsetWidth;
	var h = subMenu.offsetHeight;

	var i;
	for (i=0; i<document.all.tags(tagName).length; ++i) {
		var obj = document.all.tags(tagName)[i];
		if (!obj || !obj.offsetParent) {
			continue;
		}

		var ox = cmGetX(obj);
		var oy = cmGetY(obj);
		var ow = obj.offsetWidth;
		var oh = obj.offsetHeight;

		if (ox>(x+w) || (ox+ow)<x) {
			continue;
		}
		if (oy>(y+h) || (oy+oh)<y) {
			continue;
		}
		subMenu.cmOverlap[subMenu.cmOverlap.length] = obj;
		obj.style.visibility = "hidden";
	}
}

function cmShowControl(subMenu) {
	if (subMenu.cmOverlap) {
		var i;
		for (i=0; i<subMenu.cmOverlap.length; ++i)
			subMenu.cmOverlap[i].style.visibility = "";
	}
	subMenu.cmOverlap = null;
}

function cmGetThisMenu(obj, prefix) {
	var str1 = prefix+'SubMenu';
	var str2 = prefix+'Menu';
	while (obj) {
		if (obj.className == str1 || obj.className == str2)
			return obj;
		obj = obj.parentNode;
	}
	return null;
}

function cmIsDefaultItem(item) {
	if (item == _cmSplit || item[0] == _cmNoAction)
		return false;
	return true;
}

function cmGetObject(id) {
	if (document.all) {
		return document.all[id];
	}
	return document.getElementById(id);
}

function cmGetX(obj) {
	var x = 0;

	do {
		x += obj.offsetLeft;
		obj = obj.offsetParent;
	} while (obj);
	return x;
}

function cmGetXAt(obj, elm) {
	var x = 0;

	while (obj && obj != elm) {
		x += obj.offsetLeft;
		obj = obj.offsetParent;
	}
	return x;
}

function cmGetY(obj) {
	var y = 0;
	do {
		y += obj.offsetTop;
		obj = obj.offsetParent;
	}
	while (obj);
	return y;
}

function cmGetYAt(obj, elm) {
	var y = 0;

	while (obj && obj != elm) {
		y += obj.offsetTop;
		obj = obj.offsetParent;
	}
	return y;
}

function cmGetProperties(obj) {
	if (obj == undefined)
		return 'undefined';
	if (obj == null)
		return 'null';

	var msg = obj+':\n';
	var i;
	for (i in obj)
		msg += i+' = '+obj[i]+'; ';
	return msg;
}
