/** 
* @alias ajaxify.js
* @projectDescription France 2 & France 3, versions 2.0
* @author	[FTVI] Guyllaume Doyer
*/

/* !!! DO NOT MODIFY FUNCTIONS ORDER !! */
/* (required to pass jslint validation  */

/* handleTopShowsScroller(),
 * handleLatestComments(),handleComments(),
 * handleMenu(),
 * handleAjaxTabsContent(),handleAreaSpeNews(),
 * handleCloseBtns(),
 * handleVdosLst(),
 * handleSondage(),manipulerPoll(),getSondageResponseOnClick(),
 * handleDiaporamas(), handleSondages()
 */

// ----------------------------------------------------- \\
// This function listens for the click on "js_tn_scroller" 
// buttons then perfoms scrolling in the good direction
// ----------------------------------------------------- \\
function handleTopShowsScroller(contextSelector, rotationInterval, mode)
{
	
	var ts = 
	{
		context: $(contextSelector),
		tnNb: $(".showCptPicsTn", this.context).length,
		tnSelector: contextSelector + " .showCptPicsTn",
		tnViewPics: 3,
		jsonLoadedData: "",
		alreadyLoadedData: false,
		rotationLoop: null,
		setReflects: false,
		thumbSetWidth: (mode == "simpleMode") ? 273 : 210,
		
		scrollListener: function()
		{
			$(".jsTnScrollerLeftLnk, .jsTnScrollerRightLnk", ts.context).click( function()
			{	
				// Stop rotation function
				if (rotationInterval) { ts.rotator.stop(); }
				
				// Set dir var depending of the clicked button
				var dir;
				if ( $(this).hasClass("jsTnScrollerLeftLnk") === true ) { dir = "dirRight"; }
				else { dir = "dirLeft"; }
				
				if(isTopShowAnimRunning !== true && ts.tnNb > 3) { isTopShowAnimRunning = true; ts.scroll(dir); }
			});
			
			return this;
		},


		scroll: function(dir)
		{
			var dest = $(".thumbsContent", ts.context);
			
			if(dir == "dirLeft")
			{
				var firstTumbsSet = $(".thumbsSet", ts.context).slice(0,1);
				firstTumbsSet.clone(true).appendTo(dest).end().animate({width:"0px"}, 800, "linear", function()
				{
					firstTumbsSet.remove();
					isTopShowAnimRunning = false;
					if (typeof(rotationInterval) != "undefined" && rotationInterval > 0) { ts.rotator.init(); }

				});
			}
			else
			{
				var lastTumbsSet = $(".thumbsSet", ts.context).slice(-1);
				lastTumbsSet.clone(true).prependTo(dest).width("0px").animate({width:ts.thumbSetWidth + "px"}, 800, "linear", function()
				{
					lastTumbsSet.remove();
					isTopShowAnimRunning = false;
					if (typeof(rotationInterval) != "undefined" && rotationInterval > 0) { ts.rotator.init(); }
				});
			}
			
			return this;
		},


		rotator:
		{
			
			init: function()
			{
				ts.rotator.selectFirst();
				return this;
			},
			


			selectFirst: function()
			{
				$("a.showCptPicsTn", ts.context).slice(0,1).trigger("click");
				return this;
			},

			
			
			goNext: function(current)
			{
				var curJqobj = ( typeof(current) === "undefined" ) ? $("a.showCptPicsTn.current", ts.context) : current;
				
				var currentSetThumbsNb = curJqobj.parents("div.thumbsSet", ts.context).find("a.showCptPicsTn").length;
				var curIndex = $("a.showCptPicsTn", ts.context).index(curJqobj[0]);
				
				ts.rotationLoop = setTimeout( function()
				{
					
					if ( (curIndex >= ts.tnViewPics-1 && currentSetThumbsNb == ts.tnViewPics) || curIndex >= currentSetThumbsNb-1)
					{
						$(".jsTnScrollerRightLnk", ts.context).trigger("click");
					}
					else
					{		
						// Trigger click on the next pics and adds "current" class on it
						$("a.showCptPicsTn", ts.context).slice(curIndex+1, curIndex+2).trigger("click", [true]);
					}

					
				}, rotationInterval);
				
				return this;
			},
			
			
			reset: function()
			{
				ts.rotator.stop();
				ts.rotator.init();
				
				return this;
			},
			
			stop: function()
			{
				clearTimeout(ts.rotationLoop);
				
				return this;
			}
			
		},
		

		showBigListener: function(doNotGoNext)
		{
			// Listens for the click on elements then changes main pics
			$(".showCptPicsTn", ts.context).attr("hidefocus","hidefocus").click( function(event, triggered)
			{
				if (!doNotGoNext)
				{	
					ts.rotator.stop($(this));
					
					// Remove "current" class on all the pics
					$(".showCptPicsTn", ts.context).removeClass("current");
					
					// Add "current" class on clicked item
					$(this).addClass("current");
					
					// Get the id of the clicked element and update data with ajax
					var clickedItemID = $(this).attr("id");
					if ( clickedItemID !== "" ) { ts.getData(clickedItemID); }
					
					// Launch timeout
					if (rotationInterval) { ts.rotator.goNext($(this));	}
				}
				if(mode == "simpleMode"){return true;}
				else{return false;}
			});
			
			return this;
		},
				

		preloadPics: function(data)
		{
			$.each(data, function(key, value)
			{
				var PicsSRCSize = value.imgSize;
				var picsSRC = value.img.replace(/()(.jpg)/i, '$1'+PicsSRCSize+'$2');
				
				preload(picsSRC);
			});
			
			return this;
		},
				
				
		getData: function(clickedItemID)
		{
			if (ts.alreadyLoadedData === false )
			{
	
				var req = $.ajax(
				{
					url: AjaxTopShowsDataURL,  // URL defined in conf.js
					dataType: "json",
					success: function(data)
					{
						// Set the already loaded data var to true
						ts.alreadyLoadedData = true;
						
						// Keep the data into a var
						ts.jsonLoadedData = data;
						
						// If the function has been called passing a clickedItemID param, we update data
						// else we lanch the function to preload pics
						if (typeof(clickedItemID)!= "undefined")
						{
							ts.updateData(data, clickedItemID);	
						}
						else
						{
							ts.preloadPics(data);
						}
			
			 		},
					error: function () { if (window.console && window.console.error){ console.error(arguments); } }
				});						
			}
			else
			{
				// Launch data update using existing data var
				ts.updateData(ts.jsonLoadedData, clickedItemID);
			}
			
			return this;
		},


		updateData: function(data, clickedItemID)
		{	
			$.each(data, function(key, value)
			{	
				if (key == clickedItemID)
				{	
					var newTitle = value.title;
					var newDate = value.date;
					var newSummary = value.description;
					var newClass = value.lienclass;
					var newHREF = value.link.replace(new RegExp("(&amp;)", "g"), "&");
					newHREF = value.link.replace(new RegExp("(&#38;)", "g"), "&");
					var newBigPicsSRCSize = value.imgSize;
					var newBigPicsSRC = value.img.replace(/()(.jpg)/i, '$1'+newBigPicsSRCSize+'$2');
					
					// enlever les eventuelles classes associees a une appli (Cappu, etc)
					for(classe in vDoKitClasses)
					{
						$("#show_cpt_date_n_title_line .itemTitle", ts.context).removeClass(vDoKitClasses[classe]).unbind();
						$("#show_cpt_date_n_title_line .itemDate", ts.context).removeClass(vDoKitClasses[classe]).unbind();
						$("#topShowCaptionPxLnk", ts.context).removeClass(vDoKitClasses[classe]).unbind();
					}

					// titre + lien
					$("#show_cpt_date_n_title_line .itemTitle", ts.context).empty().append(newTitle).attr("href",newHREF).addClass(newClass);
					// date de diffusion + lien
					$("#show_cpt_date_n_title_line .itemDate", ts.context).empty().append(newDate).attr("href",newHREF).addClass(newClass);
					// grande image + lien
					$(".ctntBlk .pxBlk img", ts.context).attr("src",newBigPicsSRC).attr("alt",decodeHTMLChars(newTitle)).attr("title",'');
					$("#topShowCaptionPxLnk", ts.context).attr("href",newHREF).attr("alt",decodeHTMLChars(newTitle)).addClass(newClass);
					// resume
					$("#showCptTnNSummaryLine .itemSummary", ts.context).empty().append(newSummary);
					
					//alert($("#show_cpt_date_n_title_line .itemDate", ts.context).attr('class'));
					var tmp = OAS_sitepage.indexOf("programmes/series-et-fictions");
					
					// In the case we are in the "series & fictions" page and if there's a "related-links" element in the data
					if (tmp > -1 &&  value.relatedLinks )
					{	
						var opening = '<ul class="tabsLst">';
						var ending = '</ul>';
						var content = '';
						var count = 0;

						$.each(value.relatedLinks, function(subKey, subValue)
						{
							content += '<li class="tabIt"><a href="' + subValue.link + '" class="' + subValue.cssClass + '"><span class="left">&nbsp;</span><span class="label">' + subValue.label + '</span><span class="right">&nbsp;</span></a></li>';
							count++;
						});

						if (content !== '')
						{
							var newlinks = opening + content + ending;
							$("#showCptTnNSummaryLine .tabsBlk .tabsLst", ts.context).replaceWith( newlinks );
						}

						$("#showCptTnNSummaryLine #ts_relatedLink0", ts.context).attr("href", newHREF);


					}
				}
			});
			catchVdoKitStart();
			return this;
		},

				
		reflector: function()
		{
			if (ts.setReflects === true)
			{
				$(".showCptPicsTn img.ctntPx, .showCptPicsTn img.reflected", ts.context).slice(0,3).reflect({height: 0.3, opacity: 0.6});
			}
			
			return this;		
		}
							
	};


	// Initialisation functions
	ts.scrollListener().showBigListener().reflector();
	if ( rotationInterval && rotationInterval > 0) { ts.rotator.init(); }	


}




