

/* au chargement de la page, on exécute les différentes fonctionnalités */
jQuery(document).ready(function(){
	/* on initialise toutes les tabulations */
	initTabs(paramsblocPractice, paramsPubs, paramsOnglets);

	/* on lance la requète xmlHttpRequest pour obtenir le xml du carousel */
	getIt();
	initTabs(paramsPlayer);

	/* on lance la gestion du module événements */
	initCalendar();

	buildArrow();//traitement des flèches pour faire défiler les événements

});

/**
 * @author Laurent Leborgne
 * @name Carousel
 * @description gestion du carousel de home
 */
	// variables
		var carouselObj=new Array();
		var currentCarousel = parseInt(document.location.hash.replace('#visuel',""));
		var timer = 20000;
		var sEspaceTxt="Ajouter à mon espace";
		var carouselPlay;

		// fonction générique pour multireplacement
		String.prototype.replaceAll = function(strTarget, strSubString)
		{
		    var strText = this;
		    var intIndexOfMatch = strText.indexOf( strTarget );

		    // Keep looping while an instance of the target string
		    // still exists in the string.
		    while (intIndexOfMatch != -1)
		    {
		        // Relace out the current instance.
		        strText = strText.replace( strTarget, strSubString )

		        // Get the index of any next matching substring.
		        intIndexOfMatch = strText.indexOf( strTarget );
		    }

		    // Return the updated string with ALL the target strings
		    // replaced out with the new substring.
		    return( strText );
		}
	// init des événements de click
		var initCarousel = function(){
			/** lié au chargement, on checkque si on a un id de carousel dans l'url, pour charger les noeuds correspondants **/
			if (!isNaN(currentCarousel)) {
				var cur = "#liste-carousel li a:eq(" + (currentCarousel - 1)+")";
				jQuery(cur).trigger("click");
			}else{
				var cur = "#liste-carousel li a:eq(0)";
				jQuery(cur).trigger("click");
			}
		}

	// on charge le xml du carousel
		var getIt = function(){
			$.ajax({
				type: "post",
				url: "/FRONT/CRT_PIDF/xml/home/" + lang + "/home.xml",
				success: function(xhr){
			 		result = xhr;
					timer = parseInt(stripCDATA(jQuery(result).find("defilement")))*1000;
					sEspaceTxt = stripCDATA(jQuery(result).find("espace"));
			 		jQuery(result).find("onglet").each(function(index){
			 			obj = {
							coe_i_id:stripCDATA(jQuery(this).find("coe_i_id")),
							fiches_i_id:stripCDATA(jQuery(this).find("fiches_i_id")),
							coe_i_id_rubrique:stripCDATA(jQuery(this).find("coe_i_id_rubrique")),
							shortTitle: stripCDATA(jQuery(this).find("shortTitle")),
			 				date: stripCDATA(jQuery(this).find("date")),
			 				longTitle: stripCDATA(jQuery(this).find("longTitle")),
			 				accroche: stripCDATA(jQuery(this).find("accroche")),
			 				rubrique: stripCDATA(jQuery(this).find("rubrique")),
			 				visuel: {
			 					type: stripCDATA(jQuery(this).find("visuel type")),
			 					src: stripCDATA(jQuery(this).find("visuel src:eq(0)")),
			 					alt: stripCDATA(jQuery(this).find("visuel alt:eq(0)")),
			 					title: stripCDATA(jQuery(this).find("visuel title:eq(0)")),
			 					link: stripCDATA(jQuery(this).find("visuel link:eq(0)")),
								highligh:{}
			 				},
			 				url: stripCDATA(jQuery(this).find("url")),
							bouton: stripCDATA(jQuery(this).find("bouton"))
			 			};
			 			if (jQuery(this).find("visuel highlight").length > 0) {
			 				obj.visuel.highlight = {
			 					src: stripCDATA(jQuery(this).find("visuel highlight src")),
			 					alt: stripCDATA(jQuery(this).find("visuel highlight alt")),
			 					title: stripCDATA(jQuery(this).find("visuel highlight title")),
			 					link: stripCDATA(jQuery(this).find("visuel highlight link"))
			 				};
			 			};
						if (jQuery(this).find("list").length > 0) {
			 				obj.list = {
			 					url1: stripCDATA(jQuery(this).find("list url1")),
			 					label1: stripCDATA(jQuery(this).find("list label1")),
								target1: stripCDATA(jQuery(this).find("list target1")),
								title1: stripCDATA(jQuery(this).find("list title1")),
			 					url2: stripCDATA(jQuery(this).find("list url2")),
			 					label2: stripCDATA(jQuery(this).find("list label2")),
								target2: stripCDATA(jQuery(this).find("list target2")),
								title2: stripCDATA(jQuery(this).find("list title2")),
			 					url3: stripCDATA(jQuery(this).find("list url3")),
			 					label3: stripCDATA(jQuery(this).find("list label3")),
								target3: stripCDATA(jQuery(this).find("list target3")),
								title3: stripCDATA(jQuery(this).find("list title3"))
			 				};
			 			};
			 			carouselObj[index]=obj;
			 		});
					//on checke si on a une demande par défaut au chargement (url ou 1er de la liste);
			    initCarousel();
				}
			});
		}

		/**strip out the cdata nodes **/
		var stripCDATA= function(string){
			string = jQuery(string).text();
			if(string==undefined)string="";

			var startcdata =/<!--\[CDATA\[/;
			var endcdata =/\]\]-->/;
			var startcdata_ie =/<!\[CDATA\[/;
			var endcdata_ie =/\]\]>/;
				string = string.replace("&lt;","<").replace("&gt;",">").replace(startcdata,"").replace(endcdata,"").replace(startcdata_ie,"").replace(endcdata_ie,"");
			return string;
		}

		/** fonction exécutée par le timer, pour passer à l'item suivant **/
		function nextCarouselItem(){
			if(currentCarousel !=carouselObj.length-1){
				var newOne =parseInt(currentCarousel);
				newOne++;
				//console.log("suivant :"+newOne);
				jQuery("#liste-carousel li a:eq("+newOne+")").trigger("click");
			}else{
				jQuery("#liste-carousel li a:eq(0)").trigger("click");
			}
		}

		/** au click, on change la zone **/
		var setCarousel = function(index){
			if(typeof(session_id_user) == "undefined")session_id_user="";
			if (carouselObj.length > 0 && index<carouselObj.length) {
				var so = "";
				var id =1;//pour avoir des id d'éléments commençant à 1 et non 0;
					id+=index;

				// on remet à jour l'index de l'onglet sélectionné
				currentCarousel = index;

				// on check si le timer est encore actif et on le désactive
				if(timer!=0)clearTimeout(carouselPlay);

				/** activation de la rubrique **/
				jQuery('#zone-contenu').removeClass().addClass(carouselObj[index].rubrique);

				/** création du html avec les données du xml */
				var data;
				/** html structurant, reprenant le contenu "normal", avec des zones de remplacement **/
				var mapping = "<div id=\"visuel__index__\" class=\"visuel\"><a href=\"__link__\" title=\"__linktitle__\"><img src=\"__src__\" alt=\"__alt__\" /></a></div><div id=\"contenu__index__\" class=\"contenu\"><p class=\"date\">__date__</p><h3><a href=\"__link__\" title=\"__linktitle__\">__longTitle__</a></h3><hr /><p class=\"accroche\">__accroche__</p>__discover__<hr />__espace____listeLiens__</div>";

				/** gestion de la mise en place des informations génériques **/
				data = mapping.replaceAll("__index__",id)
					.replaceAll("__title__",carouselObj[index].shortTitle)
					.replaceAll("__url__",carouselObj[index].url)
					.replaceAll("__longTitle__",carouselObj[index].longTitle)
					.replaceAll("__accroche__",carouselObj[index].accroche)
					.replaceAll("__date__",carouselObj[index].date)


				/** liste de liens facultative **/
				var lnkElmts = "";
				if(carouselObj[index].list){
					for (i=1;i<4;i++){
						if(carouselObj[index].list['url'+i]!="")lnkElmts+="<a href=\""+carouselObj[index].list['url'+i]+"\" title=\""+carouselObj[index].list['title'+i]+"\" target=\""+carouselObj[index].list['target'+i]+"\" class=\"carouselLinkList\">&gt; "+carouselObj[index].list['label'+i]+"</a>";
					}
				};

				/** bouton espace, facultatif **/
				var espace = "";
				if(carouselObj[index].fiches_i_id!="" /*&& carouselObj[index].rubrique!="laissezVousGuider"*/){
					espace = "<p name=\""+carouselObj[index].coe_i_id_rubrique+"\" class=\""+carouselObj[index].coe_i_id+"\" rel=\"fiches\" id=\""+carouselObj[index].fiches_i_id+"\"><a id=\"popinEspace2"+carouselObj[index].fiches_i_id+"\" rel=\"messageExistSelection\" style=\"cursor: pointer;\" class=\"espace addFav popinEspaceTrigger popin btnAjoutselection addToEspace\"><span>" + sEspaceTxt + "</span></a></p><input type=\"hidden\" id=\"iddelapage\" value=\""+carouselObj[index].coe_i_id+"\"/><input type=\"hidden\" id=\"id_user\" value=\""+session_id_user+"\"/><input type=\"hidden\" id=\"typeElem\" value=\"fiches\"/>";
					//"<a class=\"espace addFav popinEspaceTrigger popin btnAjoutselection addToEspace\"  rel=\"popinEspace\"><span>"+sEspaceTxt+"</span></a>";
				}
				if(carouselObj[index].fiches_i_id=="" && carouselObj[index].rubrique=="laissezVousGuider"){
					espace = "<p><a id=\"popinEspace1"+carouselObj[index].coe_i_id+"\" rel=\"messageExistSelection\" style=\"cursor: pointer;\" class=\"espace addFav popinEspaceTrigger popin\"><span>"+sEspaceTxt+"</span></a></p><input type=\"hidden\" id=\"iddelapage\" value=\""+carouselObj[index].coe_i_id+"\"/><input type=\"hidden\" id=\"id_user\" value=\""+session_id_user+"\"/><input type=\"hidden\" id=\"id_rubrik\" value=\""+carouselObj[index].coe_i_id_rubrique+"\"/><input type=\"hidden\" id=\"typeElem\" value=\"guides\"/>"

				}
				//carouselObj[index].coe_i_id
				//carouselObj[index].fiches_i_id
				//carouselObj[index].coe_i_id_rubrique

				/** bouton décrouvrez, facultatif **/
				var discover = "";
				if(carouselObj[index].bouton!="" && carouselObj[index].url!=""){
					discover = "<a href=\"__url__\" class=\"discover\">__bouton__</a>";
					discover = discover.replaceAll("__url__",carouselObj[index].url).replaceAll("__bouton__",carouselObj[index].bouton);
				}

				/** mise en place des éléments facultatifs **/
				data = data.replace("__discover__",discover);
				data = data.replace("__listeLiens__",lnkElmts);
				data = data.replace("__espace__",espace);

				/** gestion du contenu visuel en fonction du type **/
				switch(carouselObj[index].visuel.type){
					case "image":
						data = data.replaceAll("__src__",carouselObj[index].visuel.src)
							.replaceAll("__alt__",carouselObj[index].visuel.alt)
							.replaceAll("__link__",carouselObj[index].visuel.link)
							.replaceAll("__linktitle__",carouselObj[index].visuel.title);
					break;
					case "flash":
						data = data.replaceAll("__link__",carouselObj[index].url)
							.replaceAll("__linktitle__",carouselObj[index].longTitle);
						data = data.replaceAll("__src__","");
						so = new SWFObject(carouselObj[index].visuel.src, "CRT", "530", "300", "9", "#000000");
						so.useExpressInstall('/FRONT/CRT_PIDF/flash/video/expressinstall.swf');
						so.addVariable("preview", carouselObj[index].visuel.highlight.src);
						so.addParam("allowfullscreen","true");
						so.addParam("wmode","transparent");
					break;
					case "videoFlv":
						data = data.replaceAll("__link__",carouselObj[index].url)
							.replaceAll("__linktitle__",carouselObj[index].longTitle);
						data = data.replaceAll("__src__","");
						so = new SWFObject("/FRONT/CRT_PIDF/flash/video/CRTPlayer.swf", "CRT", "531", "300", "9", "#000000");
						so.useExpressInstall('/FRONT/CRT_PIDF/flash/video/expressinstall.swf');
						so.addVariable("url_media", carouselObj[index].visuel.src);
						so.addVariable("preview", carouselObj[index].visuel.highlight.src);
						so.addParam("allowfullscreen","true");

						so.addParam("wmode","transparent");
					break;
					case "videoUTube":
						data = data.replaceAll("__link__",carouselObj[index].url)
							.replaceAll("__linktitle__",carouselObj[index].longTitle);
						data = data.replaceAll("__src__","");
                     	so = new SWFObject(carouselObj[index].visuel.src.replace('watch?v=','v/')+"?enablejsapi=1&playerapiid=ytplayer", "ytapiplayer", "530", "300", "9", "#000000");
						so.useExpressInstall('/FRONT/CRT_PIDF/flash/video/expressinstall.swf');
						so.addParam("allowfullscreen","true");
						so.addParam("allowScriptAccess","always");
						so.addParam("id","myytplayer");
						so.addParam("wmode","transparent");
					break;
					case "vimeo":
						data = data.replaceAll("__link__",carouselObj[index].url)
							.replaceAll("__linktitle__",carouselObj[index].longTitle);
						// définir le clip_id dans le xml :
						// exemple : http://vimeo.com/moogaloop.swf?clip_id=7099825
						so = new SWFObject("http://vimeo.com/moogaloop.swf?clip_id="+carouselObj[index].visuel.src, "vimeoplayer", "530", "300", "9", "#000000");
						so.useExpressInstall('/FRONT/CRT_PIDF/flash/video/expressinstall.swf');
						so.addParam("allowfullscreen","true");
						so.addParam("wmode","transparent");
						so.addParam("allowScriptAccess","always");
						so.addParam("id","vimeoplayer");
					break;
					case "dailymotion":
						data = data.replaceAll("__link__",carouselObj[index].url)
							.replaceAll("__linktitle__",carouselObj[index].longTitle);
						// définir l'url dailymotion dans le xml :
						so = new SWFObject(carouselObj[index].visuel.src, "dailymotion_player", "530", "300", "9", "#000000");
						so.useExpressInstall('/FRONT/CRT_PIDF/flash/video/expressinstall.swf');
						so.addParam("allowfullscreen","true");
						so.addParam("wmode","transparent");
						so.addParam("allowScriptAccess","always");
						so.addParam("id","dailymotion_player");
					break;
					case "kewego":
						data = data.replaceAll("__link__",carouselObj[index].url)
							.replaceAll("__linktitle__",carouselObj[index].longTitle);
						// définir le "sig", identifiant de la video, dans le xm, ainsi que le language_code
						// exemple de sig : "iLyROoafI4VF"
						// language code : fr
						// à finaliser et tester
						so = new SWFObject("http://sa.kewego.com/swf/p3/epix.swf",carouselObj[index].visuel.src, "530", "300", "9", "#000000");
						so.useExpressInstall('/FRONT/CRT_PIDF/flash/video/expressinstall.swf');
						so.addVariable("flashVars","language_code=fr&playerKey=4c42659406e2&skinKey=9c1fdb8efbe2&sig="+carouselObj[index].visuel.src+"&autostart=false")
						so.addParam("allowfullscreen","true");
						so.addParam("wmode","transparent");
						so.addParam("allowScriptAccess","always");
						so.addParam("id",carouselObj[index].visuel.src);
					break;
					default :
					break;
				}
				/** insertion du html recomposé à partir de l'objet json issu du xml **/
				jQuery("#zone-contenu").html(data);
				$(document).pngFix();
				/** si un objet flash a été instancié, on l'écrit dans le html nouvellement généré **/
				if(so!="")so.write("visuel"+id);
				//on relance la fonctionnalité d'ajout à l'espace pour binder les nouveaux boutons créés
				try{
					if(addToMySpace)addToMySpace();
				}
				catch(error){

				}


				/** on set le timer pour passer à l'item suivant **/
				if(timer!=0)carouselPlay=setTimeout("nextCarouselItem()", timer);


			}else{
				//aucune donnée issue du xml, ne devrait pas arriver
			}
		};

