// -----------------------------------------------------------------------
// Auteur : Internet Solutions, 18 Bd de Reuilly 75012 PARIS
// Email : info@internet-solutions.fr	
// Date : Aout 2005
// Toute reproduction ou modification intégrale ou partielle est interdite
// sans un accord préalable et écrit d Internet Solutions
// -----------------------------------------------------------------------
//*******************************************************************************************
//	Script :		Client_Library.js
//	Description :	Fonctions de script clients
//*******************************************************************************************

//*******************************************************************************************
// inclusion des bibliothèques de fonctions et de constantes
//
// -->IsStringOK (Compare le contenu d'une chaine (stringTape) avec le contenu d'une chaine de référence (StringOk).
//
// -->IsStringNotOK (Vérifie si un caractère interdit se trouve dans une chaine de caractères)
//
// -->CountOccurrences (Compte le nombre d'occurrences d'un élément donné dans une chaine de caractères.)
//
// -->IsFirstLastStringOK (Teste la validité du premier et du dernier caractère d'une chaine)
//
// -->ContainOnlySpaces (Détecte si la chaîne ne contient que des espaces)
//
// -->SelectAll (Selectionne toutes les options d'un select multiple)
//
//*******************************************************************************************


function IsStringOK(str_tape, str_ok)
//*******************************************************************************************
//  Auteur : Internet Solutions
//
//	Fonction :	IsStringOK
//
//	Objet :		Compare le contenu d'une chaine (stringTape)
//	            avec le contenu d'une chaine de référence (StringOk).
//
//	Entrées :	- str_tape : Chaine de caractères saisie.
//				- str_ok : Chaine de caractères de référence.
//
//	Sortie :	si non conforme : - False
//									  - affichage d'un message d'erreur avec explications
//									  - focus sur l'élément
//					True sinon
//*******************************************************************************************
{
	var int_i, int_j;
		// parcours de la chaine de caractères
    	for (int_i = 0; int_i < str_tape.length; int_i++)
	 	{	
	   		var str_Ch = str_tape.charAt(int_i);
	   		for (int_j = 0; int_j < str_ok.length; int_j++)
	     		if (str_Ch == str_ok.charAt(int_j))
					break;
	   			if (int_j == str_ok.length)
				return(false);
	  	}
	 	return (true);
}


function IsStringNotOK(str_tape, str_NotOK)
//*******************************************************************************************
//  Auteur : Internet Solutions
//
//	Fonction	: IsStringNotOK
//
//	Objet		: Vérifie si un caractère interdit se trouve dans une chaine de caractères
//
//	Entrées		:- str_tape : Chaine de caractères saisie.
//				 - str_NotOK : Chaine de caractères de référence.
//
//	Sortie		:- False (si un caractère interdit est détecté) :
//				 - True (si aucun caractère interdit n'est détecté)
//*******************************************************************************************
{
	var int_i, int_j;
		// parcours de la chaine de caractères non autorisés
    	for (int_i = 0; int_i < str_NotOK.length; int_i++)
	 	{	
	   		//Sélection du premier caractères de la chaine de caractères non autorisés
	   		var str_Ch = str_NotOK.charAt(int_i);
	   		
	   		// parcours de la chaine de caractères à vérifier
	   		for (int_j = 0; int_j < str_tape.length; int_j++)
	   		{
	   			//comparaison du caractère interdit avec le caractère parcouru
	     		if (str_Ch == str_tape.charAt(int_j))
	     		{
					return(false);
				}
			}
	   			
	  	}
	 	return (true);
}


