﻿///
/// <reference path="jquery.js" />
/// <reference path="jquery.datePicker.js" />
/// <reference path="jScrollPane.js" />
/// <reference path="BulleAide.js" />

// Variable globale pour indiquer si on est dans la page Calendrier Detaille
// Initialisee a true uniquement dans la page CalendrierDetaille.aspx
var _affichageDetaille;
var _initCalendrierDataJSON;
var _initCalendrierTypeActiviteJSON;
var _urlGetCalendrierDataJSON;
var _dateDonnee;
var _lienContenuURL;
var _documentURL;
var _imageThumbnailURL;
var _imageOriginaleURL;
var _imageThumbnailDrapeauURL;
var _extensionPagesDuSite;
var _visionneuseInitialiseeCal = false;
var _listeObjetMetierPatronUrl;
var _donneesActiviteEnOndes;
var _activiteEnCours = false;

$(document).ready(initCalendrier);

// Initialise le calendrier au complet et attache les evenements
// --------------------------------------------------------------------------------
function initCalendrier() {
    if (typeof (_affichageDetaille) == 'undefined')
        _affichageDetaille = false;

    // Si affichage detaille, on enleve le calendrier sommaire pour eviter d'avoir 2 instances dans la page
    if (_affichageDetaille)
        $(".Calendrier").replaceWith(""); // La classe .Calendrier est présente uniquement dans l'ASCX. replaceWith fonctionne mieux que remove().  

    // Creation du date picker
    var oCalendrierPopup = $('#Calendrier .calendrierPopup').datePicker({ displayClose: true });
    oCalendrierPopup.dpSetOffset(-2, -175);

    // En cas de refresh manuel de la page avec un calendrier affiche, on le referme
    if ($("#ContenuCalendrier").is(":visible"))
        ouvrirFermerCalendrier();

    // Permet le hover sur élément
    if ($("body").attr("id") != "Accueil")
        $("#TitreCalendrier").hover(mouseOverCalendrier, mouseOutCalendrier);

    $(".anchorCalendrierDetaille").click(changerPourCalendrierDetaille);

    // Attacher les evenements aux objets
    var dateAujourdhui = new Date()
    oCalendrierPopup.bind('dateSelected', datePickerDateSelected); // .calendrierPopup.dateSelected()    
    $("body #TitreCalendrier").click(ouvrirFermerCalendrier); // #TitreCalendrier.click()
    $("#Calendrier .aujourdhui a").bind("click", { dateSelectionnee: dateAujourdhui }, changerDate) // .aujourdhui.click()

    // Charger la liste des type activités dans le combobox
    var selectFiltreCategorieActivite = $(".blocActivitesDuJour .selectFiltreCategorieActivite");
    selectFiltreCategorieActivite.empty();

    //Pemet d'ajouter l'option qui permet de retourner tous les types d'activité
    selectFiltreCategorieActivite.append($('<option>').val("*").html(lblCalToutesActivites));
    //Permet d'ajouter l'ensemble des types d'activité.
    $.each(_initCalendrierTypeActiviteJSON, function(i, typeActivite) {
        selectFiltreCategorieActivite.append($('<option></option>').val("cat" + typeActivite.Categorie).html(typeActivite.NomTypeActivite));
    });

    selectFiltreCategorieActivite.bind("change", filtrerBlocActivitesDuJour); // .blocActivitesDuJour select.change()

    RafraichirActiviteEnOndes();

    // Lance le rafraichissement
    if (_initCalendrierDataJSON != undefined) {
        // Garder l'information sur la date courante des données source
        var dateServeur = _initCalendrierDataJSON.DateDonnees;
        // on convertit la date serveur en date cliente sans heure
        _dateDonnee = new Date(dateServeur.getFullYear(), dateServeur.getMonth(), dateServeur.getDate());
        actualiserNavigateurDates(_dateDonnee);
        actualiserBlocEnCours(_initCalendrierDataJSON.ActivitesDuJour);
        actualiserBlocActivitesDuJour(_initCalendrierDataJSON.ActivitesDuJour);
        actualiserBlocExpositions(_initCalendrierDataJSON.Expositions);
        actualiserBlocDrapeaux(_initCalendrierDataJSON.Drapeaux);

        // Garder l'information sur la date courante des données source
        _dateDonnee = _initCalendrierDataJSON.DateDonnees;

    }
    // Filtrer les activités si cela est demande via le param 'cat' de l'URL
    var queryStringUrl = new Querystring();
    var queryStringCat = queryStringUrl.get('cat');
    if (queryStringCat != undefined) {
        var categorieChoisie = "cat" + queryStringCat;

        if ($.browser.msie)
            setTimeout("filtrerActivitesViaParamURL('" + categorieChoisie + "')", 10);
        else
            selectFiltreCategorieActivite.val(categorieChoisie).change();
    }
    else {
        if ($.browser.msie)
            setTimeout("filtrerActivitesViaParamURL('*')", 10);
        else
            selectFiltreCategorieActivite.val("*").change();
    }

    RafraichirActiviteEnOndes();
    setInterval('RafraichirActiviteEnOndes()', intervalleRafraichissementWebDiffusion * 1000);

    // Pour pallier a l'absence de JS
    $("p#calendrierNoJs").hide();
    $("div.contenuCalendrierInterne").show();

    if (_initCalendrierDataJSON != undefined) {
        actualiserLibelleAujourdhui(_initCalendrierDataJSON.DateDonnees);
    }    
    // Initialiser les visionneuses
    if (_affichageDetaille) {
        initVisionneuse();
        initSlimbox();
    }
}

function RafraichirActiviteEnOndes() {
    //Lance l'obtention de l'occurence de recherche courante
    //data: "{versionProgrammationPage : " + $("#versionProgrammationEnCache").val() + ", " + urlObtenirIndicateurWebDiffusionData + "}",
    $.ajax({
        type: "POST",
        url: _urlGetCalendrierObtenirActiviteEnOndes,
        contentType: "application/json; charset=utf-8",
        data: "{langueCourante:'" + langueCourante + "'}",
        dataType: "json",
        success: function(msg) { RafraichirActiviteEnOndesCompletee(msg); },
        error: function(XMLHttpRequest, textStatus, errorThrown) { RafraichirActiviteEnOndesEnErreur(XMLHttpRequest, textStatus, errorThrown); },
        async: false
    });
}

