/*
 * 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() {
		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' || img.src.indexOf('_off.') < 0) {continue;}
			preloads[i] = document.createElement('img');
			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 == 'active') {return;}
		img.src = m == 'on' ? img.src.replace('_off.', '_on.') : img.src.replace('_on.', '_off.');
		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];
			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 a = Box.nodes.get('a[href$=' + l + ']')[0];
		if(!a) {return;}
		Box.nodes.addClass(a.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;
});