/*****************************************************/
/*********** Fichier commun des javascripts **********/
/*****************************************************/

//Les javascripts communs correspondent aux javascripts fournis à TOUS les sites partenaires, QUELQUE SOIT LE NAVIGATEUR.
//Toute méthode javascript spécifique à un site, ou intégrant du code non compatible W3C ou IE sera placée dans les fichiers IE.js et Netscape.js.

//Les méhtodes d'affichage ne sont pas portables à cause de la différence d'interprétation du 'inline', du '' et du 'block' pour les browsers.
//On ne garde donc que les méthodes de masquage. (display='none' ne peut pas s'interpréter de 10000 façons)

//De même les méthodes d'affichage de texte ne sont pas présentes ici (document.write n'est pas portable W3C)
//Egalement, les méthodes liées à la validation des groupes, les méthodes liées aux abandons, les méthodes contenant du texte en dur (alertes)
//ne sont pas présentes ici, pour des raisons de flexibilité.


/******************************************************/
/****************** Contenu du fichier ****************/
/******************************************************/

// ----- Affichage/Masquage d'éléments ----- 
// ----- Récupérations d'éléments ----------
// ----- Conditionnels ---------------------
// ----- Initialisation --------------------
// ----- Utilitaires Divers ----------------

/******************************************************/
/******************************************************/



/* Constante pour la recherche véhicule */
var CONST_TEXTE_JJMMAAAA_DEFAUT = 'JJ/MM/AAAA';
var CONST_TEXTE_JJMM_DEFAUT = 'JJ/MM';
var CONST_TEXTE_MMAAAA_DEFAUT = 'MM/AAAA';
var CONST_TEXTE_MM_DEFAUT = 'MM';
var CONST_TEXTE_AAAA_DEFAUT = 'AAAA';
 
/* A trier proprement */
// Ajoute une liste d'options sous forme d'énuméré de chaînes dans une liste déroulante (type Html : "SELECT")
function ajouterOptions(select, listeOptions, texteSuffixeOptionnel, messagePremiereOption) {
    ajouterOptionParDefaut(select, messagePremiereOption);
    for (var i = 0; i < listeOptions.length; i++) {
        if (texteSuffixeOptionnel != undefined && texteSuffixeOptionnel != null) {
            ajouterOption(select, listeOptions[i], listeOptions[i] + texteSuffixeOptionnel);
        }
        else {
            ajouterOption(select, listeOptions[i], listeOptions[i]);
        }
    }
}

// Ajoute une option par défaut de valeur NSP représentant un non choix de l'utilisateur
function ajouterOptionParDefaut(select) {
    ajouterOption(select, "NSP", " -- S\351lectionnez -- ");
}

function ajouterOptionParDefaut(select, messagePremiereOption) {
    ajouterOption(select, "NSP", messagePremiereOption);
}

// Ajoute une option par défaut de valeur 0 mais sans texte associé représentant un non choix de l'utilisateur
function ajouterOptionVide(select) {
    ajouterOption(select, 0, "");
}

// Ajoute une option de valeur "ValeurTemporaire" avec le texte "Ne sait pas"
// la valeur "NSP" est utilisée pour la valeur par défaut (traitement de la conversion de la commande automate)
function ajouterOptionNSP(select) {
    ajouterOption(select, "ValeurTemporaire", "Ne sait pas");
}

// Affiche la div de progression
function afficherProgression() {
    var divChargement = document.getElementById("chargement");
    if (divChargement != null) {
        divChargement.style.display = '';
    }
}

function cacherProgression() {
    var divChargement = document.getElementById("chargement");
    if (divChargement != null) {
        divChargement.style.display = 'none';
    }
}

// Ajoute une option dans une liste déroulante (type Html : "SELECT")
function ajouterOption(select, code, texte) {
    try {
        var option = new Option(texte, code);
        var existe = false;
        for (var i = 0; i < select.options.length; i++) {
            if (select.options[i].value == code) {
                existe = true;
            }
        }
        if (!existe) {
            select.options.add(option);
        }
    }
    catch (Exception) {
        //alert(Exception);
    }
}

/// Récupère l'option sélectionnée dans une liste déroulante (type Html : "SELECT")
function recupererOptionSelectionnee(select) {
    if (select == null || select.selectedIndex == null || select.selectedIndex == -1) {
        return "NSP";
    }
    else {
        return select[select.selectedIndex].value;
    }
}

// Vide la liste déroulante (type Html : "SELECT")
function viderListe(select) {
    for (var i = select.length; i >= 0; i--) {
        select.remove(i);
    }
}

// Vide le contenu d'un champ de type "INPUT"
function viderChamp(champ) {
    if (champ != null) {
        champ.value = '';
    }
}

// Remplit la valeur d'un champ de type "INPUT"
function remplirChamp(champ, valeur) {
    if (champ != null) {
        champ.value = valeur;
    }
}

// Recherche le code dans la liste d'options et sélectionne la première option
// dont le code correspond au paramètre
function positionnerChoix(select, code) {
    if (select == undefined || select == null) {
        return false;
    }
    for (var i = 0; i < select.length; i++) {
        if (select[i].value == code) {
            select.selectedIndex = i;
            return true;
        }
    }
    return false;
}

// Positionne un choix par défaut sur la liste déroulante fournie en paramètre
function positionnerChoixParDefaut(select) {
    positionnerChoix(select, "NSP");
}

// Teste que la variable est positionné et ne vaut pas la valeur nulle
// Ce qui revient à tester 
function estDefini(variable) {
    return variable != undefined && variable != null && variable != 0;
}


/******************************************************/
/**************Affichage/Masquage d'éléments***********/
/******************************************************/

//affiche la question idQuestion si condition est vrai
function afficheSiCond(idQuestion, condition) {
    var question = document.getElementById(idQuestion);
    if (question != null) {
        try {
            if (eval(condition)) { afficheQuestionComplete(question.getAttribute('id')); }
            else { cacheQuestion(question.getAttribute('id')); }
        }
        catch (Exception) { cacheQuestion(question.getAttribute('id')); }
    }
}

//affiche le bloc idBloc si condition est vrai
function afficheBlocSiCond(idBloc, condition) {
    try {
        var bloc = document.getElementById(idBloc);
        if (eval(condition)) afficheBlocComplete(bloc.getAttribute('id'));
        else cacheBloc(bloc.getAttribute('id'));
    }
    catch (Exception) { cacheBloc(bloc.getAttribute('id')); }

}

//Cache la question ainsi que l'avant et apres reponse
function cacheQuestion(idQuestion) {
    try {
        var question = document.getElementById(idQuestion);
        var avant = document.getElementById(question.getAttribute("id") + "AvantReponse");
        if (avant) avant.style.display = 'none';
        question.style.display = 'none';
        var apres = document.getElementById(question.getAttribute("id") + "ApresReponse");
        if (apres) apres.style.display = 'none';
    }
    catch (Exception) { }
}

//cache le bloc ainsi que l'avant et apres question
function cacheBloc(idBloc) {
    try {
        var bloc = document.getElementById(idBloc);
        var avant = document.getElementById(bloc.getAttribute("id") + "AvantQuestion");
        if (avant) avant.style.display = 'none';
        bloc.style.display = 'none';
        var apres = document.getElementById(bloc.getAttribute("id") + "ApresQuestion");
        if (apres) apres.style.display = 'none';
        var erreur = document.getElementById(bloc.getAttribute("id") + "Erreur");
        if (erreur) erreur.style.display = 'none';
        var plus = document.getElementById(bloc.id + "Plus");
        if (plus) plus.style.display = 'none';
    }
    catch (Exception) { }
}

//cache l'ensemble des blocs présents dans le groupe
function cacheBlocs() {
    var dynActive = document.forms["form1"].dynActive.value;
    if (dynActive != 'false') {
        var tableau = recupereBlocs();
        for (k = 0; k < tableau.length; k++) {
            var bloc = tableau[k];
            cacheBloc(bloc.id);
        }
    }
}

//cache l'ensemble des questions présentes dans le groupe
function cacheQuestions() {
    var dynActive = document.forms["form1"].dynActive.value;
    if (dynActive != 'false') {
        var tableau = recupereQuestions();
        for (k = 0; k < tableau.length; k++) {
            var question = tableau[k];
            cacheQuestion(question.id);
        }
    }
}

//cache blocs et questions, ensuite on affiche le formulaire
function cacheTout() {
    cacheBlocs();
    cacheQuestions();
    document.forms["form1"].style.display = "inline";
}


//affiche une div d'aide
function montreAide(nomDiv, type) {
    cacheAides();
    if (type == "div") {
        cacheListBox();
        montreDiv('aide' + nomDiv);
    }
}

// cache une div d'aide
function cacheAide(nomDiv) {
    cacheDiv(nomDiv);
    afficheListBox();
}

// cache les listbox
function cacheAides() {
    var listeDiv = document.getElementsByTagName('div');
    cacheListBox();
    if (listeDiv != null) {
        for (i = 0; i < listeDiv.length; i++) {
            var c = listeDiv[i].getAttribute("id");
            if (c.substring(0, 4) == 'aide') {
                cacheDiv(listeDiv[i].id);
            }
        }
    }
}

// cache les listbox
function cacheListBox() {
    var aSelect = document.getElementsByTagName('select');
    for (i = 0; i < aSelect.length; i++) {
        aSelect[i].style.display = 'none';
    }
}

// affiche les listbox
function afficheListBox() {
    var aSelect = document.getElementsByTagName('select');
    for (i = 0; i < aSelect.length; i++) {
        aSelect[i].style.display = '';
    }
}

//affiche une div
function montreDiv(nomDiv) {
    var div = document.getElementById(nomDiv);
    if (div) {
        div.style.display = '';
    }
}

//cache une div (utilisé pour les  div d'aide)
function cacheDiv(nomDiv) {
    var div = document.getElementById(nomDiv);
    if (div) {
        div.style.display = 'none';
    }
}


// fonction appelé dans bodyOnLoad pour créer l'attribute style des div aide
function creerAidesStyle() {
    var listeDiv = document.getElementsByTagName('div');

    if (listeDiv != null) {
        for (i = 0; i < listeDiv.length; i++) {
            var idAide = listeDiv[i].getAttribute("id");
            if (idAide.substring(0, 4) == 'aide') {
                creerStyleAide(idAide);
            }
        }
    }
}

// déplace les div d'aide
function creerStyleAide(idAide) {

    var elementAide = document.getElementById(idAide);
    var left = ((document.body.offsetWidth - 560) / 2);
    var top = ((document.body.offsetHeight) / 2);
    if (elementAide != null) {
        // Lorsque l'on cherche la valeur de la propriété width, on obtient 100px
        // On va chercher si la chaine contient "px"
        // et on ne conserve que la valeur
        var chaine = document.getElementById(idAide).style.width;
        var sousChaine = "px";
        var existPX = chaine.lastIndexOf(sousChaine);
        if (existPX != -1) {
            var tailleDiv = chaine.substring(0, chaine.length - 2);
            var tailleFenetre = document.body.offsetWidth;
            left = ((tailleFenetre - tailleDiv) / 2) - 12;
        }

        document.getElementById(idAide).style.left = left;

        if (document.getElementById(idAide).style.bottom != '') {
            document.getElementById(idAide).style.top = top;
        }
    }

}

// déplace les div d'aide ayant une largeur différentes
function creerStyleAideSpecial(idAide, positionX) {
    var elementAide = document.getElementById(idAide);

    var left = ((document.body.offsetWidth - positionX) / 2);
    var top = ((document.body.offsetHeight) / 2);

    if (elementAide != null) {
        document.getElementById(idAide).style.left = left;
        if (document.getElementById(idAide).style.bottom != '') {
            document.getElementById(idAide).style.top = top;
        }
    }
}

//Affiche les lignes d'un tableau présent dans le document à la condition que ces lignes (tr) contiennent un attribut 'contenuLigne' dont la valeur n'est pas vide
//Utilisée pour les aides récapitulatives des garanties : Si la garantie n'est pas proposée (la donnée est vide), on affiche pas la ligne.
function afficherLignesTableau() {
    var tabTrs = document.getElementsByTagName("tr");
    var i = 0;
    while (i < tabTrs.length) {
        var contenu = tabTrs[i].getAttribute("contenuLigne");
        var sContenu = new String(contenu);
        if ((sContenu.replace(" ", "") != "") && (sContenu != "undefined")) tabTrs[i].style.display = "";

        i++;
    }
}


//Affiche la div d'attente
function attente() 
{
    
    var aSelect = document.getElementsByTagName('select');
    for (i = 0; i < aSelect.length; i++) {
        aSelect[i].style.visibility = 'hidden';
    }
    document.getElementById("divAttente").style.display = 'inline';
}

//cache une colonne de la table idTable, ciblée par son indice
function cacheColonne(idTable, indiceColonne) {
    var tableHtml = document.getElementById(idTable);
    var tabTr = tableHtml.rows;
    var i;
    for (i = 0; i < tabTr.length; i++) {
        var tabTd = tabTr[i].cells
        var td = tabTd[indiceColonne];
        if (td != null) td.style.display = 'none';
    }
}

//Méthode très spécifique utilisée pour afficher/cacher une partie du tableau du tarif
function initTableauTarif(idQuestion, colonne, formuleChoisie) {
    // Si la formule n'est pas vide et qu'elle est tout risques (donc pas tiers).
    if ((formuleChoisie == '') || (!(formuleChoisie.indexOf("Tiers") > 0))) cacheColonne(idQuestion, colonne);
    else {
        montreColonne(idQuestion, colonne);
        montreColonne(idQuestion, colonne + 1);
    }
}

//Enregistrement de la simulation
function enregistrerSimul() {
    document.forms["form1"].elements.abandonQuestionnaire.value = 'false';
    document.forms["form1"].elements.commande.value = 'enregistrer';
    document.forms["form1"].submit();
}

// affiche ou non les lignes et du tableau des garanties (Sélénia)
function afficherLignesGaranties(gpc, assistanceKm) {
    afficherLignesGarantiesType(gpc, assistanceKm, "Tiers");
    afficherLignesGarantiesType(gpc, assistanceKm, "TousRisques");
}

// affiche ou cache les lignes des garanties GPC et Assistance Km
// GPC
// AssistanceKm
// type : "Tiers" || "TousRisques"
function afficherLignesGarantiesType(gpc, assistanceKm, type) {
    var gpcPresente = false;
    var assistanceKmPresente = false;

    if ((gpc == null) || (gpc == '') || (gpc == 'false')) {
        cacheDiv("trGPC" + type);
    }
    else {
        montreDiv("trGPC" + type);
        gpcPresente = true;
    }

    if ((assistanceKm == null) || (assistanceKm == '') || (assistanceKm == '30')) {
        cacheDiv("trAssistanceKm" + type);
    }
    else {
        montreDiv("trAssistanceKm" + type);
        assistanceKmPresente = true;
    }

    if ((assistanceKmPresente == false) && (gpcPresente == false)) {
        cacheDiv("garantiesComplementsGaranties" + type);
    }
}

/******************************************************/
/********** Récupération d'elements multiples *********/
/******************************************************/

