var MooDropMenu = new Class({
	Implements: [Options, Events],

	options: {
		mouseoutDelay: 100,
		mouseoverDelay: 0,
		listSelector: 'ul',
		itemSelector: 'li'
	},

	initialize: function(menu, options, level){
		this.setOptions(options);
		
		options = this.options;

		var menu = this.menu = document.id(menu);

		menu.getElements(options.itemSelector + ' > ' + options.listSelector).each(function(el){
			el.removeClass('open').addClass('close');
			
			el.set('tween', {
				duration: 150
			});
			
			el.setStyles({
				height: 0,
				overflow: 'hidden'
			});

			var parent = el.getParent(options.itemSelector),
				timer;

			parent.addEvents({
				'mouseenter': function(){
					clearTimeout(timer);
					
					if (options.mouseoverDelay) {
						timer=this.onOpen.delay(options.mouseoverDelay, this, el);
					} else {
						this.onOpen(el);
					}

				}.bind(this),

				'mouseleave': function(){
					clearTimeout(timer);
					
					timer=(function() {
						this.onClose(el);
					}).delay(options.mouseoutDelay, this);

				}.bind(this)
			});
		}, this);
	},

	onOpen: function(el) {
		var parent=el.getParent(this.options.itemSelector);
		var size=el.getScrollSize();
		
		parent.store('DropDownOpen', true);

		el.set('tween', {
			onComplete: function() {
				parent.removeClass('close').addClass('open');
			}
		});
		
		el.tween('height', size.y);
	},
	
	onClose: function(el) {
		var parent=el.getParent(this.options.itemSelector);
		parent.store('DropDownOpen', false);

		el.set('tween', {
			onComplete: function() {
				parent.removeClass('open').addClass('close');
			}
		});
	
		el.tween('height', 0);
	}
});