// ----------------------------------------------------- \\
// This function 
// ----------------------------------------------------- \\
function handleLatestComments(cmtsURLParentSlctr, destContainerSlctr)
{
	var lastComments =
	{
		
		init: function()
		{
			var cmtsURLObj = $(".itemCommentsLnk", cmtsURLParentSlctr);
			
			// Get dynamic params for ajax call function
			var articleID = getURLParamValue($(cmtsURLObj).attr("href"), "id_article");
			var chemin = getURLParamValue($(cmtsURLObj).attr("href"), "chemin");
			var titreInterne = getURLParamValue($(cmtsURLObj).attr("href"), "titreInterne");
			var lnkSelector = $(cmtsURLObj).attr("id");

			// Hide the comments block (will only be showed on ajax request success)
			$(destContainerSlctr).hide();
			
			// Call the ajax function with good parameters
			lastComments.getData(articleID, chemin, titreInterne, cmtsURLParentSlctr, destContainerSlctr);
			
			return this;
		},
		
		getData: function(articleID,chemin,titreInterne,cmtsURLParentSlctr, destContainerSlctr)
		{
			var req = $.ajax(
			{
				// URL defined in conf.js
				url: AjaxGetCommentsURL + "?id_article=" + articleID + "&chemin=" + chemin + "&titreInterne=" + titreInterne,
				dataType: "xml",
				success: function(data)
				{
					if ($("article", data).length >= 1)
					{
						var tmp01 = '<div class="newsLkIt"><div class="dataBlk"><div class="blk20prctCtnt itemTitleBlk"><h3 class="itemTitle">';
						var tmp02 = '</h3><span class="itemDatetime">';
						var tmp03 = '</span></div><div class="blk80prctCtnt itemCtntBlk"><p class="itemSummary">';
						var tmp04 = '</p></div></div></div>';
						
						var tmpItems = "";
						
						// For each <message> item, we create the corresponding HTML
						$("article > messages > message", data).each(function()
						{
							var author = $("auteur", $(this)).text();
							var date = $("date", $(this)).text();
							var content = $("contenu", $(this)).text();
							
							var newItem = tmp01 + author + tmp02 + date + tmp03 + content + tmp04;
							tmpItems += newItem; // concatenates the item to others (buffer)
						});
						
						// Then, prepend all this items in the container
						$( destContainerSlctr + " .ctnt").prepend(tmpItems);
						
						// Add "lastIt" class on the last item
						$(destContainerSlctr + " .newsLkIt:last").addClass("lastIt");
			
						// Finally, display the block
						$(destContainerSlctr).show();
						
						var commentsNb = $("article > nb_commentaires", data).text();
						var commentsURL = $("article > url_commentaires", data).text();
						commentsURL = commentsURL.replace(/\&/,'&amp;');
						var urlAddComment = $("article > url_ajout_commentaire", data).text();
						urlAddComment = urlAddComment.replace(/\&/,'&amp;');
						
						$(cmtsURLParentSlctr + " .itemCommentsLnk").attr("href", commentsURL);
						$(destContainerSlctr + " .CommentsLnk").empty().text(commentsNb).attr("href", commentsURL);
						$(destContainerSlctr + " .AllCommentsLnk").attr("href", $(destContainerSlctr + " .CommentsLnk").attr("href"));
						
						// Add href on each add comment link
						$(cmtsURLParentSlctr + " .addCommentLnk, " + destContainerSlctr + " .addCommentLnk").attr("href",urlAddComment);
						
						// Function(s) handling listener that concearn tabs contents
						//initAjaxNewContentsHandlers();
					}
		 		},
				error: function () { if (window.console && window.console.error){ console.error(arguments); } }
			});
			
			return this;
		}
		
		
	};
	
	lastComments.init();

}



