Navigation = new Class({
	initialize : function() {
		this.mainNav = $('mainNav');
		NavLoader.register(this.xmlLoadedHandler.bind(this));
		//the end of intialisation is made in the _xmlOnSuccessHandler function
	},
	
	xmlLoadedHandler : function(datas) {
		this.datas = datas;
		
		this.generateNavigation();
		
		/* make cufonized */
		
		/*
		if(!/IE/.test(document.documentElement.className) && document.documentElement.lang != "jp"){
			var navA  = this.mainNav.getElement('ul').getChildren().getElement('a');
			Cufon.replace(navA, {fontFamily:"medium", hover:true, hoverables:{a:true, ul:true, li:false}});
		}
		*/
		
		
		
		this.initNavigation(this.mainNav);
		this.mainNav.setStyles({'opacity': 1, 'overflow':'visible'});
		
	},
	generateNavigation : function(){
		this.rest = this.mainNav.offsetWidth - 6;
		this.mainNav.getElement('.ongletsAuto').destroy();
		var navHTML = [];
		for (var i=0; i < this.datas.menu.length; i++) {
			//recuperation de l'index du premier element qui concerne les decouvertes
			if (!this.decouverteStartPos && eval(this.datas.menu[i].decouverte)){
				this.decouverteStartPos = i;
			}
		}
		navHTML.push('<ul class="tabs ongletsAuto">');
			for (var i=0; i < this.datas.menu.length; i++) {
				
				
				var isLast = i == this.datas.menu.length - 1 ? "last" : "";
				var isAlmostLast = i > this.datas.menu.length - 4 ? "subNavRight" : "";
				
				
				navHTML.push('<li class="' + this.datas.menu[i].color + ' cufonLi ' + isLast + ' ">');
				
				//pas de bordures sur le premier élément
				if (i > 0  && i != this.decouverteStartPos/*  && !this.datas.menu[i].current*/){  //commenter pour ajouter le separateur en mode current
					navHTML.push('<i class="sep"><!-- --></i>');
				}
				if (i == this.decouverteStartPos ){
					navHTML.push('<i class="sep2"><!-- --></i>');
				}
				
				
				/* ajout statut courant*/
				var statut = this.datas.menu[i].current ? 'current current_item' : '';
				
				// "/" are indicators to change the line so it has to be replace by "<br />"
				var libelle = this.datas.menu[i].lib;
				libelle = libelle.replace(/\//g,'<br/>');
				
				navHTML.push('<a href="' + this.datas.menu[i].action  + '" class="' + statut + '" target="' + this.datas.menu[i].typelien + '">' + libelle + '</a>');
				if (this.datas.menu[i].sousmenu){
					navHTML.push('<ul class="subNav ' + isAlmostLast + '">');
					for (var j=0; j < this.datas.menu[i].sousmenu.length; j++) {
						navHTML.push('<li><a href="' + this.datas.menu[i].sousmenu[j].action + '" target="' + this.datas.menu[i].sousmenu[j].typelien + '">' + this.datas.menu[i].sousmenu[j].lib + '</a></li>');
					};
					navHTML.push('</ul>');
				}
				
				
				
				navHTML.push('</li>');
			};
		
		navHTML.push('</ul>');
		this.mainNav.innerHTML = navHTML.join('') + $('mainNav').innerHTML;
		

		Notifier.fireEvent("onLayoutChanged");
	},
	initNavigation : function(nav){

		var _this = this;
		this.nav = $(nav).get('tag') == "ul" ? $(nav) : $(nav).getElement('ul');
		
		
		this.lis = this.nav.getElements("li.cufonLi");
		this.lis.each(function (li, i){
			
			// ajout des class permettant de jouer sur la css (mulitiline)
			var originalA = li.getElement('a');
			var brL = originalA.getElements('br').length;
			switch(brL){
				case 1 : originalA.addClass("twoLines");break;
				case 2 : originalA.addClass("threeLines");break;
				case 3 : originalA.addClass("fourLines");break;
			}
			if(/IE6/.test(document.documentElement.className)){
				li.addEvents({
					"mouseenter": function (){
							this.addClass("current");
							this.getElement('a').addClass("current");
							
							if (!this.dimension) {
								if(!($(this).getElement('ul.subNav'))){ return;}
							}
							if(!($(this).getElement('ul.subNav'))){ return;}
							this.dimension = $(this).getElement('ul.subNav').getCoordinates();
							
							
							var myIframe = new Element('<iframe id="iframeMask" style="filter:alpha(opacity=0); height:0px;width:0px;top:0;z-index:0;position:absolute;"></iframe>')
							myIframe.inject($(this).getElement('ul.subNav'), "before");
							//alert(this.dimension.height-5)
							$("iframeMask").setStyles({
								'width': this.dimension.width,
								'height': this.dimension.height,
								'top': "100%",
								'z-index': 50,
								"position": "absolute",
								"filter": "mask()",
								"visibility": "visible"
							});
							if($(this).getElement('ul.subNav').className == "subNav subNavRight"){
								$("iframeMask").setStyles({"right":"-1px"});
							}else{
								$("iframeMask").setStyles({"left":"0px"});
							}
							
					},
					
					"mouseleave": function (a){
						return function (){
							this.removeClass("current");
							this.getElement('a').removeClass("current");
							if($("iframeMask")){
								$("iframeMask").destroy();
							}
						}
					}(originalA)
				});
			}
			/*
			li.addEvents({
				"mouseenter": function (){
						this.getElement('a').focus();
						this.getElement('a').blur();
				}
			});
			*/
			if (i < _this.lis.length){
				_this.rest = _this.rest - li.clientWidth
			}
		})
	//	console.log(_this.rest);
		while (_this.rest > 0){
			this.lis.each(function (li, i){
				if (_this.rest == 0)
					return;
				
				li.style.width = li.offsetWidth + 1 + 'px';
				_this.rest--;
			});
		}
		if (this.decouverteStartPos){
			this.lis.each(function (li, i){
				//recuperation left du premier element qui concerne les decouvertes
				if (_this.decouverteStartPos == i){
					//gestion positionnement titre decouverte

					if (document.documentElement.dir == 'rtl'){
						_this.decouverteTitleSet(li.getLeft() + parseInt(li.offsetWidth));
					}else{
						_this.decouverteTitleSet(li.getLeft());
					}
				}
			})
		}else{
			//si pas de valeur de départ, on cache le titre cas, IP B2B2
			_this.decouverteTitleSet('hide');
		}
		
		this.nav.getElements('ul.subNav').addEvent('mouseleave', function (){
			var a = this.getParent('li').getElement('a');
			Cufon.refresh.delay(a, 1);
		})
		
		
		/*
		if (this.nav.getElement("li.titre"))
			this.nav.getElement("li.titre").setStyle('zoom', "1");
		*/
	},
	decouverteTitleSet : function(value){
		this.decouverteTitle = this.mainNav.getElement('.titre');
		if (value == 'hide'){
			this.decouverteTitle.setStyle('display', 'none');
			return;
		}
		this.headerCoord = $('header').getCoordinates();
		var constante = 14; // where 14 is a constant caused by shadows
		
		if (document.documentElement.dir == 'rtl'){
			this.decouverteTitle.setStyles({
				'width' : value - this.headerCoord.left + constante
			});
		}else{
			this.decouverteTitle.setStyles({
				'left': value  - this.headerCoord.left,
				'width' : this.headerCoord.right - value + constante
			});
		}
		
	}

});