function RafraichirActiviteEnOndesCompletee(msg) {
    if (msg != null) {
        var donneesActivite = eval(msg.d);
        _donneesActiviteEnOndes = eval(msg.d);

        if (donneesActivite == null || donneesActivite.length == 0) {
            DesactiverLienEnDirectCalendrier();
        }
        else {
            if (parseInt($("#versionProgrammationEnCache").val()) != donneesActivite[0].Version) {
                if (donneesActivite[0].Id == null) {
                    DesactiverLienEnDirectCalendrier();
                }
                else {
                    DesactiverLienEnDirectCalendrier();

                    for (var index = 0; index < donneesActivite.length; index++) {
                        var idActivite = '' + donneesActivite[index].Id;

                        //var iconeDirect = $('.IconeEnDirect-' + idActivite);
                        //var iconeDirect = $(stringFormat("[ @class ^= 'IconeEnDirect-{0}']", idActivite));
                        var iconeDirect = $(stringFormat("[ @id ^= 'IconeEnDirect-{0}' ]", idActivite));

                        if (iconeDirect.length >= 1) {
                            iconeDirect.removeClass('icoEnDirectInactif');
                            iconeDirect.addClass('icoEnDirect');
                        }

                        //var lienDirect = $('#spnEnDirect-' + idActivite);
                        var lienDirect = $(stringFormat("[ @class ^= 'spnEnDirect-{0}']", idActivite));

                        if (lienDirect.length >= 1) {
                            //lienDirect.bind("click", function() { RedirigerVideoAudio(idActivite) });
                            lienDirect.bind("click", { id: idActivite }, RedirigerVideoAudio);
                            lienDirect.removeClass('couleurTexteNormal');
                            lienDirect.addClass('styleHyperlien');
                        }
                    }

                    $('#IconeEnDirectCalendrier').removeClass('icoEnDirectInactif');
                    $('#IconeEnDirectCalendrier').addClass('icoEnDirect');
                    //$('#spnEnDirectCalendrier').bind("click", function() { RedirigerVideoAudio(donneesActivite[0].Id) });
                    $('#spnEnDirectCalendrier').bind("click", { id: '' }, RedirigerVideoAudio);
                    $('#spnEnDirectCalendrier').removeClass('couleurTexteNormal');
                    $('#spnEnDirectCalendrier').addClass('styleHyperlien');
                }
                $("#versionProgrammationEnCache").val(donneesActivite[0].Version);
            }
        }
    }
}

function RafraichirActiviteEnOndesEnErreur(XMLHttpRequest, textStatus, errorThrown) {
    DesactiverLienEnDirectCalendrier();
}

function RedirigerVideoAudio(evenement) {
    window.location = stringFormat(urlPageVideoAudio, evenement.data.id);
}

function DesactiverLienEnDirectCalendrier() {

    $('#IconeEnDirectCalendrier').removeClass('icoEnDirect');
    $('#IconeEnDirectCalendrier').addClass('icoEnDirectInactif');
    $('#spnEnDirectCalendrier').unbind();
    $('#spnEnDirectCalendrier').addClass('couleurTexteNormal');
    $('#spnEnDirectCalendrier').removeClass('styleHyperlien');

    //Recherche toutes les icônes et liens de la liste des activités
    var iconesEnDirect = $("[ @id ^= 'IconeEnDirect-' ]");

    //var iconesEnDirect = $("li span span[ @class *= 'IconeEnDirect-' ]");
    //var iconesEnDirect = $("[ @class ^= 'IconeEnDirect-' ]");
    //var liensEnDirect = $("[ @id ^= 'spnEnDirect-' ]");
    var liensEnDirect = $("[ @class ^= 'spnEnDirect-' ]");

    iconesEnDirect.removeClass('icoEnDirect');
    iconesEnDirect.addClass('icoEnDirectInactif');

    liensEnDirect.unbind();
    liensEnDirect.addClass('couleurTexteNormal');
    liensEnDirect.removeClass('styleHyperlien');
}

// Fonction necessaire pour contrer un bug jQuery 
// http://dev.jquery.com/ticket/2252
function filtrerActivitesViaParamURL(categorie) {
    var cboTypesActivites = $(".blocActivitesDuJour .selectFiltreCategorieActivite");
    cboTypesActivites.val(categorie).change();
}

function changerPourCalendrierDetaille() {
    var $this = $(this);

    var selectFiltreCategorieActivite = $(".blocActivitesDuJour .selectFiltreCategorieActivite");
    var categorieChoisie = "";
    //Permet d'ajouter la catégorie dans l'url pour le calendrier détaillé.
    if (selectFiltreCategorieActivite.val() != null && selectFiltreCategorieActivite.val() != "*") {
        categorieChoisie = "cat=" + selectFiltreCategorieActivite.val().substring(3) + "&";
    }
    // Eviter de le faire 2 fois en cas de double-clic
    if ($this.attr("href").indexOf("?date=") == -1)
        $this.attr("href", $this.attr("href") + "?" + categorieChoisie + "date=" + _dateDonnee.getFullYear() + "-" + padZero(_dateDonnee.getMonth() + 1) + "-" + padZero(_dateDonnee.getDate()));
}

function actualiserLibelleAujourdhui(dateSelectionnee) {
    dateTemp = new Date()
    if (dateDiff(dateTemp, dateSelectionnee) != 0)
        $("#Calendrier .aujourdhui a").show();
    else
        $("#Calendrier .aujourdhui a").hide();
}

// Rafraichir les elements du calendrier en fonction de la date choisie
// --------------------------------------------------------------------------------
function actualiserCalendrier(dateSelectionneeAvecHeure) {
    var dateSelectionnee = new Date(dateSelectionneeAvecHeure.getFullYear(), dateSelectionneeAvecHeure.getMonth(), dateSelectionneeAvecHeure.getDate());
    $.ajax({
        type: "POST",
        url: _urlGetCalendrierDataJSON,
        data: "{'date':'" + formatterDateISO(dateSelectionnee) + "', 'calendrierDetaille':" + _affichageDetaille + "}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(msg) {           
            var donneesCalendrier = eval('(' + msg.d + ')');
            _initCalendrierDataJSON = donneesCalendrier;
            actualiserNavigateurDates(dateSelectionnee);
            //actualiserBlocEnCours(data.ActivitesDuJour);
            actualiserBlocActivitesDuJour(donneesCalendrier.ActivitesDuJour);
            actualiserBlocExpositions(donneesCalendrier.Expositions);
            actualiserBlocDrapeaux(donneesCalendrier.Drapeaux);

            var select = $(".blocActivitesDuJour .selectFiltreCategorieActivite");

            // Remettre le filtre des catégories à 'tous les activités'
            if (select.val() != "*")
                $(".blocActivitesDuJour .selectFiltreCategorieActivite").val("*").change();

            // TEMPORAIRE
            // Enlever ce bloc de code pour la production. Ceci affiche un popup pour connaitre les données JSON qui sont transférées
            var test = JSON.stringify(donneesCalendrier, function(key, value) {
                if (this[key] instanceof Date) {
                    dateTemp = this[key];

                    var year = dateTemp.getFullYear();
                    var month = dateTemp.getMonth() + 1;
                    var day = dateTemp.getDate();
                    var hour = dateTemp.getHours();
                    var minute = dateTemp.getMinutes();
                    var second = dateTemp.getSeconds();

                    return year + "-" + padZero(month) + "-" + padZero(day) + "T" + padZero(hour) + ":" + padZero(minute) + ":" + padZero(second);
                }
                else
                    return value;
            }, 3);
            test = test.replace(/\n/g, "<br>").replace(/ /g, "&nbsp;");
            $("#txtCalendrierJSON").empty().html("<b>" + formatterDateISO(dateSelectionnee) + "</b><br><br>" + test);

            // Une fois l'appel AJAX complete, on re-initialise la visionneuse et le slimbox
            if (_affichageDetaille) {
                $(document).ready(initVisionneuse);
                $(document).ready(initSlimbox);
            }
            // Enlever l'overlay
            //if (!_affichageDetaille)
            afficherMasquerOverlay(0);

            actualiserBlocEnCours(donneesCalendrier.ActivitesDuJour);
            RafraichirActiviteEnOndes();
            actualiserLibelleAujourdhui(dateSelectionnee);
        },
        error: function(XMLHttpRequest, textStatus, errorThrown) { AfficherErreur(XMLHttpRequest, textStatus, errorThrown); }
    });
    return false;
}

