/*
****************************************************************************************************
			Form_Controls.js
****************************************************************************************************
	Version		: 1.0
	Auteur 		: Philippe Martin
	Date		: 21/11/2003
	Modif par	: 
	Modif date	: 
	Sur version : 

	** A CHAQUE MODIF, METTRE A JOUR LE KM
****************************************************************************************************

Recence les fonctions javascript de contrôles de formulaires HTML.
Les fonctions préfixées par la chaine "NV_" ont été testées et optimisées pour le package Nevus

Nota : . toutes les fonctions doivent être commentées avec la description des paramètres
		 avec un * si obligatoire et l'ojectifs de celle-ci
	   . pour les paramères facultatifs, la chaine "" ou '' doit être envoyée
	   . toutes les fonctions comportant l'instruction return false peuvent être appelées
	     depuis une balise Form par OnSubmit="return NomFonction(paramètres)"

Liste des fonctions :

	- CheckValue(Control_Name, Test_Value, Message, Message2, Control_Focus)
		Test sur l'égalité d'une valeur
	- function UnCheckValue(Control_Name, Test_Value, Message, Message2, Control_Focus)
		Test sur l'inégalité d'une valeur
	- function CheckNumericFormat(Control_Name, Message, Control_Focus)
		Test sur le format numérique de la valeur d'un contrôle
	- function CheckIntegerFormat(Control_Name, Message, Control_Focus)
		Test sur le format numérique de la valeur d'un contrôle
	- function Compare_2_Dates(DateRef_annee, DateRef_mois, DateRef_jour, DateTest_annee, DateTest_mois, DateTest_jour, Message1, Message2)
		Comparaison de 2 dates
	- function CheckDate(Control_Name, Message_Empty, Message_Error, Oblig, Separator, Control_Focus)
		Test de format de Date de la valeur d'un champ (JJ/MM/AAAA ou JJ/MM/AA)
	- function CheckMail(Mail_Adress, Message_Empty, Message_Error)
		Test sur le format d'une adresse e-mail
	- function CheckSpaces(Control_Name, Message)
		Test sur la contenance d'espaces de la valeur d'un contrôle
****************************************************************************************************
*/



// *********************************************************** //
// ********** Fonctions sur des valeurs spécifiques ********** //
// *********************************************************** //

/* ****************************************
 ** Test sur l'égalité d'une valeur **
 Paramètres :
 	Control_Name *	: Nom du contrôle HTML
	Test_Value *	: Valeur à tester
	Message			: Message si Control_Name.value = Test_Value
	Message2		: Message si Control_Name.value <> Test_Value
	Control_Focus 	: Focus sur le champ si Control_Name.value = Test_Value
 Ex. d'utilisation :
 	...
 Appel : CheckValue(MyForm.MyControl, "valeur à tester", "mon message si égale", "mon message si différent", 1)
*/
function CheckValue(Control_Name, Test_Value, Message, Message2, Control_Focus)
{
	if(Control_Name.value == Test_Value)
	{
		if(Message) { alert(Message) }
		if(Control_Focus == 1) { Nom_Control.focus() }
		return false
	}
	else
	{
		if(Message2) { alert(Message2) }
	}
}
// ****************************************

/* ****************************************
 ** Test sur l'inégalité d'une valeur **
 Paramètres :
 	Control_Name *	: Nom du contrôle HTML
	Test_Value *	: Valeur à tester
	Message			: Message si Control_Name.value <> Test_Value
	Message2		: Message si Control_Name.value = Test_Value
	Control_Focus 	: Focus sur le champ si Control_Name.value <> Test_Value
 Ex. d'utilisation :
 	Contraire de la fonction CheckValue
 Appel : UnCheckValue(MyForm.MyControl, "valeur à tester", "mon message différent", "", 0)
*/
function UnCheckValue(Control_Name, Test_Value, Message, Message2, Control_Focus)
{
	if(Control_Name.value != Test_Value)
	{
		if(Message) { alert(Message) }
		if(Control_Focus == 1) { Nom_Control.focus() }
		return false
	}
	else
	{
		if(Message2) { alert(Message2) }
	}
}
// ****************************************



