/*
 * Gestion des rollovers et des sous-menus
 */

// init namespace (à  utiliser pour éviter toute collision)
if(!SOF) {var SOF = {};}

// données pour les scripts de cette page
SOF.datasMenus = {};
if(!$$DM) {var $$DM = SOF.datasMenus;}

// rollovers
SOF.rollovers = {
	init: function() {
		// begin : 20071130 - PA - Traitement des menus de NOHETO
		if (typeof NOH_menu != "undefined" && document.getElementById('side-menu')) {
			var MyListe = Box.nodes.get('ul', Box.nodes.get('#side-menu'))[0];
			var MyText = "";
			for (var i in NOH_menu) {
				var actif = "";
				if (i == menuNOHETO)
					actif = " class=\"actif\"";
				MyText += "<li"+actif+"><a href=\""+NOH_menu[i].href+"\" class=\"noheto\" name=\"NOH_menu_"+i+"\">";
				MyText += "<img alt=\""+NOH_menu[i].alt+"\" ";
				if (i == menuNOHETO) 
					MyText += "src=\""+NOH_menu[i].menu_on+"\" />";
				else
					MyText += "src=\""+NOH_menu[i].menu_off+"\" />";

				MyText += "</a></li>\n";
			}
			Box.nodes.insert(MyText, MyListe, 'first');
		}
		// end : 20071130 - PA - Traitement des menus de NOHETO
		var imgs = Box.nodes.get('img');
		var preloads = [], p, v;
		for(var i = 0, img; img = imgs[i]; i++) {
			p = img.parentNode;
			if(p.nodeName.toLowerCase() != 'a') {continue;}
			preloads[i] = document.createElement('img');
			if (Box.nodes.hasClass(p, "noheto")) {
			// NOHETO
				var MyName = Box.nodes.attribute(p, "name");	// retourne le nom du HREF
				MyName = MyName.substring(9);									// retourne le n° de tableau
				// Le menu en cours est il le menu de la page en cours
				if (MyName == menuNOHETO) {
					continue;
				}

				preloads[i].src = NOH_menu[MyName].menu_on;		// préload d image
				Box.events.add(p, 'mouseover', function() {SOF.rollovers.NOHexe(this, 'on');});
				Box.events.add(p, 'mouseout', function() {SOF.rollovers.NOHexe(this, 'off');});
				Box.events.add(p, 'focus', function() {SOF.rollovers.NOHexe(this, 'on');});
				Box.events.add(p, 'blur', function() {SOF.rollovers.NOHexe(this, 'off');});
			} else {
				if (img.src.indexOf('_off') < 0)
					continue;
				var tabImg = img.src.split("/");
				var fullImg = tabImg[tabImg.length-1];
				var imgName = fullImg.substring(0, fullImg.length-8);
				var imgExt = fullImg.substring(fullImg.length-8, fullImg.length-4);
				if ( (typeof initMainMenuItem != 'undefined' && imgName == initMainMenuItem) 
							|| typeof initSideMenuItem != 'undefined' &&  imgName == initSideMenuItem ) {
					if (imgExt == "_off") {
						img.src = img.src.replace('_off', '_on');
					}
					continue;
				}
				preloads[i].src = img.src.replace('_off', '_on');
				Box.events.add(p, 'mouseover', function() {SOF.rollovers.exe(this, 'on');});
				Box.events.add(p, 'mouseout', function() {SOF.rollovers.exe(this, 'off');});
				Box.events.add(p, 'focus', function() {SOF.rollovers.exe(this, 'on');});
				Box.events.add(p, 'blur', function() {SOF.rollovers.exe(this, 'off');});
				if(typeof initMainMenuItem != 'undefined' && img.src.indexOf(initMainMenuItem + '_off') > -1 
				|| typeof initSideMenuItem != 'undefined' && img.src.indexOf(initSideMenuItem + '_off') > -1) {
					v = p;
					while(v.nodeName.toLowerCase() != 'div') {v = v.parentNode;}
					if(v.id != 'main-menu' && v.id != 'side-menu' && !Box.nodes.hasClass(v, 'push')) {continue;}
					img.className = 'active';
					$$DM.activeImg = img;
					if(Box.nodes.hasClass(p, 'hasSubmenu')) {
						$$DM.activeMenu = Box.nodes.next(p);
						img.src = Box.nodes.attribute(p, 'href') == '#' ? img.src.replace('_off', '_in') : img.src.replace('_off', '_on');
					} else {
						img.src = img.src.replace('_off', '_on');
					}
				}
			}
		}
		imgs = null, preloads = null; p = null; v = null; // nettoyage
	},
	
	exe: function(o, m, ajax) {
		if(!ajax && (($$DM.activeItem && $$DM.activeItem == o) || ($$DM.langItem && $$DM.langItem == o))) {return;}
		var img = Box.nodes.get('img', [o])[0];
		if(img.className == 'actif') {return;}
		img.src = m == 'on' ? img.src.replace('_off', '_on') : img.src.replace('_on', '_off');
		img = null; // nettoyage
	},
	NOHexe: function(o, m) {
		var img = Box.nodes.get('img', [o])[0];
		if(Box.nodes.hasClass(img, 'actif')) {return;}
		var p = img.parentNode;
		if(p.nodeName.toLowerCase() != 'a') {return;}
		var MyID = Box.nodes.attribute(o, "name");	// retourne le nom du HREF
		MyID = MyID.substring(9);									// retourne le n° de tableau

		if (m == 'on')
			img.src = NOH_menu[MyID].menu_on;
		if (m == 'off')
			img.src = NOH_menu[MyID].menu_off;

		MyID = null; img = null; // nettoyage
	} 
};

