YAHOO.namespace('hushcity.app');

YAHOO.hushcity.app.MMenu = function() {
	this.init();
}


YAHOO.hushcity.app.MMenu.prototype = {
	
	animTime: 0.75,
	
	visible: false,
	
	handleBodyMouseOver: function (e, args) {
		
		var x = e.clientX - 0; 
		var y = e.clientY - 0;
		
		if (y < 53 || (
			x >= YAHOO.util.Dom.getX(this.emenuElement) && 
			x <= YAHOO.util.Dom.getX(this.emenuElement) + (this.emenuElement.clientWidth - 0) &&
			y >= YAHOO.util.Dom.getY(this.emenuElement) && 
			y <= YAHOO.util.Dom.getY(this.emenuElement) + (this.emenuElement.clientHeight - 0)
		)) {
			if (!this.visible) {
				this.showMenu();
				this.visible = true;
			}
		} else if (this.visible) {
			this.hideMenu();
			this.visible = false;
		}
		
	},
	
	handleSeasonLinkMouseOver: function (e, args) {
		
		var me = args[0];
		var part = args[1];
		var meets = args[2];
		
		YAHOO.util.Dom.setStyle(meets, 'visibility', 'visible');
		YAHOO.util.Dom.addClass(part, 'hover');
		
	},
	
	handleSeasonLinkMouseOut: function (e, args) {
		
		var me = args[0];
		var part = args[1];
		var meets = args[2];
		
		YAHOO.util.Dom.setStyle(meets, 'visibility', 'hidden');
		YAHOO.util.Dom.removeClass(part, 'hover');
		
	},
	
	showMenu: function () {
		
		var easing = YAHOO.util.Easing.easeOut;
		this.animOpacity('bg', 1, easing);
		this.animOpacity('logo', 1, easing);
		this.animOpacity('title', 1, easing);
		this.animOpacity('emenu', 1, easing);
		
		for (var i = 0; i < this.opElementsLength; i++) {
			this.animOpacity('op' + i, 1, easing);
		}
		
	},
	
	hideMenu: function () {
		
		var easing = YAHOO.util.Easing.easeIn;
		this.animOpacity('bg', 0, easing);
		this.animOpacity('logo', 0.2, easing);
		this.animOpacity('title', 0, easing);
		this.animOpacity('emenu', 0, easing);
		
		for (var i = 0; i < this.opElementsLength; i++) {
			this.animOpacity('op' + i, 0, easing);
		}
		
	},
	
	animOpacity: function (elName, opacity, easing) {
		var easing = easing || YAHOO.util.Easing;
		var elAnim = elName + 'Anim';
		var elFullName = elName + 'Element';
		if (this[elAnim] instanceof YAHOO.util.Anim && this[elAnim].isAnimated) {
			this[elAnim].stop();
		}
		this[elAnim] = new YAHOO.util.Anim(this[elFullName], {opacity: {to: opacity}}, this.animTime, easing);
		this[elAnim].animate();
	},
	
	init : function () {
		
		this.element = document.getElementById('mmenu');
		
		this.bgElement = YAHOO.util.Dom.getElementsByClassName('bg', 'div', this.element)[0];
		this.logoElement = YAHOO.util.Dom.getElementsByClassName('sitelogo', '*', this.element)[0];
		this.menuElement = YAHOO.util.Dom.getElementsByClassName('menu', '*', this.element)[0];
		this.titleElement = YAHOO.util.Dom.getElementsByClassName('title', 'p', this.element)[0];
		this.emenuElement = YAHOO.util.Dom.getElementsByClassName('emenu', 'ul', this.element)[0];
		this._opElements = YAHOO.util.Dom.getElementsByClassName('op', '*', this.element);
		
		this.opElementsLength = this._opElements.length;
		for (var i = 0, l = this.opElementsLength; i < l, el = this._opElements[i]; i++) {
			this['op' + i + 'Element'] = el;
		}
		
		var els = YAHOO.util.Dom.getElementsByClassName('season', 'a', this.menuElement);
		for (var i = 0, l = els.length; i < l, el = els[i]; i++) {
			var part = YAHOO.util.Dom.getElementsByClassName('part', '*', el.parentNode)[0];
			var meets = YAHOO.util.Dom.getElementsByClassName('meets', '*', el.parentNode)[0];
			YAHOO.util.Event.on(el, 'mouseover', this.handleSeasonLinkMouseOver, [el, part, meets], this);
			YAHOO.util.Event.on(el, 'mouseout', this.handleSeasonLinkMouseOut, [el, part, meets], this);
		}
		
		if (!YAHOO.util.Dom.hasClass(this.element, 'mmenu-visible')) {
			YAHOO.util.Event.on(document.body, 'mousemove', this.handleBodyMouseOver, this, true);
		}
		
	}
	
}


YAHOO.util.Event.onDOMReady(
	function () {
		
		if (!document.getElementById('mmenu')) {
			return false;
		}
		
		var menu = new YAHOO.hushcity.app.MMenu();
	}
);