/*
originally Written by: Adam Crownoble (adam@bryan.edu)
Date: April 3 2006
modified for Up Menu by: Leo Borsari (Web Service UNISI)
Date: September 5 2007
License: LGPL (http://www.gnu.org/copyleft/lesser.html)
Dependencies: mootools (mootools.net)
*/

var DropUpMenu = new Class({

 initialize: function(menuElement) {

  this.menu = menuElement;
  this.id = menuElement.id;
  this.duration = 400;
  this.buttons = [];


  $A(this.menu.getElementsByTagName('li')).each(
   function(li) {
    if(li.parentNode == menuElement) { this.buttons.push($(li)); }
   }.bind(this)
  );
  this.submenus = $A(this.menu.getElementsByTagName('ul'));

  this.submenus.each(
   function(submenu) {
    submenu = $(submenu);
    submenu.setStyle('display','');
    submenu.originalHeight = submenu.offsetHeight;
    submenu.effectHeight = new Fx.Style(submenu, 'height',{ duration: this.duration, transition:Fx.Transitions.quartOut }).set(0);
	submenu.effectTop = new Fx.Style(submenu, 'top',{ duration: this.duration, transition:Fx.Transitions.quartOut }).set(-1);
	submenu.effectOpacity = new Fx.Style(submenu, 'opacity').set(0.93);
	/*$A(submenu.getElementsByTagName('li')).each(
	function(li) { 
	  new Fx.Style($(li), 'opacity').set(1);
     }.bind(this)
    );*/
   }.bind(this)
  );

  this.buttons.each(
   function(button) {
    button.addEvent('mouseover',this.expand.bindAsEventListener(this));
    button.addEvent('mouseout', this.collapse.bindAsEventListener(this));
	
   }.bind(this)
  );

 },

 findButton: function(element) {
  var button = false;
  while(element.parentNode) {
   if(this.buttons.test(element)) { button = element; }
   element = element.parentNode;
  }
  return button;
 },

 findSubmenu: function(element) {
  var button = this.findButton(element);
  var submenu = button.getElementsByTagName('ul')[0];
  return submenu;
 },

 expand: function(event) {
  var submenu = this.findSubmenu(event.target || event.srcElement);
  if(submenu) {
   submenu.effectHeight.clearTimer();
   submenu.effectTop.clearTimer();
   submenu.effectHeight.start(submenu.originalHeight);
   submenu.effectTop.start(-(submenu.originalHeight+1));
  }
 },

 collapse: function(event) {
  var submenu = this.findSubmenu(event.target || event.srcElement);
  if(submenu) {
   submenu.effectHeight.clearTimer();
   submenu.effectTop.clearTimer();
   submenu.effectHeight.start(0);
   submenu.effectTop.start(-1);
  }
 }

});

/*
function initMainMenu() { 
	if(DropUpMenu && $('menu_top')){
		var menu = new DropUpMenu($('menu_top'));
	}
}
*/
window.addEvent('domready', function(){
  	if(DropUpMenu && $('menu_top')){
		var menu = new DropUpMenu($('menu_top'));
	}
});

