var browserisIE = false;
var browserisIE6 = false;
if(Browser.Engine.trident){
	$(document.documentElement).addClass("isIE");
	var browserisIE = true;
}
if(Browser.Engine.trident4){
	$(document.documentElement).addClass("isIE6");
	browserisIE6 = true
}
//on active la class hasJS pour les styles speciaux
$(document.documentElement).addClass("hasJS");
// on definit les variables de base.
var myswitchactive = "full";
var baseElements= "/le-challenge/elements/";
var myXMLContent = "/le-challenge/content.xml";
var myXMLNotes = "/le-challenge/episode?getNote";
var myFooter;
var blockCarrousselSlider = "";

var myJavascriptAjax = "";


// Create the namespace and the conf vars
var F6 = {
	version : "1.0",
	basePath: "/le-challenge/elements/js/", 
	minimumFlashVersion: "8",
	deferFuntion: /MSIE 6/.test(navigator.userAgent) ? "load" : "domready",
	heightStyle : /MSIE [56]/.test(navigator.userAgent) ? "height" : "minHeight",
	isQuirks : /MSIE/.test(navigator.userAgent) && document.compatMode && document.compatMode=="BackCompat" ? true : false,
	checkCapabilities: false, // active la verification des capacites du navigateur, et l'instanciation conditionnelle des modules (cf Module.check)
	debugMode : false // active le trace
};

// Fonction d'import des scripts
F6.Import = function (scriptName, noCache){
	var cache = noCache ? "?noCache=" + (new Date()).getTime() : "";
	var ext = /\./.test(scriptName) ? "" : ".js";
	document.write('<script type="text/javascript" charset="utf-8" src="' + F6.basePath + scriptName + ext + cache + '"></script>');
};

// Utils pour fonctions de FogManager
Element.implement({
	getCSS: function(sCssRule, btoInt) {
		var strValue = "";
		if(document.defaultView && document.defaultView.getComputedStyle) {
			try{
				strValue = document.defaultView.getComputedStyle(this, null).getPropertyValue(sCssRule);
			}
			catch(e) { strValue = ""; }
		}
		else if(this.currentStyle) {
			try{
				sCssRule = sCssRule.replace(/\-(\w)/g, function (strMatch, p1){
					return p1.toUpperCase();
				});
				strValue = this.currentStyle[sCssRule];
			} catch(e) {
				strValue = "";
			}
		}
		return btoInt ? parseInt(strValue) : strValue;
	},
	
	getCssParam: function (){
		var o = {}
		this.className.split(" ").each(function (el, i){
			if(/:/.test(el)) {
				var sp = el.split(":");
				o[sp[0]] = sp[1];
			}
		})
		return o;
	}
});

// appel des JS pour l'execution des fonctions plus bas
F6.Import("mootools-1.2.4.4-more.js");
F6.Import("_cufon.js");
F6.Import("medium.font.js");
F6.Import("heavy.font.js");
F6.Import("FogManager.js");
F6.Import("SliderCarousel.js");
F6.Import("swfobject.js");
F6.Import("swfmacmousewheel.js");

// fonction pour le lancement de la cufonisation de base des elements
function cufonize(){
	// IE tricks
	Cufon.now();
	// Titres pages Heavy
	var titresh1 = $(document.body).getElements('h1');
	for(var i=0,l=titresh1.length;i<l;i++){
		var titre = titresh1[i]
		Cufon.replace(titre, {fontFamily:"heavy"});
	}
	var titresh2 = $(document.body).getElements('h2');
	for(var i=0,l=titresh2.length;i<l;i++){
		var titre = titresh2[i]
		Cufon.replace(titre, {fontFamily:"heavy"});
	}
	// Liens footer Black
	var liensfoot = $(document.body).getElements(".footermenu ul li a");
	for(var i=0,l=liensfoot.length;i<l;i++){
		var lienfoot = liensfoot[i]
		Cufon.replace(lienfoot, {fontFamily:"heavy"});
	}
	var mediumtexts = $(document.body).getElements(".cufonizemedium");
	for(var i=0,l=mediumtexts.length;i<l;i++){
		var mediumtext = mediumtexts[i]
		Cufon.replace(mediumtext, {fontFamily:"medium"});
	}
}

