function openMenu(node){
	var subMenu = node.parentNode.getElementsByTagName("ul")[0];
	subMenu.style.display == "none" ? subMenu.style.display = "block" : subMenu.style.display = "none";
}

function allClose(){
	var list = document.getElementById("menu").getElementsByTagName("ul");
	for(var i=0;i<list.length;i++){
		list[i].style.display = "none";
	}
}





function highlightTableRows(tableId, hoverClass, clickClass, multiple)
{
	var table = document.getElementById(tableId);
	
	//???? ?? ??? ??????? ????????? ????????, ?? ?? ????????? ????????? ??? ??? true
	if (typeof multiple == 'undefined') multiple = true;
	
	if (hoverClass)
	{
		//?????????? ????????? ??? ?????? ????? ???????? ???????? class ????????, ????? ?????? ??????????????? ????????? ?? ????????? ???? ?? ??????.
		//?????? ???. ????????? ???????????? ? ? ??????????? onclick
		var hoverClassReg = new RegExp("\\b"+hoverClass+"\\b");
		
		table.onmouseover = table.onmouseout = function(e)
		{
			if (!e) e = window.event;
			var elem = e.target || e.srcElement;
			while (!elem.tagName || !elem.tagName.match(/td|th|table/i)) elem = elem.parentNode;

			//???? ??????? ??????? ? ????????? TD ??? TH ?? ??????? TBODY
			if (elem.parentNode.tagName == 'TR' && elem.parentNode.parentNode.tagName == 'TBODY')
			{
				var row = elem.parentNode;//??? ?????????? ?????? ??????? ? ??????? ????????? ???????
				//???? ??????? ??? ?? "?????????" ???, ?? ? ??????????? ?? ??????? ???? ????????? ?????, ???????? ?????, ???? ???????.
				if (!row.getAttribute('clickedRow')) row.className = e.type=="mouseover"?row.className+" "+hoverClass:row.className.replace(hoverClassReg," ");
			}
		};
	}

	
	if (clickClass) table.onclick = function(e)
	{
		if (!e) e = window.event;
		var elem = e.target || e.srcElement;
		while (!elem.tagName || !elem.tagName.match(/td|th|table/i)) elem = elem.parentNode;

		//???? ??????? ??????? ? ????????? TD ??? TH ?? ??????? TBODY
		if (elem.parentNode.tagName == 'TR' && elem.parentNode.parentNode.tagName == 'TBODY')
		{
			//?????????? ????????? ??? ?????? ????? ???????? ???????? class ????????, ????? ?????? ??????????????? ????????? ?? ????? ?? ??????.
			var clickClassReg = new RegExp("\\b"+clickClass+"\\b");
			var row = elem.parentNode;//??? ?????????? ?????? ??????? ? ??????? ????????? ???????
			
			//???? ??????? ??? ??? ??????? ?????? ??? "?????????"
			if (row.getAttribute('clickedRow'))
			{
				row.removeAttribute('clickedRow');//??????? ???? ???? ??? ??? "???????"
				row.className = row.className.replace(clickClassReg, "");//??????? ????? ??? ????????? ??????
				row.className += " "+hoverClass;//????????? ????? ??? ????????? ?????? ?? ??????? ????, ?.?. ?????? ???? ? ?????? ?????? ?? ??????, ? ????????? ?? ????? ??? ?????
			}
			else //??? ?? ?????????
			{
				//???? ?????? ????????? ?? ????????? ?? ??????, ?? ??????? ??
				if (hoverClass) row.className = row.className.replace(hoverClassReg, "");
				row.className += " "+clickClass;//????????? ????? ????????? ?? ?????
				row.setAttribute('clickedRow', true);//????????????? ???? ????, ??? ??? ??????? ? ?????????
				
				//???? ????????? ????????? ?????? ????????? ????????? ??????
				if (!multiple)
				{
					var lastRowI = table.getAttribute("lastClickedRowI");
					//???? ?? ??????? ?????? ???? ???????? ?????? ??????, ?? ??????? ? ??? ????????? ? ???? "???????????"
					if (lastRowI!==null && lastRowI!=='' && row.sectionRowIndex!=lastRowI)
					{
						var lastRow = table.tBodies[0].rows[lastRowI];
						lastRow.className = lastRow.className.replace(clickClassReg, "");//??????? ????????? ? ?????????? ????????? ??????
						lastRow.removeAttribute('clickedRow');//??????? ???? "???????????" ? ?????????? ????????? ??????
					}
				}
				//?????????? ?????? ?????????? ?????????? ????
				table.setAttribute("lastClickedRowI", row.sectionRowIndex);
			}
		}
	};
}
