//#17.00.03.00 WDLIB.JS
//VersionVI: 30F170061h
// Le seul support technique disponible pour cette librairie est
// accessible a travers le service "Assistance Directe".


// Liste des messages d'erreurs qui peuvent etre affiches :
var sErreur=bPCSFR?"La valeur saisie est incorrecte.":"The entered value is incorrect.";
var sErreurMail=bPCSFR?"L'adresse email saisie ne correspond pas à une adresse email valide.":sErreur;
var sErreurMailMul=bPCSFR?"L'une des adresses emails saisies ne correspond pas à une adresse email valide.":sErreur;

var sPCSSaisie="";
var sPCSMon="";

var sMasqueJJ=bPCSFR?"JJ":"DD";
var sMasqueAAAA=bPCSFR?"AAAA":"YYYY";

function sJour(i)
{
	switch(i)
	{
		case 0: return STD_DIMANCHE;
		case 1: return STD_LUNDI;
		case 2: return STD_MARDI;
		case 3: return STD_MERCREDI;
		case 4: return STD_JEUDI;
		case 5: return STD_VENDREDI;
		case 6: return STD_SAMEDI;
		default: return "";
	}
}

function sMois(i)
{
	switch(i)
	{
		case 0: return STD_JANVIER;
		case 1: return STD_FEVRIER;
		case 2: return STD_MARS;
		case 3: return STD_AVRIL;
		case 4: return STD_MAI;
		case 5: return STD_JUIN;
		case 6: return STD_JUILLET;
		case 7: return STD_AOUT;
		case 8: return STD_SEPTEMBRE;
		case 9: return STD_OCTOBRE;
		case 10: return STD_NOVEMBRE;
		case 11: return STD_DECEMBRE;
		default: return "";
	}
}

///////////////////////////////////////////////////////////////////////
function bIsNetscape()
{
	return (navigator.appName=="Netscape")
}
///////////////////////////////////////////////////////////////////////
var b=false;
function bIsExplorer()
{
	return (navigator.appName=="Microsoft Internet Explorer")
}
///////////////////////////////////////////////////////////////////////
function bEstLettreSansAccent(c)
{
	return (((c>="a")&&(c<="z"))||((c>="A")&&(c<="Z")));
}
///////////////////////////////////////////////////////////////////////
function bEstAAvecAccent(c)
{
	return (c=="á")||(c=="à")||(c=="â")||(c=="ä");
}
///////////////////////////////////////////////////////////////////////
function bEstEAvecAccent(c)
{
	return (c=="é")||(c=="è")||(c=="ê")||(c=="ë");
}
///////////////////////////////////////////////////////////////////////
function bEstIAvecAccent(c)
{
	return (c=="ï")||(c=="î");
}
///////////////////////////////////////////////////////////////////////
function bEstOAvecAccent(c)
{
	return (c=="ö")||(c=="ô");
}
///////////////////////////////////////////////////////////////////////
function bEstUAvecAccent(c)
{
	return (c=="ü")||(c=="ù")||(c=="û");
}
///////////////////////////////////////////////////////////////////////
function bEstCCedille(c)
{
	return (c=="ç");
}
///////////////////////////////////////////////////////////////////////
function bEstLettreAvecAccent(c)
{
	return bEstAAvecAccent(c)||bEstEAvecAccent(c)||bEstIAvecAccent(c)||bEstOAvecAccent(c)||bEstUAvecAccent(c)||bEstCCedille(c);
}
///////////////////////////////////////////////////////////////////////
function bIsLetter(c)
{
	return bEstLettreSansAccent(c)||bEstLettreAvecAccent(c);
}
///////////////////////////////////////////////////////////////////////
function sMajuscule(c,s)
{
	if(!(s&&bEstLettreAvecAccent(c))) return c.toUpperCase();
	if(bEstAAvecAccent(c)) return "A";
	if(bEstEAvecAccent(c)) return "E";
	if(bEstIAvecAccent(c)) return "I";
	if(bEstOAvecAccent(c)) return "O";
	if(bEstUAvecAccent(c)) return "U";
	if(bEstCCedille(c)) return "C";
}
///////////////////////////////////////////////////////////////////////
function bIsDigit(c)
{ return ((c>="0")&&(c<="9")) }
///////////////////////////////////////////////////////////////////////
function bIsSepTel(c)
{ return ((c==" ")||(c=="/")||(c=="\\")||(c==".")) }
///////////////////////////////////////////////////////////////////////
function bIsSymbol(c)
{ return ((c==",")||(c==".")||(c=="+")||(c=="-")||(c==" ")||(c=="*")||(c=="/")) }
///////////////////////////////////////////////////////////////////////
function bIsControl(c)
{ return (c<" ") }
///////////////////////////////////////////////////////////////////////
function bIsSigne(c)
{ return (c=="+")||(c=="-") }
///////////////////////////////////////////////////////////////////////
function bIsSepDec(c)
{ return ((c==".")||(c==",")) }

