/**
 * Espace de nom F6_SFBT
 */

var F6 = window.F6 || {};

/**
 * Nav
 */

// Constructeur
F6.Nav = function(oOptions) {
	this.setOptions(oOptions);
	this.addWindowBehaviour();
};

// Prototype
F6.Nav.prototype = {
	
	options: {
		'menuClass': /\bk64_nav\b/,
		'titleClass': /\bkn_title\b/,
		'contentClass': /\bkn_content\b/,
		'showClass': {
			'regexp': /\bkn_show\b/,
			'name': 'kn_show'
		},
		'itemClass': /\bkn_item\b/,
		'currentClass': 'kn_current',
		'timer': 500
	},
	
	// Affecte des options
	setOptions: function(oOptions) {
		if(typeof oOptions === 'object') {
			for(var _sProp in oOptions) {
				if(oOptions.hasOwnProperty(_sProp)) {
					if(!this[_sProp]) {
						this.options[_sProp] = oOptions[_sProp];
					}
					else {
						this[_sProp](oOptions[_sProp]);
					}
				}
			}
		}
	},
	
	// Ajout d'une image de fond derriere les sous-menus au chargement de la page
	loadBkg: function(bLoad) {
		if(bLoad === true && !window.attachEvent) {
			var _oThat = this;
			this.addEvent(window, 'load', function(e) { return _oThat.addBkg.apply(_oThat, [e]); });
		}
	},
	
	// Ajoute une image de fond au sein de chaque element de liste d'un sous-menu
	addBkg: function(e) {
		var _aEls = document.getElementsByTagName('*');
		var _iEls = _aEls.length;
		while(--_iEls >= 0) {
			if(this.options.contentClass.test(_aEls[_iEls].className)) {
				var _aLis = _aEls[_iEls].getElementsByTagName('li');
				var _iLis = _aLis.length;
				while(--_iLis >= 0) {
					var _oImg = document.createElement('img');
					_oImg.src = '/img/bkgMenu.gif';
					_oImg.alt = '';
					_oImg.className = 'kn_bkgMenu';
					_aLis[_iLis].insertBefore(_oImg, _aLis[_iLis].firstChild);
				}
			}
		}
	},
	
	// Ajout d'une iframe derriere les sous-menus au chargement de la page
	loadIFrame: function(bLoad) {
		if(bLoad === true) {
			var _oThat = this;
			this.addEvent(window, 'load', function(e) { return _oThat.addIFrame.apply(_oThat, [e]); });
		}
	},
	
	// Ajoute une iframe au sein de chaque element de liste d'un sous-menu
	addIFrame: function(e) {
		var _aEls = document.getElementsByTagName('*');
		var _iEls = _aEls.length;
		while(--_iEls >= 0) {
			if(this.options.contentClass.test(_aEls[_iEls].className)) {
				var _oIFrame = document.createElement('iframe');
				_oIFrame.title = 'iframe sans contenu permettant de faire passer le menu par dessus les autres elements';
				_oIFrame.className = 'kn_iframe';
				if(window.attachEvent && typeof XMLHttpRequest == "undefined"){
					_oIFrame.style.height = _aEls[_iEls].scrollHeight - 20 + "px";
				}else{
					_oIFrame.style.height = _aEls[_iEls].scrollHeight + "px";
				}
				_oIFrame.frameborder = "0";
				_aEls[_iEls].insertBefore(_oIFrame, _aEls[_iEls].firstChild);
				_aEls[_iEls].className += ' kn_withIFrame';
			}
		}
	},
	
	// Chargement d'ARIA
	setupARIA: function(bLoad) {
		if(bLoad) {
			this.ARIA = true;
			var _oThat = this;
			this.addEvent(window, 'load', function(e) { return _oThat.addARIAAttributes.apply(_oThat); });
		}
	},
	
	// Definit un attribut et sa valeur sur un element
	addAttribute: function(oEl, sAttr, sValue) {
		if(typeof oEl === 'object' && oEl.nodeType === 1 && typeof sAttr === 'string' && typeof sValue !== 'undefined') {
			oEl.setAttribute(sAttr, sValue);
		}
	},
	
	// Ajoute les attributs ARIA au document
	addARIAAttributes: function() {
		this.addAttribute(document.getElementById('menu'), 'role', 'navigation');
		//this.addAttribute(document.getElementById('middleContent'), 'role', 'menubar');
		var _aEls = document.getElementsByTagName('*');
		var _iEls = _aEls.length;
		while(--_iEls >= 0) {
			if(this.options.menuClass.test(_aEls[_iEls].className)) {
				this.addAttribute(_aEls[_iEls], 'role', 'presentation');
				this.addAttribute(_aEls[_iEls], 'aria-hidden', 'false');
				var _aEls2 = _aEls[_iEls].getElementsByTagName('*');
				var _iInd = 0;
				var _iEls2 = _aEls2.length;
				var _iIndex = 0;
				var _bFirstLink = true;
				while(_iInd < _iEls2) {
					if(_aEls2[_iInd].nodeName.toLowerCase() === 'a') {
						if(_bFirstLink) {
							var _sValue = 0;
							_bFirstLink = false;
						}
						else {
							var _sValue = -1;
						}
						this.addAttribute(_aEls2[_iInd], 'tabindex', _sValue);
						this.addAttribute(_aEls2[_iInd], 'role', 'menuitem');
					}
					if(this.options.itemClass.test(_aEls2[_iInd].className)) {
						this.addAttribute(_aEls2[_iInd], 'role', 'menu');
						this.addAttribute(_aEls2[_iInd], 'groupindex', 0);
						this.addAttribute(_aEls2[_iInd], 'index', _iIndex++);
					}
					if(this.options.titleClass.test(_aEls2[_iInd].className)) {
						this.addAttribute(_aEls2[_iInd], 'aria-haspopup', 'true');
					}
					if(this.options.contentClass.test(_aEls2[_iInd].className)) {
						this.addAttribute(_aEls2[_iInd], 'aria-hidden', 'true');
						this.addAttribute(_aEls2[_iInd], 'role', 'presentation');
					}
					_iInd++;
				}
			}
		}
	},
	
	// Precharge des styles
	preload: function(oOptions) {
		if(!oOptions.regexp.test(document.documentElement.className)) {
			document.documentElement.className += ' ' + oOptions.name;
		}
	},
	
	// Ajoute un gestionnaire d'evenements
	addEvent: function(oEl, sEvType, fn, bCapture) {
		return document.addEventListener ? oEl.addEventListener(sEvType, fn, bCapture || false) : oEl.attachEvent ? oEl.attachEvent('on' + sEvType, fn) : false;
	},
		
	// Definit des comportements
	addWindowBehaviour: function() {
		var _oThat = this;
		this.addEvent(window,'load',function(e) { return _oThat.addMenuBehaviour.apply(_oThat, [e]); });
	},
	
	// Ajoute des comportements aux entetes de menu
	addMenuBehaviour: function(e) {
		var _aEls = document.getElementsByTagName('*');
		var _iEls = _aEls.length;
		var _oThat = this;
		while(--_iEls >= 0) {
			if(_aEls[_iEls].nodeType == 1 && !this.isPartOfMenu(_aEls[_iEls])) {
			
				// Lorsqu'un element de la page non inclus dans un menu prend le focus
				this.addEvent(_aEls[_iEls], 'focus', function(e) { return _oThat.closeAllMenus.apply(_oThat); });
			}
			if(this.ARIA && this.isFocusableElement(_aEls[_iEls]) && this.isPartOfMenu(_aEls[_iEls])) {
			
				// Lorsque l'utilisateur appuie sur une touche de son clavier
				this.addEvent(_aEls[_iEls], 'keydown', (function(oSrc) { return function(e) { return _oThat.manageKey.apply(_oThat, [e, oSrc]); }; })(_aEls[_iEls]));
			}
			if(_aEls[_iEls].nodeType == 1 && this.options.itemClass.test(_aEls[_iEls].className)) {
				var _aFocEls = this.getFocusableElements(_aEls[_iEls]);
				var _iFocEls = _aFocEls.length;
				
				while(--_iFocEls >= 0) {
				
					// Lorsqu'un element focusable prend le focus
					this.addEvent(_aFocEls[_iFocEls], 'focus', (function(oEl) { return function(e) { return _oThat.setCurrent.apply(_oThat, [e, oEl]); }; })(_aEls[_iEls]));
					
					// Lorsqu'un element focusable perd le focus
					this.addEvent(_aFocEls[_iFocEls], 'blur', (function(oEl) { return function(e) { return _oThat.delCurrent.apply(_oThat, [e, oEl]); }; })(_aEls[_iEls]));
					
					// pour ie6 : modifie la taille des liens du sous-menu pour qu'ils soient aussi large que le ul qui les entoure
					var _oLine = _aFocEls[_iFocEls].parentNode.parentNode.parentNode.parentNode.parentNode;
					
					if(/\bkn_content\b/.test(_oLine.className)){
						setTimeout((function (_oLine){
							return function(){
								_oLine.style.visibility = "visible";
								_oLine.style.display = "none";
							}
						})(_oLine), 1000);
					}
					
				}
				
				// Lorsqu'un sous-menu est survole
				this.addEvent(_aEls[_iEls], 'mouseover', (function(oSrc) { return function(e) { return _oThat.openSsMenu.apply(_oThat, [e, oSrc]); }; })(_aEls[_iEls]));
				
				// Si ARIA est inactif et lorsqu'un sous-menu prend le focus
				if(!this.ARIA) {
					//this.addEvent(_aFocusableElements[0], 'focus', (function(oSrc) { return function(e) { return _oThat.openSsMenu.apply(_oThat, [e, oSrc]); }; })(_aEls[_iEls]));
				}
				
				// Lorsqu'on quitte un sous-menu
				this.addEvent(_aEls[_iEls], 'mouseout', (function(oSrc) { return function(e) { return _oThat.closeSsMenu.apply(_oThat, [e, oSrc]); }; })(_aEls[_iEls]));
			}
		}
	},
	
	// Ajoute la classe current a un element
	setCurrent: function(e, oEl) {
		oEl.className += ' ' + this.options.currentClass;
	},
	
	// Supprime la classe current d'un element
	delCurrent: function(e, oEl) {
		oEl.className = oEl.className.replace(this.options.currentClass, '');
	},
	
	// Annule la propagation de l'evenement et l'action par defaut d'un element
	stopEvent: function(e) {
		if(e && e.stopPropagation && e.preventDefault) {
			e.stopPropagation();
			e.preventDefault();
		}
		else if(e && window.event) {
			window.event.cancelBubble = true;
			window.event.returnValue = false;
		}
		return false;
	},
	
	// Verifie qu'un element peut prendre le focus
	isFocusableElement: function(oEl) {
		if(oEl && oEl.nodeType == 1) {
			switch(oEl.nodeName.toLowerCase()) {
				case 'a':
				case 'area':
				case 'button':
				case 'input':
				case 'object':
				case 'select':
				case 'textarea':
					return true;
				default:
					return false;
			}
		}
		return false;
	},
	
	// Renvoie le tableau des elements focusables d'un noeud cible
	getFocusableElements: function(oContext) {
		var _oContext = oContext || document;
		var _aFocusableElements = [];
		var _aEls = _oContext.getElementsByTagName('*');
		for(var _iEl = 0, _iCount = _aEls.length; _iEl < _iCount; _iEl++) {
			switch(_aEls[_iEl].nodeName.toLowerCase()) {
				case 'a':
				case 'area':
				case 'button':
				case 'input':
				case 'object':
				case 'select':
				case 'textarea':
					_aFocusableElements.push(_aEls[_iEl]);
			}
		}
		return _aFocusableElements;
	},
	
	// Definit des actions en fonction de la touche pressee par l'utilisateur
	manageKey: function(e, oSrc) {
		switch(e.keyCode) {
			case 27: // escape
				
				// On coupe la propagation de l'evenement et l'action par defaut de l'element
				this.stopEvent(e);
				
				// On memorise le sous-menu courant
				var _oParent = oSrc.parentNode;
				while(_oParent && !this.options.itemClass.test(_oParent.className)) {
					_oParent = _oParent.parentNode;
				}
				
				// Si le sous-menu courant est apparent
				if(this.options.showClass.regexp.test(_oParent.className)) {
				
					// On le masque
					_oParent.className = _oParent.className.replace(this.options.showClass.name, '');
				
					// et on indique via l'attribut aria-hidden que le sous-menu est masque
					var _aEls = _oParent.getElementsByTagName('*');
					var _iEls = _aEls.length;
					while(--_iEls >= 0) {
						if(this.options.contentClass.test(_aEls[_iEls].className)) {
							this.addAttribute(_aEls[_iEls], 'aria-hidden', 'true');
						}
					}
					
					// On reinitialise l'attribut tabindex du premier element focusable du sous-menu et on lui donne le focus
					var _oFirstFocusableElement = this.getFocusableElements(_oParent)[0];
					if(_oFirstFocusableElement) {
						this.addAttribute(_oFirstFocusableElement, 'tabindex', '0');
						return _oFirstFocusableElement.focus();
					}
				}
				
				// sinon
				else {
				
					// On reinitialise l'attribut tabindex des elements focusables de chaque menu
					var _aEls = document.getElementsByTagName('*');
					var _iEls = _aEls.length;
					while(--_iEls >= 0) {
						if(this.options.menuClass.test(_aEls[_iEls].className)) {
							var _aMenuFocEls = this.getFocusableElements(_aEls[_iEls]);
							var _iMenuFocEls = _aMenuFocEls.length;
							while(--_iMenuFocEls >= 0) {
								this.addAttribute(_aMenuFocEls[_iMenuFocEls], 'tabindex', _iMenuFocEls == 0 ? '0' : '-1');
							}
						}
					}
					
					// On donne le focus au premier element focusable suivant le menu
					var _aFocEls = this.getFocusableElements();
					for(var _iFocEl = 0, _iCount = _aFocEls.length; _iFocEl < _iCount; _iFocEl++) {
						if(!this.isPartOfMenu(_aFocEls[_iFocEl])) {
							var _oPrevious = _aFocEls[_iFocEl - 1];
							if(_oPrevious && this.isPartOfMenu(_oPrevious)) {
								return _aFocEls[_iFocEl].focus();
							}
						}
					}
				}
			break;
			case 37: // left
			case 39: // right
				
				// On coupe la propagation de l'evenement et l'action par defaut de l'element
				this.stopEvent(e);
				
				// On memorise le sous-menu apparent
				var _oParent = oSrc.parentNode;
				while(_oParent && !this.options.itemClass.test(_oParent.className)) {
					_oParent = _oParent.parentNode;
				}
				
				// On memorise le menu englobant
				var _oMenu = _oParent.parentNode;
				while(_oMenu && !this.options.menuClass.test(_oMenu.className)) {
					_oMenu = _oMenu.parentNode;
				}
				
				// On definit le tableau des sous-menus du menu englobant
				var _aEls = _oMenu.getElementsByTagName('*');
				var _iEls = _aEls.length;
				var _aItems = [];
				while(--_iEls >= 0) {
					if(this.options.itemClass.test(_aEls[_iEls].className)) {
						_aItems.push(_aEls[_iEls]);
					}
				}
				var _iItems = _aItems.length;
				
				// On parcours le tableau des sous-menus
				while(--_iItems >= 0) {
				
					// Si le sous-menu courant est egal au sous-menu memorise
					if(_aItems[_iItems] == _oParent) {
						var _oTarget = _aItems[_iItems + (e.keyCode == 39 ? (- 1) : 1)];
						
						// Si le sous-menu vise existe
						if(_oTarget) {
						
							// On met a jour l'attribut tabindex de la source
							this.addAttribute(oSrc, 'tabindex', '-1');
							
							// On masque le sous-menu apparent
							_oParent.className = _oParent.className.replace(this.options.showClass.name, '');
							
							// et on met a jour l'attribut aria-hidden du contenu du sous-menu
							var _aNodes = _oParent.getElementsByTagName('*');
							var _iNodes = _aNodes.length;
							while(--_iNodes >= 0) {
								if(this.options.contentClass.test(_aNodes[_iNodes].className)) {
									this.addAttribute(_aNodes[_iNodes], 'aria-hidden', 'true');
								}
							}
							
							// On memorise le premier element focusable du sous-menu cible
							var _oFirstFocusableElement = this.getFocusableElements(_oTarget)[0];
							
							// Si cet element existe, on met a jour son attribut tabindex et on lui donne le focus
							if(_oFirstFocusableElement) {
								this.addAttribute(_oFirstFocusableElement, 'tabindex', '0');
								return _oFirstFocusableElement.focus();
							}
						}
					}
				}
			break;
			case 38: // up
			case 9: // tab
			case 40: // down
				
				// On coupe la propagation de l'evenement et l'action par defaut de l'element
				this.stopEvent(e);
				
				// On memorise le sous-menu courant
				var _oParent = oSrc.parentNode;
				while(_oParent && !this.options.itemClass.test(_oParent.className)) {
					_oParent = _oParent.parentNode;
				}
				
				// Si le sous-menu est masque, on l'affiche et on l'indique en modifiant l'attribut aria-hidden
				if(!this.options.showClass.regexp.test(_oParent.className)) {
					_oParent.className += ' ' + this.options.showClass.name;
					var _aEls = _oParent.getElementsByTagName('*');
					var _iEls = _aEls.length;
					while(--_iEls >= 0) {
						if(this.options.contentClass.test(_aEls[_iEls].className)) {
							this.addAttribute(_aEls[_iEls], 'aria-hidden', 'false');
						}
					}
				}
				
				// On recupere les elements focusables du sous-menu apparent
				var _aAs = this.getFocusableElements(_oParent);
				var _iAs = _aAs.length;
				
				// puis on parcourt cet ensemble
				while(--_iAs >= 0) {
				
					// Si l'element courant est egal a la source
					if(_aAs[_iAs] == oSrc) {
					
						// On met a jour l'attribut tabindex de la source
						this.addAttribute(oSrc, 'tabindex', '-1');
						
						// On memorise l'element cible
						var _iInd = (e.keyCode == 40 || (e.keyCode == 9 && !e.shiftKey)) ? 1 : (-1);
						var _oTarget = _aAs[_iAs + _iInd];
						
						// Si l'element cible existe, on met a jour son attribut tabindex et on lui donne le focus
						if(_oTarget) {
							this.addAttribute(_oTarget, 'tabindex', '0');
							return _oTarget.focus();
						}
						
						// Sinon
						else {
						
							// On masque le sous-menu apparent
							_oParent.className = _oParent.className.replace(this.options.showClass.name, '');
							
							// On indique via l'attribut aria-hidden que le sous-menu est masque
							var _aEls = _oParent.getElementsByTagName('*');
							var _iEls = _aEls.length;
							while(--_iEls >= 0) {
								if(this.options.contentClass.test(_aEls[_iEls].className)) {
									this.addAttribute(_aEls[_iEls], 'aria-hidden', 'true');
								}
							}
							
							// On memorise le tableau des elements focusable du menu
							var _aMenuAs = this.getFocusableElements(_oParent.parentNode);
							var _iMenuAs = _aMenuAs.length;
							
							// On parcours ce tableau
							while(--_iMenuAs >= 0) {
							
								// Si l'element focusable est egal a la source
								if(_aMenuAs[_iMenuAs] == oSrc) {
								
									// On met a jour l'attribut tabindex de la source
									this.addAttribute(oSrc, 'tabindex', '-1');
									
									// On memorise l'element focusable cible
									_iInd = (e.keyCode == 40 || (e.keyCode == 9 && !e.shiftKey)) ? 1 : (-1);
									_oTarget = _aMenuAs[_iMenuAs + _iInd];
									
									// S'il existe,
									if(_oTarget) {
										
										// Si l'utilisateur a appuye sur "shift+tab" ou "up"
										if((e.keyCode == 9 && e.shiftKey) || e.keyCode == 38) {
										
											// On memorise le sous-menu dans lequel se trouve l'element cible
											var _oSsMenu = _oTarget.parentNode;
											while(_oSsMenu && !this.options.itemClass.test(_oSsMenu.className)) {
												_oSsMenu = _oSsMenu.parentNode;
											}
											
											// Si le sous-menu existe
											if(_oSsMenu) {
											
												// On l'affiche
												_oSsMenu.className += ' ' + this.options.showClass.name;
											
												// et on indique via l'attribut aria-hidden que le sous-menu est ouvert
												var _aNodes = _oSsMenu.getElementsByTagName('*');
												var _iNodes = _aNodes.length;
												while(--_iNodes >= 0) {
													if(this.options.contentClass.test(_aNodes[_iNodes].className)) {
														this.addAttribute(_aNodes[_iNodes], 'aria-hidden', 'false');
													}
												}
											}
										}
										
										// On met a jour l'attribut tabindex de l'element cible
										this.addAttribute(_oTarget, 'tabindex', '0');
										
										// et on lui donne le focus
										return _oTarget.focus();
									}
									
									// Sinon
									else {
									
										// On reinitialise l'attribut tabindex du premier element focusable de chaque menu
										var _aMenus = document.getElementsByTagName('*');
										var _iMenu = _aMenus.length;
										while(--_iMenu >= 0) {
											if(this.options.menuClass.test(_aMenus[_iMenu].className)) {
												this.addAttribute(this.getFocusableElements(_aMenus[_iMenu])[0], 'tabindex', '0');
											}
										}
										
										// On recupere le tableau des elements focusables de la page
										var _aFocusableElements = this.getFocusableElements();
										var _iFocusableElements = _aFocusableElements.length;
										
										// On parcours ce tableau
										while(--_iFocusableElements >= 0) {
										
											// Si l'element courant est egal a la source
											if(_aFocusableElements[_iFocusableElements] == oSrc) {
											
												// On memorise l'element focusable cible
												_iInd = (e.keyCode == 40 || (e.keyCode == 9 && !e.shiftKey)) ? 1 : (-1);
												_oTarget =  _aFocusableElements[_iFocusableElements + _iInd];
												
												// S'il existe, on lui donne le focus
												if(_oTarget) {
													return _oTarget.focus();
												}
											}
										}
									}
								}
							}
						}
					}
				}
			break;
		}
	},
	
	// Verifie si un element fait parti d'un menu
	isPartOfMenu: function(oEl) {
		while(oEl && oEl.parentNode) {
			oEl = oEl.parentNode;
			if(this.options.menuClass.test(oEl.className)) {
				return true;
			}
		}
		return false;
	},
	
	// Ferme l'ensemble des sous-menus
	closeAllMenus: function(e, oSrc) {
		var _aEls = document.getElementsByTagName('*');
		var _iEls = _aEls.length;
		while(--_iEls >= 0) {
			if(this.options.menuClass.test(_aEls[_iEls].className)) {
				var _aIntEls = _aEls[_iEls].getElementsByTagName('*');
				var _iIntEls = _aIntEls.length;
				while(--_iIntEls >= 0) {
					if(this.options.showClass.regexp.test(_aIntEls[_iIntEls].className)) {
						_aIntEls[_iIntEls].className = _aIntEls[_iIntEls].className.replace(this.options.showClass.name, '');
						if(this.ARIA) {
							var _aInsEls = _aIntEls[_iIntEls].getElementsByTagName('*');
							var _iInsEls = _aInsEls.length;
							while(--_iInsEls >= 0) {
								if(this.options.contentClass.test(_aInsEls[_iInsEls].className)) {
									this.addAttribute(_aInsEls[_iInsEls], 'aria-hidden', 'true');
								}
							}
						}
					}
				}
			}
		}
	},
	
	// Verifie si un conteneur contient un noeud
	contains: function(oContainer, oContainee) {
		if(!(oContainer && oContainee)) {
			return;
		}
		for(var _oN = oContainee; _oN && _oN != oContainer; _oN = _oN.parentNode);
		return _oN;
	},
	
	// Ouvre un sous-menu
	openSsMenu: function(e, oSrc) {
		var oThis = this;
		if(oThis.timer) {
			clearTimeout(oThis.timer);
		}
		var _oMenu = oSrc.parentNode;
		var _aEls = _oMenu.getElementsByTagName('*');
		var _iEls = _aEls.length;
		while(--_iEls >= 0) {
			if(_aEls[_iEls] && _aEls[_iEls].nodeType == 1 && !this.contains(oSrc,(e.relatedTarget || e.fromElement))) {
				_aEls[_iEls].className = _aEls[_iEls].className.replace(this.options.showClass.name, '');
				if(_aEls[_iEls].getElementsByTagName('div')[0] && /\bkn_content\b/.test(_aEls[_iEls].getElementsByTagName('div')[0])){
					_aEls[_iEls].getElementsByTagName('div')[0].style.display = "none";
				}
				if(this.ARIA) {
					var _aInsEls = _aEls[_iEls].getElementsByTagName('*');
					var _iInsEls = _aInsEls.length;
					while(--_iInsEls >= 0) {
						if(this.options.contentClass.test(_aInsEls[_iInsEls].className)) {
							this.addAttribute(_aInsEls[_iInsEls], 'aria-hidden', 'true');
						}
					}
				}
			}
		}
		if(!this.options.showClass.regexp.test(oSrc.className)) {
			if(this.timerOpenSSMENU) clearTimeout(this.timerOpenSSMENU);
			this.timerOpenSSMENU = setTimeout(function(){
				oSrc.className += ' ' + oThis.options.showClass.name;
				if(oSrc.getElementsByTagName('div')[0]){
					oSrc.getElementsByTagName('div')[0].style.display = "block";
				}
			},300);
			if(this.ARIA) {
				var _aInsEls = oSrc.getElementsByTagName('*');
				var _iInsEls = _aInsEls.length;
				while(--_iInsEls >= 0) {
					if(this.options.contentClass.test(_aInsEls[_iInsEls].className)) {
						this.addAttribute(_aInsEls[_iInsEls], 'aria-hidden', 'false');
					}
				}
			}
		}
		
		
		
	},
	
	// Ferme un sous-menu
	closeSsMenu: function(e, oSrc) {
		var _oThat = this;
		var _oRelatedTarget = e.relatedTarget || e.toElement;
		var _close = function() {
			if(!_oThat.contains(oSrc,_oRelatedTarget)) {
				oSrc.className = oSrc.className.replace(_oThat.options.showClass.name, '');
				if(oSrc.getElementsByTagName('div')[0]){
					oSrc.getElementsByTagName('div')[0].style.display = "none";
				}
				if(_oThat.ARIA) {
					var _aInsEls = oSrc.getElementsByTagName('*');
					var _iInsEls = _aInsEls.length;
					while(--_iInsEls >= 0) {
						if(_oThat.options.contentClass.test(_aInsEls[_iInsEls].className)) {
							_oThat.addAttribute(_aInsEls[_iInsEls], 'aria-hidden', 'true');
						}
					}
				}
			}
		};
		if(!isNaN(this.options.timer)) {
			_oThat.timer = setTimeout(_close, this.options.timer);
		}
		else {
			_close();
		}
	}
};

