var AFL = {};

/* Main navigation submenu */

AFL.submenu = function(ids, subPrefix) {
    this.init(ids, subPrefix);
};

AFL.submenu.prototype = {

  lastMenu: 0,
  
  initSubmenu: function() {
	for (var i = 0; i < this.ids.length; i++) {
	  YAHOO.util.Event.addListener(document.getElementById(this.ids[i]), 'mouseover', this.setShowSubmenu, this);
	  YAHOO.util.Event.addListener(document.getElementById(this.ids[i]), 'mouseout', this.setHideSubmenu, this);
	  if (i+1 === this.ids.length && this.lastMenu === 0) {
	   this.lastMenu = this.ids[i];
	  }
	}
  },
  
  setShowSubmenu: function(ev, scope) {
	scope.showSubmenu(this.id);
  },
  
  setHideSubmenu: function(ev, scope) {
	scope.hideSubmenu(this.id);
  },

  showSubmenu: function(id) {
	var subMenu = document.getElementById(this.subPrefix+id);
	if (subMenu !== null && subMenu.style.display !== 'block') {
	  this.setSubmenuStyles(subMenu, id);
	}
	var mainMenu = document.getElementById(id);
	YAHOO.util.Dom.addClass(mainMenu, 'hover');
  },
  
  setSubmenuStyles: function(subMenu, id) {
	YAHOO.util.Dom.setStyle(subMenu, 'position', 'absolute');
	YAHOO.util.Dom.setStyle(subMenu, 'display', 'block');
	var subMenuWidth = subMenu.offsetWidth;
	var mainMenuMeasures = this.getMainMenuMeasures(id);
	var left = YAHOO.env.ua.gecko > 0 ? mainMenuMeasures[0]+2 : mainMenuMeasures[0]+1;
	var right = YAHOO.env.ua.gecko > 0 ? mainMenuMeasures[1] +1 : mainMenuMeasures[1];
	var minWidth = YAHOO.env.ua.gecko > 0 ? right-2 : right-1;
	var top = mainMenuMeasures[3];
	if (left + subMenuWidth > YAHOO.util.Dom.getX(this.lastMenu) + right) {
	  var lastSubMenuPos = (YAHOO.util.Dom.getX(this.lastMenu) + right - subMenuWidth);
	  YAHOO.util.Dom.setXY(this.subPrefix+id, [lastSubMenuPos, top]);
	} else {
	  YAHOO.util.Dom.setXY(this.subPrefix+id, [left, top]);
	}
	if (subMenuWidth < mainMenuMeasures[1]) {
	   YAHOO.util.Dom.setStyle(subMenu, 'width', minWidth+'px');
	}
  },
  
  getMainMenuMeasures: function(id) {
    var mainMenu = document.getElementById(id);
    var mainMenuHeight = mainMenu.offsetHeight;
    var left = YAHOO.util.Dom.getXY(id)[0];
	var right = mainMenu.offsetWidth;
	var top = YAHOO.util.Dom.getXY(id)[1];
	var bottom = YAHOO.util.Dom.getXY(id)[1] + mainMenuHeight;
	
	return [left, right, top, bottom];

  },
  
  hideSubmenu: function(id) {
   YAHOO.util.Dom.setStyle(this.subPrefix+id, 'display', 'none');
   YAHOO.util.Dom.removeClass(document.getElementById(id), 'hover');
  },

  
  init: function(ids, subPrefix) {
	this.ids = ids;
	this.subPrefix = subPrefix;
	this.initSubmenu();
  }
  
};