///////////////////////////////////////////////////////////////////////
function bEspNS()
{
	return bIsNetscape()&&(typeof (_WW_SEPMILLIER_)!="undefined")&&(_WW_SEPMILLIER_.charCodeAt(0)==160)
}

///////////////////////////////////////////////////////////////////////
function GetChp(evt)
{
	if(evt.srcElement!=null) return evt.srcElement;
	if(evt.target!=null) return evt.target;
	return null;
}

///////////////////////////////////////////////////////////////////////
function GetCar(evt)
{
	var k=(evt.which!=null)?evt.which:evt.keyCode;
	if(k!=null) return String.fromCharCode(k);
	return "";
}

///////////////////////////////////////////////////////////////////////
function ValRetIE(evt,test)
{
	if(test||(evt.keyCode==13))
	{
		return evt.keyCode;
	}
	return test;
}

///////////////////////////////////////////////////////////////////////
function ValRet(evt,test)
{
	if(bIsNetscape()) return test||bIsControl(GetCar(evt));
	if(bIsExplorer()) return evt.returnValue=ValRetIE(evt,test);
	return true;
}

///////////////////////////////////////////////////////////////////////
function GetPositionCaret(chp)
{
	var p=0;
	if(document.selection)
	{
		chp.focus();
		var s=document.selection.createRange();
		s.moveStart('character',-chp.value.length);
		p=s.text.length;
	}
	else if(chp.selectionStart||(chp.selectionStart=='0')) p=chp.selectionStart;
	return p;
}

///////////////////////////////////////////////////////////////////////
function SetPositionCaret(chp,pos)
{
	if(chp.setSelectionRange)
	{
		chp.focus();
		chp.setSelectionRange(pos,pos);
	}
	else if(chp.createTextRange)
	{
		var s=chp.createTextRange();
		s.collapse(true);
		s.moveEnd('character',pos);
		s.moveStart('character',pos);
		s.select();
	}
}

///////////////////////////////////////////////////////////////////////
function GetSel(chp)
{
	if(document.selection)
	{
		chp.focus();
		var s=document.selection.createRange();
		return s.text;
	}
	if(chp.selectionStart||(chp.selectionStart=='0')) return chp.value.substring(chp.selectionStart,chp.selectionEnd);
	return "";
}

///////////////////////////////////////////////////////////////////////
function GetDebSel(chp)
{
	if(document.selection)
	{
		chp.focus();
		var s=document.selection.createRange();
		var l=s.text.length;
		s.moveStart('character',-chp.value.length);
		return s.text.length-l;
	}
	if(chp.selectionStart||(chp.selectionStart=='0')) return chp.selectionStart;
	return 0;
}

///////////////////////////////////////////////////////////////////////
function GetPositionCaretDetSel(ch)
{
	var j=GetPositionCaret(ch);
	var l=GetSel(ch).length;
	if((l>0)&&(!ch.readOnly))
	{
		var ds=GetDebSel(ch);
		ch.value=ch.value.substring(0,ds)+ch.value.substring(ds+l,ch.value.length);
		j=ds;
		SetPositionCaret(ch,j);
	}
	return j;
}

///////////////////////////////////////////////////////////////////////
function remplacePos(s,i,r)
{
	return s.substring(0,i)+r+s.substring(i+1,s.length);
}

///////////////////////////////////////////////////////////////////////
function remplace(s,c,r,d)
{
	var i=s.indexOf(c,d);
	if(i<0) return s;
	return s.substring(0,i)+r+s.substring(i+c.length,s.length);
}

///////////////////////////////////////////////////////////////////////
function remplaceTout(s,c,r)
{
	var i=0;
	while((i=s.indexOf(c))>=0) s=remplacePos(s,i,r);
	return s;
}

///////////////////////////////////////////////////////////////////////
function InserePos(s,i,r)
{
	return s.substring(0,i)+r+s.substring(i,s.length);
}

///////////////////////////////////////////////////////////////////////
function ExtraitDebutLimite(s,d,l)
{
	var f=s.indexOf(l,d);
	return s.substring(d,(f<0)?s.length:f);
}

///////////////////////////////////////////////////////////////////////
function CarMasqueDate(c)
{
	switch(c)
	{
		case "J":
		case "D":
		case "M":
		case "A":
		case "Y":
			return true;
		default:
			return false;
	}
}

