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=15;
  Menu.Width=150;
  Menu.TopPad=10;
  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 = "";
  Menu.InActiveColor = "";
  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:99; background-color: #FFFFFF;\" onmouseover=\""+Item.varName+".OnMouseOver();\" onmouseout=\""+Item.varName+".OnMouseOut();\" class=\""+Item.Class+"\">";
  ResultStr += "<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\" width=\""+Item.Width+"\" class=menujs>";
  ResultStr += "<tr><td><img src=\"img/1x1.gif\" width=1 height=5></td></tr>";
  for (i=0;i<Item.Items.length;i++){
    ResultStr+="<tr height=15><td ";
    ResultStr+="onmouseout=\""+Item.Items[i].varName+".ItemDeSelected(this);\" onmouseover=\""+Item.Items[i].varName+".ItemSelected(this);\"";
   ResultStr+="><a href=\""+Item.Items[i].Link+"\" class=\"mjs\">"+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 += "<tr><td><img src=\"img/1x1.gif\" width=1 height=5></td></tr>";
  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) + this.TopPad;;
     eval(this.divName).style.left=getRelLeft(Link);
   }
  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);};
}
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;
}
