//GunsMenu 1.0

var _gmIDCount = 0;
var _gmIDName  = 'gmSubMenuID';		//Для работы с суб меню
var _gmTimeOut = 0;

var _gmMenuElements  = new Array ();
var _gmActiveElement = null;


//======================================================================================================================
//Подменю
function gmDrawSubMenu(id,menu,menu_level,parent_index)
{
	var if_child     = false;
	var id_child     = null;
	var cls_item     = '';
	var act_item     = '';
	var clc_item   = '';
	var menu_item    = null;
	var img_item     = null;
	var item_index   = 0;
	var sub_html     ='';
	var submenu_html = '<div class="mas_SubMenu" id="' + id + '" style="z-index: 1000; position: absolute; top: 0px; left: 0px;">';
	submenu_html    +=    '<table summary="sub menu" id="Table_' + id + '"  class="mas_SubMenuTable" cellpadding="0" cellspacing="0">';
	for (item_index = 5; item_index < menu.length; ++item_index)
	 {
	   menu_item  = menu[item_index];
	   if_child   = (menu_item.length > 5);
	   id_child   = if_child ? gmNewID() : null;
	   cls_item   = if_child ? 'mas_noActiveSubMenuFolder':'mas_noActiveSubMenuItem';
	   clc_item   = if_child ? '' :  'onclick="gm_OnMouseClick(\''+menu_item[2]+'\',\''+menu_item[3]+'\')"';
	   img_item   = if_child ? 'IMG/arrow.gif':'IMG/blank.gif';
	   
	   act_item   = ' onmouseover="gm_OnItemMouseOver(\''+ id + '\',null,'+ (item_index -5)  + ',\''+id_child+'\','+menu_level+','+parent_index+',\''+menu_item[4]+'\')"' +
		            ' onmouseout="gm_OnItemMouseOut()"' + clc_item;
					
	   submenu_html += '<tr class="mas_noActiveSubMenuRow"'+act_item+'>';
	   submenu_html += '<td width="25"  height="25" align="left" valign="top" nowrap="nowrap" class="mas_noActiveSubMenuLeft">'+
	                   '<img src="IMG/spacer.gif" name="Im_'+id+(item_index -5)+'" width="25" height="25" id="Im_'+id+(item_index -5)+'" /></td>';		 
	   submenu_html += '<td class ="'+cls_item+'" height="20" align="left" valign="middle" nowrap="nowrap"  style = "padding: 4px"   >' + menu_item[1] + '</td>';	
	   submenu_html += '<td width="25"  height="25" align="left" valign="middle" nowrap="nowrap"  >'+
	                   '<img src="'+img_item+'" name="Im_s'+id+(item_index -5)+'" width="20" height="20" id="Im_s'+id+(item_index -5)+'" /></td>';
	   submenu_html += '</tr>';	
	   if (if_child) 
		sub_html += gmDrawSubMenu(id_child,menu_item,menu_level + 1,(item_index -5));
	 }
	submenu_html    +=    '</table>';
	submenu_html    += '</div>';
	submenu_html    += sub_html;
	return submenu_html ;
}