///////////////////////////////////////////////////////////////////////
function ValLimiteMasque(v,m)
{
	var d=0;
	var f=0;
	switch(m)
	{
		case "AAAA":
		case "YYYY":
			f=9999;
			break;
		case "MM":
			d=1;
			f=12;
			break;
		case "JJ":
		case "DD":
			d=1;
			f=31;
			break;
		default:
			break;
	}
	return Math.max(Math.min(v,f),d);
}

///////////////////////////////////////////////////////////////////////
function RecupValMasqueDate(s,m,c)
{
	var d=0;
	if(c!=null)
	{
		var p=c.indexOf(m);
		if(p>=0) d=p;
	}
	return ValLimiteMasque(parseInt(s.substring(d,Math.min(s.length,d+m.length)),10),m);
}

///////////////////////////////////////////////////////////////////////
function ValMois(m)
{
	var i=0;
	for(i=0;i<12;i++) if(sMois(i).indexOf(m)>=0) return i+1;
	return 0;
}

///////////////////////////////////////////////////////////////////////
function RemplaceMasqueLimite(s,m,v)
{
	var x=""+ValLimiteMasque(v,m);
	var n=m.length-x.length;
	while(n-- >0) x="0"+x;
	return remplace(s,m,x);
}

///////////////////////////////////////////////////////////////////////
function init(evt,val,masque)
{
	var c=GetChp(evt);
	sPCSSaisie=c.value;
	if(c.value!="")
	{
		if(masque!=null)
		{
			var s=c.value;
			var p=0;
			var q=0;
			var d=0;
			var e=0;
			var l=masque.length;
			var n=s.length;
			var j=0;
			var m=0;
			var a=0;
			while((p<l)&&(q<n))
			{
				var x=masque.charAt(p);
				var y=masque.charAt(d);
				var by=CarMasqueDate(y);
				var f=(p==l-1);
				var bt=((f)||(by!=CarMasqueDate(x))||(by&&(x!=y)));
				if(bt)
				{
					var t=masque.substring(d,p+(f?1:0));
					if(by)
					{
						var u=ExtraitDebutLimite(s,e,x);
						switch(t)
						{
							case "AAAA":
								a=RecupValMasqueDate(u,t);
								break;
							case "JJ":
								j=RecupValMasqueDate(u,t);
								break;
							case "MMMM":
								m=ValMois(u);
								break;
							default:
								break;
						}
						q+=u.length;
					}
					else q+=t.length;
					d=p;
					e=q;
				}
				p++;
				if((!by)&&(!bt)) q++;
			}
			c.value=RemplaceMasqueLimite(RemplaceMasqueLimite(RemplaceMasqueLimite(val,"MM",m),sMasqueJJ,j),sMasqueAAAA,a);
		}
		return;
	}
	c.value=val;
	SetPositionCaret(c,0);
}

///////////////////////////////////////////////////////////////////////
function RecupMasqueLimite(s,m,p)
{

}

///////////////////////////////////////////////////////////////////////
function reinit(evt,val,masque,exp)
{
	var c=GetChp(evt);
	if(c.value==val) c.value="";
	if((masque!=null)&&(c.value!=""))
	{
		if(!VerifRegExp(c,exp)) return;
		var s=c.value;
		var d=new Date();
		d.setDate(RecupValMasqueDate(s,sMasqueJJ,val));
		d.setMonth(RecupValMasqueDate(s,"MM",val)-1);
		d.setFullYear(RecupValMasqueDate(s,sMasqueAAAA,val));
		c.value=RemplaceMasqueLimite(RemplaceMasqueLimite(remplace(remplace(masque,"JJJJ",sJour(d.getDay())),"MMMM",sMois(d.getMonth())),"JJ",d.getDate()),"AAAA",d.getFullYear());
	}
	if(c.value==sPCSSaisie) return;
	sPCSSaisie=c.value;
	var r="Firefox/";
	var p=navigator.userAgent.indexOf(r);
	if((bIsExplorer()||((p>=0)&&(parseInt(navigator.userAgent.substring(p+r.length,navigator.userAgent.length))>=2)))&&(c.onchange!=null)) c.onchange(evt);
}

///////////////////////////////////////////////////////////////////////
function GetAn(d)
{
	var y=d.getYear();
	if(y<1900) y+=1900;
	return y;
}

///////////////////////////////////////////////////////////////////////
function bSepDate(c)
{
	return c!=":";
}