// ----------------------------------------------------- \\
// This function handles comments links to
// ----------------------------------------------------- \\
function handleComments(ctntrSelector)
{	
	var comments =
	{
		init: function()
		{
			$(ctntrSelector + " .itemCommentsLnk").each(function()
			{
				// Get dynamic params for ajax call function
				var articleID = getURLParamValue($(this).attr("href"), "id_article");
				var chemin = getURLParamValue($(this).attr("href"), "chemin");
				var titreInterne = getURLParamValue($(this).attr("href"), "titreInterne");
				var urlArticle = unescape(getURLParamValue($(this).attr("href"), "url_article"));
				urlArticle = urlArticle.substring(urlArticle.indexOf("http"), urlArticle.length);
				var lnkSelector = $(this).attr("id");
		
				// Calls the ajax functin with good parameters
				comments.getNb(articleID, chemin, titreInterne, urlArticle, lnkSelector);
			});
			
			return this;
		},
		
		getNb: function(articleID,chemin,titreInterne,urlArticle,lnkSelector)
		{
			var req = $.ajax(
			{
				// URL defined in conf.js
				url: AjaxGetCommentsDataURL + "?id_article=" + articleID + "&chemin=" + chemin + "&titreInterne=" + titreInterne + "&url_article=" + urlArticle,
				dataType: "json",
				success: function(data)
				{
					$.each(data, function(entryIndex, entry)
					{
						var commentsNb = entry.nb_commentaires;
						var commentsURL = entry.url_commentaires;
						
						$("#" + lnkSelector).empty().text(commentsNb).attr("href",commentsURL);
					});
		
					// Function(s) handling listener that concearn tabs contents
					//initAjaxNewContentsHandlers();
		 		},
				error: function () { if (window.console && window.console.error){ console.error(arguments); } }
			});
			
			return this;
		}
	};

	comments.init();

}