function CountOccurrences(str_characters, var_char)
//*******************************************************************************************
//  Auteur : Internet Solutions
//
//	Fonction :	CountOccurrences
//
//	Objet :		Compte le nombre d'occurrences d'un élément donné dans une chaine de caractères.
//
//	Entrées :	- str_characters : Chaine de caractères saisie.
//				- var_char : Caractère recherché.
//
//	Sortie :	- int_nbOccur : Nombre d'occurrences.
//*******************************************************************************************
{
	var int_length; //Nombre de caractères
	var int_nbOccur; //Nombre d'occurrences

	int_length = str_characters.length;
	int_nbOccur = 0;
	
	//parcours de la chaine de caractères
	for (int_i = 0; int_i <= int_length; int_i++)
	{
		//si le caractère courant correspond au caractère recherché
		//on incrémente le compteur d'occurrences
		if((str_characters.substr(int_i, 1) == var_char))
		{
			int_nbOccur = int_nbOccur + 1;
		}
	}

	return int_nbOccur;  //on retourne le nombre d'occurrences
}


function IsFirstLastStringOK(str_mailCharacters)
//*******************************************************************************************
//  Auteur : Internet Solutions
//
//	Fonction :	IsFirstLastStringOK
//
//	Objet :		Teste la validité du premier et du dernier caractère d'une chaine
//
//	Entrées :	- str_mailCharacters : Chaine de caractères saisie.
//
//	Sortie :	si non conforme : - False
//									  - affichage d'un message d'erreur avec explications
//									  - focus sur l'élément
//					True sinon
//*******************************************************************************************
{
	var str_FirstCharacter = str_mailCharacters.slice(0,1);
	var str_LastCharacter = str_mailCharacters.slice(str_mailCharacters.length - 1);
	var str_CharactMailOk = "0123456789azertyuiopqsdfghjklmwxcvbnAZERTYUIOPQSDFGHJKLMWXCVBN";
			
	//Test si les deux caractères (premier et dernier) sont des caractères autorisés
	//par rapport à la chaine de référence str_CharactMailOk.			
	if (!(IsStringOK(str_FirstCharacter, str_CharactMailOk) && IsStringOK(str_LastCharacter, str_CharactMailOk)))
	{
		return false;
	}
	return true;										
}


function ContainOnlySpaces(str_string)
//*******************************************************************************************
//  Auteur : Internet Solutions
//
//	Fonction :	ContainOnlySpaces()
//
//	Objet :		Détecte si la chaîne ne contient que des espaces
//
//	Entrées :	- str_string (type string): chaine de caractères à vérifier
//
//	Sortie :	True si ne contient que des espaces sinon false
//
//*******************************************************************************************
{
	// on récupère le nombre d'espaces dans la chaine
	var int_nbEspace = CountOccurrences(str_string,' ');

	// on calcule la longueur de la chaine
	var int_longueur = str_string.length;

	// si les deux sont identiques, c'est que l'on a que des espaces.
	if (int_nbEspace == int_longueur)
	{
		return true;
	}
	
	// sinon tout roule
	return false;
}


//*******************************************************************************************
//  Auteur : Internet Solutions
//
//	Fonction :		SelectAll(obj_HTMLElement)
//
//	Objet :			Selectionne toutes les options d'un select multiple
//
//	Appliquée à :	- select multiple
//
//	Entrées :		- obj_HTMLElement (type objet) : objet HTML à vérifier
//
//	Sortie :		si non conforme : - false
//									  - affichage d'un message d'erreur (debug)
//					true sinon
//******************************************************************************************

function SelectAll(obj_HTMLElement, bln_defaultoption)
{
	if(obj_HTMLElement.type == "select-multiple") 
	{
		//Condition, si aucune sélection n'a été faite, pour ajouter une option vide de valeur vide, afin que le selectmultiple soit posté page suivante.
		if ((obj_HTMLElement.length == 0)&&(bln_defaultoption))
		{
			var obj_newoption = new Option('','');
			obj_HTMLElement.options[0] = obj_newoption;
			obj_HTMLElement.options[0].selected = true;			
		}
		for(var i = 0; i < obj_HTMLElement.length; i++)
		{
			obj_HTMLElement.options[i].selected = true;
		}
		return true;
	}
	else
	{
		alert(err_Object);
		return false;
	}
}