///////////////////////////////////////////////////////////////////////
function ControleSaisie(s,m,d,sep)
{
	if(s.charAt(d+1)==sep) return s;
	var max=0;
	var c=m.charAt(d);
	var sm=false;
	if((c=="J")||(c=="D")) max=31;
	else if(sm=((c=="M")&&bSepDate(sep))) max=12;
	else if(c=="H") max=23;
	else if(((c=="M")&&(sep=":"))||(c=="S")) max=59;
	else if((c=="A")||(c=="Y"))
	{
		if(((d>0)&&(s.charAt(d-1)!=sep))||(s.length<=(d+2))||(s.charAt(d+2)==sep)) return s;
		var dat=new Date();
		var y=GetAn(dat);
		var ymin=y-99;
		var p=s.charAt(d);
		var mil=parseInt(p)*1000;
		if(((mil+999)>=ymin)&&(mil<=y)) return s;
		var sie=Math.floor(y/100);
		return s.substring(0,d)+""+(sie-((((sie*100)+(parseInt(p)*10))>y)?1:0))+s.charAt(d)+s.substring(d+3,s.length);
	}
	else return s;
	if(parseInt(s.charAt(d))*10>max) s=s.substring(0,d)+"0"+s.charAt(d)+s.substring(d+2,s.length);
	if(sm&&(s.indexOf("J")<0)&&(s.indexOf("D")<0))
	{
		var dj=Math.max(m.indexOf("JJ"),m.indexOf("DD"));
		if(dj>=0)
		{
			var j=parseInt(s.substring(dj,dj+2));
			if(j>29)
			{
				var md=parseInt(s.substring(d,d+2));
				var l=31;
				switch(md)
				{
					case 2:
						l=29;
						break;
					case 4:
					case 6:
					case 9:
					case 11:
						l=30;
						break;
					default:
						break;
				}
				if(j>l) s=s.substring(0,dj)+l+s.substring(dj+2,s.length);
			}
		}
	}
	return s;
}

///////////////////////////////////////////////////////////////////////
function EffaceMasque(s,sep)
{
	var r="";
	var i=0;
	var c="";
	var m="";
	for(i=0;i<s.length;i++)
	{
		var x=s.charAt(i);
		var b=x==sep;
		if(!b) if(bIsDigit(x)) c+=x;else m+=x;
		if(b||(i==s.length-1))
		{
			if(m=="") r+=c;
			else
			{
				var v="00";
				if(bSepDate(sep))
				{
					var d=new Date();
					if((m.charAt(0)=="J")||(m.charAt(0)=="D")) v=((d.getDate()<10)?"0":"")+d.getDate();
					else if(m.charAt(0)=="M") v=((d.getMonth()<9)?"0":"")+(d.getMonth()+1);
					else if((m.charAt(0)=="A")||(m.charAt(0)=="Y"))
					{
						var a=GetAn(d);
						if(c.length+m.length==2) a=a%100;
						v=((a<10)?"0":"")+a;
					}
				}
				if(v.substring(0,c.length)==c) r+=v;
				else
				{
					r+=c;
					var j=0;
					for(j=0;j<m.length;j++) r+="0";
				}
			}
			c=m="";
			if(b) r+=x;
		}
	}
	return r;
}

///////////////////////////////////////////////////////////////////////
function CompleteSaisie(evt,m,sep,em)
{
	var car=GetCar(evt);
	var ch=GetChp(evt);
	var bp=(car=="+");
	var bi=(bp||(car=="-"))&&bSepDate(sep)&&bIsDigit(ch.value.charAt(0));
	var res=true;
	if(bIsNetscape())
	{
		res=(bi||bIsDigit(car)||(car==sep)||bIsControl(car));
		if((!res)||bIsControl(car)) return res;
	}
	if(bIsExplorer())
	{
		evt.returnValue=ValRetIE(evt,bi||bIsDigit(car)||(car==sep));
		if(!evt.returnValue||(evt.keyCode==13)) return res;
	}
	if(ch.readOnly) return res;
	var j=bi?0:GetPositionCaretDetSel(ch);
	if(bi) ch.value=_JDJ(ch.value,m,bp?1:(-1));
	else
	{
		var i=0;
		var s=m;
		var d=0;
		if((ch.value.charAt(j)==sep)&&(j>0)&&(m.charAt(j)==sep)&&bIsDigit(ch.value.charAt(j-1))) j++;
		var jd=j;
		while(i<Math.max(jd+1,ch.value.length))
		{
			var c=((i==jd)&&(bIsDigit(car)||(i>ch.value.length)))?car:ch.value.charAt(i);
			if(bIsDigit(c))
			{
				var u=0;
				for(u=d;u<s.length;u++)
					if((s.charAt(u)!=sep)&&(!bIsDigit(s.charAt(u))))
				{
					s=remplacePos(s,u,c);
					break;
				};
			}
			var b=(ch.value.charAt(i)==sep);
			if(i==jd)
			{
				var t=s;
				s=ControleSaisie(s,m,d,sep);
				var k=d+1;
				while((k<s.length)&&(s.charAt(k)!=t.charAt(k)))
				{
					if((!b)&&((i+1)<ch.value.length)&&(ch.value.charAt(i+1)!=sep)) i++;
					j++;
					k++;
				}
			}
			if(b&&((d=s.indexOf(sep,d))>=0)) d++;
			i++;
		}
		ch.value=em?EffaceMasque(s,sep):s;
		if(car!=sep) j++;
		if(ch.value.charAt(j)==sep) j++;
	}
	SetPositionCaret(ch,j);
	if(bIsExplorer) evt.returnValue=false;
	return false;
}

