/*****************************************************************************
                                                                             *
            Menu Handling Functions - WEBCMS Project                         *
            Copyright 2003-2004  unlimited softdesign                        *
                                                                             *
 *****************************************************************************/

/* variables */

var isMSIE = (navigator.appName == "Microsoft Internet Explorer");

var visibleMenus = new Array();
var visibleLevel = 0;

var activeItem = null;
var activeLevel = 0;

var timer1 = 0;
var timer2 = 0;

/* helper object */

function VisibleMenu(item, menu) {
  this.item = item;
  this.menu = menu;
  return this;
}

/* menu object */

function Menu(/*item1, ..., itemN*/) {
  this.items = arguments;
}

/* menu item object */

function Item(label, detail, url, menu) {
  this.caption = label;
  this.detail = detail;
  this.href = url ? url : null;
  this.menu = menu ? menu : null;
}

/* create float menus - if supported */

function createFloatMenu(menus) {
  if(!document.getElementById) return false;
  var autoId = 0;
  function createMenuSheet(id, menu, level) {
    var sheet = '<table border="0" cellpadding="0" cellspacing="0" class="MenuSheet" id="menu' + id + '" onmouseout="menuOut()" onmouseover="menuOver()"><tbody>\n';
    for(var i=0;i<menu.items.length;i++) {
      var item = menu.items[i];
      var subId = (item.menu ? "menu" + ++autoId : "");
      sheet += '<tr><td class="MenuItem" nowrap><a class="MenuItem" href="' + item.href + webcmsUrlQuery +'" onmouseover="itemOver(this, \'' + subId + '\', ' + level + ')">' + item.caption + '</a></td></tr>\n';
      if(item.detail)
        sheet += '<tr><td class="MenuText">' + item.detail + '</td></tr>';
      if(item.menu) createMenuSheet(autoId, item.menu, level+1);
    }
    document.write(sheet + '</tbody></table>\n\n');
  }
  for(var key in menus)
    createMenuSheet(key, menus[key], 1);
  return true;
}

/* onMouseOver event on items */

function itemOver(item, menu, level) {
  if(item!=activeItem) {
    activeItem = item;
    activeLevel = level;
    while(visibleLevel>activeLevel) {
      visibleLevel--;
      visibleMenus[visibleLevel].item.className = "MenuItem";
      visibleMenus[visibleLevel].menu.style.visibility = "hidden";
      if(isMSIE) visibleMenus[visibleLevel].menu.filters.alpha.opacity = 100;
    }
    if(menu) {
      menu = document.getElementById(menu);
      visibleMenus[visibleLevel++] = new VisibleMenu(item, menu);
      with(item.parentNode.parentNode.parentNode.parentNode) {
        item.className = "MenuItemHover";
        menu.style.left = offsetLeft + offsetWidth;
        menu.style.top = offsetTop + item.parentNode.offsetTop + (level>0 ? 0 : document.getElementById('Entity').offsetTop + 1);
      }
      menu.style.visibility = "visible";
    }
  }
}

/* onMouseOut event on menus */

function menuOut() {
  if(visibleLevel) {
    code = (isMSIE
      ? "timer2 = setInterval(\"menuHide()\", 100)"
      : "timer2 = setTimeout(\"menuHide()\", 1000)"
    );
    timer1 = setTimeout(code, 250);
  }
}

/* onMouseOver event on menus */

function menuOver() {
  if(timer1) {
    clearTimeout(timer1);
    timer1 = 0;
  }
  if(timer2) {
    if(isMSIE) {
      clearInterval(timer2);
      for(var i=0;i<visibleLevel;i++)
        visibleMenus[i].menu.filters.alpha.opacity = 100;
    } else clearTimeout(timer2);
    timer2 = 0;
  }
}

/* hides all menu sheets */

function menuHide() {
  var effectDone = !isMSIE;
  if(isMSIE)
    for(var i=0;i<visibleLevel;i++) {
      if(visibleMenus[i].menu.filters.alpha.opacity > 0)
        visibleMenus[i].menu.filters.alpha.opacity -= 10;
      else {
        clearInterval(timer2);
        effectDone = true;
      }
    }
  if(effectDone) {
    timer1 = 0;
    timer2 = 0;
    itemOver(null, "", 0);
  }
}