﻿/// <reference path="jquery.js" />

// JavaScript Document

$(document).ready(function() {

    // définition de l'animation par défaut
    //jQuery.easing.def = 'easeInOutElastic';
    var FureteurIsIE6 = ($.browser.msie && $.browser.version < 7);


    // Génération de la liste du menu secondaire (TreeView)
    $("#SousNavigation").treeview({ //  L'ensemble des liste (li) à l'intérieur de l'élément ayant comme ID SousNavigation
        persist: "location",
        //pour garder l'état de la liste dans un cookie utiliser la valeure : cookie
        collapsed: true,
        unique: true
    });


    // Le premier niveau du treeview (celui avec le h2) doit etre ouvert et sans signe +
    $("#SousNavigation ul li.expandable:has(h2) .hitarea:first").click();
    $("#SousNavigation ul li.collapsable:has(h2) .hitarea:first").remove();

    // paramêtre généraux des champs Date
    Date.firstDayOfWeek = 0;
    Date.format = 'yyyy-mm-dd';

    // Initialisation du calendrier permettant le choix de dates
    $('.choisirDate').datePicker({
        startDate: '1909/01/01',
        displayClose: true
    });

    // Permet d'utiliser des PNG transparents avec IE6
    $(document).pngFix();


    // Pour la recherche globale, mettre mot-cle en surbrillance au click
    $(".outilRechercheMotCle").bind("click", GererMotCleRecherche);

    // Attacher la fonction d'impression
    $("#btnImpression").bind("click", ImprimerBase);


    // Styler les boites defilantes de la zone Contenu 
    $(".Contenu .boiteDefilante").jScrollPane({ showArrows: true, scrollbarWidth: 19 });


    // Genere les listes arborescentes
    $(".treeViewList").treeview({
        collapsed: true,
        unique: false
    });

    // Styler les DIV contenant le viewstate / validations
    $("#__VIEWSTATE").parent().css("display", "none");
    $("#__EVENTVALIDATION").parent().css("display", "none");

    // S'assurer que les feuilles de styles sont a media:all pour une impression riche par defaut
    //$("link[@media='screen']").attr("media", "all");

    // Fonction pour développer tous les treeviews
    $(".btnAfficherCacherTout").bind("click", OuvrirFermerToutTreeview);

    // Creer les onglets de navigation (VideoAudio est traite dans son propre JS)
    if ($("body#VideoAudio").length < 1)
        $('.ZoneActualites > ul').tabs();

    // Gerer le rollover des onglets dans IE6
    if ($.browser.msie && $.browser.version <= 6) {
        $(".ui-tabs-nav li").not('.ui-tabs-selected').hover(
			function() { $(this).addClass("tabZoneActualitesHover") },
			function() { $(this).removeClass("tabZoneActualitesHover") }
		);
    }
    // Colonnes de longueurs egales dans Video Audio
    // $("#VideoAudio .imbGauche").height(530);
    // $("#VideoAudio .imbDroite").height(430);

    // Initialiser les tables triables. On les selectionne via le ID 'TableTriable' 
    // pour permettre a certaines instances d'utiliser un tri special qui est alors 
    // specifie directement dans le code ASPX 
    $("#TableTriable, #TableTriable2").tablesorter({ widthFixed: true, textExtraction: 'complex', widgets: ['zebra'], sortList: [[0, 0]] })

    // Paginateur. On applique la methode tablesorterPager a un objet qui doit deja avoir lance la methode tablesorter
    // Ne fonctionne pas pour la 2e table triable, si presente
    if ($(".pagerContainer").length > 0)
        $("#TableTriable").tablesorterPager({ container: $(".pagerContainer"), size: $(".pagesize", $(".pagerContainer")).val() });

    // Ajout du parser de dates -- permet de trier 27 mars 2009 en tant que 20090327
    $.tablesorter.addParser(
    {
        // set a unique id
        id: 'triDates',
        is: function(s) {
            // return false so this parser is not auto detected
            return false;
        },
        format: function(s) {

            // Fonction desactivee pour le moment car on utilise un format YYYY-MM-DD
            // A reactiver au besoin (pour un format au long comme '16 janvier 2009')
            // Ne pas oublier de changer le type pour 'numeric' si reactivation
            return s;



            // Si la date est vide, on utilise 1 janvier 1608
            if (s == '')
                s = '1 janvier 1608';
            var a = s.split(' ');
            // get month num
            a[1] = this.getMonth(a[1]);
            a[0] = this.getDay(a[0]);
            // glue and return a new date
            return a.reverse().join("");
        },
        getMonth: function(s) {
            //                    <     "var m = " + MoisJsArray()  >  
            var m = arrCalLblMoisAnnee;
            var l = m.length;
            var hResult = 0;
            for (var i = 0; i < l; i++) {
                if (m[i].toLowerCase() == s.toLowerCase()) {
                    hResult = i + 1;
                    if (hResult < 10)
                        hResult = '0' + hResult;
                }
            }
            return (hResult);
        },
        getDay: function(s) {
            var hResult = s.toString();
            if (hResult.toString().length < 2)
                hResult = '0' + hResult.toString();
            return (hResult);
        },
        // set type, either numeric or text
        // remettre a numeric pour un format de date au long
        type: 'text'
    });

    // Application d'un masque sur certains champs
    $(".CodePostal").mask("a9a 9a9");

    $(".champsDate").mask("9999-99-99");

    // Dans l'accueil de Travaux, on doit ouvrir la premiere des Seances Recentes
    $("body#TravauxAccueil div#ListeSeancesRecentes ul li div.hitarea:first").click();

    //Gestion des menus déroulants de la navigation principale.
    $(".menuHoverParent").hover(
    function(e) {
        $(this).children(".menuHoverEnfant").show();
    },
    function(e) {
        $(this).children(".menuHoverEnfant").hide();
    });
    
    // Afficher un avertissement au clic des liens externes
    GererLiensExternes();   

});