function AfficherErreur(XMLHttpRequest, textStatus, errorThrown) {

    afficherMasquerOverlay(0);
    // Prendre la bonne boite selon si c'est pour le calendrier détaillé ou sommaire
    if (_affichageDetaille)
        $boite = $(".blocActivitesDuJour #listeActivitesDuJour");
    else
        $boite = $(".blocActivitesDuJour .boiteDefilante");
    $boite.empty();
    $boite.append("<p>" + lblCalDifficulteTechnique + "</p>");
}

// Actualise le navigateur de dates horizontal, attache les evenements 
// --------------------------------------------------------------------------------
function actualiserNavigateurDates(dateSelectionnee) {
    var dateTemp;
    var strTemp;

    // Garder la date sélectionner dans une variable globale
    _dateDonnee = dateSelectionnee;

    // Initialise le TitreDateDuJour
    strTemp = formatterDate(dateSelectionnee.getTime(), 1);

    // Le libelle est sur une seule ligne dans l'affichage detaille
    if (_affichageDetaille) {
        $("#Calendrier #TitreDateDuJour").text(strTemp);
    }
    else {
        strTemp = strTemp.replace(", ", "<br />");
        $("#Calendrier #TitreDateDuJour").html(strTemp);
    }
    // Affiche le libellé aujourd'hui sauf si c'est la date selectionnee
//    dateTemp = new Date()
//    if (dateDiff(dateTemp, dateSelectionnee) != 0)
//        $("#Calendrier .aujourdhui a").show();
//    else
//        $("#Calendrier .aujourdhui a").hide();

    //  Retourne un tableau de 9 elements date exprimes en millisecondes	
    var arrDatesAffichage = obtenirTableauDates(dateSelectionnee);

    // Variables utilises pour verifier les dates limites 
    var tmpDate = new Date();
    tmpDate.addYears(-1 * intNombreAnneeArchiveActivite);
    var _dtSetStartDate = formatterDateISO(tmpDate);
    var dateLimiteInferieure = new Date(tmpDate);
    dateLimiteInferieure.setHours(0, 0, 0, 0);

    var dateLimiteSuperieure = Date.fromString(_dtSetEndDate);
    dateLimiteSuperieure.setHours(23, 59, 59, 999);
    var datePlus7 = new Date(dateSelectionnee); // Creer de nouveaux objets Date; car sinon, faire 'var objet2 = objet1' crée objet2 en tant que pointeur!
    var dateMoins7 = new Date(dateSelectionnee);
    datePlus7.addDays(7);
    dateMoins7.addDays(-7);

    // Initialise les attributs title des <a>, change la classe de la date selectionnee, 
    // attache les evenements. Les fleches gauche et droite sont traitees plus bas.	
    $("#Calendrier .dateNavigateur").not('.fleche').each
    (
	    function(i) {

	        // Date complete dans l'attribut TITLE			
	        $(this).attr({ title: formatterDate(arrDatesAffichage[i], 1) });

	        // Reconstruit la date a partir des millisecondes
	        dateTemp = new Date(arrDatesAffichage[i]);

	        // Ajoute la classe correcte pour la journee active et sinon l'enleve 
	        // pour s'assurer qu'une seule a la fois possede cette classe
	        if (dateSelectionnee.getDate() == dateTemp.getDate())
	            $(this).addClass("journeeActive");
	        else
	            $(this).removeClass("journeeActive");

	        // On bind ou unbind dependant si la date est en-dedans des limites ou non
	        if (dateTemp > dateLimiteSuperieure || dateTemp < dateLimiteInferieure) {
	            $(this).unbind();
	            $(this).children(".overlayJour").show();
	        }
	        else {
	            $(this).children(".overlayJour").hide();
	            $(this).bind("click", { dateSelectionnee: dateTemp }, changerDate);
	            $(this).hover(
					  function() {
					      $(this).addClass("CalendrierNavDateAHover");
					  },
					  function() {
					      $(this).removeClass("CalendrierNavDateAHover");
					  }
					);
	        }
	    }
    );

    // Assigne l'evenement aux fleches, sauf si un click nous amenerait en dehors des limites    
    if (dateMoins7 < dateLimiteInferieure)
        $("#Calendrier #dateNavGauche").unbind();
    else {
        dateTemp = new Date(arrDatesAffichage[7]);
        $("#Calendrier #dateNavGauche").bind("click", { dateSelectionnee: dateTemp }, changerDate);
        $("#Calendrier #dateNavGauche").hover(
											  function() {
											      $(this).addClass("CalendrierNavDateGaucheHover");
											  },
											  function() {
											      $(this).removeClass("CalendrierNavDateGaucheHover");
											  }
											);
    }

    if (datePlus7 > dateLimiteSuperieure) {
        $("#Calendrier #dateNavDroite").unbind();
    }
    else {
        dateTemp = new Date(arrDatesAffichage[8]);
        $("#Calendrier #dateNavDroite").bind("click", { dateSelectionnee: dateTemp }, changerDate);
        $("#Calendrier #dateNavDroite").hover(
											  function() {
											      $(this).addClass("CalendrierNavDateDroiteHover");
											  },
											  function() {
											      $(this).removeClass("CalendrierNavDateDroiteHover");
											  }
											);
    }

    // Initialiser les libelles avec les dates correctes
    $("#Calendrier .libelleDate").each
    (
        function(i) {
            var dateTemp = new Date(arrDatesAffichage[i]); // reconstruire la date
            $(this).text(dateTemp.getDate()); // changer le texte du SPAN 
        }
    );

    // Initialiser les libelles avec les mois corrects
    $("#Calendrier .libelleMois").each
    (
        function(i) {
            var dateTemp = new Date(arrDatesAffichage[i]); // reconstruire la date
            var indiceMois = dateTemp.getMonth();
            $(this).text(arrCalLblMoisAnneeAbr[indiceMois]); // changer le texte du SPAN 
        }
    );

    // Initialiser les limites du date picker. $('.calendrierPopup') = objet datePicker 
    // Voir InclusionHead.ascx pour _dtSetEndDate 
    $('#Calendrier .calendrierPopup').dpSetStartDate(_dtSetStartDate);
    $('#Calendrier .calendrierPopup').dpSetEndDate(_dtSetEndDate);
}

