﻿/*******************************************************************************
 * ilsontdit.js
 *
 * Scripts divers utilisés pour l'application SDX Ils ont dit.
 * Requiert jQuery et les plugins suivants:
 * 	- jquery LiveQuery
 * 	- jquery UI
 * Requiert egalement:
 *  - la librairie jscache de Monsur Hossain
 *    (voir http://www.monsur.com/projects/jscache/)
 ******************************************************************************/
var currentDocid = "";

var jsCache = new Cache(-1);

var domaineRolodex = getURLParam('domaine');
var modeRolodex = getURLParam('mode');
modeRolodex = ($.trim(modeRolodex) == '') ? 'photo': modeRolodex; // On s'assure que le mode photo soit choisi si le mode n'a pas été spécifié

document.originalTitle = document.title;



/* Initialisation de l'application */
$(document).ready(function() {
	$('#content').wrap('<div id="content-wrapper"></div>');
	$("#content-wrapper").after('<div class="load"><p><img src="images/ajax-loader.gif" alt="Chargement" /> Chargement en cours...</p></div>');
	
	addEvents();
	addLinks();
	addHoverTitles();

	initLeSaviezVous();
	initSearchForm();
	initPlayer();
	
	// loadListe();

	zebraStripe();
	pngFix();

	showRolodex();
});



/* Objet FicheAudio */
function FicheAudio(sdxdocid, extrait, nom_personnalite, nom_personnalitePlayer, dates_associees, photographie, resume, biographie, emission, emission_titre, interviewer, date_diffusion, domaine, sujet) {
	this.sdxdocid = sdxdocid;
	this.extrait = extrait;
	this.nom_personnalite = nom_personnalite;
	this.nom_personnalitePlayer = nom_personnalitePlayer;
	this.dates_associees = dates_associees;
	this.photographie = photographie;
	this.resume = resume;
	this.biographie = biographie;
	this.emission = emission;
	this.emission_titre = emission_titre; /* Champ emission_titre utilisé si l'enregistrement n'est pas une emission (allocution, discours, etc.) */
	this.interviewer = interviewer;
	this.date_diffusion = date_diffusion;
	this.domaine = domaine;
	this.sujet = sujet;
}

/*
	getFicheAudio() retourne les informations sur une ou les fiches
	audio associées à une valeur et un champ.
	La requête est asynchrone et une fonction callback est appelée lorsque cette
	requête est terminée avec en paramètre un array de FicheAudio.
	@param: f - le champ à utiliser pour la requête (exemples: sdxdocid, personnalite)
	        v - la valeur à rechercher
	        callback - la fonction callback (optionel)
	        hpp - le nombre de résultats à retourner (optionel, -1: Aucune limite (par défaut))
	@return: array de FicheAudio

	exemple d'utilisation avec le sdxdocid:
		getFicheAudio("sdxdocid", "0003515916", function(fichesAudio) {
			for (var i=0; i<fichesAudio.length; i++) {
				alert(fichesAudio[i].resume);
			}
		});
*/
function getFicheAudio(f, v, callback, hpp) {
	var fichesAudio = new Array();
	$.ajax({
		url: "query_archiveRadio",
		data: "f=" + f + "&v=" + replaceURLAccents(v) + "&sortfield=personnalite&order=ascendant" + "&hpp=" + (hpp ? hpp : "-1"),
		dataType: "xml",
		success: function(xmlData) {
			/*
				En attendant un support des nodes ayant des : dans leur ID (entre en
				conflit avec des sélecteurs CSS), on fait une vérification du fureteur
				pour utiliser des sélecteurs qui fonctionnent pour chaque browser.
				A noter que Firefox 3 = 1.9, Firefox 2 = 1.8
				(voir: http://dev.jquery.com/ticket/155)
			*/
			if (($.browser.mozilla && $.browser.version.substr(0,3) < 1.9) || $.browser.opera) {
				$(xmlData).find("result").each(function(i){
					fichesAudio[i] = new FicheAudio();

					fichesAudio[i].sdxdocid = $("field[@name='sdxdocid']", this).text();

					fichesAudio[i].extrait = "rtmp://diffusion.banq.qc.ca/vod/vid1/radio-canada/ilsontdit/" + $("field[@name='sdxdocid']", this).text() + ".flv";
					fichesAudio[i].nom_personnalite = $("field[@name='nom_personnalite']", this).text();
					fichesAudio[i].nom_personnalitePlayer = $("field[@name='nom_personnalitePlayer']", this).text();
					fichesAudio[i].dates_associees = $("field[@name='dates_associees_personnalite']", this).text();
					fichesAudio[i].photographie = $("field[@name='xtgw_photographie']", this).text();
					fichesAudio[i].resume = $("field[@name='resume']", this).text();
					// fichesAudio[i].biographie = $("field[@name='notes_biographiques']", this).text();
					fichesAudio[i].emission = $("field[@name='emission']", this).text();
					fichesAudio[i].emission_titre = $("field[@name='emission_titre']", this).text();
					fichesAudio[i].date_diffusion = $("field[@name='date_diffusion_t']", this).text();

					fichesAudio[i].biographie = "";
					$("field[@name='notes_biographiques']", this).each(function(j){
						if (j>0) { fichesAudio[i].biographie = fichesAudio[i].biographie + "<br />";}
						fichesAudio[i].biographie = fichesAudio[i].biographie + $(this).text();
					});
					
					fichesAudio[i].interviewer = new Array();
					$("field[@name='interviewer']", this).each(function(j){
						fichesAudio[i].interviewer[j] = $(this).text();
					});

					fichesAudio[i].domaine = new Array();
					$("field[@name='domaine']", this).each(function(j){
						fichesAudio[i].domaine[j] = $(this).text();
					});

					fichesAudio[i].sujet = new Array();
					$("field[@name='sujet']", this).each(function(j){
						fichesAudio[i].sujet[j] = $(this).text();
					});

					/* Remplacement des caractères spéciaux dans le nom de l'image associée à la personnalité */
					fichesAudio[i].photographie = fichesAudio[i].photographie.replace(/ç/i, 'c');
				});
			} else {
				$(xmlData).find("sdx\\:result").each(function(i){
					fichesAudio[i] = new FicheAudio();

					fichesAudio[i].sdxdocid = $("sdx\\:field[@name='sdxdocid']", this).text();

					fichesAudio[i].extrait = "rtmp://diffusion.banq.qc.ca/vod/vid1/radio-canada/ilsontdit/" + $("sdx\\:field[@name='sdxdocid']", this).text() + ".flv";
					fichesAudio[i].nom_personnalite = $("sdx\\:field[@name='nom_personnalite']", this).text();
					fichesAudio[i].nom_personnalitePlayer = $("sdx\\:field[@name='nom_personnalitePlayer']", this).text();
					fichesAudio[i].dates_associees = $("sdx\\:field[@name='dates_associees_personnalite']", this).text();
					fichesAudio[i].photographie = $("sdx\\:field[@name='xtgw_photographie']", this).text();
					fichesAudio[i].resume = $("sdx\\:field[@name='resume']", this).text();
					// fichesAudio[i].biographie = $("sdx\\:field[@name='notes_biographiques']", this).text();
					fichesAudio[i].emission = $("sdx\\:field[@name='emission']", this).text();
					fichesAudio[i].emission_titre = $("sdx\\:field[@name='emission_titre']", this).text();
					fichesAudio[i].date_diffusion = $("sdx\\:field[@name='date_diffusion_t']", this).text();

					fichesAudio[i].biographie = "";
					$("sdx\\:field[@name='notes_biographiques']", this).each(function(j){
						if (j>0) { fichesAudio[i].biographie = fichesAudio[i].biographie + "<br />";}
						fichesAudio[i].biographie = fichesAudio[i].biographie + $(this).text();
					});

					fichesAudio[i].interviewer = new Array();
					$("sdx\\:field[@name='interviewer']", this).each(function(j){
						fichesAudio[i].interviewer[j] = $(this).text();
					});

					fichesAudio[i].domaine = new Array();
					$("sdx\\:field[@name='domaine']", this).each(function(j){
						fichesAudio[i].domaine[j] = $(this).text();
					});

					fichesAudio[i].sujet = new Array();
					$("sdx\\:field[@name='sujet']", this).each(function(j){
						fichesAudio[i].sujet[j] = $(this).text();
					});

					/* Remplacement des caractères spéciaux dans le nom de l'image associée à la personnalité */
					fichesAudio[i].photographie = fichesAudio[i].photographie.replace(/ç/i, 'c');
				});
			}
		},
		complete: function (xmlData) {
			/* Ajout des notices au cache */
			for (var i=0, leni = fichesAudio.length; i<leni; i++) {
				jsCache.setItem(fichesAudio[i].sdxdocid,new Array(fichesAudio[i]));
			}

			if(callback){callback(fichesAudio);}
		}
	});
}

