/**
 * @PROJECT:   mygosuMenu 1.0.2
 * @COPYRIGHT: (c) 2003 Cezary Tomczak
 * @LINK:      http://gosu.pl/software/mygosumenu.html
 * @LICENSE:   BSD
 */

var menuTimeout = 400

var menuSections = new Array()
var menuCountHide = new Array()

var menuSectionCnt = 0
var menuBoxCnt = 0
var menuOverlap = null;

function menuHideControl (tagName, subMenu)
{
	var x = menuGetX (subMenu);
	var y = menuGetY (subMenu);
	var w = subMenu.offsetWidth;
	var h = subMenu.offsetHeight;

	var i;
	for (i = 0; i < document.all.tags(tagName).length; ++i)
	{
		var obj = document.all.tags(tagName)[i];
		if (!obj || !obj.offsetParent)
			continue;

		// check if the object and the subMenu overlap

		var ox = menuGetX (obj);
		var oy = menuGetY (obj);
		var ow = obj.offsetWidth;
		var oh = obj.offsetHeight;

		if (ox > (x + w) || (ox + ow) < x)
			continue;
		if (oy > (y + h) || (oy + oh) < y)
			continue;

		// if object is already made hidden by a different
		// submenu then we dont want to put it on overlap list of
		// of a submenu a second time.
		// - bug fixed by Felix Zaslavskiy
		if(obj.style.visibility == "hidden")
			continue;

		//subMenu.cmOverlap.push (obj);
		menuOverlap[menuOverlap.length] = obj;
		obj.style.visibility = "hidden";
	}
}
//
// show the control hidden by the subMenu
//
function menuShowControl ()
{
	if (menuOverlap)
	{
		var i;
		for (i = 0; i < menuOverlap.length; ++i)
			menuOverlap[i].style.visibility = "";
	}
	menuOverlap = null;
}
//
// functions that obtain the coordinates of an HTML element
//
function menuGetX (obj)
{
	var x = 0;

	do
	{
		x += obj.offsetLeft;
		obj = obj.offsetParent;
	}
	while (obj);
	return x;
}

function menuGetY (obj)
{
	var y = 0;
	do
	{
		y += obj.offsetTop;
		obj = obj.offsetParent;
	}
	while (obj);
	return y;
}

function menuShow(section, elements) {
  for (var i = 0; i < menuSections.length; i++) {
    if (menuSections[i] != section) {
      menuHide(menuSections[i], menuCountNodes(menuSections[i]))
    }
  }
  for (var i = 1; i <= elements; i++) {
  	subMenu = document.getElementById(section + '-' + i);
  	if (document.all)  // it is IE
  	{
  		if (!menuOverlap)
  			menuOverlap = new Array();
		/*menuHideControl ("IFRAME", subMenu);*/
		menuHideControl ("SELECT", subMenu);
		/*menuHideControl ("OBJECT", subMenu);*/
  	}	
    subMenu.style.visibility = 'visible'
  }
}

function menuHide(section, elements) {
  if (document.all) // it is IE
  	menuShowControl();
  for (var i = 1; i <= elements; i++) {
    document.getElementById(section + '-' + i).style.visibility = 'hidden'
    document.getElementById(section).style.zIndex = -1; /* added Erling */
  }
}

function menuTryHide(section, elements, countHide) {
  if (countHide != menuCountHide[section]) {
    return
  }
  menuHide(section, elements)
}

function menuCountNodes(element) {
  ret = 0
  nodes = document.getElementById(element).childNodes.length
  for (var i = 0; i < nodes; i++) {
    if (document.getElementById(element).childNodes[i].nodeType == 1) {
      ret++
    }
  }
  return ret
}

function menuInitSection(section) {
  var elements = menuCountNodes(section)
  for (var i = 0; i <= elements; i++) {
    var s = (i == 0 ? (section + '-top') : (section + '-' + i))
    if (i == 0) {
      document.getElementById(s).onmouseover = function() {
        menuShow(section, elements)
        menuCountHide[section]++
        for (var ii = 0; ii < menuSections.length; ii++) {
          document.getElementById(section).style.zIndex = 1;
          if (menuSections[ii] != section) {
            document.getElementById(menuSections[ii]).style.zIndex = -1;
          }
        }
      }
    } else {
      document.getElementById(s).onmouseover = function() {
        menuShow(section, elements)
        menuCountHide[section]++
      }
    }
    document.getElementById(s).onmouseout = function() {
      setTimeout("menuTryHide('" + section + "', " + elements + ", " + menuCountHide[section] + ")", menuTimeout)
    }
  }
}

function menuMakeId(id, nodes) {
  for (var i = 0; i < nodes.length; i++) {
    switch (nodes[i].className) {
      case 'top':
        menuSectionCnt++
        menuBoxCnt = 0
        nodes[i].id = id + '-' + menuSectionCnt + '-top'
        break;
      case 'section':
        nodes[i].id = id + '-' + menuSectionCnt
        menuSections[menuSections.length] = nodes[i].id
        break;
      case 'box':
        menuBoxCnt++
        nodes[i].id = id + '-' + menuSectionCnt + '-' + menuBoxCnt
        break;
    }
    if (nodes[i].childNodes) {
      menuMakeId(id, nodes[i].childNodes)
    }
  }
}

function menuInit(id) {
  menuMakeId(id, document.getElementById(id).childNodes)
  for (var i = 0; i < menuSections.length; i++) {
    menuCountHide[menuSections[i]] = 0
  }
  for (var i = 0; i < menuSections.length; i++) {
    menuInitSection(menuSections[i])
  }
}