/***************************************************************************************
 * Version 		: 0.1
 * Copyrigth	: LSI Media Sàrl
 ***************************************************************************************/

/**
 * Détecter si l'expression est vide
 * Création 		: 2004-03-04 FB
 * Modification 	: 2004-03-04 FB
 *
 * @param expression	La donnée à vérifier
 * @return            	true si contient une valeur ou des espaces, sinon false
 */
function isEmpty(expression) {
	return (expression == null || expression.length == 0);
}


/**
 * Détecter si l'expression ne contient uniquement un ou plusieurs espaces
 * Création 		: 2004-03-04 FB
 * Modification 	: 2004-03-04 FB
 *
 * @param expression	La donnée à vérifier
 * @return            	true si contient une valeur ou des espaces, sinon false
 */
function isWhitespace(expression) {
	//alert("isWhitespace");
	var myRegExp = /^\s+$/;
	return (myRegExp.test(expression));
}


/**
 * Détecter si l'expression est un nombre (float, integer, etc.)
 * Création 		: 2003-08-26 FB
 * Modification 	: 2003-08-26 FB
 *
 * @param expression	La donnée à vérifier
 * @return            	true si la donnée est un numérique, sinon false
 */
function isNumeric(expression) {
	//alert("isNumber(" + expression + ")");
	return !(isNaN(expression) || (expression == ''));
}


/**
 * Détecter si l'expression un entier
 * Création 		: 2003-08-26 FB
 * Modification 	: 2003-08-26 FB
 *
 * @param expression	La donnée à vérifier
 * @return            	true si la donnée est un entier, sinon false
 */
function isInt(expression) {
	//alert("isInt(" + expression + ")");

	return !(isNaN(expression) || (parseInt(expression) != expression));
}


/**
 * Détecter si une valeur se trouve dans l'intervalle
 * Création 		: 2004-03-04 FB
 * Modification 	: 2004-03-04 FB
 *
 * @param value			valeur
 * @param min			borne inférieure de l'intervalle
 * @param max			borne supérieure de l'intervalle
 * @return            	true si dans l'intervalle, sinon false
 */
function isWithinRange(value, min, max) {
	return (value >= min && value <= max);
}


/**
 * Détecter si l'expression est de type alphanumérique
 * Création 		: 2004-03-04 FB
 * Modification 	: 2004-03-04 FB
 *
 * @param expression	La donnée à vérifier
 * @return            	true alphanumérique, sinon false
 */
function isAlphaNumeric(expression) {
	var myRegExp = /^[a-zA-Z0-9]+$/;
	return myRegExp.test(expression);
}

/**
 * Détecter si l'expression est de type alphabétique
 * Création 		: 2004-03-04 FB
 * Modification 	: 2004-03-04 FB
 *
 * @param expression	La donnée à vérifier
 * @return            	true alphabétique, sinon false
 */
function isAlphabetic(expression) {
	var myRegExp = /^[a-zA-Z]+$/;
	return myRegExp.test(expression);
}


/**
 * Détecter si un checkbox est coché
 * Création 		: 2004-03-04 FB
 * Modification 	: 2004-03-04 FB
 *
 * @param obj		Le checkbox à vérifier
 * @return          true si coché, sinon false
 */
function isChecked(obj) {
	return (obj.checked);
}


/**
 * Détecter si l'expression a la structure d'un e-mail
 * Création 		: 2003-08-26 FB
 * Modification 	: 2003-08-26 FB
 *
 * @param expression		La donnée à vérifier
 * @return            		message d'erreur si la donnée n'a pas la structure d'un mail, sinon message vide
 */
function isMail(expression) {
	var myRegExp = /^.+@.+\..{2,3}$/
	return myRegExp.test(expression);
}


/**
 * Détecter si l'expression a la structure d'une date au format MySQL
 * Création 		: 2003-08-26 FB
 * Modification 	: 2003-08-26 FB
 *
 * @param expression		La donnée à vérifier
 * @return            		message d'erreur si la donnée n'est pas une date valide, sinon message vide
 */
function isMySQLDate(date_to_check) {
	//alert("isMySQLDate(" + date_to_check + ")");
	
	var error = "";
	
	var month_days = new Array(31,29,31,30,31,30,31,31,30,31,30,31);
	
	var year = date_to_check.substr(0,4);
	var month = date_to_check.substr(5,2);
	var day = date_to_check.substr(8,2);
	
	// Check NULL
	if (date_to_check == "") {
		error = "- Date non valide (aaaa-mm-jj) (E1)\n";
	}
	// Check des séparateurs
	else if (date_to_check.substr(4,1) != "-" || date_to_check.substr(7,1) != "-") {
		error = "- Date non valide (E2)\n";
	}
	// Check si les données sont des entiers
	else if ((isInt(year) && isInt(month) && isInt(day)) == false) {
		error = "- Date non valide (E3)\n";
	}
	// Check du nombre de caractères (4,2,2)
	else if ((year.length < 4) || (month.length < 2) || (day.length < 2)) {
		error = "- Date non valide (E4)\n";
	}
	// Check si le mois et le jour sont valides
	else if ((month > 12) || (month < 1) || (day < 1)) {
		error = "- Date non valide (E5)\n";
	}
	// Check si le nombre de jours dans le mois est valide
	else if (day > month_days[month - 1]) {
		error = "- Date non valide (E6)\n";
	}
	// Check si l'année est bissextile
	else if (month == 2) {
		var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
		if (day > 29 || (day==29 && !isleap)) {
			error = "- Date non valide (E7)\n";
		}
	}
	return error;
}
