/**
 * Librairie JS utilitaire regroupant diverses fonctions.
 * ---
 * Ce fichier repose sur les resources génériques de JavaScript.
 * ---
 * @version 1.00 2008-08-01
 * @author Cédric Talbot
 */

// Définition de l'objet cid.utils qui contiendra toutes les fonctions utilitaires.

var cid = {
	/**
		Définitions des modules utilitaires
	*/
	utils:{
		/**
			Fonctions utilitaires pour la validation de données
		*/
		validation:{
			/**
				Fonction qui valide le format d'un numéro de téléphone
				------------------------------------------------------
				Le format cherché est :
				(000) 000-0000
				L'expression tolère les numéros débutant par un '1' avant la '(' pour les interurbains
				et elle tolère l'absence d'une espace entre le code régional et les 3 premiers chiffres
				(514)_123 ou (514)123
				------------------------------------------------------
				@param value : string : élément à évaluer
				@return : bool : true en cas de succès, false sinon
			*/
			numTel:function(value) {
				var pattern = /(^1?[\-\s\.\(]{0,1}[0-9]{3}[\-\s\.\)]{0,1}\s?[0-9]{3}[\-\s\.]{0,1}([0-9]{4})$){1}/
				return value.match(pattern);
			},
			/**
			 * Fonction qui valide le format d'un code postal
			 * ----------------------------------------------
			 * Le format recherché est A9A9A9
			 * ----------------------------------------------
			 * @param value : string : élément à évaluer
			 * @return : bool : true en cas de succès, false sinon
			 */
			codePostal:function(value) {
				var pattern = /(^[a-z]{1}\d{1}[a-z]{1}\d{1}[a-z]{1}\d{1}$){1}/i
				return value.match(pattern);	
			}
		},
		/**
		 * Fonctions utilitaires pour le formattage des données
		 */
		format:{
			/**
			 * Fonction qui formatte un numéro de téléphone selon le format suivant :
			 * (1-)999-999-9999
			 * ----------------------------------------------------------------------
			 * @param value : string : la valeur à formatter
			 * @return : string : la valeur une fois formattée
			 */
			numTel:function(value) {
				// On vérifie d'abord si la valeur fournie répond au format voulu
				var pattern = /(^(1\-)?[0-9]{3}\-{1}[0-9]{3}\-{1}([0-9]{4})$){1}/
				if (value.match(pattern))
					return value; // La valeur est déjà bien formattée, on la renvoie simplement
				else {
					// Il faut modifier la valeur pour la formattée correctement
					var string = ""; // String qui servira de conteneur puisqu'on y ajoutera chaque chiffre trouvé
					
					// RegExp pour la vérification de chiffre
					var motif = /[0-9]/
					
					for (var i = 0; i < value.length; i++) {
						if (motif.test(value.charAt(i)))
							string += value.charAt(i);
					}
					
					// Traite la chaîne ainsi construite et composée de chiffres uniquement
					if (string.length == 10) // Le numéro n'est pas un interurbain
						return string.substring(0,3) + "-" + string.substring(3,6) + "-" + string.substring(6,10);
					else if (string.length == 11) // Le numéro est un interurbain
						return string.substring(0,1) + "-" + string.substring(1,4) + "-" + string.substring(4,7) + "-" + string.substring(7,11);
				}
			}
		},
		/**
		 * Fonctions utilitaires pour l'affichage et le traitement des données
		 */
		data: {
			/**
			 * Fonction récursive qui prend un objet et produit une vignette html complète qui contient
			 * toutes les propriétés et les méthodes sous la forme d'une liste.
			 * ---
			 * @param object : obj : l'objet à décrire
			 * @param string : string : La chaîne de caractères qui contient les données de retour
			 * @return : string : Une vignette HTML
			 */
			describe:function(obj) {
				var dump = "<ol>";
				for (p in obj) {
					dump += "<li>"+p+"="+obj[p]+"</li>";
				}
				dump += "</ol>";
				document.write(dump);
			}
		}
	}
};