var menuids = ["sidebarmenu1"] //Enter id(s) of each Side Bar Menu's main UL, separated by commas
var onMouseOutDelay = 700;      //Delay that will apply to mouseout event

var stayOn = new Array();

function hasClass(ele,cls) {
	return ele.className.match(new RegExp('(\\s|^)'+cls+'(\\s|$)'));
}
function addClass(ele,cls) {
	if (!this.hasClass(ele,cls)) ele.className += " "+cls;
}
function removeClass(ele,cls) {
	if (hasClass(ele,cls)) {
		var reg = new RegExp('(\\s|^)'+cls+'(\\s|$)');
		ele.className=ele.className.replace(reg,' ');
	}
}

function turnOn(obj)
{
  addClass(obj, 'menuBackgroundHover');
}

function turnOff(obj)
{
  removeClass(obj,'menuBackgroundHover');
  addClass(obj, 'menuBackground');

}

function initsidebarmenu() {
    for (var i = 0; i < menuids.length; i++) 
    {
      //make sure we handle items without submenus
      var topLevels = getElementsByClassName("topLevel");
      for(var t = 0; t < topLevels.length; t++)
      {
        atags = topLevels[t].parentNode.getElementsByTagName("a");
        if(atags.length == 1)
        {
          atags[0].parentNode.onmouseover = function() { turnOn(this.getElementsByTagName("a")[0]); }
          atags[0].parentNode.onmouseout = function() { turnOff(this.getElementsByTagName("a")[0]); }
        }
      }

      var ultags = document.getElementById(menuids[i]).getElementsByTagName("ul");
      for (var t = 0; t < ultags.length; t++) 
      {
        ultags[t].parentNode.getElementsByTagName("a")[0].className += " subfolderstyle"
        if (ultags[t].parentNode.parentNode.id == menuids[i]) //if this is a first level submenu
        {
          ultags[t].style.left = ultags[t].parentNode.offsetWidth + "px" //dynamically position first level submenus to be width of main menu item
          atags = ultags[t].getElementsByTagName("a");
          for(var n = 0; n < atags.length; n++)
          {
            atags[n].parentNode.onmouseover = function() { turnOn(this.getElementsByTagName("a")[0]); }
            atags[n].parentNode.onmouseout = function() { turnOff(this.getElementsByTagName("a")[0]); }
          }
        }
          
        else //else if this is a sub level submenu (ul)
        {
          ultags[t].style.left = ultags[t - 1].getElementsByTagName("a")[0].offsetWidth + "px";  //position menu to the right of menu item that activated it
          atags = ultags[t].getElementsByTagName("a");
          for(var n = 0; n < atags.length; n++)
          {
            atags[n].parentNode.onmouseover = function() { turnOn(this.getElementsByTagName("a")[0]); }
            atags[n].parentNode.onmouseout = function() { turnOff(this.getElementsByTagName("a")[0]); }
          }
        }
        
        ultags[t].parentNode.onmouseover = function() 
        {
          turnOn(this.getElementsByTagName("a")[0]);

          this.getElementsByTagName("ul")[0].isMouseOver = true;
          this.getElementsByTagName("ul")[0].style.display = "block";
          hideAllOther(this);
          if (this.toref)
            window.clearTimeout(this.toref);
        }
        
        ultags[t].parentNode.onmouseout = function() 
        {
          turnOff(this.getElementsByTagName("a")[0]);

          var aref = this.getElementsByTagName("a")[0];
          var saveref = this.getElementsByTagName("ul")[0];
          saveref.isMouseOver = false;
          if (this.toref)
            window.clearTimeout(this.toref);


          //this.getElementsByTagName("ul")[0].style.display = "none";
          this.toref = window.setTimeout(function(e) {
            if (!saveref.isMouseOver)
              saveref.style.display = "none"
          //                      turnOff(aref);
          }, onMouseOutDelay);
        }
      }
      for (var t = ultags.length - 1; t > -1; t--) { //loop through all sub menus again, and use "display:none" to hide menus (to prevent possible page scrollbars
        ultags[t].style.visibility = "visible";
        ultags[t].style.display = "none";
      }
   }
}


function hideAllOther(liobj) {
    var p = liobj.parentNode.childNodes;


    //alert(liobj.parentNode.childNodes[3]);
    //alert(p);
    var i;
    try {
        for (i = 0; i < p.length; i++) {
            if (liobj != p[i] && "LI" == p[i].tagName && p[i].getElementsByTagName("ul").length)
                p[i].getElementsByTagName("ul")[0].style.display = "none";
        }
    } catch (e) {
        alert(p[i].innerHTML)
    }


}


if (window.addEventListener)
    window.addEventListener("load", initsidebarmenu, false)
else if (window.attachEvent)
    window.attachEvent("onload", initsidebarmenu)
    
    
    