///////////////////////////////////////////////////////////////////////
function SelectAll(ch)
{
	if(ch.setSelectionRange)
	{
		ch.setSelectionRange(0,ch.value.length);
		ch.selectionEnd=ch.value.length;
	}
	else if(ch.createTextRange)
	{
		var s=ch.createTextRange();
		s.collapse(true);
		s.moveStart('character',0);
		s.moveEnd('character',ch.value.length);
		s.select();
	}
}

///////////////////////////////////////////////////////////////////////
function initNombre(evt,m,b,s)
{
	var ch=GetChp(evt);
	var r=__initNombre(ch.value,m,b,s);
	ch.value=r[0];
	if(r[1]) sPCSMon=r[1];
	SelectAll(ch);
}

function __initNombre(s,m,b,y)
{
	var sep;
	if(b)
	{
		var f=s.length-1;
		while((f>=0)&&(!bIsDigit(s.charAt(f)))) f--;
		sep=s.substring(++f,s.length);
		s=s.substring(0,f);
		if((y!=null)&&(sep.length==0)) sep=y;
	}
	if(_WW_SEPMILLIER_!="")
	{
		s=remplaceTout(s,_WW_SEPMILLIER_,"");
		if(bEspNS()) s=s.replace(/ /g,"");
	}
	return [s,sep];
}

//////////////////////////////////////////////////////////////////////
function PosOuFin(s,c)
{
	var p=s.indexOf(c);
	return (p<0)?s.length:p;
}

///////////////////////////////////////////////////////////////////////
function reinitNombre(evt,m,b)
{
	var ch=GetChp(evt);
	ch.value=__reinitNombre(ch.value,m,b,sPCSMon);
}

function __reinitNombre(s,m,b,sep)
{
	var v=PosOuFin(s,_WW_SEPDECIMAL_);
	var w=PosOuFin(m,_WW_SEPDECIMAL_);
	if(w==m.length)
	{
		if(v!=s.length) s=s.substring(0,v);
	}
	else if((s.length-v)>(m.length-w)) s=s.substring(0,v+(m.length-w));
	if((_WW_SEPMILLIER_!="")&&(v>=4))
	{
		var n=0;
		var i=v;
		while(i-- >0)
		{
			w--;
			if(bIsDigit(s.charAt(i))&&(w>0)&&(m.charAt(w)==" "))
			{
				s=InserePos(s,i+1,_WW_SEPMILLIER_);
				w--;
			}
		}
	}
	if(s=="") s="0";
	if(_WW_SEPDECIMAL_!="")
	{
		if(m.charAt(w=PosOuFin(m,_WW_SEPDECIMAL_))==_WW_SEPDECIMAL_)
		{
			v=PosOuFin(s,_WW_SEPDECIMAL_);
			if(s.charAt(v)!=_WW_SEPDECIMAL_) s+=_WW_SEPDECIMAL_;
			while(w++ <m.length) if(++v>s.length) s+="0";
		}
	}
	if(b) s+=sep;
	return s;
}

///////////////////////////////////////////////////////////////////////
function VerifSaisieNombre(evt,m)
{
	var car=GetCar(evt);
	if(bIsControl(car)) return true;
	var ch=GetChp(evt);
	var res=true;
	var me=0;
	var md=0;
	var i=0;
	while((i<m.length)&&(!bIsSepDec(m.charAt(i)))) if(bIsDigit(m.charAt(i++))) me++;
	if(bIsSepDec(m.charAt(i))) while(++i<m.length) if(bIsDigit(m.charAt(i))) md++;
	var p=GetPositionCaretDetSel(ch)
	var v=ch.value.indexOf(_WW_SEPDECIMAL_);
	if(bIsDigit(car))
	{
		var b=(v<0)||(p<=v);
		var d=b?0:(v+1);
		var f=(b&&(v>=0))?v:(ch.value.length);
		var n=0;
		for(i=d;i<f;i++) if(bIsDigit(ch.value.charAt(i))) n++;
		res=n<(b?me:md);
	}
	else if(bIsSepDec(car))
	{
		if(res=((v<0)&&(md>0)))
		{
			var j=0;
			for(i=0;i<p;i++) if(bIsDigit(ch.value.charAt(i))) j++;
			if((res=((j>0)&&(j<=me)&&((ch.value.length-p)<=md)))&&(car!=_WW_SEPDECIMAL_))
			{
				ch.value=InserePos(ch.value,p,_WW_SEPDECIMAL_);
				SetPositionCaret(ch,p+1);
				res=false;
			}
		}
	}
	else if(car=="-") res=(ch.value.indexOf("-")<0)&&(p==0)&&(m.charAt(0)=="+");
	else res=false;
	return ValRet(evt,res);
}