/* ************
* Fonctions pour la page avec flash
************** */
// fonction qui envoie les tailles des div pages et mainInside pour la gestion des flash
function pageSizer(){
	$("page").setStyles({'height': parseInt(document.documentElement.clientHeight) + 'px'});
	var heightBody = parseInt(document.documentElement.clientHeight);
	$("header").setStyles({'height': $("header").offsetHeight + 'px'});
	//$("header").setStyles({'width': parseInt(document.documentElement.clientWidth) + 'px'});
	$("mainInside").setStyles({'height': heightBody + 'px'});
}
//fonction de gestion des footer avec effet de slide
var FooterManager = new Class({
	initialize : function () {
		
		this.myFooterLinks = $("footer").getElements(".menu .toggleFoot");
		this.containers = $("footercontents");
		this.moving = $("footer");
		this.contents = $("footer").getElements(".content");
		this.contents.addClass("shoot");
		this.active = "noactive";
		this.myTimeOut = null;
		this.linkActive = "";
		this.myFx = new Fx.Tween(this.containers);
		this.myFooterLinks.each(function(el, index){
			var _this = this;
			var mytarget = el.getElement("a").getProperty("class");
			
			$(mytarget).addEvent("mouseenter", function(){
				if(_this.myTimeOut){
					clearTimeout(_this.myTimeOut);
				}else{
					//console.log("je trouve pas le timer");
				}
			}.bind(this));
				
			$(mytarget).addEvent("mouseleave", function(){
				clearTimeout(_this.myTimeOut);
				_this.myTimeOut = setTimeout(function(){
					if(_this.myTimeOut){
						clearTimeout(_this.myTimeOut);
						_this.reset();
					}
				},3000);
			}.bind(this));
			
			el.getElement("a").addEvent("click",function(e){
				e= new Event(e).stop();
				if(_this.linkActive == ""){
					_this.linkActive=this;
				}else{
					_this.linkActive.removeClass("active");
					_this.linkActive=this;
				}
				this.addClass("active");
				
				if($(mytarget).hasClass("shoot")){
					var myclass = "shoot";
				}else{
					var myclass = "";
				}
				
				var heightContainer = parseInt($(mytarget).offsetHeight);
				var heightPrevContainer = parseInt(_this.containers.offsetHeight);
				
				if(_this.active == "noactive"){
					_this.active = mytarget;
				}else if(_this.active == mytarget){
					_this.active = "noactive";
				}else{
					_this.active = mytarget;
				}
				
				if(_this.containers.hasClass("active") && _this.active != "noactive"){
					_this.containers.removeProperty("style");
					if(browserisIE6 == false){
						_this.containers.setStyle("height",heightPrevContainer);
					}
					_this.myFx.start('height', [heightPrevContainer,heightContainer]);
					
				}else if(_this.active != "noactive"){
					_this.containers.removeProperty("style");
					_this.containers.addClass("active");
					//_this.myFx.start('height', parseInt(heightContainer));
					if(browserisIE6 == false){
						_this.containers.setStyle("height",0);
					}
					_this.myFx.start('height', [0,heightContainer]);
					
				}else{
					_this.containers.removeProperty("style");
					_this.containers.removeClass("active");
					_this.linkActive.removeClass("active");
					if(browserisIE6 == false){
						_this.containers.setStyle("height",heightPrevContainer);
					}
					_this.myFx.start('height', [heightPrevContainer,0]);
				
				}
				if(myswitchactive == "full"){
					_this.moving.set("style","_top :expression(body.scrollTop + document.body.clientHeight - 31 + 'px')");
				}
				_this.contents.addClass("shoot");
				$(mytarget).toggleClass(myclass);
			});
		}.bind(this));
	},
	reset: function(){
		if(this.myTimeOut){
			clearTimeout(this.myTimeOut);
		}
		this.contents.addClass("shoot");
		this.active = "noactive";
		if(this.containers.hasClass("active")){
			
			this.containers.removeClass("active");
			if(this.linkActive != ""){
				this.linkActive == "";
				this.linkActive.removeClass("active");
				this.myFx.start('height', [this.containers.offsetHeight,0]);
			}
		}
	}
});

// fonction de switch des flash avec effet de scroll au deroulement/enroulement du flash
function switchWindow(anchor,url){
	// definition des variables generales pour la gestion
	var mypage = $("page");
	var mymain = $("mainInside");
	var mymainFlash = $("mainFlash");
	var mymainContent = $("mainContent");
	var myLeftCol = $("leftColumn");
	var myRightCol = $("rightColumn");
	var myRecapCol = $("recapColumn");
	
	// definition de l'effet de scroll sur les elements
	var myFxScroll = new Fx.Scroll(window);
	var myFxFlash = new Fx.Tween(mymainFlash);
	// a la fin du scroll, cache les contenus si on etait en affichage de contenus.
	/*myFxScroll.addEvent('complete', function(){
		if(myswitchactive == "contentShown"){
			myswitchactive = "full";
			mypage.setStyles({'height': parseInt(document.documentElement.clientHeight) + 'px'});
			mymain.setStyles({'height': parseInt(document.documentElement.clientHeight) + 'px'});
			mymainFlash.removeClass("secondFlash");
			mymainContent.addClass("hidden");
		}else{
			myswitchactive = "contentShown";
			
		}
	});*/
	myFxFlash.addEvent('complete', function(){
		if(myswitchactive == "contentShown"){
			myswitchactive = "full";
			mypage.setStyles({'height': parseInt(document.documentElement.clientHeight) + 'px'});
			mymain.setStyles({'height': parseInt(document.documentElement.clientHeight) + 'px'});
			mymainFlash.removeClass("secondFlash");
			mymainContent.addClass("hidden");
			myLeftCol.removeClass("hidden");
			myRightCol.removeClass("hidden");
			myRecapCol.addClass("hidden");
		}else{
			myswitchactive = "contentShown";
			myFxScroll.toElement(anchor);
		}
	});
	
	if(myswitchactive == 'full'){
		// si l'affichage est en mode full flash, au clic on affiche le contenu et on scroll sur l'ancre envoye par le flash.
		mypage.set("style","");
		mymain.set("style","");
		mymainFlash.addClass("secondFlash");
		mymainFlash.setStyle("margin-top","0px");
		mymainContent.removeClass("hidden");
		if(anchor != "mainflashanchor"){
			//myFxScroll.toElement("leftColumn");
		}else{
			//myFxScroll.toElement(anchor);
		}
		changeContentAjax("ajaxContent",url,anchor);
		myFxFlash.start('margin-top', [0,-602]);
	}else{
		// sinon on remonte a l'ancre definie par la fonction de retour.
		//myFxScroll.toElement(anchor);
		myFxFlash.start('margin-top', [-602,0]);
	}
	myFooter.reset();
}

// fonction qui lance la partie recap
function showRecap(ancre){
	var mypage = $("page");
	var mymain = $("mainInside");
	var mymainFlash = $("mainFlash");
	var mymainContent = $("mainContent");
	var myLeftCol = $("leftColumn");
	var myRightCol = $("rightColumn");
	var myRecapCol = $("recapColumn");
	
	var myFxFlashRecap = new Fx.Tween(mymainFlash);
	myFxFlashRecap.addEvent('complete', function(){
			myswitchactive = "contentShown";
	});
	mypage.set("style","");
	mymain.set("style","");
	myLeftCol.set("style","");
	myRightCol.set("style","");
	myRecapCol.set("style","");
	mymainFlash.addClass("secondFlash");
	mymainContent.removeClass("hidden");
	myLeftCol.addClass("hidden");
	myRightCol.addClass("hidden");
	myRecapCol.removeClass("hidden");
	mymainFlash.setStyle("margin-top","0px");
	myFxFlashRecap.start('margin-top', [0,-602]);
	
	myFooter.reset();
}

