// namespace
RESA = {};

// rollovers sur les menus
RESA.rollovers = {
	init: function(id) {
		// on récupère le menu dont l'ID est passé en paramètre
		var menu = document.getElementById(id);
		// on quitte si ce menu n'existe pas
		if(!menu) {return;}
		// on récupère les images présentes dans ce menu
		var imgs = menu.getElementsByTagName('img');
		// si aucune image, on quitte
		var preloads = [], p, v;
		// boucle sur les images
		for(var i = 0, img; img = imgs[i]; i++) {
			// on récupère le parent
			p = img.parentNode;
			// on vérifie qu'il s'agit d'un lien, et que l'image a la bonne terminaison
			// sinon on passe à l'itération suivante
			if(p.nodeName.toLowerCase() != 'a' || img.src.indexOf('_off.') < 0) {continue;}
			// création du preload
			preloads[i] = document.createElement('img');
			preloads[i].src = img.src.replace('_off.', '_on.');
			// on est sur le couloir resa, donc on active l'image "Recherche et réservation"
			if(img.src.indexOf('rechercher_off') > -1) {
				img.src = img.src.replace('_off.', '_on.');
				// on passe à l'itération suivante, cette image n'ayant pas besoin de rollover
				continue;
			}
			// cas du menu langue, traité à part
			if(img.src.indexOf('langues_off') > -1) {continue;}
			// assignation des événements clavier/souris
			p.onmouseover = function() {
				RESA.rollovers.exe(this, 'on');
			};
			p.onmouseout = function() {
				RESA.rollovers.exe(this, 'off');
			};
			p.onfocus = function() {
				RESA.rollovers.exe(this, 'on');
			};
			p.onblur = function() {
				RESA.rollovers.exe(this, 'off');
			};
		}
		imgs = preloads = p = null; // nettoyage
	},
	// gestion des rollovers
	// - o = lien initiateur
	// - m = terminaison de l'image
	exe: function(o, m) {
		// on récupère l'image
		var img = o.getElementsByTagName('img')[0];
		// on change le src de l'image en fonction de m
		img.src = m == 'on' ? img.src.replace('_off.', '_on.') : img.src.replace('_on.', '_off.');
		img = null; // nettoyage
	}
};

// masquer/montrer le sous-menu langues
RESA.showHideSubMenu = {
	init: function(id) {
		// on récupère le sous-menu et on quitte si inexistant
		var submenu = document.getElementById(id);
		if(!submenu) {return;}
		// on récupère le lien qui va permettre le masquer/montrer
		var trigger = submenu.previousSibling;
		while(trigger.nodeType != 1) {trigger = trigger.previousSibling;}
		if(trigger.nodeName.toLowerCase() != 'a') {return;}
		// flags de contôle
		RESA.menuMoused = false;
		RESA.menuClickedClosed = false;
		// timer
		RESA.timer = null;
		// on masque le menu
		submenu.className = 'hide';
		// assignation des événements à gérer
		trigger.onclick = function() {
			RESA.showHideSubMenu.exe(this, submenu);
			return false;
		};
		trigger.onmouseover = function() {
			// inutile de lancer le mouseover si le sous-menu est déjà affiché
			if(submenu.className == 'hide') {RESA.showHideSubMenu.exe(this, submenu, true);}
		};
	},
	// gestion du masquer/montrer
	// - mouseover : on se contente d'afficher le menu, et d'appeler sa fermeture via un timeout
	// - click : le menu restera ouvert au 1er click après un mouseover (si timeout non exécuté)
	// les paramètres :
	// - trigger : le lien initiateur de l'événement
	// - submenu : le sous-menu
	// - mouse : flag indiquant si l'on vient d'un mouseover
	exe: function(trigger, submenu, mouse) {
		// on récupère l'image
		var img = trigger.getElementsByTagName('img')[0];
		if(mouse) {
			// si mouseover, on ouvre le menu
			RESA.showHideSubMenu.open(img, submenu, mouse);
		} else {
			// si click
			if((!submenu.className && RESA.menuMoused) || (submenu.className && RESA.menuClickedClosed)) {
				// on ouvre le menu si :
				// - il est en cours d'affichage via un mouseover
				// - il n'est pas affiché et a déjà été fermé via un click
				RESA.showHideSubMenu.open(img, submenu);
			} else {
				// on ferme le menu dans tous les autres cas
				RESA.showHideSubMenu.close(img, submenu);
			}
		}
	},
	// ouverture du menu
	// - img : l'image présente dans le lien d'ouverture
	// - submenu : le sous-menu
	// - mouse : flag indiquant si l'on vient d'un mouseover
	open: function(img, submenu, mouse) {
		// reset des différents flags et du timer
		RESA.menuMoused = false;
		clearTimeout(RESA.timer);
		RESA.timer = null;
		// highlight de l'image
		img.src = img.src.replace('_off.', '_on.');
		// affichage du menu
		submenu.className = '';
		// cas d'un mouseover
		if(mouse) {
			RESA.menuMoused = true;
			RESA.timer = setTimeout(function() {RESA.showHideSubMenu.close(img, submenu, mouse);}, 5000);
		}
	},
	// fermeture du menu
	// - img : l'image présente dans le lien d'ouverture
	// - submenu : le sous-menu
	// - mouse : flag indiquant si l'on vient d'un mouseover
	close: function(img, submenu, mouse) {
		// retour de l'image à l'état "off"
		img.src = img.src.replace('_on.', '_off.');
		// on masque le menu
		submenu.className = 'hide';
		// on ajuste les flags suivant l'action
		if(!mouse) {RESA.menuClickedClosed = true;}
		RESA.menuMoused = false;
	}
};

// chargement
if(window.onload) {
	prevFunctionSof = window.onload;
}

window.onload = function () {
	if(typeof prevFunctionSof != 'undefined') {prevFunctionSof();}
	RESA.rollovers.init('head-menu');
	RESA.rollovers.init('main-menu');
	RESA.showHideSubMenu.init('choose-language');
}