///////////////////////////////////////////////////////////////////////
function NewNav()
{
	return (parseInt(navigator.appVersion)>=4)
}


///////////////////////////////////////////////////////////////////////
function RegExpOK(s,e)
{
	if(NewNav())
	{
		r=new RegExp(e);
		if(bEspNS()) s=remplaceTout(s," ",_WW_SEPMILLIER_);
		return (s=="")||r.test(s);
	}
	return true;
}

///////////////////////////////////////////////////////////////////////
function VerifRegExp(Champ,sRegExp,b)
{
	if((!Champ.readOnly)&&NewNav())
	{
		if(!RegExpOK(Champ.value.substring(0,Champ.value.length-(b?sPCSMon.length:0)),sRegExp))
		{
			if(bIsExplorer()) Champ.style.color=0xff0000;
			alert((sRegExp.indexOf("|fr")<0)?sErreur:((sRegExp.indexOf(";")<0)?sErreurMail:sErreurMailMul));
			Champ.focus();
			return false;
		}
		else if(bIsExplorer()&&(Champ.style.color=="#ff0000")) Champ.style.color=0x000000;
	}
	return true;
}

///////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////
// handler pour le masque "tout en majuscules" :
function ToutEnMaj(evt,s)
{
	var car=GetCar(evt);
	var p;
	var ch=GetChp(evt);
	if((evt.preventDefault!=null)&&bIsLetter(car))
	{
		ch=GetChp(evt);
		p=GetPositionCaretDetSel(ch);
		if((ch.maxLength<0)||(ch.value.length<ch.maxLength))
		{
			ch.value=InserePos(ch.value,p,sMajuscule(car,s));
			SetPositionCaret(ch,p+1);
		}
		evt.preventDefault();
		return false;
	}
	else if(evt.keyCode!=null) evt.keyCode=sMajuscule(car,s).charCodeAt(0);
	return true;
}

///////////////////////////////////////////////////////////////////////

function ToutEnMajSansAccent(evt)
{
	return ToutEnMaj(evt,true);
}

///////////////////////////////////////////////////////////////////////

function ToutEnMin(evt)
{
	var car;

	if(bIsNetscape())
	{
		car=String.fromCharCode(evt.which);
		if((car>='A')&&(car<='Z'))
		{
			evt.which=escape(car.toLowerCase());
			evt.target.handleEvent(evt);
			//			return false;
		}
	}
	if(bIsExplorer())
	{
		car=String.fromCharCode(evt.keyCode);
		evt.keyCode=car.toLowerCase().charCodeAt(0);
	}
	return true;
}

///////////////////////////////////////////////////////////////////////

function Lettre(evt)
{
	var car;

	if(bIsNetscape())
	{
		car=String.fromCharCode(evt.which);
		// on accepte la touche si c'est bien une lettre :
		return bIsLetter(car)||bIsControl(car);
	}
	if(bIsExplorer())
	{
		car=String.fromCharCode(evt.keyCode);
		// on accepte la touche si c'est bien une lettre :
		evt.returnValue=ValRetIE(evt,bIsLetter(car));
	}

	return true;
}

///////////////////////////////////////////////////////////////////////

function PremiereLettreMaj(evt)
{
	var car=GetCar(evt);
	var ch=GetChp(evt);
	var res=true;
	if((car!=(car=car.toUpperCase()))&&(GetPositionCaretDetSel(ch)==0))
	{
		ch.value=InserePos(ch.value,0,car);
		res=false;
		if(bIsExplorer()) evt.returnValue=res;
	}
	return res;
}

///////////////////////////////////////////////////////////////////////

function LettreChiffre(evt)
{
	var car;

	if(bIsNetscape())
	{
		car=String.fromCharCode(evt.which);
		return bIsLetter(car)||bIsDigit(car)||bIsControl(car);
	}
	if(bIsExplorer())
	{
		car=String.fromCharCode(evt.keyCode);
		evt.returnValue=ValRetIE(evt,bIsLetter(car)||bIsDigit(car));
	}
	return true;
}