// ----------------------------------------------------- \\
// This function hides by default each element of a menu
// and listens to the click on its items, then toggles
// ----------------------------------------------------- \\

function handleMenu()
{
	var progMenu = "#eSMenuPrograms";
	var progMenuActivator = "#eMenuItPrograms";
	var regMenu = "#eSMenuRegions";
	var regMenuActivator = "#eMenuItRegions";

	var menu = {
		
		reqSMenuProg: null,
		loadedSMenuProg: false,
		loadingSMenuProg: false,
		
		reqSMenuReg : null,
		loadedSMenuReg: true,
		loadingSMenuReg: true,


		init: function(menuSelector, menuActivationSelector)
		{
			$(menuActivationSelector).
				mouseover( function() { menu.over(menuSelector); } ).
				focus( function() { menu.over(menuSelector); } ).
				mouseout( function() { menu.out(menuSelector); } ).
				blur( function() { menu.out(menuSelector); } );
			
			return this;
		},


		over: function(menuSelector)
		{
			// Case of the "Programmes" Submenu
			if ( menuSelector === progMenu )
			{
				if (!menu.loadedSMenuProg && !menu.loadingSMenuProg) { menu.loadingSMenuProg = true; menu.loadSMenuProg(menuSelector, "load"); }
				else { menu.show(menuSelector); }	
			}
			else if ( menuSelector === regMenu )
			{
				menu.show(menuSelector);
				menu.sizeSMenuReg(menuSelector);
/*
BA : genere flickering IE
				$(menuSelector + " *").not("#eSMenuRegLabelAside").
					mouseover( function() { $(menuSelector).show(); } ).
					mouseout( function() { $(menuSelector).hide(); } ).
					focus( function() { $(menuSelector).show(); } ).
					blur( function() { $(menuSelector).hide(); } );
*/
/* évite flickering */
				$(menuSelector + " *").not("#eSMenuRegLabelAside").
					mouseover( function() { $(menuSelector).show(); } );
				$(menuSelector).
					mouseout( function() { $(menuSelector).hide(); } );
			}
			else
			{
				menu.show(menuSelector);
				$(menuSelector).
					mouseover( function() { $(this).show(); } ).
					mouseout( function() { $(this).hide(); } ).
					focus( function() { $(this).show(); } ).
					blur( function() { $(this).hide(); } );
			}
			
			return this;
		},


		out: function(menuSelector)
		{
			// Case of the "Programmes" Submenu
			if ( menuSelector === progMenu )
			{
				menu.loadSMenuProg(progMenu, "abort");
				menu.hide(progMenu);
			}
			else if ( menuSelector === regMenu )
			{
				menu.hide(menuSelector);
			}
			
			return this;
		},


		loadSMenuProg: function(menuSelector, action)
		{
			// If called action is "load", we do the request
			if (action == "load")
			{
				menu.reqSMenuProg = $.ajax(
				{
					// URL defined in conf.js
					url: loadSMenuProgramsURL,
					dataType: "html",
					//beforeSend: function()
					//{
					//	if ( $("#supportNav .ajaxRequesting").length < 1 ) { $("#supportNav").append(ajaxLoadingMsg); }
					//},
					success: function(data)
					{
						menu.loadedSMenuProg = true;

						// Remove throbber
						//$("#supportNav .ajaxRequesting").remove();
						
						// Insert data
						$(menuSelector).html(data).
							mouseover( function() { $(this).show(); } ).
							mouseout( function() { $(this).hide(); } ).
							focus( function() { $(this).show(); } ).
							blur( function() { $(this).hide(); } );

						// Display the menu
						menu.show(menuSelector);
						
						// Ad a trobber
						$("#eLettresAlpha").append(ajaxLoadingMsg);
						
						// If Browser is IE < 7, we have to emulate :hover on <li>
						if (BrowserIsLtIE7)
						{ 
							$("#eOngletsLettres li").
								mouseover( function() { $(this).siblings("li").removeClass("iehover").end().addClass("iehover"); }).
								focus( function() { $(this).siblings("li").removeClass("iehover").end().addClass("iehover"); });
						}
						
						// Launch Submenu Tabs request function then launch listener function
						menu.loadSMenuProgTabs().handleSMenuProgTabs();
			 		},
					error: function () { if (window.console && window.console.error){ console.error(arguments); } }
				});
			}
			// Else the request is aborted
			else
			{
				if ( menu.reqSMenuProg )
				{
					// Abort Request (if not too late)
					menu.reqSMenuProg.abort();
					
					menu.loadingSMenuProg = false;
					
					// Remove throbber
					//$("#supportNav .ajaxRequesting").remove();
				}
			}
			
			return this;
		},


		loadSMenuProgTabs: function(Params)
		{
			menu.reqSMenuProgTabs = $.ajax(
			{
				// URL defined in conf.js
				url: (Params) ? (SMenuProgramsTabsURL + ((SMenuProgramsTabsURL.indexOf('?') > -1)?'&':'?') + Params) : SMenuProgramsTabsURL,
				dataType: "html",
				success: function(data)
				{
					$("#eLettresAlpha").empty().append(data);
					
					menu.setSMenuProg3Cols();
		 		},
				error: function () { if (window.console && window.console.error){ console.error(arguments); } }
			});
			
			return this;
		},


		handleSMenuProgTabs: function()
		{
			$("#eOngletsLettres li a.ajaxTabCtnt").click(function()
			{
				// Get param
				var ParamValue = getURLParamValue( $(this).attr("href"), "b_ProgSubMenuTab" );
				
				menu.loadSMenuProgTabs("b_ProgSubMenuTab=" + ParamValue);
				
				return false;
			});

			return this;
		},
		
		
		setSMenuProg3Cols: function()
		{	
			var nbDTDD = $("#eSMenuPrograms dl dt").length + $("#eSMenuPrograms dl dd").length;

			var cutAfter = Math.ceil(nbDTDD / 3);
			var colCloser = '<dl class="eLFloated"></dl>';
		
			var tmp = $("#eSMenuPrograms dl").clone();
			var tmp2 = $("#eSMenuPrograms dl").clone();
			tmp.appendTo("#eLettresAlpha");
			tmp2.appendTo("#eLettresAlpha");
			$("#eSMenuPrograms dl:eq(0)").children("*").slice(cutAfter,nbDTDD).remove();
			$("#eSMenuPrograms dl:eq(1)").children("*").slice(0,cutAfter).remove();
			$("#eSMenuPrograms dl:eq(1)").children("*").slice(cutAfter+1, nbDTDD).remove();
			$("#eSMenuPrograms dl:eq(2)").children("*").slice(0,cutAfter*2+1).remove();

			// If the last child of a DL is a DT, we move it to the top of the next DL
			$("#eSMenuPrograms dl").not(":last").each(function()
			{
				if( $(this).children("*:last").is("DT"))
				{
					$(this).children("*:last").remove().prependTo( $(this).next("DL") );
					$(this).next("DL").not(":last").children("*:last").remove().prependTo( $(this).next("DL").next("DL") );
				}
			});
			
			// Add "lastone" class on the last DL
			$("#eSMenuPrograms dl:last").addClass("lastone");
			
			// If the first child of a dl is a DT, we remove its padding-top
			$("#eSMenuPrograms dl").each(function() { if( $(this).children("*:first").is("DT") ) { $(this).children("*:first").css("padding-top","0"); } });
			
			// Get the higher height of the 3 DL and applies it to the others
			var widthTable = [];
			$("#eSMenuPrograms dl").each(function() { widthTable.push( parseInt( $(this).height(), 10 ) ); });
			widthTable.sort().reverse();
			$("#eSMenuPrograms dl").height(widthTable[0]);
			
			menu.sizeSMenuProg();
			
			return this;
		},
		
		
		sizeSMenuProg: function()
		{			
			// Get submenu content dimensions then updates shadow pics dimensions to fit
			var sMenuCtnt = $("#eSMenuCtnt");
			var tmp_h = sMenuCtnt.height();
			var tmp_w = sMenuCtnt.width();
			$("#eSMenuL, #eSMenuR").height(tmp_h);
			$("#eSMenuBM").width(tmp_w-10);
			$("#eSMenuTM").width(tmp_w+2);
			
			// Set equal heights for the lists
			var lettresAlpha = $("#eLettresAlpha");
			lettresAlpha.height(tmp_h - parseInt( lettresAlpha.css("padding-top"), 10 ) - parseInt( lettresAlpha.css("padding-bottom"), 10 ));
			
			return this;
		},


		sizeSMenuReg: function(menuSelector)
		{
			// Get submenu content dimensions then updates shadow pics dimensions to fit
			var tmp_h = $("#eSMenuCtntReg").height();
			var tmp_w = $("#eSMenuCtntReg").width();
			$("#eSMenuRegL, #eSMenuRegR").height(tmp_h);
			$("#eSMenuRegBM").width(tmp_w-10);
			$("#eSMenuRegTM").width(tmp_w+2);
			
			// Makes the menu to hide when going at the right
			$("#eSMenuRegLabelAside").width( $(menuSelector).width() - $("#eSMenuCtntRegLabel").width() ).height( $("#eSMenuCtntRegLabel").height() );
			
			return this;
		},


		show: function(menuSelector)
		{
			// Specific case for the Programs Submenu
			if (menuSelector === progMenu) { $(menuSelector).show().css("left",posSMenuPrograms).css({position: "absolute", top:"-4px"}); }
			else if (menuSelector === regMenu) { $(menuSelector).show().css("left",posSMenuRegions).css({position: "absolute", top:"-4px"}); }
			
			// Default case for common menus
			else { $(menuSelector).show(); }
			
			return this;
		},


		hide: function(menuSelector)
		{
			$(menuSelector).hide();
			
			return this;
		}
		
	};


	menu.init(progMenu, progMenuActivator);
	if( ftvi_portail === "france3" ){ menu.init(regMenu, regMenuActivator); }

}