/*
	getFicheAudioSync() retourne les informations sur une ou les fiches
	audio associées à une valeur et un champ
	@param: f - le champ à utiliser pour la requête (exemples: sdxdocid, personnalite)
	        v - la valeur à rechercher
	@return: array de FicheAudio

	exemple d'utilisation avec le sdxdocid:
		var fichesAudio = getFicheAudioSync("sdxdocid", "0003515916");

		for (var i=0; i<fichesAudio.length; i++) {
			alert(fichesAudio[i].resume);
		}
*/
function getFicheAudioSync(f, v) {
	var fichesAudio = new Array();
	$.ajax({
		url: "query_archiveRadio",
		data: "f=" + f + "&v=" + v + "&sortfield=personnalite&order=ascendant",
		dataType: "xml",
		async: false,
		success: function(xmlData) {
			/*
				En attendant un support des nodes ayant des : dans leur ID (entre en
				conflit avec des sélecteurs CSS), on fait une vérification du fureteur
				pour utiliser des sélecteurs qui fonctionnent pour chaque browser.
				A noter que Firefox 3 = 1.9, Firefox 2 = 1.8
				(voir: http://dev.jquery.com/ticket/155)
			*/
			if (($.browser.mozilla && $.browser.version.substr(0,3) < 1.9) || $.browser.opera) {
				$(xmlData).find("result").each(function(i){
					fichesAudio[i] = new FicheAudio();

					fichesAudio[i].sdxdocid = $("field[@name='sdxdocid']", this).text();

					fichesAudio[i].extrait = "rtmp://diffusion.banq.qc.ca/vod/vid1/radio-canada/ilsontdit/" + $("field[@name='sdxdocid']", this).text() + ".flv";
					fichesAudio[i].nom_personnalite = $("field[@name='nom_personnalite']", this).text();
					fichesAudio[i].nom_personnalitePlayer = $("field[@name='nom_personnalitePlayer']", this).text();
					fichesAudio[i].dates_associees = $("field[@name='dates_associees_personnalite']", this).text();
					fichesAudio[i].photographie = $("field[@name='xtgw_photographie']", this).text();
					fichesAudio[i].resume = $("field[@name='resume']", this).text();
					// fichesAudio[i].biographie = $("field[@name='notes_biographiques']", this).text();
					fichesAudio[i].emission = $("field[@name='emission']", this).text();
					fichesAudio[i].emission_titre = $("field[@name='emission_titre']", this).text();
					fichesAudio[i].date_diffusion = $("field[@name='date_diffusion_t']", this).text();

					fichesAudio[i].biographie = "";
					$("field[@name='notes_biographiques']", this).each(function(j){
						if (j>0) { fichesAudio[i].biographie = fichesAudio[i].biographie + "<br />";}
						fichesAudio[i].biographie = fichesAudio[i].biographie + $(this).text();
					});

					fichesAudio[i].interviewer = new Array();
					$("field[@name='interviewer']", this).each(function(j){
						fichesAudio[i].interviewer[j] = $(this).text();
					});

					fichesAudio[i].domaine = new Array();
					$("field[@name='domaine']", this).each(function(j){
						fichesAudio[i].domaine[j] = $(this).text();
					});

					fichesAudio[i].sujet = new Array();
					$("field[@name='sujet']", this).each(function(j){
						fichesAudio[i].sujet[j] = $(this).text();
					});

					/* Remplacement des caractères spéciaux dans le nom de l'image associée à la personnalité */
					fichesAudio[i].photographie = fichesAudio[i].photographie.replace(/ç/i, 'c');
				});
			} else {
				$(xmlData).find("sdx\\:result").each(function(i){
					fichesAudio[i] = new FicheAudio();

					fichesAudio[i].sdxdocid = $("sdx\\:field[@name='sdxdocid']", this).text();

					fichesAudio[i].extrait = "rtmp://diffusion.banq.qc.ca/vod/vid1/radio-canada/ilsontdit/" + $("sdx\\:field[@name='sdxdocid']", this).text() + ".flv";
					fichesAudio[i].nom_personnalite = $("sdx\\:field[@name='nom_personnalite']", this).text();
					fichesAudio[i].nom_personnalitePlayer = $("sdx\\:field[@name='nom_personnalitePlayer']", this).text();
					fichesAudio[i].dates_associees = $("sdx\\:field[@name='dates_associees_personnalite']", this).text();
					fichesAudio[i].photographie = $("sdx\\:field[@name='xtgw_photographie']", this).text();
					fichesAudio[i].resume = $("sdx\\:field[@name='resume']", this).text();
					// fichesAudio[i].biographie = $("sdx\\:field[@name='notes_biographiques']", this).text();
					fichesAudio[i].emission = $("sdx\\:field[@name='emission']", this).text();
					fichesAudio[i].emission_titre = $("sdx\\:field[@name='emission_titre']", this).text();
					fichesAudio[i].date_diffusion = $("sdx\\:field[@name='date_diffusion_t']", this).text();

					fichesAudio[i].biographie = "";
					$("sdx\\:field[@name='notes_biographiques']", this).each(function(j){
						if (j>0) { fichesAudio[i].biographie = fichesAudio[i].biographie + "<br />";}
						fichesAudio[i].biographie = fichesAudio[i].biographie + $(this).text();
					});
					
					fichesAudio[i].interviewer = new Array();
					$("sdx\\:field[@name='interviewer']", this).each(function(j){
						fichesAudio[i].interviewer[j] = $(this).text();
					});

					fichesAudio[i].domaine = new Array();
					$("sdx\\:field[@name='domaine']", this).each(function(j){
						fichesAudio[i].domaine[j] = $(this).text();
					});

					fichesAudio[i].sujet = new Array();
					$("sdx\\:field[@name='sujet']", this).each(function(j){
						fichesAudio[i].sujet[j] = $(this).text();
					});

					/* Remplacement des caractères spéciaux dans le nom de l'image associée à la personnalité */
					fichesAudio[i].photographie = fichesAudio[i].photographie.replace(/ç/i, 'c');
				});
			}
		},
		complete: function (xmlData) {
			/* Ajout des notices au cache */
			for (var i=0, leni = fichesAudio.length; i<leni; i++) {
				jsCache.setItem(fichesAudio[i].sdxdocid,new Array(fichesAudio[i]));
			}
		}
	});

	return fichesAudio;
}

/*
	getFicheAudioById() va chercher les informations sur une ou les fiches
	audio associées à un numéro de document.
	Il est à noter que la fonction garde en cache les notices qui avaient déjà
	été demandées auparavant pour réduire le nombre de requêtes ajax.
	La requête est asynchrone et une fonction callback est appelée lorsque cette
	requête est terminée avec en paramètre un array de FicheAudio.
	@param: sdxdocid - le numero du document
	        callback - la fonction callback

	exemple d'utilisation:
		getFicheAudioById("0003515916", function(fichesAudio){
			for (var i=0; i<fichesAudio.length; i++) {
				alert(fichesAudio[i].resume);
			}
		});
*/
function getFicheAudioById(sdxdocid, callback) {
	var fichesAudio = new Array();
	var fichesAudioCache = new Array();

	fichesAudioCache = jsCache.getItem(sdxdocid);

	if (fichesAudioCache) {
		if(callback){callback(fichesAudioCache);}
	} else {
		$.ajax({
			url: "document",
			data: "id=" + sdxdocid,
			dataType: "xml",
			success: function(xmlData) {
				$(xmlData).find("document").each(function(i){
					fichesAudio[i] = new FicheAudio();

					fichesAudio[i].sdxdocid = sdxdocid;

					fichesAudio[i].extrait = "rtmp://diffusion.banq.qc.ca/vod/vid1/radio-canada/ilsontdit/" + sdxdocid + ".flv";
					fichesAudio[i].nom_personnalite = $("nom_personnalite", this).text();
					fichesAudio[i].nom_personnalitePlayer = $("nom_personnalitePlayer", this).text();
					fichesAudio[i].dates_associees = $("dates_associees_personnalite", this).text();
					fichesAudio[i].photographie = $("photographie", this).text();
					fichesAudio[i].resume = $("resume", this).text();
					// fichesAudio[i].biographie = $("notes_biographiques", this).text();
					fichesAudio[i].emission = $("emission", this).text();
					fichesAudio[i].emission_titre = $("emission_titre", this).text();
					fichesAudio[i].date_diffusion = $("date_diffusion_t", this).text();

					fichesAudio[i].biographie = "";
					$("notes_biographiques", this).each(function(j){
						if (j>0) { fichesAudio[i].biographie = fichesAudio[i].biographie + "<br />";}
						fichesAudio[i].biographie = fichesAudio[i].biographie + $(this).text();
					});
					
					fichesAudio[i].interviewer = new Array();
					$("interviewer", this).each(function(j){
						fichesAudio[i].interviewer[j] = $(this).text();
					});

					fichesAudio[i].domaine = new Array();
					$("domaine", this).each(function(j){
						fichesAudio[i].domaine[j] = $(this).text();
					});

					fichesAudio[i].sujet = new Array();
					$("sujet", this).each(function(j){
						fichesAudio[i].sujet[j] = $(this).text();
					});

					/* Remplacement des caractères spéciaux dans le nom de l'image associée à la personnalité */
					fichesAudio[i].photographie = fichesAudio[i].photographie.replace(/ç/i, 'c');
				});
			},
			complete: function (xmlData) {
				/* Ajout des notices au cache */
				jsCache.setItem(sdxdocid,fichesAudio);

				if(callback){callback(fichesAudio);}
			}
		});
	}
}