// Charger les donnees pour le bloc En cours
// --------------------------------------------------------------------------------
function actualiserBlocEnCours(activites) {
    var $bloc = $('.blocEnCours')

    // Si la date choisie n'est pas aujourd'hui, ce bloc est masqué. Inutile de faire le reste du code!
    var dateAujourdhui = new Date()
    if (dateDiff(dateAujourdhui, _dateDonnee) != 0) {
        $bloc.css("display", "none");
        return;
    }

    //Si la date est aujourd'hui, afficher la boite EnCours et faire le reste du code
    $bloc.css("display", "");

    var contenu = "";
    var $boite;

    // Prendre la bonne boite selon si c'est pour le calendrier détaillé ou sommaire
    if (_affichageDetaille)
        $boite = $('.blocEnCours #listeActivitesEnCours');
    else
        $boite = $('.blocEnCours .boiteDefilante');

    $.each(activites, function(j, activite) {
        // Affiche cette activité dans la section EnCours uniquement si:
        // - Elle n'est pas reportée, ni annulée
        // - La date actuelle est entre la DateDebut et DateFin de l'activité
        // - Si le jour choisi est égal à la date d'aujourd'hui
        // sinon, retourner une chaine vide
		{
        if (//(
			//EstEnCours(dateAujourdhui, activite.DateDebut, activite.DateFin)
            //&& !activite.DirectAudio 
            //&& !activite.DirectVideo
            //&& !activite.Reportee
            //&& !activite.Annulee
            //&& activite.StatutDiffusion)
            //||
            ((activite.DirectAudio || activite.DirectVideo) && activiteInListeDiffusion(activite.Id))) {
				contenu += activiteContenu.getActiviteEnCoursContenu(activite);
			}
        }
    });

    ChangerContenuOuCacherLeBloc(contenu, $boite, $bloc);

    // Initialiser le libelle d'heure
    if (!_affichageDetaille)
        $("#HeureEnCours").html(formatterHeure(dateAujourdhui));
}

// Charger les donnees pour le bloc Activites du jour (Sommaire et Detaillé)
// --------------------------------------------------------------------------------
function actualiserBlocActivitesDuJour(activites) {
    var $boite;
    var contenu = "";
    var dateAujourdhui = new Date();

    // Prendre la bonne boite selon si c'est pour le calendrier détaillé ou sommaire
    if (_affichageDetaille)
        $boite = $(".blocActivitesDuJour #listeActivitesDuJour");
    else
        $boite = $(".blocActivitesDuJour .boiteDefilante");

    $boite.empty();

    $.each(activites, function(j, activite) {
        if (_affichageDetaille)
            contenu += activiteContenu.getActiviteDuJourContenuDetaille(activite);
        else
            contenu += activiteContenu.getActiviteDuJourContenuSommaire(activite);
    });

    // Si il n'y a aucune donnée, alors le contenu affichera un message
    strMessageErreur = "";

    if (_initCalendrierDataJSON.CodeErreur == 1 || _initCalendrierDataJSON.CodeErreur == 2)
        strMessageErreur = lblCalDifficulteTechnique; // Erreur technique
    else if (contenu.length == 0)
        strMessageErreur = lblCalAucuneActivite; // Pas d'activite en ce moment

    if (strMessageErreur.length > 0) {
        if (_affichageDetaille)
            contenu = "<tr><td colspan=\"2\"><p>" + strMessageErreur + "</p></td></tr>";
        else
            contenu = "<p>" + strMessageErreur + "</p>";
    }

    $boite.append(contenu);

    return false;
}

// Filtre les donnees pour le bloc Activites du jour
// --------------------------------------------------------------------------------
function filtrerBlocActivitesDuJour() {

    var codeCategorie = $(this).val();

    if (_affichageDetaille) {
        if (codeCategorie == "*") {
            $(".blocActivitesDuJour #listeActivitesDuJour > tr").show();
            $(".blocActivitesDuJour #listeActivitesDuJour .albumPhoto").show();
            initVisionneuse();
        }
        else {
            $(".blocActivitesDuJour #listeActivitesDuJour > tr").not("." + codeCategorie).hide();
            $(".blocActivitesDuJour #listeActivitesDuJour > tr").not("." + codeCategorie).find(".albumPhoto").hide(); // correction pour IE qui affiche quand meme les DIV dans des TR caches
            $(".blocActivitesDuJour #listeActivitesDuJour ." + codeCategorie).show();
            $(".blocActivitesDuJour #listeActivitesDuJour ." + codeCategorie).find(".albumPhoto").show();
        }

        // Pour contourner un bug de jcarousel: initialiser la visionneuse seulement si elle est visible
        // et qu'elle n'a pas deja ete initialisee
        var visionneuseVisible = $(".blocActivitesDuJour #listeActivitesDuJour .albumPhoto:visible").length > 0;
        if (visionneuseVisible && !_visionneuseInitialiseeCal) {
            initVisionneuse();
            _visionneuseInitialiseeCal = true;
        }
    }
    else {
        if (codeCategorie == "*")
            $(".blocActivitesDuJour .boiteDefilante > div").show();
        else {
            $(".blocActivitesDuJour .boiteDefilante ." + codeCategorie).show();
            $(".blocActivitesDuJour .boiteDefilante > div").not("." + codeCategorie).hide();
        }
    }
    return false;
}

// Charger les donnees pour le bloc Expositions
// --------------------------------------------------------------------------------
function actualiserBlocExpositions(expositions) {
    var contenu = "";

    $.each(expositions, function(i, exposition) {
        var lieu;
        var titre = GetTitreExposition(exposition);
        if (exposition.Lieu != null ? lieu = " / " + exposition.Lieu : lieu = "");

        contenu += "<li>" + titre + " du " + formatterDate(exposition.DateDebut, 2) + " au " + formatterDate(exposition.DateFin, 2) + lieu + "</li>";
    });

    if (contenu.length > 0)
        contenu = "<ul>" + contenu + "</ul>";

    ChangerContenuOuCacherLeBloc(contenu, $(".blocExpositions #listeExpositions"), $(".blocExpositions"));

    return false;
}

