/*            ~\\|//
               (@ ~)
o÷÷÷÷÷÷÷oOOO÷÷÷÷(_)÷÷÷÷OOOo÷÷÷÷÷÷÷÷o
! M'écrire : http://mas.keo.in?Bul !
! Mon Site : http://bul.fr.nf      !
!           .oooO   Oooo.          !
o÷÷÷÷÷÷÷÷÷÷÷(   )÷÷÷(   )÷÷÷÷÷÷÷÷÷÷o
             \ (     ) /
              \_)   (_/           */
var libErr,xmlD;
///////////////////////////////////////////////////////
function CCFErr(frm,tst)	//// il y a une erreur ////
/////////////////////////////////////////////////////
{	var e,l;
	var zone=tst.getElementsByTagName("zone")[0].firstChild.nodeValue;
	try 			{	e=tst.getElementsByTagName("erreur")[0];	}
	catch(err)	{	libErr+=	zone+" ("+
									tst.getElementsByTagName("type")[0].firstChild.nodeValue+
									") erroné" + "\r\n" ;
						return;
					}
	try			{	l=e.getElementsByTagName("libelle")[0].firstChild.nodeValue;	}
	catch(err)	{	l=	tst.getElementsByTagName("zone")[0].firstChild.nodeValue+" ("+
							tst.getElementsByTagName("type")[0].firstChild.nodeValue+
							") erroné"; 	}
	libErr+=l+"\r\n";
	var arr=false,n;
	if ( frm[zone][0] && !frm[zone][0].options ) 
	{ arr=frm[zone].length; }
	try			{ 	l=e.getElementsByTagName("texte")[0].firstChild.nodeValue;
						if ( !arr)
								{	frm[zone].style.color=l; }
						else	{	for ( n=0;n<arr;n++) 
									{	frm[zone][n].style.color=l;	}
								}
					}
	catch(err)	{	}
	try			{ 	l=e.getElementsByTagName("fond")[0].firstChild.nodeValue;
						if ( !arr)
								{	frm[zone].style.backgroundColor=l; }
						else	{	for ( n=0;n<arr;n++) 
									{	frm[zone][n].style.backgroundColor=l;	}
								}
					}
	catch(err)	{	}
}
///////////////////////////////////////////////////
function CCFFin(btn)	//// contrôle des champs ////
/////////////////////////////////////////////////
{	var XTests=xmlD.getElementsByTagName("test");
	var format,l,min,max,typ,valeur,zone;
	var tmp=new Array();
	var frm=btn.form;
	libErr="";
	for ( var nTest=0;nTest<XTests.length;nTest++ )
	{	try 		{	zone=XTests[nTest].getElementsByTagName("zone")[0].firstChild.nodeValue; }
		catch(e)	{	zone=null;	}
		if (zone!=null)
		{	try 		{	typ=XTests[nTest].getElementsByTagName("type")[0].firstChild.nodeValue;	}
			catch(e)	{	typ=null; }
			if ( typ!=null )
			{	try		{	min=Number(XTests[nTest].getElementsByTagName("mini")[0].firstChild.nodeValue);	}
				catch(e)	{	min=1;	}
				try		{	max=Number(XTests[nTest].getElementsByTagName("maxi")[0].firstChild.nodeValue);	}
				catch(e)	{	max=min;	}
				try 			{	l=XTests[nTest].getElementsByTagName("bon")[0];	}
				catch(err)	{	l=null;	}
				if ( l!=null )
				{	var arr=false;
					if ( document.frm[zone][0] && !document.frm[zone][0].options ) 
					{ arr=document.frm[zone].length; }
						try		{ 	valeur=l.getElementsByTagName("texte")[0].firstChild.nodeValue;
										if ( !arr)
												{	document.frm[zone].style.color=valeur; }
										else	{	for ( n=0;n<arr;n++) 
													{	document.frm[zone][n].style.color=valeur;	}
												}
									}
					catch(err)	{	}
					try			{ 	valeur=l.getElementsByTagName("fond")[0].firstChild.nodeValue;
										if ( !arr)
												{	document.frm[zone].style.backgroundColor=valeur; }
										else	{	for ( n=0;n<arr;n++) 
													{	document.frm[zone][n].style.backgroundColor=valeur;	}
												}
									}
					catch(err)	{	}
				}
				switch (typ)
				{	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
					case "obligatoire":	//~~~~ zone obligatoire ~~~~
					//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
						valeur=document.frm[zone].value;
						l=valeur.length;
						if ( l<min || l>max )
						{ CCFErr(frm,XTests[nTest]);	}
						break;
					//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
					case "mail":	//~~~~ adresse mail ~~~~
					//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
						valeur=document.frm[zone].value;
						if ( !valeur.match ("[-\./w]*@[/w]*\.[/w]*") )	// toujours pas terrible ça !
						{ CCFErr(frm,XTests[nTest]);	}
						break;
					//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
					case "date":	//~~~~ date ~~~~
					//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
						valeur=document.frm[zone].value;
						try		{	format=XTests[nTest].getElementsByTagName("format")[0].firstChild.nodeValue; }
						catch(e)	{	format="j/m/a";	}
						switch (format)
						{	case "j/m/a":
								tmp=valeur.split("/");
								break;
							case "jma":
								tmp[0]=Number(valeur.substr(0,2));
								tmp[1]=Number(valeur.substr(2,2));
								tmp[2]=Number(valeur.substr(4,4));
								break;
						}
						l=new Date(tmp[2],tmp[1],tmp[0]);
						if (l.getFullYear()!=tmp[2] || l.getMonth()!=tmp[1])
						{ CCFErr(frm,XTests[nTest]);	}
						break;
					//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
					case "nombre":	//~~~~ nombre ~~~~
					//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
						valeur=document.frm[zone].value;
						if (isNaN(valeur))
						{ 	CCFErr(frm,XTests[nTest]);
							break;	}
						try		{	min=Number(XTests[nTest].getElementsByTagName("mini")[0].firstChild.nodeValue);
										if (Number(valeur)<min)
										{ 	CCFErr(frm,XTests[nTest]);
											break;	}
									}
						catch(e)	{		}
						try		{	max=Number(XTests[nTest].getElementsByTagName("maxi")[0].firstChild.nodeValue);
										if (Number(valeur)>max)
										{ CCFErr(frm,XTests[nTest]);	}
									}
						catch(e)	{		}
						break;
					//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
					case "specifique":	//~~~~ contrôles personnels/spécifiques ~~~~
					//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
						valeur=null;
						try				{	l=XTests[nTest].getElementsByTagName("bon")[0];
												valeur="!("+l.getElementsByTagName("si")[0].firstChild.nodeValue+")";
											}
						catch(erreur)	{	try			{	l=XTests[nTest].getElementsByTagName("erreur")[0].firstChild.nodeValue;
																	valeur=l.getElementsByTagName("si")[0].firstChild.nodeValue;	
																}
												catch(err)	{	try			{	valeur=XTests[nTest].getElementsByTagName("si")[0].firstChild.nodeValue;	}
																	catch(err)	{	}
																}
											}						
						if ( valeur!=null )
						{	try			{	l=eval(valeur);	}
							catch(err)	{	l=true;	}
							if ( l )
							{ CCFErr(frm,XTests[nTest]);	}
						}
						break;
					//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
					case "cocher":	//~~~~ nombre de checkbox cochés ~~
					//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
						valeur=0;
						try			{	for ( var l=0;l<document.frm[zone].length;l++ )
											{	if ( document.frm[zone][l].checked )
												{	valeur++;	}
											}
											if ( valeur<min || valeur>max )
											{	CCFErr(frm,XTests[nTest]);	}
										}
						catch(err)	{	}
						break;
					//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
					case "liste":	//~~~~ nbr lignes sélectionnées dans un select ~~~~
					//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
						if (document.frm[zone].multiple)
								{	valeur=0;
									for ( var l=0;l<document.frm[zone].length;l++ )
									{	if ( document.frm[zone][l].selected )
										{	valeur++;	}
									}
									if ( valeur<min || valeur>max )
									{	CCFErr(frm,XTests[nTest]);	}
								}
						else	{	if ( document.frm[zone].selectedIndex<0 )
									{	CCFErr(frm,XTests[nTest]);	}
								}
						break;
					//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
					case "choix":	//~~~~ radio ~~~~
					//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
						for ( var l=0;l<document.frm[zone].length;l++ )
						{	if ( document.frm[zone][l].checked )
							{ break;	}
						}
						if (l>=document.frm[zone].length) 
						{	CCFErr(frm,XTests[nTest]);	}
						break;
					//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
					case "accepter":	//~~~~ radio ou checkbox obligatoirement coché ~~~~
					//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
						if ( !document.frm[zone].checked )
						{	CCFErr(frm,XTests[nTest]);	}
						break;
					//~~~~~~~~~~~~~~~~~~~~~~~~~~
					default:	//~~~~ sinon ? ~~~~
					//~~~~~~~~~~~~~~~~~~~~~~~~~~
						break;
				}
			}
		}
	}
	if ( libErr.length>0 )
			{	alert(libErr);	}
	else	{	frm.submit();	}
}
///////////////////////////////////////////
function CCF(frm)	//// charger le XML ////
/////////////////////////////////////////
{	if ( window.ActiveXObject )
			{	// pour Internet Explorer
				xmlD = new ActiveXObject("Microsoft.XMLDOM");
				xmlD.onreadystatechange = function ()
				{	if (xmlD.readyState==4)
					{	CCFFin(frm);	}
				}
			}
	else 	{	if ( document.implementation.createDocument )
						{	// pour FireFox et Consors
							xmlD = document.implementation.createDocument("", "", null);
							xmlD.onload = function()
							{	CCFFin(frm);	}
						}
				else	{	// tant pis !
							alert('Votre navigateur ne supporte pas le XML ?');
							frm.form.submit();	// on soumet le formulaire ? est-ce à faire ?
						}
			}
	xmlD.load(frm.form.name+'.xml');
}