// ----------------------------------------------------- \\
// This function handles AJAX loading for tabs content
// ----------------------------------------------------- \\
function handleAjaxTabsContent(blockReqParamName, parentSelector, tabContentFilePath, finalParam)
{
	finalParam=finalParam!=undefined?'&':'?';
	$(parentSelector + " .tabsBlk .tabIt a").not(".letLive").click(function()
	{
		var replaceIn = parentSelector + " .ctnt:first";
		var jq_obj = $(this);
		var tmp_href = jq_obj.attr("href"); // gets href
		
		var pos = tmp_href.indexOf(blockReqParamName); // gets position of the param		
		var ParamValue = getURLParamValue(tmp_href, blockReqParamName);
		
		var reqTabContent = $.ajax(
		{
			url: tabContentFilePath + finalParam + blockReqParamName + "=" + ParamValue,
			dataType: "html",
			success: function(dataTabContent)
			{
				dataTabContent = reqTabContent.responseText; // get response
				
				// Do the cleaning
				$(replaceIn + " .ajaxRequesting").remove(); // removes "loading" message
				$(replaceIn).empty().append(dataTabContent); // empties container
				
				// Chang TabItems Status
				$(parentSelector + " .tabsBlk .current").removeClass("current");
				$(jq_obj).addClass("current");
				
				// Function(s) handling listener that concearn tabs contents
				newContentsContext = $(replaceIn);
				initAjaxNewContentsHandlers(newContentsContext);
	 		},
			error: function () { if (window.console && window.console.error){ console.error(arguments); } }
		});
		
		$(replaceIn).slice(0,1).prepend(ajaxLoadingMsg);
		
		
		return false;
	});
}



