//kas
//menu border size:
var BorderSize  = '1';
//menu border color:
var BorderColor = '#757070';
//Menu Table Cell Padding:
var MenuCellPadding = '3';
var OverlapX = -5;
var OverlapY = 0;
var delay = 500; 
var menuElement  = new Array ();
var TO, TO1, ID;

// menu elements constructor
function MenuConstructor (ID, content)
{
  this.ID           = ID;
  this.ParentID     = content[1];
  this.ParentItemID = content[2];
  this.ActiveItem   = -1;
  //this.ActiveObj    = null;
  this.Timer        = -1;
  this.TopTimer     = -1;
  this.IsOn         = 0;
  this.Items        = content[0];
  //locate kids for items:
  for(var i=0; i < this.Items.length; i++)
  {
    var child = FindChild(ID, i);
    this.Items[i].Child = child;
    this.Items[i].Obj = null;
  } 
  //locate some stuff for TOP menus: 
  if (this.ParentID == -1)
  {
    this.SearchValue = content[3];
    this.OnSelected  = content[4];
    this.OnDeselected  = content[5];
  }
}


function FindChild(ID, ItemID)
{
 for(var i=0; i < menuContent.length; i++)
   if ((menuContent[i][1] == ID) && (menuContent[i][2] == ItemID))
     return i;         
 return -1;
}


function EnterMenu (ID)
{
var parent = menuElement[ID].ParentID;
//save current window
// 1)
Log('EnterMenu clearTimeout: ' + ID + " " + menuElement[ID].Timer);
window.clearTimeout(menuElement[ID].Timer);
// 2)
var parentItem = menuElement[ID].ParentItemID;
if ((parent != -1) && (parentItem != -1))
{
  Log('EnterMenu '+ parent + ' ' + parentItem + ' clearTimeout: ' + menuElement[ID].ID + " " + menuElement[parent].Items[parentItem].Timer);
  window.clearTimeout(menuElement[parent].Items[parentItem].Timer);
}
//parents: save windows & highlight items:
var topMenu = ID;
while (parent != -1) 
{
  //save
  Log('EnterMenu parent '+ parent + ' clearTimeout: ' + menuElement[parent].ID + " " + menuElement[parent].Timer);
  window.clearTimeout(menuElement[parent].Timer);
  //highlight
  var Cells = menuElement[parent].Items;
  for(var i=0; i<Cells.length; i++)
    if (Cells[i].Obj != null)
      if (i == menuElement[topMenu].ParentItemID)
        Cells[i].Obj.className = "ActiveMenuStyle";
      else
        Cells[i].Obj.className = "MenuStyle";
  //menuElement[parent].ActiveObj.className = "ActiveMenuStyle";
  topMenu = parent;
  parent = menuElement[parent].ParentID;
}
window.clearTimeout(menuElement[topMenu].TopTimer);
eval(menuElement[topMenu].OnSelected); //top level menu
}


function ExitMenu (ID)
{
  menuElement[ID].Timer = window.setTimeout ('{Hide (' + ID + ');Log(\'ExitMenu:\'+' + ID +');}', delay);/*убрать все вышестоящие*/
  Log('ExitMenu Timerset: ' + ID + " " + menuElement[ID].Timer);
  //schedule parents for closing:
  var topMenu = ID;
  var parent = menuElement[ID].ParentID;
  while (parent != -1) 
  {
    menuElement[parent].Timer = window.setTimeout ('{Hide (' + parent + ');Log(\'ExitMenu parent:\'+' + ID +');}', delay);/*убрать все вышестоящие*/
    Log('ExitMenu Timerset parent: ' + parent + " " + menuElement[parent].Timer);
    topMenu = parent;
    parent = menuElement[parent].ParentID;
  }
  menuElement[topMenu].TopTimer = window.setTimeout (menuElement[topMenu].OnDeselected, delay);
  Log('ExitMenu Timerset Top: ' + topMenu + " " + menuElement[topMenu].TopTimer);
}


