/***************************************************************************/
/*       Librairie de controle de gestion des expressions regulieres       */
/*                                                                         */
/* Auteur : Olivier Gaillot                                                */
/* Date de creation : 12/12/2007                                           */
/*                                                                         */
/* v1.0 du 12/12/2007 : fonctions initiales :                              */
/*                        - alphanumerique                                 */
/*                        - tel                                            */
/*                        - empty                                          */
/*                        - date                                           */
/*                        - url                                            */
/*                                                                         */
/***************************************************************************/


/* EXPRESSIONS REGULIERES */

// empty
var rxEmpty=/^$/g; // chaine vide

// alphanumerique
var rxAlphanum=/[0-9a-zA-Z\S.]+/g; // chaine alphanumerique sans espace
var rxAlphanumEsp=/[0-9a-zA-Z ]+/g;	// chaine alphanumerique + espace
var rxAlpha=/[a-zA-Z]+/g; // chaine alphabetique
var rxAlphaEspTiret=/[a-zA-Z -]+/g; // chaine alphabetique + espace + tiret
var rxAlphaMin=/[a-z]+/g; // chaine alphabetique en minuscules
var rxAlphaMaj=/[A-Z]+/g; // chaine alphabetique en majuscules
var rxNum=/[0-9]+/g; // chaine numerique
var rxInt=/^[0-9]+$/g; // chaine de type 'int'

// date
var rxTime=/^([01][0-9]|2[0123])\:([012345][0-9])$/g; // chaine de type 'time'. Ex : '12:51'
var rxTimeH=/^([01][0-9]|2[0123])\h([012345][0-9])$/g; // chaine de type 'time'. Ex : '12h51'
var rxFrDate=/^(0[1-9]|[12][0-9]|3[01])[\- \/\.](0[1-9]|1[012])[\- \/\.](19|20)\d\d$/g; // date au format jj/mm/aaaa ou jj-mm-aaaa ou jj mm aaaa ou jj.mm.aaaa avec aaaa compris entre 1900 et 2099.
var rxFrDateNoSpc=/^(0[1-9]|[12][0-9]|3[01])[\-\/\.](0[1-9]|1[012])[\-\/\.](19|20)\d\d$/g; // date au format jj/mm/aaaa ou jj-mm-aaaa ou jj.mm.aaaa avec aaaa compris entre 1900 et 2099.
var rxFrDateJM=/^(0[1-9]|[12][0-9]|3[01])[\-\/\.](0[1-9]|1[012])\d\d$/g; // date au format jj/mm ou jj-mm ou jj.mm.
var rxEnDate=/^(19|20)\d\d[\- \/\.](0[1-9]|1[012])[\- \/\.](0[1-9]|[12][0-9]|3[01])$/g; // idem ci-dessus mais format anglais. Ex : aaaa/mm/jj

// telephone
var rxCP=/^[0-9]{2} ?[0-9]{3}$/g; // code postal. Ex : '33 370' ou '33370'
var rxTelFixe=/^(01|02|03|04|05|09)[ \.\-]?[0-9]{2}[ \.\-]?[0-9]{2}[ \.\-]?[0-9]{2}[ \.\-]?[0-9]{2}$/g; // numero de tel fixe. Ex : '01.34.12.52.30' ou '0134125230'
var rxTelPort=/^(06)[ \.\-]?[0-9]{2}[ \.\-]?[0-9]{2}[ \.\-]?[0-9]{2}[ \.\-]?[0-9]{2}$/g; // numero de tel portable
var rxTelNat=/^(0[12345689])[ \.\-]?[0-9]{2}[ \.\-]?[0-9]{2}[ \.\-]?[0-9]{2}[ \.\-]?[0-9]{2}$/g; // numero de tel national y compris numeros de portable et 08
var rxTelInt=/^(\(\+[0-9]{2}\))[ \.\-]?[0-9][ \.\-]?[0-9]{2}[ \.\-]?[0-9]{2}[ \.\-]?[0-9]{2}[ \.\-]?[0-9]{2}$/g; // numero de tel format international. Ex : '(+33) 1 34 12 52 30'

// url
var rxEmail=/^[A-Za-z0-9](([_\.\-]?[a-zA-Z0-9]+)*)@([A-Za-z0-9]+)(([\.\-]?[a-zA-Z0-9]+)*)\.([A-Za-z]{2,})$/g; // adresse email
var rxIp=/\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b/g;	// adresse ip
var rxDomaine=/^([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,6}$/g; // nom de domaine. Ex : 'toto.com'
var rxUrl=/^(((ht|f)tp(s?))\:\/\/)?(([a-zA-Z0-9]+([@\-\.]?[a-zA-Z0-9]+)*)(\:[a-zA-Z0-9\-\.]+)?@)?(www.|ftp.|[a-zA-Z]+.)?[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,})(\:[0-9]+)?\/?/g; // Accepte une url ftp, http ou https, avec ou sans login/mot de passe, avec ou sans numero de port. Ex : 'http://www.toto.com', 'ftp://toto:toto@ftp.toto.com:21/'
var rxHexColor=/^#[0-9A-Fa-f]{6}$/g; // couleur hexa