// fonction pour le changement des donnees dans la div cible
function evalJavascriptAjax(){
	eval(myJavascriptAjax)
}
function changeContentAjax(cible, url, anchor){
	var myTarget = $(cible);
	var myHTMLRequest = new Request.HTML({evalScripts:true,evalResponse:true}).addEvent('onSuccess',function(){
		myTarget.innerHTML = myHTMLRequest.response.html;
		myJavascriptAjax = myHTMLRequest.response.javascript;
		toggleBlocks();
		cufoniseToggleBlocks();
		//new Fx.Scroll(window).toElement(anchor);
		setTimeout(evalJavascriptAjax,500);
	});
	myHTMLRequest.get(url);
}

// fonction pour change contenu toggle et fade
function majContent(cible, url,idEp){
	var myTarget = $(cible);
	myTarget.fade("out");
	$("loaderAjax").removeClass("hidden");
	$("recapColumn").addClass("hidden");
	setTimeout(function (){
		var myHTMLRequest = new Request.HTML({encoding:'UTF-8',evalScripts:true,evalResponse:true}).addEvent('onSuccess',function(){
			
			myTarget.innerHTML = myHTMLRequest.response.html;
			myJavascriptAjax = myHTMLRequest.response.javascript;
			toggleBlocks();
			myTarget.fade("in");
			$("loaderAjax").addClass("hidden");
			setTimeout(cufoniseToggleBlocks,500);
			setTimeout(evalJavascriptAjax,500);
			if(idEp != "XX"){
				getFlashObject("myflash").showEpisod(idEp);
			}
			
		});
		myHTMLRequest.get(url);
	}, 700);
	myFooter.reset();
}
// fonctions appelee par le flash au clic sur les elements
function displayContent(url,anchor){
	var anchor = (anchor?""+anchor:"mainflashanchor");
	myswitchactive = "full";
	myFooter.reset();
	if(anchor=="mainflashanchor"){		
		switchWindow(anchor,url);
	}else if(anchor=="classement"){ 
		showRecap(anchor);
		}else{
		switchWindow(anchor,url);
	}
}
function hideContent(){
	var anchor = "page";
	myswitchactive = "contentShown";
	switchWindow(anchor,"");
}
function getFlashObject(pAnim){
	if (navigator.appName.indexOf("Microsoft") != -1) return window[pAnim]; else return document[pAnim];
}
// fonctions de creation du caroussel du contenu droite
function setCarouselList(){
	if($('blockCarrousselSlider')){
		var myRequest = new Request({
			url:myXMLContent,
			method: 'get',
			onSuccess: function(responseText, responseXML){
				var oXml = new XML2OBJ(responseXML, {arrayForcedNode:['episode'],rootTagPropertyName:"racine"})
				
				var root = oXml.xml[1].root;	
				
				if(root.equipe.length != 0){
					var myBlockCarousselSlider = $('blockCarrousselSlider').getElement("ul.inner");
					myBlockCarousselSlider.empty();
					
					var nbrEquipes = root.equipe.length;
					var myBlockCarousselSliderHTML = "";
					
					for (var i=0; i<nbrEquipes ;i++){
						var myTeam = root.equipe[i];
						
						var myTexte = myTeam.nom.txt;
						var myFile = myTeam.urlJSP.txt;
						var mySubtitle = myTeam.episode[0].titre.txt;
						var myId = myTeam.episode[0].id;
						var myVignette = myTeam.episode[0].urlImage;
						var myDate = "&Agrave; partir de "+myTeam.episode[0].date;
						var amIActive = (myTeam.episode[0].actif == "1" ? true : false);
						
						// creation des elements html pour chaque equipe
						var myLine = '<li class="elementSlide">';
						myLine += '<div class="block blockShadow">';
						myLine += '<span class="sideL"></span><span class="sideR"></span><span class="sideT"></span>';
						myLine += '<div class="blockInside">';
						myLine += '<div class="body">';
						myLine += '<div class="slideElemContent'+(amIActive ? "" : " noEquipe")+' mediaFullSize">';
						if(amIActive){
							myLine += '<a class="smoothAnchor idepisode:'+myId+' type:all" rel="mainflashanchor" href="'+myFile+'"><img alt="" src="'+myVignette+'"></a>';
						}else{
							myLine += '<img alt="" src="'+baseElements+'/img/imgNoEquipe.jpg"></a>';
						}
						myLine += '<div class="maskShadow">&nbsp;</div>';
						myLine += '<div class="legendeElement">';
						if(amIActive){
							myLine += '<a class="smoothAnchor idepisode:'+myId+' type:all" rel="mainflashanchor" href="'+myFile+'"><strong>'+myTexte+'</strong>'+myDate+'</a>';
						}else{
							myLine += '<strong>'+myTexte+'</strong>'+myDate+'';
						}
						
						myLine += '</div>';
						myLine += '</div>';
						myLine += '</div>';
						myLine += '</div>';
						myLine += '<span class="sideB"><span class="cornerRight"></span></span>';
						myLine += '</div>';
						myLine += '</li>';
						
						myBlockCarousselSliderHTML += myLine;
					}
					myBlockCarousselSlider.innerHTML = myBlockCarousselSliderHTML;
					sliderContent();
					setLinksAnchor(".slideElemContent");
				}
			}
		});
		myRequest.get(myXMLContent);
	}
}
function sliderContent(){
	if($('rightContent')){
		// on cree le carroussel sur le bloc slider
		blockCarrousselSlider = null;
		blockCarrousselSlider = new SliderCarousel('blockCarrousselSlider',{
			mode: 'vertical',
			childSelector :'li.elementSlide',
			scrollBy:2,
			loopOnScrollEnd:false,
			defaultContainerSize: 560,
			defaultSlideSize: 140
		});
	}
}
// fonction de creation des toggle du contenu gauche
function toggleBlocks(){
	if($('leftContent')){
		var myToggleBlocks = $(document.body).getElements(".blockToggle");
		if(myToggleBlocks.length != 0){
			myToggleBlocks.each(function(elm){
				elm.getElement(".head").addEvent("click",function(e){
					e= new Event(e).stop();
					elm.toggleClass("toggleOpen");
				});
			});
		}
	}
}
function cufoniseToggleBlocks(){
	var titresToggleBlocks = $("leftContent").getElements('.head h2');
	for(var i=0,l=titresToggleBlocks.length;i<l;i++){
		var titre = titresToggleBlocks[i]
		Cufon.replace(titre, {fontFamily:"heavy"});
	}
}

