var A_MENUS = [];

function menu (a_items, a_tpl) 
{ 
  if (!document.body || !document.body.style) 
    return;   
    
  this.a_config = a_items;  
  this.a_tpl = a_tpl;  
  this.n_id = A_MENUS.length;  
  this.a_index = []; 
  this.a_children = [];  
  this.expand = menu_expand; 
  this.collapse = menu_collapse;  
  this.onclick = menu_onclick; 
  this.onmouseout = menu_onmouseout; 
  this.onmouseover = menu_onmouseover; 
  this.onmousedown = menu_onmousedown;  
  this.a_tpl_def = 
  { 
    'block_top' : 16, 
    'block_left' : 16, 
    'top' : 20, 
    'left' : 4, 
    'width' : 120, 
    'height' : 22, 
    'hide_delay' : 0, 
    'expd_delay' : 0, 
    'css' : { 'inner' : '', 'outer' : '' } 
  };  
  
  this.getprop = function (s_key) 
  { 
    return this.a_tpl_def[s_key]; 
  };  
  
  this.o_root = this; 
  this.n_depth = -1; 
  this.n_x = 0; 
  this.n_y = 0;  
  
  for (n_order = 0; n_order < a_items.length; n_order++) 
    new menu_item(this, n_order);  
    
  A_MENUS[this.n_id] = this;  
  
  for (var n_order = 0; n_order < this.a_children.length; n_order++) 
    this.a_children[n_order].e_oelement.style.visibility = 'visible'; 
}  

function menu_collapse (n_id) 
{ 
  clearTimeout(this.o_showtimer);  
  var n_tolevel = (n_id ? this.a_index[n_id].n_depth : 0);  
  
  for (n_id = 0; n_id < this.a_index.length; n_id++) 
  { 
    var o_curritem = this.a_index[n_id]; 
    
    if (o_curritem.n_depth > n_tolevel && o_curritem.b_visible) 
    { 
      o_curritem.e_oelement.style.visibility = 'hidden'; 
      o_curritem.b_visible = false; 
    } 
  }  
  
  if (!n_id) this.o_current = null; 
}  

function menu_expand (n_id) 
{  
  if (this.o_hidetimer) return;  
  
  var o_item = this.a_index[n_id];  
  
  if (this.o_current && this.o_current.n_depth >= o_item.n_depth) 
    this.collapse(o_item.n_id); 
    
  this.o_current = o_item;  
  
  if (!o_item.a_children) 
    return;  
  
  for (var n_order = 0; n_order < o_item.a_children.length; n_order++) 
  { 
    var o_curritem = o_item.a_children[n_order]; 
    o_curritem.e_oelement.style.visibility = 'visible'; 
    o_curritem.b_visible = true; 
  } 
}  

function menu_onclick (n_id) 
{ 
  var o_item = this.a_index[n_id]; 
  var s_link = o_item.a_config[1]; 
  
  if (!s_link) 
    return true; 
  
  if (String(s_link).toLowerCase().indexOf('javascript:') == 0) 
    return eval(s_link); 
    
  if (o_item.a_config[2] && o_item.a_config[2]['target']) 
    window.open(s_link, o_item.a_config[2]['target']);
  else window.location = s_link; 
    return true; 
}  

function menu_onmouseout (n_id) 
{  
  var o_item = this.a_index[n_id];  
  
  o_item.e_oelement.className = o_item.getstyle(0, 0); 
  o_item.e_ielement.className = o_item.getstyle(1, 0);  
  o_item.upstatus(7);  
  this.o_hidetimer = setTimeout('A_MENUS['+ this.n_id +'].collapse();', o_item.getprop('hide_delay')); 
}  

function menu_onmouseover (n_id) 
{  
  clearTimeout(this.o_hidetimer); 
  this.o_hidetimer = null; 
  clearTimeout(this.o_showtimer);  
  
  var o_item = this.a_index[n_id];  
  
  o_item.upstatus();  
  o_item.e_oelement.className = o_item.getstyle(0, 1); 
  o_item.e_ielement.className = o_item.getstyle(1, 1);  
  
  if (o_item.getprop('expd_delay') < 0) 
    return;  
  
  this.o_showtimer = setTimeout('A_MENUS['+ this.n_id +'].expand(' + n_id + ');', o_item.getprop('expd_delay'));  
}  

function menu_onmousedown (n_id) {  var o_item = this.a_index[n_id];  o_item.e_oelement.className = o_item.getstyle(0, 2); o_item.e_ielement.className = o_item.getstyle(1, 2);  this.expand(n_id); }  