/*
	getFicheAudioByIdSync() retourne les informations sur une ou les fiches
	audio associées à un numéro de document.
	Il est à noter que la fonction garde en cache les notices qui avaient déjà
	été demandées auparavant pour réduire le nombre de requêtes ajax.
	@param: sdxdocid - le numero du document
	@return: array de FicheAudio

	exemple d'utilisation:
		var fichesAudio = getFicheAudioByIdSync("0003515916");

		for (var i=0; i<fichesAudio.length; i++) {
			alert(fichesAudio[i].resume);
		}
*/
function getFicheAudioByIdSync(sdxdocid) {
	var fichesAudio = new Array();
	var fichesAudioCache = new Array();

	fichesAudioCache = jsCache.getItem(sdxdocid);

	if (!fichesAudioCache) {
		$.ajax({
			url: "document",
			data: "id=" + sdxdocid,
			dataType: "xml",
			async: false,
			success: function(xmlData) {
				$(xmlData).find("document").each(function(i){
					fichesAudio[i] = new FicheAudio();

					fichesAudio[i].sdxdocid = sdxdocid;

					fichesAudio[i].extrait = "rtmp://diffusion.banq.qc.ca/vod/vid1/radio-canada/ilsontdit/" + sdxdocid + ".flv";
					fichesAudio[i].nom_personnalite = $("nom_personnalite", this).text();
					fichesAudio[i].nom_personnalitePlayer = $("nom_personnalitePlayer", this).text();
					fichesAudio[i].dates_associees = $("dates_associees_personnalite", this).text();
					fichesAudio[i].photographie = $("photographie", this).text();
					fichesAudio[i].resume = $("resume", this).text();
					// fichesAudio[i].biographie = $("notes_biographiques", this).text();
					fichesAudio[i].emission = $("emission", this).text();
					fichesAudio[i].emission_titre = $("emission_titre", this).text();
					fichesAudio[i].date_diffusion = $("date_diffusion_t", this).text();

					fichesAudio[i].biographie = "";
					$("notes_biographiques", this).each(function(j){
						if (j>0) { fichesAudio[i].biographie = fichesAudio[i].biographie + "<br />";}
						fichesAudio[i].biographie = fichesAudio[i].biographie + $(this).text();
					});
					
					fichesAudio[i].interviewer = new Array();
					$("interviewer", this).each(function(j){
						fichesAudio[i].interviewer[j] = $(this).text();
					});

					fichesAudio[i].domaine = new Array();
					$("domaine", this).each(function(j){
						fichesAudio[i].domaine[j] = $(this).text();
					});

					fichesAudio[i].sujet = new Array();
					$("sujet", this).each(function(j){
						fichesAudio[i].sujet[j] = $(this).text();
					});

					/* Remplacement des caractères spéciaux dans le nom de l'image associée à la personnalité */
					fichesAudio[i].photographie = fichesAudio[i].photographie.replace(/ç/i, 'c');
				});
			},
			complete: function (xmlData) {
				/* Ajout des notices au cache */
				jsCache.setItem(sdxdocid,fichesAudio);
			}
		});
	}

	return (fichesAudioCache) ? fichesAudioCache : fichesAudio;
}





/*
	getURLParam() recoit le nom du paramètre de l'URL et retourne sa valeur
*/
function getURLParam(paramName) {
	var regex = '[?&]' + paramName + '=([^&#]*)';
	var results = (new RegExp(regex)).exec(window.location.href);
	if(results) return results[1];
	return '';
}




/*
	loadContent() affiche le contenu d'une page en prenant soin d'afficher un
	indicateur de chargement et en utilisant un effet pour la transition entre
	l'ancien contenu et le nouveau
	@param: urlToLoad - URL de la page à charger
	        whatToLoad - ID de l'élément contenant l'information à charger
	        whereToLoad - ID de l'élément de la page en cours où afficher le nouveau contenu
*/
function loadContent(urlToLoad, whatToLoad, whereToLoad, callback){
	urlToLoad = urlToLoad+' '+whatToLoad;
	
	$(whereToLoad).hide('fast',function(){
		$(whereToLoad).load(urlToLoad,'',function(){
			$(whereToLoad).show('normal');
			$('#Global div.load').fadeOut('normal');

			if(callback){callback();}
			
			pngFix();
		});
	});

	$('#Global div.load').fadeIn('normal');
}

/*
	addEvents() associe les divers événements devant déclancher des actions
*/
function addEvents() {
	$(document).ready(function(){
		addEventsAjaxNav();
		addEventsQueryResultats();
		addEventsRolodex();
		addEventsDragDrop();
		addEventsMouseWheel();
		addEventsInfiniteScroll();
	});
}

/*
	addEventsAjaxNav() associe l'événement onclick aux éléments de navigation
	Cette fonction fait usage du plugin livequery pour jquery pour que le contenu
	chargé par ajax soit également affecté (exemple: liens alphabet).
*/
function addEventsAjaxNav() {
	$(document).ready(function(){
		$('#Logo a, #Menu h2 a, #Menu li a, #content div.alphabet a, #Formulaire form a, #MenuDomaine a, #BasPage a.staticPage').livequery('click', function(event) {
			var urlToLoad = $(this).attr('href');
			var whatToLoad = "#content";
			var whereToLoad = "#content-wrapper";

			// Cas spécial: lorsque l'on navigue par domaine, les résultats s'affichent dans un autre div prévu a cet effet
			if ($(this).attr('class').substr(0, 3) == 'nav') {
				whatToLoad = "#resultats_scroll";
				whereToLoad = "#resultatsSecondNiveau";
			}

			// On aurait pu aussi faire toLoad.replace(/.xsp/i, "Ajax.xsp"); mais certaines pages n'ont pas de pages simplifiées
			/*
			urlToLoad = urlToLoad.replace(/list_/i, "listAjax_");
			urlToLoad = urlToLoad.replace(/query_/i, "queryAjax_");
			urlToLoad = urlToLoad.replace(/search/i, "searchAjax");
			*/

			var loc = window.location.search.substring(1, window.location.search.length);
			var params = loc.split("&");

			urlToLoad += (params.length > 0) ? "&" : "?";
			urlToLoad += "ajax=1";

			loadContent(urlToLoad, whatToLoad, whereToLoad);

			return false;
		});

		// Highlight current menu / reset domaine
		$('#Logo a, #Menu h2 a, #Menu li a').livequery('click', function(event) {
			domaineRolodex = "";
			
			$('#Menu a').removeClass("Encours");
			$(this).toggleClass("Encours");
		});
		// Highlight current domaine
		$('#MenuDomaine a').livequery('click', function(event) {
			$('#MenuDomaine a').removeClass("domaineActif");
			$(this).toggleClass("domaineActif");
		});
	});
}

/*
	addEventsQueryResultats() ajoute les liens sur les tableaux de résultats
	permettant d'afficher plus de détails (liens souvent retrouvés avec flèche à
	la droite du tableau de résultats).
*/
function addEventsQueryResultats() {
	$(document).ready(function() {
		/* Tableaux de résultats (émissions, sujets, personnalités) */
		$('#table_resultats a:has(div.colTexte)').livequery('click', function(event) {
			var pos = $('#table_resultats tr').index($(this).parents("tr:first"));
			var resultsLink = $(this).attr('href');

			query_resultatsPos(pos, resultsLink);

			return false;
		});

		/* Tableaux de résultats (résultats de recherche, domaines) (Liens où le contenu est déjà chargé mais non affiché tant que la flèche ou le lien n'est pas cliqué) */
		$('#table_resultats a.openDiv:has(div.colTexte)').livequery('click', function(event) {
			var rel = $(this).attr('rel');
			// Si l'attribut rel n'a pas ete assigne sur le lien, on va chercher l'id du "div" qui suit
			if ($.trim(rel) == '') {
				rel = $(this).siblings('div.extraits:first').attr("id");
			}

			openDiv(rel);

			return false;
		});

		/* Tableaux de résultats (événements) */
		$('#ligne_temps a.query_resultats').livequery('click', function(event) {
			var rel = $(this).attr('rel');
			var href = $(this).attr('href');
			href = href.substring(href.lastIndexOf('#')); // Pour corriger bug avec ie qui ajouter l'adresse absolue avant le # lorsqu'une autre page a été chargée
			var divId = href.substring(1);

			query_resultats(divId, rel);

			return false;
		});
	});
}

/*
	addEventsRolodex() associe l'événement onclick aux boutons de navigation
	utilisés pour le rolodex (précédent/suivant).
*/
function addEventsRolodex() {
	$(document).ready(function(){
		/* Bind click events pour le filtre de domaines */
		$("#filtreDomaine").livequery(function(){
			$("#filtreDomaine li").each(function(i) {
				$(this).children("input[type='checkbox']").bind(
					"click",
					function(){
						switchFiltreDomaine(i, $(this).parent("li").text());
					}
				);
			});
		});

		/* Changement du mode du Rolodex */
		$('#update_photo').livequery('click',function(event){updateMode('photo'); return false;});
		$('#update_texte').livequery('click',function(event){updateMode('texte'); return false;});

		/* Navigation dans le Rolodex */
		$("#RolodexTexte a.RolodexH").livequery('click',function(event){prevNoms(); return false;});
		$("#RolodexTexte a.RolodexB").livequery('click',function(event){nextNoms(); return false;});

		$("#RolodexPhoto a.RolodexH").livequery('click',function(event){prevPhotos(); return false;});
		$("#RolodexPhoto a.RolodexB").livequery('click',function(event){nextPhotos(); return false;});
	});
}