/* Fonctions */

// Effacer le mot cle par defaut
function GererMotCleRecherche()
{
	valeurActuelle = $(this).val();
	if(valeurActuelle == motCleDefaut)
		$(this).select();

}

// Utilitaire - extrait x caracteres a partir de la fin
function Right(str, n)
{
      if (n <= 0)
          return "";
      else if (n > String(str).length)
          return str;
      else
   {
          var iLen = String(str).length;
          return String(str).substring(iLen, iLen - n);
      }
}

// Utilitaire - extrait x caracteres a partir du debut
function Left(str, n)
{
   if (n <= 0)
         return "";
   else if (n > String(str).length)
         return str;
   else
         return String(str).substring(0,n);
}

// Pause
function pausecomp(millis)
{
	var date = new Date();
	var curDate = null;

	do { curDate = new Date(); }
	while(curDate-date < millis);
} 

function ImprimerBase()
{
	// Changer temporairement le media pour screen, de facon a obtenir une impression sans styles
	// (Ces attributs sont remis a "all" a chaque chargement de la page)
	//$("link[@media='all']").attr("media","screen");
	window.print();


}

function OuvrirFermerToutTreeview()
{
	var hyperlien = $(this).find("a");	
	
	if (!$(this).hasClass("listeEclatee"))
	{
		$(".Contenu li.expandable .hitarea").click();
		hyperlien.html(lblFermerTout);
		$(this).addClass("listeEclatee")
	}
	else
	{
		$(".Contenu li.collapsable .hitarea").click();
		hyperlien.html(lblOuvrirTout);
		$(this).removeClass("listeEclatee")
	}


	return false;
}

// Formatte une heure comme: 14 h 28
// --------------------------------------------------------------------------------
function formatterHeure(dateEnMillisecondes)
{
    var heureAffichee = new Date(dateEnMillisecondes);
    var heures = heureAffichee.getHours();
    var minutes = heureAffichee.getMinutes();
    if (minutes < 10)
        minutes = "0" + minutes;
        
    // ne pas afficher les minutes 00
    if (parseInt(minutes) == 0)
		minutes = "";
    
    return heures + " h " + minutes;
}

