// *** FillForm *** Remplissage du Formulaire

function FillForm(data){

var arg=FillForm.arguments;
var NbArg=arg.length;
var NumArg;


for(NumArg=1; NumArg<NbArg; )
    {
      var type =""+arg[NumArg++];  // [T,R,S]
      var val =arg[NumArg++];  // valeur à remplir
      var chp =arg[NumArg++];  // champ de formulaire

   switch (type) {
   case "R":
	if ((val>"") || (val==0)){
		for(i=0; i<chp.length; i++){ 
 		if(chp[i].value==val) {
		(chp[i].checked=1);}
		}
	}
       break; 
   case "T":
	if (val>""){ 
 		chp.value=val;
	}
       break;
   case "N":
	if ((val>"") && (parseInt(val)>0)){ 
 		chp.value=val;
 	}	
       break;    
   case "S":
	if (val>""){	
	var i;
	for(i=0; i<chp.options.length; i++)
    	{ 
    	if(chp.options[i].value==val) { chp.selectedIndex=i;}
    	}	
       //chp.options[chp.selectedIndex].value=val;
//       chp.selectedIndex=val;
       }
       break;    
   case "C":
	if ((val>"") && (val!="0")){
       chp.checked=1
       }
       break;         
   }
  }
return(0);

}
// *** TESTMAIL ***


function TestMail(champ){
var ret = 1;
var l = champ.length;
//return((l==0) ? 0 : -1); 
if (l==0){return(0);}
var mailPat,matchArray;
var specialChars = "\\(\\)<>àâèéêëîïôöùûç#$@,;:\\\\\\\"\\\\[\\]"
var validChars = "\[^\\s" + specialChars + "\]"
var atom = validChars + '+'

mailPat = new RegExp("^" + atom + "@" + atom +"\\."+ atom + "(\\." + atom +")*$");
matchArray = champ.match(mailPat); 

if (matchArray == null) {ret = -1;}
return(ret);
}

// *** TESTVALUE *** Teste borne/longueur d'un champ

function TestValue(data){

var arg=TestValue.arguments;
var NbArg=arg.length;
var NumArg;
var err="";
var t;
var lo;

for(NumArg=1; NumArg<NbArg; )
    {

      var type =""+arg[NumArg++];  // [BMax|BMin|LMax|LMin]
      var val =arg[NumArg++];  // valeur à controler
      var chp =arg[NumArg++];  // champ de formulaire
      var sErr=arg[NumArg++];  // msg si saisie invalide (ou nr)

   switch (type) {
   case "BMax":
       if (isNaN(chp.value) || (parseFloat(chp.value)>parseFloat(val))){err=sErr;}
       break; 
   case "BMin":
       if (isNaN(chp.value) || (parseFloat(chp.value)<parseFloat(val))){err=sErr;}
       break;
   case "LMax":
       lo = chp.value
       if ((lo.length)>parseInt(val)){err=sErr;}
       break;
   case "LMin":
       lo = chp.value
       if ((lo.length)<parseInt(val)){err=sErr;} 
       break;          
   } 
 
      if(err!="")
	  {
	    self.alert(err);
            chp.focus();
            break;
	  }
    }

return((err!="") ? -1:0);

}


// *** TESTDATE ***

function TestDate(champ)
{
var s=""+champ;
var ret,l,jj,mm,aa,t,n;

l=s.length;
if(l<6 || l>10) return((l==0) ? 0 : -1);

ret=0; jj=0; mm=0; aa=-1; t=0; n=0;

for(i=0; i<=l; i++)
    { if(i==l || (c=s.charAt(i))=='/')
	  { if(n==0) jj=t; else
	    if(n==1) mm=t; else
	    if(n==2) aa=t; else { ret=-1; break; }
	    n++;
	    t=0;
	  }
      else
      if(c>='0' && c<='9')
	  { t=t*10+(c-'0');
	  }
      else{ ret=-1;
	    break;
	  }
    }

if(!ret)
    { if(jj<1 || jj>31 || mm<1 || mm>12 ||
	 aa<0 || aa>2020 || (aa>99 && aa<1920))
	  { ret=-1;
	  }
      else{ if(aa<100) aa+=(aa<20) ? 2000 : 1900;
	    ret=(aa-1900)*360+(mm-1)*30+((jj>30)? 30:jj)-1;
	  }
    }

return(ret);
}


// *** TEST NUM ***

