
window.addEvent('domready', function() {
	var menu = $('menu');
	menu.entries = [];

	menu.getElements('.openable').each(function(item) {
		menu.entries.push(item);

		item.removeClass('openable');
		item.submenu = item.getElement('.submenu');
		if (!item.submenu) return;

		item.submenu.setStyle('display', 'block');
		item.submenu.store('height', item.submenu.getSize().y);
		item.submenu.set('morph', { duration: 'short', link: 'cancel' });
		item.submenu.setStyles({ height: 0, opacity: 0, overflow: 'hidden' });

		$extend(item, {
			expand: function() {
				$clear(this.submenu.timer);
				this.fireEvent('expanding', this);
				this.submenu.morph({
					height: this.submenu.retrieve('height'),
					opacity: 1,
					onComplete: this.fireEvent.bind(this, 'expanded', this)
				});
			},

			collapse: function(delay) {
				this.fireEvent('collapsing', this);
				if (typeof(delay) == "undefined") delay = 400;
				if (delay != 0) {
					this.submenu.timer = this.submenu.morph.delay(delay, this.submenu, {
						height: 0,
						opacity: 0,
						onComplete: this.fireEvent.bind(this, 'collapsed', this)
					});
				} else {
					this.submenu.morph({
						height: 0,
						opacity: 0,
						onComplete: this.fireEvent.bind(this, 'collapsed', this)
					});
				}
			}
		});

		item.addEvents({
			mouseenter: function() { item.expand(); },
			mouseleave: function() { item.collapse(); },
			expanding: function(item) {
				if (!item.hasClass('active')) {
					item.addClass('active');
					item.addClass('removeActive');
				}

				menu.entries.each(function(entry) {
					if (item != entry) entry.collapse(0);
				});
			},
			collapsed: function(item) {
				if (this.hasClass('removeActive')) {
					this.removeClass('active');
					this.removeClass('removeActive');
				}
			}
		});
	});
});