// ********************************************************** //
// ********** Fonctions sur des valeurs numériques ********** //
// ********************************************************** //

/* ****************************************
 ** Test sur le format numérique de la valeur d'un contrôle **
 Paramètres :
 	Control_Name *	: Nom du contrôle HTML
	Message			: Message si Control_Name.value n'est pas numérique
	Control_Focus 	: Focus sur le champ si Control_Name.value n'est pas numérique
 Ex. d'utilisation :
 	Test pour une valeur décimale
 Appel : CheckNumericFormat(MyForm.MyControl, "mon message", 1)
*/
function CheckNumericFormat(Control_Name, Message, Control_Focus)
{
	if(isNaN(Control_Name.value))
	{
		if(Message) { alert(Message) }
		if(Control_Focus == 1) { Nom_Control.focus() }
		return false
	}
}
// ****************************************

/* ****************************************
 ** Test sur le format numérique de la valeur d'un contrôle **
 Paramètres :
 	Control_Name *	: Nom du contrôle HTML
	Message			: Message si Control_Name.value n'est pas un entier
	Control_Focus 	: Focus sur le champ si Control_Name.value n'est pas un entier
 Ex. d'utilisation :
 	Test pour une valeur numérique non décimale (entier)
 Appel : CheckIntegerFormat(MyForm.MyControl, "mon message", 0)
*/
function CheckIntegerFormat(Control_Name, Message, Control_Focus)
{
	var texte 	 = Control_Name.value
	var longueur = texte.length
	
	for (i = 0; i < longueur; i++)
	{
		if ("0123456789".indexOf(texte.substr(i,1)) == -1)
		{
			if(Message) { alert(Message) }
			if(Control_Focus == 1) { Control_Name.focus() }
			return false
			break
		}
	}
}
// ****************************************



// ******************************************** //
// ********** Fonctions sur des dates ********** //
// ******************************************** //

/* ****************************************
 ** Comparaison de 2 dates **
 Paramètres :
 	DateRef_annee *		: Année de référence
	DateRef_mois *		: Mois de référence
	DateRef_jour *		: Jour de référence
	DateTest_annee *	: Année à tester
	DateTest_mois *		: Mois à tester
	DateTest_jour *		: Jour à tester
	Message1			: Message si date à tester < à date de référence
	Message2			: Message si date à tester = à date de référence
 Ex. d'utilisation :
 	la date inscrite doit être supérieure [ou égale] à telle autre date (peut être ajourd'hui ou autre)
 Appel : Compare_2_Dates("2003", "05", "24", "2003", "05", "23", "La date doit être >= à aujourd'hui", "La date doit êtr > à aujourd'hui")
*/
function Compare_2_Dates(DateRef_annee, DateRef_mois, DateRef_jour, DateTest_annee, DateTest_mois, DateTest_jour, Message1, Message2)
{
	Aujourdhui 			= new Date(DateRef_annee.value, DateRef_mois.value, DateRef_jour.value) 	// aaaa/mm/jj
	AujourdhuiParse 	= Date.parse(Aujourdhui)													// nombre de millisecondes depuis la 01/01/1970 à minuit j'usqu'à aujourd'hui
	date_compare 		= new Date(DateTest_annee.value, DateTest_mois.value, DateTest_jour.value)	// aaaa/mm/jj
	date_compareParse 	= Date.parse(date_compare)													// nombre de millisecondes depuis la 01/01/1970 à minuit j'usqu'à la date de validité
	compare 			= Date.parse(date_compare) - Date.parse(Aujourdhui)							// différence entre les deux nombres
	
	if (compare < 0)
	{
		if(Message1) { alert(Message1) }
			return false
	}
	else
	{
		if (compare == 0){
			if(Message2) { alert(Message2) }
			return false
		}
	}
		//return compare
}
// ****************************************