function EnterItem (obj, ID, ItemID)
{
//highlighting
menuElement[ID].Items[ItemID].Obj = obj;
var Cells = menuElement[ID].Items;
for(var i=0; i<Cells.length; i++)
  if (Cells[i].Obj != null)
    if (i == ItemID)
      Cells[i].Obj.className = "ActiveMenuStyle";
    else
      Cells[i].Obj.className = "MenuStyle";

obj.className = "ActiveMenuStyle";
var child = menuElement[ID].Items[ItemID].Child;
if(menuElement[ID].ActiveItem == ItemID) 
{
  Log('EnterItem clearTimeout: ' + ID + " " + ItemID + " " + menuElement[ID].Items[ItemID].Timer);
  window.clearTimeout(menuElement[ID].Items[ItemID].Timer);
  if (child == -1) return;
  if (menuElement[child].IsOn) return;
}
//mark:
menuElement[ID].ActiveItem = ItemID;
//menuElement[ID].ActiveObj = obj;
//show child:
if (child == -1) return;
var oCoord = new ElemCoord('Item'+ID+ItemID);
Move(child, oCoord.x+oCoord.ParentWidth,oCoord.y);
TO = window.setTimeout('Show(' + child + ');Log(\'EnterItem:\'+' + ID + '+\',\'+' + ItemID + ');',delay);
Log('EnterItem Timerset SHOW: ' + ID + " " + ItemID + " " + TO);
};


function ExitItem (obj, ID, ItemID)
{
obj.className = "MenuStyle";
//hide child:
menuElement[ID].Items[ItemID].Timer = window.setTimeout('Hide (' + menuElement[ID].Items[ItemID].Child + ');Log(\'ExitItem:\'+' + ID + '+\',\'+' + ItemID + ');', delay);
Log('ExitItem Timerset: ' + ID + " " + ItemID + " " + menuElement[ID].Items[ItemID].Timer);
};


function Show (ID)
{
    if (ID == -1) return;
    if (isDOM) 
        document.getElementById('Menu' + ID).style.visibility = "visible";
        else if (isIE) 
        document.all['Menu' + ID].style.visibility = "visible";
        else if (isNC) 
        document.layers['Menu'+ ID].visibility = "show";        
    menuElement[ID].IsOn = 1; 
}


function Hide (ID)
{
    if (ID == -1) return;
    if (isDOM) 
        document.getElementById('Menu' + ID).style.visibility = "hidden";
        else if (isIE) 
        document.all['Menu' + ID].style.visibility = "hidden";
        else if (isNC) 
        document.layers['Menu'+ ID].visibility = "hide";
    menuElement[ID].IsOn = 0; 
    //deselect all:
    var Cells = menuElement[ID].Items;
    for(var i=0; i<Cells.length; i++)
      if (Cells[i].Obj != null)
        Cells[i].Obj.className = "MenuStyle";
    Log("Hid " + ID);
}


function Move (ID, toX, toY)
{
if (ID == -1) return;
var Elem;
if (!isNC) 
{
    if (isDOM) 
        Elem = document.getElementById('Menu' + ID);
    else if (isIE) 
        Elem = document.all['Menu' + ID];
    Elem.style.left = toX + OverlapX;
    Elem.style.top  = toY + OverlapY; 
    Elem.style.zIndex=ID;
}
else  
{
    document.layers['Menu'+ ID].pageX = toX;        
    document.layers['Menu'+ ID].pageY = toY;        
}
}


function EnterTopMenu (SearchVal)
{
  ID = aSearch(SearchVal)
  if (ID == -1) 
  {
    imageOn('b' + SearchVal);
    return;
  }
  window.clearTimeout(menuElement[ID].TopTimer);
  Log('EnterTopMenu clearTimeout: ' + ID + " " + menuElement[ID].Timer);
  window.clearTimeout(menuElement[ID].Timer);
  TO = window.setTimeout('eval(menuElement[' + ID + '].OnSelected);Show (' + ID + ')', delay);
  Log('EnterTopMenu Timerset: SHOW ' + ID + " " + TO);
}