/* FONCTIONS */

// fonctions match
function matchRx(valeur, rx) {
	var resultat = valeur.match(rx);
	if(resultat!=null && resultat.length==1) return true;
	else return false;
}

function doesntMatchRx(valeur, rx) {
	if(matchRx(valeur, rx)) return false;
	else return true;
}

// fonctions de controle
function isEmpty(valeur) {
	return matchRx(valeur, rxEmpty);
}

function isNotEmpty(valeur) {
	return doesntMatchRx(valeur, rxEmpty);
}

function isNotAlphanum(valeur) {
	return doesntMatchRx(valeur, rxAlphanum);
}

function isNotAlphanumEsp(valeur) {
	return doesntMatchRx(valeur, rxAlphanumEsp);
}

function isNotAlpha(valeur) {
	return doesntMatchRx(valeur, rxAlpha);
}

function isNotAlphaEspTiret(valeur) {
	return doesntMatchRx(valeur, rxAlphaEspTiret);
}

function isNotNumeric(valeur) {
	return doesntMatchRx(valeur, rxNum);
}

function isNotInt(valeur) {
	return doesntMatchRx(valeur, rxInt);
}

function isNotTime(valeur) {
	return doesntMatchRx(valeur, rxTime);
}

function isNotTimeH(valeur) {
	return doesntMatchRx(valeur, rxTimeH);
}

function isNotDate(valeur, mode) {
	switch (mode) {
		case "fr": 
			return doesntMatchRx(valeur, rxFrDate);
			break;
		case "fr-nospc": 
			return doesntMatchRx(valeur, rxFrDateNoSpc);
			break;
		case "fr-jm": 
			return doesntMatchRx(valeur, rxFrDateJM);
			break;
		case "en":
			return doesntMatchRx(valeur, rxEnDate);
			break;
		default: 
			return doesntMatchRx(valeur, rxFrDate);
			break;
	}
}

function isNotCodePostal(valeur) {
	return doesntMatchRx(valeur, rxCP);
}

function isNotTelephone(valeur, mode) {
	switch (mode)	{
		case "fixe" : 
			return doesntMatchRx(valeur, rxTelFixe);
			break;
		case "port" :
			return doesntMatchRx(valeur, rxTelPort);
			break;
		case "nat" :
			return doesntMatchRx(valeur, rxTelNat);
			break;
		case "int" :
			return doesntMatchRx(valeur, rxTelInt);
			break;
		default : 
			return doesntMatchRx(valeur, rxTelNat);
			break;
	}
}

function isNotEmailAdress(valeur) {
	return doesntMatchRx(valeur, rxEmail);
}

function isNotIpAdress(valeur) {
	return doesntMatchRx(valeur, rxIp);
}

function isNotDomainName(valeur) {
	return doesntMatchRx(valeur, rxDomaine);
}

function isNotUrl(valeur) {
	return doesntMatchRx(valeur, rxUrl);
}

function isNotHexColor(valeur) {
	return doesntMatchRx(valeur, rxHexColor);
}

// fonctions de comptage du nombre de caracteres specifiques contenus dans la chaine "valeur"
function NbCarNum(valeur) {
  var nb= 0;
  var resultat = valeur.match(rxNum);
  if(resultat)
  for(i=0;i<resultat.length;++i)
  nb+=((resultat[i]).length);
  return(nb);
}

function NbCarAlphaMin(valeur) {
  var nb= 0;
  var resultat = valeur.match(rxAlphaMin);
  if(resultat)
  for(i=0;i<resultat.length;++i)
  nb+=((resultat[i]).length);
  return(nb);
}

function NbCarAlphaMaj(valeur) {
  var nb= 0;
  var resultat = valeur.match(rxAlphaMaj);
  if(resultat)
  for(i=0;i<resultat.length;++i)
  nb+=((resultat[i]).length);
  return(nb);
}

function NbCarAlphaNum(valeur) {
  var nb= 0;
  var resultat = valeur.match(rxAlphanum);
  if(resultat)
  for(i=0;i<resultat.length;++i)
  nb+=((resultat[i]).length);
  return(nb);
}

