var opened = new Array(); //массив id субменю, которые были открыты
var curs_on_menu = false; //флаг, устанавливающий положение курсора (над меню или нет)

// Определяем браузер пользователя
isNS4 = (document.layers) ? true : false;
isIE4 = (document.all && !document.getElementById) ? true : false;
isIE5 = (document.all && document.getElementById) ? true : false;
isNS6 = (!document.all && document.getElementById) ? true : false;

// Функция, отображающая и скрывающая слои

// Вход:
// objElement - идентификатор(id) слоя;
// bolVisible - булева переменная:
// true  - отобразить слой;
// false - скрыть слой.

// Выход:
// 1


// P.S: В зависимости от типа браузера
// сценарий для манипуляции с видимостью слоёв
// несколько различается.

function switchDiv(objElement,bolVisible){
if(isNS4||isIE4){
     if(!bolVisible) {
       objElement.visibility ="hidden"
     } else {
       objElement.visibility ="visible"
     }
 } else if (isIE5 || isNS6) {
      if(!bolVisible){
         objElement.style.display = "none";

      } else {
        objElement.style.display = "";

        }

      }

return 1;
}



// Функция, возвращающая значение указанного ей
// свойства объекта (не обязательно слоя).

// Вход:
// el    - идентификатор элемента;
// sProp - свойство (left,top...)

// Выход:
// Значение какого-нибудь свойства объекта.



function getPos(el,sProp) {
	var iPos = 0;
	while (el!=null) {
		iPos+=el["offset" + sProp]
		el = el.offsetParent
	}
	return iPos

}



// Функция выдаёт объект с указанным
// ей названием.

// Вход:
// myid - название объекта

// Выход: объект.

function getelementbyid(myid) {
   if (isNS4){
        objElement = document.layers[myid];
     }else if (isIE4) {
        objElement = document.all[myid];
     }else if (isIE5 || isNS6) {
             objElement = document.getElementById(myid);
     }
return(objElement);
}

//скрывает все дочерние меню, указанного родительского меню
function hide_all_submenu(parent_menu){
	for(var n=0; n < opened.length; n++){
		m = getelementbyid(opened[n]);
		//если найден дочерний объект, то скрываем его
		if(m!=null){
		if(m.opener==parent_menu){
	 		switchDiv(m,false);
	 		//также рекурсивно скрываем и его детей
            hide_all_submenu(m.id);
	 	}}
	}
}

//поиск эллемента в массиве
function ar_search(arr,s){
	i=0;
	while(i <= arr.length){
		if(arr[i]==s){
			return i;
            alert(arr[i]);
		}
		i++;
	}
	return false;
}

// Показывает подменю
// el - яйчейка таблицы на которой
// находится указатель;
// m  - наименование слоя, который надо
// отобразить под этой яйчейкой.

function show(parent_menu,el,m,toleft) {


	//если в списке открытых слоев данного слоя нет, то добавляем
	if(ar_search(opened,m)===false)
		opened[opened.length] = m;

	//получаем объект субменю
	m = getelementbyid(m);
		if(m!=null){
			//добавляем в свойства субменю поле с идентификатором родительского меню
			m['opener']=parent_menu;
			//скрываем все субменю родительского меню
            hide_all_submenu(parent_menu);
		     //Смещаем и показываем субменю в зависимости от типа открытия (сверху вниз / с права на лево);
			if(toleft==false){
				m.style.left =getPos(el,"Left")+"px";
				m.style.top =getPos(el,"Top")+el.offsetHeight+"px";
		      	switchDiv(m,true);
			}else{
				m.style.left =getPos(el,"Left")+el.offsetWidth+"px";
				m.style.top =getPos(el,"Top")+"px";
		      	switchDiv(m,true);
			}
		}else{           alert(m);		}
}

//при наведении курсора на пункт меню
function menu_over(){
	curs_on_menu = true;
}

//проверяем где находится указатель и скрваем меню
function check_cur_position(){
	if(curs_on_menu==false){
		hide_all_submenu('topmenu');
	}
}

//при снятия курсора с меню
function menu_out(){
	curs_on_menu = false;
	setTimeout("check_cur_position('')",500);
}