/**
 * @author Sjors
 */

var Menu = {
	active: false,
	selected: undefined,
	timeout: undefined,  // used to check if any element is highlighted

	initialize: function () {
		Menu.items = $$('#menu a');
		Menu.descriptions = $$('#descriptions p');

		Menu.items.each(function (item) {
			item.store('tween', new Fx.Tween(item, {duration: 250, property: 'opacity', link: 'cancel'}));
			item.addEvents({
				mouseover: function (e) {
					Menu.show(document.id(e.target));
				},
				mouseout: function (e) {
					var menuitem = $(e.target);
					menuitem.retrieve('tween').start(0.4);
					Menu.timeout = Menu.show.delay(100, Menu, Menu.selected);
				}
			});

			item.addEvent('click', Menu.click);

			var urlParts = item.get('href').split('/');
			var ajaxURL  = '/#/' + urlParts[2] + '/' + urlParts[3] + '/' + urlParts[4] + '/';

			if (urlParts[5].match(/[0-9]+-[0-9]+/)) {
				var offset   = urlParts[5].split('-')[0];
				var pagesize = urlParts[5].split('-')[1];
				ajaxURL += ((offset + pagesize) / pagesize).toString() + '/';
			} else {
				ajaxURL += urlParts[5] + '/';
			}

			item.set('href', ajaxURL);
		});
	},

	mouseover: function (e) {
		var menuitem = document.id(e.target);
		var opacity  = menuitem.getStyle('opacity');

		if (menuitem.get('tag') == 'a') {
			Menu.show(menuitem);
		}
	},

	mouseout: function () {
		if (Menu.active && Menu.active != Menu.selected) {
			Menu.active.retrieve('tween').start(0.4);
			Menu.active = false;

			Menu.timeout = window.setTimeout(function () {
				Menu.mouseleave();	
			}, 100);	
		}
	},

	click: function (e) {
		var menuitem = document.id(e.target);
		Menu.setSelected(menuitem);
	},

	mouseenter: function () {
		if (Menu.selected && Menu.selected.get && Menu.selected.get('tag') == 'a')
			Menu.selected.retrieve('tween').start(0.4);
	},

	mouseleave: function () {
		Menu.show(Menu.selected);
	},

	setSelected: function (menuitem) {
		Menu.selected = menuitem;
		menuitem.retrieve('tween').set(1);

		var sectionSlug = menuitem.getParent().get('id').replace(/^nav-/, '');

		var sectionId;
		if (sectionSlug != 'home') {
			var sectionId = Denham.sections.keyOf(sectionSlug);
		} else {
			sectionId = '0';
		}

		Menu.showFilters(sectionId);
	},

	show: function (menuitem) {
		if (Menu.timeout)
			window.clearTimeout(Menu.timeout);

		if (Menu.selected && Menu.selected != menuitem)
			Menu.selected.retrieve('tween').start(0.4);

		Menu.active = menuitem;

		menuitem.retrieve('tween').cancel();
		menuitem.retrieve('tween').set(1);

		var sectionSlug = menuitem.getParent().get('id').replace(/^nav-/, '');
		$$('#descriptions p').addClass('hide');
		document.id('descriptions').getElement('p.' + sectionSlug).removeClass('hide');
	},

	showFilters: function (sectionId) {
		$$('#submenu div[id^=section-]').addClass('hide');

		if (document.id('section-' + sectionId + '-filters'))
			document.id('section-' + sectionId + '-filters').removeClass('hide');
	}
}

window.addEvent('domready', Menu.initialize.bind(Menu));