/**********************************************************************************************
 * Utilitaires.js                                                                             *
 *                                                                                            *
 * Auteur : Bruno Pelletier                                                                   *
 * Crée le : 03 février 2010                                                                  *
 * Modifié par : Bruno Pelletier et Hélène Blanc                                              *
 * Dernière modification : 18 avril 2011                                                      *
 **********************************************************************************************/

/*****
 * ChargerPage : Charge la page avec p_lien.
 *
 * @param string p_lien : Contient l'ural à charger.
 ***/
function ChargerPage(p_lien)
    {
    window.location= p_lien;
    } // Fin de la fonction ChargerPage(p_lien).

    /*****
 * ChargerPageOnglet : Charge la page avec p_lien.
 *
 * @param string p_lien : Contient l'ural à charger.
 ***/
function ChargerPageOnglet(p_lien)
    {
    open(p_lien,"_blank");
    } // Fin de la fonction ChargerPageOnglet(p_lien).

/*****
 * MontrerSousMenu : Montre le sous-menu selon p_idSousMenu
 *
 * p_idSousMenu : string qui indique quel sous-menu il faut afficher
 ***/
function MontrerSousMenu(p_id)
    {
    var listeSousMenu= new Array('SousMenuAccesClient', 'SousMenuServices', 'SousMenuOutils', 'SousMenuContacts'); // regular array (add an optional integer
    var sousMenu= document.getElementById(p_id);
    
    for(var i = 0; i <= listeSousMenu.length; i++)
	if(document.getElementById(listeSousMenu[i]) && listeSousMenu[i] != p_id)
            document.getElementById(listeSousMenu[i]).style.display = "none";

    sousMenu.style.display = (sousMenu.style.display == "none"? "block" : "none");
    } // Fin de la fonction MontrerSousMenu(p_idSousMenu)

/*****
 * PauseAvantAction : Fait une pause pour ensuite appeler l'action à faire une fois le délai écoulé.
 *
 * p_action : String qui contient la fonction à appeler quand le délai est écoulé.
 * p_pause : Int qui contient la durée du délai.
 ***/
function PauseAvantAction(p_action, p_pause)
    {
    setTimeout(p_action, p_pause); // Fonction javascript qui appel p_action après p_pause.
    } // Fin de la fonction PauseAvantAction(p_action, p_pause).

/*****
 * ModifierImage : Modifie l'image du ID de l'image passé en paramètre.
 *
 * @param string p_idImage : Contient le ID de l'image à modifier.
 * @param string p_nouvelleImage : Contient l'url de l'image à mettre.
 ***/
function ModifierImage(p_idImage, p_nouvelleImage)
    {
    document.getElementById(p_idImage).src= p_nouvelleImage;
    } // Fin de la fonction ModifierImage(p_idImage, p_nouvelleImage).

/*****
 * AjouterAuxFavoris : Ajoute l'url de la page courrante dans les favoris du visiteur.
 *
 * p_info : Balise <a> qui contient l'url et le nom que le favoris aura.
 ***/
function AjouterAuxFavoris(p_info)
    {
    // Vérifie si le navigateur est IE.
    if (navigator.appName != "Microsoft Internet Explorer")
        window.sidebar.addPanel(p_info.getAttribute('href'), p_info.getAttribute('name'), "");
    else
        window.external.AddFavorite(p_info.getAttribute('href'), p_info.getAttribute('name'));
    } // Fin de la fonction AjouterAuxFavoris(p_info).

/*****
 * ChangerItemDeListeDeSelection : Transfère les options sélectionnés d'un ListBox vers un autre.
 *
 * @param string p_listeDebut : Contient l'ID du ListBox de début.
 * @param string p_listeFin : Contient l'ID du ListBox de fin.
 ***/
function ChangerItemDeListeDeSelection(p_listeDebut, p_listeFin)
    {
    p_listeDebut = document.getElementById(p_listeDebut); // Obtient l'élément <select> du ListBox de début.
    p_listeFin = document.getElementById(p_listeFin); // Obtient l'élément <select> du ListBox de fin.
    posAEnlever= new Array(); // Contient la liste de toutes les éléments à transférer.
    
    // Boucle tantqu'il y a des éléments de sélectionnés dans p_listeDebut.
    for(var i=0; i != p_listeDebut.length; i++)
        {
        // Vérifie si l'élément courant est sélectionné.
        if(p_listeDebut.options[i].selected)
            posAEnlever[posAEnlever.length]= i;
        }

    // Pour chacun des éléments sélectionnés dans p_listeDebut, on les transfert dans p_listeFin
    for(var i= 0; i != posAEnlever.length; i++)
        p_listeFin.options[p_listeFin.length]= new Option(RetournerOption(p_listeDebut.options[posAEnlever[i]].value) , p_listeDebut.options[posAEnlever[i]].value); // Met l'option dans la liste final

    // On enlève tous les éléments sélectionnés dans p_listeDebut.
    for(var i= posAEnlever.length-1; i >= 0; i--)
        p_listeDebut.options[posAEnlever[i]]= null; // Enlève la sélection qu'on a fait.
    } // Fin de ChangerItemDeListeDeSelection(p_listeDebut, p_listeFin)