/*
	addEventsDragDrop() ajoute les actions associées aux événements de
	drag/drop sur les vignettes
*/
function addEventsDragDrop() {
	$(document).ready(function() {
		/* $("#RolodexCentre .PhotoOff a img.trombine").livequery(function(){ */
		$("#RolodexCentre img.trombine").livequery(function(){
			$(this).draggable({
				helper: 'clone',
				start: function(e,ui){$(this).css('z-index', '999')}
			});
		});

		$("#ListeEcoute div.listeItems div.liste").livequery(function(){
			$(this).droppable({
				accept: ".trombine",
				activeClass: 'droppable-active',
				hoverClass: 'droppable-hover',
				drop: function(e, ui) {
					$(this).siblings(":first").not(".remplie");

					checkListePleine();

					var first = $(this).parent().find(".liste").not(".remplie").filter(":first");
					$(first).addClass("liste remplie");
					$(first).append("<div class='remplie-photo'></div>");

					var clone = ui.draggable.parent().clone();
					/* On évite l'affichage du label et la sélection de l'extrait (non disponible sur les pages autres que la page d'accueil */
					$(clone).removeClass('hoverTitle');
					$(clone).removeClass('selectExtrait');
					$(clone).addClass('addToPlayer');
					$(clone).removeAttr('title');
					$(clone).removeAttr('personnalite');
					$(clone).removeAttr('domaine');

					$(clone).find('em').remove();
					$(clone).find("img:last").remove();
					$(first).find("div").append($(clone));

					var hrefValue = $(clone).attr('href');
					var sdxdocid = hrefValue.substring(hrefValue.lastIndexOf('#') + 1);
					var lien = "rtmp://diffusion.banq.qc.ca/vod/vid1/radio-canada/ilsontdit/" + sdxdocid + ".flv";
					var i = $("#ListeEcoute div.listeItems div.remplie").length;

					doPassVarListe(lien, i, sdxdocid);
				}
			});
		});
	});
}

/*
	addEventsMouseWheel() ajoute les actions associées aux événements du
	mouse wheel sur les vignettes du Rolodex
*/
function addEventsMouseWheel() {
	$(document).ready(function(){
		/* Mouse scroll events pour le Rolodex */
		$('#RolodexPhoto').livequery('mousewheel', function(event, delta) {
			(delta > 0 ? prevPhoto() : nextPhoto());
			return false;
		});
		
		$('#RolodexTexte').livequery('mousewheel', function(event, delta) {
			(delta > 0 ? prevNom() : nextNom());
			return false;
		});
	});
}

/*
	addLinks()
*/
function addLinks() {
	$(document).ready(function(){
		addPlayerLinks();
		addAudioListLinks();
		addFicheCompleteLinks();
		addMiscLinks();
	});
}

/*
	addPlayerLinks()
*/
function addPlayerLinks() {
	$(document).ready(function(){
		/* Les liens ayant la classe addToPlayer doivent avoir le numero de l'extrait a ajouter au lecteur dans son attribut href avec le dièse précédent le numéro. Par exemple: <a class="addToPlayer" href="#0003566969">Écouter l'extrait</a> */
		$('a.addToPlayer').livequery('click', function(event) {
			$('#selectionExtrait').slideUp('slow');

			var hrefValue = $(this).attr('href');
			var sdxdocid = hrefValue.substring(hrefValue.lastIndexOf('#') + 1);

			selectExtrait(sdxdocid);
		});

		/* Dans le cas où une personnalité a plus d'un extrait, on affiche la liste des extraits avant de l'ajouter au player */
		$('a.selectExtrait').livequery('click', function(event) {
			var personnalite = $.trim($(this).attr('personnalite'));
	
			/* Hack: Remplace les caracteres speciaux par des ? */
			/*var personnalite = replaceURLAccents(personnalite);*/

			var urlToLoad = "query_archiveRadio.xsp?f=personnalite&v="+personnalite+"&sortfield=personnalite&order=ascendant&style=mosaique&scroll=no&noImg=0&hpp=-1";
			
			/*var urlToLoad = "query_archiveRadio.xsp?f=personnalite&v="+URLEncode(personnalite)+"&sortfield=personnalite&order=ascendant&style=mosaique&scroll=no&noImg=0&hpp=-1";*/
			
			var whatToLoad = "#resultats_noScroll";
			var whereToLoad = "#selectionExtrait";

			loadContent(urlToLoad, whatToLoad, whereToLoad);
		});
	});
}

/*
	addAudioListLinks()
*/
function addAudioListLinks() {
	$(document).ready(function(){
		$('a.addToAudioList').livequery('click', function(event) {
			$('#selectionExtrait').slideUp('slow');

			var hrefValue = $(this).attr('href');
			var sdxdocid = hrefValue.substring(hrefValue.lastIndexOf('#') + 1);

			addToAudioList(sdxdocid);
		});
	});
}

/*
	addFicheCompleteLinks()
*/
function addFicheCompleteLinks() {
	$(document).ready(function(){
		$('a.ficheComplete').livequery('click', function(event) {
			var hrefValue = $(this).attr('href');
			var sdxdocid = hrefValue.substring(hrefValue.lastIndexOf('#') + 1);

			updateFicheComplete(sdxdocid, "#highslide-contenu-details", function() {htmlExpandSoft();});

			return false;
		});
	});
}

/*
	addMiscLinks()
*/
function addMiscLinks() {
	$(document).ready(function(){
		/* Effacer liste d'ecoute */
		$('#clearList').click(function () {
			effacerContenu();
			return false;
		});

		$('#expand_resume').click(function () {
			expandResume();
		});
	});
}

/*
	addHoverTitles()
	(le cleanup des dates erronées n'est pas trop élégant, je sais...)
*/
function addHoverTitles() {
	$(document).ready(function(){
		// Problemes z-index avec ie
		if ($.browser.mozilla) {
			$('#RolodexCentre div.PhotoOff a.hoverTitle').livequery(function(){
				$(this).append("<em></em>");

				$(this).hover(function() {
					$(this).find("em").animate({opacity: "show", left: "0px"}, "normal");
					var hoverText = $(this).attr("title");
					$(this).find("em").text(hoverText);
				}, function() {
					$(this).find("em").animate({opacity: "hide", left: "0px"}, "fast");
				});
			});
		}
		
		$('#ligne_temps .rond_evenement').livequery(function(){
			$(this).hover(function() {
				var currentDate = $(this).attr('title');
				var urlToLoad = $(this).attr('rel').replace(/.xsp/i, "");
				
				$.post(urlToLoad, function(xmlData){
					var evenements = new Array();
					var date_evenements = new Array();
					
					if (($.browser.mozilla && $.browser.version.substr(0,3) < 1.9) || $.browser.opera) {
						$(xmlData).find("field[@name='evenement']").each(function(i){
							evenements[i] = $(this).text();
						});
					} else {
						$(xmlData).find("sdx\\:field[@name='evenement']").each(function(i){
							evenements[i] = $(this).text();
						});
					}
					
					if (($.browser.mozilla && $.browser.version.substr(0,3) < 1.9) || $.browser.opera) {
						$(xmlData).find("field[@name='date_evenement']").each(function(i){
							evenements[i] = evenements[i] + $(this).text();
						});
					} else {
						$(xmlData).find("sdx\\:field[@name='date_evenement']").each(function(i){
							evenements[i] = evenements[i] + $(this).text();
						});
					}
					
					// Remove dupplicates
					function cleanup(arr) {
						var new_arr = [];
						var lookup  = {};

						for (var i in arr) {
							lookup[arr[i]] = arr[i];
						}

						for (i in lookup) {
							new_arr.push(lookup[i]);
						}

						return new_arr;
					}
					
					// Remove wrong dates
					function cleanupDate(arr) {
						var new_arr = [];
						var evenementDate = "";
						
						for (i in arr) {
							evenementDate = arr[i].substring(arr[i].length - 4);
							if (evenementDate == currentDate) {
								new_arr.push(arr[i].substring(0, arr[i].length - 4));
							}
						}

						return new_arr;
					}
					
					var evenementsClean = cleanup(evenements); // Retirer les doublons
					var evenementsCleanDate = cleanupDate(evenementsClean); // Retirer les dates qui n'ont pas d'affaire la (lorsqu'il y a plus d'un evenement dans la notice)
					
					lenj = evenementsCleanDate.length;
					if (lenj > 0) {
						var evenementshtml = '';
						for (var j=0; j<lenj; j++){evenementshtml += '<li>'+evenementsCleanDate[j]+'</li>';}

						$('#ligne_temps .infoEvenement').remove();
						$('#ligne_temps .rond_evenement[@title="'+currentDate+'"]').append('<span class="infoEvenement"><p><b>'+currentDate+'</b></p><ul>'+evenementshtml+'</ul></span>');

						$('#ligne_temps .infoEvenement').fadeIn();
					}
				});
			}, function () {
				$('#ligne_temps .infoEvenement').remove();
			});
		});

		$('#FicheCompleteAmi a.hoverTitle').livequery(function(){
			$(this).append("<em></em>");

			$(this).hover(function() {
				$(this).find("em").animate({opacity: "show", left: "20px"}, "slow");
				var hoverText = $(this).attr("title");
				$(this).find("em").text(hoverText);
			}, function() {
				$(this).find("em").animate({opacity: "hide", left: "0px"}, "fast");
			});
		});
	});
}



