
// Objet         :   Renvoie une chaîne épurée des espaces de début et de fin.

// Paramètre     : - la chaîne à traiter.
// Renvoie       : - la chaîne épurée.

function JSC_strTrim_String(str) {
	try {
		str=str.replace(/^\s+/g,"");
		str=str.replace(/\s+$/g,"");
	} catch (e) {
		str = "";
	}
	return str;
}

// Objet         :   Détermine si une chaîne est numérique.

// Paramètres    : - la chaîne à tester,
//                 - un booléen indiquant si la virgule est considérée comme
//                   séparateur décimal.
// Renvoie       : - true si la chaîne est numérique,
//                 - false sinon.

function JSC_isNumber_String(str,hasComma) {
	str=JSC_strTrim_String(str);                                                // Enlevons les espaces inutiles !
	intFCT_virgules=0;                                                          // Nombre de séparateurs décimaux trouvés

	// On accepte les caractères "+" et "-" uniquement en début de chaîne
	if (str.charAt(0)=="-" || str.charAt(0)=="+")
		str=str.substring(1,str.length);                                        // On se débarasse du signe

	for (i=0 ; i<str.length ; i++)
		if (str.charAt(i)=="." || (hasComma && str.charAt(i)==","))
			intFCT_virgules++;                                                  // Et un séparateur décimal, un !
		else
			if (str.charAt(i)<"0" || str.charAt(i)>"9")                         // Pas numérique ?
				return false;                                                   // -> ce n'est pas un nombre
	if (intFCT_virgules>1)                                                      // Plus d'un séparateur décimal ?
		return false;                                                           // -> ce n'est pas un nombre
	return true;
}


function JSC_isInteger_String(str) {
	str=JSC_strTrim_String(str);                                                // Enlevons les espaces inutiles !

	// On accepte les caractères "+" et "-" uniquement en début de chaîne
	if (str.charAt(0)=="-" || str.charAt(0)=="+")
		str=str.substring(1,str.length);                                        // On se débarasse du signe

	for (i=0 ; i<str.length ; i++)
		if (str.charAt(i)<"0" || str.charAt(i)>"9")                         // Pas numérique ?
			return false;                                                   // -> ce n'est pas un nombre
	return true;
}

// Objet         :   Détermine si une chaîne est une adresse électronique
//                   sémantiquement valide.

// Paramètres    : - la chaîne à tester.
// Renvoie       : - true si la chaîne est une adresse électronique valide,
//                 - false sinon.
// Bugs          : - N/A
// Notes         : - Ne teste pas si l'adresse correspond effectivement à un
//                   individu !
//                 - Dans les commentaires, le symbole * représente zéro ou
//                   plusieurs caractères quelconques.

function JSC_isEmail_String(str) {


	if (str.indexOf("'")!=-1)                                                   // "'" refusé
		return false;
	if (str.indexOf(" ")!=-1)                                                   // " " refusé
		return false;
	if (str.indexOf('"')!=-1)                                                   // '"' refusé
		return false;
	if (str.indexOf("#")!=-1)                                                   // "#" refusé
		return false;
	if (str.indexOf("(")!=-1)                                                   // "(" refusé
		return false;
	if (str.indexOf(")")!=-1)                                                   // ")" refusé
		return false;
	if (str.indexOf("/")!=-1)                                                   // "/" refusé
		return false;
	if (str.indexOf("\\")!=-1)                                                  // "\" refusé
		return false;
	if (str.indexOf("?")!=-1)                                                   // "?" refusé
		return false;
	if (str.indexOf(":")!=-1)                                                   // ":" refusé
		return false;
	if (str.indexOf(";")!=-1)                                                   // ";" refusé
		return false;
	if (str.indexOf("+")!=-1)                                                   // "+" refusé
		return false;
	if (str.indexOf("=")!=-1)                                                   // "=" refusé
		return false;
	if (str.indexOf("<")!=-1)                                                   // "<" refusé
		return false;
	if (str.indexOf(">")!=-1)                                                   // ">" refusé
		return false;
	if (str.indexOf("*")!=-1)                                                   // "*" refusé
		return false;
	if (str.indexOf("%")!=-1)                                                   // "%" refusé
		return false;
	if (str.indexOf("&")!=-1)                                                   // "&" refusé
		return false;
	if (str.indexOf(".@")!=-1)                                                  // "*.@*" refusé
		return false;
	if (str.indexOf("@.")!=-1)                                                  // "*@.*" refusé
		return false;
	if (".@".indexOf(str.charAt(0))!=-1)                                        // "@*" et ".*" refusés
		return false;
	if (".@".indexOf(str.charAt(str.length-1))!=-1)                             // "*@" et "*." refusés
		return false;
	if (str.search(/@.*@/g)!=-1)                                                // "*@*@*" et "*@@*" refusés
		return false;
	if (str.indexOf("..")!=-1)                                                  // "*..*" refusé
		return false;
	if (str.search(/@.*\./g)==-1)                                               // On refuse s'il n'y a pas de point à droite de "@"
		return false;
	if (str.length>5+str.lastIndexOf("."))                                      // On refuse les extensions de plus de 4 caractères
		return false;
	return true;
}

// Objet         :   Détermine si une chaîne est un numéro de téléphone
//                   sémantiquement valide.

// Paramètres    : - la chaîne à tester.
// Renvoie       : - true si la chaîne est un numéro de téléphone valide,
//                 - false sinon.

function JSC_isTel_String(str) {
	if (str.search(/[^0-9\(\)+\-.\/ ]/gi)!=-1)                                  // Y a-t-il des caractères autres que "0" à "9", "(", ")", "+", "-", " " ,"/" et "." ?
		return false;                                                           // -> ce n'est pas un numéro de téléphone
	else
		return true;
}

// Objet         :   Détermine si une chaîne est vide (ou avec uniquement des espaces).

// Paramètres    : - la chaîne à tester.
// Renvoie       : - true si la chaîne est vide,
//                 - false sinon.

function JSC_isEmpty_String(str) {
	return (JSC_strTrim_String(str).length==0);
}
