/**
* - regExp_isValidField(type, value, videAutorise)
*
* - regExp_isDate(d, langage, videAutorise)
* - regExp_isReal(value, videAutorise)
* - regExp_isInteger(value, videAutorise)
* - regExp_isDouble(value, videAutorise)
* - regExp_isEmail(value, videAutorise)
* - regExp_isTelephoneBritannique(value, videAutorise)
* - regExp_isTelephoneFrancais(value, videAutorise)
*/

	//var glRegExp_listWords = new Array();



	var REGEXP_ALERT_VALEUR_INCORRECT = "";

	var REGEXP_DOUBLE = "double";
	var REGEXP_HOURS = "hours";
	var REGEXP_DATE = "date";
	var REGEXP_REAL = "real";
	var REGEXP_INTEGER = "integer";
	var REGEXP_EMAIL = "email";
	var REGEXP_FRENCHPHONE = "french_phone";
	var REGEXP_ENGLISHPHONE = "english_phone";

	function regExp_isValidTime(field, videAutorise)
	{
		if(videAutorise && field.value == "")
			return true;
			
		 var regHours = new RegExp("^[0-2]?[0-9]:?[0-5]?[0-9]?:?[0-5]?[0-9]?$", "i");//[-+]?
		 if(regHours.test(field.value))
		 {
			var tab = field.value.split(":");
			
			var hours = tab[0]*1;
			if(hours < 10)
				hours = "0"+hours;
				
			var minutes = "00";
			if(tab.length > 1)
			{
				minutes = tab[1]*1;
				if(minutes < 10)
					minutes = "0"+minutes;
			}
				
			var secondes = "00";
			if(tab.length > 2)
			{
				secondes = tab[2]*1;
				if(secondes < 10)
					secondes = "0"+secondes;
			}
			
			 
			field.value = hours+":"+minutes+":"+secondes;
			
			return  regExp_isHOURS(field.value, videAutorise);
		}
		
		return false;
	}
	
	function regExp_isValidField(field, type, videAutorise)
	{
		regExp_isValidValue(field, type, videAutorise, true, true);
	}
	function regExp_isValidValue(field, type, videAutorise, canBeNegative, canBeEqualZero)
	{

		var value = field.value;
		var isErreur = false;
		
		if(!videAutorise && value == "")
			isErreur = true;
		
		if(type == REGEXP_DOUBLE)
		{
			value = default_replaceAll(value, ' ', '', true);
			value = default_replaceAll(value, ',', '.', true);
		
			if(value.indexOf("|") == -1)
			{
				try
				{
					if(value)
						value = (eval(value));
				}
				catch(e)
				{}
	
				if(!regExp_isDouble(value, videAutorise))
				{
					isErreur = true;
				}
				if(!canBeNegative && !isErreur && value < 0)
					isErreur = true;
				if(!canBeEqualZero && !isErreur && value == 0)
					isErreur = true;
					
				field.value = value;
			}
		}
		else if(type == REGEXP_DATE)
		{
			if(!regExp_isDATE(value, videAutorise))
			{
				isErreur = true;
			}
		}
		else if(type == REGEXP_HOURS)
		{
			if(!regExp_isHOURS(value, videAutorise))
			{
				isErreur = true;
			}
		}
		else if(type == REGEXP_INTEGER)
		{
			value = default_replaceAll(value, ' ', '', true);
			value = default_replaceAll(value, ',', '.', true);
			
			if(value.indexOf("|") == -1)
			{
				try
				{
					if(value)
						value = Math.round(eval(value));	
				}
				catch(e)
				{}
				
				if(!regExp_isInteger(value, videAutorise))
				{
					isErreur = true;
				}
				if(!canBeNegative && !isErreur && value < 0)
					isErreur = true;
				if(!canBeEqualZero && !isErreur && value == 0)
					isErreur = true;
					
				field.value = value;
			}
		}
		else if(type == REGEXP_REAL)
		{
			value = default_replaceAll(value, ' ', '', true);
			value = default_replaceAll(value, ',', '.', true);
			
			if(!regExp_isReal(value, videAutorise))
			{
				isErreur = true;
			}
			if(!canBeNegative && !isErreur && value < 0)
				isErreur = true;
			if(!canBeEqualZero && !isErreur && value == 0)
				isErreur = true;
		}
		else if(type == REGEXP_EMAIL)
		{
			if(!regExp_isEmail(value, videAutorise))
			{
				isErreur = true;
			}
		}
		else if(type == REGEXP_FRENCHPHONE)
		{
			if(!regExp_isTelephoneFrancais(value, videAutorise))
			{
				isErreur = true;
			}
		}
		else if(type == REGEXP_ENGLISHPHONE)
		{
			if(!regExp_isTelephoneBritannique(value, videAutorise))
			{
				isErreur = true;
			}
		}
		
		if(isErreur)
		{
			field.value = '';
			field.focus();
			alert(REGEXP_ALERT_VALEUR_INCORRECT);	
		}
	}
	
	function regExp_isValidDate(field, langage, videAutorise)
	{
		var isErreur = !regExp_isDate(field.value, langage, videAutorise);
		if(isErreur)
		{
			field.value = '';
			field.focus();
			if(langage == "en")
				alert(REGEXP_ALERT_VALEUR_INCORRECT+" : (mm/jj/aaaa)");	
			else
				alert(REGEXP_ALERT_VALEUR_INCORRECT+" : (jj/mm/aaaa)");	
		}
	}
	
	/**
	* Fonction permettant de dir si d est une date valide ou non
	* laguage = "en" ou "fr"
	*/
	function regExp_isDate(d, langage, videAutorise)
	 {
		 if(videAutorise && d == "")
			return true;
			
	     // Cette fonction permet de v?rifier la validit? d'une date au format jj/mm/aa ou jj/mm/aaaa
	     // Par Romuald
	     
	     if (d == "") // si la variable est vide on retourne faux
	         return false;
	     
	     e = new RegExp("^[0-9]{1,2}\/[0-9]{1,2}\/([0-9]{4})$");
	     
	     if (!e.test(d)) // On teste l'expression r?guli?re pour valider la forme de la date
	         return false; // Si pas bon, retourne faux
	  
	     // On s?pare la date en 3 variables pour v?rification, parseInt() converti du texte en entier
	     if(langage == "en")
	     {
	    	 m = parseInt(d.split("/")[0], 10); // jour
	    	 j = parseInt(d.split("/")[1], 10); // mois
	     }
	     else
	     {
	     	j = parseInt(d.split("/")[0], 10); // jour
	     	m = parseInt(d.split("/")[1], 10); // mois
	     }
	     a = parseInt(d.split("/")[2], 10); // ann?e
	  
	     // Si l'ann?e n'est compos?e que de 2 chiffres on compl?te automatiquement
	     if (a < 1000) {
	         if (a < 89)    a+=2000; // Si a < 89 alors on ajoute 2000 sinon on ajoute 1900
	         else a+=1900;
	     }
	  
	     // D?finition du dernier jour de f?vrier
	     // Ann?e bissextile si annn?e divisible par 4 et que ce n'est pas un si?cle, ou bien si divisible par 400
	     if (a%4 == 0 && a%100 !=0 || a%400 == 0) fev = 29;
	     else fev = 28;
	  
	     // Nombre de jours pour chaque mois
	     nbJours = new Array(31,fev,31,30,31,30,31,31,30,31,30,31);
	  
	     // Enfin, retourne vrai si le jour est bien entre 1 et le bon nombre de jours, idem pour les mois, sinon retourn faux
	     return ( m >= 1 && m <=12 && j >= 1 && j <= nbJours[m-1] );
	 }
	 
	 /**
	 * Fonction permettant de dire si value est une heure ou non
	 */
	 function regExp_isHOURS(value, videAutorise)
	 {
		 if(videAutorise && value == "")
			return true;
			
		 var regHours = new RegExp("^[0-2][0-9]:[0-5][0-9]:[0-5][0-9]$", "i");//[-+]?
		 if(regHours.test(value))
			return true;
		 else
			return false;
	 }
	 
	 /**
	 * Fonction permettant de dir si value est un r?el ou non
	 */
	 function regExp_isReal(value, videAutorise)
	 {
		 if(videAutorise && value == "")
			return true;
			
		 var regInt = new RegExp("^(\\d+)?$", "i");//[-+]?
		if(regInt.test(value))
			return true;
		else
			return false;
	 }

	/**
	 * Fonction permettant de dir si value est un entier ou non
	 */
	function regExp_isInteger(value, videAutorise)
	{
		if(videAutorise && value == "")
			return true;
			
		if(value < 0)
			value = value * -1;
		else
			value = value * 1;
			
		var regInt = new RegExp("^(\\d+)?$", "i");//[-+]?
		if(regInt.test(value))
			return true;
		else
			return false;
	}
	
	/**
	 * Fonction permettant de dir si value est un double ou non
	 */
	function regExp_isDouble(value, videAutorise)
	{
		if(videAutorise && value == "")
			return true;
			
		if(value < 0)
			value = value * -1;
		else
			value = value * 1;
			
		var regDouble = new RegExp("^\\d+(\.?\\d+)?$", "i");//
		if(regDouble.test(value))
			return true;
		else
			return false;
	}
	
	/**
	 * Fonction permettant de dir si value est un email ou non
	 */
	function regExp_isEmail(value, videAutorise)
	{
		if(videAutorise && value == "")
			return true;
			
		var regEmail = new RegExp("^[a-z0-9._-]+@[a-z0-9.-]{2,}[.][a-z]{2,3}$", "i");
		if(regEmail.test(value))
			return true;
		else
			return false;
	}
	
	/**
	 * Fonction permettant de dir si value est un num?ro de t?l?phone britannique ou non
	 */
	function regExp_isTelephoneBritannique(value, videAutorise)
	{
		if(videAutorise && value == "")
			return true;
			
		var regTelephoneBritannique = new RegExp("^\\d{5} \\d{6}$", "i");
		if(regTelephoneBritannique.test(value))
			return true;
		else
			return false;
	}
	
	/**
	 * Fonction permettant de dir si value est un num?ro de t?l?phone Francais ou non
	 */
	function regExp_isTelephoneFrancais(value, videAutorise)
	{
		if(videAutorise && value == "")
			return true;
			
		var regTelephoneFrancais = new RegExp("^0\\d{1} \\d{2} \\d{2} \\d{2} \\d{2}$", "i");
		if(regTelephoneFrancais.test(value))
			return true;
		else
			return false;
	}
	
	
	function regExp_compare(date_1, date_2)
	{
	    diff = date_1.getTime()-date_2.getTime();
	    return (diff==0?diff:diff/Math.abs(diff));
	}
	
	function regExp_getDate(strDate)
	{	  
	    day = strDate.substring(0,2);
		month = strDate.substring(3,5);
		year = strDate.substring(6,10);
		d = new Date();
		d.setDate(day);
		d.setMonth(month);
		d.setFullYear(year); 
		return d;  
	}
	
	
	function regExp_checkTextWithAntiDictionary(idField, message)
	{
		try
		{
			var elt = document.getElementById(idField);
	
			if(elt)
			{
				var text = elt.value;
				for(var i = 0; i < glRegExp_listWords.length; i++)
				{
					var word = glRegExp_listWords[i];
					
					var reg = new RegExp("\\W"+word+"\\W", "ig");
					res = text.search(reg);
			
					if(res != -1)
					{
						alert(message + word);
						return false;
					}
				}
			}
		}
		catch(e)
		{}
		
		return true;	
	}