var subnav = new Array();
Element.extend(
{
	doActive: function () {
		this.className+=' hover';
	},

	doDeactive: function () {
		this.className=this.className.replace(new RegExp("hover\\b"), "");
	},
	
	hide: function(timeout) 
	{
		this.status = 'hide';
		clearTimeout (this.timeout);
		if (timeout)
		{
			this.timeout = setTimeout (this.animation.bind(this), timeout);
		}else{
			this.animation();
		}
	},
			
	show: function(timeout) 
	{
		this.status = 'show';
		clearTimeout (this.timeout);
		if (timeout)
		{
			this.timeout = setTimeout (this.animation.bind(this), timeout);
		}else{
			this.animation();
		}
	},

	animation: function() {
	
		if ((this.status == 'hide' && this.style.left != 'auto') || (this.status == 'show' && this.style.left == 'auto' && !this.hidding)) return;
		this.setStyle('overflow', 'hidden');
		if (this.status == 'show') {
			this.hidding = 0;
			this.hideAll();
		} 
		if (this.status == 'hide')
		{
			this.hidding = 1;
			this.myFx2.stop();
			if (this.parent._id) this.myFx2.start(this.offsetWidth,0);
			else this.myFx2.start(this.offsetHeight,0);
		} else {
			this.setStyle('left', 'auto');
			this.myFx2.stop();
			if (this.parent._id) this.myFx2.start(0,this.menuwidth);
			else this.myFx2.start(0,this.menuheight);
		}
	},

	init: function() {
		this.menuwidth = this.clientWidth;
		this.menuheight = this.clientHeight;
		if (this.parent._id)
		{
			this.myFx2 = new Fx.Style(this, 'width', {duration: 350});
			this.myFx2.set(0);
		}else{
			this.myFx2 = new Fx.Style(this, 'height', {duration: 350});
			this.myFx2.set(0);
		}
		this.setStyle('left', '-999em');
		animationComplete = function(){
			if (this.status == 'hide')
			{
				this.setStyle('left', '-999em');
				this.hidding = 0;
			}
			this.setStyle('overflow', '');
		}
		this.myFx2.addEvent ('onComplete', animationComplete.bind(this));
	},

	hideAll: function() {
		for(var i=0;i<subnav.length; i++) {
			if (!this.isChild(subnav[i]))
			{
				subnav[i].hide(0);
			}
		}
	},

	isChild: function(_obj) {
		obj = this;
		while (obj.parent)
		{
			if (obj._id == _obj._id) return true;
			obj = obj.parent;
		}
		return false;
	}
});


var MooMenu = new Class({	
	initialize: function(element)
	{
		$A($(element).childNodes).each(function(el)
		{
			if(el.nodeName.toLowerCase() == 'li')
			{
				$A($(el).childNodes).each(function(el2)
				{
					if(el2.nodeName.toLowerCase() == 'ul')
					{
						$(el2)._id = subnav.length+1;
						$(el2).parent = $(element);
						subnav.push ($(el2));
						el2.init();
						el.addEvent('mouseover', function()
						{
							el.doActive();
							el2.show(0);
							return false;
						});

						el.addEvent('mouseout', function()
						{
							el.doDeactive();
							el2.hide(20);
						});
						new MooMenu(el2);
						el.hasSub = 1;
					}
				});
				if (!el.hasSub)
				{
					el.addEvent('mouseover', function()
					{
						el.doActive();
						return false;
					});

					el.addEvent('mouseout', function()
					{
						el.doDeactive();
					});
				}
			}
		});
		return this;
	}
});

window.addEvent('domready',function() {new MooMenu($('menusys_moo'))});