function handleAreaSpeNews()
{
	var mainContext = $("#AreaNewsBlk");
	var context = $("#areaMapSelectionBlk");
	var replaceIn = ".ctntBlk .ctnt";
	var areaNewsBlkSelector = "#AreaNewsBlk";
	var commonNewsBlkSelector = "#lastInfoNewsBlk01";
	
	var AreaMap =
	{
		lauchMap: function()
		{
			$(".areaMapLauchLnk",mainContext).click( function()
			{
				// 
				var reqParams = "";
				var toAreaPagesLinks = false;
				if ( mainContext.is(".smallBlkversion") )
				{
					toAreaPagesLinks = true;
					$(this).parents("div.col.blk20prctCtnr")/*.css("overflow","visible")*/;
					if( !($.browser.msie==true&&$.browser.version==6 ))
						$(this).parents("#eRight50Col").css("overflow","visible");
				}
				
				// The ajax request should only be proceed if the content has not
				// already been loaded
				if (alreadyLoadedAreaMap === false)
				{
					// Show the Block and adds a throbber
					context.show().find(replaceIn).prepend(ajaxLoadingMsg).addClass("loading");
					
					// Proceed the ajax request
					var req = $.ajax(
					{
						// URL defined in conf.js
						url: AjxAreaMapSelectionBlkURL,
						dataType: "html",
						success: function(data)
						{
							// Remov "loading" message
							$(".ajaxRequesting", context).remove(); 
							
							// Append the data to the block
							context.find(replaceIn).removeClass("loading").prepend(data);
							
							// Handle the close button
							$(".toggleBtnLnk", context).click(function() {
								context.hide();
								if( !($.browser.msie==true&&$.browser.version==6 ))
									$(this).parents("#eRight50Col").css("overflow","hidden");
								return false;
							});
							
							// Launch News Refresh
							if (toAreaPagesLinks !== true) { areaNews.select(); }
							
							// Setup the "alreadyLoaded" var to true
							alreadyLoadedAreaMap = true;
				 		},
						error: function () { if (window.console && window.console.error){ console.error(arguments); } }
					});
				}
				else
				{
					// Display the Block
					context.show();
				}
				
				return false;
			});	
		}

	};
	
	var areaNews = 
		{
			togglerL: '<div class="horizBlkToggler"><a class="horizBlkTogglerLnk toLeft" id="horizBlkTogglerToLeftLnk" href="#" title="[Javascript] Déplier/Replier le block horizontalement"><span>&nbsp;</span></a></div>', 
			togglerR: '<div class="horizBlkToggler"><a class="horizBlkTogglerLnk toRight" id="horizBlkTogglerToRightLnk" href="#" title="[Javascript] Déplier/Replier le block horizontalement"><span>&nbsp;</span></a></div>', 
			
			select: function()
			{
				$("#areaMapSelectionBlk .areaLnk").click(function()
				{
					// Get the id of the clicked area and removes every no-numeric characters from the string
					var selectedAreaID = $(this).attr("id").replace(/\D/g,'');
					
					// Writ the region in a cookie
					$.cookie('ftvi_myregion', selectedAreaID, { expires: 365 });
					
					areaNews.resizeNewsBlocks().update(selectedAreaID);
					
					return false;
				});
			},
		
			resizeNewsBlocks: function()
			{
				// Resiz map
				context.hide();
				
				// Expand the Area News Block
				areaNews.init();
				
				return this;
			},
		
			update: function(selectedAreaID)
			{
				var finalParam = (AjxAreaNewsBlkURL.indexOf('?') > -1) ? '&' : '?';
				// Proceed the ajax request
				var req = $.ajax(
				{
					// URL defined in conf.js
					url: AjxAreaNewsBlkURL + finalParam + "ftvAreaNews=" + selectedAreaID,
					dataType: "html",
					success: function(data)
					{
						// Get only the parts of the data that we are interested in then do the cleaning and append the data
						data = $("#mainAreaNewsContent", data).html();
						var areaNewsBlkReplaceIn = $(".ctntBlk", mainContext).slice(0,1).empty().prepend(data);
						
						// Function(s) handling listener that concearn tabs contents
						initAjaxNewContentsHandlers($(replaceIn));
						AreaMap.lauchMap();
						
			 		},
					error: function () { if (window.console && window.console.error){ console.error(arguments); } }
				});
				
				return this;
			},
		
			init: function()
			{
				var areaNewsBlkCtnt = $(areaNewsBlkSelector).find(".ctnt").slice(0,1);
				var commonNewsBlkCtnt = $(commonNewsBlkSelector).find(".ctnt").slice(0,1);
				
				// Resize blocks sizes using structurals classes
				$(areaNewsBlkSelector).removeClass("blk50prctCtnr smallified").addClass("blk75prctCtnr");
				$(commonNewsBlkSelector).removeClass("blk50prctCtnr").addClass("blk20prctCtnr smallified").find(".horizBlkToggler").remove();
				
				// Add Toggle Button
				var w = commonNewsBlkCtnt.width();
				
				// Set new sizes for the content container and the button to fit each other, and then launch a click event listener for the button
				commonNewsBlkCtnt.width(w - 25).css({'padding':0, 'float':"left", 'clear':"none"}).before(areaNews.togglerL);

				// Init collapse listener
				var h = commonNewsBlkCtnt.height();
				$("#horizBlkTogglerToLeftLnk").height(h).click(function() { areaNews.collapse(); return false; });
				
				return this;
			},
		
			collapse: function()
			{
				var areaNewsBlkCtnt = $(areaNewsBlkSelector).find(".ctnt").slice(0,1);
				var commonNewsBlkCtnt = $(commonNewsBlkSelector).find(".ctnt").slice(0,1);
				
				$(areaNewsBlkSelector).removeClass("blk75prctCtnr").addClass("blk20prctCtnr smallified");
				$(commonNewsBlkSelector).removeClass("blk20prctCtnr smallified").addClass("blk75prctCtnr").find(".horizBlkToggler").remove();
				
				commonNewsBlkCtnt.css({'width':"auto", 'float':"none"});
				
				// Add Toggle Button
				var w = areaNewsBlkCtnt.width();

				// Set new sizes for the content container and the button to fit each other
				areaNewsBlkCtnt.width(143).css({'float':"left", 'clear':"none", 'padding-left':0}).after(areaNews.togglerR).find(".newsLkIt").slice(4).hide();
				
				// Init expand listener
				var h = areaNewsBlkCtnt.height();
				$("#horizBlkTogglerToRightLnk").height(h).click(function() { areaNews.expand(); return false; });
				
				return this;
			},
		
			expand: function()
			{
				var areaNewsBlkCtnt = $(areaNewsBlkSelector).find(".ctnt").slice(0,1);
				var commonNewsBlkCtnt = $(commonNewsBlkSelector).find(".ctnt").slice(0,1);
				
				// Resiz blocks sizes using structurals classes
				$(commonNewsBlkSelector).removeClass("blk75prctCtnr").addClass("blk20prctCtnr smallified");
				$(areaNewsBlkSelector).removeClass("blk20prctCtnr smallified").addClass("blk75prctCtnr").find(".horizBlkToggler").remove();
				
				// Add Toggle Button, sets new sizes for the content container and the button to fit each other
				var w = commonNewsBlkCtnt.width();
				areaNewsBlkCtnt.css({'padding-left':0, 'width':"auto", 'float':"none"}).find(".newsLkIt").show();			
				commonNewsBlkCtnt.width(w - 25).css({'padding-left':0, 'float':"left", 'clear':"none"}).before(areaNews.togglerL);
				
				// Init collapse listener
				var h = commonNewsBlkCtnt.height();
				$("#horizBlkTogglerToLeftLnk").height(h).click(function() { areaNews.collapse(); return false; });
				
				return this;
			},
			
			cookieMGR: function()
			{
				// The usual functions are defined, we can then test the cookie value and update the contents if the value exists in it
				var cookieValue = $.cookie('ftvi_myregion');
				if ( typeof(cookieValue) != "undefined" && cookieValue > 0)
				{
					var areaNewsBlkCtnt = $(areaNewsBlkSelector).find(".ctnt").slice(0,1);
					
					// Empty the block content and adds a throbber
					areaNewsBlkCtnt.empty().prepend(ajaxLoadingMsg);
					
					// Initialise the Area news block
					areaNews.init().update(cookieValue);
				}
				
				return this;
			}

		};

	// Lauch Map links listening function
	AreaMap.lauchMap();
	if ( mainContext.length > 0 ) { areaNews.cookieMGR();	}

}