//Recupère la reponse associée a la question idQuestion
function recupereReponse(idQuestion) {
    var nom = "reponse" + idQuestion;
    var i = 0;
    var elements = document.getElementsByTagName('*'); ;
    while (i < elements.length) {
        if ((elements[i].getAttribute("typeElt") == "reponse") && (elements[i].getAttribute("id") == nom)) {
            return elements[i];
        }
        i++;
    }
    return null;
}

//recuperer la reponse qui n'est pas encore sauvegardee
function recupereReponseAvantSubmit(idQuestion) {
    var rep = recupereToutesInputReponses(idQuestion);

    if (rep && rep instanceof Array) {
        for (index = 0; index < rep.length; index++) {
            switch (rep[index].type) {
                case 'radio':
                case 'checkbox':
                    if (rep[index].checked) {
                        return rep[index].value;
                    }
                    break;
                case 'listbox':
                case 'select-one':
                    return rep[index].value;
                case 'text':
                    return rep[index].value;
                default:
                    break;
            }
        }
    }
    return null;
}


//recupere l'ensemble des blocs
function recupereBlocs() {
    var tab = [];
    var elements = document.getElementsByTagName('*');
    for (i = 0; i < elements.length; i++) {
        var obj = elements[i];
        if ((obj != null) && (obj.getAttribute("typeElt") != null) && (obj.getAttribute("typeElt").indexOf("bloc") == 0)) {
            tab.push(obj);
        }
    }
    return tab;
}


//Recupere l'element html 'input' pour une question donnée (le nom est le meme que la reponse associée, mais le tag html est INPUT)
function recupereInputReponse(idQuestion) {
    var nom = "reponse" + idQuestion;
    var i = 0;
    var inputs = document.getElementsByTagName('INPUT');
    var selects = document.getElementsByTagName('SELECT');
    var tab = new Array();

    while (i < inputs.length) {
        var rep = inputs[i];
        if (rep.name == nom) {
            if ((rep.type == 'radio') || (rep.type == 'checkbox')) {
                tab.push(rep);
            }
            else return rep;
        }
        i++
    }
    if (tab.length > 0) return tab;
    i = 0;
    while (i < selects.length) {
        var rep = selects[i];
        if (rep.name == nom) return rep;
        i++;
    }
    return null;
}

// Récupère l'élélment Html 'Select' de la réponse à la question
function recupereSelectReponse(idQuestion) {
    var nom = "reponse" + idQuestion;
    var i = 0;
    var selects = document.getElementsByTagName('SELECT');
    var tab = new Array();
    while (i < selects.length) {
        var rep = selects[i];
        if (rep.name == nom) return rep;
        i++;
    }
}

//Recupere l'element html 'input' pour une question donnée (le nom est le meme que la reponse associée, mais le tag html est INPUT ou select)
function recupereToutesInputReponses(idQuestion) {
    var nom = "reponse" + idQuestion;
    var i = 0;
    var inputs = document.getElementsByTagName('INPUT');
    var selects = document.getElementsByTagName('SELECT');
    var tab = new Array();

    while (i < inputs.length) {
        var rep = inputs[i];
        if (rep.name == nom) {
            tab.push(rep);
        }
        i++
    }

    i = 0;
    while (i < selects.length) {
        var rep = selects[i];
        if (rep.name == nom) {
            tab.push(rep);
        }
        i++;
    }
    if (tab.length > 0) return tab;

    return null;
}

//Recupere l'ensemble des questions soit l'ensemble des éléments dont le typeElt est question 
// Les <tr> ne sont pas considérés comme des éléments par le dom, on les teste egalement
function recupereQuestions() {
    var tabRef
    var tab = [];
    var elements = document.getElementsByTagName('*'); ;
    for (i = 0; i < elements.length; i++) {
        var obj = elements[i];
        if ((obj != null) && (obj.getAttribute("typeElt") != null) && (obj.getAttribute("typeElt") == "question")) { tab.push(obj); }
    }
    var trs = document.getElementsByTagName("tr");
    for (j = 0; j < trs.length; j++) {
        var obj2 = trs[j];
        if ((obj2 != null) && (obj2.getAttribute("typeElt") != null) && (obj2.getAttribute("typeElt") == "question")) { tab.push(obj2); }
    }
    return tab;
}

//Recupere un élément html simple à partir de son id
//Cette méthode marche pour les deux browsers, donc c'est plus compliqué que document.all.idElement
function recupereElement(idElement) {
    var elements = document.getElementsByTagName("*");
    var i = 0;
    while (i < elements.length) {
        if (elements[i].getAttrribute('id') == idElement) return elements[i];
        i++;
    }
    return null;
}

function recupererNumeroPropositionInput() {
    var nom = "numeroProposition";
    var inputs = document.getElementsByTagName('INPUT');
    var i = 0;
    while (i < inputs.length) {
        var rep = inputs[i];
        if (rep.name == nom) {
            return rep.value;
        }
        i++
    }
    //alert("Le numéro de proposition n'existe pas");
    return "";
}

//Méthode appelée avant la validation du groupe tarif, l'argument est la donnee à tester pour s'assurer qu'un tarif a été choisi.
function validerTarif() {
    var tarif = recupereInputReponse("ChoixTarif");
    var tarifSelectionne = false;

    for (i = 0; i < tarif.length; i++) {
        if (tarif[i].checked)
            tarifSelectionne = true;
    }

    // teste si on a choisi autre chose qu'enregistrer une simulation sans avoir selectionner de tarif
    if (!tarifSelectionne) {
        alert("Choisissez un tarif");
    }
    else {
        valider();
    }
}


//Methodes dédiées à  la gestion de l'abandon premier contact, une varible (input hidden) retient si il faut considérer qu'un unload du questionnaire sera un abandon.
function initAbandonQuestionnaire() {
    document.forms["form1"].elements.abandonQuestionnaire.value = 'true';
}


/******************************************************/
/*********************Conditionnels********************/
/******************************************************/


//Evalue une condition booléenne de la forme motclé,argument1,argument2,....
function evaluerCondition(condition) {
    var visibleFinale = true;
    var tabArguments = condition.split(',');
    switch (tabArguments[0]) {
        case "true":
            return true;
            break
        case "false":
            return false;
            break;
        case "siExiste":
            if (document.getElementById(tabArguments[1]) == null) visibleFinale = false;
            else visibleFinale = true;
            break;
        case "siRemplie":
            var j = 1;
            while (j < tabArguments.length) {
                visibleFinale = visibleConditionExisteSaisie(tabArguments[j]);
                j++;
            }
            break;
        case "siVisible":
            var j = 1;
            while (j < tabArguments.length) {
                visibleFinale = visibleConditionAffichee(tabArguments[j]);
                j++;
            }
            break;
        case "siConditionValide":
            var test = tabArguments[1] + "" + tabArguments[2] + "" + tabArguments[3];
            try {
                //alert(test);
                visibleFinale = eval(test);
                //alert(tabArguments[1]+" "+tabArguments[2]+" "+tabArguments[3]+" donne "+visibleFinale);

            }
            catch (Exception) { visibleFinale = false; }
            break;
    }
    if (visibleFinale == null) return false;

    return visibleFinale;
}


//Test si la question est visible
function visibleConditionAffichee(nomQuestionSource) {
    var style = document.getElementById(nomQuestionSource).getAttribute("style");
    return !(style.indexOf("display: none") >= 0);
}

//Test si la question a été remplie (grace a l'attribut estRemplie calculé par le xsl)
function visibleConditionExisteSaisie(nomQuestionSource) {
    var reponse = recupereReponse(nomQuestionSource);
    return estRemplie(reponse);
}

function estRemplie(reponse) {
    if (reponse == null) return false;
    return (reponse.getAttribute("saisie") == 'remplie');
}

/******************************************************/
/*******************Initialisation*********************/
/******************************************************/

//Détermine la visiblilité du bloc idBloc
function initVisibleBloc(idBloc) {
    var dynActive = document.forms["form1"].elements.dynActive.value;
    if (dynActive != 'false') {
        if ((bloc.getAttribute('conditionVisibilite') == "") || (eval(bloc.getAttribute('conditionVisibilite')))) afficheBloc(bloc.getAttribute('id'));
        else cacheBloc(bloc.getAttribute('id'));
    }
}

//Détermine la visibilité des blocs, dynActive est utilisé pour désactiver ce processus
function initVisibleBlocs() {
    var dynActive = document.getElementById("dynActive");
    if ((dynActive == null) || (dynActive.value != 'false')) {
        var tableau = recupereBlocs();
        for (k = 0; k < tableau.length; k++) {
            var bloc = tableau[k];
            if ((bloc.getAttribute("conditionVisibilite") == "") || (eval(bloc.getAttribute("conditionVisibilite")))) afficheBloc(bloc.getAttribute('id'));
            else cacheBloc(bloc.getAttribute('id'));
        }
    }
}

//Détermine la visibilité des questions 
function initVisibleQuestions() {
    var dynActive = document.getElementById("dynActive");
    if ((dynActive == null) || (dynActive.value != 'false')) {
        var tableau = recupereQuestions();
        for (k = 0; k < tableau.length; k++) {
            var question = tableau[k];
            if ((question.getAttribute("conditionVisibilite") == "") || (eval(question.getAttribute("conditionVisibilite")))) afficheQuestionComplete(question.getAttribute('id'));
            else cacheQuestion(question.getAttribute('id'));
        }
    }
}

// coche france lorsque unique est choisi
// prend en parametre la valeur de la radioBox StationnementUniqueMultiple
function cocheFrance(val) {
    if (val == "unique") {
        document.getElementsByName('reponseStationnementTravailFranceOuPaysFrontaliers')[1].checked = true;
    }
}

// affiche et cache les questions selon ce que coche l'utilisateur (voir cdc pour voir le comportement)
// prend en parametre la valeur de la radioBox StationnementUniqueMultiple
function afficheLieuxTravail(val) {
    var paysStationnement = document.getElementsByName('reponseStationnementTravailFranceOuPaysFrontaliers');
    if (val == "unique") {
        afficheQuestionComplete('StationnementTravailFranceOuPaysFrontaliers');

        if (paysStationnement[1].checked) {
            afficheQuestionComplete('StationnementTravail');
            cacheQuestion('StationnementTravailFrontalier');
        }
        else {
            afficheQuestionComplete('StationnementTravailFrontalier');
            cacheQuestion('StationnementTravail');
        }
    }
    else {
        cacheQuestion('StationnementTravailFranceOuPaysFrontaliers');
        cacheQuestion('StationnementTravail');
        cacheQuestion('StationnementTravailFrontalier');
    }
}

/******************************************************/
/******************Utilitaires Divers******************/
/******************************************************/


//Vérifie la date donnée et la convertit dans le bon format.
//Noeud parent n'est pas utilisé sous IE
function valideCoherenceBornesDate(date, noeudParent) {
    var pattern = "\.+ ([0-9]+) \.+ ([0-9])+";
    var reg = new RegExp("\.+ ([0-9]+) \.+ ([0-9]+)");
    match = reg.exec(date);
    if (match[1] == match[2]) { nouvelleDate = match[1]; }
    else if ((match[2] == '0') || (match[2] == '9999')) { nouvelleDate = "Depuis " + match[1]; }
    else nouvelleDate = date;
    return nouvelleDate;
}

function valideCoherenceBornesDateAjax(date) {
    var pattern = "\.+ ([0-9]+) \.+ ([0-9])+";
    var reg = new RegExp("\.+ ([0-9]+) \.+ ([0-9]+)");
    match = reg.exec(date);
    var nouvelleDate = new String();
    if (match[1] == match[2]) {
        nouvelleDate = match[1];
    }
    else if ((match[2] == '0') || (match[2] == '9999')) {
        nouvelleDate = "Depuis " + match[1];
    }
    else
        nouvelleDate = date;
    return nouvelleDate;
}

//transforme le crm recu par le metier pour prendre 2 decimales
function transformeCRM(inCRM) {
    inCRM = inCRM.replace(",", ".");
    if (inCRM == "" || isNaN(inCRM)) {
        return "1.00";
    }

    //on ne prend que 2 chiffres significatifs
    var crmTemp = "" + Math.round(100 * inCRM) / 100;

    if (crmTemp.indexOf(".") == -1) { crmTemp += "." }

    crmTemp += "00";
    var positionPoint = crmTemp.indexOf(".");
    return crmTemp.substring(0, positionPoint) + "." + crmTemp.substr(positionPoint + 1, 2);
}

//selectionne le CRM envoye par le metier
function selectionneCRM(inCRM, inNbAnnees50, idQuestion) {
    crmRendu = transformeCRM(inCRM);
    if (crmRendu == "0.50") {
        crmRendu += inNbAnnees50;
    }
    inscrireValeur(idQuestion, crmRendu);
}

//Modifie la valeur de la reponse idReponse
function inscrireValeur(idReponse, valeur) {
    var rep = recupereInputReponse(idReponse);

    if (rep == null) return;

    if (rep instanceof Array && rep.length >= 1) {
        var i = 0;
        while (i < rep.length) {
            if (rep[i].value == valeur) {
                rep[i].checked = true;
                return;
            }
            i++;
        }
    }
    rep.value = valeur;
}

//Vide la valeur saisie pour une question
function viderValeur(idQuestion) {
    var rep = recupereInputReponse(idQuestion);
    if (rep.type == 'listbox' || rep.type == 'select-one') {
        rep.options[0].selected = 'true';
    }
    else {
        rep.value = '';
    }
}

//Vide toutes les valeurs saisies pour une question
function viderToutesValeurs(idQuestion) {
    var rep = recupereToutesInputReponses(idQuestion);

    if (rep && rep instanceof Array) {
        for (index = 0; index < rep.length; index++) {
            switch (rep[index].type) {
                case 'listbox':
                case 'select-one':
                    rep[index].options[0].selected = 'true';
                    break;
                case 'radio':
                    rep[index].checked = false;
                    break;
                case 'text':
                    rep[index].value = '';
                    break;
                default:
                    break;
            }
        }
    }
}

//Renvoie l'id du groupe precedent
function groupePrecedent() {
    return document.forms["form1"].groupePrecedent;
}

//Test si la question nomQuestion existe dans la page
function questionExiste(nomQuestion) {
    try {
        document.getElementById(nomQuestion).innerHTML;
        return true;
    }
    catch (Exception) { return false; }
}

//Convertit un montant de euros vers francs (n'est plus utilisé)
function convertirFrancs(euros) {
    var nombre = Math.round(euros * 6.55957 * 100) / 100;
    return nombre;
}

//Méthode d'appel de la fonction eval de Javascript
function calcule(expr) {
    var nombre = eval(expr);
    return nombre;
}

//ouvre une popup avec un certain nombre d'arguments : 
// theUrl est l'url de la page
// WinName est le titre de la page
// features permet d'ajouter des arguments comme noresize ou scrollbars
// myWidth est la largeur souhaitée pour la fenetre
// myHeight est la hauteur souhaitée pour la page 
// isCenter determine si la page est centrée ou  non 
function OpenWindow(theURL, winName, features, myWidth, myHeight, isCenter) {
    if (window.screen) {
        if (isCenter) {
            var myLeft = (screen.width - myWidth) / 2;
            var myTop = (screen.height - myHeight) / 2;
            features += (features != '') ? ',' : '';
            if (features != 'scrollbars=0,') features += ',scrollbars=1';
            features += ',left=' + myLeft + ',top=' + myTop;
        }
    }
    var mywindow = window.open(theURL, winName, features + ((features != '') ? ',' : '') + 'width=' + myWidth + ',height=' + myHeight);


}