///////////////////////////////////////////////////////////////////////

function Chiffre(evt)
{
	var car;

	if(bIsNetscape())
	{
		car=String.fromCharCode(evt.which);
		return (bIsDigit(car)||bIsControl(car));
	}
	if(bIsExplorer())
	{
		car=String.fromCharCode(evt.keyCode);
		evt.returnValue=ValRetIE(evt,bIsDigit(car));
	}

	return true;
}

///////////////////////////////////////////////////////////////////////

function LettreMaj(evt)
{
	var car;

	if(bIsNetscape())
	{
		car=String.fromCharCode(evt.which);
		// conversion en majuscule :
		car=car.toUpperCase();
		// on laisse passer les caracteres de controles :
		if(bIsControl(car))
			return true;
		// et on refuse tout ce qui n'est pas majuscule :
		if((car<'A')||(car>'Z'))
			return false;
	}
	if(bIsExplorer())
	{	// on recupere le caractere frappe :
		car=String.fromCharCode(evt.keyCode);
		// conversion en majuscule :
		car=car.toUpperCase();
		// est-ce que c'est bien une majuscule ?
		if((car>='A')&&(car<='Z'))
		// ok : on renvoi son code ascii :
			evt.keyCode=car.charCodeAt(0);
		else
		// sinon, on refuse :
			evt.returnValue=false;
	}
	return true;
}

///////////////////////////////////////////////////////////////////////

function LettreMajChiffre(evt)
{
	var car;

	if(bIsNetscape())
	{
		car=String.fromCharCode(evt.which);
		// conversion en majuscule :
		car=car.toUpperCase();
		// on laisse passer les caracteres de controles :
		if(bIsControl(car))
			return true;
		// et on refuse tout ce qui n'est pas majuscule :
		if(((car<'A')||(car>'Z'))&&
			 (!bIsDigit(car)))
			return false;
	}
	if(bIsExplorer())
	{	// on recupere le caractere frappe :
		car=String.fromCharCode(evt.keyCode);
		// conversion en majuscule :
		car=car.toUpperCase();
		// est-ce que c'est bien une majuscule ?
		if(((car>='A')&&(car<='Z'))||
			 (bIsDigit(car)))
		// ok : on renvoi son code ascii :
			evt.keyCode=car.charCodeAt(0);
		else
		// sinon, on refuse :
			evt.returnValue=false;
	}
	return true;
}

///////////////////////////////////////////////////////////////////////

function NumTel(evt)
{
	var car;

	if(bIsNetscape())
	{
		car=String.fromCharCode(evt.which);
		return bIsSepTel(car)||bIsDigit(car)||bIsControl(car);
	}
	if(bIsExplorer())
	{
		car=String.fromCharCode(evt.keyCode);
		evt.returnValue=ValRetIE(evt,bIsSepTel(car)||bIsDigit(car));
	}

	return true;
}

///////////////////////////////////////////////////////////////////////

function NumTelFr(evt)
{
	var car=GetCar(evt);
	if(bIsControl(car)) return true;
	var ch=GetChp(evt);
	var res=true;
	var p=GetPositionCaretDetSel(ch);
	if((ch.value.length<14)&&(bIsDigit(car)||(car==".")))
	{
		if((p==ch.value.length)&&(p<11)&&(((p+2)%3)==0))
		{
			ch.value=InserePos(ch.value,p,car+".");
			res=false;
		}
	}
	else res=false;
	return ValRet(evt,res);
}

///////////////////////////////////////////////////////////////////////

function ChiffreSymbol(evt)
{
	var car;

	if(bIsNetscape())
	{
		car=String.fromCharCode(evt.which);
		return bIsSymbol(car)||bIsDigit(car)||bIsControl(car);
	}
	if(bIsExplorer())
	{
		car=String.fromCharCode(evt.keyCode);
		evt.returnValue=ValRetIE(evt,bIsSymbol(car)||bIsDigit(car));

	}
	return true;
}

///////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////

function ChiffreSigne(evt)
{
	var car;

	if(bIsNetscape())
	{
		car=String.fromCharCode(evt.which);
		return (bIsDigit(car)||bIsSigne(car)||(car==_WW_SEPMILLIER_)||bIsControl(car));
	}
	if(bIsExplorer())
	{
		car=String.fromCharCode(evt.keyCode);
		evt.returnValue=ValRetIE(evt,bIsDigit(car)||bIsSigne(car)||(car==_WW_SEPMILLIER_));
	}
	return true;
}

///////////////////////////////////////////////////////////////////////