/*
	addEventsInfiniteScroll() est utilisé pour charger du nouveau contenu lorsque
	l'utilisateur a atteind la fin d'une liste défilante. Cela permet d'accélérer
	grandement le chargement initial du contenu qui peut s'avérer long si l'on
	charge toute la page d'un coup (la technique utilisée précédemment consistait
	à charger la page complète et dans le cas des tableaux de résultats, les
	fureteurs moins rapide prennaient une éternité à afficher tout le contenu
	spécialement lorsqu'il y avait beaucoup de résultats comme la page sujets qui
	avait plus de 1000 résultats.

	Voir http://www.webresourcesdepot.com/load-content-while-scrolling-with-jquery/
*/
function addEventsInfiniteScroll() {
	var nbPages = 0;
	$(document).ready(function() {
		$('#table_resultats').livequery(function(){
			nbPages = $('#content .nbPages').text();
			$(this).parent().scroll(function(){
				if ($(this).isNearTheEnd()) {
					/* Load new content! */
					lastPostFunc();
				}
			});
		});
	});

	$.fn.isNearTheEnd = function() {
		return this[0].scrollTop + this.height() >= this[0].scrollHeight;
	}
}

/*
	lastPostFunc() charge les documents suivants lorsque la liste défilante est
	rendue à la fin (voir addInfiniteScrollEvents)
*/
var isLoadingStuff = false; // Variable utilisée pour empêcher ie de faire le call à la fonction 2 fois.
function lastPostFunc() {
	var nbPages = $('#info_table_resultats span.nbPages').text();
	var baseUrl = $('#info_table_resultats span.url').text();
	var currentPage = ($('#info_table_resultats span.currentPage').text());
	var nextPage = parseInt(currentPage)+1;
	var nextPageUrl = baseUrl+'&p='+nextPage;
	
	if (nextPage <= nbPages && !isLoadingStuff) {
		isLoadingStuff = true;
		
		$('#lastPostsLoader').fadeIn('fast');

		$.post(nextPageUrl, function(xmlData){
			if (xmlData != "") {
				$("#table_resultats > tbody:last").after($(xmlData).find('#table_resultats tbody'));
				$("#table_resultats tr:even").addClass("menugrey"); // Re-zebra-stripe!
			}
			$('#lastPostsLoader').fadeOut('fast');
			isLoadingStuff = false;
		});

		$('#info_table_resultats span.currentPage').text(nextPage);
	}
};

/*
	initLeSaviezVous() initialise les boutons des services "Le saviez-vous?"
	se trouvant au haut des pages.
*/
function initLeSaviezVous() {
	$(document).ready(function(){
		var link_connaissezVous = $('<li></li>').html('<a href="#LeSaviezVous" class="connaissezVous"><img src="images/connaissezVous.png" alt="Qui est-ce?" title="Connaissez-vous?" width="27" height="27" /><span>Qui est-ce?</span></a>');
		var link_citations = $('<li></li>').html('<a href="#LeSaviezVous" class="citations"><img src="images/citation.png" alt="Citations" title="Qui a dit?" width="27" height="27" /><span>Qui a dit?</span></a>');
		var link_questionnaire = $('<li></li>').html('<a href="#LeSaviezVous" class="questionnaire"><img src="images/questionnaire.png" alt="Questionnaire" title="Connaissez-vous votre histoire?" width="27" height="27" /><span>Connaissez-vous votre histoire?</span></a>');

		var linkList = $('<ul></ul>');
		linkList.append(link_connaissezVous);
		linkList.append(link_citations);
		linkList.append(link_questionnaire);

		var highslide_contentBox = $('<a href="javascript:;" id="thelinksaviezvous" class="highslide" ></a><div class="highslide-html-content" id="highslide-html" style="width: 400px;"><div style="height:20px; padding: 2px"><a href="javascript:;" onclick="return hs.close(this)" class="control">Fermer</a><a href="javascript:;" onclick="return false" class="highslide-move control">Déplacer</a><a href="javascript:;" onclick="return nextCitation()" class="control" id="nextSaviez">Suivant</a><a href="javascript:;" onclick="return prevCitation()" class="control" id="prevSaviez">Précédent</a></div><div class="highslide-body" id="highslide-contenu" style="height:250px; padding: 0 10px"></div></div>');

		$("#LeSaviezVous").append('<h2>Testez vos connaissances</h2>');
		$("#LeSaviezVous").append(linkList);

		$("#LeSaviezVous").append(highslide_contentBox);

		$("#LeSaviezVous a.connaissezVous").click(function () {getCitations('connaissez_vous', 0); });
		$("#LeSaviezVous a.citations").click(function () {getCitations('citations', 0); });
		$("#LeSaviezVous a.questionnaire").click(function () {getCitations('questionnaire', 0); });
	});
}

/*
	initSearchForm() initialise le formulaire de recherche avancée pour que le
	résultat soit récupéré par ajax. La fonction active également les
	suggestions de recherche lorsque l'utilisateur entre quelques lettres dans
	le champ utilisé pour la recherche simple.
*/
function initSearchForm() {
	$(document).ready(function(){
		$('#Formulaire form').livequery(function(){
			$(this).ajaxForm({beforeSubmit:showRequestSimple});
		});

		$('#form_recherche').livequery(function(){
			$(this).ajaxForm({beforeSubmit:showRequestAvancee});
		});

		$("#suggest").suggest("./suggest/suggest.jsp");
	});
}

/*
	showRequestSimple() affiche les résultats de recherche simple
*/
function showRequestSimple(formData, jqForm, options) {
	var urlToLoad = "results.xsp?"+$.param(formData);
	var whatToLoad = "#content";
	var whereToLoad = "#content-wrapper";

	loadContent(urlToLoad, whatToLoad, whereToLoad);
}

/*
	showRequestAvancee() affiche les résultats de recherche avancée
*/
function showRequestAvancee(formData, jqForm, options) {
	var urlToLoad = "search_archiveRadio.xsp?"+$.param(formData);
	var whatToLoad = "#resultats_scroll";
	var whereToLoad = "#resultatsRecherche";
	
	loadContent(urlToLoad, whatToLoad, whereToLoad);
}

/*
	initPlayer() charge la personnalité de la semaine ou un extrait si l'url
	contient le paramètre 'audio' et que sa valeur correspond à un numéro de
	séquence d'un extrait.
*/
function initPlayer() {
	audioValue = getURLParam('audio');
	
	if (audioValue) {
		// TODO: Trouver une meilleure correction
		// Sans timeout, le player se met a jour mais la lecture de l'extrait ne fonctionne pas...
		window.setTimeout(function() {
			selectExtrait(audioValue ,loadListe);
		}, (1000));
	} else {
		initPersonnaliteSemaine();
	}
}

/*
	initPersonnaliteSemaine() charge le fichier contenant les informations sur la
	personnalité de la semaine et appelle loadPersonnaliteSemaine()
*/
function initPersonnaliteSemaine(){
	$.getJSON('personnaliteSemaine.txt',loadPersonnaliteSemaine);
}

/*
	zebraStripe() applique des classes aux rangées (tr) de tables qui doivent
	avoir un style zebré. Cette fonction fait usage du plugin livequery pour
	jquery pour que le contenu chargé par ajax soit également affecté.
*/
function zebraStripe() {
	$(document).ready(function(){
		$("#table_resultats.alternated").livequery(function(){
			$(this).find("tr:even").addClass("menugrey");
		});
	});
}

/*
	loadListe() charge la liste d'écoute qui était en mémoire lors de la
	dernière écoute. Ceci permet de conserver la liste d'écoute même après un
	rafraichissement de la page.
*/
function loadListe() {
	$(document).ready(function(){
		$("#ListeEcoute div.listeItems div.remplie div").remove();
		$("#ListeEcoute div.listeItems div.remplie").removeClass("remplie");

		var numExtrait = 0;
		for (var i=1; i<=4; i++) {
			// TODO: Trouver une meilleure correction
			// Sans timeout, la liste se remplie mais le lecteur ne fonctionne pas correctement... et on attend que la personnalité de la semaine soit chargée
			window.setTimeout(function() {
				numExtrait++;
				var cookieValue = $.cookie('ilsontditListe'+numExtrait);
				if (cookieValue) {addToAudioList(cookieValue);}
			}, (i*500));
		}
	});
}

/*
	pngFix() corrige les problèmes de transparence avec ie pour les images en
	format png. Fait usage de la fonction correctPNG() du fichier js.js.
*/
function pngFix() {
	$(document).ready(function(){
		correctPNG();
	});
}

/*
	showRolodex() affiche 32 vignettes dans le "rolodex" sur la page d'accueil.
	Cette fonction fait usage du plugin livequery pour jquery pour que les
	vignettes soient affichées lorsque la page d'accueil est chargée par ajax.
*/
function showRolodex(){
	$(document).ready(function(){
		/*
		$("#RolodexCentre").livequery(function(){
			$(this).find("a").addClass("invisible");
			$(this).find("a").slice(0,32).removeClass("invisible");
		});
		*/

		$("#RolodexCentre").livequery(function(){
			modeRolodex = (!(modeRolodex === 'photo' || modeRolodex == 'texte')) ? 'photo' : modeRolodex; // Si modeRolodex a une valeur invalide, on assigne la valeur par défaut: photo
			updateMode(modeRolodex);
		});
	});
}

/*
	checkListePleine() vérifie si la liste d'écoute est pleine.
*/
function checkListePleine() {
	var nbRemplie = $('#ListeEcoute div.listeItems div.remplie').size();
	
	if (nbRemplie >= 4) {
		showMsgListePleine();
		$('#ListeEcoute div.listeItems div.listePleine a').click(function () {
			removeMsgListePleine();
		});
		
		$('#ListeEcoute div.listeItems div.listePleine').ready(function(){
			window.clearTimeout(t);
			t = window.setTimeout('removeMsgListePleine()', 2000);
		});
	}
}