function OpenWindowReturn(theURL, winName, features, myWidth, myHeight, isCenter) {
    if (window.screen) {
        if (isCenter) {
            var myLeft = (screen.width - myWidth) / 2;
            var myTop = (screen.height - myHeight) / 2;
            features += (features != '') ? ',' : '';
            if (features != 'scrollbars=0,') features += ',scrollbars=1';
            features += ',left=' + myLeft + ',top=' + myTop;
        }
    }
    var mywindow = window.open(theURL, winName, features + ((features != '') ? ',' : '') + 'width=' + myWidth + ',height=' + myHeight);
    return mywindow;
}

//Modifie la couleur de la question nomQuestion 
function flasheQuestion(nomQuestion, couleur) {
    var question = document.getElementById("intitule" + nomQuestion);
    if (question != null) {
        question.style.color = couleur;
    }
}


//La date au format jj//mm//AAAA est elle plus récente que la date2
function compareDates(date1, date2) {
    var tab1 = date1.split('/');
    var tab2 = date2.split('/');
    if (tab1[2] == tab2[2]) {
        if (tab1[1] == tab2[1]) {
            return (tab1[0] > tab2[0]);
        }
        else return (tab1[1] > tab2[1]);
    }
    else return (tab1[2] > tab2[2]);
}


function nombrePortes(donnee, noeudParent) {
    var portes = new String();
    portes = donnee;
    var nombre = portes.charAt(portes.length - 1);
    if (isInteger(nombre)) portes = nombre;
    else portes = 'NC';

    texteConditionnel('true', portes, noeudParent);
}

// retourne le texte directement
function nombresPortesAjax(donnee) {
    var portes = new String();
    portes = donnee;
    var nombre = portes.charAt(portes.length - 1);
    if (isInteger(nombre)) portes = nombre;
    else portes = 'NC';
    return portes;
}

//Formate une immatriculation de véhicule (expressions régulières)
function formatImmat(immat) {
    var sep = "[ \\-]";
    var exp1 = "(^[0-9]{3}((" + sep + "?[a-zA-Z])|([0-9]" + sep + "?))[a-zA-Z]{2}" + sep + "?[0-9][a-zA-Z]$)"; //999 XXX 9X;9999 XX 9X
    var exp2 = "(^[0-9][0-9][0-9]?[0-9]?" + sep + "?[a-zA-Z]{2}" + sep + "?[0-9]{2}$)"; //9999 XX 99;999 XX 99;99 XX 99
    var exp3 = "(^[0-9][0-9][0-9]?[0-9]?" + sep + "?[a-zA-Z]{3}" + sep + "?[0-9]{2}$)"; //999 XXX 99;99 XXX 99 9999 XXX 99
    var exp4 = "(^[a-zA-Z]{2}" + sep + "?[0-9]{3}" + sep + "?[a-zA-Z]{2}$)"; //AA 999 AA = Immatriculation europeenne
    var pattern = exp1 + "|" + exp2 + "|" + exp3 + "|" + exp4;
    var reg = new RegExp(pattern);
    if (!immat.match(reg)) immat = "";
    return immat;
}

/*
**** Les fonctions suivantes formate la date strdate en une une date au format JJ/MM/AAAA ou MM/AAAA ou AAAA ****
*/
function JJMMAAAA(strdate) {
    var jour, mois, annee;
    var chaine;
    var i, len;

    // teste si la chaine existe
    len = strdate.length;
    if (len == 0) { return ""; }

    //positionnement sur le premier chiffre
    i = 0;
    while (((strdate.charAt(i) < '0') || (strdate.charAt(i) > '9')) && (++i < len)) { }
    if (i == len) { return ""; }

    // extraction du jour
    chaine = "";
    jour = 0;
    while ((strdate.charAt(i) >= '0') && (strdate.charAt(i) <= '9')) {
        chaine += strdate.charAt(i);
        jour = jour * 10 + eval(strdate.charAt(i), 10);
        i++;
        if (i >= len) break;
    }

    if ((jour > 31) || (jour == 0)) {
        if ((chaine.length == 6) || (chaine.length == 8)) {
            //forme jjmmaa ou jjmmaaaa
            jour = eval(chaine.charAt(0), 10) * 10 + eval(chaine.charAt(1), 10);
            mois = eval(chaine.charAt(2), 10) * 10 + eval(chaine.charAt(3), 10);
            annee = eval(chaine.charAt(4), 10) * 10 + eval(chaine.charAt(5), 10);
            if (chaine.length == 8) {
                annee = annee * 100 + eval(chaine.charAt(6), 10) * 10 + eval(chaine.charAt(7), 10);
            }
            if ((jour > 31) || (jour == 0) || (mois > 12) || (mois == 0)) { return ""; }
        }
        else { return ""; }
    }
    else {

        //positionnement sur le deuxieme chiffre
        while (((strdate.charAt(i) < '1') || (strdate.charAt(i) > '9')) && (++i < len)) { }
        if (i == len) { return ""; }

        // extraction du mois
        mois = 0;
        while ((strdate.charAt(i) >= '0') && (strdate.charAt(i) <= '9')) {
            mois = mois * 10 + eval(strdate.charAt(i), 10);
            i++;
            if (i >= len) break;
        }
        if ((mois > 12) || (mois == 0)) { return ""; }

        //positionnement sur le troisieme chiffre
        while (((strdate.charAt(i) < '0') || (strdate.charAt(i) > '9')) && (++i < len)) { }
        if (i == len) { return ""; }

        // extraction de l'année
        annee = 0;
        while ((strdate.charAt(i) >= '0') && (strdate.charAt(i) <= '9')) {
            annee = annee * 10 + eval(strdate.charAt(i), 10);
            i++;
            if (i >= len) break;
        }
    }

    // fenêtrage
    if (annee < 15) {
        annee += 2000;
    }
    if (annee < 100) {
        annee += 1900;
    }

    var jourbis, moisbis;
    jourbis = "" + eval(jour);
    moisbis = "" + eval(mois);

    if (jourbis.length < 2) {
        jourbis = "0" + eval(jour);
    }

    if (moisbis.length < 2) {
        moisbis = "0" + eval(mois);
    }

    //return	(annee>9999) ? "" : "" + jourbis + "/" + moisbis + "/" + annee;
    if (annee > 9999) {
        return "";
    }
    else {
        return "" + jourbis + "/" + moisbis + "/" + annee;
    }
}

function MMAAAA(strdate) {
    var mois, annee;
    var chaine;
    var i, len;

    // teste si la chaine existe
    len = strdate.length;
    if (len == 0) { return ""; }

    //positionnement sur le premier chiffre
    i = 0;
    while (((strdate.charAt(i) < '0') || (strdate.charAt(i) > '9')) && (++i < len)) { }
    if (i == len) { return ""; }

    // extraction du mois
    chaine = "";
    mois = 0;
    while ((strdate.charAt(i) >= '0') && (strdate.charAt(i) <= '9')) {
        chaine += strdate.charAt(i);
        mois = mois * 10 + eval(strdate.charAt(i), 10);
        i++;
        if (i >= len) break;
    }

    if ((mois > 12) || (mois == 0)) {
        if ((chaine.length == 4) || (chaine.length == 6)) {
            //forme mmaa ou mmaaaa
            mois = eval(chaine.charAt(0), 10) * 10 + eval(chaine.charAt(1), 10);
            annee = eval(chaine.charAt(2), 10) * 10 + eval(chaine.charAt(3), 10);
            if (chaine.length == 6) {
                annee = annee * 100 + eval(chaine.charAt(4), 10) * 10 + eval(chaine.charAt(5), 10);
            }
            if ((mois > 12) || (mois == 0)) { return ""; }
        }
        else { return ""; }
    }
    else {

        //positionnement sur le deuxieme chiffre
        while (((strdate.charAt(i) < '0') || (strdate.charAt(i) > '9')) && (++i < len)) { }
        if (i == len) { return ""; }

        // extraction de l'année
        annee = 0;
        while ((strdate.charAt(i) >= '0') && (strdate.charAt(i) <= '9')) {
            annee = annee * 10 + eval(strdate.charAt(i), 10);
            i++;
            if (i >= len) break;
        }
    }

    // fenêtrage
    if (annee < 15) {
        annee += 2000;
    }
    if (annee < 100) {
        annee += 1900;
    }
    mois += "";
    if (mois.length < 2) mois = "0" + mois;
    return "" + mois + "/" + annee;
}

function AAAA(strdate) {
    var annee;
    var i, len;

    // teste si la chaine existe
    len = strdate.length;
    if (len == 0) { return ""; }

    //positionnement sur le premier chiffre
    i = 0;
    while (((strdate.charAt(i) < '0') || (strdate.charAt(i) > '9')) && (++i < len)) { }
    if (i == len) { return ""; }

    // extraction de l'année
    annee = 0;
    while ((strdate.charAt(i) >= '0') && (strdate.charAt(i) <= '9')) {
        annee = annee * 10 + eval(strdate.charAt(i), 10);
        i++;
        if (i >= len) break;
    }

    // fenêtrage
    if (annee < 15) {
        annee += 2000;
    }
    if (annee < 100) {
        annee += 1900;
    }

    return "" + annee;
}


function JJMM(strdate) {
    var i, lenDate, lenJourMois, j;
    var jourMois = new String();
    var num;

    var jours = "vide";
    var mois = "vide";

    lenDate = strdate.length;
    if (lenDate < 2) { return ""; }

    var splitDate = strdate.split('/');
    if (splitDate.length > 1) {
        jours = splitDate[0];
        mois = splitDate[1];
    }
    else {
        splitDate = strdate.split('-');
        if (splitDate.length > 1) {
            jours = splitDate[0];
            mois = splitDate[1];
        }
    }

    if (isDigit(jours) && isDigit(mois)) {
        jourMois = jours + mois;
    }
    else {
        i = 0;
        while (i < lenDate) {
            num = strdate.substr(i, 1)
            if (isDigit(num)) {
                jourMois += num;
            }
            i = i + 1;
        }
    }

    lenJourMois = jourMois.length;
    if (lenJourMois < 2) { return ""; }
    if (lenJourMois > 4) {
        jourMois = jourMois.substr(0, 4);
    }
    lenJourMois = lenJourMois * 2;
    switch (lenJourMois) {
        case 4:
            {
                jours = "0" + jourMois.substr(0, 1);
                mois = "0" + jourMois.substr(1, 1);
                break;
            }
        case 6:
            {
                jours = "0" + jourMois.substr(0, 1);
                mois = jourMois.substr(1, 2);
                break;
            }
        case 8:
            {
                jours = jourMois.substr(0, 2);
                mois = jourMois.substr(2, 2);
                break;
            }
        default:
            {
                return "";
            }
    }

    var regMois = new RegExp("0[1-9]|1[0-2]");
    var regJours = new RegExp("0[1-9]|1[0-9]|2[0-9]|3[0-1]");
    var match;

    match = regMois.exec(mois);
    if (match != null) {
        match = regJours.exec(jours);
        if (match != null) {
            return jours + "/" + mois;
        }
    }
    return "";
}


function sortTableFacade(id, nomColonne, rev) {
    //attention: si on modifie l'id des colonnes, il faut modifier egalementt la fonction comparerValeurs
    var idCol;
    if (nomColonne == "modele") idcol = 1;
    if (nomColonne == "puissance") idcol = 2;
    if (nomColonne == "portes") idcol = 3;
    if (nomColonne == "annee") idcol = 4;
    if (nomColonne == "type") idcol = 5;

    var lignesIgnorees = 1; //Indique le nombre de lignes de l'en tête exclue du tri
    sortTable(id, idcol, rev, lignesIgnorees);

}

//id  est l'id de l'element TABLE, TBODY, THEAD ou TFOOT à trier.
//col est l'indice de la colonne à trier, 0 = premiere colonne, 1 = 2e colonne, etc.
//rev est utilisé pour trier ou non le tableau dans l'ordre décroissant
//lignesIgnorees est le nombre de lignes exclues du tri (les premières lignes)

//ATTENTION: ne pas livrer cette fonction pour XMLBNPPWebAuto
function sortTable(id, col, rev, lignesIgnorees) {
    if (document.ELEMENT_NODE == null) {
        document.ELEMENT_NODE = 1;
        document.TEXT_NODE = 3;
    }

    var tblEl = document.getElementById(id);

    if (tblEl.reverseSort == null) {
        tblEl.reverseSort = new Array();
        tblEl.lastColumn = 1;
    }

    if (tblEl.reverseSort[col] == null)
        tblEl.reverseSort[col] = rev;

    if (col == tblEl.lastColumn)
        tblEl.reverseSort[col] = !tblEl.reverseSort[col];

    tblEl.lastColumn = col;

    var oldDsply = tblEl.style.display;
    tblEl.style.display = "none";

    var i, j;
    var minVal, minIdx;
    var testVal;
    var cmp;

    for (i = lignesIgnorees; i < tblEl.rows.length - 1; i++) {
        minIdx = i;
        minVal = getTextValue(tblEl.rows[i].cells[col]);

        for (j = i + 1; j < tblEl.rows.length; j++) {
            testVal = getTextValue(tblEl.rows[j].cells[col]);
            cmp = comparerValeurs(minVal, testVal, col);
            if (tblEl.reverseSort[col])
                cmp = -cmp;
            if (cmp == 0 && col != 1)
                cmp = comparerValeurs(getTextValue(tblEl.rows[minIdx].cells[1]),
									getTextValue(tblEl.rows[j].cells[1]), col);
            if (cmp > 0) {
                minIdx = j;
                minVal = testVal;
            }
        }

        if (minIdx > i) {
            var tmpRowIn = tblEl.insertRow(i);
            for (z = 0; z < tblEl.rows[minIdx + 1].cells.length; z++) {
                var noeudCopie = document.getElementById(tblEl.rows[minIdx + 1].cells[z].id).cloneNode(true);
                tmpRowIn.appendChild(noeudCopie);
            }

            tblEl.deleteRow(minIdx + 1);
        }
    }
    tblEl.style.display = oldDsply;

    return false;
}

function getTextValue(el) {
    var i;
    var s;

    s = "";
    for (i = 0; i < el.childNodes.length; i++) {
        if (el.childNodes[i].nodeType == document.TEXT_NODE)
            s += el.childNodes[i].nodeValue;
        else if (el.childNodes[i].nodeType == document.ELEMENT_NODE &&
			(el.childNodes[i].tagName == "BR" || el.childNodes[i].tagName == "SCRIPT"))
            s += " ";
        else
            s += getTextValue(el.childNodes[i]);
    }
    return normalizeString(s);
}

function compareValues(v1, v2) {
    if (v1 == v2)
        return 0;
    if (v1 > v2)
        return 1
    return -1;
}

