var menu = new Class({
	
	Implements: Options,
	
	options: {
		timeShow: 400,
		timeHide: 400,
		overClass: null
	},
	
	initialize: function(options) {
		if (menu.hasCreated) {
			return;
		}
		menu.hasCreated = true;
		this.setOptions(options);
		this.initMenu();
	},
	
	initMenu: function() {		
		var _self = this;
		$("treemenu1").getElements("a").each(function(btn, i){			
			if(btn.getParent("li").getParent("ul").id!="treemenu1"){return;}
			var isactive = btn.getParent("li").hasClass('selected');
			btn.store('isactive', isactive);
			if(btn.getNext()==null){return;}
			btn.subMenu = btn.getNext().clone().inject($$("body")[0]);
			btn.subMenu.addClass("submenu");
			btn.subMenu.orgH = btn.subMenu.getCoordinates().height;
			btn.subMenu.fx = new Fx.Tween(btn.subMenu).set('height', 0);
			btn.subMenu.subUL = btn.subMenu.getElements("ul");
			
			if (btn.getCoordinates().width > btn.subMenu.getCoordinates().width) {
				btn.subMenu.setStyle("width", btn.getCoordinates().width);
			}
			btn.subMenu.setStyle("display", "none");
			
			btn.addEvent("mouseover", function(evt){
				new Event(evt).stop();
				this.isMouseOver = true;
				
				/*
				if (!this.subMenu) {
					this.subMenu = this.getNext().clone().inject($$("body")[0]);			
					this.subMenu.orgH = this.subMenu.getCoordinates().height;
					this.subMenu.fx = new Fx.Tween(this.subMenu).set('height', 0);
					this.subMenu.subUL = this.subMenu.getElements("ul");
					
					if (this.getCoordinates().width > this.subMenu.getCoordinates().width) {
						this.subMenu.setStyle("width", this.getCoordinates().width);
					}
				} else {
				*/
					//this.subMenu.inject($$("body")[0]);
					this.subMenu.setStyle("display", "block");
				//}
				
				this.subMenu.setStyles({
					left: this.getPosition().x + 10
				});
				
				try {
					clearInterval(this.menuInterval);
				} catch (e) {}
				
				this.subMenu.get('tween', {
					property: 'height', 
					duration: _self.options.timeShow
				}).start(this.subMenu.orgH);
				
				this.subMenu.getElements("a").removeEvents();
				this.subMenu.getElements("a").addEvents({
					"mouseover": function(evt){
						new Event(evt).stop();
					
						btn.isMouseOver = true;
						btn.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);
							}, 50);
						} catch(e) {}
					}
				});			
			});
			
			btn.addEvent("mouseout", function(evt){
				new Event(evt).stop();
				
				try {
					clearInterval(this.menuInterval);
				} catch (e) {}
				
				this.menuInterval = setInterval(function() {				
					btn.isMouseOver = false;
					_self.hideMenu(btn);
				}, 50);					
			});		
		});
	},
	
	hideMenu: function(menu) {	
		if (!menu.isMouseOver && menu.subMenu) {			
			if(!menu.retrieve('isactive'))
				menu.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.dispose();
				menu.subMenu.setStyle("display", "none");
				//menu.subMenu = null;
			});
		}
	}
});	

window.addEvent("domready", function(){
	new menu({timeShow: 0, timeHide: 0, overClass: 'active'});
});