/**
 * Build and manage ULIF menu
 * 	=> menu_navigation JS variable must be present
 */
var UlifMenu = Class.create({
	initialize: function(data) {
		this.navigationMenu = data;
		
		if ($('menu') == undefined) {
			mnuElement = new Element('div', {'id': 'menu'});
			if ($('bandeau') == undefined) return;
			$('bandeau').insert(mnuElement);
		}
		
		if ($('sousmenu') == undefined) {
			ssmnuElement = new Element('div', {'id': 'sousmenu'});
			if ($('bandeau') == undefined) return;
			$('bandeau').insert(ssmnuElement);
		}
		
		this.buildMenu();
		// this.buildSousmenu();
	},
	buildMenu: function() {
		if (this.navigationMenu == undefined) return;
		if (!this.navigationMenu.hasOwnProperty('menus')) return;
		if (!this.navigationMenu.hasOwnProperty('urlbase')) return;
		
		// Parse MENU
		var mnuElement = $('menu');
		var navigationMenu = this.navigationMenu;
		var urlbase = navigationMenu.urlbase;
		var requestedmenu = navigationMenu.requestedmenu;
		
		var mnuStr = '';
		
		mnuStr += '<ul>';
		$H(this.navigationMenu.menus).each(function(pair) {
			var mnuCtrl = pair.key;
			var mnuUrl = urlbase + '/' + mnuCtrl;
			var mnuLabel = pair.value;
			
			if (mnuCtrl == requestedmenu) {
				mnuStr += '<li><span class="repere"﻿﻿>' + mnuLabel + '</span></li>';
			} else {
				mnuStr += '<li><a href="' + mnuUrl + '">' + mnuLabel + '</a></li>';
			}
		});
		mnuStr += "</ul>";
		$('menu').update(mnuStr);
		var allElements = $('menu').childElements();
		$('menu').select('a').each(function(elem) {
			var data = elem.href.split('/');
			var ctrl = data[data.length - 1];
			elem.observe('click', function(e) {
				// Détection de la présence d'un sous-menu
				var isSousMenuEnabled = false;
				var res = Object.keys(navigationMenu.sousmenus).indexOf(ctrl);
				if (res != -1) isSousMenuEnabled = true;
				
				if (isSousMenuEnabled) {
					e.stop();
					uMenu.buildSousmenu(ctrl, true);
					if (uMenu.delayHideId != undefined) window.clearTimeout(uMenu.delayHideId);
					uMenu.delayHideId = uMenu.rebuildSousmenu.delay(5, uMenu.navigationMenu.requestedmenu);
					return;
				}
			});
		});
		
		if (requestedmenu != undefined) {
			this.buildSousmenu(requestedmenu);
		}
	},
	rebuildSousmenu: function(requestedmenu) {
		uMenu.buildSousmenu(requestedmenu);
	},
	buildSousmenu: function(requestedmenu) {
		var showOnrequest = false;
		if (arguments.length == 2) {
			showOnrequest = arguments[1];
		}
		
		$('sousmenu').update();
		var requestedsousmenu = this.navigationMenu.requestedsousmenu;
		if (showOnrequest) {
			requestedsousmenu = null;
		}
		
		if (this.navigationMenu == undefined) return;
		if (!this.navigationMenu.hasOwnProperty('sousmenus')) return;
		if (!this.navigationMenu.hasOwnProperty('urlbase')) return;

		if (requestedmenu != '') {
			var urlbase = this.navigationMenu.urlbase;
			var res = Object.keys(this.navigationMenu.sousmenus).indexOf(requestedmenu);
			if (res == -1) return;
			
			var refSousmenu = this.navigationMenu.sousmenus[requestedmenu];
			var ssmnuStr = '';
			
			ssmnuStr += '<ul>';
			$H(refSousmenu).each(function(pair) {
				var mnuCtrl = pair.key;
				var mnuUrl = urlbase + '/' + requestedmenu + '/' + mnuCtrl;
				var mnuLabel = pair.value;
				
				if (mnuCtrl == requestedsousmenu) {
					ssmnuStr += '<li><span class="repere"﻿﻿>' + mnuLabel + '</span></li>';
				} else {
					ssmnuStr += '<li><a href="' + mnuUrl + '">' + mnuLabel + '</a></li>';
				}
			});
			ssmnuStr += "</ul>";
			$('sousmenu').update(ssmnuStr);			
		}
	}
});