// Charger les donnees pour le bloc Drapeaux
// --------------------------------------------------------------------------------
function actualiserBlocDrapeaux(drapeaux) {

    var contenu = "";
    $.each(drapeaux, function(i, drapeau) {
        if (drapeau.ImageID != null)
            contenu += "<img src='" + _imageThumbnailDrapeauURL + drapeau.ImageID + "'>";
        //        else
        //            contenu += "<img src='" + _urlDrapeauGenerique + "'>";

        contenu += "<h4>" + drapeau.Lieu + "</h4>";

        if (_affichageDetaille)
            contenu += "<p>" + drapeau.Titre + "<br />" + drapeau.Description + "</p>";
        else {
            // La description peut contenir du HTML contenant des attibuts contenant des guillemets; donc traiter les guillemets 
            // pour eviter les problemes d'infobulle
            var drapeauDesc = drapeau.Description;
            drapeauDesc = drapeauDesc.replace(/'/g, "’");
            drapeauDesc = drapeauDesc.replace(/"/g, "'");
            contenu += "<p class=\"BulleInfo\" id=\"sourcePourBulle" + i + "\" title=\"" + drapeauDesc + "\">" + drapeau.TitreCourt + "</p>";
        }

    });

    $blocSurLesTours = $(".blocSurLesTours");

    //Modifier le contenu ou chacher le bloc s'il n'y a pas de données
    ChangerContenuOuCacherLeBloc(contenu, $('.blocSurLesTours #listeDrapeaux'), $blocSurLesTours);

    // Si le bloc Sur les Tours est visible et qu'on est dans le calendrier sommaire, refaire l'initialisation des nouveaux infobulle associés au drapeau.
    if (!_affichageDetaille && $blocSurLesTours.is(":visible"))
        initInfobulles(null, $("#Calendrier #listeDrapeaux"));

    return false;
}

// Traite l'evenement dateSelected du date picker. Signature dictee par le plugin. 
// --------------------------------------------------------------------------------
function datePickerDateSelected(evenement, dateSelected, $td, statutDate) {

    //if (!_affichageDetaille)
        afficherMasquerOverlay(1);

    actualiserCalendrier(dateSelected);
    return false;
}

// Ouvre ou ferme le calendrier et skin les boites defilantes
// --------------------------------------------------------------------------------
function ouvrirFermerCalendrier() {

    // Création des liens pour afficher et cacher le calendrier
    var btnCalendrier = $("#TitreCalendrier");
    var oDivCalendrier = $("#ContenuCalendrier");
    var oDivutilitairesAssemblee = $("#utilitairesAssemblee");
    var oAlbumPhotoColonneDroite = $(".imbDroite .albumPhoto");

    var libelleOuvrirFermer = $(".libelleOuvrirFermer");

    if (($("body").attr("id") != "Accueil") && !_affichageDetaille) {

        if (oDivCalendrier.is(":visible")) {
            oDivCalendrier.hide("slow");

            /** Contourne un problème avec le box model de ie **/
            if ($.browser.msie) {
                oDivutilitairesAssemblee.show();
                oAlbumPhotoColonneDroite.show();
            }

            btnCalendrier.removeClass("Calendrieractif");
            libelleOuvrirFermer.text(arrCalendrierLblGeneral["lblCalOuvrir"]);

        } else {
            afficherMasquerOverlay(1);
            actualiserCalendrier(new Date());
            oDivCalendrier.show("slow");
            afficherMasquerOverlay();

            /** Contourne un problème avec le box model de ie **/
            if ($.browser.msie) {
                oDivutilitairesAssemblee.hide();
                oAlbumPhotoColonneDroite.hide();
                $("#ZoneProgrammation .Onglets *").css("position", "static");
            }

            btnCalendrier.addClass("Calendrieractif");
            libelleOuvrirFermer.text(arrCalendrierLblGeneral["lblCalFermerEntete"]);
        }
    }
}

// Skinner les scrollbars des boites du calendrier
// --------------------------------------------------------------------------------
function skinBoiteDefilante() {
    /*
    $('.calendrier .boiteDefilante').jScrollPane({ showArrows: true, scrollbarWidth: 19 });

	// Pour contourner un bug qui fait que le container a un width=0 et height=0
    // Probablement du au fait que le plugin ne 'voit' pas la hauteur/largeur des
    // .boiteDefilante car elles sont loadees dynamiquement avec 'jQuery Easing'
    $('.calendrier .jScrollPaneContainer').css({ width: "210px", height: "116px" });
    //$('.calendrier .boiteDefilante').css({ width: "100px", height: "100px" });
	
	*/
}

// Wrapper pour gerer les clicks attaches au moyen de jQuery
// --------------------------------------------------------------------------------
function changerDate(evenement) {

    //if (!_affichageDetaille)
    afficherMasquerOverlay(1);

    actualiserCalendrier(evenement.data.dateSelectionnee);

    return false;
}

// Afficher ou masquer l'overlay du calendrier
// --------------------------------------------------------------------------------
function afficherMasquerOverlay(action) {
    // action: 0 = masquer
    // action: 1 = afficher

    // Elements recalcitrants qui 'percent' le div
    var elementProbleme1 = $("#ConteneurCalendrierPopup");
    var elementProbleme2 = $(".blocActivitesDuJour");
    var elementProbleme3 = $(".controlWrapper");
    var elementProbleme4 = $(".blocEnCours");

    if (action == 0) {
        // Reafficher les elements problemes		
        elementProbleme1.css("visibility", "visible");
        elementProbleme2.css("visibility", "visible");
        elementProbleme3.css("visibility", "visible");
        elementProbleme4.css("visibility", "visible");

        // Masquer l'overlay
        $(".overlayCalendrier").hide();
        return;
    }
    else {

        // A cause d'IE6, il faut specifier la largeur, la hauteur car on ne peut utiliser 100%
        var largeurParent = $(".overlayCalendrier").parent().width();
        var hauteurParent = $(".overlayCalendrier").parent().height();

        // On utilise fadeTo pour laisser jQuery gerer l'opacite multi-browser
        $(".overlayCalendrier").fadeTo(50, 0.70);
        $(".overlayCalendrier").css({ width: largeurParent, height: hauteurParent });
        $(".overlayCalendrier").show();

        // Masquer sans redimensionner
        elementProbleme1.css("visibility", "hidden");
        elementProbleme2.css("visibility", "hidden");
        elementProbleme3.css("visibility", "hidden");
        elementProbleme4.css("visibility", "hidden");
    }
}

// Gere le mouseover, mouseout du header de calendrier
// --------------------------------------------------------------------------------
function mouseOverCalendrier() {
    if (!$(this).hasClass("Calendrieractif"))
        $(this).addClass("titreCalendrierHover");
}

function mouseOutCalendrier() {
    $(this).removeClass("titreCalendrierHover");
}

var activiteContenu = {
    getActiviteDuJourContenuDetaille: function(activite) {
        function getSousActiviteDuJourContenuDetaille(sousActivites) {
            var contenu = "";

            $.each(sousActivites, function(i, sousActivite) {
                var activiteDetail = new activiteDetailHTML(sousActivite);
                var cssSousActivite = " sousCommission";
                var colonneHeure = "";

                if (sousActivite.Categorie != 'B') {
                    if (activiteDetail.IndPeriodeAffairesCouranteAssemblee) {
                        colonneHeure = libelleDateDebutVers + ' ' + formatterHeure(sousActivite.DateDebut.getTime())
                            + ' ' + libelleDateFinJusqua + ' ' + formatterHeure(sousActivite.DateFin.getTime());
                    }
                    else {
                        colonneHeure = formatterHeure(sousActivite.DateDebut.getTime()) + " à " + formatterHeure(sousActivite.DateFin.getTime());
                    }

                    cssSousActivite = " sousActivite";
                    descStyle = "";
                }

                contenu += "<tr class=\"cat" + sousActivite.Categorie + cssSousActivite + "\">";
                contenu += "<td class=\"calActHeure\">" + colonneHeure + "</td>";
                contenu += "<td class=\"calActDesc\">" + (sousActivite.Categorie != 'D' ? activiteDetail.images : "") + "<p" + activiteDetail.cssAvecLiens + ">" + activiteDetail.annulee + (sousActivite.Categorie == 'B' ? activiteDetail.titreSousActiviteCommission : activiteDetail.titre) + activiteDetail.privee + activiteDetail.reportee;
                contenu += (activite.Categorie == 'C' ? activiteDetail.description : "") + (sousActivite.Categorie != 'B' ? activiteDetail.lieu : "") + "</p>" + activiteDetail.liens + (sousActivite.Categorie == 'D' ? activiteDetail.images : "");
                contenu += "</td></tr>";
            });

            return contenu;
        }

        var contenu = "";
        var cssTypeEvenement;
        var activiteDetail = new activiteDetailHTML(activite);

        if (activite.SousActivites.length > 0 ? cssTypeEvenement = " evenementMaitre" : cssTypeEvenement = "");

        contenu += "<tr class=\"cat" + activite.Categorie + cssTypeEvenement + "\">";

        if (activiteDetail.indPeriodeAffairesCouranteAssemblee) {
            contenu += "<td class=\"calActHeure\">" + libelleDateDebutVers + ' ' + formatterHeure(activite.DateDebut.getTime());
            if(!(evaluerSiDateEstInconnue(activite.DateFin)))
            {
                contenu += ' ' + libelleDateFinJusqua + ' ' + formatterHeure(activite.DateFin.getTime());
            }
            contenu += "</td>";            
        }
        else {
            contenu += "<td class=\"calActHeure\">" + formatterHeure(activite.DateDebut.getTime());
            if(!(evaluerSiDateEstInconnue(activite.DateFin)))
            {
                contenu += " à " + formatterHeure(activite.DateFin.getTime());
            }
            contenu += "</td>";
        }

        contenu += "<td class=\"calActDesc\">";

        if (activite.Categorie == 'D') {
            contenu += "<p" + activiteDetail.cssAvecLiens + ">" + activiteDetail.annulee + activiteDetail.titre + activiteDetail.privee + activiteDetail.reportee + activiteDetail.lieu + (activiteDetail.indPeriodeAffairesCouranteAssemblee ? ' ' + libelleDebutApresPeriodeCourante + ' ' : '') + "</p>" + activiteDetail.liens;

            if (activiteDetail.images != "") {
                contenu += activiteDetail.images;
            }
        }
        else //Autre que "D" (Autre activité)
        {
            contenu += "<p>";

            if (activiteDetail.images != "") {
                contenu += activiteDetail.images;
            }

            if (activite.Categorie == 'B') {
                contenu += "<p>" + activiteDetail.titre + (activiteDetail.indPeriodeAffairesCouranteAssemblee ? ' ' + libelleDebutApresPeriodeCourante + ' ' : '') + "</p>";
            }
            else {
                contenu += "<p" + activiteDetail.cssAvecLiens + ">" + activiteDetail.annulee + activiteDetail.titre + activiteDetail.privee + activiteDetail.reportee + (activite.Categorie == 'C' ? activiteDetail.description : "") + activiteDetail.lieu + (activiteDetail.indPeriodeAffairesCouranteAssemblee ? ' ' + libelleDebutApresPeriodeCourante + ' ' : '') + "</p>" + activiteDetail.liens;
            }

            contenu += "</p>";
        }

        contenu += "</td></tr>";
        contenu += getSousActiviteDuJourContenuDetaille(activite.SousActivites);

        return contenu;
    },

    getActiviteDuJourContenuSommaire: function(activite) {
        var contenu = "";
        var activiteDetail = new activiteDetailHTML(activite);

        contenu += "<div class=\"cat" + activite.Categorie + "\">";
        contenu += "<h4>" + (activite.IndPeriodeAffairesCouranteAssemblee ? libelleDateDebutVers + ' ' : '') + formatterHeure(activite.DateDebut.getTime()) + "</h4>";

        // si l'activité est une commission
        if (activite.Categorie == 'B')
            contenu += "<p" + activiteDetail.cssAvecLiens + ">" + activiteDetail.annulee + activiteDetail.titre + /*" : " + activite.SousActivites[0].TitreCourt +*/activiteDetail.privee + activiteDetail.reportee + activiteDetail.lieu + "</p>";
        else
            contenu += "<p" + activiteDetail.cssAvecLiens + ">" + activiteDetail.annulee + activiteDetail.titre + activiteDetail.privee + activiteDetail.reportee + (activite.Categorie == 'C' ? activiteDetail.description : "") + activiteDetail.lieu + "</p>";

        contenu += (activite.IndPeriodeAffairesCouranteAssemblee ? libelleDebutApresPeriodeCourante + ' ' : '');

        contenu += activiteDetail.liens;
        contenu += "</div>";

        return contenu;
    },

    getActiviteEnCoursContenu: function(activite) {
        var contenu = "";

        _activiteEnCours = true;
        var activiteDetail = new activiteDetailHTML(activite);
        _activiteEnCours = false;

        contenu += "<p" + activiteDetail.cssAvecLiens + ">" + activiteDetail.titre + activiteDetail.privee + (activite.Categorie == 'C' ? activiteDetail.description : "") + "</p>";
        contenu += activiteDetail.liens;

        return contenu;
    }
}

function EstEnCours(maintenant, dateDebut, dateFin) {
    return dateDebut <= maintenant && maintenant <= dateFin;
}

// Object activiteLiens
// Recoit une liste de liens et retourne le code HTML UL/LI de cette liste
function ActiviteLiens() {
    var liens = "";

    this.add = function(cssClass, label, url, id) {
        if (cssClass == "")
            return "";

        if (url != "")
            label = "<a href=\"" + url + "\">" + label + "</a>";

        liens += "<li class=\"" + cssClass + "\" id=\"" + id + "\">" + label + "</li>";
    }

    this.addEnDirect = function(idActivite, label) {
        liens += '<li id="IconeEnDirect-' + idActivite + '"><span class="spnEnDirect-' + idActivite + ' couleurTexteNormal">' + label + '</span></li>';
    }

    this.getUlLi = function() {
        if (liens == "")
            return "";

        return "<ul class=\"listeIconesHorizontale\">" + liens + "</ul>";
    }
}

function activiteDetailHTML(activite) {
    this.titre = GetTitre(activite);
    this.titreSousActiviteCommission = GetTitreSousActiviteCommission(activite);
    this.description = (activite.Description != null ? " - " + activite.Description : ""); 
    this.annulee = (activite.Annulee ? "<span class=\"noteImportante\">" + lblCalActAnnulee + "</span> - " : "");
    this.reportee = (activite.Reportee ? " <span class=\"noteImportante\">(" + (activite.InfoDateReport == null ? "Activité reportée à une date ultérieure" : activite.InfoDateReport) + ")</span>" : "");
    this.privee = (activite.Privee ? " <span class=\"noteImportante\">(" + (activite.Nature == 2 ? lblCalActPrivee : lblCalActSurInvitation) + ")</span>" : "");
    this.liens = GetActiviteLiens(activite);
    this.cssAvecLiens = (this.liens.length > 0 ? " class=\"avecLiens\"" : "");
    this.lieu = (activite.Lieu != null ? " / " + activite.Lieu : "");
    this.images = GetImages(activite);
    this.nbImages = activite.Images.length;
    this.indPeriodeAffairesCouranteAssemblee = activite.IndPeriodeAffairesCouranteAssemblee;

    function GetDate(date) {
        var dateTemp = date;
        if (date instanceof Date) {
            var year = dateTemp.getFullYear();
            var month = dateTemp.getMonth() + 1;
            var day = dateTemp.getDate();

            return year + "-" + padZero(month) + "-" + padZero(day);
        }
        else
            return date;
    }

    function GetTitre(activite) {
        //var titre = (_affichageDetaille ? activite.Titre : activite.TitreCourt);
        var titre = "";

        if (activite.Categorie.toUpperCase() == "B") // seance de commission
        {
            if (_affichageDetaille)
                titre = activite.Titre; // titre (longs)
            else
                titre = activite.SousTitreCourt + " : " + activite.TitreCourt; // sous-titre + titre (courts)
        }
        else {
            if (_affichageDetaille)
                titre = activite.Titre; // titre (long)
            else
                titre = activite.TitreCourt; // titre (court)
        }

        var patronUrl = null;
        var typeObjetMetierCourt = activite.TypeObjetMetier.substring(activite.TypeObjetMetier.lastIndexOf('.') + 1);
        var url = null;

        if (activite.TypeObjetMetier != null && activite.TypeObjetMetier != "")
            patronUrl = ObtenirObjetMetierPatronUrl(activite.TypeObjetMetier);

        if (patronUrl != null && patronUrl != "" && activite.UrlClient != null && activite.UrlClient != "")
            url = stringFormat(patronUrl, activite.UrlClient);

        if (activite.TypeObjetMetier == "ANQ.Vigie.Bll.SeanceAssemblee")
            url += "?dateDebut=" + GetDate(activite.DateDebut);

        var sRegExInput = new RegExp("/{2}", "g");
        if (url != null && url != "")
            url = url.replace(sRegExInput, "/");
        
        if (url != null && url != "" && !activite.Reportee && !activite.Annulee) {

            if (_affichageDetaille && activite.Categorie == "B") {
                if (_activiteEnCours)
                    url = activite.SousTitre + " : " + activite.Titre; // + "/ " + activite.Lieu
                else
                    url = activite.SousTitre + "/ " + activite.Lieu;
            }
            else
                url = "<a href=\"" + url + "\">" + titre + "</a>";
        }
        else {

            //Dans le cas d'une activité de type commission annulée ou reportée, on affiche le sous-titre suivi du lieu
            if (_affichageDetaille && activite.Categorie == "B" && (!activite.Reportee || !activite.Annulee)) {
                url = activite.SousTitre + " : " + activite.Titre + "/ " + activite.Lieu
            }
            else {
                url = titre;
            }
        }
        return url;
    }

    function GetTitreSousActiviteCommission(activite) {
        var url = null;
        var patronUrl = null;
        var typeObjetMetierCourt = activite.TypeObjetMetier.substring(activite.TypeObjetMetier.lastIndexOf('.') + 1);
        if (activite.Categorie == "B") {
            if (activite.TypeObjetMetier != null && activite.TypeObjetMetier != "" && typeObjetMetierCourt != "Lien")
                patronUrl = ObtenirObjetMetierPatronUrl(activite.TypeObjetMetier);

            if (patronUrl != null && patronUrl != "" && activite.UrlClient != null && activite.UrlClient != "")
                url = stringFormat(patronUrl, activite.UrlClient);
        }
        url = "<a href=\"" + url + "\">" + activite.Titre + "</a>";
        return url;
    }

    function GetImages(activite) {
        var contenu = "";
        var imagesPresentes = false;

        if (activite.Images)
            if (activite.Images.length > 0)
            imagesPresentes = true;

        if (_affichageDetaille && imagesPresentes) {
            if (activite.Categorie != 'D' || activite.Images.length == 1)
                contenu = "<a class=\"lightboxLink floatLeft\"  rel=\"lightbox\" title=\"" + activite.Images[0].Titre + "\" href=\"" + _imageOriginaleURL + activite.Images[0].MediaID + "\"><img class=\"vignetteImage\" alt=\"" + activite.Images[0].Titre + "\" src=\"" + _imageThumbnailURL + activite.Images[0].MediaID + "\"></img></a>";
            else {
                var listeCache = "";
                var listeCarousel = "";

                $.each(activite.Images, function(i, image) {

                    listeCache += "<li><a title=\"" + image.Titre + "\" href=\"" + _imageOriginaleURL + image.MediaID + "\" rel=\"lightbox-" + activite.Id + "\">";
                    listeCache += "<img alt=\"" + image.Titre + "\" src=\"" + _imageOriginaleURL + image.MediaID + "\"/></a></li>";

                    listeCarousel += "<li>";
                    listeCarousel += "<a title=\"" + image.Titre + "\" href=\"" + _imageThumbnailURL + image.MediaID + "\">";
                    listeCarousel += "<img alt=\"" + image.Titre + "\" src=\"" + _imageThumbnailURL + image.MediaID + "\"/></a></li>";
                });

                contenu += "<div class=\"albumPhoto miniAlbumPhoto\" id=\"album" + activite.Id + "\">";
                contenu += "<div class=\"photoChoisieConteneur\">";
                contenu += "<img alt=\"\" src=\"\" class=\"photoChoisieImg\"/></div>";
                contenu += "<div class=\"listePhotosAlbumCachee cacherUnElement\"><ul>" + listeCache + "</ul></div>";
                contenu += "<ul class=\"listePhotosAlbum jcarousel-skin-AssNat\">" + listeCarousel + "</ul></div>";
            }
        }

        return contenu;
    }

    function GetActiviteLiens(activite) {
        var liens = new ActiviteLiens();
        var dtDebutActivite = new Date(activite.DateDebut);
        var dtFinActivite = new Date(activite.DateFin);
        var urlAudioVideo = ObtenirObjetMetierPatronUrl("ANQ.Vigie.Bll.VideoAudio");

        var nomLiEnDirect = "IconeEnDirect-" + activite.Id;
        //LienDiffusionVideoDirectActivite,LienDiffusionAudioDirectActivite
        if (!activite.Reportee
            && !activite.Annulee) {

			//Vérifie si l'activité est ou à déjà été en direct.
        	if (activite.DirectVideo || activite.DirectAudio) {
        	    var dtNow = new Date();
        	    
        	    var nowAvantDebut = compareDate(dtNow, activite.DateDebut);
        	    var nowAvantFin = compareDate(dtNow, activite.DateFin);

        	    //Si la date d'aujourd'hui est avant ou égal à la date de début et la date de fin, afficher le lien
        	    if (nowAvantDebut <= 1 && nowAvantFin < 1) {
        	        liens.addEnDirect(activite.Id, lblCalEnDirect);
        	    }
        	}
        	else { //s'il n'y a pas de diffusion directe pour l'activité l'icone de la diffusion en directe disparait.
        		liens.add("", "", "", nomLiEnDirect);
        	}
            
            //Vérfier s'il y a un archive vidé assossié à l'activité.
            if (activite.VideoAudio != null) {
                var urlAudioVideo = ObtenirObjetMetierPatronUrl("ANQ.Vigie.Bll.VideoAudio");
                if (activite.VideoAudio.UrlClient != "" && activite.VideoAudio.UrlClient != null) {
                    urlAudioVideo = stringFormat(urlAudioVideo, activite.VideoAudio.UrlClient)
                    if (activite.VideoAudio.EstVideo)
                        liens.add("icoVideo", lblCalVideo, urlAudioVideo + "?support=video", nomLiEnDirect);
                    if (activite.VideoAudio.EstAudio)
                        liens.add("icoAudio", lblCalAudio, urlAudioVideo + "?support=audio", nomLiEnDirect);
                }
            }
            
            //Vérifier s'il y a une possible transcription lié à l'activité.
            if (activite.IndTranscription)
                if (activite.LienTranscription == "" || activite.LienTranscription == null)
                liens.add("icoHTMLInactif", lblCalTranscription, "", "");
            else {
                if (activite.Categorie == "D")
                    liens.add("icoHTML", lblCalTranscription, ConstruireLienTranscription(activite), "");
                else
                    liens.add("icoHTML", lblCalTranscription, ConstruireLienTranscription(activite) + "." + _extensionPagesDuSite, "");
            }

			//Vérifier s'il y a un communiqué de presse rattaché à cette activité.
            if (activite.IndCommuniquePresse)
                if (activite.LienCommuniquePresse == "" || activite.LienCommuniquePresse == null)
                liens.add("icoCommuniqueInactif", lblCalCommunique, "", "");
            else
                liens.add("icoCommunique", lblCalCommunique, _lienPatronUrlCommuniquePresse + activite.LienCommuniquePresse + "." + _extensionPagesDuSite, "");

			//Pour gérér l'affichage des divers documents de l'activité.
            $.each(activite.Documents, function(i, doc) {
                liens.add("ico" + doc.Type, doc.Categorie + " (" + doc.Extension + ")", _documentURL + doc.MediaID, "");
            });
        }
        else
        { liens.add("", "", "", ""); }
        return liens.getUlLi();
    }
}

// Permet d'objet le patron d'url pour un type d'objet métier.  L'exécution de la méthode stringFormat
// (équivalent de String.Format() en c#) sur le patron d'url permet d'obtenir l'url complet de 
// l'objet.
function ObtenirObjetMetierPatronUrl(typeObjetMetier) {
    // déterminer le nom de l'objet métier
    var nomObjetMetier;
    if (typeObjetMetier.lastIndexOf('.') > -1)
        nomObjetMetier = typeObjetMetier.substring(typeObjetMetier.lastIndexOf('.') + 1);
    else
        nomObjetMetier = typeObjetMetier;

    var re = new RegExp(nomObjetMetier + ":[^\\|\\r\\n]*\\|");
    var m = re.exec(_listeObjetMetierPatronUrl);
    if (m != null) {
        var s = m[0];
        return s.replace(nomObjetMetier + ":", "").substring(0, s.length - nomObjetMetier.length - 2);
    }
    return null;
}

//Permet de formater de titre d'une exposition et de lui associer un lien si le lien existe
function GetTitreExposition(exposition) {
    var titre = (_affichageDetaille ? exposition.Titre : exposition.TitreCourt);
    var patronUrl = null;
    var typeObjetMetierCourt = (exposition.TypeObjectMetier != null ? exposition.TypeObjectMetier.substring(exposition.TypeObjectMetier.lastIndexOf('.') + 1) : "");
    var url = null;

    if (exposition.TypeObjectMetier != null && exposition.TypeObjectMetier != "")
        patronUrl = ObtenirObjetMetierPatronUrl(exposition.TypeObjectMetier);

    if (patronUrl != null && patronUrl != "" && exposition.Lien != null && exposition.Lien != "")
        url = stringFormat(patronUrl, exposition.Lien);

    if (exposition.TypeObjectMetier == "ANQ.Vigie.Bll.SeanceAssemblee")
        url += "?dateDebut=" + GetDate(exposition.DateDebut);

    if (url != null && url != "")
        url = "<a href=\"" + url + "\">" + titre + "</a>"
    else
        url = titre;

    return url;

}

//Construire l'url vers laquelle, le label transcription pointe dans le cas ou IndTranscription d'une activité est a true.
function ConstruireLienTranscription(activite) {
    var url;
    if (activite.IndTranscription == true) {
        switch (activite.Categorie.toUpperCase()) {
            case "A":
            case "B":
                url = stringFormat(_lienJournalDebat, activite.LienTranscription).replace("." + _extensionPagesDuSite, "");
                break;
            case "C":
                url = _lienPatronUrlTranscription + activite.LienTranscription;
                break;
            case "D":
                var urlNommeAV = ObtenirObjetMetierPatronUrl("ANQ.Vigie.Bll.VideoAudio")
                url = stringFormat(urlNommeAV + "?visTrans=true", activite.LienTranscription);
                break;
        }
    }
    return url;
}
//Vérifier si un activitée est dans la liste de la diffusion directe
function activiteInListeDiffusion(idActivite) {
    var estDansliste = false;

    if (_donneesActiviteEnOndes == null || _donneesActiviteEnOndes == 'undefined')
        return false;

    for (var i = 0; i < _donneesActiviteEnOndes.length; i++) {
        if (_donneesActiviteEnOndes[i].Id == idActivite) {
            estDansliste = true;
            break;
        }
    }
    return estDansliste;
}

/**
* Comparaison de date
* Retourne -1 si date1 est avant date2
* Retourne 1 si date1 est après date2
* Retourne 0 si date1 égal date2
**/
function compareDate(date1, date2) {
    var d1 = date1;
    var d2 = date2;
    var d1y, d1m, d1d, d1h, d1mn, d1scd;
    var d2y, d2m, d2d, d2h, d2mn, d2scd;
    if (d1 instanceof Date) {
        d1y = d1.getFullYear();
        d1m = d1.getMonth() + 1;
        d1d = d1.getDate();
        d1h = d1.getHours();
        d1mn = d1.getMinutes();
        d1scd = d1.getSeconds();
    }
    if (d2 instanceof Date) {
        d2y = d2.getFullYear();
        d2m = d2.getMonth() + 1;
        d2d = d2.getDate();
        d2h = d2.getHours();
        d2mn = d2.getMinutes();
        d2scd = d2.getSeconds();
    }
    if (d1y < d2y) {
        return -1;
    } else if (d1y > d2y) {
        return 1;
    } else {
        if (d1m < d2m) {
            return -1;
        } else if (d1m > d2m) {
            return 1;
        } else {
            if (d1d < d2d) {
                return -1;
            } else if (d1d > d2d) {
                return 1;
            } else {
                if (d1h < d2h) {
                    return -1;
                } else if (d1h > d2h) {
                    return 1;
                } else {
                    if (d1mn < d2mn) {
                        return -1;
                    } else if (d1mn > d2mn) {
                        return 1;
                    } else {
                        if (d1scd < d2scd) {
                            return -1;
                        } else if (d1scd > d2scd) {
                            return 1;
                        } else {
                            return 0;
                        }
                    }
                }
            }
        }
    }
}

function evaluerSiDateEstInconnue(dateCible) {
    var heures = dateCible.getHours();
    var minutes = dateCible.getMinutes();
    var secondes = dateCible.getSeconds();
    return ((heures == 23) && (minutes == 59) && (secondes == 59));
}
