/**
 * Fonctions js de validation de formulaire
 * 
 * @author 	Seven Le Mesle
 * @version 1.0
 */

var validationMessage = null;

var goodClass 		= null;
var badClass		= null;
var messageFormat   = 0;
var htmlFormat		= false;

var monAlerte		= null;

function packMessageField (field, _mess){
	return _mess.replace (/\$\{field\}/, "" + field);
}

function packMessage2Field (field, field1, _mess){
	var mess = _mess.replace (/\$\{field\}/, "" + field);
	return mess.replace (/\$\{field1\}/, "" + field1);
}

 function addMessage (field, _mess){
 	if (htmlFormat) {
 		validationMessage = (validationMessage == null ? _mess : validationMessage +"<br/>\n" + _mess );
 	} else {
 		validationMessage = (validationMessage == null ? _mess : validationMessage +"\n" + _mess );
 	}
 }

function initMessageFormat (_messageFormat){
	switch (_messageFormat){
		case 0 : htmlFormat = false;break;
		case 1 : hideMessageDiv ();
		case 2 : htmlFormat = true;break;
	}
	messageFormat = _messageFormat;
}

function hideMessageDiv(){
	document.getElementById('validatorDiv').style.display = 'none';
}

function showMessageDiv(){
	document.getElementById('validatorDiv').innerHTML = validationMessage;
	document.getElementById('validatorDiv').style.display = 'block';
}

function showMessagePanel(){
	if (monAlerte != null)
		monAlerte.yield(validationMessage);
	else
		alert ("SmartPanel :\n" +validationMessage);
	
}

function showMessageJs(){
	alert (validationMessage);
}

 function showMessage (){
 	switch (messageFormat){
 		
		case 1 : showMessageDiv ();break;
		case 2 : showMessagePanel ();break;
		case 0 : 
		default: showMessageJs(); break;
 	}
 	
 }
 
  function showBadField (field){
 	if (badClass != null)
 		field.className = "" + badClass;
  }
  
  function showGoodField (field){
 	if (goodClass != null)
 		field.className = "" +goodClass;
 	else
 		field.className = "";
  } 

// Serialization Validator :  regles de validations - 15/03/2010 06:15:46



/**
 * Validation d'un finissant par une chaine
 * utile pour les extensions de fichier 
 * recherche non sensible a la casse
 */
function endsWith (field, sufix, message){
	var val = field.value;

	if (val != '') {
		var sufReg = sufix.replace ( /\./i, '\\.');
		if (!eval ('val.match (/^.+'+ sufReg +'$/i)')){
			if (message != null)
	 			addMessage (field, message);
	 		else
		 		addMessage(field, packMessage2Field(field.name, sufix, errorEndsWith));
		 	return false;
		}
	}
	return true;
}




 /**
  * Validation d'un champs numerique
  *
  */
 function isDigit (field, _mess){
 	var val = field.value;
 	if (val != '')
	if (!val.match (/^[0-9]+$/gi)){
		if (_mess != null)
 			addMessage (field, _mess);
 		else
	 		addMessage(field, packMessageField(field.name, errorIsDigit));
	 	return false;
	}

	return true;
 }



/**
 * Validation d'un champs e-mail
 *
 */
function isEmail (field, message){
	var val = field.value;
	
	if (val != '')
	if (!val.match (/^[a-z0-9\-\._]+@[a-z0-9\-_\.]+\.[a-z]{2,4}$/gi)){
		if (message != null)
 			addMessage (field, message);
 		else
	 		addMessage(field, packMessageField(field.name, errorIsEmail));
	 	return false;
	}

	return true;
}




/**
 * validation d'un champs non vide
 * field 	champs du formulaire a valider
 * mess		message force sinon le message sera errorNotEmpty
 */
 function notEmpty (field, _mess){
 	if (field.value == '') {
 		if (_mess != null)
 			addMessage (field, _mess);
 		else
	 		addMessage(field, packMessageField(field.name, errorNotEmpty));
	 	return false;
 	}
 	else
 		return true;
 }




/**
 * validation d'un champs non vide si le champ donne 
 * match la valeure donnee 
 * nb : si le champ est de type checkbox alors devra aussi etre coche 
 * 		pour requerir le champ a valider
 * field 	champs du formulaire a valider
 * fieldMatch	nom du champs dont la valeure est a verifier 
 * value		valeure du champs forcant ce champ a etre requis
 * mess		message force sinon le message sera errorNotEmpty
 * @version 1.0.1
 */
 function requiredIf (field, fieldMatch, value, _mess){
 	
 	if (( field.form.elements[fieldMatch].type != "checkbox" && field.form.elements[fieldMatch].value == value )
 		||
 		(field.form.elements[fieldMatch].type == "checkbox" && field.form.elements[fieldMatch].checked && field.form.elements[fieldMatch].value == value )
 		){
		 	if (field.value == '') {
		 		if (_mess != null)
		 			addMessage (field, _mess);
		 		else
			 		addMessage(field, packMessageField(field.name, errorRequiredIf));
			 	return false;
		 	} 
 		}
 
	return true;
 }




/**
 * Fonction de validation de l'egalite d'un champ avec une valeur
 * retourne faux si invalide et vrai si valide 
 *
 * field 	Nom du champ
 * myValue	Valeur
 * mess		message force sinon le message sera errorNotEmpty
 * @version 1.0
 */
 function isEqualTo (field, myValue, _mess){
 	//alert('Is '+field.value+' = '+myValue+' ?');
 	if (field.value != myValue) {
 		if (_mess != null)
 			addMessage (myValue, _mess);
 		else
	 		addMessage(field, packMessage2Field(field.name, myValue, errorIsEqualTo));
	 	return false;
 	} 
 
	return true;
 }

