function gotoNextField(ctrl)
{
  var next  
  var visible
  for (var i=0; i<validation.length;i++)
  {
    if (validation[i][0]==ctrl.id)
    {
      for(var j=i+1;j<validation.length;j++)
      {
        next=document.getElementById(validation[j][0])
        if(next!=null)
        {
          var box  = document.getElementById(next.id+"_BOX")
          if(box!=null) visible=isVisible(document.getElementById(next.id+"_BOX"))
            else 
          visible=isVisible(next)
          if(visible)
          {
            if (next.type!="hidden") 
            {
              next.focus();
              return
            } else {
              var ctrldate = document.getElementById(next.id+"_Day")
              if(ctrldate!=null)  { ctrldate.focus(); return }
              var ctrldate = document.getElementById(next.id+"_Tx")
              if(ctrldate!=null)  { ctrldate.focus(); return }
              var ctrldate = document.getElementById(next.id+"_Autre")
              if(ctrldate!=null)  { ctrldate.focus(); return }
              var ctrldate = document.getElementById(next.id+"_H")
              if(ctrldate!=null)  { ctrldate.focus(); return }
            }
          }
        }
      }
    }
  }
}

function setControlState(ctrl,state)
{
  if (state) 
  {
    ctrl.className='disabled' 
  ctrl.disabled=true
  }
}
function setDefaultValues()
{
  var ctrl
  // Détermine si l'objet doit être caché
  for(x in validation)
    if(validation[x][6]=='1') setVisibility(validation[x][0]+"_BOX",false)
  // Mise en place des valeurs par défaut static (Lors de la compilation,
  // ainsi que des données èprovenant de l'URL
  for(x in defaultvalues)
  {
    ctrl = document.getElementById(x)
    if (ctrl!=undefined)
    {
      switch(ctrl.type)
      {
	 case 'select-one':	
        { 
           var doNothing=false
           // Recherche si une option est déjà sélectionnée: sio oui, on ne fait rien 
	    for (i=0;i<ctrl.length;i++)
           {
              if(ctrl.options[i].defaultSelected==true) { doNothing=true; break; }    
           }
           if(doNothing==false)
             for (i=0;i<ctrl.length;i++)
             {
	         	
               if(ctrl.options[i].value==defaultvalues[x]) 
               {
		   ctrl.options[i].selected=true
                 break;
	        }
	      }
             
             try { eval("change_"+ctrl.name+"()") } catch(e) {}
          break;
        }
	 case 'checkbox':
        {
	    if(ctrl.length == null)
	    {
		ctrl.checked=true
              try { eval("change_"+ctrl.name+"()") } catch(e) {}
	    }
           else
	    {
		for (i=0;i<ctrl.length;i++)
              {
                 if(ctrl.options[i].value==defaultvalues[x]) 
	      	   {
                     ctrl.options[i].selected=true
                     try { eval("change_"+ctrl.name+"()") } catch(e) {}
                 }
              }
	    }
           break;
        }
        case 'radio':	
        {
           var ctrltab = document.getElementsByName(x)
	    for (i=0;i<ctrltab.length;i++)
             if(ctrltab[i].value==defaultvalues[x]) 
	      {
                ctrltab[i].checked=true
                 try { eval("change_"+ctrltab[i].name+"()") } catch(e) {}
             }
           break;
        }
        case 'text':     case 'hidden':        case 'textarea':	
        {
          var data = defaultvalues[x]
          setControlState(ctrl,data.charAt(0)=='_')
	   ctrl.value=data.replace('_','');
          break;
        }
      }
    }
  }
  // Lecture des informations depuis l'URL (une zone de saisie est désactivée 
  // lorsque la valeur commence par un _ (underscore) 
  var QS = new URLData()
  for(i=1;i<QS.length();i++)
  {
      ctrl = document.getElementById(QS.getItemName(i))
      if (ctrl!=null)
      {
        switch(ctrl.type)
        {
          case 'radio':	case 'select-one':	case 'checkbox':
          {
	     for (i=0;i<ctrl.length;i++)
            {
              if(ctrl.options[i].value==defaultvalues[x]) 
	       {
                ctrl.options[i].selected=true
                eval("change_"+ctrl.name+"()")
              }
            }
/*	     for (var j=0;j<ctrl.length;j++)
           {
              if(ctrl.options[j].value==QS.getItemValue(i)) 
	       {
                ctrl.options[j].selected=true
		  
		  var functionname  = "change_"+ctrl.name
                eval("if(typeof("+functionname+")!='undefined') "+functionname+"()")
              }
            }
/**/          }
          case 'text':     case 'textarea':	 case 'hidden':  
          {
            var data = QS.get(QS.getItemName(i),'')
            setControlState(ctrl,data.charAt(0)=='_')
    	     ctrl.value=data.replace('_','');
            break;
          }
        }
      }
  }
}
/************************************************************************************/
/* Affiche ou cache la séléction en cas d'erreur */
/************************************************************************************/
function SetQuestionStateError(State,Fieldname2Check,ErrorMessageID,replacewhat,replaceby)
{
  var text2replace
  if (replacewhat!='undefined')
    text2replace = MSGERR[ErrorMessageID].replace(replacewhat,replaceby)
  
  document.getElementById(Fieldname2Check+"_BOX").className = State?"BOX_REQ":"BOX"
  document.getElementById(Fieldname2Check+"_ERR").innerHTML= State?text2replace:""
}
/************************************************************************************
 Détermine si la date est valide
************************************************************************************/
function IsNotValidDate(Fieldname2Check)
{
    var ret =false
    if(!isVisible(document.getElementById(Fieldname2Check+"_BOX"))) return false
    var ctrl = document.getElementById(Fieldname2Check)
    if (ctrl.value!="")
    {
      var pivot = 30;
      ctl = /^(\d\d?)(\/|-|\.)(\d\d?)(\/|-|\.)(\d\d)(\d\d)?$/;
      var tab = ctrl.value.match(ctl);
      if (!tab) 
        ret=true
      else 
      {
        if ((tab.length == 6) || (!tab[6]))
          tab[5] = ((tab[5] < pivot) ? 2000 : 1900) + parseInt(tab[5],10);
        else 
          tab[5] = parseInt(tab[5].concat(tab[6]),10);
        var unedate = new Date(tab[5], parseInt(tab[3],10)-1, tab[1]);
        ret= !((unedate.getFullYear() == tab[5]) && 
               (unedate.getMonth() == tab[3]-1) && 
               (unedate.getDate() == tab[1]));
      }
    }
    SetQuestionStateError(ret,Fieldname2Check,6);
    return ret
}
/************************************************************************************
 Détermine si l'adresse email fournie est valide
************************************************************************************/
function IsNotValidEmail(Fieldname2Check)
{
	function internal(Fieldname2Check)
	{
		var ctrl = document.getElementById(Fieldname2Check)
		if (ctrl.value.length==0) return false
              
 		var emailPat=/^(.+)@(.+)$/;
		var specialChars="\\(\\)éèêëàâäçùûüìîïÉÈÊËÀÂÄÇÙÛÜÏ<>@,;:¦#°§¬|+{}'`´~/!¨$£^*%&=?¢\\\\\\\"\\.\\[\\]";
		var validChars="\[^\\s" + specialChars + "\]";
		var quotedUser="(\"[^\"]*\")";
		var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;
		var atom=validChars + '+';
		var word="(" + atom + "|" + quotedUser + ")";
		var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
		var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$");
		var matchArray=ctrl.value.match(emailPat);
		if (matchArray==null) return true;
		var user=matchArray[1]
		var domain=matchArray[2]	
		if (user.match(userPat)==null) return true; 
		var IPArray=domain.match(ipDomainPat)
		if (IPArray!=null)
		{
			for (var i=1;i<=4;i++) if (IPArray[i]>255) return true; 
			return false;
		}
		var domainArray=domain.match(domainPat)
		if (domainArray==null) return true;
		var atomPat=new RegExp(atom,"g")
		var domArr=domain.match(atomPat)
		var len=domArr.length
		if (domArr[domArr.length-1].length<2 || 
	           domArr[domArr.length-1].length>4) return true;
		if (len<2) return true;
	}
       
  	if(!isVisible(document.getElementById(Fieldname2Check+"_BOX"))) return false
	var ret = internal(Fieldname2Check)
	SetQuestionStateError(ret,Fieldname2Check,5);
	return ret
}
/************************************************************************************
 Détermine si c'est des lettres et des chiffres 
************************************************************************************/
function IsNotAlphaNumerical(Fieldname2Check)
{
  if(!isVisible(document.getElementById(Fieldname2Check+"_BOX"))) return false
  var ctrl = document.getElementById(Fieldname2Check)
  switch(ctrl.type)
  {
     case 'radio':	case 'select-one':	case 'checkbox':
     {
        return true; // IsAlphabetical() ici est une hérésie -> Erreur
     }
     case 'text':     case 'textarea':	case 'hidden':
     {
        var tab= ctrl.value.match(new 
            RegExp(/[a-zA-Z0-9áÁâÂàÀäÄãÃçéÉèÈêÊëËíÍìÌîÎïÏñÑóÓòÒôÒöÖõÕúÚùÙûÛýÝÿ\s]/g))
        var res = (tab!=null)?ctrl.value!=tab.join(""):true
        SetQuestionStateError(res,Fieldname2Check,4);
        return ctrl.value=='';
     }
  }
}
/************************************************************************************
 Détermine si le champ est vide 
************************************************************************************/
function IsUnderMinSize(Fieldname2Check,minsize)
{
  var ctrl = document.getElementById(Fieldname2Check)
  // Champ invisible -> on ne valide pas 
  if(!isVisible(document.getElementById(Fieldname2Check+"_BOX"))) return false
  if (ctrl.value.length>0 && ctrl.value.length<minsize)
  {
    SetQuestionStateError(true,Fieldname2Check,7,"%d",minsize);
    return true // erreur: taille minimum pas atteinte
  }
  SetQuestionStateError(false,Fieldname2Check,7);
  return false // OK!
}
/************************************************************************************
 Détermine si c'est uniquement des lettres
************************************************************************************/
function IsNotAlphabetical(Fieldname2Check)
{
  if(!isVisible(document.getElementById(Fieldname2Check+"_BOX"))) return false
  var ctrl = document.getElementById(Fieldname2Check)
  switch(ctrl.type)
  {
     case 'radio':	case 'select-one':	case 'checkbox':
     {
        return true; // IsAlphabetical() ici est une hérésie -> Erreur
     }
     case 'text':     case 'textarea':	case 'hidden':
     {
        var tab= ctrl.value.match(new 
               RegExp(/[a-zA-ZáÁâÂàÀäÄãÃçéÉèÈêÊëËíÍìÌîÎïÏñÑóÓòÒôÒöÖõÕúÚùÙûÛýÝÿ\s]/g))
        var res = (tab!=null)?ctrl.value!=tab.join(""):true
        SetQuestionStateError(res,Fieldname2Check,3);
        return ctrl.value=='';
     }
  }
}
/************************************************************************************
 Détermine si c'est un nombre 
************************************************************************************/
function IsNotNumber(ischeckfailed,Fieldname2Check,minsize)
{
  if(!isVisible(document.getElementById(Fieldname2Check+"_BOX"))) return false
  var ctrl = document.getElementById(Fieldname2Check)
  if (minsize>0)
    if (ctrl.value.length<minsize) return false
  switch(ctrl.type)
  {
     case 'radio':	case 'select-one':	case 'checkbox':
     {
        return true; // IsNumber() ici est une hérésie -> Erreur
     }
     case 'text':     case 'textarea':	case 'hidden':
     {
        var tab = ctrl.value.match(new RegExp(/[0-9]+[,]?[0-9]+/g))
        var res = (tab!=null)?tab.join("").length:0
        result = res==ctrl.value.length
        SetQuestionStateError(!result,Fieldname2Check,2);
	 return !result
     }
  }
}
/************************************************************************************
 Retourne si le ctrl est visible ou pas
************************************************************************************/
function isVisible(ctrl)
{
   if (ctrl.style.visibility=='hidden')
   {
     var ctl = document.getElementById(ctrl.id.replace('_BOX','')) 
     switch(ctl.type)
     {
       case 'radio':	case 'checkbox':
       { 
         
	  break;
       }
       case 'select-one':
       { 
         
	  break;
       }
       case 'text':     case 'textarea':	case 'hidden':
       {
          ctl.value=""
	   break;
       }
     }
     return false
   } else return true
}
/************************************************************************************
 Détermine si le champ est vide 
************************************************************************************/
function IsEmptyField(Fieldname2Check)
{
  var ctrl = document.getElementById(Fieldname2Check)
 if(!isVisible(document.getElementById(Fieldname2Check+"_BOX"))) return false
  switch(ctrl.type)
  {
     case 'checkbox': 
     case 'radio':		
     {
	SetQuestionStateError(getCheckedField(ctrl.id)[0]=='',Fieldname2Check,1);
	return getCheckedField(ctrl.id)[0]==''
     }
     case 'select-one': 	
     {
	SetQuestionStateError(getSelectedField(ctrl.id)[0]=='',Fieldname2Check,1);
	return getSelectedField(ctrl.id)[0]==''       
     }
     case 'text':     	case 'textarea':	
     case 'password':	case 'hidden':		
     {
        SetQuestionStateError(ctrl.value=='',Fieldname2Check,1);
        return ctrl.value==''
     }
  }
}
/************************************************************************************
 Cache ou rend visible un élément du formulaire 
************************************************************************************/
function setVisibility(ctrlname,state)
{
  var ctrl = document.getElementById(ctrlname)
  if (ctrl!=null) {
    var ctrl_ERR = document.getElementById(ctrlname.replace('_BOX','_ERR'))
    if (state) {
       ctrl.style.display='block'
       ctrl.style.visibility='visible'
       if (ctrl_ERR!=null) ctrl_ERR.style.visibility='visible'
    } else {
       ctrl.style.display='none'
       ctrl.style.visibility='hidden'
       if (ctrl_ERR!=null) ctrl_ERR.style.visibility='hidden'
    }
  }
}
/******************************************************************************************************/
/* retourne un tableau avec la liste de tous les valeures qui sont sélectionnées 
/* ou retourne rien si aucune valeure 
/* Utilisable pour les combobox, listbox et listbox mulitples
/* Combobox: 		Testé OK
/* Listbox simple: 	Pas testé
/* Listbox multiple:	Pas testé
/******************************************************************************************************/
function getSelectedField(ctrlid) {
	var tab = new Array()
	var ctx = document.getElementById(ctrlid)
	tab.push(ctx.value)
	return tab
}
/******************************************************************************************************/
/* retourne un tableau avec la liste de tous les valeures qui sont checkée (dans un radio ou checkbox) 
/* ou retourne rien si aucune valeure 
/* 
/* Utilisable pour les Radioboutons et checkboxes
/******************************************************************************************************/
function getCheckedField(ctrlid) {
	var tab = new Array()
	var ctx = document.getElementsByName(ctrlid)
	for (var i=0;i<ctx.length;i++)
	{
		if (ctx[i].checked) {
			tab.push(ctx[i].value) }
	}
	if (tab.length==0) tab.push("")
	return tab
}
function hideSubmit() {
  var submitRow = document.getElementById('rowValidate');
  var waitingRow = document.getElementById('rowWaiting');
  if(submitRow!=undefined && waitingRow!=undefined) {
    submitRow.style.display='none';
    waitingRow.style.display='inline';
  }
}
function validateFormFields ()
{
  var checkfail = false
  for(i=0;i<validation.length;i++)
  {
    var qfail=false
    if (validation[i][0]!='') {
      //** test si le champ est requis
      if(validation[i][1]==true) qfail=qfail | IsEmptyField(validation[i][0])
      if (qfail==false) {
	 // test de la taille minimum 
 	 if (validation[i][4]>0) 		                  
           checkfail=checkfail|IsUnderMinSize(validation[i][0],validation[i][4]);
        {
	   if 	(validation[i][3]==true) {
            checkfail=checkfail|eval("validate_"+validation[i][0]+"('"+validation[i][0]+"')")
          } else {
            switch(validation[i][2])
            {
              case 1: {checkfail=checkfail|IsNotNumber(checkfail, validation[i][0],validation[i][4]); break}
              case 2: {checkfail=checkfail|IsNotAlphabetical(validation[i][0]); break}
              case 3: {checkfail=checkfail|IsNotAlphaNumerical(validation[i][0]); break}
              case 4: {checkfail=checkfail|IsNotValidEmail(validation[i][0]); break}
              case 5: {checkfail=checkfail|IsNotValidDate(validation[i][0]); break}
            }          
          }
        }
      }
    }
    checkfail = checkfail | qfail
  }
  return checkfail ;
}
function  SubmitSurvey(submitonly) {
  if (validateFormFields()) alert(MSGERR[0])
  else {
	//masquer le bouton pour éviter double submit :
	hideSubmit();
    // Formulaire valide! -> on le submit
    // Création du champ CreationDate pour la date d'envoi du formulaire
 
    if (submitonly==false) {	
      var querystring=location.search.substring(1,location.search.length);
      // les données des onbjets désactivées ne sont pas sauvegardés -> on les active au 
      // submit pour les sauvegarder.
      for (var i=0;i<document.forms[0].elements.length;i++)
        if(document.forms[0].elements[i].disabled==true)
          document.forms[0].elements[i].disabled=false
      document.forms[0].action='/web/assura/contenu/contactmanager.nsf/OnSubmitAgent?OpenAgent&'+querystring
      document.forms[0].name='formular'
      document.forms[0].id='formular'
      document.forms[0].method='post'
    }
    else  {
       document.forms[0].action='/names.nsf?Login&L=F'
	var url = document.forms[0].RedirectTo.value
	document.forms[0].RedirectTo.value = url.replace('&login','')
       document.forms[0].name='$$LoginPage'
    } 
    document.forms[0].submit()
  }
}
/*fonction qui récupère un paramètre d'url , gup = get URL parameter*/
function gup( name ) {
  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexS = "[\\?&]"+name+"=([^&#]*)";
  var regex = new RegExp( regexS );
  var results = regex.exec( window.location.href );
  if( results == null )
    return "";
  else
    return results[1]; 
 }
/* pour ajouter des 0 devant un nombre */
function zeroPad(num,count) {
var numZeropad = num + '';
while(numZeropad.length < count) {
numZeropad = "0" + numZeropad; }
return numZeropad;
}
/*fonction qui teste si le caractere tapé est numérique*/
function isNumeric(e)  {
var e = window.event || e ;
var wc = e.which;
var kc = e.keyCode ;
var code = e.which ||e.keyCode ;
var syntax="[0-9]";
var reg = new RegExp(syntax);
var chr =String.fromCharCode(code);
if((wc==0 & kc==39)|(wc==0 & kc==37)|(wc==0 & kc==46)|(kc==8)|(kc==9))
    return true;
    return(reg.test(chr));
}
/*fonction qui teste si le ctrl est un entier numérique*/
function IsNotInteger(ctrlName){
       if(!isVisible(document.getElementById(ctrlName+"_BOX"))) return false
       var ctrl = document.getElementById(ctrlName)
       var tab = ctrl.value.match(new RegExp(/[0-9]+[0-9]+/g))
       var res = (tab!=null)?tab.join("").length:0
       result = res==ctrl.value.length
       SetQuestionStateError(!result,ctrlName,2);
       return !result
   }