function setFootMenu(){
	if($('siteMenuFoot')){
		var myRequest = new Request({
			url:myXMLContent,
			headers:{'Content-Type': 'text/xml; charset="utf-8"'},
			method: 'get',
			onSuccess: function(responseText, responseXML){
				var oXml = new XML2OBJ(responseXML, {arrayForcedNode:['episode'],rootTagPropertyName:"racine"})
				var root = oXml.xml[1].root;	
				if(root.equipe.length != 0){
				
					var myBlockmenuFoot = $('siteMenuFoot');
					myBlockmenuFoot.empty();

					var teamOfTheWeek = root.teamOfTheWeek.txt;
					var nbrEquipes = root.equipe.length;
					var nbrEquipesReal = nbrEquipes;
					nbrEquipes=Math.ceil(nbrEquipes/2);
					
					var myLineMenuSepar = new Element('li', {'class': "separFooter", 'html': "&nbsp;"});
					
					for (var i=0; i<nbrEquipesReal ;i++){
						var myTeam = root.equipe[i];
						
						var myTexte = myTeam.nom.txt;
						var myFile = myTeam.urlJSP.txt;
						var mySubtitle = myTeam.episode[0].titre.txt;
						var myId = myTeam.episode[0].id;
						var myVignette = myTeam.episode[0].urlImage;
						var activeEquipe = (myTeam.episode[0].actif == "1" ? true : false);
						
						// var myClass = (i%nbrEquipes == 0 ? "first" : (i%nbrEquipes == nbrEquipes-1 ? "last" : (i == nbrEquipesReal-1? "last" :"")));
						var myClass = (i == nbrEquipesReal-1) ? "last" : "";
						
						// creation des elements html pour chaque equipe
						var myLineMenu = new Element('li', {'id': 'episode'+myId,'class': "episodeFooter "+myClass});
						// lien equipe
						if(activeEquipe){
							// ajout des differents elements pour les liens des equipes
							var myLinkMenu = new Element('a', {'class': 'getUp','href': ''+myFile,'html': ''+myTexte, "rel":"mainflashanchor"});
						}else{
							// ajout des differents elements pour les liens des equipes
							var myLinkMenu = new Element('span', {'html': ''+myTexte});
						}
						myLineMenu.adopt(myLinkMenu);
						/*
						// lien voter
						if((parseInt(myId) == parseInt(teamOfTheWeek) || teamOfTheWeek == "all") && activeEquipe){
							var myLinkVote = new Element('a', {'class': 'getUp voteLink','href': ''+myFile,'html': '- votez', "rel":"mainflashanchor"});
						}else{
							// ajout des differents elements pour les liens des equipes
							var myLinkVote = new Element('span', {'class': 'voteLink','html': '- votez'});
						}
						myLineMenu.adopt(myLinkVote);
						*/
						myBlockmenuFoot.adopt(myLineMenu);
						/*
						if(myClass == "last" && i != nbrEquipesReal-1){
							myBlockmenuFoot.adopt(myLineMenuSepar.clone());
						}
						*/
					}
					getUpFooter();
					cufonizeFooterLI();
				}
				
			}
		});
		myRequest.get(myXMLContent);
	}
}
// fonction de gestion des liens du menu footer
function getUpFooter(){
	
	
	
	var mypage = $("page");
	var mymain = $("mainInside");
	var mymainFlash = $("mainFlash");
	var mymainContent = $("mainContent");
	var myLeftCol = $("leftColumn");
	var myRightCol = $("rightColumn");
	var myRecapCol = $("recapColumn");
	
	// definition de l'effet de scroll sur les elements
	var myFxFlash = new Fx.Tween(mymainFlash);
	var myFxScroll = new Fx.Scroll(window);	
	$(document.body).getElements(".getUp").each(function(elm){
		elm.addEvent("click",function(e){
			e= new Event(e).stop();
			if(myswitchactive == "contentShown"){			
				// on cache le recap s'il est visible et on affiche les leftcol et rightcol s'ils sont hidden.
				if(myLeftCol.hasClass("hidden")){
					myLeftCol.removeClass("hidden");
				}
				if(myRightCol.hasClass("hidden")){
					myRightCol.removeClass("hidden");
				}
				if(!myRecapCol.hasClass("hidden")){
					myRecapCol.addClass("hidden");
				}
				
				var idEpisode = this.getParent("li").id.replace("episode","");
				var urlEpisode = this.getAttribute("href");
				var anchorEpisode = this.getAttribute("rel");
				majContent("ajaxContent",""+urlEpisode,idEpisode);
				myFxScroll.toElement(anchorEpisode);
			}else{
				myswitchactive = "contentShown";
				var idEpisode = this.getParent("li").id.replace("episode","");
				var urlEpisode = this.getAttribute("href");
				var anchorEpisode = this.getAttribute("rel");
				
				if(idEpisode != "XX"){
					getFlashObject("myflash").showEpisod(idEpisode);
				}
				
				majContent("ajaxContent",""+urlEpisode,idEpisode);
				
				mypage.set("style","");
				mymain.set("style","");
				mymainFlash.addClass("secondFlash");
				mymainFlash.setStyle("margin-top","0px");
				mymainContent.removeClass("hidden");
				myFxFlash.start('margin-top', [0,-602]);
				
				//myFxScroll.toElement(anchorEpisode);
			}
		});
	});
}

