// Copyright (c) 2009 Atelier Beart
// http://www.atelier-beart.com/

AB_subMenus = new Array();
var AB_sm_primaryMenuHeight;
var AB_sm_showSubMenuInterval = 10; // milli second
var AB_sm_showSubMenuStep = 5; // px
var AB_sm_hideSubMenuLatency = 200; // milli second
var AB_SM_PREFIX_MENU = 'Menu_';
var AB_SM_PREFIX_MENU_CONTAINER = 'MenuContainer_';
var AB_SM_PREFIX_MENU_CONTENT = 'MenuContent_';
var AB_SM_PREFIX_SUB = 'Sub';

function AB_subMenu() {}
AB_subMenu.prototype.height = null;
AB_subMenu.prototype.isMouseOver = false;
AB_subMenu.prototype.execute = null;

function AB_prepareSubMenu() {
  liElements = document.getElementsByTagName('li');
  for (i = 0 ; i < liElements.length ; ++i) {
    liElement = liElements[i];
	if (subMenu = document.getElementById(AB_SM_PREFIX_SUB + liElement.id)) {
      AB_subMenus[liElement.id] = new AB_subMenu();
	  subMenu.style.height = 'auto';
	  AB_subMenus[liElement.id].height = subMenu.offsetHeight;
	  subMenu.style.height = 0;
	  AB_sm_primaryMenuHeight = liElement.offsetHeight;
	  addListener(document.getElementById(liElement.id.replace(AB_SM_PREFIX_MENU, AB_SM_PREFIX_MENU_CONTAINER)), 'mouseover', AB_showSubMenu, false);
	  addListener(liElement, 'mouseout', AB_hideSubMenu, false);
    }
  }
}

function AB_showSubMenu() {
  if (arguments[0].target != null) { // firefox
    targetId = arguments[0].target.id;
  } else { // IE;
    targetId = event.srcElement.id;
  }
  if (!targetId.match('^' + AB_SM_PREFIX_MENU_CONTENT)) {
    if (targetId.match('^' + AB_SM_PREFIX_MENU_CONTAINER)) {
	  id = targetId.replace(AB_SM_PREFIX_MENU_CONTAINER, AB_SM_PREFIX_MENU);
	} else {
      parentSubMenuId = document.getElementById(targetId).parentNode.parentNode.id;
	  id = parentSubMenuId.replace(AB_SM_PREFIX_SUB, '');
    }
    AB_subMenus[id].isMouseOver = true;
    return;
  }
  id = targetId.replace(AB_SM_PREFIX_MENU_CONTENT, AB_SM_PREFIX_MENU);
  AB_subMenus[id].isMouseOver = true;
  subMenuId = AB_SM_PREFIX_SUB + id;
  obj = document.getElementById(subMenuId);
  if (obj.style.visibility != 'visible') {
    obj.style.visibility = 'visible';
    document.getElementById(id).style.height = String(AB_sm_primaryMenuHeight) + 'px';
    AB_subMenus[id].execute = setInterval("AB_setMenuHeight('" + id + "', " + (AB_subMenus[id].height + AB_sm_primaryMenuHeight) + ")", AB_sm_showSubMenuInterval);
  }
}

function AB_hideSubMenu() {
  if (arguments[0].target != null) { // firefox
    targetId = arguments[0].target.id;
  } else { // IE;
    targetId = event.srcElement.id;
  }
  if (targetId.match('^' + AB_SM_PREFIX_MENU_CONTENT)) {
    id = targetId.replace(AB_SM_PREFIX_MENU_CONTENT, AB_SM_PREFIX_MENU);
  } else if (targetId.match('^' + AB_SM_PREFIX_SUB + AB_SM_PREFIX_MENU)) {
    id = targetId.replace(AB_SM_PREFIX_SUB, '');
  } else {
    parentId = document.getElementById(targetId).parentNode.parentNode.id;
	if (parentId.match('^' + AB_SM_PREFIX_SUB + AB_SM_PREFIX_MENU)) {
	  id = parentId.replace(AB_SM_PREFIX_SUB, '');
	} else {
      return;
	}
  }
  AB_subMenus[id].isMouseOver = false;	
  setTimeout("_AB_hideSubMenu('" + id + "')", AB_sm_hideSubMenuLatency);
}

function _AB_hideSubMenu(id) {
  if (!AB_subMenus[id].isMouseOver) {
    document.getElementById(AB_SM_PREFIX_SUB + id).style.visibility = 'hidden';
    document.getElementById(id).style.height = String(AB_sm_primaryMenuHeight) + 'px';
	clearInterval(AB_subMenus[id].execute);	
  }
}

function AB_setMenuHeight(id, endHeight) {
  currentHeightPx = document.getElementById(id).style.height;
  nextHeight = parseInt(currentHeightPx.substr(0, currentHeightPx.length - 2)) + AB_sm_showSubMenuStep;
  if (nextHeight > endHeight) {
    document.getElementById(id).style.height = String(endHeight) + 'px';
    clearInterval(AB_subMenus[id].execute);	
  } else {
    document.getElementById(id).style.height = String(nextHeight) + 'px';
  }
}
