/****************************************************************************************************************
 * 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;
                case 'nombre':
                    verification = verif_numeric(document.getElementById(id).value);
                    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;
	}
    // sous fonction de vérif des nombres
    function verif_numeric(mixed_var)
    {
        return (typeof(mixed_var) === 'number' || typeof(mixed_var) === 'string') && mixed_var !== '' && !isNaN(mixed_var);
    }