// Основное меню
// id   - идентефикатор контейнера
// menu - массив элементов меню
function gmDrawMenu(id,menu,menu_width)
{
	 var if_child   = false;
	 var id_child   = null;
	 var cls_item   = '';
	 var act_item   = '';
	 var clc_item   = '';
	 var menu_item  = null;
	 var item_index = 0;
	 var img_index  = 0;
	 var menu_obj   = gmGetObject(id);
	 var subm_html  ='';
	 var menu_html  = '<table summary="main menu" width="'+menu_width+'" border="0" cellpadding="0" cellspacing="0" id="Table_MnuData">';
     for (item_index = 0; item_index < menu.length; ++item_index)
	 {
		 menu_item  = menu[item_index];
		 if_child   = (menu_item.length > 5);
		 id_child   = if_child ? gmNewID() : null;
		 img_index  = (img_index == 9) ? 2 : (img_index + 1);
		 cls_item   = if_child ? 'mas_noActiveMenuFolder':'mas_noActiveMenuItem';
		 clc_item   = if_child ? '' :  'onclick="gm_OnMouseClick(\''+menu_item[2]+'\',\''+menu_item[3]+'\')"';	
		 act_item   = ' onmouseover="gm_OnItemMouseOver(\'Table_MnuData\',\'IMG/zgold_0'+img_index+'.jpg\','+ item_index + ',\''+id_child+'\',0,0,\''+menu_item[4]+'\')"' +
		              ' onmouseout="gm_OnItemMouseOut()"' + clc_item;	  
		 menu_html += '<tr>';
		 menu_html += '<td width="12"  height="34">&nbsp;</td>';
		 menu_html += '<td width="38"  height="34" align="left" valign="top" nowrap="nowrap"><img src="IMG/zblack_0'+
		                img_index+'.jpg" alt="'+menu_item[1]+'" name="Im_Mnu_'+img_index+'" width="34" height="34" id="Im_Mnu_'+img_index+'" /></td>';		 
		 menu_html += '<td height="34" align="left" valign="bottom" nowrap="nowrap" class="'+cls_item+ '"' + act_item +'>' + menu_item[1] + '</td>';			   
		 menu_html += '</tr>';
		 if (if_child) 
		  subm_html += gmDrawSubMenu(id_child,menu_item,1,item_index);
	 }

	   menu_html          += '</table>' + subm_html;
	   menu_obj.innerHTML = menu_html;
	 
}
//===========================================================================================================================
//Показать подменю
function gm_ShowSubMenu(obj_menu)
{
	var sub_menu = obj_menu.child;
	sub_menu.style.left = obj_menu.xpos + 'px';
	sub_menu.style.top  = obj_menu.ypos + 'px';
	sub_menu.style.visibility = 'visible';
}
//Убрать подменю из активного родителя
function gm_HideSubMenu(obj_menu)
{
	var sub_menu = obj_menu.child;
	sub_menu.style.visibility = 'hidden';
}
//Получить ссылку на родителя меню
function gm_GetParentMenu(sub_menu)
{
  var i = 0;
  var parent_mnu = null;
  if(_gmMenuElements.length > 0)
  {
   while ((i < _gmMenuElements.length) && (_gmMenuElements[i].idchild != sub_menu.idmnu)) 
	i++;
  }
 
  if (i < _gmMenuElements.length) parent_mnu = _gmMenuElements[i];
  
  return parent_mnu;
}
//Убрать подменю из поменю и погасить родителя
function gm_HideSubAllMenu(obj_menu)
{
	var parent_mnu = gm_GetParentMenu(obj_menu);	
	gm_HideSubMenu(parent_mnu);
	while (parent_mnu.level > 0) 
	{
	 parent_mnu = gm_GetParentMenu(parent_mnu);	
	 gm_HideSubMenu(parent_mnu);
	}
	if (parent_mnu.level == 0)
	{
     parent_mnu.img.src  = parent_mnu.osrc;
     parent_mnu.dat.className  = 'mas_noActive' + parent_mnu.type;
	 parent_mnu.status = 0;
	}
}
//Создание элемента меню из текста
function gm_CreateMenuElement(mnu_element)
{
	
    obj_mnu = gmGetObject(mnu_element.idmnu);
	while (obj_mnu.tagName.toLowerCase ()!='tr')
	{obj_mnu = obj_mnu.firstChild;}
	for(i = 0; i != mnu_element.index; i++)
	{obj_mnu = obj_mnu.nextSibling;}
	if (obj_mnu)
	{
	 var row_mnu = obj_mnu;	
	  /*Нашли строку для суб меню */
	 if (mnu_element.level > 0 )
	  {
		  mnu_element.row  = obj_mnu;
		  mnu_element.trow = 'SubMenuRow';
	  }
	  
      /*Первая ячейка это отступ - только в главном меню*/ 
	  if (mnu_element.level == 0) obj_mnu = obj_mnu.firstChild;
	  /*Вторая ячейка - картинка*/
	  if (mnu_element.level == 0) obj_mnu = obj_mnu.nextSibling
	  else obj_mnu = obj_mnu.firstChild;
	  
	  /*Левая ячейка для субменю*/
	   if (mnu_element.level > 0 )
	  {
		  mnu_element.ldat  = obj_mnu;
		  mnu_element.tldat = 'SubMenuLeft';
	  }
	  
	  if (obj_mnu.firstChild.tagName.toLowerCase () == 'img')
	  {mnu_element.img = obj_mnu.firstChild}
	  /*Третья ячейка - раздел меню*/
	  obj_mnu = obj_mnu.nextSibling;
	  if (obj_mnu.tagName.toLowerCase () == 'td')
	  {
	   mnu_element.dat  = obj_mnu;
	   if (mnu_element.dat.className == 'mas_noActiveMenuItem')   mnu_element.type = 'MenuItem';
	   if (mnu_element.dat.className == 'mas_noActiveMenuFolder') 
	   {
		  /*Позиция субменю*/
		  var submpos = gmGetSubMenuPos(row_mnu);
	      mnu_element.xpos = submpos[0];
	      mnu_element.ypos = submpos[1] + 10; // Здесь поправка на верхний сдвиг рисунка
		  mnu_element.type = 'MenuFolder';
	   }
	   if (mnu_element.dat.className == 'mas_noActiveSubMenuItem')   mnu_element.type = 'SubMenuItem';
	   if (mnu_element.dat.className == 'mas_noActiveSubMenuFolder') 
	   {
		  /*Позиция субменю*/
		  var submpos = gmGetSubMenuPos(row_mnu);
	      mnu_element.xpos = submpos[0] + 2; 
	      mnu_element.ypos = submpos[1] - 3; 
		  mnu_element.type = 'SubMenuFolder';
	   }
	  }
	}
}
//----------------------------------------------------------------------------------------------------
//Поиск объекта меню в массиве
function gm_GetMenuElement(id_mnu,index,id_child,menu_level,parent_index,item_descript)
{
  var i = 0;
  if(_gmMenuElements.length > 0)
  {
   while ((i < _gmMenuElements.length) && 
		  !((_gmMenuElements[i].idmnu == id_mnu)&& (_gmMenuElements[i].index == index))){i++;}

  }
 if(i >= _gmMenuElements.length)
  {
	var mnu_element      = new Object ();
	mnu_element.idmnu    = id_mnu;
	mnu_element.index    = index;
	mnu_element.pindex   = parent_index; 
	mnu_element.img      = null;
	mnu_element.osrc     = '';
	mnu_element.dat      = null;
	mnu_element.row      = null;
	mnu_element.ldat     = null;
    mnu_element.tldat    = '';
	mnu_element.trow     = '';
	mnu_element.type     = '';
	mnu_element.xpos     = 0;
	mnu_element.ypos     = 0;
	mnu_element.child    = gmGetObject(id_child);
	mnu_element.idchild  = id_child;
	mnu_element.level    = menu_level;
	mnu_element.descript = item_descript;
	mnu_element.status   = 0;
	gm_CreateMenuElement(mnu_element);
	i = _gmMenuElements.length;
	_gmMenuElements[i] = mnu_element;
  }
  return _gmMenuElements[i];
}

