var ns4 = (document.layers);
var ie4 = (document.all && !document.getElementById);
var ie5 = (document.all && document.getElementById);
var ns6 = (!document.all && document.getElementById);

/*
**************************
* VERSION DU: 21/07/2003 *
**************************


Pour vérifier le contenu d'un formulaire avant de l'envoyer:

1°) Inclure le présent script dans le Head

		<script src="/inc/scripts.js"></script>


2°) toujours dans le HEAD, créer un script qui précisera les vérifications à effectuer sur les champs:

! ATTENTION, pour les 3 premiers caratères, du texte, bien préciser la casse: un code "cp" ne fonctionnerapa, "CP" étant attendu !

les paramètres à donner à la fonction "validite" sont les suivants (dans l'ordre):
	- nom du formulaire
	- nom du chanp à tester
	-type du champ à tester,
			A	: alphabetique
			ANP	: alphanumerique pur
			AN : alphanumerique complet (y compris tout les signes tels que: €¨£%)€[|\^]} .....
			ANNNE: 4 chiffres
			N	: numerique
			CP	: code postal francais (5 chiffres)
			D	: Date (xx/xx/xx ou xx/xx/xxxx ou xx-xx-xx ou xx-xx-xxxx)
			EMAIL	: email
	-longueur minimun en caractères.
		Un mini de 0 signifie que le champ n'est pas requis.
		Pour vérifier qu'un champ est bien remplis, il suffit de positionner ce paramètre sur 1 (ou +)

	-longueur maximum en caratères
		Un maxi de 0 signifie que l'on ne limite pas la taille du champ.

<SCRIPT language="JavaScript">
	function check_form()
	{
		if (!validite("form1","nom","A",1,0)) {return false;}				//Vérifier que le nom n'est pas vide est est uniquement constirué de caractères
		if (!validite("form1","cp","CP",0,0)) {return false;}				//Vérifier que le code postal, si rempli, est correct
		if (!validite("form1","email","EMAIL",0,0)) {return false;}			//Vérifier que l'email, si rempli, est correct
		if (!validite("form1","dat1","D",1,0)) {return false;}				//Vérifier que la date est biern remplie, et est correcte.
		return true;
	}
</SCRIPT>

3°) Faire appel à la fonction définie en 2° dans  le bouton submit
		<INPUT type=submit OnClick="check_form();>

 ou bien dans le FORM:
		 <form ... onSubmit="return check_form();>

*/

function isDateCorrecte(dat)
{
// VERY simple ...
// Cette fonction sera utilisée par la fonction "validité", afin de préciser si la date est correcte.
var first_slashe,second_slashe,j,m,a

	first_slashe=dat.indexOf("/");
	second_slashe=dat.indexOf("/",first_slashe+1);

	if(first_slashe==-1 || second_slashe==-1)
	{

		return false;
	}
	else
	{
		j=dat.substring(0,first_slashe);
		m=dat.substring(first_slashe+1,second_slashe);
		a=dat.substring(second_slashe+1,dat.length).valueOf();

		if(a=="" || m=="" || j=="" || isNaN(j) || isNaN(m) || isNaN(a))
		{

			return false;
		}
		j=parseInt(j,10);
		m=parseInt(m,10);				//JavaScript EST BETE !!
		a=parseInt(a,10);				//De plus, il Faut préciser la base, car un 0x est pris pour un octal ou hexa ....

		if(j<1 || j>31) 	{return false;}
		if(m<0 || m>12)		{return false}
		if(m==2)
		{
			if(j>29) 		{return false;}
		}
		else
		{
			var modulo;
			modulo=(m<=7)?0:1;
			if ((m%2)==modulo && j>30) {return false;}

		}
	}
	return true;
}