var _tn=0;
function TestNum(champ, fmt)
{
var ret=0;
var s=""+champ;
var i1,i2,c;

_tn=0;
i1=0;
i2=s.length;
//for(; i1<i2; i1++) { c=s.charAt(i1); if(c!=' ' && c!='\t') { break; } }
//for(; i2>i1; i2--) { c=s.charAt(i2-1); if(c!=' ' && c!='\t') { break; } }

if(i1<i2)
  {
    var MaxEntier;
    var MaxDeci;
    var NegOK=0;
    var NbEntier=0;
    var NbDeci=0;
    var iVirg=0;
    var i;
    var s2="";

    if(fmt<0)
	{ NegOK=1;
	  fmt=-fmt;
	}
    MaxEntier=fmt/10;
    MaxDeci  =fmt%10;

    for(i=i1; i<i2; i++)
	{ c=s.charAt(i);
	  if(c>='0' && c<='9')
	      { if(iVirg) { NbDeci++; if(NbDeci>MaxDeci) { ret=-3; break; } }
		else { NbEntier++; if(NbEntier>MaxEntier) { ret=-2; break; } }
	      }
	  else
	  if(c=='.' || c==',')
	      { if(iVirg) { ret=-1; break; }
		iVirg=i+1;
		c='.';
	      }
	  else
	  if(c=='-')
	      { if(!NegOK || i>i1) { ret=-4; break; }
	      }
	  else{ ret=-1;
		break;
	      }
	  s2+=c;
	}
    if(!ret)
	{ _tn=(iVirg) ? parseFloat(s2) : parseInt(s2);
	  ret=1;
	}
  }
return(ret);
}

function GetNum(champ, fmt)
{ TestNum(champ,fmt); return(_tn);
}


// *****************
// *** TEST FORM ***
// *****************

function TestForm(unused1)
{
var arg=TestForm.arguments;
var NbArg=arg.length;
var NumArg;
var ers="";
if(NbArg<5 || NbArg%4!=1)
    { return(0);
    }

for(NumArg=1; NumArg<NbArg; )
    {
      var i;
      var flag=0x0000;

      var fmt =""+arg[NumArg++];  // [N|D|T|S|R|C][xxx][*][!]
      var chp =arg[NumArg++];  // champ de formulaire
      var sNR =arg[NumArg++];  // msg si saisie nr
      var sErr=arg[NumArg++];  // msg si saisie invalide (ou nr)
      var type=fmt.charAt(0);

      i=fmt.indexOf("*", 0); // "*" = NR interdit
      if(i>=0)
	  { fmt=fmt.substr(0,i)+fmt.substr(i+1);
	    flag|=0x0001;
	  }

      i=fmt.indexOf("!", 0); // "!" = Set Focus sur chp si NR ou invalide
      if(i>=0)
	  { fmt=fmt.substr(0,i)+fmt.substr(i+1);
	    flag|=0x0002;
	  }
	  	  	  

      if(type=='E') // Email
	  {
	    //var fmt2=parseInt(fmt.substr(1));
	    t=TestMail(chp.value);
	    if(t<0)
		{ers=(sErr>"") ? sErr : sNR;
		}
	    else
	    if(t==0 && (flag & 0x0001))
	        { ers=(sNR>"") ? sNR : sErr;
		}
	  }
      else
      if(type=='N') // text/textarea numerique
	  {
	    var fmt2=parseInt(fmt.substr(1));
	    t=TestNum(chp.value, fmt2);
	    if(t<0)
		{ ers=(sErr>"") ? sErr : sNR;
		}
	    else
	    if(t==0 && (flag & 0x0001))
	        { ers=(sNR>"") ? sNR : sErr;
		}
	  }
      else
      if(type=='D') // text Date
	  { t=TestDate(chp.value);
	    if(t<0)
		{ ers=(sErr>"") ? sErr : sNR;
		}
	    else
	    if(t==0 && (flag & 0x0001))
	        { ers=(sNR>"") ? sNR : sErr;
		}
	  }
      else
      if(type=='T') // text/textarea string
	  { if(""+chp.value=="")
		{ if(flag & 0x0001) ers=(sNR>"") ? sNR : sErr;
		}
	  }
      else
      if(type=='S') // <select> avec codif numerique
	  {
	    if(flag & 0x0001)
		{ if(chp.selectIndex<0 ||
		     chp.options[chp.selectedIndex].value==0  ||
		     chp.options[chp.selectedIndex].value=="")
		      {
			ers=(sNR>"") ? sNR : sErr;
		      }
		}
	  }
      else
      if(type=='C') // text/textarea string
	  { if(!(chp.checked==true))
		{ if(flag & 0x0001) ers=(sNR>"") ? sNR : sErr;
		}
	  }
      else
      if(type=='R') // Radios avec codif numerique
	  {
	    if(flag & 0x0001)
		{
		  for(i=0; i<chp.length; i++)
		      { if(chp[i].checked==1) break;
		      }

		  if(i==chp.length)
		      { ers=(sNR>"") ? sNR : sErr;
		      }
		}
	  }
      else{ continue;
	  }

      if(ers!="")
	  {
	    self.alert(ers);
	    if((flag & 0x02) &&
	       (type=='N' || type=='D' || type=='T' || type=='S' || type=='E'))
		{ chp.focus();
		  if(type!='S') chp.select();
		}
	    break;
	  }
    }

return((ers!="") ? -1:0);
}


