/*****************************************************/
/*********** 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 ----------------

/******************************************************/
/******************************************************/


/* 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){
    ajouterOptionParDefaut(select);
    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 -- ");
}

// 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(idSession, 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':
					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;
			}
		}
	}
}


//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 màªme 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 màme 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;
	}
	else 
	{
		document.getElementsByName('reponseStationnementTravailFranceOuPaysFrontaliers')[2].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;
}


//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 afficherPdfSimulationBnpp(cleRemote,version)
{
	var url = "pagePdfSimulationExtranet.aspx?cleRemote="+cleRemote+"&version="+version+"&typePdf=defaut";
	OpenWindow(url,'info','scrollbars=1','800','950','true');
}



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) 
{
    var fen = OpenWindowReturn('pagePdfProposition.aspx?cheminPdf=' + cheminPdf, 'info', '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, "");
}