function menu_item (o_parent, n_order) 
{  
  this.n_depth = o_parent.n_depth + 1; 
  this.a_config = o_parent.a_config[n_order + (this.n_depth ? 3 : 0)];  
  
  if (!this.a_config) 
    return;  
    
  this.o_root = o_parent.o_root; 
  this.o_parent = o_parent; 
  this.n_order = n_order;  
  this.n_id = this.o_root.a_index.length; 
  this.o_root.a_index[this.n_id] = this; 
  o_parent.a_children[n_order] = this;  
  var o_root = this.o_root, a_tpl = this.o_root.a_tpl;  
  this.getprop = mitem_getprop; 
  this.getstyle = mitem_getstyle; 
  this.upstatus = mitem_upstatus;  
  this.n_xOffset = (this.a_config[2] && this.a_config[2]['left']) ? this.a_config[2]['left'] : this.getprop('left');  
  this.n_x = n_order 
    ? o_parent.a_children[n_order - 1].n_x + (this.n_depth ? this.n_xOffset : o_parent.a_children[n_order - 1].n_width) 
    : o_parent.n_x + this.getprop('block_left');  
  this.n_y = (n_order ? o_parent.a_children[n_order - 1].n_y + this.getprop('top') : o_parent.n_y + this.getprop('block_top'));  
  this.n_contentWidth = this.a_config[2] && this.a_config[2]['contentWidth'] 
    ? this.a_config[2]['contentWidth'] 
    : this.getprop('width');  
  this.n_width = this.a_config[2] && this.a_config[2]['width'] ? this.a_config[2]['width'] : this.n_depth ? o_parent.n_contentWidth : this.getprop('width');  
  this.s_top = this.n_depth == 0 ? '' : 'top: ' + this.n_y + 'px;';  
  
  document.write 
  ( 
    '<div id="e', o_root.n_id, '_', this.n_id, 'o" class="', this.getstyle(0, 0), '"', 
    (this.a_config[2] && this.a_config[2]['tt'] ? ' title="' + this.a_config[2]['tt'] + '"' : ''), 
    ' style="position:absolute;', this.s_top, 'px;left:', this.n_x, 'px;width:', this.n_width, 'px;height:', 
    this.getprop('height'), 'px;visibility:hidden;', ' z-index: ', this.n_depth + 10, ';cursor:', 
    (this.a_config[1] ? 'pointer' : 'default'), '" ', 
    'onclick="return A_MENUS[', o_root.n_id, '].onclick(', this.n_id, ');" onmouseout="A_MENUS[', o_root.n_id, '].onmouseout(', this.n_id, ');" onmouseover="A_MENUS[', 
    o_root.n_id, '].onmouseover(', this.n_id, ');" onmousedown="A_MENUS[', o_root.n_id, '].onmousedown(', this.n_id, ');"><div id="e', 
    o_root.n_id, '_', this.n_id, 'i" class="' ,this.getstyle(1, 0), '">', this.a_config[0], "</div></div>" 
  );  
    
  this.e_ielement = document.getElementById('e' + o_root.n_id + '_' + this.n_id + 'i'); 
  this.e_oelement = document.getElementById('e' + o_root.n_id + '_' + this.n_id + 'o');  
  this.b_visible = !this.n_depth;  
  
  if (this.a_config.length < 4) 
    return;  
    
  this.a_children = [];  
  
  for (var n_order = 0; n_order < this.a_config.length - 3; n_order++) 
    new menu_item(this, n_order); 
}  

function mitem_getprop (s_key) 
{  
  var s_value = null, a_level = this.o_root.a_tpl[this.n_depth];  
  
  if (a_level) 
    s_value = a_level[s_key];  

  return (s_value == null ? this.o_parent.getprop(s_key) : s_value); 
}  

function mitem_getstyle (n_pos, n_state) 
{  
  var a_css = this.getprop('css'); 
  var a_oclass = a_css[n_pos ? 'inner' : 'outer'];  
  
  if (typeof(a_oclass) == 'string') 
    return a_oclass;  
    
  for (var n_currst = n_state; n_currst >= 0; n_currst--) 
    if (a_oclass[n_currst]) 
      return a_oclass[n_currst]; 
}  

function mitem_upstatus (b_clear) 
{ 
  window.setTimeout("window.status=unescape('" + (b_clear ? '' : (this.a_config[2] && this.a_config[2]['sb'] ? escape(this.a_config[2]['sb']) : escape(this.a_config[0]) + (this.a_config[1] ? ' ('+ escape(this.a_config[1]) + ')' : ''))) + "')", 10); 
} 
