
var Navigation = new Class({
	backElementId: 'menuoverlay',	// ID til elementet som skal klikkes for å gå tilbake til forrige nivå
	linkIdPrefix: 'link_',			// Hvis en meny har ID "menu" skal lenka til menyen ha ID linkIdPrefix + "menu"
	levelWidth: 160,					// Bredden på et menynivå
	leftMenuLevel: -1,				// Menydybde på venstre meny
	breadcrumbs: [],					// Brødsmuler som går fra toppmenyen til den høyre menyen
	backInProgress: false,
	
	// Ctor
	//------
	initialize: function(){
		this.bound = {
			openSubmenu: this.openSubmenu.bindWithEvent(this),
			back: this.back.bind(this)
		};
		this.createMenu();
	},
	
	// Sett opp DOM og data
	//----------------------
	createMenu: function(){
		var menu = $$('#menuContainer .menuRight')[0];
		this.leftMenuLevel = this.getLevel(menu);
		while (menu != null) {
			this.breadcrumbs = [menu].merge(this.breadcrumbs);
			menu = this.getParent(menu);
		}
		if (this.breadcrumbs.length > 0)
			this.leftMenuLevel--;
		$$('#menuContainer a').forEach(function(a){
			a.menu = a.parentNode;
			if (a.id != null && a.id.indexOf(this.linkIdPrefix) == 0)
				a.addEvent('click', this.bound.openSubmenu).subMenu = $(a.id.substring(this.linkIdPrefix.length));
		}, this);
		this.menuContainer = $('menuContainer').setStyle('margin-left', -this.leftMenuLevel * this.levelWidth + 'px');
		$(this.backElementId).addEvent('click', this.bound.back);
		$(this.backElementId).addEvent('mouseover', function(){
			if (this.leftMenuLevel != -1)
				this.breadcrumbs[this.leftMenuLevel].getElementsByTagName('h3')[0].className = 'hilite';
		}.bind(this));
		$(this.backElementId).addEvent('mouseout', function(){
			if (this.leftMenuLevel != -1)
				this.breadcrumbs[this.leftMenuLevel].getElementsByTagName('h3')[0].className = '';
		}.bind(this));
	},
	
	// Finner parent-menyen til en meny
	//----------------------------------
	getParent: function(menu){
		var parent = null;
		var itemInParentMenu = $(this.linkIdPrefix + menu.id);
		if (itemInParentMenu != null)
			parent = itemInParentMenu.parentNode;
		return parent;
	},
	
	// Returnerer nivået til en meny i hierarkiet
	//--------------------------------------------
	getLevel: function(menu){
		if (menu.level == null) {
			var linkedFromItem = $(this.linkIdPrefix + menu.id);
			if (linkedFromItem == null)
				menu.level = 0;
			else
				menu.level = this.getLevel(linkedFromItem.parentNode) + 1; // == getLevel(linkedFromMenu)
		}
		return menu.level;
	},

	// Åpner en undermeny. Trigges av onclick på et a-element med id
	//---------------------------------------------------------------
	openSubmenu: function(e){
		var menu = e.target.menu;
		var menuLevel = this.getLevel(menu);
		var subMenu = e.target.subMenu;
		var subMenuLevel = this.getLevel(subMenu); 
		if (subMenu != this.breadcrumbs[subMenuLevel]) {
			$(this.backElementId).setStyle('cursor', 'pointer');
			if (this.breadcrumbs[subMenuLevel] != null)
				this.breadcrumbs[subMenuLevel].className = 'menu';
			this.breadcrumbs[subMenuLevel] = subMenu;
			menu.className = 'menuLeft';
			menu.getElementsByTagName('h3')[0].className = '';
			subMenu.setStyle('opacity', 0.0);
			subMenu.className = 'menuRight';
			var scroller = new Fx.Style(this.menuContainer, 'margin-left', {
				duration: 500,
				onComplete: function(){
					var links = $ES('a', subMenu);
					if (!window.ie && links.length > 0)
                       links[0].focus();
					var fader = new Fx.Style(subMenu, 'opacity', {duration: 400});
					fader.start(0.0, 1.0);
				}.bind(this)
			});
			scroller.start(-this.leftMenuLevel * this.levelWidth + 'px', -menuLevel * this.levelWidth + 'px');
			this.leftMenuLevel = menuLevel;
		}
		e.preventDefault();
	},

	// Ett steg tilbake i menyen
	//---------------------------
	back: function(){
		if (this.leftMenuLevel > -1 && !this.backInProgress){
			this.backInProgress = true;
			var fader = new Fx.Style(this.breadcrumbs[this.leftMenuLevel + 1], 'opacity', {
				duration: 400,
				onComplete: function(menu){
					menu.className = 'menu';
					var scroller = new Fx.Style(this.menuContainer, 'margin-left', {
						duration: 500,
						onComplete: function(){
							this.breadcrumbs[this.leftMenuLevel + 1].className = 'menu';
							var menu = this.breadcrumbs[--this.leftMenuLevel];
							if (menu != null)
								menu.className = 'menuLeft';
							$(this.backElementId).setStyle('cursor', menu == null ? 'default' : 'pointer');
							var subMenu = this.breadcrumbs[this.leftMenuLevel + 1];
							if (subMenu != null)
								subMenu.className = 'menuRight';
							this.breadcrumbs.pop();
							this.backInProgress = false;
						}.bind(this)
					});
					scroller.start(-this.leftMenuLevel * this.levelWidth + 'px', -(this.leftMenuLevel - 1) * this.levelWidth + 'px');
				}.bind(this)
			});
			fader.start(1.0, 0.0);
		}
	}
});

var navigation;

// Gogogo!
//---------
Window.onDomReady(function(){
	if (!window.ie6)
		navigation = new Navigation();
});