// Instance
/*F6.myNav = new F6.Nav({
	'preload': {                           // Activation du prechargement des styles "hasJS"
		'regexp':/\bhasJS\b/,              // Regexp correspondante
		'name': 'hasJS'                    // Classe CSS correspondante
	},
	'titleClass':/\bkn_title\b/,           // Classe CSS activant l'ouverture des menus
	'loadBkg': true,                       // Ajout d'une image de fond pour prevoir la desactivation des couleurs
	'loadIFrame': true,                    // Ajout d'une iframe de fond pour prevoir les superpositions aux Flash
	'setupARIA': false,                    // Implementation d'ARIA
	'timer': 500                           // Temporisation de fermeture pour faciliter l'utilisation du menu
});*/

addEvent(window, "load", function (){
	lightNav("menu");
	if(/msie/i.test(navigator.userAgent)){
		var ul = getElementsByClassName(document.body, "ul", "buttons2")[0]; 
		ul.innerHTML += "<li class='cornerLeft'></li><li class='cornerRight'></li>";
	}
	
	//var lis = getElementsByClassName(document.body, "li", "kn_item");
});


function lightNav(id){
	var delay = 300;
	var nav = document.getElementById(id);
	var lis = getElementsByClassName(nav, "li", "kn_item");
	var interval = null;
	var interval2 = null;	
	var currentIndex = null;
	
	
	
	for(var i=0,l=lis.length;i<l;i++){
		lis[i].setAttribute("index", i+1);
		
		var em = getElementsByClassName(lis[i], "em", "")[0];
		
		if(em && em.innerHTML.length == 0){
			lis[i].className += " one_line"
		}
		
		
		
		
		
		var ctn =getElementsByClassName(lis[i], "div", "kn_content")[0];
		var unit = getElementsByClassName(lis[i], "div", "unit")[0];
		if(!unit.childNodes.length) {
			ctn.parentNode.removeChild(ctn);
			//continue;
		}
		lis[i].onmouseover = function (e){
			if(!e) e = window.event;
			stopEvent(e);
			show(this);
		}
		lis[i].onmouseout = function (e){
			stopEvent(e);
			hide(this);
		}
	}
	document.body.onmouseover = function (e){
		interval2 = setTimeout(function (){
			hide();
			if (currentIndex) lis[currentIndex-1].className = lis[currentIndex-1].className.replace(/ hover/g, "");
		}, delay)
	}
	
	document.body.onmouseout = function (){
		clearTimeout(interval2);
	}
	
	function show(li){
		var index = li.index || li.getAttribute("index")
		interval = setTimeout(function (){
			if (currentIndex) lis[currentIndex-1].className = lis[currentIndex-1].className.replace(/ hover/g, "");
			lis[index-1].className += " hover";
			currentIndex = index;
		}, delay);
	}
	
	function hide(elm){
		clearTimeout(interval);
		//if(elm && elm.getAttribute("index") == 0) elm.className = elm.className.replace(/ hover/g, "");
	}
	
	function stopEvent (e) {
		if(e && e.stopPropagation && e.preventDefault) {
			e.stopPropagation();
			e.preventDefault();
		}
		else if(e && window.event) {
			window.event.cancelBubble = true;
			window.event.returnValue = false;
		}
		return false;
	}
}