function handleCloseBtns()
{
	$(".btnFermer").click(function() { window.close(); });
}

// ----------------------------------------------------- \\
// This function handles AJAX loading for videos
// ----------------------------------------------------- \\
function handleVdosLst(selecteur,destination){
	$(selecteur).click(function() {
		$(destination).empty();
		var jq_obj = $(this);
		var tmp_href = jq_obj.attr("href"); // gets href
		$.ajax({
			url: commonBlocksPath+"/player.php?url="+tmp_href,
			cache: false,
			success: function(html){
				$(destination).append(html);
			}
		});
		return false;
	});
}

// ----------------------------------------------------- \\
// This function handles AJAX loading for sondage
// ----------------------------------------------------- \\
function handleSondage(poll_ident, category, template)
{
	var req = $.ajax(
	{
		type: "POST",
		url: '/appftv/sondage/common/show_sondage.php',
		dataType: "html",
		data: "poll_ident="+poll_ident+"&category="+category+"&template="+template,		
		success: function(myhtml)
		{
			$("#sondage").html(myhtml);
			if($.browser.msie) {
				finishDesignIE6();
			}
			getSondageResponseOnClick(poll_ident, category, template);
		},
		error: function () { if (window.console && window.console.error){ console.error(arguments); } }
	});	
}