function ChiffreVirgule(evt)
{
	var car;

	if(bIsNetscape())
	{
		car=String.fromCharCode(evt.which);
		return (bIsDigit(car)||(car==_WW_SEPDECIMAL_)||(car==_WW_SEPMILLIER_)||bIsControl(car));
	}
	if(bIsExplorer())
	{
		car=String.fromCharCode(evt.keyCode);
		evt.returnValue=ValRetIE(evt,bIsDigit(car)||(car==_WW_SEPDECIMAL_)||(car==_WW_SEPMILLIER_)||(car==","));
	}
	return true;
}

///////////////////////////////////////////////////////////////////////

function ChiffreSigneVirgule(evt)
{
	var car;

	if(bIsNetscape())
	{
		car=String.fromCharCode(evt.which);
		return (bIsDigit(car)||bIsSigne(car)||(car==_WW_SEPDECIMAL_)||(car==_WW_SEPMILLIER_)||bIsControl(car));
	}
	if(bIsExplorer())
	{
		car=String.fromCharCode(evt.keyCode);
		evt.returnValue=ValRetIE(evt,bIsDigit(car)||bIsSigne(car)||(car==_WW_SEPDECIMAL_)||(car==_WW_SEPMILLIER_)||(car==","));
	}
	return true;
}

///////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////

function HHMM(evt,m)
{
	return CompleteSaisie(evt,m,":",true);
}

///////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////

function JJMMAA(evt,m)
{
	var s="";
	var i=0;
	for(i=0;i<m.length;i++)
	{
		var c=m.charAt(i);
		if(!CarMasqueDate(c))
		{
			s=c;
			break;
		}
	}
	return CompleteSaisie(evt,m,(s!="")?s:"/",true);
}


///////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////

function Euro(evt)
{
	var car;

	if(bIsNetscape())
	{
		car=String.fromCharCode(evt.which);
		return bIsLetter(car)||bIsDigit(car)||(car==_WW_SEPMILLIER_)||(car==_WW_SEPDECIMAL_)||bIsControl(car);
	}
	if(bIsExplorer())
	{
		car=String.fromCharCode(evt.keyCode);
		evt.returnValue=ValRetIE(evt,bIsLetter(car)||bIsDigit(car)||(car==_WW_SEPMILLIER_)||(car==_WW_SEPDECIMAL_));
	}
	return true;
}

///////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////

function Email(evt)
{
	var car=GetCar(evt);
	var ch=GetChp(evt);
	var res=(car!="\"")&&(car!="(")&&(car!=")")&&(car!="\\")&&(car!="<")&&(car!=">")&&(car!=",")&&(car!=";")&&(car!=":")&&((car!="@")||(ch.value.indexOf("@")<0));
	if(bIsExplorer()) evt.returnValue=res;
	return res;
}

///////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////

function CheminFichier(evt)
{
	var car=GetCar(evt);
	var res=(car!="\"")&&(car!="*")&&(car!="?")&&(car!="<")&&(car!=">")&&(car!="|");
	if(bIsExplorer()) evt.returnValue=res;
	return res;
}

///////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////

function Fichier(evt)
{
	var car=GetCar(evt);
	var res=CheminFichier(evt)&&(car!="\\")&&(car!="/")&&(car!=":");
	if(bIsExplorer()) evt.returnValue=res;
	return res;
}

///////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////

function Duree(evt,m)
{
	var car=GetCar(evt);
	return ValRet(evt,bIsDigit(car)||(car=="j")||(car=="h")||(car=="m")||(car=="s")||((m.indexOf(car)>=0)&&(car!="+")&&(car!="J")&&(car!="H")&&(car!="M")&&(car!="S")&&(car!="C")));
}

///////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////

function VCRE(evt,e,t)
{
	var ch=GetChp(evt);
	var c=GetCar(evt);
	if(t!=null) c=eval("c."+t+"()");
	var s=InserePos(ch.value,GetPositionCaretDetSel(ch),c);
	if(t!=null) s=eval("s."+t+"()");
	return ValRet(evt,RegExpOK(s,e));
}

///////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////

function initExpReg(evt,m,e)
{
	var ch=GetChp(evt);
	var r=new RegExp(e);
	var t=r.exec(ch.value);
	if(t==null) return;
	ch.value="";
	var j=1;
	while(j<t.length) ch.value+=t[j++];
	SelectAll(ch);
}

///////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////

function reinitExpReg(evt,m,e)
{
	var ch=GetChp(evt);
	var r=new RegExp(e);
	var t=r.exec(ch.value);
	if(t==null) return;
	var i=0;
	var j=1;
	while((j<t.length)&&((i=m.indexOf("%"))>=0)) m=remplacePos(m,i,t[j++]);
	ch.value=m;
}