// Fonction de generation du bloc recap si recap active
function setRecapList(){
	var recapListBy = 2;
	if($('recapColumn')){
		var myRequest = new Request({
			url:myXMLContent,
			method: 'get',
			onSuccess: function(responseText, responseXML){				
				var oXml = new XML2OBJ(responseXML, {arrayForcedNode:['episode'],rootTagPropertyName:"racine"})
				var root = oXml.xml[1].root;				
				
				if(root.equipe.length != 0){
					var myRecapList = $('ajaxRecapContent');
					myRecapList.empty();
					
					var nbrEquipes = root.equipe.length;
					var myRecapListHTML = '';
					for (var i=0; i<nbrEquipes ;i++){
						var myTeam = root.equipe[i];
						
						// on recupere les informations de lequipe et de lepisode
						var myTitle = myTeam.nom.txt;
						var mySubtitle = myTeam.episode[0].titre.txt;
						var myText = myTeam.episode[0].accroche.txt;
						var myIdEpisode = myTeam.episode[0].id;
						var myId = myTeam.episode[0].numero;
						var myDate = "&Agrave; partir de "+myTeam.episode[0].date;
						var myFile = myTeam.urlJSP.txt;
						var myVignette = myTeam.episode[0].urlImage;
						var amIActive = (myTeam.episode[0].actif == "1" ? true : false);
						
						// creation des elements html pour chaque equipe
						if(i%recapListBy == 0){
							var myLine = '<div class="line"><div class="unit size1on'+recapListBy+'">';
						}else if(i%recapListBy == recapListBy-1){
							var myLine = '<div class="unit size1on'+recapListBy+' lastunit">';
						}else{
							var myLine = '<div class="unit size1on'+recapListBy+'">';
						}
						myLine += '<div class="block blockCorner equipeElem bMargin">';
						myLine += '<span class="topCorners"><span class="tl">&nbsp;</span><span class="tr">&nbsp;</span></span>';
						myLine += '<div class="blockInside"><div class="body">';
						// Debut du contenu de chaque element de Recap
						myLine += '<div class="titleEquipe">'
							myLine += '<h2><strong>Equipe '+myId+'</strong><span class="cufonizemedium">'+myTitle+'</span></h2>';
							
						myLine += '</div>';
						myLine += '<div class="mea">';
						myLine += '<div class="media">';
						// on commence par ajouter le blocShadow pour l'image a droite
						myLine += '<div class="block blockShadow">';
						myLine += '<span class="sideL"></span><span class="sideR"></span><span class="sideT"></span>';
						myLine += '<div class="blockInside">';
						myLine += '<div class="body">';
						myLine += '<div class="slideElemContent'+(amIActive ? "" : " noEquipe")+' mediaFullSize">';
						if(amIActive){
							myLine += '<a href="#" rel="mainflashanchor" class="smoothAnchor idepisode:'+myIdEpisode+' type:video"><img alt="" src="'+myVignette+'" /></a>';
						}else{
							myLine += '<a href="#" rel="mainflashanchor" class="smoothAnchor idepisode:'+myIdEpisode+' type:video"><img alt="" src="'+baseElements+'/img/imgNoEquipe.jpg" /></a>';
						}
						myLine += '<div class="maskShadow">&nbsp;</div>';
						myLine += '<div class="legendeElement">';
						myLine += '<p class="titleElement"><strong>'+myTitle+'</strong></p>';
						myLine += '</div>';
						myLine += '</div>';
						myLine += '</div>';
						myLine += '</div>';
						myLine += '<span class="sideB"><span class="cornerRight"></span></span>';
						myLine += '</div>';
						// Fin du blockShadow
						myLine += '</div>';
						myLine += '<div class="text">';
						myLine += '<div class="description">'+myText+'</div>';
						if(amIActive){
							myLine += '<div class="lienDesc"><a href="#" class="smoothAnchor idepisode:'+myIdEpisode+' type:video" rel="mainflashanchor">Voir la video</a></div>';
							myLine += '<div class="lienDesc"><a class="smoothAnchor idepisode:'+myIdEpisode+' type:all" rel="mainflashanchor" href="'+myFile+'">Plus d\'informations</a></div>';
						}
						
						myLine += '</div>';
						myLine += '</div>';
						// Fin du contenu de chaque element de Recap
						myLine += '</div></div>';
						myLine += '<span class="bottomCorners"><span class="bl">&nbsp;</span><span class="br">&nbsp;</span></span>';
						myLine += '</div>';
						myLine += '</div>';
						
						if(i%recapListBy == recapListBy-1){
							myLine += '</div>';
						}else if(i == nbrEquipes-1){
							myLine += '<div class="unit lastunit">&nbsp;</div></div>';
						}
						myRecapListHTML += myLine;
						
					}
					myRecapList.innerHTML = myRecapListHTML;
					cufoniseRecapList();
					setLinksAnchor(".equipeElem");
					
					// Lancement de la recuperation des notes d'equipes
					var myRequestNotes = new Request({
						url:myXMLNotes,
						method: 'get',
						onSuccess: function(responseText, responseXML){				
							var oXmlNotes = new XML2OBJ(responseXML)
							var rootNotes = oXmlNotes.data;
							
							if(rootNotes.episode.length != 0){
								rootNotes.episode.each(function(elem,index){
									var myMoyenne = elem.average.txt;
									var myTotalNotes = ""+elem.total.txt;
									var miIdEpisode = "teamvotes_"+elem.id;
									
									if($(miIdEpisode)){
										var myEpisodeTeamNote = $(miIdEpisode);
										
										myMoyenne = myMoyenne.replace('.','-');
										myMoyenne = myMoyenne.replace('-0','');
										
										myEpisodeTeamNote.empty();
										myEpisodeTeamNote.removeClass("noteStar-loading");
										myEpisodeTeamNote.addClass("noteStar-loaded");
										myEpisodeTeamNote.addClass("noteStar-"+myMoyenne);
										if(myTotalNotes == "1" || myTotalNotes == "0"){
											myEpisodeTeamNote.innerHTML = myTotalNotes+" Vote";
										}else{
											myEpisodeTeamNote.innerHTML = myTotalNotes+" Votes";
										}
									}
								});
								cufoniseTeamVotes();
							}
						}
					});
					myRequestNotes.get(myXMLNotes);
				}
			}
		});
		myRequest.get(myXMLContent);
	}
}
function setLinksAnchor(container){
	var myFxScroll = new Fx.Scroll(window);	
	$(document.body).getElements(container).each(function(elm){		
		var mytargets = elm.getElements(".smoothAnchor").addEvent("click",function(e){
			e= new Event(e).stop();
			var targetLink = $(e.target);
			
			// mise a jour de la video flash
			if(targetLink.get("tag") == "img"){
				var myParams = targetLink.getParent(".smoothAnchor").getCssParam();
				var mytarget = targetLink.getParent(".smoothAnchor").getAttribute("rel");
			}else{
				var myParams = targetLink.getCssParam();
				var mytarget = targetLink.getAttribute("rel");
			}
			
			if(myParams.type=="all"){
				// On clique sur un smoothAnchor qui recharge la partie edito de la page, avec les contenus du lien choisi et la video
				var myLeftCol =$("leftColumn")
				var myRightCol =$("rightColumn")
				var myrecapCol =$("recapColumn")
				
				if(myLeftCol.hasClass("hidden")){
					myLeftCol.removeClass("hidden");
				}
				if(myRightCol.hasClass("hidden")){
					myRightCol.removeClass("hidden");
				}
				if(!myrecapCol.hasClass("hidden")){
					myrecapCol.addClass("hidden");
				}
				majContent("ajaxContent",""+this.getAttribute("href"),myParams.idepisode);
			}else if(myParams.type=="text"){
				// On clique sur un smoothAnchor qui n'affiche que la page liee, sans relancer la video.
				var myLeftCol =$("leftColumn")
				var myRightCol =$("rightColumn")
				var myrecapCol =$("recapColumn")
				
				if(myLeftCol.hasClass("hidden")){
					myLeftCol.removeClass("hidden");
				}
				if(myRightCol.hasClass("hidden")){
					myRightCol.removeClass("hidden");
				}
				if(!myrecapCol.hasClass("hidden")){
					myrecapCol.addClass("hidden");
				}
				
				majContent("ajaxContent",""+this.getAttribute("href"),"XX");
			}else if(myParams.type=="video"){
				// On clique sur un smoothAnchor qui ne change que la video
				getFlashObject("myflash").showEpisod(myParams.idepisode);
			}
			// envoie du scroll
			myFxScroll.toElement(mytarget);
		});
	});
}
function cufoniseRecapList(){
	var titlesh2 = $(document.body).getElements(".titleEquipe h2 strong");
	for(var i=0,l=titlesh2.length;i<l;i++){
		var titleh2 = titlesh2[i]
		Cufon.replace(titleh2, {fontFamily:"heavy"});
	}
	var teamvotes = $(document.body).getElements(".teamvotes");
	for(var i=0,l=teamvotes.length;i<l;i++){
		var teamvote = teamvotes[i]
		Cufon.replace(teamvote, {fontFamily:"medium"});
	}
	var mediumtexts = $(document.body).getElements(".cufonizemedium");
	for(var i=0,l=mediumtexts.length;i<l;i++){
		var mediumtext = mediumtexts[i]
		Cufon.replace(mediumtext, {fontFamily:"medium"});
	}
}
function cufoniseTeamVotes(){
	var teamvotes = $(document.body).getElements(".teamvotes");
	for(var i=0,l=teamvotes.length;i<l;i++){
		var teamvote = teamvotes[i]
		Cufon.replace(teamvote, {fontFamily:"medium"});
	}
}
function cufonizeFooter(){
	var footerVotes = $(document.body).getElements(".cufonizeheavy");
	for(var i=0,l=footerVotes.length;i<l;i++){
		var footerVote = footerVotes[i]
		Cufon.replace(footerVote, {fontFamily:"heavy"});
	}
}
function cufonizeFooterLI(){
	var footerLIVotes = $(document.body).getElements(".episodeFooter");
	for(var i=0,l=footerLIVotes.length;i<l;i++){
		var footerLIVote = footerLIVotes[i]
		Cufon.replace(footerLIVote, {fontFamily:"medium"});
	}
}
// fonction d'ouverture de l'ID choisi dans un FogManager
function openPopin(id){
	var myContent = $(id);
	var titresPopin = $(id).getElements('h3');
	for(var i=0,l=titresPopin.length;i<l;i++){
		var titre = titresPopin[i]
		Cufon.replace(titre, {fontFamily:"heavy"});
	}
	new FogManager({content: myContent});
}