//comparer les 2 valeurs pour trier le tableau
function comparerValeurs(v1, v2, idColonne) {
    if (v1 == v2)
        return 0;

    switch (idColonne) {
        //colonne puissance 
        case 2:
            //il faut virer les lettres CV et les espaces
            v1 = v1.toUpperCase();
            v1 = v1.replace("CV", "");
            v1 = v1.replace(whtSpEnds, "");
            if (!isNaN(v1)) {
                v1 = parseInt(v1);
            }

            v2 = v2.toUpperCase();
            v2 = v2.replace("CV", "");
            v2 = v2.replace(whtSpEnds, "");
            if (!isNaN(v2)) {
                v2 = parseInt(v2);
            }
            break;
        //colonne annee de fabrication 
        case 4:
            //on compare que l'annee de debut de fabrication
            //il faut virer les lettres DEPUIS, DE et les espaces
            v1 = v1.toUpperCase();
            v1 = v1.replace("DEPUIS", "");
            v1 = v1.replace("DE", "");
            v1 = v1.replace(whtSpEnds, "");
            v1 = v1.substr(0, 4);
            if (!isNaN(v1)) {
                v1 = parseInt(v1);
            }

            v2 = v2.toUpperCase();
            v2 = v2.replace("DEPUIS", "");
            v2 = v2.replace("DE", "");
            v2 = v2.replace(whtSpEnds, "");
            v2 = v2.substr(0, 4);
            if (!isNaN(v2)) {
                v2 = parseInt(v2);
            }
            break;
    }

    if (v1 > v2)
        return 1
    return -1;
}

var whtSpEnds = new RegExp("^\\s*|\\s*$", "g");
var whtSpMult = new RegExp("\\s\\s+", "g");

function normalizeString(s) {

    s = s.replace(whtSpMult, " ");
    s = s.replace(whtSpEnds, "");

    return s;
}


//Cette méthode va renvoyer le code d'un symbole à partir de son nom (ex : euro ==> &#8364;
function renvoieSymbole(condition, nomSymbole, noeudParent) {
    var symbole = "";
    switch (nomSymbole) {
        case "euro":
            symbole = "&#8364;";
            break;
    }
    texteConditionnel(condition, symbole, noeudParent);
}

//Vérifie si la val en entrée est null ou ne contient aucun caractère (hors \t \n \r et espaces)
function isBlank(val) {
    if (val == null) { return true; }
    for (var i = 0; i < val.length; i++) {
        if ((val.charAt(i) != ' ') && (val.charAt(i) != "\t") && (val.charAt(i) != "\n") && (val.charAt(i) != "\r")) { return false; }
    }
    return true;
}

//Vérifie si val est un entier
function isInteger(val) {
    if (isBlank(val)) { return false; }
    for (var i = 0; i < val.length; i++) {
        if (!isDigit(val.charAt(i))) { return false; }
    }
    return true;
}
//Vérifie si num est un chiffre (1, 2....Mais pas 12....Ou encore 43266)
function isDigit(num) {
    if (num.length > 1) { return false; }
    var string = "1234567890";
    if (string.indexOf(num) != -1) { return true; }
    return false;
}

//Vérifie si val est un nombre flottant
//On accepte les nombres de la forme x,y (en plus de x.y)
function isNumeric(val) {
    var val2 = new String();
    val2 = val;
    val2 = val2.replace(",", ".");
    return (parseFloat(val2, 10) == (val2 * 1));
}

//Vérifie si le Crm est compris entre 0.5 et 3.5
//Par exemple 132 n'est pas compris entre 0.5 et 3.5, donc la méthode renvoie false.
//De même 0.4 renvoie false, comme 812 d'ailleurs. 
//Mais pas 1.2
function crmValide(crm) {
    var val = new String();
    val = crm;
    val = val.replace(",", ".");
    return (((val * 1) <= 3.5) && ((val * 1) >= 0.5));
}

//Formate le CRM en X.XX alors que le crm peut ressembler à XXX ou X,X et contrôle si celui-ci est compris entre 0,5 et 3,5
function formateCRM(crm) {
    var crmFormate = formateCRMbis(crm);
    if (crmValide(crmFormate)) return crmFormate;
    else return "";
}

//Formate le CRM en X.XX alors que le crm peut ressembler à XXX ou X,X
function formateCRMbis(crm) {
    var crm2 = new String(crm);
    if (crm2.length == 0) return '';
    //Si le crm contient une virgule ou un point, on considère qu'il n'y a rien à faire
    if ((crm2.indexOf(',') > 0) || (crm2.indexOf('.') > 0)) return crm.replace(",", ".");
    else if (crm2.length > 1) {
        if (crm2.length == 2) return "0." + crm2; //80 ==> 0.80
        else return crm2.charAt(0) + "." + crm2.substr(1, crm2.length - 1); //060 ==> 0.60
    }
    else return crm;
}

//Vérifie si entier est compris entre les deux bornes en paramètres
function bornesEntier(entier, borneMin, borneMax) {
    return ((entier <= borneMax) && (entier >= borneMin));
}

//positionner la liste des carrosseries avant la liste des carburants
function DeplacerListeCarrosseries() {
    var noeudCarburant = document.getElementById('CarburantAvantReponse');
    var noeudCarrosserie = document.getElementById('TypeCarrosserie');
    var noeudCarrosserieAvantReponse = document.getElementById('TypeCarrosserieAvantReponse');
    var noeudCarrosserieApresReponse = document.getElementById('TypeCarrosserieApresReponse');
    var noeudBlocCaracteristiquesVoiture = document.getElementById('blocCaracteristiquesVoiture');

    if (noeudCarburant && noeudCarrosserie && noeudCarrosserieAvantReponse && noeudCarrosserieApresReponse && noeudBlocCaracteristiquesVoiture) {
        noeudBlocCaracteristiquesVoiture.rows[0].cells[0].insertBefore(noeudCarrosserieApresReponse, noeudCarburant);
        noeudBlocCaracteristiquesVoiture.rows[0].cells[0].insertBefore(noeudCarrosserie, noeudCarrosserieApresReponse);
        noeudBlocCaracteristiquesVoiture.rows[0].cells[0].insertBefore(noeudCarrosserieAvantReponse, noeudCarrosserie);
    }
}

//mettre en gras l'option 'autres marques'
function ModifierStyleAutresMarques() {
    var listeMarques;
    var toutesSelects = document.getElementsByTagName('SELECT');
    //recuperer la liste des marques. On fait une boucle car ya 2 elem pour le meme id 'reponseMarqueVoiture'
    for (index = 0; index < toutesSelects.length; index++) {
        if (toutesSelects[index].name == 'reponseMarqueVoiture') {
            listeMarques = toutesSelects[index];
            break;
        }
    }

    for (index = 0; index < listeMarques.length; index++) {
        if (listeMarques[index].getAttribute('value') == 'CodeListeMarquesEtendue') {
            listeMarques[index].className = 'gras';
        }
    }
}

function CacherImageAide(idImgAide) {
    if (document.getElementById(idImgAide)) {
        document.getElementById(idImgAide).style.display = 'none';
    }
}

function AfficherAbandonTarif(idContrat, partenaire) {
    if (document.forms["form1"].elements.abandonQuestionnaire.value == 'true') {
        var cleRemote = document.forms["form1"].elements.idSession.value;
        var fen = OpenWindowReturn('abandonTarif.aspx?cleRemote=' + cleRemote + '&idContrat=' + idContrat + '&partenaire=' + partenaire + '&homePage=' + escape(window.top.location.href), 'info', '', '650', '450', '');
    }
}

//certains boutons ne sont visibles que pour les partenaires
//(bouton Annuler sur le groupe RevoirSimulation et Precedent sur le groupe DemarrageQuestionnaire)
function RendreBoutonInvisible(idPartenaire, idBouton) {
    var partenaire = idPartenaire.toLowerCase();
    if (partenaire.indexOf('lacentrale') == -1 && partenaire.indexOf('321auto') == -1 &&
			partenaire.indexOf('soa') == -1) {
        if (document.getElementById(idBouton)) {
            document.getElementById(idBouton).style.display = 'none';
        }
    }
}


// Execute une méthode
function executerMethode(idMethode) {
    attente();
    testSecurite("securiserGroupe");
    document.forms["form1"].elements.abandonQuestionnaire.value = 'false';
    document.forms["form1"].elements.commande.value = 'executerMethode;' + idMethode;
    document.forms["form1"].submit();
}



// fonction qui met a checked le tarif qui a été selectionné lorsque l'on recharge une simulation par exemple.
function selectionnerTarifChoisi(ChoixTarif) 
{
    if ((ChoixTarif != null) && (ChoixTarif != '')) 
    {
        var tarif = recupereInputReponse("ChoixTarif");
        if (tarif != null) 
        {
            for (i = 0; i < tarif.length; i++) 
            {
                if (tarif[i].value == ChoixTarif) 
                {
                    tarif[i].checked = true;
                }

            }
        }
    }
}

//vider les infos complemenatires saisies pour le 1er bloc Accident Responsable
function ViderInfoComplementaireAccidentResponsable1() {
    viderValeur('DateDeclarationAccidentResponsable1');
    viderValeur('NombreVehiculesImpliquesAccidentResponsable1');
    viderValeur('PartResponsabiliteAccidentResponsable1');
    if (questionExiste('VehiculeConcerneAccidentResponsable1')) viderValeur('VehiculeConcerneAccidentResponsable1');
    if (questionExiste('VehiculeConcerneAccidentResponsableRemplace1')) viderValeur('VehiculeConcerneAccidentResponsableRemplace1');
    viderValeur('PresenceBlessesAccidentResponsable1');
    viderValeur('ConducteurImpliqueAccidentResponsable1');
}

//vider les infos complemenatires saisies pour le 2e bloc Accident Responsable
function ViderInfoComplementaireAccidentResponsable2() {
    viderValeur('DateDeclarationAccidentResponsable2');
    viderValeur('NombreVehiculesImpliquesAccidentResponsable2');
    viderValeur('PartResponsabiliteAccidentResponsable2');
    if (questionExiste('VehiculeConcerneAccidentResponsable2')) viderValeur('VehiculeConcerneAccidentResponsable2');
    if (questionExiste('VehiculeConcerneAccidentResponsableRemplace2')) viderValeur('VehiculeConcerneAccidentResponsableRemplace2');
    viderValeur('PresenceBlessesAccidentResponsable2');
    viderValeur('ConducteurImpliqueAccidentResponsable2');
}

//vider les infos complemenatires saisies pour le 1er bloc Accident Non Responsable
function ViderInfoComplementaireAccidentNonResponsable1() {
    viderValeur('DateDeclarationAccidentNonResponsable1');
    viderValeur('NombreVehiculesImpliquesAccidentNonResponsable1');
    if (questionExiste('VehiculeConcerneAccidentNonResponsable1')) viderValeur('VehiculeConcerneAccidentNonResponsable1');
    if (questionExiste('VehiculeConcerneAccidentNonResponsableRemplace1')) viderValeur('VehiculeConcerneAccidentNonResponsableRemplace1');
    viderValeur('PresenceBlessesAccidentNonResponsable1');
    viderValeur('ConducteurImpliqueAccidentNonResponsable1');
}

//vider les infos complemenatires saisies pour le 2e bloc Accident Non Responsable
function ViderInfoComplementaireAccidentNonResponsable2() {
    viderValeur('DateDeclarationAccidentNonResponsable2');
    viderValeur('NombreVehiculesImpliquesAccidentNonResponsable2');
    if (questionExiste('VehiculeConcerneAccidentNonResponsable2')) viderValeur('VehiculeConcerneAccidentNonResponsable2');
    if (questionExiste('VehiculeConcerneAccidentNonResponsableRemplace2')) viderValeur('VehiculeConcerneAccidentNonResponsableRemplace2');
    viderValeur('PresenceBlessesAccidentNonResponsable2');
    viderValeur('ConducteurImpliqueAccidentNonResponsable2');
}

//Verifie le nombre d'accidents responsables declares
//Afficher/Cacher des infos complementaires en fonction du nombre declare
function VerifierNombreAccidentsResponsables(nombreDeclare) {
    afficheSiCond('DateDeclarationAccidentResponsable1', '( (' + nombreDeclare + ' == 2 ) || (' + nombreDeclare + ' == 1 ))');
    afficheSiCond('NombreVehiculesImpliquesAccidentResponsable1', '( (' + nombreDeclare + ' == 2 ) || (' + nombreDeclare + ' == 1 ))');
    afficheSiCond('PartResponsabiliteAccidentResponsable1', '( (' + nombreDeclare + ' == 2 ) || (' + nombreDeclare + ' == 1 ))');

    afficheSiCond('VehiculeConcerneAccidentResponsable1', '( (' + nombreDeclare + ' == 2 ) || (' + nombreDeclare + ' == 1 ))');

    afficheSiCond('VehiculeConcerneAccidentResponsableRemplace1', '( (' + nombreDeclare + ' == 2 ) || (' + nombreDeclare + ' == 1 ))');
    afficheSiCond('PresenceBlessesAccidentResponsable1', '( (' + nombreDeclare + ' == 2 ) || (' + nombreDeclare + ' == 1 ))');
    afficheSiCond('ConducteurImpliqueAccidentResponsable1', '( (' + nombreDeclare + ' == 2 ) || (' + nombreDeclare + ' == 1 ))');
    afficheSiCond('DateDeclarationAccidentResponsable2', ' (' + nombreDeclare + ' == 2 )');
    afficheSiCond('NombreVehiculesImpliquesAccidentResponsable2', ' (' + nombreDeclare + ' == 2 )');
    afficheSiCond('PartResponsabiliteAccidentResponsable2', ' (' + nombreDeclare + ' == 2 )');
    afficheSiCond('VehiculeConcerneAccidentResponsable2', ' (' + nombreDeclare + ' == 2 )');
    afficheSiCond('VehiculeConcerneAccidentResponsableRemplace2', ' (' + nombreDeclare + ' == 2 )');
    afficheSiCond('PresenceBlessesAccidentResponsable2', ' (' + nombreDeclare + ' == 2 )');
    afficheSiCond('ConducteurImpliqueAccidentResponsable2', ' (' + nombreDeclare + ' == 2 )');
    if (nombreDeclare < 2) {
        ViderInfoComplementaireAccidentResponsable2();
    }
    if (nombreDeclare < 1) {
        ViderInfoComplementaireAccidentResponsable1();
    }
    if (nombreDeclare >= 3) {
        ViderInfoComplementaireAccidentResponsable1();
        ViderInfoComplementaireAccidentResponsable2();
    }

    var spanNbreAccidents = document.getElementById('spanNombreAccidentsResponsable');
    if (spanNbreAccidents != null) {
        spanNbreAccidents.innerText = (nombreDeclare == 2) ? " 1er" : "";
    }
}

