/****************************************************************************************************************
 * VERIFICATIONS DYNAMIQUES JAVASCRIPT JQUERY
 *
 * Auteur : Jean-Baptiste JUGE (Note Bleue)
 *
 * Le set de vérifications dynamiques a un fonctionnement particulier :
 *
 * Il se greffe sur la classe steps.php, qui décompose un formulaire en plusieurs tableaux
 * et est ici couplé avec un algorithme qui affiche certaines parties du formulaire en séquentiel,
 * permettant de créer un formulaire entièrement assisté.
 * Cette bibliothèque permet ici de vérifier à la volée les différents champs d'une ligne du tableau,
 * en l'occurence la dernière affichée par l'assistant.
 *
 * PREREQUIS :
 *
 * - Bibliothèque JQUERY
 * - Steps.php
 * - L'assistant qui cache toutes les lignes du formulaire et les découvre au clic sur un bouton
 *
 * UTILISATION :
 *
 * - Les lignes de tableau à scanner doivent avoir un attribut class égal à 'averifier'
 *
 * Exemple : <table><tr class='averifier><td><input ... /></td></tr></table>
 *
 * - pour une balise input, textarea ou select, préciser l'attribut ID (identifiant unique),
 *  l'attribut XMLNS (que l'on utilisera ici pour définir quel type de contrôle doit etre appliqué)
 * et l'attribut 'title' qui permettra une explication de l'erreur dans les messages.
 *
 * Exemple : <input type='text' value='123' id='mon_input_mail' xmlns='mail' title='Libellé expliquant la nature du champ'/>
 *
 * TYPES de contrôle : Il est possible de modifier les types de contrôles possibles à volonté
 * (mail, tel, fax, nom, prenom etc...)
 * 
 * NB : les champs de type 'hidden' ne seront pas contrôlés
 *
 * FONCTIONS :
 *
 * --> lancer_verifs(): permet de lancer les vérifications sur la dernière ligne de tableau
 *  affichée par l'assistant (appelée ici lors du clic sur le bouton 'continuer de l'assistant')
 * Il détecte tous les champs présents dans la ligne et les scanne avec la fonction adaptée
 * 
 *  								|		  |
 *  								| appelle |
 *									v		  v 
 * 
 * --> verifier(id, type) et verifier_select(id) : fonctions qui déterminent en fonction du type de vérification a faire,
 * si le champ est valide ou pas. verifier_select() est spécifique aux balises <select>
 *
 * NB : Il n'y a pas de type particulier pour les balises <select>.
 *
 *  								|		  |
 *  								| appelle |
 *									v		  v 
 *
 * --> verifMail() et autres fonctions ... : sous-fonctions à appeler avec verifier() ou verifier_select();
 *
 * Si une des vérifications échoue, un message s'affiche pour le champs concerné.
 * Une réponse globale pour la ligne est aussi possible.
 * 
*****************************************************************************************************************/

/************* FONCTION MERE *******************************/

/* FONCTION ORIGINALE
function lancer_verifs()
     {
		 // Possibilité d'ajouter des balises à scanner... Penser à ajouter une fonction verifier_xxx() qui se chargera de sa vérification !
		var verification = true;
		$("#tab_step_"+document.getElementById('step').value).find(".averifier:first").find('input[type!=hidden]').each(function()
		{
			if(verifier($(this).attr('id'), $(this).attr('xmlns')) == false)
			{
				alert ("Erreur dans le champ '" + $(this).attr('title') + "'");
				verification = false;
			}
		});
		
		$("#tab_step_"+document.getElementById('step').value).find(".averifier:first").find('select').each(function()
		{
			if(verifier_select($(this).attr('id')) == false)
			{
				alert ("Erreur dans la liste '" + $(this).attr('title') + "'");
				verification = false;
			}
		});

		$("#tab_step_"+document.getElementById('step').value).find(".averifier:first").find('textarea').each(function()
		{
			if(verifier($(this).attr('id'), $(this).attr('xmlns')) == false)
			{
				alert ("Erreur dans la zone de texte '" + $(this).attr('title') + "'");
				verification = false;
			}
		});
		
		return verification;
	 }
*/

// Fonction originale modifiée pour vérifier aussi toutes les lignes déjà affichées précédemment qui auraient pu être modifiées !
function lancer_verifs()
     {
		 // Possibilité d'ajouter des balises à scanner... Penser à ajouter une fonction verifier_xxx() qui se chargera de sa vérification !
		var verification = true;
		var message = '';

		$("#tab_step_"+document.getElementById('step').value).find("tr:visible").each(function()
		{
			$(this).find('input[type!=hidden]').each(function()
			{
				if(verifier($(this).attr('id'), $(this).attr('xmlns')) == false)
				{
					message = message + "Erreur dans le champ '" + $(this).attr('title') + "'\n";
					verification = false;
				}
			});
			
			$(this).find('select').each(function()
			{
				if(verifier_select($(this).attr('id')) == false)
				{
					message = message + "Erreur dans la liste '" + $(this).attr('title') + "'\n";
					verification = false;
				}
			});
			
			/*
			$(this).find('textarea').each(function()
			{
				if(verifier_textarea($(this).attr('id')) == false)
				{
					message = message + "Erreur dans la zone de texte '" + $(this).attr('title') + "'\n";
					verification = false;
				}
			});
			*/
		});
		return message;
	 }

/************* FONCTIONS DE VERIFICATION *******************************/

	// Fonction qui se change de la vérification des balises <select>
    function verifier_select(id)
	{
		var verification = true;
		if (document.getElementById(id).options[document.getElementById(id).selectedIndex].value == '')
		{
			verification = false;
		}
		return verification;
	}

	// Fonction qui se change de la vérification des balises <textarea>
    function verifier_textarea(id)
	{
		var verification = true;
		if (document.getElementById(id).innerHTML == '')
		{
			verification = false;
		}
		return verification;
	}

	// Fonction qui se charge de la vérification des inputs != <select>
	function verifier(id, type)
	{
		var verification = true;
		if (document.getElementById(id).value == '')
		{
			verification = false;

			if (type == 'facultatif')
			{
				verification = true;
			}
		}
		else
		{
			switch (type)
			{
				// Possibilité d'ajouter des types de vérification... Ajouter éventuellement la Sous-Fonction adaptée !
				case 'mail':
					verification = verifMail(id);
					break;

				case 'checkbox_obligatoire':
					verification = document.getElementById(id).checked;
					break;

				case 'radio_obligatoire':
					verification = false;
					var cpt = 0;
					var radioType = document.getElementsByName(id);
					for (cpt = 0 ; cpt < radioType.length ; cpt++)
					{
						if (radioType[cpt].checked == true)
						{
							verification = true;
						}
					}
					break;
			}
		}
		return verification;
	}

/************* SOUS-FONCTIONS de verification *******************************/

	// Sous-Fonction : Vérification des données de type e-mail ('mail')
	function verifMail(id)
	{
		var a = document.getElementById(id).value;
		var valide1 = false;
		
		for(var j=1;j<(a.length);j++)
		{
			if(a.charAt(j)=='@')
			{
				if(j<(a.length-4))
				{
					for(var k=j;k<(a.length-2);k++)
					{
						if(a.charAt(k)=='.') valide1=true;
					}
				}
			}
		}
		return valide1;
	}