function bsk_tracker(url){
	bsk_img = new Image();
	bsk_img.src = url;
	return;
}

function setFormValidator(){
	if($$('.formValidator').length != 0){
		var myForms = $$('.formValidator');
		myForms.each(function(element){
			var myElemID = element.id;
			var myResults = $(myElemID).getElement(".resultForm");
			var myFields = $(myElemID).getElement(".fieldsForm");
			if ( !$(myElemID).hasClass("noAjax") ) {
				$(myElemID).addEvent("submit", function(event){
					event= new Event(event).stop();
					return false;
				});
			}
			new Form.Validator($(element.id), {
				onFormValidate: function(isValid, myform, onsubmit){
					
					myFields.removeClass("hidden");
					if(isValid){
						var myFormQuery = myform.toQueryString();
						
						var myRequest = new Request({url:'' + element.action, method: 'get', onSuccess: function(responseText, responseXML) {
							
							if(responseText == "OK"){
								myFields.addClass("hidden");
								myResults.getElement(".success").removeClass("hidden");
								myResults.getElement(".error").addClass("hidden");
							    myResults.getElement(".errorServ").addClass("hidden");
							}else{
								myResults.getElement(".error").addClass("hidden");
								myResults.getElement(".success").addClass("hidden");
								myResults.getElement(".errorServ").removeClass("hidden");
							}
						}});
						myRequest.setHeader('Last-Modified','Sat, 1 Jan 2005 05:00:00 GMT');
						myRequest.send(myFormQuery);
					}else{
						myResults.getElement(".error").removeClass("hidden");
						myResults.getElement(".errorServ").addClass("hidden");
						myResults.getElement(".success").addClass("hidden");
					}
				}
			});
		});
	}
}

