
  var c_menu = null;  //current main menu
  var s_menu = null;  //current sub menu

	function setStyle(obj, style, value) {
		var o = getRef(obj);
		if (o!=null) {
		  o.style[style] = value;
		  if (o.firstChild!=null)
		    o.firstChild.style[style] = value;
		  }
	}
	
	function setClass(obj, cls) {
	  var o = getRef(obj);
	  if (o!=null) {
	    o.className = cls;
	    if (o.firstChild!=null) {
		    o.firstChild.className = cls;
		  }
	  }
	}
	
	function getRef(obj){
		return (typeof obj == "string") ? document.getElementById(obj) : obj;
	}
	
	function setBackground(obj,value,evt) {
	  var o = getRef(obj);
	  if (o!=null) {
	    if (checkMouseEnter(o,evt)) {
	      setStyle(o,'bacgroundColor',value);
	    } else if (checkMouseLeave(o,evt)) {
	      setStyle(o,'bacgroundColor',value);
	    } 
	  }
	}
	
  function show_menu(main, sub, evt) {
    var s = getRef(sub);
    var m = getRef(main);
    
    if (checkMouseEnter(m, evt)) {
      if (c_menu!=null && c_menu!=m) {
        setStyle(c_menu,'backgroundColor','#CDCDCD');
        c_menu = null;
      }
      if (s_menu!=null && s_menu!=s) {
        s_menu.style.display = "none";
        s_menu = null;
      }
      setStyle(m,'backgroundColor','#96DE9D');
      c_menu = m;
      if (s!=null) {
        s.style.display = "";
        s_menu = s;
      }
    }
  }
  
  function hide_menu(main, sub, evt) {
    var s = getRef(sub);
    if (checkMouseLeave(s, evt)) {
      if (c_menu!=null) {
        setStyle(c_menu,'backgroundColor','#CDCDCD');
        c_menu = null;
      }
      if (s_menu!=null) {
        s_menu.style.display = "none";
        s_menu = null;
      }
    }
  }

  /*
      FUNCTIONS FOR MANAGING EVENT BUBBLING
   */
  function containsDOM (container, containee) {
    var isParent = false;
    do {
      if ((isParent = container == containee))
        break;
      if (containee!=null)
        containee = containee.parentNode;
    }
    while (containee != null);
    return isParent;
  }

  function checkMouseEnter (element, evt) {
    if (element==null || evt==null)
      return false;
    if (element.contains && evt.fromElement && evt.fromElement!=null) {
      return !element.contains(evt.fromElement);
    }
    else if (evt.relatedTarget) {
      return !containsDOM(element, evt.relatedTarget);
    }
  }

  function checkMouseLeave (element, evt) {
    if (element==null || evt==null)
      return false
    else if (element.contains && evt.toElement && evt.toElement!=null) {
      return !element.contains(evt.toElement);
    }
    else if (evt.relatedTarget) {
      return !containsDOM(element, evt.relatedTarget);
    }
  }