function validite(formulaire,champ,format,mini,maxi) {
// Paramètres: nom du formulaire, nom du champ, format , taille mini, taille maxi
// Initialisation de la variable
var probleme;
	probleme = false;
	if ( format == "A" ) { RE = /^([A-Za-z\.]+[ ]*[-]*[A-Za-z\.]*)+$/;}
	if ( format == "ANP" ) { RE = /^[A-Za-zàâäéèêëîïôùûç&\.\s,'0-9\/\\<>\-_\'"]+$/;}
	if ( format == "AN" ) { RE = /^[A-Za-zàâäéèêëîïôùûç&\.\s,'0-9\/\\<>\-_\'’"&~#{(\[|`^@\])°+=}%^¨$£¤*µ?!§:;´²€]+$/;}
	if ( format == "N" ) { RE = /^\d+$/;}
	if ( format == "ANNEE" ) { RE = /^\d{4}$/;}
	if ( format == "CP" ) { RE = /^\d{5}$/;}
	if ( format == "D" ) { RE = /^\d{2}([\/]|[\-])+\d{2}([\/]|[\-])+\d{2}(\d{2})*$/;}
	if ( format == "DATE_MYSQL" ) { RE = /^\d{4}[-]\d{2}[-]\d{2}/;}
	if ( format == "EMAIL" ) { RE = /^[A-Za-z0-9\.\-_]+[@][A-Za-z0-9\-\.]+[\.][A-Za-z][A-Za-z][A-Za-z]?$/;}

	var controle = eval('document.' + formulaire + '.' + champ);	// Creation d'un raccourci pour manipuler le champ a tester

	if(controle.value.length==0 && mini>0)							// si le champ est requis et vide
	{
		alert('Vous devez saisir ce champ.');
		bloque(formulaire,champ);								// On active le blocage du champ
		return false;
	}
	else
	{
		if (controle.value.length > 0)									// On ne fera les tests que si le champ est rempli d'au moins un caractere (pas vide)
		{
			if (!RE.test(controle.value))								// Si on ne trouve pas dans le champ l'expression reguliere recherchee
			{
				alert('Votre saisie est incorrecte.');
				bloque(formulaire,champ);								// On active le blocage du champ
				return false;
			}

			if ( mini != 0 )											// Tests de longueur du champ (nombre de caracteres saisis)
			{															// Si il a ete specifie '0', le test n'est pas effectue
				if ( controle.value.length < mini )
				{
					alert('Vous devez saisir au moins ' + mini + ' caracteres.');
					bloque(formulaire,champ);								// On active le blocage du champ
					return false;
				}
			}

			if ( maxi != 0 )											// Si il a ete specifie '0', le test n'est pas effectue
			{
				if ( controle.value.length > maxi )						// Si la longueur de la saisie est superieure au maximum demande
				{
					alert('Vous ne devez pas saisir plus de ' + maxi + ' caracteres.');
					bloque(formulaire,champ);								// On active le blocage du champ
					return false;
				}
			}
			if (format == "D" )											//test supplementaire pour la date, afin d'éliminer les cas les plus flagrants de mauvaises dates.
			{
				if (!isDateCorrecte(controle.value))
				{
					alert('La date que vous avez indiquée n\'est pas valide.');
					bloque(formulaire,champ);								// On active le blocage du champ
					return false;
				}
			}
		}
	}
	return true;
}


function bloque(formulaire,champ)
{
	var controle = eval('document.' + formulaire + '.' + champ);			// Creation d'un raccourci pour manipuler le champ
	controle.focus();														// On se place sur le champ incrimine
	controle.select();														// On selectionne le contenu pour faciliter la reprise de la saisie
}

//Cette fonction permet de récupérer un Calque grace à son ID
function getIt(id)
{ if(ns4)
   return document.layers[id];
  if(ie4 || ie5)
   return document.all[id];
  if(ns6)
   return document.getElementById(id);
}

//Cette fonction permet d'afficher le calque [ID]
function show(id){
if(ns4){document.layers[id].visibility = "show";}
else {getIt(id).style.visibility = "visible";
      getIt(id).style.display = "block";}
}

//Cette fonction permet de cacher le calque [ID]
function hide(id){
if(ns4){document.layers[id].visibility = "hide";}
else { getIt(id).style.visibility = "hidden";
       getIt(id).style.display = "none";}
}

function bascule_visibilite(id){
	if(ns4)
	{
		if(document.layers[id].visibility == "hide")
			{show(id);}
		else
			{hide(id);}
	}
	else
	{
	 	if (getIt(id).style.visibility == "hidden")
			{show(id);}
		else
			{hide(id);}
	}
}

//Accèpte en entrée aussi bien l'objet TR lui même, que son id.
function setBackgroundColor(theRow, thePointerColor)
{

	if (isString(theRow)) {theRow=getIt(theRow);}

    if (typeof(theRow.style) == 'undefined' || typeof(theRow.cells) == 'undefined')
    {
        return false;
    }

    var row_cells_cnt           = theRow.cells.length;
    for (var c = 0; c < row_cells_cnt; c++)
    {
        theRow.cells[c].bgColor = thePointerColor;
    }
    return true;
}



/*
exemple de contenu pour le champ [features]:
	'toolbar=no,status=no,menubar=no,scrollbars=yes,resizable=no,width=200,height=200'
*/
function popup(theURL,winName,features){ //v2.0
  window.open(theURL,winName,features);
}


//Ensemble de fonction permettant de déterminer le type d'une variable
function isAlien(a) {
   return isObject(a) && typeof a.constructor != 'function';
}
function isArray(a) {
    return isObject(a) && a.constructor == Array;
}
function isBoolean(a) {
    return typeof a == 'boolean';
}
function isEmpty(o) {
    var i, v;
    if (isObject(o)) {
        for (i in o) {
            v = o[i];
            if (isUndefined(v) && isFunction(v)) {
                return false;
            }
        }
    }
    return true;
}
function isFunction(a) {
    return typeof a == 'function';
}
function isNull(a) {
    return a === null;
}
function isNumber(a) {
    return typeof a == 'number' && isFinite(a);
}
function isObject(a) {
    return (a && typeof a == 'object') || isFunction(a);
}
function isString(a) {
    return typeof a == 'string';
}
function isUndefined(a) {
    return typeof a == 'undefined';
}

//FIN Ensemble de fonction permettant de déterminer le type d'une variable