/*****
 * RetournerOption : Retourne la valeur d'un option d'un ListBox.
 *
 * @param string p_valeur : Contient l'option que l'on veut la valeur.
 ***/
function RetournerOption(p_valeur)
    {
    var posSeparateur= p_valeur.indexOf('|');
    return p_valeur.substring(posSeparateur+1, p_valeur.length); // retourne ce qui est apres le '|'.
    } // Fin de la fonction RetournerOption(p_valeur).

/*****
 * ChangerTousItemsDeListeDeSelection : Transfère tous les éléments d'un ListBox vers un autre.
 *
 * @param string p_listeDebut : Contient l'ID du ListBox de début.
 * @param string p_listeFin : Contient l'ID du ListBox de fin.
 ***/
function ChangerTousItemsDeListeDeSelection(p_listeDebut, p_listeFin)
    {
    p_listeDebut = document.getElementById(p_listeDebut); // Obtient l'élément <select> du ListBox de début.
    p_listeFin = document.getElementById(p_listeFin); // Obtient l'élément <select> du ListBox de fin.
    // Boucle tantqu'il y a des éléments dans p_listeDebut.
    for(;;)
        {
        if(p_listeDebut.length == 0) break;

        var option= RetournerOption(p_listeDebut.options[0].value);
        p_listeFin.options[p_listeFin.length]= new Option(option, p_listeDebut.options[0].value); // Met l'option 0 dans la liste final
        p_listeDebut.options[0]= null; // Enlèeve la sélection qu'on a fait.
        }
    } // Fin de la fonction ChangerTousItemsDeListeDeSelection(p_listeDebut, p_listeFin).

/*****
 * VerifierChampNumeroTelephone : Valide les champs de numéro de téléphone et se positionne sur
 *                                  p_prochainChamp si p_champ est complet.
 *
 * @param INPUT p_prochainChamp : Contient le prochain champ a sélectionner.
 * @param int p_nbChiffres : Contient le nombre de chiffre que doit avoir la valeur du champ courant.
 * @param INPUT p_champ : Contient le champ courant.
 ***/
function VerifierChampNumeroTelephone(p_prochainChamp, p_nbChiffres, p_champ)
    {
    ValiderSansCaractere(p_champ); // Valide que le champ n'a pas de caractère.
    // Vérifie si le prochain champ est null.
    if (p_prochainChamp != 'null')
        ChangerSection(p_prochainChamp, p_nbChiffres, p_champ);
    } // Fin de la fonction VerifierChampNumeroTelephone(p_prochainChamp, p_nbChiffres, p_champ).

/*****
 * ChangerSection : Permet de passer d'un champ à un autre dès qu'on l'a rempli correctement.
 *
 * @param input p_prochainChamp : Contient le champ sur lequel il faut mettre le focus.
 * @param int p_nbCaractere : Contient le nombre de caractères que doit contenir p_nomChamp.value.
 * @param input p_nomChamp : Contient le champs où il faut vérifie le contenu avant de passé au prochain champ.
 * @param event p_evenement : Contient l'évènement fait par l'utilisateur. Ex : taper sur une touche.
 ***/
function ChangerSection(p_prochainChamp, p_nbCaractere, p_nomChamp, p_evenement)
    {
    if (p_nbCaractere == 0 && p_evenement.keyCode == 8 && p_nbCaractere == p_nomChamp.value.length) // Si on vérifie pour reculer, on effectue le déplacement que si la touche Backspace ou Delete est utilisée.
        p_prochainChamp.focus();

    if (p_nomChamp.value.length == p_nbCaractere && p_prochainChamp != null && p_nbCaractere != 0)
        p_prochainChamp.focus();
    } // Fin de la fonction ChangerSection(p_prochainChamp, p_nbCaractere, p_nomChamp, p_evenement).

/*****
 * ValiderSansCaractere : S'assure que l'utilisateur a tapé un chiffre et non un caractère.
 *
 * @param input p_nomChamp : Contient un champ text, checkbox, radio ou select ainsi que tous ses attributs.
 * @param event p_evenement : Contient l'évènement fait par l'utilisateur. Ex : taper sur une touche.
 * @param string p_nomDivErreur : Contient le nom du DIV où il faut mettre l'erreur.
 ***/
function ValiderSansCaractere(p_nomChamp, p_evenement, p_nomDivErreur)
    {
    // Crée la liste des touches possibles.
    valeurTouchePossible= new Array(8, 9, 35, 36, 37, 38, 39, 40, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 96, 97, 98, 99,
                                    100, 101, 102, 103, 104, 105);

    if (p_nomDivErreur != "")
        {
        // Vérifie si le touche tapé par l'utilisateur est permise.
        if (valeurTouchePossible.indexOf(p_evenement.keyCode) == -1 || p_evenement.shiftKey)
            document.getElementById(p_nomDivErreur).innerHTML = message_CaracteresNeSontPasPermis;
        else
            EffacerErreur(p_nomDivErreur);
        }

    return valeurTouchePossible.indexOf(p_evenement.keyCode) != -1 && ! p_evenement.shiftKey;
    } // Fin de la fonction ValiderSansCaractere(p_nomChamp, p_evenement, p_nomDivErreur).