// Version jumelle maléfique de la fonction handleSondage, 
// qui récupère les infos du sondage directement dans les attributs du div
// ( => et donc pas besoin de les passer dans le js)
function manipulerPoll()
{	

	$('.sondage').each(function() {
	// traitement des parametres a passer au template SPIP "sondage"
		var paramsPossibles = ['pollIdent_', 'category_', 'template_'];
		var classes = ($(this).attr('class')).split(' ');
		var params = [];
		for(classe in classes) {
			for(i in paramsPossibles) {
				if(classes[classe].indexOf(paramsPossibles[i]) == 0) {
					var param = classes[classe].split('_');
					params[i] = param[1];
				}
			}
		}
		var sondage_id = $(this).attr('id');
				
		//handleSondage(params[0], params[1], params[2]);		
		var req = $.ajax(
		{
			type: "POST",
			url: '/appftv/sondage/common/show_sondage.php',
			dataType: "html",
			data: "poll_ident="+params[0]+"&category="+params[1]+"&template="+params[2],		
			success: function(myhtml)
			{
				$("#"+sondage_id).html(myhtml);
				if($.browser.msie) {
					finishDesignIE6();
				}
				
				//getSondageResponseOnClick(params[0], params[1], params[2]);
				$("#"+sondage_id+" #button_sondage").click(function()
				{		
					var req = $.ajax(
					{
						type: "POST",
						url: '/appftv/sondage/common/show_response.php',
						dataType: "html",
						data: "poll_ident="+params[0]+"&category="+params[1]+"&template="+params[2]+'&action=vote&option_id='+$('#'+sondage_id+" #form_sondage input:checked").val(),			
						success: function(myhtml)
						{
							$("#"+sondage_id).html(myhtml);	
						},
						error: function () { if (window.console && window.console.error){ console.error(arguments); } }
					});		
				});
				
			},
			error: function () { if (window.console && window.console.error){ console.error(arguments); } }
		});			
	
	});	

}

function getSondageResponseOnClick(poll_ident, category, template)
{	
	$("#button_sondage").click(function()
	{		
		var req = $.ajax(
		{
			type: "POST",
			url: '/appftv/sondage/common/show_response.php',
			dataType: "html",
			data: "poll_ident="+poll_ident+"&category="+category+"&template="+template+'&action=vote&option_id='+$("#form_sondage input:checked").val(),			
			success: function(myhtml)
			{
				$("#sondage").html(myhtml);	
			},
			error: function () { if (window.console && window.console.error){ console.error(arguments); } }
		});		
	});
}

// ----------------------------------------------------- \\
// This function handles AJAX loading for diaporama
// ----------------------------------------------------- \\
function handleDiaporamas() {
	var urlToLoad = '/spipftv/francetv/dfusion/index-fr.php?page=diaporama';	

	$('.diaporama').each(function() {
		var diaporama_ident = $(this).attr('id').replace('diapo', '');
		var paramsToLoad = '&id_article='+diaporama_ident;
		
		// traitement des parametres a passer au template SPIP "diaporama"
		var paramsPossibles = ['nbMiniatures_', 'nbTotal_', 'hauteur_', 'largeur_', 'legendeMiniatures'];
		var classes = ($(this).attr('class')).split(' ');
		for(classe in classes) {
			for(i in paramsPossibles) {
				if(classes[classe].indexOf(paramsPossibles[i]) == 0) {
					var param = classes[classe].split('_');
					paramsToLoad += '&' + param[0] + '=' + param[1];
				}
			}
		}
		
		$(this).load(urlToLoad + paramsToLoad, {}, function() {
			$('#'+$(this).attr('id')+' .showdiaporama ul a').lightBox();
			$('#'+$(this).attr('id')+' .showdiaporama ul a').click(function() {
				var mytop = $('.showdiaporama').offset().top-100;
				$('#jquery-lightbox').css({ top:eval(mytop) });
			});
		});
	});
}