/**
 * @author Laurent Leborgne
 * @description : Evénements par mois
 */
var setCalendar = function(){
	jQuery(calObject.liste).each(function(index){
		if(jQuery(this).attr('id')==calObject.firstElm){
			jQuery(this).hide();
		}else{
			if(index > calObject.nbElmVisibles && jQuery(this).attr('id')!=calObject.lastElm)jQuery(this).hide();
		}
	});
};
var initCalendar = function(){
	calObject.nbItemInList = jQuery(calObject.liste+" li"+calObject.classToBeTabbed).length;
	jQuery(calObject.liste+" li"+calObject.classToBeTabbed+" a").each(function(index){
		jQuery(this).bind("click", function(){
			var destId=jQuery(this).attr("href");
			jQuery(this).parent("li"+calObject.classToBeTabbed).siblings("li"+calObject.classToBeTabbed).children("a").each(function(){
				jQuery(jQuery(this).attr("href")).hide();
				jQuery(this).parent("li."+calObject.activeClassLi).removeClass(calObject.activeClassLi).addClass(calObject.inactiveClassLi);
			})
			jQuery(this).parent('li'+calObject.classToBeTabbed).addClass(calObject.activeClassLi).removeClass(calObject.inactiveClassLi);
			jQuery(destId).show();
			if(jQuery(this).parent("li"+calObject.classToBeTabbed).length>0)return false;
		})
	});
	for(i=jQuery(calObject.liste+" li"+calObject.classToBeTabbed).length;i>calObject.nbElmVisibles-1;i--){
		jQuery(calObject.liste+" li"+calObject.classToBeTabbed+":eq("+i+")").hide();
	}
	jQuery(calObject.liste+" li:eq(0)").hide();


	jQuery(calObject.liste+" li"+calObject.classToBeTabbed+":eq(0) a").trigger('click');
};
var calMove = function(where){
	switch(where){
		case "prev":
				jQuery(calObject.liste+" li"+calObject.classToBeTabbed+"."+calObject.activeClassLi).prevAll("li"+calObject.classToBeTabbed+":hidden:eq(0)").show();
				jQuery(calObject.liste+" li"+calObject.classToBeTabbed+"."+calObject.activeClassLi).prev("li"+calObject.classToBeTabbed).children("a").trigger("click");
				jQuery(calObject.liste+" li"+calObject.classToBeTabbed+":visible:last").hide();

			if(jQuery(calObject.liste+" li"+calObject.classToBeTabbed+":visible:first a").attr("href") == jQuery(calObject.liste+" li"+calObject.classToBeTabbed+":first a").attr("href")){
				jQuery(calObject.liste+" li"+calObject.firstElm+":visible").hide();
			}else{
				jQuery(calObject.liste+" li"+calObject.lastElm+":hidden").show();
			}

			return false;
		break;
		case "next":

				jQuery(calObject.liste+" li"+calObject.classToBeTabbed+"."+calObject.activeClassLi).nextAll("li"+calObject.classToBeTabbed+":hidden:eq(0)").show();
				jQuery(calObject.liste+" li"+calObject.classToBeTabbed+"."+calObject.activeClassLi).next("li"+calObject.classToBeTabbed).children("a").trigger("click");
				jQuery(calObject.liste+" li"+calObject.classToBeTabbed+":visible:eq(0)").hide();
				jQuery(calObject.liste+" li"+calObject.firstElm+":hidden").show();
			if(jQuery(calObject.liste+" li"+calObject.classToBeTabbed+":visible:last a").attr('href') == jQuery(calObject.liste+" li"+calObject.classToBeTabbed+":last a").attr('href')){
				jQuery(calObject.liste+" li"+calObject.lastElm+":visible").hide();
			}
			return false;
		break;
		default:
		break;
	}
};
var buildArrow = function (){
	jQuery(calObject.liste+" li"+calObject.lastElm).bind("click",function(){
		calMove('next');
		return false;
	});
	jQuery(calObject.liste+" li"+calObject.firstElm).bind("click",function(){
		calMove('prev');
		return false;
	});
};