function dateDiff(date1, date2)
{
    var difference = Date.UTC(date1.getYear(), date1.getMonth(), date1.getDate(), 0, 0, 0) - Date.UTC(date2.getYear(), date2.getMonth(), date2.getDate(), 0, 0, 0);
    return difference / 1000 / 60 / 60 / 24;
}

function padZero(valeurString)
{
    if (typeof (valeurString) == 'undefined' || valeurString == "")
        return "00";

    var objetString = new String(valeurString);

    if (objetString.length == 1)
        return "0" + objetString

    if (objetString.length == 2)
        return objetString
}

// Formatte une date comme: YYYY-MM-DDThh:mm:ssTZD (eg 1997-07-16T19:20:30Z)
// --------------------------------------------------------------------------------
function formatterDateISO(dateEnMillisecondes) 
{
    var dateTemp = new Date(dateEnMillisecondes);
    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();

    month = padZero(month);
    day = padZero(day);
    hour = padZero(hour);
    minute = padZero(minute);
    second = padZero(second);

    return year + "-" + month + "-" + day + "T" + hour + ":" + minute + ":" + second + "Z";

}

// Formatte une date comme: Mercredi, 12 septembre 2012 ou 1er novembre 2009
// --------------------------------------------------------------------------------
function formatterDate(dateEnMillisecondes, choixFormat)
{
    var dateAffichee = new Date(dateEnMillisecondes);
    var jourSemaine
    var jourMois
    var moisAnnee 
    var anneeComplete

    jourSemaine = arrCalLblJoursSemaine[dateAffichee.getDay()]; // lundi
    jourMois = dateAffichee.getDate(); // 27
    moisAnnee = arrCalLblMoisAnnee[dateAffichee.getMonth()].toLowerCase(); // avril
    anneeComplete = dateAffichee.getFullYear(); // 2009


    switch (choixFormat)
    {
        case 1:
            return jourSemaine + ", " + jourMois + " " + moisAnnee + " " + anneeComplete;
            break;

        case 2:
            if (jourMois == 1)
                jourMois = jourMois + "er";
            return jourMois + " " + moisAnnee + " " + anneeComplete;
            break;
    }
}

// Retourne le tableau des dates a afficher dans le navigateur hebdomadaire
// Les dates sont retournees sous forme de millisecondes depuis 1970-01-01 pour
// permettre d'autres manipulations
// --------------------------------------------------------------------------------
function obtenirTableauDates(dateChoisie) 
{    
    var arrRetour = [];
    var jourSemaine = dateChoisie.getDay();
    var dtmDimanche = new Date(dateChoisie);
    var dtmLundi = new Date(dateChoisie); 
    var dtmMardi = new Date(dateChoisie);
    var dtmMercredi = new Date(dateChoisie);
    var dtmJeudi = new Date(dateChoisie);
    var dtmVendredi = new Date(dateChoisie);
    var dtmSamedi = new Date(dateChoisie);
    var dtmSemaineSuivante = new Date(dateChoisie);
    var dtmSemainePrecedente = new Date(dateChoisie);
    
    var intMillisecDansJournee = 24 * 60 * 60 * 1000;

    // Creer l'objet Date pour le dimanche precedent
    dtmDimanche.setDate(dateChoisie.getDate() - jourSemaine);
    dtmLundi.setDate(dateChoisie.getDate() - jourSemaine);
    dtmMardi.setDate(dateChoisie.getDate() - jourSemaine);
    dtmMercredi.setDate(dateChoisie.getDate() - jourSemaine);
    dtmJeudi.setDate(dateChoisie.getDate() - jourSemaine);
    dtmVendredi.setDate(dateChoisie.getDate() - jourSemaine);
    dtmSamedi.setDate(dateChoisie.getDate() - jourSemaine);
    dtmSemaineSuivante.setDate(dateChoisie.getDate() - jourSemaine);
    dtmSemainePrecedente.setDate(dateChoisie.getDate() - jourSemaine);
    

    arrRetour[0] = dtmDimanche.getTime(); // Dimanche
    arrRetour[1] = dtmLundi.setDate(dtmDimanche.getDate() + 1);   // Lundi
    arrRetour[2] = dtmMardi.setDate(dtmDimanche.getDate() + 2);  // Mardi
    arrRetour[3] = dtmMercredi.setDate(dtmDimanche.getDate() + 3); // Mercredi
    arrRetour[4] = dtmJeudi.setDate(dtmDimanche.getDate() + 4); // Jeudi
    arrRetour[5] = dtmVendredi.setDate(dtmDimanche.getDate() + 5); // Vendredi
    arrRetour[6] = dtmSamedi.setDate(dtmDimanche.getDate() + 6); // Samedi
    arrRetour[7] = dtmSemainePrecedente.setDate(dtmDimanche.getDate() - 7);  // Pour la fleche de gauche, on assigne la date il y a exactement une semaine
    arrRetour[8] = dtmSemaineSuivante.setDate(dtmDimanche.getDate() + 7); // Pour la fleche de droite, on assigne la date dans exactement une semaine
    return arrRetour;
}