//При наведении курсора мыши
function gm_OnItemMouseOver(id_mnu,new_src,item_index,id_child,menu_level,parent_index,item_descript)
{    
	if (_gmActiveElement)
	{
	  clearTimeout(_gmTimeOut);
	   if (_gmActiveElement.level == menu_level)  gm_HideActiveMenu();
	   if (_gmActiveElement.level >  menu_level)
	   { 
	    if (_gmActiveElement.pindex == item_index) gm_HideActiveMenu()
		else gm_HideMenuOnTime();
	   }
	  _gmActiveElement = null;
	}
	_gmActiveElement                 = gm_GetMenuElement(id_mnu,item_index,id_child,menu_level,parent_index,item_descript);
	window.defaultStatus             = _gmActiveElement.descript;
	window.status                    = _gmActiveElement.descript;
	_gmActiveElement.dat.className   = 'mas_Active' + _gmActiveElement.type;
	if (_gmActiveElement.row)
	{
		_gmActiveElement.row.className  = 'mas_Active' + _gmActiveElement.trow;
		_gmActiveElement.ldat.className = 'mas_Active' + _gmActiveElement.tldat;
	}
	if (new_src && (_gmActiveElement.status == 0))
	{	
	 _gmActiveElement.osrc        = _gmActiveElement.img.src; 
     _gmActiveElement.img.src     =  new_src;
	 _gmActiveElement.status      = 1;
	}	 
   if (_gmActiveElement.child) gm_ShowSubMenu(_gmActiveElement);
}
//При уходе курса мыши
function gm_OnItemMouseOut()
{
	_gmTimeOut = window.setTimeout ('gm_HideMenuOnTime()', 300);
	 window.defaultStatus = '';
}
//При щелчке
function gm_OnMouseClick(to_link,to_target)
{
	window.open(to_link,to_target);
}