// sous-menus
SOF.submenus = {
	init: function() {
		var sub = Box.nodes.get('a.hasSubmenu'), l, img;
		if(!sub.length) {return;}
		for(var i = 0, l; l = sub[i]; i++) {
			img = Box.nodes.get('img', [l])[0];
			var v = img;
			while(v.nodeName.toLowerCase() != 'div') {v = v.parentNode;}
			if (v.id != "side-menu") {
				if(img && ((img.src.indexOf('_in.') < 0 && Box.nodes.attribute(l, 'href') == '#') || img.className != 'active')) {
					Box.nodes.addClass(Box.nodes.next(l), 'hide');
				}
			}
			if(img.src.indexOf('langues') > -1) {
				Box.events.add(l, 'mouseover', function(e) {
					SOF.submenus.exe(e, this, Box.nodes.next(this), 'mouse');
				});
			}
			Box.events.add(l, 'click', function(e) {
				SOF.submenus.exe(e, this, Box.nodes.next(this));
			});
		}
		sub = null; img = null; // nettoyage
	},
	
	exe: function(e, l, m, mouse) {
		if(Box.nodes.attribute(l, 'href') != '#') {return;}
		e.preventDefault();
		var img = Box.nodes.get('img', [l])[0];
		if(Box.nodes.hasClass(m, 'hide') || $$DM.timer) {
			if(m.id  == 'choose-language') {
				if($$DM.timer) {
					clearTimeout($$DM.timer);
					$$DM.timer = null;
				}
				img.src = img.src.replace('_off.', '_on.');
				$$DM.langItem = l;
				$$DM.langMenu = m;
				$$DM.langImg = img;
				$$DM.langues = true;
				if(mouse) {$$DM.timer = setTimeout(function() {SOF.submenus.close();}, 5000);}
			} else {
				if($$DM.activeMenu) {Box.nodes.addClass($$DM.activeMenu, 'hide');}
				if($$DM.activeImg) {$$DM.activeImg.src = $$DM.activeImg.src.indexOf('_on') > -1 ? $$DM.activeImg.src.replace('_on.', '_off.') : $$DM.activeImg.src.replace('_in.', '_off.');}
				img.src = img.src.indexOf('_on.') > -1 ? img.src.replace('_on.', '_in.') : img.src.replace('_off.', '_in.');
				$$DM.activeItem = l;
				$$DM.activeMenu = m;
				$$DM.activeImg = img;
			}
			Box.nodes.removeClass(img, 'active');
			Box.nodes.removeClass(m, 'hide');
		} else {
			if(mouse) {return;}
			if(m.id  == 'choose-language') {
				$$DM.langImg.src = $$DM.langImg.src.replace('_in.', '_off.');
				Box.nodes.removeClass($$DM.langImg, 'active');
				Box.nodes.addClass($$DM.langMenu, 'hide');
				$$DM.langItem = null;
				$$DM.langMenu = null;
				$$DM.langImg = null;
			} else {
				$$DM.activeImg.src = $$DM.activeImg.src.replace('_in.', '_off.');
				Box.nodes.removeClass($$DM.activeImg, 'active');
				Box.nodes.addClass($$DM.activeMenu, 'hide');
				$$DM.activeItem = null;
				$$DM.activeMenu = null;
				$$DM.activeImg = null;
			}
		}
		img = null, l = null, m = null; // nettoyage
	},
	
	close: function() {
		if($$DM.langImg && $$DM.langMenu) {
			$$DM.langImg.src = $$DM.langImg.src.replace('_on.', '_off.');
			Box.nodes.addClass($$DM.langMenu, 'hide');
		}
		$$DM.langues = false; 
		$$DM.langItem = null;
		$$DM.langMenu = null;
		$$DM.langImg = null;
		clearTimeout($$DM.timer);
		$$DM.timer = null;
	}
};