function showMsgListePleine() {
	$('#ListeEcoute div.listeItems').append('<div class="listePleine"><a href="javascript:void(0);"><img src="images/notification_error.png" height="20" alt="Notification" />Votre liste d\'écoute est pleine</a></div>');
	$('#ListeEcoute div.listeItems div.listePleine').fadeIn('slow');
}


function removeMsgListePleine() {
	$('#ListeEcoute div.listeItems div.listePleine').fadeOut('slow', function () {
		$('#ListeEcoute div.listeItems div.listePleine').remove();
	});
}

/*
	effacerContenu() retire les extraits de la liste d'écoute.
*/
function effacerContenu(){
	$("#ListeEcoute div.listeItems div.remplie div").remove();
	$("#ListeEcoute div.listeItems div.remplie").removeClass("remplie");
	doPassVarEffaceListe('0');
}

/*
	switchFiltreDomaine() met à jour le domaine sur la page d'accueil lorsque
	l'utilisateur sélectionne un checkbox de la section "Affichez par domaine".
*/
var currentFiltreDomaineIndex = "";
function switchFiltreDomaine(indexToKeep, domaine) {
	$("#filtreDomaine li input[type='checkbox']").each(function(i){
		$(this).removeAttr("checked");
		$(this).siblings("label").css('color', '#fff');
		if (i == indexToKeep) {
			if (currentFiltreDomaineIndex !== indexToKeep) {
				$(this).attr("checked", "checked");
				$(this).next("label").css('color', '#bed63a');
				currentFiltreDomaineIndex = indexToKeep;
			} else {
				currentFiltreDomaineIndex = "";
			}
		}
	});

	updateDomaine(currentFiltreDomaineIndex === "" ? "" : $.trim(domaine));
}

function updateMode(mode){ updateRolodex(domaineRolodex, mode); }
function updateDomaine(domaine){ updateRolodex(domaine, modeRolodex); }

function updateRolodex(domaine, mode) {
	//var link = "accueil.xsp?db=archiveRadio&domaine="+domaine+"&mode="+mode+" #Rolodex";

	domaineRolodex = domaine;
	modeRolodex = mode;

	if(mode == 'photo'){
		pagePhoto = 0;

		$("#RolodexTexte" ).addClass("invisible");
		$("#RolodexPhoto" ).removeClass("invisible");

		$("#RolodexCentre .PhotoOff > a").addClass("invisible");

		// Affiche 32 vignettes dans le rolodex et prend en considération le domaine s'il y en a un de spécifié
		if(domaine == '*' || domaine == ''){
			$("#RolodexCentre div.PhotoOff > a").slice(0,32).removeClass("invisible");
		}else{
			$("#RolodexCentre div.PhotoOff > a[domaine*='" + domaine + "']").slice(0,32).removeClass("invisible");
		}
	}

	if(mode == 'texte'){
		$("#CacheNom").css("margin-top", "0px");

		$("#RolodexPhoto" ).addClass("invisible");
		$("#RolodexTexte" ).removeClass("invisible");

		$("#CacheNom table tbody tr.trContenu").addClass("invisible");

		// Affiche les noms dans le rolodex et prend en considération le domaine s'il y en a un de spécifié
		if(domaine == '*' || domaine == ''){
			$("#CacheNom table tbody tr.trContenu").removeClass("invisible");
		}else{
			$("#CacheNom table tbody tr.trContenu[domaine*='" + domaine + "']").removeClass("invisible");
		}
	}

	$('#RolodexCentre').css('overflow', 'visible');
}

/*
	query_resultats() affiche les résultats retrouvé dans le lien reçu et
	affiche les résultats dans l'élément associé à l'id fourni.
*/
function query_resultats(divId,link){
	if (!$("#"+divId).is(":hidden")){
		$("#"+divId).hide("slow");
		$("#"+divId).parent().find("img.fleche-droite").attr('src', 'images/fleche-droite.gif');
	}

	loadContent(link, "#resultats_noScroll","#"+divId,function(){
		$("#"+divId).slideDown("slow");
		$("#"+divId).parent().find("img.fleche-droite").attr('src', 'images/fleche-bas.gif');
	});
}

/*
	query_resultatsPos() affiche les résultats retrouvé dans le lien reçu et
	affiche les résultats dans la rangée du tableau de résultats associée à la
	position reçue.
*/
function query_resultatsPos(pos,link){
	$("#table_resultats tr:eq("+pos+") .result").each(function(i){
		if ($(this).is(":hidden")){
			$(this).load(link+" #resultats_noScroll",'',function(){
				$(this).slideDown("slow");
				$(this).parent().find("img.fleche-droite").attr('src', 'images/fleche-bas.gif');
				
				pngFix();
			});
		} else {
			$(this).hide("slow");
			$(this).parent().find("img.fleche-droite").attr('src', 'images/fleche-droite.gif');
		}
	});
}

/*
	openDiv() affiche un élément associé à l'id reçu en paramètre
*/
function openDiv(divId){
	if ($("#"+divId).is(":hidden")) {
		$("#"+divId).slideDown("slow");
		$("#"+divId).parent().find("img.fleche-droite").attr('src', 'images/fleche-bas.gif');
	} else {
		$("#"+divId).hide("slow");
		$("#"+divId).parent().find("img.fleche-droite").attr('src', 'images/fleche-droite.gif');
	}
}



/*
	prevNom()
*/
function prevNom(){
	var index = $("#CacheNom").css("margin-top").indexOf("px");
	var mt;

	mt = parseInt($("#CacheNom").css("margin-top").slice(0,index)) + 30;

	if(mt < 0){
		$("#CacheNom").animate({marginTop: "+=25px"}, 'fast');
	}else{
		$("#CacheNom").animate({marginTop: "0px"}, 'fast');
	}
}

function prevNoms(){
	var index = $("#CacheNom").css("margin-top").indexOf("px");
	var mt;

	mt = parseInt($("#CacheNom").css("margin-top").slice(0,index)) + 180;

	if(mt < 0){
		$("#CacheNom").animate({marginTop: "+=175px"}, 'normal');
	}else{
		$("#CacheNom").animate({marginTop: "0px"}, 'normal');
	}
}

/*
	nextNom()
*/
function nextNom(){
	$("#CacheNom").animate({marginTop: "-=25px"}, 'fast','');
}

function nextNoms(){
	$("#CacheNom").animate({marginTop: "-=175px"}, 'normal',''); // 7 x 25px
}

/*
	nextPhoto() et prevPhoto() permettent la navigation dans le Rolodex
	en mode Photo.
*/
var pagePhoto =0;
function nextPhoto(){
	if(domaineRolodex == '*' || domaineRolodex == ''){
		var nb = $("#RolodexCentre div.PhotoOff > a").length;
		if(nb > (pagePhoto+4)*8 ){
			pagePhoto++;

			var premier = (pagePhoto-1)*8;
			var debutNouveau = (pagePhoto+3)*8;
			$("#RolodexCentre div.PhotoOff > a").slice(premier.valueOf(), premier.valueOf()+8).addClass("invisible");
			$("#RolodexCentre div.PhotoOff > a").slice(debutNouveau.valueOf(), debutNouveau.valueOf()+8 ).removeClass("invisible");
		}
	} else {
		var nb = $("#RolodexCentre div.PhotoOff > a[domaine*='" + domaineRolodex + "']").length;
		if(nb > (pagePhoto+4)*8 ){
			pagePhoto++;

			var premier = (pagePhoto-1)*8;
			var debutNouveau = (pagePhoto+3)*8;
			$("#RolodexCentre div.PhotoOff > a[domaine*='" + domaineRolodex + "']").slice(premier.valueOf(), premier.valueOf()+8).addClass("invisible");
			$("#RolodexCentre div.PhotoOff > a[domaine*='" + domaineRolodex + "']").slice(debutNouveau.valueOf(), debutNouveau.valueOf()+8 ).removeClass("invisible");
		}
	}
}
function nextPhotos(){
	for (var i=0; i<4; i++) {
		nextPhoto();
	}
}

function prevPhoto(){
	if(domaineRolodex == '*' || domaineRolodex == ''){
		if(pagePhoto > 0){
			pagePhoto--;
			var nb = $("#RolodexCentre div.PhotoOff > a").length;

			var premier = pagePhoto*8;
			var debutAncien = (pagePhoto+4)*8;
			$("#RolodexCentre div.PhotoOff > a").slice(debutAncien.valueOf(), debutAncien.valueOf()+8 ).addClass("invisible");
			$("#RolodexCentre div.PhotoOff > a").slice(premier.valueOf(), premier.valueOf()+8).removeClass("invisible");
		}
	}else{
		if(pagePhoto > 0){
			pagePhoto--;
			var nb = $("#RolodexCentre div.PhotoOff > a[domaine*='" + domaineRolodex + "']").length;

			var premier = pagePhoto*8;
			var debutAncien = (pagePhoto+4)*8;
			$("#RolodexCentre div.PhotoOff > a[domaine*='" + domaineRolodex + "']").slice(debutAncien.valueOf(), debutAncien.valueOf()+8 ).addClass("invisible");
			$("#RolodexCentre div.PhotoOff > a[domaine*='" + domaineRolodex + "']").slice(premier.valueOf(), premier.valueOf()+8).removeClass("invisible");
		}
	}
}
function prevPhotos(){
	for (var i=0; i<4; i++) {
		prevPhoto();
	}
}






