var menu = new Class({
	
	Implements: Options,
	
	options: {
		timeShow: 500,
		timeHide: 500,
		overClass: null
	},
	
	initialize: function(options) {		
		if (menu.hasCreated) {
			return;
		}
		
		menu.hasCreated = true;
		
		this.setOptions(options);
		this.initMenu();
	},
	
	initMenu: function() {		
		var _self = this;
		$$$$("a.menuBtn").each(function(btn, i){	
			btn.current = false;
			if(btn.getParent().hasClass('current')){
				btn.current = true;
			}
			btn.addEvent("mouseover", function(evt){
				new Event(evt).stop();
				this.isMouseOver = true;
				
				if (!this.subMenu) {
					this.subMenu = this.getNext().clone(true, true).addClass('submenu').inject($$$$("body")[0]);			
					this.subMenu.orgH = this.subMenu.getCoordinates().height;
					this.subMenu.fx = new Fx.Tween(this.subMenu).set('height', 0);					
				}			
				
				this.subMenu.setStyles({
					left: this.getPosition().x + 10
				});
				
				clearInterval(this.menuInterval);				
				this.subMenu.get('tween', {
					property: 'height', 
					duration: _self.options.timeShow
				}).start(this.subMenu.orgH);
				
				this.subMenu.getElements("a").addEvents({
					"mouseover": function(evt){
						new Event(evt).stop();
					
						btn.isMouseOver = true;
						btn.getParent().addClass(_self.options.overClass);	
						
						try { 
							clearInterval(btn.menuInterval);
						} catch(e) {}						
					},
					
					"mouseout": function(evt){
						new Event(evt).stop();
						
						try {
							clearInterval(btn.menuInterval);
							btn.menuInterval = setInterval(function() {
								btn.isMouseOver = false;
								_self.hideMenu(btn);
							}, 100);
						} catch(e) {}
					}
				});	
				
				this.subMenu.addEvents({
					"mouseover": function(evt){
						new Event(evt).stop();
					
						btn.isMouseOver = true;
						btn.getParent().addClass(_self.options.overClass);	
						
						try { 
							clearInterval(btn.menuInterval);
						} catch(e) {}						
					},
					
					"mouseout": function(evt){
						new Event(evt).stop();
						
						try {
							clearInterval(btn.menuInterval);
							btn.menuInterval = setInterval(function() {
								btn.isMouseOver = false;
								_self.hideMenu(btn);
							}, 100);
						} catch(e) {}
					}
				});					
			});
			
			btn.addEvent("mouseout", function(evt){
				new Event(evt).stop();
								
				clearInterval(this.menuInterval);
				this.menuInterval = setInterval(function() {				
					btn.isMouseOver = false;
					_self.hideMenu(btn);
				}, 100);					
			});		
		});
	},
	
	hideMenu: function(menu) {	
		if (!menu.isMouseOver && menu.subMenu) {
			if(menu.current == false){
				menu.getParent().removeClass(this.options.overClass);
			}
			clearInterval(menu.menuInterval);
							
			var subOpenedMenu = menu.subMenu;
			subOpenedMenu.get('tween', {
				property: 'height', 
				duration: this.options.timeHide
			}).start(0);
				
			subOpenedMenu.get('tween').addEvent('complete', function() {
				menu.subMenu.destroy();
				menu.subMenu = null;
			});
		}
	}
});	

window.addEvent("domready", function(){	
	new menu({timeShow: 400, timeHide: 150, overClass: 'current'});
});