//Verifie le nombre d'accidents non responsables declares
//Afficher/Cacher des infos complementaires en fonction du nombre declare
function VerifierNombreAccidentsNonResponsables(nombreDeclare) {
    afficheSiCond('DateDeclarationAccidentNonResponsable1', '( (' + nombreDeclare + ' == 2 ) || (' + nombreDeclare + ' == 1 ))');
    afficheSiCond('NombreVehiculesImpliquesAccidentNonResponsable1', '( (' + nombreDeclare + ' == 2 ) || (' + nombreDeclare + ' == 1 ))');
    afficheSiCond('VehiculeConcerneAccidentNonResponsable1', '( (' + nombreDeclare + ' == 2 ) || (' + nombreDeclare + ' == 1 ))');
    afficheSiCond('VehiculeConcerneAccidentNonResponsableRemplace1', '( (' + nombreDeclare + ' == 2 ) || (' + nombreDeclare + ' == 1 ))');
    afficheSiCond('PresenceBlessesAccidentNonResponsable1', '( (' + nombreDeclare + ' == 2 ) || (' + nombreDeclare + ' == 1 ))');
    afficheSiCond('ConducteurImpliqueAccidentNonResponsable1', '( (' + nombreDeclare + ' == 2 ) || (' + nombreDeclare + ' == 1 ))');
    afficheSiCond('DateDeclarationAccidentNonResponsable2', ' (' + nombreDeclare + ' == 2 )');
    afficheSiCond('NombreVehiculesImpliquesAccidentNonResponsable2', ' (' + nombreDeclare + ' == 2 )');
    afficheSiCond('VehiculeConcerneAccidentNonResponsable2', ' (' + nombreDeclare + ' == 2 )');
    afficheSiCond('VehiculeConcerneAccidentNonResponsableRemplace2', ' (' + nombreDeclare + ' == 2 )');
    afficheSiCond('PresenceBlessesAccidentNonResponsable2', ' (' + nombreDeclare + ' == 2 )');
    afficheSiCond('ConducteurImpliqueAccidentNonResponsable2', ' (' + nombreDeclare + ' == 2 )');
    if (nombreDeclare < 2) {
        ViderInfoComplementaireAccidentNonResponsable2();
    }
    if (nombreDeclare < 1) {
        ViderInfoComplementaireAccidentNonResponsable1();
    }
    if (nombreDeclare >= 3) {
        ViderInfoComplementaireAccidentNonResponsable1();
        ViderInfoComplementaireAccidentNonResponsable2();
    }

    var spanNbreAccidents = document.getElementById('spanNombreAccidentsNonResponsable');
    if (spanNbreAccidents != null) {
        spanNbreAccidents.innerText = (nombreDeclare == 2) ? " 1er" : "";
    }
}

function Redirection(cleRemote) {
    //if (document.forms["form1"].elements.abandonQuestionnaire.value == 'true'){
    confirm("Voulez-vous vraiment quitter ?")
    {
        if (cleRemote != null && cleRemote != "") {
            OpenWindowReturn('abandonPremierContact.aspx?cleRemote=' + cleRemote, 'Abandon', 'left=10000', '10', '10', '');
        }
        var hote = window.location.host;
        var http = "http://";
        window.location = http + hote;
    }
}

/******************************************************/
/*********************TFluxstat2********************/
/******************************************************/
function TFluxstat2Simple(univers, phase, flux, fluxComment, idActInterne) {
    TFluxstat2(univers, phase, flux, fluxComment, idActInterne, "", "");
}

function TFluxstat2(univers, phase, flux, fluxComment, idActInterne, numeroSession, idVisiteur) {
    var flux = univers + '-' + phase + '-' + flux + '-' + fluxComment + '-' + idActInterne;

    if (numeroSession != "") {
        flux += '-' + numeroSession;
    }
    if (idVisiteur != "") {
        flux += '-' + idVisiteur;
    }
    Visite(flux);
}

//transformer le code de carrosserie en son libelle
function TransformerCodeCarrosserie(code) {
    switch (code) {
        case "BER":
            return "Berline";
        case "BRK":
            return "Break";
        case "FLE":
            return "Familiale";
        case "CAB":
            return "Cabriolet";
        case "CPE":
            return "Coup\u00E9";
        case "MSP":
            return "Monospace";
        case "DIV":
            return "V\u00E9hicule utilitaire";
    }
    return code;
}

//transformer le code de carburant en son libelle
function TransformerCodeCarburant(code) {
    switch (code) {
        case "ESSENCE":
            return "Essence";
        case "GASOIL":
        case "DIESEL":
            return "Diesel";
        case "GP":
            return "GPL";
        case "EL":
            return "Electrique";
        case "AUTRE":
            return "Autre carburant";
    }
    return code;
}

//transformer le code de la boite de vitesse en son libelle
function TransformerCodeBoiteVitesse(code) {
    switch (code) {
        case "M":
            return "Manuelle";
        case "A":
            return "Automatique";
        case "X":
            return "Aucune";
    }
    return code;
}

//trim a gauche
function ltrim(inString) {
    return inString.replace(/^\s*/, "")
}

//trim a droite
function rtrim(inString) {
    return inString.replace(/\s*$/, "");
}

//trim a gauche et a droite
function trim(inString) {
    return rtrim(ltrim(inString));
}

// fonction qui permet d'écrire la situation maritale d'une personne
//jamais appelee -> supprimer?
function ecrireSituationFamiliale(donneeSituation, idNoeud) {
    texteConditionnel("'donneeSituation' == '1'", "Célibataire", idNoeud);
    texteConditionnel("'donneeSituation' == '2'", "Marié (e)", idNoeud);
    texteConditionnel("'donneeSituation' == '3'", "Concubin (e)", idNoeud);
    texteConditionnel("'donneeSituation' == '4'", "Séparé (e)", idNoeud);
    texteConditionnel("'donneeSituation' == '5'", "Divorcé (e)", idNoeud);
    texteConditionnel("'donneeSituation' == '6'", "Veuf (e)", idNoeud);
}

// fonction qui permet d'écrire le lien entre le TCG et le CP
//jamais appelee -> supprimer?
function ecrireLienTCGCP(donneeSituation, idNoeud) {
    texteConditionnel("'donneeSituation' == ''", "est le conducteur principal", idNoeud);
    texteConditionnel("'donneeSituation' == '0'", "est le conducteur principal", idNoeud);
    texteConditionnel("'donneeSituation' == '1'", "est le conducteur principal", idNoeud);
    texteConditionnel("'donneeSituation' == '8_9'", "est le conjoint(e) du conducteur principal", idNoeud);
    texteConditionnel("'donneeSituation' == '10_11'", "est le concubin(e) du conducteur principal", idNoeud);
    texteConditionnel("'donneeSituation' == '2'", "est le conducteur principal", idNoeud);
    texteConditionnel("'donneeSituation' == '3'", "est la m?re du conducteur principal", idNoeud);
    texteConditionnel("'donneeSituation' == '5_6_7'", "est l'enfant du conducteur principal", idNoeud);
    texteConditionnel("'donneeSituation' == '12'", "est collaborateur de marque automobile", idNoeud);
    texteConditionnel("'donneeSituation' == '4'", "a un autre lien avec le conducteur principal", idNoeud);
}

function backButtonOverride() {
    // Work around a Safari bug
    // that sometimes produces a blank page
    setTimeout("backButtonOverrideBody()", 1);
}

function backButtonOverrideBody() 
{
    // Works if we backed up to get here
    try 
    {
        history.forward();
    } 
    catch (e) 
    {
        // OK to ignore
    }
    // Every quarter-second, try again. The only
    // guaranteed method for Opera, Firefox,
    // and Safari, which don't always call
    // onLoad but *do* resume any timers when
    // returning to a page
    setTimeout("backButtonOverrideBody()", 500);
}

//affiche la question StationnementTravail ou StationnementTravailFrontalier suivant valeurChoisie
function GererCocheFrancePaysFrontalier(valeurChoisie) 
{
    //probleme firefox: saisie avec les fleches clavier -> appel 2 fois, 1 fois avec la bonne valeur et 1 fois avec undefined
    if (valeurChoisie) 
    {
        afficheSiCond('StationnementTravail', '\'' + valeurChoisie + '\'==\'france\'');
        afficheSiCond('StationnementTravailFrontalier', '\'' + valeurChoisie + '\'==\'frontalier\'');
        if (valeurChoisie == 'france') 
        {
            viderToutesValeurs('StationnementTravailFrontalier');
            if (ancienLieuStationnementTravail != valeurChoisie) 
            {
                viderToutesValeurs('StationnementTravail');
            }
        }
        else {
            viderToutesValeurs('StationnementTravail');
        }
        ancienLieuStationnementTravail = valeurChoisie;
    }
}

function SupprimerCaracteresSpeciaux() 
{
    var reg = new RegExp("(&|<|>)*", "g");
    var listeInput = document.getElementsByTagName('INPUT');
    for (index = 0; index < listeInput.length; index++) 
    {
        if (listeInput[index].type == 'text') 
        {
            listeInput[index].value = listeInput[index].value.replace(reg, "");
        }
    }
}

function isAnneeHorsBorne(anneeSaisie) 
{
    return (anneeSaisie < anneeDebut || anneeSaisie > anneeFin);
}

function popupPdfProposition(cheminPdf) {
    if (cheminPdf != '') {
        var fen = OpenWindowReturn('pagePdfProposition.aspx?cheminPdf=' + cheminPdf, 'pdf', 'scrollbars=yes, menubar=yes', '950', '900', '');
    }
}

//supprimer les caracteres speciaux saisis dans les champs adresse
function traiterAdresse(champAdresse) 
{
    var reg = new RegExp("(\")*", "g");
    champAdresse.value = champAdresse.value.replace(reg, "");
}

//JAVSACRIPT NOUVELLE_OFFRE

//Méthode qui permet de sélectionner un seul pack à la fois
function ChoixUniquePack(idCheckBox)
{
    var nomMethode = "ChoixUniquePack";
    try
    {
        var checkBoxPack1 = $("#checkboxPackPack1");
        var checkBoxPack2 = $("#checkboxPackPack2");
        var checkBoxPack3 = $("#checkboxPackPack3");    
        
        //On décoche les packs autres que celui selectionné
        if(idCheckBox != 'checkboxPackPack1')
            checkBoxPack1.attr('checked', false);
        if(idCheckBox != 'checkboxPackPack2')
            checkBoxPack2.attr('checked', false);
        if(idCheckBox != 'checkboxPackPack3')
            checkBoxPack3.attr('checked', false);
    }
    catch(e)
    {
        AjoutErreurJS("Methode "+nomMethode+" "+e.message);
    }
}

//Méthode qui permet de changer de couleur un pack
function ChangementCouleurPack(idCheckBox, idElement, newClassCss, oldClasseCss) 
{
    var nomMethode = "ChangementCouleurPack";
    try
    {
        var checkBox = $("#" + idCheckBox);

        var listeAInvalider = $("tr[class=" + newClassCss + "]");

        for (i = 0; i < listeAInvalider.length; i++) 
        {
            listeAInvalider[i].className = oldClasseCss;
        }

        var listeAValider = $("tr[name=" + idElement + "]");

        for (i = 0; i < listeAValider.length; i++) 
        {
            if(checkBox.is(':checked'))
                listeAValider[i].className = newClassCss;
            else
                listeAValider[i].className = oldClasseCss;
        }
    
    }
    catch(e)
    {
        AjoutErreurJS("Methode "+nomMethode+" "+e.message);
    }

}

//Méthode qui permet de cacher/montrer les garanties du tarif
function DeplierReplierGarantieTarif(texteReplier, texteDeplier, idDiv, idCaseReplierDeplier, classeTableauGarantie) 
{
    var nomMethode = "DeplierReplierGarantieTarif";
    try
    {
        var ligneGarantie = $("tr[name=" + idDiv + "]");
        var caseReplierDeplier = $("td[id=" + idCaseReplierDeplier + "]");
        var imageReplierDeplier = $("img[id=ImageReplierGarantie]");
        
        if (caseReplierDeplier != null) 
        {
            if (caseReplierDeplier.text() == texteReplier) 
            {
                caseReplierDeplier.text(texteDeplier);
                for (i = 0; i < ligneGarantie.length; i++) 
                {
                    ligneGarantie[i].className = "invisibleGarantieNouvelleOffre";
                }

                imageReplierDeplier.attr("src", "/img/common/auto/nouvelleoffre/bout_plus_tab_gies.gif");
            }
            else 
            {
                caseReplierDeplier.text(texteReplier);
                for (i = 0; i < ligneGarantie.length; i++) 
                {
                    ligneGarantie[i].className = classeTableauGarantie;
                }

                imageReplierDeplier.attr("src", "/img/common/auto/nouvelleoffre/bout_moins_tab_gies.gif");
            }
        }
    
    }
    catch(e)
    {
        AjoutErreurJS("Methode "+nomMethode+" "+e.message);
    }
}

//Renvoie le nom de la formule suivant son id
function RenvoieNomFormule(idFormule) 
{
    var nomMethode = "RenvoieNomFormule";
    var nomFormule = "";
    try
    {
        switch (idFormule) 
        {
            case "3":
            case "FRCSeule_AN":
            case "FRCSeule_SEM":
            case "FRCSeule_MENS":
                nomFormule = "TiersMini";
                break;
            case "4":
            case "FTiersSimple_AN":
            case "FTiersSimple_SEM":
            case "FTiersSimple_MENS":
                nomFormule = "TiersEssentiel";
                break;
            case "5":
            case "FTiersComplete_AN":
            case "FTiersComplete_SEM":
            case "FTiersComplete_MENS":
                nomFormule = "TiersIntegral";
                break;
            case "6":
            case "FComplete_AN":
            case "FComplete_SEM":
            case "FComplete_MENS":
                nomFormule = "TiersTousRisques";
                break;
        }
    }
    catch(e)
    {
        AjoutErreurJS("Methode "+nomMethode+" "+e.message);
    }
    return nomFormule;
}

//Selection d'une formule sur l'écran de tarif
function SelectionFormule(NomFormule) 
{
        var nomMethode = "SelectionFormule";
        try 
        {
            
            var caseMontantFormuleASelectionner = $("#tdMontant" + NomFormule);
            var caseTexteFormuleASelectionner = $("#tdTexte" + NomFormule);
            var caseMontantFormuleSelectionner = $("td[class=montantFormuleTableauTarif_On]");
            var caseTexteFormuleSelectionner = $("td[class=texteDescriptifFormule_On]");
            
            var ListeCaseGarantieASelectionner = $("td[name=CaseGarantie_" + NomFormule + "]");
            var ListeCaseGarantieSelectionner = $("td[class=CaseFormuleGarantie_On]");
            var ListeCaseGarantieNullSelectionner = $("td[class=CaseFormuleGarantie_Null_On]");
            
            if (ListeCaseGarantieASelectionner != null) 
            {
                //on déselectionne toutes les cases
                for (i = 0; i < ListeCaseGarantieSelectionner.length; i++) 
                {
                    ListeCaseGarantieSelectionner[i].className = "CaseFormuleGarantie_Off";
                }
                for (i = 0; i < ListeCaseGarantieNullSelectionner.length; i++) 
                {
                    ListeCaseGarantieNullSelectionner[i].className = "CaseFormuleGarantie_Null_Off";
                }
                
                //on sélectionnes les cases demandées
                for (i = 0; i < ListeCaseGarantieASelectionner.length; i++) 
                {
                    var nomClasse = ListeCaseGarantieASelectionner[i].className;
                    if (nomClasse == "CaseFormuleGarantie_Off") 
                    {
                        ListeCaseGarantieASelectionner[i].className = "CaseFormuleGarantie_On";
                    }
                    if (nomClasse == "CaseFormuleGarantie_Null_Off") 
                    {
                        ListeCaseGarantieASelectionner[i].className = "CaseFormuleGarantie_Null_On";
                    }
                }
                //Zone de montant de formule
                caseMontantFormuleSelectionner.attr("class","montantFormuleTableauTarif");
                caseMontantFormuleASelectionner.attr("class","montantFormuleTableauTarif_On");
                //Zone de texte descriptif de la formule
                caseTexteFormuleSelectionner.attr("class","texteDescriptifFormule");
                caseTexteFormuleASelectionner.attr("class","texteDescriptifFormule_On");
            }
        }
        catch(e)
        {
            AjoutErreurJS("Methode "+nomMethode+" "+e.message);
        }
    
}