// event Window
window.addEvent('domready',function(){
	cufonize();
	cufonizeFooter();
	pageSizer();
	setFootMenu();
	setCarouselList();
	setRecapList();
	myFooter = new FooterManager();
	toggleBlocks();
	setFormValidator();
});

window.addEvent('scroll',function(){
	/*if(myswitchactive == "contentShown"){
		if(document.documentElement.scrollTop<=602){
			document.documentElement.scrollTop = 602;
		}
	}*/
	$("footer").set("style","_top :expression(body.scrollTop + document.body.clientHeight - 31 + 'px')");
});

window.addEvent('domready',function() {
	var myFxScroll = new Fx.Scroll(window);
	$(document.body).getElements(".smoothAnchor").each(function(elm){
		var mytarget = elm.getAttribute("rel");
		elm.addEvent("click",function(e){
			e= new Event(e).stop();
			myFxScroll.toElement(mytarget);
		});
	});
});
/*
    XML2OBJ {Class}

    Transforme un xml en object js parametrable

    <monNoeud monAttribut="toto">monTexte</monNoeud>

    @use 
        new XML2OBJ("/mon/fichier.xml")
        new XML2OBJ("/mon/fichier.xml", {arrayForcedNode:"item|article"})
        new XML2OBJ(responseXML, {arrayForcedNode:["item", "article"], arrayForcedAttribute:"attr"})

    @param  xml {string|document} 
        si string: alors url chargement synchrone du xml (ne marche pas sous webKit)
        si document:  responseXML au onSuccess d'un appel AJAX 

    @param options {object}

        @property arrayForcedNode {regexp|array|string}

            si regexp: un object RegExp 
            si string: de la forme 'elm' matchera <elm> et pas <elms> 
            si array: de la forme ['elm' , 'node', 'root'] matchera strictement les noeuds

            avec arrayForcedNode = "*" toutes les proprietes de l'objet representant des noeuds seront array,
            mais pas les attributes

        @property arrayForcedAttribute {string}
            par defaut, les attributs des nodes deviennent des proprietes de l'object monNoeud.monAttribut = "toto"
            si sette, les attributs se poussent dans un array monNoeud[arrayForcedAttribute][monAttribut] = "toto"

        @ property nodeTextPropertyName {string}
            par defaut, le textContent du noeud se trouve dans monNoeud.txt = monTexte
            si sette devient monNoeud.nodeTextPropertyName = monTexte

        @property tagNamePropertyName {string}
            chaque objet recoit une propriete contenant le nom du noeud, 
            valeur par defaut "tag", a ne modifier qu'en cas de conflit.

        @property rootTagPropertyName {string}
            variable contenat le nom du noeud root, par defaut = root
            var json = XML2OBJ(responseXML);
            le noeud racine du XML se pointe comme ceci : json[json.root];



        JSON = {
            root : "structures",
            structures : {...},
            url: "http://mon.xml"
        }
        nous pouvons donc cibler l'element racine comme ceci :  JSON[JSON.root]

    @method getTEXT : retourne l'objet JSON en string (eval())


    @return instance 

    les methodes privees _load et _createDocument sont fortement inspirees de xml.js -  http://www.davidflanagan.com/javascript5/
    sourceCode of the Bible, o'Reilly's JS Definitive Guide by David Flanagan
*/

var XML2OBJ = function (){
    this.initialize.apply(this, arguments);
}