function ExitTopMenu (SearchVal)
{
  ID = aSearch(SearchVal)
  if (ID == -1)
  {
    imageOff('b' + SearchVal);
    return;
  }
  menuElement[ID].Timer = window.setTimeout('eval(menuElement[' +ID + '].OnDeselected);Hide (' + ID + ');Log(\'ExitTopMenu:\'+' + ID +');', delay);
  Log('ExitTopMenu Timerset: ' + ID + " " + menuElement[ID].Timer);
}


function ElemCoord(ElemName) 
{
var Elem;
if (!isNC) 
{
  if (isDOM)
    Elem = document.getElementById(ElemName);
  else if (isIE)
    Elem = document.all[ElemName];
  this.x            = Elem.offsetLeft;
  this.y            = Elem.offsetTop;
  this.Width        = Elem.offsetWidth;
  this.Height       = Elem.offsetHeight;
  this.ParentWidth  = Elem.offsetParent.offsetWidth;
  this.ParentHeight = Elem.offsetParent.offsetHeight;
  while (Elem.offsetParent != null) 
  {
    Elem = Elem.offsetParent;
    this.x += Elem.offsetLeft;
    this.y += Elem.offsetTop;
    if (Elem.tagName == 'BODY') break;
  }
} 
else 
{  
  this.x = document.layers[ElemName].pageX;
  this.y = document.layers[ElemName].pageY;
} 
return this;
}


function GetMenu(SearchVal, ID)
{ 
  if (SearchVal != -1)
    ID = aSearch(SearchVal);
  if (ID == -1) return;
  var Items = menuElement[ID].Items;

  var layerHeader,layerBody,layerFooter;
  if (!isNC)
      layerHeader = '<span id=Menu' + ID +
                    ' onMouseOver="EnterMenu('+ ID + ');" onMouseOut = "ExitMenu('+ ID + ');"' + 
                    ' style="visibility:hidden; position:absolute;">';
  else
      layerHeader = '<layer id=Menu'+ ID +
                    ' onMouseOver="EnterMenu('+ ID + ');" onMouseOut = "ExitMenu('+ ID + ');"' + 
                    ' visibility=show>';
                 //two tables - trick for menu border in Netscpape
  layerHeader += ('<table cellpadding="0" cellspacing="0" border="0" bgcolor="' + BorderColor + '"><tr><td>' +
                  '<table cellpadding='+ MenuCellPadding + 
                        ' cellspacing=' + BorderSize + 
                        ' border=0 width="100%">');
  layerBody = "";       
  for(var i=0; i<Items.length; i++)
    layerBody += '<tr><td onClick="location.href=\'' + Items[i][1] + 
                  '\'" onMouseOver="EnterItem(this,'+ ID + ',' + i + 
                  ')" onMouseOut = "ExitItem(this,'+ ID + ',' + i + 
                  ')" class="MenuStyle" unselectable="on"> <span id=Item'+ ID + i +'>' + 
                  Items[i][0] + '</span></td></tr>';

  layerFooter = '</table></td></tr></table>';
  if (!isNC)
      layerFooter += '</span>';
  else
      layerFooter += '</layer>';
  document.writeln(layerHeader + layerBody + layerFooter);

  //load all kids as well
  for (var i=0; i<menuElement[ID].Items.length; i++)
    if (menuElement[ID].Items[i].Child != -1)
      GetMenu(-1, menuElement[ID].Items[i].Child);
}

///
function aSearch(SearchVal)
{
 for(var i=0; i < menuElement.length; i++)
   if ((menuElement[i].ParentID == -1) && (menuElement[i].SearchValue == SearchVal))
     return i;
 return -1;
}


function createMenuTree()
{
    for (var i = 0; i < menuContent.length; i++)
    {
        menuElement[i] = new MenuConstructor(i, menuContent[i]);
    }
}

createMenuTree();


/* debug */
/*document.writeln('<DIV style="position=absolute;left=400;top=10;"><textarea id=report name=report rows=15 cols=60></textarea></DIV>') */
function Log(SomeText)
{
/*if (isDOM) 
    Elem = document.getElementById('report');
else if (isIE) 
    Elem = document.all['report'];
Elem.value += SomeText + "  ";
*/
}


