function menupos(item)		// set menu position and width
{ var menuobj = document.getElementById('menuitem' + item)
  var submenuobj = document.getElementById('submenu' + item)
  if (!submenuobj.origWidth) { submenuobj.origWidth = submenuobj.offsetWidth }	// store original menu width
  submenuobj.style.width = submenuobj.origWidth + 10 + 'px'
  submenuobj.style.left = Math.ceil(menuobj.offsetLeft + (menuobj.offsetWidth / 2) - (submenuobj.offsetWidth / 2)) + 'px'
  if (submenuobj.offsetLeft < 0) {submenuobj.style.left = 0}
  if (menuobj.offsetLeft + submenuobj.offsetWidth > document.body.offsetWidth)
     {submenuobj.style.left = document.body.offsetWidth - submenuobj.offsetWidth - 1 + 'px'}
  submenuobj.style.top = menuobj.offsetTop + 29 + 'px'
}

var fader
var timer
var menuitems = 8	// max number of menu items to check

function showit(item,fade)	// show or fade in menu, hide all others
{ cancelhide()
  for (i=1; i<= menuitems; i++) { if (document.getElementById('submenu' + i)) { hideitem('submenu' + i) } }
  if (item != 0)
  { menupos(item)
    if (fade == 1) {fadein('submenu' + item)} else {showitem('submenu' + item)}
  }
}

function showitem(item)		// show menu instantly
{ var obj = document.getElementById(item)
  obj.style.opacity = 1
  if (obj.filters) {obj.filters.alpha.opacity = 100}
  obj.style.visibility = 'visible'
}

function hideit(item)		// set timer to fade out menu after 1 second
{ cancelhide()
  var obj = document.getElementById('submenu' + item)
  timer = window.setTimeout("fadeout('" + obj.id + "')",1000)
}

function cancelhide()		// cancel current timer and any fader in operatiuon
{ window.clearTimeout(timer)
  window.clearInterval(fader)
}

function hideitem(item)		// hide menu instantly
{ var obj = document.getElementById(item)
  obj.style.visibility = 'hidden'
  obj.style.opacity = 0
  if (obj.filters) {obj.filters.alpha.opacity = 0}
}

function fadeout(item)		// initiate menu fade out
{ var obj = document.getElementById(item)
  obj.style.visibility = 'visible'
  fader = window.setInterval("fadeoutmore('" + obj.id + "')",50)
}

function fadeoutmore(item)	// fade out a menu
{ var obj = document.getElementById(item), fad = .2, opac
  if (!obj.style.opacity) { obj.style.opacity = 1 }  
  opac = parseFloat(obj.style.opacity) - parseFloat(fad)
  obj.style.opacity = opac
  if (obj.filters) {obj.filters.alpha.opacity = (opac * 100)}
  if (obj.style.opacity <= 0)
  { window.clearInterval(fader)
    obj.style.visibility = 'hidden'
  }
}

function fadein(item)		// initiate menu fade in
{ var obj = document.getElementById(item)
  obj.style.visibility = 'visible'
  fader = window.setInterval("fadeinmore('" + obj.id + "')",50)
}

function fadeinmore(item)	// fade in a menu
{ var obj = document.getElementById(item), fad = .2, opac
  if (!obj.style.opacity) { obj.style.opacity = 0 }  
  opac = parseFloat(obj.style.opacity) + parseFloat(fad)
  obj.style.opacity = opac
  if (obj.filters) {obj.filters.alpha.opacity = (opac * 100)}
  if (obj.style.opacity >= 1) {window.clearInterval(fader)}
}

function checkMouseEnter (element, evt)	{	// True if is mouse entering from outside, false if entering from child element
  if (element.contains && evt.fromElement) {
    return !element.contains(evt.fromElement);
  }
  else if (evt.relatedTarget) {
    return !containsDOM(element, evt.relatedTarget);
  }
}

function checkMouseLeave (element, evt) {	// True if is mouse leaving to outside, false if leaving to child element
  if (element.contains && evt.toElement) {
    return !element.contains(evt.toElement);
  }
  else if (evt.relatedTarget) {
    return !containsDOM(element, evt.relatedTarget);
  }
}

function containsDOM (container, containee) {	// Thanks Kibo www.kibo.com
  var isParent = false;
  do {
    if ((isParent = container == containee))
      break;
    containee = containee.parentNode;
  }
  while (containee != null);
  return isParent;
}
