/* VALIDATION FORMUALIRE */

/*
	Structure type pour contenir les informations des element de formulaire
*/
function input_infos (nom, id, isset, type, max) {
	this.nom = nom;
	this.id = id;
	this.isset = isset;
	this.type = type;
	this.max = max;
}

/*
	Test les differents champs du formulaire
		params:
			tabInputs : tableau contenant les infos sur les input du formulaire
		return: 
			si le test n est pas valide : 	false 
			si le test est valide : 		true 
*/
function checkForm(tabInputs) {
	for (cpt = 0; tabInputs[cpt]; cpt++) {
		switch (true) {
			case (tabInputs[cpt].isset):
				if (!checkInputElm($(tabInputs[cpt].id))) {
					alertFocusElement($(tabInputs[cpt].id), 'le champ '+tabInputs[cpt].nom+' est obligatoire\n');
					return false;
				}
			case (tabInputs[cpt].max && tabInputs[cpt].max > 0):
				if (!checkInputElmSize($(tabInputs[cpt].id), tabInputs[cpt].max)) {
					alertFocusElement($(tabInputs[cpt].id), 'le champ '+tabInputs[cpt].nom+' fait plus de '+tabInputs[cpt].max+' caractères\n');
					return false;
				}
			case (tabInputs[cpt].type && tabInputs[cpt].type.length > 0):
				if (!checkRegInputElm($(tabInputs[cpt].id), tabInputs[cpt].type)) {
					alertFocusElement($(tabInputs[cpt].id), 'le champ '+tabInputs[cpt].nom+' n\'est pas au bon format\n');
					return false;
				}
		}
	}
	return true;
}


/* 
	Affiche le nombre de caractères restant pour un champ dans un compteur
		params:
			elm : 		champ a tester
			cptElm : 	compteur
			max : 		taille max du champ
*/
function inputChecklenWithCptElm(elm, cptElm, max) {
	var cpt = elm.value.length;
	if (cpt > max) {
		elm.value = elm.value.substring(0, max);
		cpt = max;
	}
	var left = max - cpt;
	//cptElem.value = "(" + left + ")";
	cptElem.innerHTML = '&nbsp;'+left+'&nbsp;';
}

/*
	Test par expression la validite d un champ
		params:
			elm : 		element input a tester
			inputName : nom du champ
			regName : 	type du champ
		return: 
			si l expression n existe pas : 	false 
			si le test n est pas valide : 	false 
			si le test est valide : 		true 
*/
function checkRegInputElm (elm, regName) {
	switch (regName) {
		case 'isText':
			var reg = /^[a-z0-9_-âêîôûàèìòùáéíóúäëïöüãõñç\s]*$/gi;
			break;
		case 'isTime':
			var reg = /^[0-9]{2}:[0-9]{2}:[0-9]{2}$/g;
			break;
		case 'isDate':
			var reg = /^[0-9]{4}[-][0-9]{2}[-][0-9]{2}$/g;
			break;
		case 'isDatetime':
			var reg = /^[0-9]{4}[-][0-9]{2}[-][0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$/g;
			break;
		case 'isInt':
		case 'isDouble':
		case 'isDigit':
			var reg = /^[0-9]*$/g;
			break;
		case 'isTel':
			var reg = /^[0-9-\s]*$/g;
			break;
		case 'isHexa':
			var reg = /^[#]{0,1}[0-9a-f]*$/gi;
			break;
		case 'isEmail':
			var reg = /^[0-9a-z_.-]+@[0-9a-z_.-]+[.][a-z]{2,3}$/gi;
			break;
		case 'isBool':
			var reg = /^[01]{1}|true|false$/gi;
			break;
		default:
			var reg = /^[^$]$/g;
			break;
		
	}
	return ((reg && elm.value.match(reg))?true:false);
}

/*
	Test si le champ est rempli et enleve les espaces au debut et a la fin de la valeur
		params:
			elm : 		element input a tester
			inputName : nom du champ
		return: 
			si le test est valide : 		true 
			si le test n est pas valide : 	false
*/
function checkInputElm (elm) {
	//var elm = document.getElementById(id);
	elm.value = elm.value.trim();
	if (elm.value.length > 0) {
		return true;
	}
	return false;
}

/*
	Test si la taille du champ n est pas trop grande
		params:
			elm : 		element input a tester
			inputSize : taille max du champ
		return: 
			si le test est valide : 		true 
			si le test n est pas valide : 	false
*/
function checkInputElmSize (elm, inputSize) {
	elm.value = elm.value.trim();
	if (elm.value.length > inputSize) {
		return false;
	}
	return true;
}

/*
	Enleve les espaces au debut et a la fin d un chaine
		params:
			myString : la chaine
		return: 
			la chaine trimer
*/
function trim (myString) {
	return myString.replace(/^\s+/,'').replace(/\s+$/,'');
} 
/*
	Methode trim pour l objet string
*/
String.prototype.trim = function(){
	return this.replace(/^\s+/, "").replace(/\s+$/, "");
}

/*
	Envoi un message d erreur et focus sur l element
		params:
			elm : l input auquel s applique le message
			msg : le message
*/
function alertFocusElement (elm, msg) {
	alert(msg);
	elm.focus();
}