/* Mise-à-jour de la section 'Autres extraits' dans le player */
function updatePlayerAutresExtraits(personnalite){
	getFicheAudio("nom_personnalite", personnalite, function(fichesAudio) {
		$("#Player div.Player-Autres").html("");

		$("#Player div.Player-Autres").html("<p>Autres extraits de "+personnalite+" ("+(fichesAudio.length-1 > 0 ? fichesAudio.length-1 : "aucun")+")</p>");
		if (fichesAudio.length > 1) {
			$("#Player div.Player-Autres").append("<ul>");
			for (var i=0, leni = fichesAudio.length; i<leni; i++) {
				if (fichesAudio[i].sdxdocid != currentDocid) {
					$("#Player div.Player-Autres").append("<li><a class=\"addToPlayer\" href=\"#"+fichesAudio[i].sdxdocid+"\">Extrait " + (i+1) + "</a></li>");
				}
			}
			$("#Player div.Player-Autres").append("</ul>");
		}else{
			$("#Player div.Player-Autres").html("");
		}
		
	});
}



/*
	selectExtrait()
*/
function selectExtrait(sdxdocid, callback){
	getFicheAudioById(sdxdocid, function(fichesAudio){
		currentDocid = sdxdocid;

		if (fichesAudio.length > 0) {
			doPassVar(fichesAudio[0].extrait);

			updatePlayerInfo(sdxdocid);
			updateFicheComplete(sdxdocid, "#highslide-contenu-fiche-audio");

			updatePlayerAutresExtraits(fichesAudio[0].nom_personnalite);
		}
		
		if(callback){callback();}
	});
}

/* 
	CacheTout() est une fonction appelée par l'animation flash d'intro du
	rolodex. Elle est appelée lorsque l'animation se termine ou lorsque le
	bouton "passer l'introduction" est utilisé.
*/
function CacheTout() {
	$("#introRolodex").hide();
}

/*
	playNumListe() est appelé par le lecteur flash lorsque les boutons
	suivant/précédant sont utilisés. Le paramètre playNum indique la position de
	l'extrait dans la liste d'écoute.
*/
function playNumListe(playNum){
	var hrefValue = $('#liste'+playNum).find('a.addToPlayer').attr('href');
	var sdxdocid = hrefValue.substring(hrefValue.lastIndexOf('#') + 1);

	selectExtrait(sdxdocid);
}

/*
	updatePlayerInfo()
*/
function updatePlayerInfo(sdxdocid){
	getFicheAudioById(sdxdocid, function(fichesAudio) {
		var path = window.location.pathname;

		if (fichesAudio.length > 0) {
			$("#Player h3").text(fichesAudio[0].nom_personnalitePlayer);
			$("#Player #FicheComplete img").attr('src', 'images/icones80-80/'+fichesAudio[0].photographie);
			$("#Player #FicheComplete img").attr('alt', fichesAudio[0].nom_personnalite);

			$("#Player p.Player-Resume").text(fichesAudio[0].resume);
			$("#Player div.Player-Info").html("<p>" + (fichesAudio[0].emission != '' ? "Émission : " + fichesAudio[0].emission : fichesAudio[0].emission_titre) + "<br/>Intervieweur"+(fichesAudio[0].interviewer.length > 1 ? "s" : "")+" : " + fichesAudio[0].interviewer.join(", ") + "<br/> " + fichesAudio[0].date_diffusion + "</p>");
			
			$("#Player #FicheCompleteAmi a").attr("href", "mailto:nom@email.com?subject=Archive de " + fichesAudio[0].nom_personnalitePlayer + "&body="+ window.location+path+"?archiveID="+sdxdocid);
		}
	});
}

/*
	updateFicheComplete()
*/
function updateFicheComplete(sdxdocid, div, callback){
	getFicheAudioById(sdxdocid, function(fichesAudio) {
		if (fichesAudio.length > 0) {
			var personnalite = fichesAudio[0].nom_personnalite;
			var photographie = $.trim(fichesAudio[0].photographie);
			var dates_associees = fichesAudio[0].dates_associees;

			var indexOfVirg = personnalite.indexOf(',');

			var irisTerme = $.trim(personnalite + ', ' + dates_associees);
			var pistardTerme1 = 'Fonds '+$.trim(personnalite.substr(indexOfVirg + 1, personnalite.length - indexOfVirg) + ' ' + personnalite.substr(0, indexOfVirg));
			// var pistardTerme1 = $.trim(personnalite.substr(indexOfVirg + 1, personnalite.length - indexOfVirg) + ' ' + personnalite.substr(0, indexOfVirg));
			var pistardTerme2 = $.trim(personnalite);

			var url_iris = "http://iris.banq.qc.ca/iris.aspx?fn=Search&Style=Portal3&q=(au="+irisTerme+") ou (su="+irisTerme+")";			
			var url_pistard = "http://pistard.banq.qc.ca/unite_chercheurs/portail_recherche?p_terme1="+pistardTerme1;

			var sujethtml = '';
			var domainehtml = '';
			var interviewerhtml = '';

			for (var j=0, lenj = fichesAudio[0].sujet.length; j<lenj; j++){sujethtml += '<li>'+fichesAudio[0].sujet[j]+ '</li>';}
			for (var j=0, lenj = fichesAudio[0].domaine.length; j<lenj; j++){domainehtml += '<li>'+fichesAudio[0].domaine[j]+ '</li>';}
			for (var j=0, lenj = fichesAudio[0].interviewer.length; j<lenj; j++){interviewerhtml += '<li>'+fichesAudio[0].interviewer[j]+ '</li>';}

			$(div).html('<div class="contenu_details contenu_details'+sdxdocid+'"><img src="images/icones51-47/'+photographie+'" /><span class="copyright"></span><b>' + fichesAudio[0].nom_personnalite + '</b><br/><br/>' + fichesAudio[0].biographie + '<br/><br/><ul><li>'+(fichesAudio[0].emission != "" ? 'Émission : ' + fichesAudio[0].emission : fichesAudio[0].emission_titre)+'</li><li>' + fichesAudio[0].date_diffusion+' </li><li>Domaine(s) : <ul>' +domainehtml +' </ul></li><li>Sujet(s) : <ul>' +sujethtml+'</ul> </li><li>Intervieweur'+(fichesAudio[0].interviewer.length > 1 ? 's' : '')+' : <ul>'+ interviewerhtml +'</ul></li></ul><a class="irisPistard" href="'+url_iris+'" title="Voir les autres documents des collections de BAnQ de cette personnalité" target="IRIS">Autres documents des collections de BAnQ</a><br/><a class="irisPistard" href="'+url_pistard+'" title="Voir les autres documents des archives BAnQ de cette personnalité" target="Pistard">Autres documents des archives de BAnQ</a><br/><br/><a class="lienArchive" href="http://archives.radio-canada.ca/" title="Les archives de Radio-Canada.ca" target="IRIS">Les archives de Radio-Canada.ca</a></div>');

			/* Ajout de la mention 'crédit photo' */
			$.ajax({
				type: "GET",
				url: "xsl/lang/document/fr-FR_icones.xml",
				dataType: "xml",
				success: function(xmlData) {
					$(xmlData).find("fichier[@name='"+photographie+"']").each(function(){
						var copyright = $(this).find('copyright').text();
						if ($.trim(copyright) != '') {
							$("div.contenu_details.contenu_details"+sdxdocid+" .copyright").html('<p>Crédit photo</p><span class="creditPhoto">'+copyright+'</span>');
						}
					});
				}
			});

			$("div.contenu_details.contenu_details"+sdxdocid+" .copyright").hover(function() {
				$(this).find("span.creditPhoto").fadeIn('slow');
			}, function() {
				$(this).find("span.creditPhoto").fadeOut('fast');
			});

			if(callback){callback();}
		}
	});
}

/*
	addToAudioList()
*/
function addToAudioList(sdxdocid){
	getFicheAudioById(sdxdocid, function(fichesAudio) {
		if (fichesAudio.length > 0) {
			var first = $("#ListeEcoute div.listeItems div.liste:first").parent().find("div.liste").not(".remplie").filter(":first");
			
			checkListePleine();
			
			$(first).addClass("liste remplie");
			$(first).append("<div class='remplie-photo'></div>");
			var onclickValue = "selectExtrait('"+sdxdocid+"');"

			$(first).find("div").append('<a class="addToPlayer" href="#'+sdxdocid+'"><img class="trombine" docid="'+sdxdocid+'" src="images/icones47-46/'+fichesAudio[0].photographie+'" alt="'+fichesAudio[0].nom_personnalite+'" onclick="'+onclickValue+'" height="46" width="47"/></a>');

			var lien = "rtmp://diffusion.banq.qc.ca/vod/vid1/radio-canada/ilsontdit/"+sdxdocid+".flv";
			var i = $("#ListeEcoute div.listeItems div.remplie").length;
			doPassVarListe(lien, i, sdxdocid);
		}
	});
}

/*
	expandResume()
*/
function expandResume() {
	if ($("#Player p.Player-Resume").css("height")=="auto") {
		$("#Player p.Player-Resume").css("height", "4.7em");
		$("#expand_resume").attr("src", "images/plus.gif");
		$("#expand_resume").attr("alt", "Agrandir le résumé");
	} else {
		if ($("#Player p.Player-Resume").text()!="") {
			$("#Player p.Player-Resume").css("height", "auto");
			$("#expand_resume").attr("src", "images/minus.gif");
			$("#expand_resume").attr("alt", "Tronquer le résumé");
		}
	}
}