/*****
 * CorrigerPNG : Corrige l'arrièere-plan des image PNG à cause que Internet Explorer 6 l'affiche en gris.
 ***/
function CorrigerPNG()
    {
    var arVersion = navigator.appVersion.split("MSIE");
    var version = parseFloat(arVersion[1]);

    if ((version >= 5.5) && (document.body.filters))
        {
        for(var i=0; i < document.images.length; i++)
            {
            var img = document.images[i];
            var imgName = img.src.toUpperCase();
            if (imgName.substring(imgName.length-3, imgName.length) == "PNG")
                {
                var imgID = (img.id) ? "id='" + img.id + "' " : "";
                var imgClass = (img.className) ? "class='" + img.className + "' " : "";
                var imgTitle = (img.title) ? "title='" + img.title + "' " : "title='" + img.alt + "' ";
                var imgStyle = "display:inline-block;" + img.style.cssText ;

                if (img.align == "left")
                    imgStyle = "float:left;" + imgStyle;
                if (img.align == "right")
                    imgStyle = "float:right;" + imgStyle;
                if (img.parentElement.href)
                    imgStyle = "cursor:hand;" + imgStyle;

                var strNewHTML = "<span " + imgID + imgClass + imgTitle + " style=\"" + "width:" + img.width + "px; height:" + img.height + "px;" + imgStyle + ";"
                                 + "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader" + "(src=\'" + img.src + "\', sizingMethod='scale');\"></span>";
                img.outerHTML = strNewHTML;
                i = i-1;
                }
            }
        }
    } // Fin de la fonction correctPNG().

/*****
 * CreerMarker : Crée un marqueur d'emplacement dans la map GoogleMap.
 *
 * @param Array p_point : Contient la longitude et la lattitude de l'emplacement.
 * @param string p_text : Contient le texte à mettre sur l'emplacement.
 * @return GMarker : Retourne un objet GMarker pour l'emplacement voulu.
 ***/
function CreerMarker(p_point, p_text)
    {
    var marker= new GMarker(p_point);
    GEvent.addListener(marker, "click", function() {marker.openInfoWindowHtml(p_text);});
    return marker;
    } // Fin de la fonction CreerMarker(p_point, p_text).

/*****
 * CreerGoogleMap : Crée une GoogleMap dans un DIV.
 *
 * @param string p_idMap : Contient le ID où mettre la mappe.
 ***/
function CreerGoogleMap(p_idMap)
    {
    /*if (GBrowserIsCompatible())
        {*/
        var longitude= 45.325162;
        var lattitude= -73.264561;
        var zoom= 16;
        var texteAffiche= infoALCT;

        var map= new GMap2(document.getElementById(p_idMap));
        map.setCenter(new GLatLng(longitude, lattitude), zoom);
        map.addControl(new GSmallMapControl());
        map.addControl(new GMapTypeControl());

        var point = new GLatLng(longitude, lattitude);
        var marker = CreerMarker(point, texteAffiche);
        map.addOverlay(marker);
        //}
    } // Fin de la fonction CreerGoogleMap(p_idMap).

/*****
 * ChangerCouleurBackgroundEtTexteSelonID : Change la couleur d'arrière-plan et du texte selon le ID:
 *
 * @param string p_id : Contient le ID à modifier.
 * @param string p_couleurBackground : Contient la couleur du background.
 * @param string p_couleurTexte : Contient la couleur du texte.
 ***/
function ChangerCouleurBackgroundEtTexteSelonID(p_id, p_couleurBackground, p_couleurTexte)
    {
    document.getElementById(p_id).style.backgroundColor = p_couleurBackground;
    document.getElementById(p_id).style.color = p_couleurTexte;
    } // Fin de la fonction ChangerCouleurBackgroundEtTexteSelonID(p_id, p_couleurBackground, p_couleurTexte):

function MettreTexteDefilant()
    {
    document.getElementById('TexteDefilant').innerHTML= "<marquee tabindex='-1' scrolldelay='150' onmouseover='this.stop()' onmouseout='this.start()'>" + document.getElementsByName('TexteDefilant')[0].value + "</marquee>";
    }

/*****
 * Fermer : Ferme le DIV passé en paramètre en mettant du contenu vide.
 *
 * @param string p_nomDiv : Contient le nom du DIV à vider.
 ***/
function Fermer(p_nomDiv)
	{
	// Vérifie si le DIV existe.
	if (document.getElementById(p_nomDiv))
		document.getElementById(p_nomDiv).innerHTML = "";
	} // Fin de la fonction Fermer(p_nomDiv).