//Affichage ou non du détail du garantie sur l'écran de tarif
function DetailGarantieTarif(idDetailGarantie,idImageDetailGarantie) 
{
    var nomMethode = "DetailGarantieTarif";
    try
    {
        var imageDetailGarantie = $("img[id=" + idImageDetailGarantie + "]");
        var texteDetailGarantie = $("tr[id=" + idDetailGarantie + "]");

        if (texteDetailGarantie.attr("class") == "invisibleTexteGarantieNouvelleOffre") 
        {
            texteDetailGarantie.attr("class","visibleTableau");
            imageDetailGarantie.attr("src", "/img/common/auto/nouvelleoffre/closeGarantie.png");
        }
        else 
        {
            texteDetailGarantie.attr("class", "invisibleTexteGarantieNouvelleOffre");
            imageDetailGarantie.attr("src", "/img/common/auto/nouvelleoffre/openGarantie.png");
        }
        
     }
    catch(e)
    {
        AjoutErreurJS("Methode "+nomMethode+" "+e.message);
    }
}


   
    
    //Permet de parser un string en float
    function TryParseFloat(str,defaultValue)
    {     
        var retValue = defaultValue;     
        if(str!=null)
        {         
            if(str.length>0)
            {             
                if (!isNaN(str))
                {                 
                    retValue = parseFloat(str);             
                }         
            }     
        }     
        return retValue;
    }

    //Lancement de la popup Modal JQuery --> non fermable par l'utilisateur...
    function LauncherPopupModalStrict(idElement) {
        var elementJQuery = $("#" + idElement);

        var posX = -parseInt($(elementJQuery).width() / 2) + "px";
        var posY = "0px";

        elementJQuery.modal({
            opacity: 80,
            overlayCss: { backgroundColor: "#fff" },
            overlayClose: false,
            position: [posY, posX]
        });
    }

    //Lancement de la popup Modal JQuery
    function LauncherPopupModal(idElement) 
    {
        var elementJQuery = $("#" + idElement);

        elementJQuery.modal({
            opacity: 80,
            overlayCss: { backgroundColor: "#fff" },
            overlayClose: true,
            closeHTML:""
        });
    }
    
        //Lancement de la popup Modal JQuery
    function LauncherPopupModal(idElement, topPosition) 
    {
        var elementJQuery = $("#" + idElement);

        elementJQuery.modal({
            opacity: 80,
            overlayCss: { backgroundColor: "#fff" },
            overlayClose: true,
            closeHTML:"",
            position: [topPosition,""]
        });
    }

    //Message s'affichant lors de l'arrivé sur l'écran tarif en reprise de proposition, sur
    //une proposition "pré" nouvelle offre
    function messageBasculeNouvelleFormule(isAffichagePopupBasculeNouvelleOffre, migrationAutoFormule2011, idSession) 
    {
        var nomMethode = "messageBasculeNouvelleFormule";
        try
        {
            if (isAffichagePopupBasculeNouvelleOffre != null && isAffichagePopupBasculeNouvelleOffre == "true"
            && migrationAutoFormule2011 != null && migrationAutoFormule2011 == "true") 
            {
                // déclaration des éléments qui serviront pour le positionnement de la page
                var tabletableauInclus = $("#tabletableauInclus");
                var blocPackOptionsNouvelleOffre = $("#blocPackOptionsNouvelleOffre");
                
                // scroll la page pour visualiser les tarifs en arrière plan
                $('html,body').scrollTop(tabletableauInclus.offset().top);
                
                // lance la popup de bascule, positionnée sous les tarifs
                $(window).load(function() {
                    LauncherPopupModal('ModalPopupBascule', blocPackOptionsNouvelleOffre.offset().top - tabletableauInclus.offset().top);
                });
                
                // met a jour la donnée automate pour ne pas ré-afficher la popup
                modifierDonneeAutomate(idSession, "IsAffichagePopupBasculeNouvelleOffre", "false");
            }
        }
        catch(e)
        {
            AjoutErreurJS("Methode "+nomMethode+" "+e.message);
        }
    }

    //Permet de mettre une zone en "arrondie"
    function CornerZoneAll(idZone,nbPixel) 
    {
        $("#" + idZone).corner(); 
    }

    //Permet de mettre une zone en "arrondie"
    function CornerZoneTop(idZone, nbPixel) 
    {
        $("#" + idZone).corner("top "+nbPixel);
    }

    //Permet de mettre une zone en "arrondie"
    function CornerZoneTopLeft(idZone, nbPixel) {
        $("#" + idZone).corner("tl " + nbPixel);
    }

    //Permet de mettre une zone en "arrondie"
    function CornerZoneTopRight(idZone, nbPixel) {
        $("#" + idZone).corner("tr " + nbPixel);
    }

    //Permet de mettre une zone en "arrondie"
    function CornerZoneBottomRight(idZone, nbPixel) {
        $("#" + idZone).corner("br " + nbPixel);
    }

    //Permet de mettre une zone en "arrondie"
    function CornerZoneBottomLeft(idZone, nbPixel) {
        $("#" + idZone).corner("bl " + nbPixel);
    }

    //Permet de mettre une zone en "arrondie"
    function CornerZoneBottom(idZone, nbPixel) 
    {
        $("#" + idZone).corner("bottom " + nbPixel);
    } 

    //Fonction arrondie pour l'écran tarif nouvelle offre
    function CornerTarifNouvelleOffre() 
    { 
        var nomMethode = "CornerTarifNouvelleOffre";
        try 
        {      
            CornerZoneTop('div_LigneRecapFormule', '10px');
            CornerZoneBottom('div_LigneRecapTotal', '10px');
            CornerZoneAll('div_tableauInclusConseiller', '10px');
            
            CornerZoneAll('blocTarifRappelCriteres', '10px');
            CornerZoneAll('blocTypeFractionnement', '10px');
            CornerZoneTop('blocChoixTarif', '10px');
            CornerZoneBottom('blocPackOptionsNouvelleOffre', '10px');
            CornerZoneAll('blocMontantTotalTTC', '10px');
            CornerZoneTop('tdLibelleRecommandeTiersMini', '10px');
            CornerZoneTop('tdLibelleRecommandeTiersEssentiel', '10px');
            CornerZoneTop('tdLibelleRecommandeTiersIntegral', '10px');
            CornerZoneTop('tdLibelleRecommandeTiersTousRisques', '10px');
            CornerZoneTop('div_Haut_FormuleConseiller','10px');
            CornerZoneBottom('div_Bas_FormuleConseiller','10px');
        }
        catch (e) 
        {
            //Erreur sur le corner !!!!!
            AjoutErreurJS("Methode "+nomMethode+" "+e.message);
        }
    }

    //Permet de supprimer le type de fractionnement semestriel en premier contact
    //mais de le conserver en nième si la personne à souscrit ou enregistrer sa proposition en semestriel
    function GestionFrequencePaiement(idTypeFractio,valeurTypeFractio) 
    {
        var nomMethode = "GestionFrequencePaiement";
        try 
        {
            if (valeurTypeFractio != "2") 
            {
                var elementJQuery = $("#" + idTypeFractio+"_2");
                //on enlève le fractionnement semestriel
                elementJQuery.remove();
            }
        }
        catch (e) 
        {
            //Erreur sur le traitement de bascule !!!!!
            AjoutErreurJS("Methode "+nomMethode+" "+e.message);
        }
    }

    //Gestion du prélèvement suivant le fractionnement
    function GestionPrelevementAutomatique(namePrelevementAuto,idTypeFractionnement) 
    {
        var nomMethode = "GestionPrelevementAutomatique";
        try 
        {
            var elementFractionnement = $("#" + idTypeFractionnement);
            var elementPrelevementAuto = $("input[name=" + namePrelevementAuto + "]");

            elementPrelevementAuto.removeAttr("disabled");
            
            if (elementFractionnement.val() == "1") 
            {
                //en mensuel on sélectionne à oui le prélèvement automatique et on grise le champ
                elementPrelevementAuto[0].checked = true;
                elementPrelevementAuto.attr("disabled", "true");
                
                //le radio bouton n'est pas actif, la récupération de sa valeur n'est pas possible, on utilise le champ hidden.
                var hiddenValue = $("#" + namePrelevementAuto + "HiddenValue");
                hiddenValue.attr("name", namePrelevementAuto);
                hiddenValue.attr("value", elementPrelevementAuto.attr("value"));
            }
            else
            {
                //le radio bouton est actif, le champ hidden n'a plus plus lieu d'être, on écrase son nom.
                var hiddenValue = $("#" + namePrelevementAuto + "HiddenValue");
                hiddenValue.attr("name", "");
            }
        }
        catch (e) 
        {
            //Erreur sur le traitement de bascule !!!!!
            AjoutErreurJS("Methode "+nomMethode+" "+e.message);
        }
    }

    
    /*GESTION MODULARITE FORMULE NOUVELLE OFFRE*/
    
    //Lancer par le onload du groupe
    function InitBasculeFormule(choixTarif, idSession, chaineNbreFormuleDemander, chainePrioriteFRCSeule_AN, chainePrioriteFTiersSimple_AN, chainePrioriteFTiersComplete_AN, chainePrioriteFComplete_AN)
    {
        var nomMethode = "InitBasculeFormule";
        try 
        {
            var nbreFormuleDemander = parseInt(chaineNbreFormuleDemander);
            var elementHidden = $("#hiddenLienToutesFormules");
            var demandeVisionTouteFormule = elementHidden.val();
            var prioriteFRCSeule_AN = parseInt(chainePrioriteFRCSeule_AN);
            var prioriteFTiersSimple_AN = parseInt(chainePrioriteFTiersSimple_AN);
            var prioriteFTiersComplete_AN = parseInt(chainePrioriteFTiersComplete_AN);
            var prioriteFComplete_AN = parseInt(chainePrioriteFComplete_AN);
            var formulePriorite4 = RenvoieFormuleSelonPriorite(4, prioriteFRCSeule_AN, prioriteFTiersSimple_AN, prioriteFTiersComplete_AN, prioriteFComplete_AN);
            var formulePriorite3 = RenvoieFormuleSelonPriorite(3, prioriteFRCSeule_AN, prioriteFTiersSimple_AN, prioriteFTiersComplete_AN, prioriteFComplete_AN);
            var formulePriorite2 = RenvoieFormuleSelonPriorite(2, prioriteFRCSeule_AN, prioriteFTiersSimple_AN, prioriteFTiersComplete_AN, prioriteFComplete_AN);
            var formulePriorite1 = RenvoieFormuleSelonPriorite(1, prioriteFRCSeule_AN, prioriteFTiersSimple_AN, prioriteFTiersComplete_AN, prioriteFComplete_AN);
            
            if (nbreFormuleDemander < 4)
            {
                if (demandeVisionTouteFormule == 'false') 
                {
                    elementHidden.val("false");

                    //Quoi qu'il arrive on cache la formule de priorité 4
                    CacheFormule(formulePriorite4);

                    if (nbreFormuleDemander == 3) 
                    {
                        //Mise à jour de la représentation pour 3 formules
                        MiseAJourCSS3Formules(formulePriorite1, formulePriorite2, formulePriorite3, 134);
                    }
                    else if (nbreFormuleDemander == 2) 
                    {
                        //on cache la formule de priorité 3
                        CacheFormule(formulePriorite3);
                        //Mise à jour de la représentation pour 2 formules
                        MiseAJourCSS2Formules(formulePriorite1, formulePriorite2, 210);
                    }
                    else if (nbreFormuleDemander == 1) 
                    {
                        //on cache les formules de priorité 2 et 3
                        CacheFormule(formulePriorite2);
                        CacheFormule(formulePriorite3);
                        //Mise à jour de la représentation pour 1 formules
                        MiseAJourCSS1Formule(formulePriorite1, 285);
                    }
                    MiseAJourLienBascule(true);
                }
                else 
                {
                    MontreFormule(formulePriorite4);

                    if (nbreFormuleDemander == 2) 
                    {
                        //on rajoute la formule de priorité 3
                        MontreFormule(formulePriorite3);
                    }
                    else if (nbreFormuleDemander == 1) 
                    {
                        //on rajoute les formules de priorité 2 et 3
                        MontreFormule(formulePriorite3);
                        MontreFormule(formulePriorite2);
                    }
                    MiseAJourCSS4Formules(formulePriorite1, formulePriorite2, formulePriorite3, formulePriorite4, 101);
                    MiseAJourLienBascule(false);

                    //Affiche le libellé recommandé si on a plus d'une formule
                    $("div[recommande=true]").attr("class", "enteteRecommandeFormuleTableauTarif");
                    $("div[recommande=true]").html("Recommand&eacute;");

                    CornerZoneTop('tdLibelleRecommandeTiersMini', '10px');
                    CornerZoneTop('tdLibelleRecommandeTiersEssentiel', '10px');
                    CornerZoneTop('tdLibelleRecommandeTiersIntegral', '10px');
                    CornerZoneTop('tdLibelleRecommandeTiersTousRisques', '10px');
                    if (choixTarif != null
                        && choixTarif != '') 
                    {
                        SelectionFormule(RenvoieNomFormule(choixTarif));
                    }
                }
            }
            
        }
        catch (e) 
        {
            //Erreur sur le traitement de bascule !!!!!
            AjoutErreurJS("Methode "+nomMethode+" "+e.message);
        }
    }
    
    //Permet de déselectionner une formule nouvelle offre
    function DeselectionFormule()
    {
        var nomMethode = "DeselectionFormule";
        try
        {
            var ListeCaseTexteDescriptif = $("td[class=texteDescriptifFormule_On]");
            var ListeCaseMontantFormule = $("td[class=montantFormuleTableauTarif_On]");
            
            var ListeCaseGarantieSelectionner = $("td[class=CaseFormuleGarantie_On]");
            var ListeCaseGarantieNullSelectionner = $("td[class=CaseFormuleGarantie_Null_On]");

            for (i = 0; i < ListeCaseTexteDescriptif.length; i++) 
            {
                ListeCaseTexteDescriptif[i].className = "texteDescriptifFormule";
            }

            for (i = 0; i < ListeCaseMontantFormule.length; i++) 
            {
                ListeCaseMontantFormule[i].className = "montantFormuleTableauTarif";
            }

            //on déselectionne toutes les cases
            for (i = 0; i < ListeCaseGarantieSelectionner.length; i++) 
            {
                ListeCaseGarantieSelectionner[i].className = "CaseFormuleGarantie_Off";
            }
            for (i = 0; i < ListeCaseGarantieNullSelectionner.length; i++) 
            {
                ListeCaseGarantieNullSelectionner[i].className = "CaseFormuleGarantie_Null_Off";
            }
            
        }
        catch (e) 
        {
            //Erreur sur le traitement de bascule !!!!!
            AjoutErreurJS("Methode "+nomMethode+" "+e.message);
        }
    }
    
    //Permet de sélectionner la formule conseiller
    function SelectionFormuleUnique()
    {
        var nomMethode = "SelectionFormuleUnique";
        try
        {
            $("#radioFormuleConseiller").click();
        }
        catch (e) 
        {
            //Erreur sur le traitement de bascule !!!!!
            AjoutErreurJS("Methode "+nomMethode+" "+e.message);
        }
    }
    
    //Permet de sélectionner la formule recommandé parmi les quatres
    function SelectionFormuleRecommande()
    {
        var nomMethode = "SelectionFormuleRecommande";
        try
        {
            var idTouteFormule = $("#radioFormuleConseiller").attr("idTouteFormule");
            $("#"+idTouteFormule).click();
        }
        catch (e) 
        {
            //Erreur sur le traitement de bascule !!!!!
            AjoutErreurJS("Methode "+nomMethode+" "+e.message);
        }
    }
    
    //Appel des méthodes de bascule
    function DemandeBasculeFormule(idSession, chaineNbreFormuleDemander, chainePrioriteFRCSeule_AN, chainePrioriteFTiersSimple_AN, chainePrioriteFTiersComplete_AN, chainePrioriteFComplete_AN) 
    {
        var nomMethode = "DemandeBasculeFormule";
        try 
        {
                
                var nbreFormuleDemander = parseInt(chaineNbreFormuleDemander);
                if (nbreFormuleDemander > 0 && nbreFormuleDemander < 4) 
                {
                    BasculeTouteFormuleVersSelectionFormules(idSession, chaineNbreFormuleDemander, chainePrioriteFRCSeule_AN, chainePrioriteFTiersSimple_AN, chainePrioriteFTiersComplete_AN, chainePrioriteFComplete_AN);
                }
        }
        catch(e)
        {
            AjoutErreurJS("Methode "+nomMethode+" "+e.message);
        }
    }

    //Gestion du bascule de formule
    function BasculeTouteFormuleVersSelectionFormules(idSession, chaineNbreFormuleDemander, chainePrioriteFRCSeule_AN, chainePrioriteFTiersSimple_AN, chainePrioriteFTiersComplete_AN, chainePrioriteFComplete_AN) 
    {
        var nomMethode = "BasculeTouteFormuleVersSelectionFormules";
        try 
        {
            AjoutInfo(nomMethode);
            //Bascule que pour 1,  2 ou 3 formules
            var nbreFormuleDemander = parseInt(chaineNbreFormuleDemander);
            
            if (nbreFormuleDemander > 0 && nbreFormuleDemander < 4) 
            {

                var prioriteFRCSeule_AN = parseInt(chainePrioriteFRCSeule_AN);
                var prioriteFTiersSimple_AN = parseInt(chainePrioriteFTiersSimple_AN);
                var prioriteFTiersComplete_AN = parseInt(chainePrioriteFTiersComplete_AN);
                var prioriteFComplete_AN = parseInt(chainePrioriteFComplete_AN);
                var formulePriorite4 = RenvoieFormuleSelonPriorite(4, prioriteFRCSeule_AN, prioriteFTiersSimple_AN, prioriteFTiersComplete_AN, prioriteFComplete_AN);
                var formulePriorite3 = RenvoieFormuleSelonPriorite(3, prioriteFRCSeule_AN, prioriteFTiersSimple_AN, prioriteFTiersComplete_AN, prioriteFComplete_AN);
                var formulePriorite2 = RenvoieFormuleSelonPriorite(2, prioriteFRCSeule_AN, prioriteFTiersSimple_AN, prioriteFTiersComplete_AN, prioriteFComplete_AN);
                var formulePriorite1 = RenvoieFormuleSelonPriorite(1, prioriteFRCSeule_AN, prioriteFTiersSimple_AN, prioriteFTiersComplete_AN, prioriteFComplete_AN);
                var elementHidden = $("#hiddenLienToutesFormules");
                var demandeVisionTouteFormule = elementHidden.val();
                
                if (demandeVisionTouteFormule == 'true') 
                {
                        //passage de toutes formules à celle conseiller
                        modifierDonneeAutomate(idSession, "DemandeVisionTouteFormule", "false");
                        elementHidden.val("false");
                        //Quoi qu'il arrive on cache la formule de priorité 4
                        CacheFormule(formulePriorite4);
                        
                        if (nbreFormuleDemander == 3) 
                        {
                            //Mise à jour de la représentation pour 3 formules
                            MiseAJourCSS3Formules(formulePriorite1,formulePriorite2,formulePriorite3,134);
                        }
                        else if (nbreFormuleDemander == 2) 
                        {
                            //on cache la formule de priorité 3
                            CacheFormule(formulePriorite3);  
                            MiseAJourCSS2Formules(formulePriorite1,formulePriorite2,210);
                        }
                        else if (nbreFormuleDemander == 1) 
                        {
                            //on cache la formule de priorité 3
                            CacheFormule(formulePriorite2);
                            CacheFormule(formulePriorite3);
                            MiseAJourCSS1Formule(formulePriorite1,285);
                        }
                        MiseAJourLienBascule(false);
                }
                else
                {
                        //passage de formules conseillers à toutes formules
                        modifierDonneeAutomate(idSession, "DemandeVisionTouteFormule", "true");
                        elementHidden.val("true");
                        //Quoi qu'il arrive on rajoute la formule de priorité 4
                        MontreFormule(formulePriorite4);
                        
                        if (nbreFormuleDemander == 2) 
                        {
                            //on rajoute la formule de priorité 3
                            MontreFormule(formulePriorite3);   
                        }
                        else if (nbreFormuleDemander == 1) 
                        {
                            //on rajoute les formules de priorité 2 et 3
                            MontreFormule(formulePriorite3); 
                            MontreFormule(formulePriorite2);   
                        }
                        MiseAJourCSS4Formules(formulePriorite1,formulePriorite2,formulePriorite3,formulePriorite4,101);
                        MiseAJourLienBascule(false);
                        
                        //Affiche le libellé recommandé si on a plus d'une formule
                        $("div[recommande=true]").attr("class", "enteteRecommandeFormuleTableauTarif");
                        $("div[recommande=true]").html("Recommand&eacute;");
                        
                        CornerZoneTop('tdLibelleRecommandeTiersMini', '10px');
                        CornerZoneTop('tdLibelleRecommandeTiersEssentiel', '10px');
                        CornerZoneTop('tdLibelleRecommandeTiersIntegral', '10px');
                        CornerZoneTop('tdLibelleRecommandeTiersTousRisques', '10px');
                }
                
            }

        }
        catch (e) 
        {
            //Erreur sur le traitement de bascule !!!!!
            AjoutErreurJS("Methode "+nomMethode+" "+e.message);
        }
    }
    
    //Mise à jour du lien de bascule une/plusieurs formules
    function MiseAJourLienBascule(isVisible)
    {
        var nomMethode = "MiseAJourLienBascule";
        try
        {
            AjoutInfo(nomMethode);
            if(isVisible)   
            {
                $("div[id=lienBasculesFormules]").css("display", "");
            }
            else
            {
                $("div[id=lienBasculesFormules]").css("display", "none");
            }   
        }
        catch(e)
        {
            //Erreur sur le traitement de bascule !!!!!
            AjoutErreurJS("Methode "+nomMethode+" "+e.message);
        }
    }

    function MiseAJourCSS4Formules(formulePriorite1,formulePriorite2,formulePriorite3,formulePriorite4,largeur4Formules)
    {
        var nomMethode = "MiseAJourCSS4Formules";
        try
        {
            AjoutInfo(nomMethode);
            //CSS pour 4 formules
            $("#div_radioFormule"+formulePriorite4).css("max-width",largeur4Formules);
            $("#div_radioFormule"+formulePriorite3).css("max-width",largeur4Formules);
            $("#div_radioFormule"+formulePriorite2).css("max-width",largeur4Formules);
            $("#div_radioFormule" + formulePriorite1).css("max-width", largeur4Formules);
            
            $("#div_radioFormuleTiersMini").css("height", 60);
            $("#div_radioFormuleTiersEssentiel").css("height", 70);
            $("#div_radioFormuleTiersIntegral").css("height", 80);
            $("#div_radioFormuleTiersTousRisques").css("height", 90);

            $("#tdMontant" + formulePriorite1).removeClass("montantFormuleTableauTarifUneFormule");
            $("#tdMontant" + formulePriorite1).addClass("montantFormuleTableauTarif");
            
            
            $("#table"+formulePriorite4).css("width",largeur4Formules);
            $("#table"+formulePriorite3).css("width",largeur4Formules);
            $("#table"+formulePriorite2).css("width",largeur4Formules);
            $("#table"+formulePriorite1).css("width",largeur4Formules);

            $("#tdTexte"+formulePriorite4).css("width",largeur4Formules);        
            $("#tdTexte"+formulePriorite3).css("width",largeur4Formules);
            $("#tdTexte"+formulePriorite2).css("width",largeur4Formules);
            $("#tdTexte" + formulePriorite1).css("width", largeur4Formules);  
            
            $("#tdTexte"+formulePriorite4).css("max-width",largeur4Formules);
            $("#tdTexte"+formulePriorite3).css("max-width",largeur4Formules);
            $("#tdTexte"+formulePriorite2).css("max-width",largeur4Formules);
            $("#tdTexte" + formulePriorite1).css("max-width", largeur4Formules);

            //Tableau inclus
            $("#div_tableauInclus").addClass("inclusFormule");
            $("#div_tableauInclus").removeClass("inclusFormuleBig");
            //Selection de la formule recommandé
            SelectionFormule(formulePriorite1);
            //on remet l'écart pour l'escalier de formule
            $("trEcart" + formulePriorite1).show();
            
            //On affiche les textes de descriptifs des garanties 4 formules
            //car la modularité n'est pas rappellée et donc les 2 types de textes sont chargés
            $("span[class=texteGarantie1Formule]").css("display", "none");
            $("span[class=texteGarantie4Formules]").css("display", "");
            
            
            $("span[class=SautLigneFormule]").html("<br/>");
        }
        catch(e)
        {
            //Erreur sur le traitement de bascule !!!!!
            AjoutErreurJS("Methode "+nomMethode+" "+e.message);
        }
    }

    function MiseAJourCSS3Formules(formulePriorite1,formulePriorite2,formulePriorite3,largeur3Formules)
    {
        var nomMethode = "MiseAJourCSS3Formules";
        try
        {
            AjoutInfo(nomMethode);
            //CSS pour 3 formules
            $("#div_radioFormule"+formulePriorite3).css("max-width",largeur3Formules);
            $("#div_radioFormule"+formulePriorite2).css("max-width",largeur3Formules);
            $("#div_radioFormule"+formulePriorite1).css("max-width",largeur3Formules);
            
            $("#div_radioFormuleTiersMini").css("height", 60);
            $("#div_radioFormuleTiersEssentiel").css("height", 70);
            $("#div_radioFormuleTiersIntegral").css("height", 80);
            $("#div_radioFormuleTiersTousRisques").css("height", 90);
            
            $("#table"+formulePriorite3).css("width",largeur3Formules);
            $("#table"+formulePriorite2).css("width",largeur3Formules);
            $("#table"+formulePriorite1).css("width",largeur3Formules);    

            $("#tdTexte"+formulePriorite3).css("width",largeur3Formules);
            $("#tdTexte"+formulePriorite2).css("width",largeur3Formules);
            $("#tdTexte"+formulePriorite1).css("width",largeur3Formules);  
            $("#tdTexte"+formulePriorite3).css("max-width",largeur3Formules);
            $("#tdTexte"+formulePriorite2).css("max-width",largeur3Formules);
            $("#tdTexte"+formulePriorite1).css("max-width",largeur3Formules);
            
            $("span[class=SautLigneFormule]").html("<br/>");
        }
        catch(e)
        {
            //Erreur sur le traitement de bascule !!!!!
            AjoutErreurJS("Methode "+nomMethode+" "+e.message);
        }
    }
    
    function MiseAJourCSS2Formules(formulePriorite1,formulePriorite2,largeur2Formules)
    {
        var nomMethode = "MiseAJourCSS2Formules";
        try
        {
            AjoutInfo(nomMethode);
            //CSS pour 2 formules
            $("#div_radioFormule"+formulePriorite2).css("max-width",largeur2Formules);
            $("#div_radioFormule"+formulePriorite1).css("max-width",largeur2Formules);
            $("#table"+formulePriorite2).css("width",largeur2Formules);
            $("#table"+formulePriorite1).css("width",largeur2Formules);
            $("#tdTexte"+formulePriorite2).css("width",largeur2Formules);
            $("#tdTexte"+formulePriorite1).css("width",largeur2Formules);
            $("#tdTexte"+formulePriorite2).css("max-width",largeur2Formules);
            $("#tdTexte"+formulePriorite1).css("max-width",largeur2Formules);  
            
            $("#div_radioFormuleTiersMini").css("height", 60);
            $("#div_radioFormuleTiersEssentiel").css("height", 70);
            $("#div_radioFormuleTiersIntegral").css("height", 80);
            $("#div_radioFormuleTiersTousRisques").css("height", 90);
            
            $("span[class=SautLigneFormule]").html("<br/>");
        }
        catch(e)
        {
            //Erreur sur le traitement de bascule !!!!!
            AjoutErreurJS("Methode "+nomMethode+" "+e.message);
        }   
    }
  
    function MiseAJourCSS1Formule(formulePriorite1,largeurDeLaFormule)
    {
        var nomMethode = "MiseAJourCSS1Formule";
        try
        {
            AjoutInfo(nomMethode);
            //CSS pour 1 formule
            $("#div_radioFormule" + formulePriorite1).css("max-width", largeurDeLaFormule);
            $("#table"+formulePriorite1).css("width",largeurDeLaFormule);
            $("#tdTexte" + formulePriorite1).css("max-width", largeurDeLaFormule);
            $("#tdTexteFormule").css("width", largeurDeLaFormule);
            $("#div_radioFormule" + formulePriorite1).css("height", 45);
            //Tableau inclus
            $("#div_tableauInclus").removeClass("inclusFormule");
            $("#div_tableauInclus").addClass("inclusFormuleBig");
            //on déselectionne la formule
            DeselectionFormule();
            $("#tdMontant" + formulePriorite1).removeClass("montantFormuleTableauTarif");
            $("#tdMontant" + formulePriorite1).addClass("montantFormuleTableauTarifUneFormule");
            //on cache l'écart du haut de formule
            $("#trEcart" + formulePriorite1).hide();
            
            $("span[class=SautLigneFormule]").html(" ");
        }
        catch(e)
        {
            //Erreur sur le traitement de bascule !!!!!
            AjoutErreurJS("Methode "+nomMethode+" "+e.message);
        } 
    }
    
    //Permet de montrer une formule non présente dans l'arbre dom
    function MontreFormule(nomFormule)
    {
        var nomMethode = "MontreFormule";
        try
        {
            AjoutInfo(nomMethode);
           $("#td" + nomFormule).show();
           $("#tdTexte" + nomFormule).show();
           $("td[name=CaseGarantie_"+nomFormule+"]").show();  
        }
        catch(e)
        {
            //Erreur sur le traitement de bascule !!!!!
            AjoutErreurJS("Methode "+nomMethode+" "+e.message);
        }    
    }

    //Cache le formule dont le nom est passée en paramètre
    function CacheFormule(nomFormule) 
    {
        var nomMethode = "CacheFormule";
        try
        {
            AjoutInfo(nomMethode);
           $("#td" + nomFormule).hide();
           $("#tdTexte" + nomFormule).hide();
           $("td[name=CaseGarantie_"+nomFormule+"]").hide();  
        }
        catch(e)
        {
            //Erreur sur le traitement de bascule !!!!!
            AjoutErreurJS("Methode "+nomMethode+" "+e.message);
        }  
    }

    //renvoie le nom de la formule selon la priorite voulue
    function RenvoieFormuleSelonPriorite(prioriteVoulue, prioriteFRCSeule_AN, prioriteFTiersSimple_AN, prioriteFTiersComplete_AN, prioriteFComplete_AN) 
    {
        var nomMethode = "RenvoieFormuleSelonPriorite";
        try 
        {
            AjoutInfo(nomMethode);
            if (prioriteVoulue == prioriteFRCSeule_AN) 
            {
                return "TiersMini";
            }
            else if (prioriteVoulue == prioriteFTiersSimple_AN) 
            {
                return "TiersEssentiel";
            }
            else if (prioriteVoulue == prioriteFTiersComplete_AN) 
            {
                return "TiersIntegral";
            }
            else if (prioriteVoulue == prioriteFComplete_AN) 
            {
                return "TiersTousRisques";
            }
        }
        catch(e)
        {
            AjoutErreurJS("Methode "+nomMethode+" "+e.message);
        }
    }

    //Message modal
    function montreModal(divModal) 
    {
        
        var elementJQuery = $("#"+divModal);
        
        $(document).ready(function() {
            elementJQuery.modal({
               opacity: 80,
               overlayCss: { backgroundColor: "#fff" },
               overlayClose: true,
               close: true,
                closeHTML: "",
                position:['25%','25%']
            });
        });
        
        
    }
    
    function cacheModal() 
    {
        $(document).ready(function() {$.modal.close();});
       
    }
    

    //Message d'attente pour l'écran tarif nouvelle offre
    function attenteNouvelleOffreNonModal() 
    {
        var nomMethode = "attenteNouvelleOffreNoModal";
        try 
        {
            AjoutInfo(nomMethode);
            
            var elementJQuery = $("#divAttente");
            $(document).ready(function() {
                elementJQuery.modal({
                    opacity: 80,
                    overlayCss: { backgroundColor: "#fff" },
                    overlayClose: false,
                    close: false,
                    closeHTML: "",
                    modal: false
                });
            });
            setTimeout(function() { $("#imgAttenteNouvelleOffre").attr("src", "/img/common/auto/nouvelleoffre/loading51.gif"); }, 0);

           
        }
        catch(e)
        {
            AjoutErreurJS("Methode "+nomMethode+" "+e.message);
        }
        
    }

    //Message d'attente pour l'écran tarif nouvelle offre
    function attenteNouvelleOffre() 
    {
        var nomMethode = "attenteNouvelleOffre";
        try 
        {
            AjoutInfo(nomMethode);
            
            var elementJQuery = $("#divAttente");
            $(document).ready(function() {
                elementJQuery.modal({
                    opacity: 80,
                    overlayCss: { backgroundColor: "#fff" },
                    overlayClose: false,
                    close: false,
                    closeHTML: "",
                    modal: true
                });
            });
            setTimeout(function() { $("#imgAttenteNouvelleOffre").attr("src", "/img/common/auto/nouvelleoffre/loading51.gif"); }, 0);

           
        }
        catch(e)
        {
            AjoutErreurJS("Methode "+nomMethode+" "+e.message);
        }
        
    }

    //Méthode permettant de cacher la popup d'attente
    function finAttenteNouvelleOffre() 
    {
        var nomMethode = "finAttenteNouvelleOffre";
        try 
        {
            AjoutInfo(nomMethode);
           
            $(document).ready(function() { $.modal.close(); });
            // $("#simplemodal-overlay").style("", "");

           
        }
        catch(e)
        {
            AjoutErreurJS("Methode "+nomMethode+" "+e.message);
        }
    }
    
    /* METHODE DE RETOUR DE L'APPEL AJAX SUR LA PAGE TARIF NOUVELLE_OFFRE*/
    function ModificationTotalTTCRetourCalculerComptant(fluxTarif, choixTarif, montantComptant, montantComptant30j, dateEffetInferieureOuEgale30j)
    {
        var nomMethode = "ModificationTotalTTCRetourCalculerComptant";
        try
        {
            AjoutInfo(nomMethode);
			var montantTotalFormule = RecupererMontant(fluxTarif,'/TARIF/'+choixTarif+'/CotisBase');
			var montantCotisationAnnuelle = RecupererMontant(fluxTarif,'/TARIF/'+choixTarif+'/Cotis');
			
			var zoneMontantFormule = $("#LigneFormuleRecapMontant");
			var zoneMontantTotal = $("#LigneTotalRecapMontant");
			
			if(zoneMontantFormule!=null)
			{
			    zoneMontantFormule.text(montantTotalFormule);
			}
			if(zoneMontantTotal!=null)
			{
			    zoneMontantTotal.text(montantCotisationAnnuelle);
			}
			
			RenseignerMontantPack(choixTarif,fluxTarif);
			
			// Affichage ou non des textes de fractionnement
			var zoneTotalFractionnementSemestriel = $("#TexteFractionnementSemestriel");
		    var zoneTotalFractionnementTexte1 = $("#TexteFractionnementMensuelLigne1");
		    var zoneTotalFractionnementTexte2 = $("#TexteFractionnementMensuelLigne2");
		    var hiddenZoneTotalFractionnementSemestriel = $("#HiddenTexteFractionnementSemestriel");
		    var hiddenZoneTotalFractionnementTexte1 = $("#HiddenTexteFractionnementMensuelLigne1");
		    var hiddenZoneTotalFractionnementTexte2 = $("#HiddenTexteFractionnementMensuelLigne2");
            var listeFrequence = $("select[name=reponseTypeFractionnement]");

            if (listeFrequence.val() == 1) 
            {
                //mensuel
                var montantMensualite = RecupererMontant(fluxTarif,'/TARIF/'+choixTarif+'/PrimeFractionnee');
                
                var montantPremierMois = dateEffetInferieureOuEgale30j == true ? montantComptant30j : montantComptant;
            
                zoneTotalFractionnementTexte1.css("display", "inline");
                zoneTotalFractionnementTexte2.css("display", "inline");
                zoneTotalFractionnementSemestriel.css("display", "none");
                
                //var floatMontantMensuel = Math.round(montantTotalFormule / 12, 2);
                zoneTotalFractionnementTexte1.html(hiddenZoneTotalFractionnementTexte1.val().replace('[0]', montantMensualite)+"<br/>");
                zoneTotalFractionnementTexte2.html(hiddenZoneTotalFractionnementTexte2.val().replace('[0]', montantPremierMois));
            }
            else if(listeFrequence.val() == 2)
            {
                //semestriel
                var montantSemestrialite = RecupererMontant(fluxTarif,'/TARIF/'+choixTarif+'/PrimeFractionnee');
                zoneTotalFractionnementSemestriel.css("display", "inline");
                zoneTotalFractionnementTexte1.css("display", "none");
                zoneTotalFractionnementTexte2.css("display", "none");

                zoneTotalFractionnementSemestriel.html(hiddenZoneTotalFractionnementSemestriel.val().replace('[0]', montantSemestrialite));
            }
            else
            {
                zoneTotalFractionnementTexte1.css("display", "none");
                zoneTotalFractionnementTexte2.css("display", "none");
                zoneTotalFractionnementSemestriel.css("display", "none");
            }
            
            
            
            var listePack = $("input[name=reponseChoixPack]");
            var listeFormule = $("input[name=reponseChoixTarif]");
            var zoneLibelleFormuleRecap = $("#LigneFormuleRecapLibelle");
            var zoneLibellePackRecap = $("#LignePackRecapLibelle");

            //on récupère le pack et la formule sélectionnée
            var packSelectionner = null;
            for (i = 0; i < listePack.length; i++) {
                if (listePack[i].checked) {
                    packSelectionner = listePack[i];
                }
            }

            var formuleSelectionner = null;
            for (i = 0; i < listeFormule.length; i++) {
                if (listeFormule[i].checked) {
                    formuleSelectionner = listeFormule[i];
                }
            }

            if (formuleSelectionner != null) {
                //on modifie l'affichage du recap
                var titrePourRecapFormule = $("#" + formuleSelectionner.id).attr("titrePourRecap");
                zoneLibelleFormuleRecap.text("Formule " + titrePourRecapFormule);
            }
            if(packSelectionner != null) {
                var titrePourRecapPack = $("#" + packSelectionner.id).attr("titrePourRecap");
                zoneLibellePackRecap.text(titrePourRecapPack);
                $("#tr_LigneRecapPack").css("display", "");
                $("#tr_InterLigne").css("display", "");
            }
            else{
                $("#tr_LigneRecapPack").css("display", "none");
                $("#tr_InterLigne").css("display", "none");
            }
        }
        catch(e)
        {
            AjoutErreurJS("Methode "+nomMethode+" "+e.message);
        }
    }
    
    //Modification des montants de formules
    function ModificationFormuleNORetourCalculerComptant(fluxTarif, choixTarif)
    {
        var nomMethode = "ModificationFormuleNORetourCalculerComptant";
        try 
        {
           AjoutInfo(nomMethode);
           ModificationMontantFormuleSuivantFractionnement(fluxTarif, choixTarif);
           SelectionFormule(RenvoieNomFormule(choixTarif));
           
        }
        catch(e)
        {
            AjoutErreurJS("Methode "+nomMethode+" "+e.message);
        }
    }
    
     //Permet de déselectionner une formule nouvelle offre
    function DeSelectionPack() 
    {
        var nomMethode = "DeSelectionPack";
        try 
        {
            AjoutInfo(nomMethode);
    
            var listeCheckBoxPack = $("input[name=reponseChoixPack]");
            if(listeCheckBoxPack!=null)
            {
                for (var i = 0; i < listeCheckBoxPack.length; i++) 
                {
                    listeCheckBoxPack[i].checked = false;
                }
                
            }
        }
        catch (e) 
        {
            AjoutErreurJS("Methode " + nomMethode + " " + e.message);
        }
        
    }
    //Remise à zéro des packs
    function RemiseAZeroPack() 
    {
        var nomMethode = "RemiseAZeroPack";
        try 
        {
            AjoutInfo(nomMethode);
             
            for(var i=1; i<=3; i++)
            {
                var hautPack = $("#idHautPack_Pack"+i);
                var tableauPack = $("#tableauPack"+i);
                var checkboxPack = $("#checkboxPackPack"+i);
                var toolTipAidePack = $("#ToolTipAide_Pack"+i);
                var basTableauPack = $("tr[name=Pack"+i+"BasTableau]");
                var textePackNonDisponible = $("#idTextePackNonDisponible_Pack"+i);
                hautPack.attr("class", "hautTableauPack");
                tableauPack.attr("class", "tableauPack");
                checkboxPack[0].checked = false;
                checkboxPack.removeAttr("disabled");
                toolTipAidePack.attr("class", "toolTipPack");
                basTableauPack.attr("class", "basTableauPack");
                textePackNonDisponible.attr("style", "display:none;");
            }
            var tdRecommandePack = $("td[name=tdRecommandePack]");
            tdRecommandePack.attr("class", "recommandePack_Off");
        }
        catch (e) 
        {
            AjoutErreurJS("Methode " + nomMethode + " " + e.message);
        }
    }
  
    
    //Modification des franchises
    function ModificationFranchiseNORetourCalculerComptant()
    {
        var nomMethode = "ModificationFranchiseNORetourCalculerComptant";
        try
        {
            //TODO quand les tags franchises seront rajoutés
            AjoutInfo("Rajouter les tags franchises");
           
        }
        catch(e)
        {
            AjoutErreurJS("Methode "+nomMethode+" "+e.message);
        }
    }
    
   function AjoutInfo(info)
   {
        try
        {
           log.info(info);
        }
        catch(e)
        {
            //Erreur sur le composant de log
        }
   }
    
    //Renvoie une erreur dans la zone d'erreur JS
    function AjoutErreurJS(erreur)
    {
        try
        {
           log.error("Une erreur s'est produite", erreur);
        }
        catch(e)
        {
            //Erreur sur le composant de log
        }
    }
    
    //Gestion de l'arrondie du montant des packs
    function GestionArrondiePack(montant, fractionnementMontantPack)
    {
        var nomMethode = "GestionArrondiePack";
        try 
        {
            AjoutInfo(nomMethode);
           //on convertie le montant en float
           var nombreMontant = parseFloat(montant);
           
           //le montant annuel du pack doit être divisé par 12 si le fractionnement en mensuel
           //le fractionnement du montant des packs dépend de la modularité
           if (fractionnementMontantPack == 'MENS') 
           {
               nombreMontant = nombreMontant / 12;
           }
           
           //traitement de l'arrondie
           nombreMontant = nombreMontant * 100;
           nombreMontant = Math.ceil(nombreMontant);//Math.round(nombreMontant);

           var valRetour = nombreMontant / 100;
           
           return valRetour.toFixed(2);
        }
        catch(e)
        {
            AjoutErreurJS("Methode "+nomMethode+" "+e.message);
        }
    }
    
    //Permet de bloquer a annuel pour un JC a crédit
    function verifierListeFractionnements_NouvelleOffre()
    {
        var nomMethode = "verifierListeFractionnements_NouvelleOffre";
        try 
        {
            AjoutInfo(nomMethode);
            var listeFractionnements = recupereInputReponse("TypeFractionnement");

            if(listeFractionnements!=null && listeFractionnements.length == 1)
            {
                $("#texteTypeFractionnement").html("ANNUEL");
                $("#id_reponseTypeFractionnement").hide();
            }
        }
        catch(e)
        {
           AjoutErreurJS("Methode "+nomMethode+" "+e.message);
        }
    }

//fonction qui renvoie la valeur d'un input a partir de son nom
//elle n'est pas utilisee chez nous mais appelee par la DMC
function recupererInput(inputName) {
    return $("input[name=" + inputName + "]").val();
}

function EstNumeroDePortable(numPortable) {
    /// <summary>Fonction indiquant si le paramètre passé est un numéro de portable. Règle: 10 chiffres, commençant par 06 ou 07.</summary>
    /// <param name="numPortable">Numéro de téléphone portable.</param>
    /// <returns>True ou false.</returns>

    if (numPortable == null) {
        return false;
    }
    var regExTelPortable = new RegExp("^(06|07)([0-9]{8})$");
    return regExTelPortable.test(numPortable);
}