/*
	fixAnchorTitleBug() corrige un bug obscure se manifestant sur ie6 et ie7
	lorsqu'un objet flash se trouve sur une page et que le hash
	mark (#: Croisillon) est utilisé dans l'URL.
	Voir: http://bugs.adobe.com/jira/browse/FP-240
*/
function fixAnchorTitleBug() {
	document.title = document.originalTitle;
}



/* Fonction du lecteur Flash */
function doPassVar(extrait){
	$('#id_flash').ready(function() {
		var sendExtrait = extrait;

		window.document.id_flash.SetVariable("my_cb", sendExtrait);
		fixAnchorTitleBug();
	});
}

function doPassVarListe(extraitListe, numListe, sdxdocid){
	$('#id_flash').ready(function() {
		var sendExtrait = extraitListe;
		var sendNum = numListe;

		window.document.id_flash.SetVariable("my_cbListe", sendExtrait);
		window.document.id_flash.SetVariable("my_numListe", sendNum);
		
		$.cookie('ilsontditListe'+sendNum, sdxdocid);
		
		fixAnchorTitleBug();
	});
}

function doPassVarEffaceListe(numListe){
	$('#id_flash').ready(function() {
		var sendNum = numListe;
		window.document.id_flash.SetVariable("my_numListe", sendNum);

		$.cookie('ilsontditListe1', null);
		$.cookie('ilsontditListe2', null);
		$.cookie('ilsontditListe3', null);
		$.cookie('ilsontditListe4', null);

		fixAnchorTitleBug();
	});
}



var nbCit = 0;
var presentFile = '';
var t;
function getCitations(file, init) {
	if(init == 0){
		nbCit = -1;
		presentFile = file;
	}

	switch(file) {
		case "citations":
			$.getJSON(file+'.txt',loadCitations);
			break;
		case "connaissez_vous":
			$.getJSON(file+'.txt',loadConnaissezvous);
			break;
		case "questionnaire":
			$.getJSON(file+'.txt',loadQuestionnaire);
			break;
	}

	$("#thelinksaviezvous").click(function () {
		hs.htmlExpand(this, { contentId: 'highslide-html' });
	});

	$("#thelinksaviezvous").click();
}

function nextCitation(){
	nbCit++;
	getCitations(presentFile,1);
}
function prevCitation(){
	nbCit--;
	getCitations(presentFile, 1);
}
function loadCitations(json){
	if(nbCit == -1){
		var objCount=0;
		for(_obj in json) objCount++;
		nbCit = Math.floor(Math.random()*objCount);
	}

	$("#highslide-contenu").html("<h3>Qui a dit?</h3><p>" + json[nbCit].citation + "</p><p><a href='javascript:;' class='reponse' onclick='laReponse()'>R&eacute;ponse</a> : <span id='laReponse' class='invisible'><b>" + json[nbCit].name+"</b></span></p>");
	(nbCit+1 >= json.length) ? $("#nextSaviez").hide() : $("#nextSaviez").show();
	(nbCit <= 0) ? $("#previousSaviez").hide() : $("#previousSaviez").show();
}
function loadConnaissezvous(json){
	if(nbCit == -1){
		var objCount=0;
		for(_obj in json) objCount++;
		nbCit = Math.floor(Math.random()*objCount);
	}

	$("#highslide-contenu").html("<h3>Qui est-ce?</h3><p>" + json[nbCit].question + "</p><p><a href='javascript:;' class='reponse' onclick='laReponse()'>R&eacute;ponse</a> : <span id='laReponse' class='invisible'><b>" + json[nbCit].name+"</b></span></p>");
	(nbCit+1 >= json.length) ? $("#nextSaviez").hide() : $("#nextSaviez").show();
	(nbCit <= 0) ? $("#previousSaviez").hide() : $("#previousSaviez").show();
}

function loadQuestionnaire(json){
	if(nbCit == -1){
		var objCount=0;
		for(_obj in json) objCount++;
		nbCit = Math.floor(Math.random()*objCount);
	}

	$("#highslide-contenu").html("<h3>Connaissez-vous votre histoire?</h3><p><b>"+json[nbCit].personnalite + "</b></p><p>" + json[nbCit].question + "</p><p><a href='javascript:;' class='reponse' onclick='laReponse()'>R&eacute;ponse</a> : <span id='laReponse' class='invisible'><b>" + json[nbCit].reponse+"</b></span></p>");
	(nbCit+1 >= json.length) ? $("#nextSaviez").hide() : $("#nextSaviez").show();
	(nbCit <= 0) ? $("#previousSaviez").hide() : $("#previousSaviez").show();
}

/*
	loadPersonnaliteSemaine() charge la personnalite de la semaine en fonction
	de la semaine en cours.
*/
function loadPersonnaliteSemaine(json, callback){
	var dayOfYear = $.PHPDate('z', new Date());
	var weekOfYear = Math.floor(dayOfYear / 7);

	var sdxdocid = json[weekOfYear].archiveId;

	selectExtrait(sdxdocid, loadListe);
}

function laReponse(){
	$("#laReponse").removeClass("invisible");
}

function htmlExpandSoft(){
	$("#thelink").click(function () {
		hs.htmlExpand(this, { contentId: 'highslide-details' } );
	});
	$("#thelink").click();
}



function replaceURLAccents(queryString) {
	var t=queryString;
	/*
	t=t.replace(/À|Á|Â|Ã|Ä|Å|à|á|â|ã|ä|å/ig,'a');
	t=t.replace(/Ò|Ó|Ô|Õ|Ö|Ø|ò|ó|ô|õ|ö|ø/ig,'o');
	t=t.replace(/È|É|Ê|Ë|è|é|ê|ë/ig,'e');
	t=t.replace(/Ç|ç/ig,'c');
	t=t.replace(/Ì|Í|Î|Ï|ì|í|î|ï/ig,'i');
	t=t.replace(/Ù|Ú|Û|Ü|ù|ú|û|ü/ig,'u');
	t=t.replace(/ÿ/ig,'y');
	t=t.replace(/Ñ|ñ/ig,'n');
	*/
	t=t.replace(/À|Á|Â|Ã|Ä|Å|à|á|â|ã|ä|å|Ò|Ó|Ô|Õ|Ö|Ø|ò|ó|ô|õ|ö|ø|È|É|Ê|Ë|è|é|ê|ë|Ç|ç|Ì|Í|Î|Ï|ì|í|î|ï|Ù|Ú|Û|Ü|ù|ú|û|ü|ÿ|Ñ|ñ/ig,'?');
	return t;
}



// ====================================================================
//		 URLEncode and URLDecode functions
//
// Copyright Albion Research Ltd. 2002
// http://www.albionresearch.com/
//
// You may copy these functions providing that
// (a) you leave this copyright notice intact, and
// (b) if you use these functions on a publicly accessible
//	  web site you include a credit somewhere on the web site
//	  with a link back to http://www.albionresearch.com/
//
// If you find or fix any bugs, please let us know at albionresearch.com
//
// SpecialThanks to Neelesh Thakur for being the first to
// report a bug in URLDecode() - now fixed 2003-02-19.
// And thanks to everyone else who has provided comments and suggestions.
// ====================================================================
function URLEncode(stringToEncode) {
	// The Javascript escape and unescape functions do not correspond
	// with what browsers actually do...
	var SAFECHARS = "0123456789" +					// Numeric
					"ABCDEFGHIJKLMNOPQRSTUVWXYZ" +	// Alphabetic
					"abcdefghijklmnopqrstuvwxyz" +
					"-_.!~*'()";					// RFC2396 Mark characters
	var HEX = "0123456789ABCDEF";

	var plaintext = stringToEncode;
	var encoded = "";
	for (var i=0, leni = plaintext.length; i<leni; i++) {
		var ch = plaintext.charAt(i);
		if (ch == " ") {
			encoded += "+";				// x-www-urlencoded, rather than %20
		} else if (SAFECHARS.indexOf(ch) != -1) {
			encoded += ch;
		} else {
			var charCode = ch.charCodeAt(0);
			if (charCode > 255) {
				/*
				alert("Unicode Character '"
								+ ch
								+ "' cannot be encoded using standard URL encoding.\n" +
							"(URL encoding only supports 8-bit characters.)\n" +
							"A space (+) will be substituted." );
				*/
				encoded += "+";
			} else {
				encoded += "%";
				encoded += HEX.charAt((charCode >> 4) & 0xF);
				encoded += HEX.charAt(charCode & 0xF);
			}
		}
	} // for

	return encoded;
};

function URLDecode(stringToDecode) {
	// Replace + with ' '
	// Replace %xx with equivalent character
	// Put [ERROR] in output if %xx is invalid.
	var HEXCHARS = "0123456789ABCDEFabcdef";
	var encoded = stringToDecode;
	var plaintext = "";
	var i = 0;
	while (i < encoded.length) {
		var ch = encoded.charAt(i);
		if (ch == "+") {
			plaintext += " ";
			i++;
		} else if (ch == "%") {
			if (i < (encoded.length-2)
					&& HEXCHARS.indexOf(encoded.charAt(i+1)) != -1
					&& HEXCHARS.indexOf(encoded.charAt(i+2)) != -1 ) {
				plaintext += unescape( encoded.substr(i,3) );
				i += 3;
			} else {
				/* alert( 'Bad escape combination near ...' + encoded.substr(i) ); */
				plaintext += "%[ERROR]";
				i++;
			}
		} else {
			plaintext += ch;
			i++;
		}
	} // while

	return plaintext;
};