/**
 * @author Laurent Leborgne
 * @description gestion des onglets
 */
var tabsTimer; // pour le défilement
var timeObj; // pour le settimeout du défilement
/* on initialise tous les onglets demandés */
var initTabs= function(){
	for(i=0;i<arguments.length;i++){
		settings = arguments[i];
		setTabsBehavior(settings.liste,settings.activeClassLi,settings.inactiveClassLi,settings.callbackAction);
		//test si timer requis
		if (settings.timerTab2Tab == 1 && settings.relClassForTimer) {
		var curTimerElm = jQuery(settings.liste+" li.on").attr("rel");
		timeObj = settings;
			if(!isNaN(parseInt(curTimerElm))){
				tabsTimer = setTimeout(function(){
					nextTabAuto(timeObj);
				},parseInt(curTimerElm)*1000);
			}
		}
	}
}
/* mise en place du comportement générique pour la gestion des onglets */
var setTabsBehavior = function (ulClass,activeClassLi,inactiveClassLi,callback){
	if(ulClass==".navPub"){
		jQuery(ulClass+" li").each(function(ind){
			jQuery(this).bind("mouseup", function(){
				//console.log("click sur l'élement parent = on flag un click 'humain' et non un trigger, pour désactiver le timer");
				jQuery(this).children("a:eq(0)").attr("rel","click");
			});
		});
	}
	jQuery(ulClass+" li a").each(function(index){
		jQuery(this).bind("click", function(){
			var destId=jQuery(this).attr("href");
			jQuery(this).parent("li").siblings("li").children("a").each(function(){
				jQuery(jQuery(this).attr("href")).hide();
				jQuery(this).parent("li."+activeClassLi).removeClass(activeClassLi).addClass(inactiveClassLi);
			})
			jQuery(this).parent('li').addClass(activeClassLi).removeClass(inactiveClassLi);
			//si un callback est défini, on l'exécute
			if(callback)callback(index);
			//si un timer est en route, on l'annule
			if(tabsTimer && jQuery(this).attr("rel")=="click")clearTimeout(tabsTimer);
			//on montre
			jQuery(destId).show();
			return false;
		});
	});
	if(callback=="")jQuery(ulClass+" li a:eq(0)").trigger("click");
}
/** défilement auto des onglets pour la publicité **/
var nextTabAuto = function(obj){
	var curTimerElm;
	if(jQuery(obj.liste).length>0){
		if(jQuery(obj.liste+" li.on").next("li").length>0){
			jQuery(obj.liste+" li.on").next("li").children("a:eq(0)").trigger("click");
			curTimerElm = jQuery(obj.liste+" li.on").attr("rel");
		}else{
			jQuery(obj.liste +" li a:eq(0)").trigger("click");
			curTimerElm = jQuery(obj.liste+" li:eq(0)").attr("rel");
		}
		if(!isNaN(parseInt(curTimerElm))){
			tabsTimer = setTimeout(function(){
				nextTabAuto(obj);
			},parseInt(curTimerElm)*1000);
		}
	}
}


 /** onglets practice et météo **/
	var paramsblocPractice = {
		liste : "#navPractice",
		activeClassLi : "on",
		inactiveClassLi: "",
		callbackAction : "",
		buildArrows : false,
		arrowNextClass: ".next",
		arrowPrevClass : ".prev",
		nbElmVisibles : 0,
		timerTab2Tab : 0
	}

	/** publicités **/
	var paramsPubs = {
		liste : ".navPub",
		activeClassLi : "on",
		inactiveClassLi: "",
		callbackAction : "",
		buildArrows : false,
		arrowNextClass: ".next",
		arrowPrevClass : ".prev",
		nbElmVisibles : 0,
		timerTab2Tab : 1,
		relClassForTimer : ".blocPub"
	}
	/** onglets "et toujours.." */
	var paramsOnglets = {
		liste : "#ongletTabs",
		activeClassLi : "active",
		inactiveClassLi: "",
		callbackAction : "",
		buildArrows : false,
		arrowNextClass: ".next",
		arrowPrevClass : ".prev",
		nbElmVisibles : 0,
		timerTab2Tab : 0
	}
	/** carousel/player **/
	var paramsPlayer = {
		liste : "#liste-carousel",
		activeClassLi : "active",
		inactiveClassLi : "onglet",
		callbackAction : setCarousel,
		buildArrows : false,
		arrowNextClass: ".next",
		arrowPrevClass : ".prev",
		nbElmVisibles : 0,
		timerTab2Tab : 0
	}
	/** onglets des évenements **/
	var calObject = {
		liste : "#ongletsMonth",
		firstElm:'#firstItem',
		lastElm:'#lastItem',
		classToBeTabbed:".level1",
		activeClassLi : "active",
		inactiveClassLi: "",
		nbElmVisibles : 3,
		timerTab2Tab : 0,
		activeItem :0,
		nbItemInList : 0
	};