/**************************************************************** 
  mEngine (c) k-Group Software 2002
       for www.radeon2.ru

  author [test] a.k.a. Kirill Losev
  last update: 6.02.2002
  version: 0.9b		
*****************************************************************/
/**************************************************************** 
   Обьекты меню
*****************************************************************/
var iGlobalMenuCounter=0;
function AddItem(Caption,Link){
  var iItem = this.Items.length;
  this.Items[iItem] = CreateItemObj(this,iItem,Caption,Link); 
  return iItem;
}
function CreateMenuObj(varName){
  Menu = new Object;
  Menu.varName = varName;
  Menu.Items = new Array ();
  Menu.Top=0;
  Menu.Left=0;
  Menu.Height=18;
  Menu.Width=100;
  Menu.Class="";
  Menu.divName = varName+"div";
  Menu.AutoAlign=true;
  Menu.MouseIn = false;
  Menu.ChildActive=false;
  Menu.Parent=null;
  Menu.AddItem = AddItem;
  Menu.Build = BuildMenu;
  Menu.ActiveColor = "FFFFFF";
  Menu.InActiveColor = "000000";
  Menu.OnMouseOver=OnMouseOver;
  Menu.OnMouseOut=OnMouseOut;
  Menu.Show=MenuShow;
  Menu.Hide=MenuHide;
  Menu.Cell=null;
  return Menu;
}
function CreateItemObj(Parent,Index,Caption,Link){
  Item = new Object;
  Item.Caption = Caption;
  Item.Link = Link;
  Item.Index=Index;
  Item.Parent=Parent;
  Item.varName = Parent.varName +".Items["+Index+"]";	
  Item.divName = "menu"+iGlobalMenuCounter;
  Item.AutoAlign=Parent.AutoAlign;
  Item.Height=Parent.Height;
  Item.Width=Parent.Width;
  Item.Class=Parent.Class;
  Item.ActiveColor=Parent.ActiveColor;
  Item.InActiveColor=Parent.InActiveColor;
  iGlobalMenuCounter ++;
  Item.Items = new Array ();
  Item.MouseIn = false;
  Item.ChildActive=false;
  Item.Selected=false;
  Item.AddItem = AddItem;
  Item.OnMouseOver=OnMouseOver;
  Item.OnMouseOut=OnMouseOut;
  Item.ItemSelected=ItemSelected;
  Item.ItemDeSelected=ItemDeSelected;
  Item.Cell=null;
  return Item;
}
function BuildMenu(){
  document.write(BuildItems(this));
}
function BuildItems(Item){
  var i;
  var ResultStr;
  ResultStr = "<div id="+Item.divName+" style=\"position:absolute; top:"+Item.Top+"; left:"+Item.Left+"; visibility:hidden; z-index:1;\" onmouseover=\""+Item.varName+".OnMouseOver();\" onmouseout=\""+Item.varName+".OnMouseOut();\" class=\""+Item.Class+"\">";
  ResultStr += "<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\" width=\""+Item.Width+"\">"; 
  for (i=0;i<Item.Items.length;i++){
    ResultStr+="<tr><td height=\""+Item.Height+"\"";
    ResultStr+="onmouseout=\""+Item.Items[i].varName+".ItemDeSelected(this);\" onmouseover=\""+Item.Items[i].varName+".ItemSelected(this);\"";
	ResultStr+="><a href=\""+Item.Items[i].Link+"\">"+Item.Items[i].Caption+"</a></td></tr>"; 
    /* ResultStr+="<div style=\"position:relative; left:0; visibility:visible; z-index:1; width:"+Item.Width+"; height:"+Item.Height+"\"><a href=\""+Item.Items[i].Link+"\">"+Item.Items[i].Caption+"</a></div>";  */
  };
  ResultStr+="</table>";
  ResultStr += "</div>";
  for (i=0;i<Item.Items.length;i++){
    if (Item.Items[i].Items.length>0) {
	  Item.Items[i].Top = Item.Top + Item.Height*i;
	  Item.Items[i].Left = Item.Left + Item.Width;
	  ResultStr+=BuildItems(Item.Items[i]);
	} 
  };
  return ResultStr;
}
function OnMouseOver(){
  var ParentItem = this.Parent;
  this.MouseIn = true;
  if (this.Cell!=null) this.Cell.style.backgroundColor=this.ActiveColor;
  while (ParentItem!=null){
     ParentItem.ChildActive=true;
     ParentItem.MouseIn=false;	
	 if (ParentItem.Cell!=null) { ParentItem.Cell.style.backgroundColor=this.ActiveColor;};
	 ParentItem = ParentItem.Parent;
  };
}
function OnMouseOut(){
  var ParentItem = this.Parent;
  this.MouseIn = false;
  if (this.Cell!=null) this.Cell.style.backgroundColor=this.InActiveColor;
  while (ParentItem!=null){
     if (!ParentItem.MouseIn) {
	    ParentItem.ChildActive=false;
		if (ParentItem.Cell!=null) { ParentItem.Cell.style.backgroundColor=this.InActiveColor;};
	 }; 
	 ParentItem = ParentItem.Parent;
  };
  CascadeHide(this); 
}
function ItemSelected(cell){
  this.Selected=true;
  if (this.Items.length>0){
    if (this.AutoAlign) {
      eval(this.divName).style.top=getRelTop(eval(this.Parent.divName)) + this.Height*this.Index;
      eval(this.divName).style.left=getRelLeft(eval(this.Parent.divName)) + this.Parent.Width;
     }
    showElem(eval(this.divName));
    }
  this.Cell=cell;
  cell.style.backgroundColor=this.ActiveColor;
}
function ItemDeSelected(cell){
  this.Selected=false;
  if (this.Items.length>0) {
    eval("setTimeout(\"if (!"+this.varName+".MouseIn && !"+this.varName+".Selected) { hideElem(eval("+this.divName+"))}\",100)");
  };
  this.Cell=cell;
  cell.style.backgroundColor=this.InActiveColor;
}
function MenuShow(Link){
  if (Link!=null) {
     eval(this.divName).style.top=getRelTop(Link) + Link.offsetHeight+1;
     eval(this.divName).style.left=getRelLeft(Link)-5;
   }
  showElem(eval(this.divName));
}
function MenuHide(){
  eval("setTimeout(\"if (!"+this.varName+".MouseIn) { hideElem(eval("+this.divName+"))}\",100)");
}
function CascadeHide(Item){
  eval("setTimeout(\"if (!"+Item.varName+".MouseIn && !"+Item.varName+".ChildActive){ hideElem(eval("+Item.divName+"))}\",100)");
  if (Item.Parent!=null){  CascadeHide(Item.Parent);};
}
/**************************************************************** 
   Вспомогательные функции (спасибо за примеры www.dhtml.ru)
*****************************************************************/
function showElem(elemId) {
  elemId.style.visibility = "visible";
}
function hideElem(elemId) {
   elemId.style.visibility = "hidden";
} 
function getRelLeft (elem) {
var pos = elem.offsetLeft;
while (elem.offsetParent != null) {
  elem = elem.offsetParent;
  pos += elem.offsetLeft;
  } return pos;
}
function getRelTop (elem) {
var pos = elem.offsetTop;
while (elem.offsetParent != null) {
  elem = elem.offsetParent;
  pos += elem.offsetTop; };
  return pos;
}