// activation des liens de sous-menus
SOF.subMenuItem = {
	init: function() {
		var l = location.href;
		l = l.substring(l.lastIndexOf($$L + '/'));
		var tab_a = Box.nodes.get('a[href$=' + l + ']');
		if(tab_a.length == 0) return;
		for(i=0;i<tab_a.length;i++){Box.nodes.addClass(tab_a[i].parentNode, 'actif');}
	}
};

// activation des 1ers éléments d'une collection
SOF.firstItem = {
	init: function() {
		var menu = Box.nodes.get('#side-menu');
		var tools = Box.nodes.get('#tools');
		var main = Box.nodes.get('#main');
		if(menu[0]) {Box.nodes.addClass(Box.nodes.get('li', menu)[0], 'first');}
		if(tools[0]) {Box.nodes.addClass(Box.nodes.get('li', tools)[0], 'first');}
		if(main[0]) {
			var items = Box.nodes.get('.item', main), c = 0;
			if(!items.length) {return;}
			$$DM.lastItemParent = items[0].parentNode;
			for(var i = 0, t; t = items[i]; i++) {
				c = i == 0 || t.parentNode != $$DM.lastItemParent ? 0 : c + 1;
				if(c == 0) {Box.nodes.addClass(t, 'first');}
				$$DM.lastItemParent = t.parentNode;
			}
			items = null; t = null; // nettoyage
		}
		menu = null; tools = null; main = null; // nettoyage
	}
};

// listes hôtels : accomodation des bandeaux externes
SOF.externalNav = {
	init: function() {
		var bandeau = Box.nodes.get('#wrapper-bandeau-inner')[0];
		var menu = Box.nodes.get('#wrapper-menu')[0];
		if(!bandeau || !menu) {return;}
		menu && bandeau ? Box.nodes.addClass(bandeau, 'internal') : Box.nodes.addClass(bandeau, 'external');
	}
};

// chargement des fonctions
Box.events.load(SOF.rollovers.init);
Box.events.load(SOF.submenus.init);
Box.events.load(SOF.firstItem.init);
Box.events.load(SOF.subMenuItem.init);
Box.events.load(SOF.externalNav.init);

// déchargement (nettoyage variables)
Box.events.add(window, 'unload', function() {
	$$DM = null;
	SOF.datasMenus = null;
});