// Fonction qui va cacher le bloc voulu s'il n'y a aucune donnée à afficher ou l'afficher selon le cas
function ChangerContenuOuCacherLeBloc(contenu, $contenuObjet, $blocObjet)
{
    $contenuObjet.empty();

    if (contenu.length > 0)
    {
        $contenuObjet.append(contenu);
        if ($blocObjet.is(":hidden"))
            $blocObjet.show();
    }
    else
    {
        if ($blocObjet.is(":visible"))
            $blocObjet.hide();
    }
}

function escapeHTML (str)
{
   var div = document.createElement('div');
   var text = document.createTextNode(str);
   div.appendChild(text);
   return div.innerHTML;
}; 


function GererLiensExternes() {

	$('body').not('.redirection').find('a:not(.nePasRediriger)').filter
	(
		function() {

			var estDomaineInterne = false;
			var domaineInterneTmp = "";

			// Domaine du lien
			var domaineDemande = this.hostname.toLowerCase();

			// Si c'est blanc, c'est interne
			if (domaineDemande == " " || domaineDemande == "")
				return false; // false = a ne pas retenir car c'est interne

			// Verifier contre les domaines internes valides
			for (compteur = 0; compteur < _arrDomainesInternes.length; compteur++) {

				domaineInterneTmp = _arrDomainesInternes[compteur].toLowerCase();

				if (domaineDemande.indexOf(domaineInterneTmp) > -1) {
					estDomaineInterne = true;
					break;
				}
			}

			return !(estDomaineInterne); // false pour domaine interne, true pour le reste

		}
	).click
	(
		function() {
			
			var pathNameString = this.pathname;
			if (pathNameString.substring(0, 1) != "/")
				pathNameString = "/" + pathNameString;		
			
			window.location = urlPageRedirectionJS + escape(this.hostname + pathNameString + this.search + this.hash);
			return false;

		}
	)
}



/* Client-side access to querystring name=value pairs
	Version 1.3
	28 May 2008
	
	License (Simplified BSD):
	http://adamv.com/dev/javascript/qslicense.txt
*/
function Querystring(qs) { // optionally pass a querystring to parse
	this.params = {};
	
	if (qs == null) qs = location.search.substring(1, location.search.length);
	if (qs.length == 0) return;

// Turn <plus> back to <space>
// See: http://www.w3.org/TR/REC-html40/interact/forms.html#h-17.13.4.1
	qs = qs.replace(/\+/g, ' ');
	var args = qs.split('&'); // parse out name/value pairs separated via &
	
// split out each name=value pair
	for (var compteur = 0; compteur < args.length; compteur++) {
	    var pair = args[compteur].split('=');
		var name = decodeURIComponent(pair[0]);
		
		var value = (pair.length==2)
			? decodeURIComponent(pair[1])
			: name;
		
		this.params[name] = value;
	}
}

Querystring.prototype.get = function(key, default_) {
	var value = this.params[key];
	return (value != null) ? value : default_;
}

Querystring.prototype.contains = function(key) {
	var value = this.params[key];
	return (value != null);
}

function stringFormat(str)
{
    for (compteur = 0; compteur < arguments.length - 1; compteur++)
	{
	    str = str.replace('{' + compteur + '}', arguments[compteur + 1]);
	}
	return str;
}

