// Vérification des formulaires

/* ------------------------------------------------------- */
/* --- Vérifie la nécessité d'un élément du formulaire --- */
/* ------------------------------------------------------- */

// param 1 : id du formulaire à traiter
// param 2 à n : id des champs spéciaux
// --- champ *: champ est nécessaire
// --- champ @: champ doit être une adresse email valide
// --- champ °: champ doit être un nombre
// --- champ !° : champ ne doit pas être un nombre
// --- champ1 || champ2 : soit champ1 soit champ2
// --- champ1 && champ2 : si champ1 est remplie alors champ2 doit l'être aussi
// --- champ ! val : champ doit être différent de val (pour les select)

// exemple d'utilisation
// <input type="button" name="envoyer" id="envoyer" value="envoyer" class="validation" onClick="XD_verifieFormulaire('IDformulaire','nom|*','email|@*','sujet|*','message|*')" />


// Contrainte : chaque champ doit être identifier (ID)

function XD_verifieFormulaire() {

	// récupération des paramètres
	params = XD_verifieFormulaire.arguments;

	messages = new Array();
	erreurs = new Array('');

	lesErreurs = '';

	messages[0]='Champs Obligatoires\n';
	messages[1]='Au moins l\'un des champs ci-dessous est obligatoire\n';
	messages[2]='Les champs suivants doivent être des adresses emails valides\n';
	messages[3]='Les champs suivants doivent être des nombres\n';
	messages[4]='Champs à sélectionner\n';
	messages[5]='Votre sélection implique une autre champ obligatoire\n';

	for (i=1; i<params.length; i+=1) {

		/* --------------------------- */
		/* --- Champs Obligatoires --- */
		/* --------------------------- */
		if (params[i].indexOf('*')!=-1 && document.getElementById(params[i].substr(0,params[i].indexOf('|'))).value=='') {
			elt = params[i].substr(0,params[i].indexOf('|'));
			if (erreurs[0]==undefined || erreurs[0]=='') {
				erreurs[0]=messages[0]+'- '+elt+'\n';
			} else {
				erreurs[0]+='- '+elt+'\n';
			}
		}

		/* ---------------------------- */
		/* --- Doit être un Email ? --- */
		/* ---------------------------- */
		if (params[i].indexOf('@')!=-1) {
			elt = params[i].substr(0,params[i].indexOf('|'));
			if (document.getElementById(elt).value!='') {
				valeur = document.getElementById(elt).value;
				if (valeur.indexOf('@')==-1 || valeur.indexOf('@')<1) {
					// Pas de arrobase @
					if (erreurs[2]==undefined || erreurs[2]=='') {
						erreurs[2]=messages[2]+'- '+elt+'\n';
					} else {
						erreurs[2]+='- '+elt+'\n';
					}
				} else {
					// Pas de domaine ou domaine trop court
					valeurfin = valeur.substr(valeur.indexOf('@'),valeur.length);
					if (valeurfin.indexOf('.')==-1 || valeurfin.indexOf('.')==valeurfin.length-1 || valeurfin.substr(0,valeurfin.indexOf('.')).length<3) {
						if (erreurs[2]==undefined || erreurs[2]=='') {
							erreurs[2]=messages[2]+'- '+elt+'\n';
						} else {
							erreurs[2]+='- '+elt+'\n';
						}
					} else {
						// pas de TLD ou TLD trop court
						if (valeurfin.substr(valeurfin.indexOf('.')+1,valeurfin.length).length<2) {
							if (erreurs[2]==undefined || erreurs[2]=='') {
								erreurs[2]=messages[2]+'- '+elt+'\n';
							} else {
								erreurs[2]+='- '+elt+'\n';
							}
						}
					}
				}
			}
		}


		/* ----------------------------------- */
		/* --- l'un OU l'autre ou les Deux --- */
		/* ----------------------------------- */
		// A améliorer en elt1 ou elt2 ou elt3 ou elt4 ou .... ou eltn

		if (params[i].indexOf('||')!=-1) {
			elt1 = params[i].substr(0,params[i].indexOf('||'));
			elt2 = params[i].substr(params[i].indexOf('||')+2,params[i].length);
			if (document.getElementById(elt1).value=='' && document.getElementById(elt2).value=='') {
				if (erreurs[1]==undefined) {
					erreurs[1]=messages[1]+'- '+elt1+' ou '+elt2+'\n';
				} else {
					erreurs[1]+=elt1+' ou '+elt2+'\n';
				}
			}
		}


		/* --------------------------- */
		/* --- Doit être un Nombre --- */
		/* --------------------------- */
		if (params[i].indexOf('°')!=-1) {
			elt = params[i].substr(0,params[i].indexOf('|'));
			if (isNaN(document.getElementById(elt).value) && document.getElementById(elt).value!='') {
				if (erreurs[3]==undefined || erreurs[3]=='') {
					erreurs[3]=messages[3]+'- '+elt+'\n';
				} else {
					erreurs[3]+='- '+elt+'\n';
				}
			}
		}

		/* ---------------------------------- */
		/* --- Doit être différent de Val --- */
		/* ---------------------------------- */
		if (params[i].indexOf('!')!=-1) {
			elt = params[i].substr(0,params[i].indexOf('!'));
			val = params[i].substr(params[i].indexOf('!')+1,params[i].length);
			if (document.getElementById(elt).options[document.getElementById(elt).selectedIndex].value==val) {
				if (erreurs[4]==undefined || erreurs[4]=='') {
					erreurs[4]=messages[4]+'- '+elt+'\n';
				} else {
					erreurs[4]+='- '+elt+'\n';
				}
			} 
		}

		/* ------------------------------ */
		/* --- si l'un alors l'autre  --- */
		/* ------------------------------ */
		// A REVOIR mettre ELT[CONDITION]VALEUR?vrai
		if (params[i].indexOf('?')!=-1) {
			elt1 = params[i].substr(0,params[i].indexOf('?'));
			elt2 = params[i].substr(params[i].indexOf('?')+1,params[i].length);

			if (document.getElementById(elt1).value!='' && document.getElementById(elt2).value=='') {
				if (erreurs[1]==undefined) {
					erreurs[1]=messages[5]+'- '+elt1+' implique '+elt2+'\n';
				} else {
					erreurs[1]+=elt1+' ou '+elt2+'\n';
				}
			}
		}

		/* -------------------------- */
		/* --- Doit être une Date --- */
		/* -------------------------- */


	}

//	alert('Nb Erreurs : '+erreurs.length);

	for(i=0; i<erreurs.length; i+=1) {
		if (erreurs[i]!=undefined) {
			lesErreurs+=erreurs[i];
		}
	}
	
	if (lesErreurs!='') {
		alert(lesErreurs);
	}
	document.retour = (lesErreurs == '');
}

