Element.addMethods({
  downChild: function(element, expression, index) {
    element = $(element);
    if (arguments.length == 1) return element.firstDescendant();
    var descendants = element.childElements();
    return expression ? Selector.findElement(descendants, expression, index) :
      descendants[index || 0];
  },
  
  selectChildren: function() {
    var args = $A(arguments), element = $(args.shift());
    var res1 = Selector.findChildElements(element, args);
    
    var res = $A([]);
    for (var i = 0; i < res1.length; i++)
    {
      if (res1[i].parentNode == element)
        res.push(res1[i])
    }  
    
    return res;
  }

});


var MainMenu = Class.create({
  initialize: function(container, activeClassName)
  {
    this.domContainer = $(container);
    var links = this.domContainer.select('a');
    var re = eval('/'+window.location.href.replace(/\//g,"\\/")+'$/gi');
    for (var i=0; i<links.length; i++)
    {
        if (links[i].href.match(re))
        {
             var tmpUL = links[i].up().up();
             if (tmpUL && tmpUL.id=="submenu")
                 tmpUL.up().addClassName(activeClassName);
             else
                 links[i].up().addClassName(activeClassName);
        }
    }
    this.activeClassName = activeClassName;

    var menuItems = this.domContainer.selectChildren('li');
    
    for (var i = 0; i < menuItems.length; i++)
    {
      var domMenuItem = menuItems[i];
      
      if (domMenuItem.hasClassName(this.activeClassName))
        this.domDefaultMenuItem = domMenuItem;

      domMenuItem.observe('mouseover', this.onMouseOver.bind(this, domMenuItem));
      domMenuItem.observe('mouseout', this.onMouseOut.bind(this, domMenuItem));
      
      
    }  
  },
  
  onMouseOver: function(domLi)
  {
    if (domLi.menuTimer)
      clearTimeout(domLi.menuTimer);
    
    if (this.inactivityTimer)
      clearTimeout(this.inactivityTimer);
    
    if (this.domDefaultMenuItem)
      this.domDefaultMenuItem.removeClassName(this.activeClassName);

    domLi.addClassName(this.activeClassName);
    
    var domSubmenu = domLi.downChild('ul');
    if (domSubmenu)
    {
      domSubmenu.style.display = 'block';
    }
    
    
    
  },
  
  onMouseOut: function(domLi)
  {
    domLi.menuTimer = setTimeout(this.onMouseOutDelayed.bind(this, domLi), 5);
    this.inactivityTimer = setTimeout(this.onInactivity.bind(this), 600);
  },
  
  onMouseOutDelayed: function(domLi)
  {
    var domSubmenu = domLi.downChild('ul');
    if (domSubmenu)
    {
      domSubmenu.style.display = 'none';
    }
    
    domLi.removeClassName(this.activeClassName);
  },
  
  onInactivity: function()
  {
    if (this.domDefaultMenuItem)
      this.domDefaultMenuItem.addClassName(this.activeClassName);
  }
  
});


function getNearest() {
	new Ajax.Request('/vcalendar/nearest.php', {
		method:'post',
		onSuccess: function(transport){
			var response = transport.responseText || '';
			$('nearest_events').innerHTML = response;
		},
		onFailure: function(){
			$('nearest_events').innerHTML = '';
		 }
	});
}


Event.observe(document, 'dom:loaded', function() {new MainMenu($$('#mainmenuend>ul').first(), 'current')});