//Скрытие активного меню
function gm_HideActiveMenu()
{    
  if (_gmActiveElement.osrc)  _gmActiveElement.img.src  = _gmActiveElement.osrc;
   _gmActiveElement.status = 0;
   _gmActiveElement.dat.className  = 'mas_noActive' + _gmActiveElement.type;
   if (_gmActiveElement.row) 
   {
	   _gmActiveElement.row.className  = 'mas_noActive' + _gmActiveElement.trow;
	   _gmActiveElement.ldat.className = 'mas_noActive'   + _gmActiveElement.tldat;
   }
   if (_gmActiveElement.child) gm_HideSubMenu(_gmActiveElement);         //Скрыть дочку
}

//Скрытие меню по времени
function gm_HideMenuOnTime()
{
   clearTimeout(_gmTimeOut);
   gm_HideActiveMenu();
   if (_gmActiveElement.level > 0) gm_HideSubAllMenu(_gmActiveElement);  //Скрыть все суб меню
  _gmActiveElement = null;
}



//Функции общего назначения
//Координаты правого верхнего угла элемента
function gmGetSubMenuPos(obj)
{	
 if(document.getBoxObjectFor){
  var box_obj = document.getBoxObjectFor(obj);  
  return [box_obj.x + box_obj.width,box_obj.y];
 } 

 var doc_body = document.body;
 var doc_elem = document.documentElement;
 var scr_top  = window.pageYOffset  || doc_elem.scrollTop  || doc_body.scrollTop;
 var scr_left = window.pageXOffset  || doc_elem.scrollLeft || doc_body.scrollLeft;
 var cln_top  = doc_elem.clientTop  || doc_body.clientTop  || 0;
 var cln_left = doc_elem.clientLeft || doc_body.clientLeft || 0;
 
  if (obj.getBoundingClientRect){
   var box_obj = obj.getBoundingClientRect();	 
   return [box_obj.right + scr_left - cln_left,box_obj.top + scr_top -cln_top];
  }
  
  var x  = 0;
  var y  = 0;
  var w  = obj.offsetWidth;
  var h  = obj.offsetHeight; 
  
  for (box_obj = obj; box_obj != null; box_obj = box_obj.offsetParent){
	  x += box_obj.offsetLeft;
	  y += box_obj.offsetTop;
  }
  
  return [x  + w , y ];
}
//Объект по идентефикатору
function gmGetObject (id)
{
	if (document.all)
		return document.all[id];
	return document.getElementById (id);
}
//Уникальный идентефикатор для подменю
function gmNewID ()
{
	return _gmIDName + (++_gmIDCount);
}