XML2OBJ.prototype = {

    constructor : XML2OBJ,

    options : {
        arrayForcedNode: "^$",
        objectForcedAttribute: false, 
        arrayForcedAttribute: false,
        nodeTextPropertyName: "txt",
        tagNamePropertyName: "tag",
        rootTagPropertyName: "root"
    },

    initialize: function (sXml, oOptions){

        // setOptions
        this.setOptions(oOptions);

        // creation d'un doc xml
        this.xml = this._load(sXml);

        // vars
        this.cache = {};
        this[this.options.rootTagPropertyName] = this.xml.documentElement.nodeName; // this.root

        // lancement recursion
        this._build(this.xml, this);
    },

    //retourne l'objet genere
    getJSON : function (){
        if(!this.json){
            this.json = {
                root : this.root
            };
            this._build(this.xml, this.json);
        }
        return this.json;
    },

    // retourne une chaine text (facon json)
    getTXT : function (oNode){
        if(!oNode) oNode = this.json;
        return this._jsonToString(oNode);
    },

    // construction du json recursive
    _build : function (eNode, oParent){
        for(var i=0,l=eNode.childNodes.length;i<l;i++){
            var node = eNode.childNodes[i];
            if(node.nodeType != 1) continue;
            var oNode = this._createObject(node, oParent);
            this._build(node, oNode);
        }
    },

    // ajout de l'object node dans le json
    _inject: function (oParent, oNode ){

        var forceArray = this.options["arrayForcedNode"].test(oNode[this.options.tagNamePropertyName]);

        // si la propriete n'existe pas on l'a cree 
        if(!oParent[oNode[this.options.tagNamePropertyName]] && !forceArray) {
            oParent[oNode[this.options.tagNamePropertyName]] = oNode;
        }
        // si la propriete n'existe pas, et que node est un arrayForcedNode on cree un array 
        else if(!oParent[oNode[this.options.tagNamePropertyName]] && forceArray) {
            oParent[oNode[this.options.tagNamePropertyName]] = [oNode];
        }       
        // si parent exite comme str , transforme en [] puis push
        else if (oParent[oNode[this.options.tagNamePropertyName]] && !oParent[oNode[this.options.tagNamePropertyName]].push){
            oParent[oNode[this.options.tagNamePropertyName]] = [oParent[oNode[this.options.tagNamePropertyName]], oNode];
        }
        // si parent existe comme [], push
        else if (oParent[oNode[this.options.tagNamePropertyName]] && oParent[oNode[this.options.tagNamePropertyName]].push){
            oParent[oNode[this.options.tagNamePropertyName]].push(oNode);
        }

    },

    // create a object describing the node
    _createObject: function (eNode, oParent){

        var $obj = {};

        // avec arrayForcedAttribute on cree un tableau dans $obj
        var target = this.options.arrayForcedAttribute ? $obj[this.options.arrayForcedAttribute] = [] : $obj
        for(var i=0,A=eNode.attributes,l=A.length;i<l;i++){ 
            target[A[i].nodeName] = 
                this.options.objectForcedAttribute ?
                    this._createAttributeObject(A[i], A[i].nodeValue) :
                    this._evalToBoolean(A[i].nodeValue);
        }

        // stock le contenu text de la balise ou "" si le noeud a des enfants
        var ctn = eNode.text || eNode.textContent;
        //TODO target = var this.options.objectForcedString ? $obj[eNode.nodeName][this.options.nodeTextPropertyName] : $obj[this.options.nodeTextPropertyName];
        $obj[this.options.nodeTextPropertyName] = this._hasChild(eNode) ? "" : ctn;

        // stock le tag
        $obj[this.options['tagNamePropertyName']] = eNode.tagName;
        this._inject(oParent, $obj);
        return $obj;
    },

    _createAttributeObject: function (oNode, sValue){
        var $obj = {};
        $obj[this.options.nodeTextPropertyName] = sValue;
        return $obj;
    },

    // recursive, trasfo de object -> string
    _jsonToString: function (oNode){
        var results = [];
        for(var object in oNode){
            var value = "";
            if(typeof oNode[object] == "string"){
                value = '"'+object+'":"'+this._parseStringProp(oNode[object])+'"';
            }
            else if(typeof oNode[object] == "number"){
                value = '"'+object+'":'+oNode[object];
            }
            else if(oNode[object] && typeof oNode[object].push == "function"){
                var val = [];
                var oSelf = this;
                oNode[object].each(
                    function (el){
                        val.push(oSelf._jsonToString(el));
                    }
                );
                value = '"'+object+'":' + '[' + val.join(', ') + ']'
            }
            else if(typeof oNode[object] == "object"){
                value = '"'+object+'": '+ this._jsonToString(oNode[object]);
            }
            if (typeof value !== "undefined" && value != "") results.push(value);
        };
        return '{' + results.join(', ') + '}';

    },

    // remplace le " par '', le " etant le delimiteur de chaine
    _parseStringProp: function (sProp){
        if(!this.parseRegExp) this.parseRegExp = new RegExp('(")', "g");
        return sProp.replace(this.parseRegExp, "''");
    },


    // tester vitesse avec childNodes
    _hasChild: function (eNode){
        return eNode.getElementsByTagName("*").length == 0 ? false : true;
    },


    // simply load the xml
    _load : function(url) {
        // Create a new document the previously defined function
        // will not work on webKit
        if(typeof url == "string"){
            var xmldoc = this._createDocument();  
            xmldoc.async = false;  // We want to load synchronously
            xmldoc.load(url);      // Load and parse
        }
        else {
            if(Browser.Engine.webkit || window.opera){
                var xmldoc = url;
            }
            else {
                var xmldoc = this._createDocument();  
                xmldoc.appendChild(url.documentElement);
            }
        }
        return xmldoc;        // Return the document
    },

    _evalToBoolean: function (str){
        return this.options.evalBoolean && str && str.match(/^\s*true|false\s*$/) ? eval(str) : str;
    },

    // create an empty document
    _createDocument : function(rootTagName, namespaceURL) {
        if (!rootTagName) rootTagName = "";
        if (!namespaceURL) namespaceURL = "";

        if (document.implementation && document.implementation.createDocument) {
            // This is the W3C standard way to do it
            return document.implementation.createDocument(namespaceURL, rootTagName, null);
        }
        else { // This is the IE way to do it
            // Create an empty document as an ActiveX object
            // If there is no root element, this is all we have to do
            var doc = new ActiveXObject("MSXML2.DOMDocument");

            // If there is a root tag, initialize the document
            if (rootTagName) {
                // Look for a namespace prefix
                var prefix = "";
                var tagname = rootTagName;
                var p = rootTagName.indexOf(':');
                if (p != -1) {
                    prefix = rootTagName.substring(0, p);
                    tagname = rootTagName.substring(p+1);
                }

                // If we have a namespace, we must have a namespace prefix
                // If we don't have a namespace, we discard any prefix
                if (namespaceURL) {
                    if (!prefix) prefix = "a0"; // What Firefox uses
                }
                else prefix = "";

                // Create the root element (with optional namespace) as a
                // string of text
                var text = "<" + (prefix?(prefix+":"):"") +  tagname +
                    (namespaceURL
                     ?(" xmlns:" + prefix + '="' + namespaceURL +'"')
                     :"") +
                    "/>";
                // And parse that text into the empty document
                doc.loadXML(text);
            }
            return doc;
        }
    },

    setOptions: function (oOpts){
        // permet de passer les options du prototype vers l'instance
        var $obj = this.options;
        this.options = {}
        for(var prop in $obj) this.options[prop] = $obj[prop];
        for(var prop in oOpts) this.options[prop] = oOpts[prop];
        // 
        // traitement du arrayForcedNode vers regExp
        if(this.options["arrayForcedNode"] == "*") this.options["arrayForcedNode"] = "[a-zA-Z]*";
        this.options["arrayForcedNode"] = this.toRegExp(this.options["arrayForcedNode"], "");
    },

    toRegExp: function (src, opt){
        if(src.exec) return src;
        var $str = "\\b"+src+"\\b";
        if(src && src.push) $str = src.join("|");
        if(!src) $str = "^$";
        return new RegExp($str, opt)
    },

    toHTML: function (){

    }

}