/* ****************************************
 ** Test de format de Date de la valeur d'un champ (JJ/MM/AAAA ou JJ/MM/AA) **
 Paramètres :
 	Control_Name *	: Nom du contrôle HTML
	Message_Empty	: Message si date vide
	Message_Error	: Message si date invalide
	Oblig			: Date obligatoire ?
	Separator		: séparateur ("/" par défaut, au choix "-", "."...)
	Control_Focus 	: Focus sur le champ si Control_Name.value est vide (si obligatoire) ou invalide
 Ex. d'utilisation :
 	...
 Appel : CheckDate(MyForm.MyControl, "La date de naissance est obligatoire", "Date de naissance invalide !", 1, "-", 1)
*/
function CheckDate(Control_Name, Message_Empty, Message_Error, Oblig, Separator, Control_Focus)
{
	var d = Control_Name.value
	if (Message_Empty == "") { Message = "Merci de remplir la date" }
	if (Message_Error == "") { Message = "Date non valide.\nFormat : JJ/MM/AAAA ou JJ/MM/AA" }
	if (Separator 	  == "") { Separator = "/" }
	
	if(d == "")
	{
		if(oblig == true)
		{
			alert(Message)
			if(Control_Focus == 1) { Control_Name.focus() }
		}
	}
	else
	{
		var j  = d.substring(0,2);
		var m  = d.substring(3,5);
		var a  = d.substring(6);
		var ok = true
		
		if ( isNaN(j) || j < 1 || j > 31) 									{ ok = false; }
		if (isNaN(m)  || m < 1 || m > 12) 									{ ok = false; }
		if (isNaN(a)  || a.length < 2 || a.length == 3  || a.length > 4)	{ ok = false; }
		if(d.substring(2,3) != Separator || d.substring(5,6) != Separator)	{ ok = false; }
		
		if(ok == false)
		{
			alert(Message_Error)
			if(Control_Focus == 1) { Control_Name.focus() }
		}
	}
}
// ****************************************



// ********************************************* //
// ********** Fonctions sur les mails ********** //
// ********************************************* //

/* ****************************************
 ** Test sur le format d'une adresse e-mail **
 Paramètres :
 	Mail_Adress * 	: Valeur du champ contenant l'adresse e-mail
	Message_Empty	: Message si Mail_Adress est vide
	Message_Error	: Message si Mail_Adress est invalide
 Ex. d'utilisation :
 	...
 Appel : CheckMail(MyForm.MyControl, "Votre e-mail est obligatoire", "E-mail invalide !")
*/
function CheckMail(Mail_Adress/*, Message_Empty*/, Message_Error)
{
	var email = Mail_Adress
	
	/*if (Message_Empty == "") { Message_Empty = "L'adresse email n'est pas remplie." }*/
	if (Message_Error == "") { Message_Error = "Adresse email invalide" }
	
	/*if(email == "") { alert(Message_Empty) }
	else
	{*/
		if(email == "" || email.indexOf(".") == -1 || email.indexOf("@") == -1 || email.indexOf(" ") != -1 || email.indexOf(";") != -1)
		{
			alert(Message_Error)
			//return false
		}
		else
		{
			var place = email.indexOf("@", 1);
			var point = email.indexOf(".", place + 1);
			
			i = 0
			for(j = 0; j < email.length; j++)
			{
				if(email.charAt(j) == "@")
				{
					i++;
					arobase = i;
				}
			}
			if ((place > -1) && (email.length > 2) && (point > 1) && i == 1)
			{
				// mail ok
			}
			else
			{
				alert(Message_Error)
				//return false
			}
		/*}*/
	}
}
// Note : ajouter gestion focus
// ****************************************



// ***************************************** //
// ********** Fonctions diverses *********** //
// ***************************************** //

/* ****************************************
 ** Test sur la contenance d'espaces de la valeur d'un contrôle **
 Paramètres :
 	Control_Name *	: Nom du contrôle HTML
	Message			: Message si Control_Name.value contient au moins 1 espace
 Ex. d'utilisation :
 	Test d'une URL sans espace
 Appel : Spaces(MyForm.MyControl, "URL invalide")
*/
function CheckSpaces(Control_Name, Message)
{
	var texte 	 = Nom_Control.value
	var longueur = texte.length
	
	for (i = 0; i < longueur; i++)
	{
		if (" ".indexOf(texte.substr(i,1)) == -1)
		{
			return false
			break
		}
	}
}
// Note : ajouter gestion focus
// ****************************************
