﻿//définitions des expressions régulicres pour les tests : 
function change(champ,reg) {
	var champ2 = document.getElementById(champ);
	if (!verif_champ(champ2.value,reg)) {
		champ2.style.color='#FF0000';
		champ2.style.fontWeight='bold';
	} else {
		champ2.style.color='#000000';
		champ2.style.fontWeight='normal';
	}
}

function verif_champ(champ, exprs) {
   return (exprs.exec(champ)!=null)
}

function validatePiece() {
	var lForm = document.forms[0];

	if (validateRequired(lForm.elements["nom"])
			&& validateRequired(lForm.elements["societe"])
			&& validateRequired(lForm.elements["email"])
			&& validateRequired(lForm.elements["marque"])
			&& validateRequired(lForm.elements["piece"])
			&& validateRequired(lForm.elements["message"])) {
		// Aucune erreur
		lForm.submit();
	}
}

function validateContact() {
	var lForm = document.forms[0];

	if (validateRequired(lForm.elements["nom"])
			&& validateRequired(lForm.elements["societe"])
			&& validateRequired(lForm.elements["email"])
			&& validateRequired(lForm.elements["message"])) {
		// Aucune erreur
		lForm.submit();
	}
}

/**
 * Fonction d'affichage d'un champ en erreur.
 * 
 * @param pField
 * @param pError
 * @author poussineauj
 */
function showFieldInError(pField, pError) {
	if ((pField.type == 'text' || pField.type == 'textarea')
			&& pField.className != "input_error") {
		// Gestion du champ en erreur
		//pField.focus();
		var myWidth = pField.clientWidth + 4;
		pField.className = "input_error";
		pField.style.width = myWidth;
		if (typeof(pField.onkeydown) != 'undefined' && pField.onkeydown != null) {
			pField.onkeydown = new Function(pField.onkeydown + "hideFieldInError(this);");
		} else {
			pField.onkeydown = new Function("hideFieldInError(this);");
		}
	} else if (pField.type == 'select-one' && pField.className != "select_error") {
		// Gestion du champ en erreur
		//pField.focus();
		pField.className = "select_error";
		
		if (typeof(pField.onfocus) != 'undefined' && pField.onfocus != null) {
			pField.onfocus = new Function(pField.onfocus + "hideFieldInError(this);");
		} else {
			pField.onfocus = new Function("hideFieldInError(this);");
		}
	}
	
	// Affichage du message d'erreur
	document.getElementById("erreur").style.visibility = "";
	document.getElementById("erreur").style.position = "relative";
}

/**
 * Fonction permettant de cacher un champ en erreur.
 * 
 * @param pField
 * @author poussineauj
 */
function hideFieldInError(pField) {
	if ((pField.type == 'text' || pField.type == 'textarea')
			&& pField.className == "input_error") {
		// Gestion du champ en erreur
		pField.className = pField.getAttribute("myClassName");
	} else if (pField.type == 'select-one' && pField.className == "select_error") {
		// Gestion du champ en erreur
		pField.className = pField.getAttribute("myClassName");
	}
}

/**
 * Fonction de validation d'un champ Decimal.
 * @param pField
 * @author poussineauj
 */
function validateDecimal(pField) {
	// Récupération des informations sur la taille des champs
	var lIntegerPart = pField.getAttribute("integer");
	var lDecimalPart = pField.getAttribute("decimal");
	
	// Regular expression to match required decimal format 
	var lRegExp = "^[0-9]{0," + lIntegerPart + "}(\,|.[0-9]{0,"+lDecimalPart+"})?$";
	var lIsValid = true;
	if (pField.value != '' && !pField.value.match(lRegExp)) {
		var lErrorMessage = "La valeur saisie doit respecter le format ";
		for (var i=0; i < lIntegerPart; i++) { lErrorMessage += "a"; }
		lErrorMessage += ",";
		for (var i=0; i < lDecimalPart; i++) { lErrorMessage += "b"; }
		lErrorMessage += " !";
		showFieldInError(pField, lErrorMessage);
		
		lIsValid = false;
	}
	
	return lIsValid;
}

/**
 * Fonction de validation d'un champ Email.
 * @param pField
 * @author poussineauj
 */
function validateEmail(pField) {
	// Regular expression to match required email format 
	var lRegExp = "^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*$";
	var lIsValid = true;
	if (pField.value != '' && !pField.value.match(lRegExp)) {
		var lErrorMessage = "L'adresse email saisie n'est pas valide !";
		showFieldInError(pField, lErrorMessage);
		
		lIsValid = false;
	}
	
	return lIsValid;
}

/**
 * Fonction de validation d'un champ Date.
 * @param pField
 * @author poussineauj
 */
function validateDate(pField) {
	 // regular expression to match required date format 
	var lRegExp = "^((0[1-9]|1\\d|2[0-8])/(0\\d|1[012])/(1[6-9]|[2-9]\\d)\\d{2}|(29|30)/(0[13-9]|1[012])/(1[6-9]|[2-9]\\d)\\d{2}|31/(0[13578]|1[02])/(1[6-9]|[2-9]\\d)\\d{2}|29/02/((1[6-9]|[2-9]\\d)(0[48]|[2468][048]|[13579][26])|(16|[2468][048]|[3579][26])00))$";
	var lIsValid = true;
	
	if (pField.value != '' && !pField.value.match(lRegExp)) {
		showFieldInError(pField, "La date saisie doit respecter le format jj/mm/aaaa !");
		
		lIsValid = false;
	}
	
	return lIsValid;
}

/**
 * Fonction de validation d'un champ Temps.
 * @param pField
 * @author poussineauj
 */
function validateTime(pField) {
	 // regular expression to match required time format 
	var lRegExp = "^((0[0-9]|1\\d|2[0-3]):([0-6][0-9]):([0-6][0-9]))$";
	var lIsValid = true;
	
	if (pField.value != '' && !pField.value.match(lRegExp)) {
		showFieldInError(pField, "L'heure saisie doit respecter le format hh:mm:ss !");
		
		lIsValid = false;
	}
	
	return lIsValid;
}

/**
 * Fonction de validation de la taille minimale d'un champ.
 * @param pField
 * @param pMinLength
 * @author poussineauj
 */
function validateMinLength(pField, pMinLength) {
	var lIsValid = true;

	if (typeof(pField.value) == undefined || pField.value.length < pMinLength) {
		showFieldInError(pField, "La saisie doit &ecirc;tre d'au moins " + pMinLength + " caract&egrave;res !");
		
		lIsValid = false;
	}
	
    return lIsValid;
}

/**
 * Fonction de validation de la longueur d'un champs.
 * @param pField
 * @author poussineauj
 */
function validateMaxLength(pField) {
	var lIsValid = true;

	if (typeof(pField.value) != undefined && pField.value.length > parseInt(pField.getAttribute("maxlength"), 10)) {
		showFieldInError(pField, "La saisie ne doit pas d&eacute;passer " + parseInt(pField.getAttribute("maxlength"), 10) + " caract&egrave;res !");
		
		lIsValid = false;
	}
	
    return lIsValid;
}

/**
 * Fonction de validation de la sélection d'une option d'un bouton radio.
 * @param pFieldName
 * @author poussineauj
 */
function validateRadioBox(pFieldName) {
	var lIsValid = true;

	if (document.getElementById(pFieldName + "Yes").checked == false && document.getElementById(pFieldName + "No").checked == false) {		
		lIsValid = false;
	}
	
    return lIsValid;
}

/**
 * Fonction de validation de la sélection d'une option d'une selectbox.
 * @param pField
 * @author poussineauj
 */
function validateSelectBox(pField) {
	var lIsValid = true;

	if (pField != null) {
		if (pField.selectedIndex == -1 || pField.options[pField.selectedIndex].value == "" || pField.options[pField.selectedIndex].value == " " || pField.options[pField.selectedIndex].value == "0") {
			showFieldInError(pField, "Vous devez s&eacute;lectionner une option parmi la liste de valeurs !");
			
			lIsValid = false;
		}
	}
	
    return lIsValid;
}

/**
 * Fonction de validation d'un champ Integer.
 * @param pField
 * @author poussineauj
 */
function validateInteger(pField) {
	var lIsValid = true;
	
	if (pField.value != '' && isNaN(pField.value)) {
		showFieldInError(pField, "La saisie de ce champ doit &ecirc;tre de type num&eacute;riques !");
		
		lIsValid = false;
	}
	
	return lIsValid;
}

/**
 * Fonction de validation d'un champ required.
 * @param pField
 * @author poussineauj
 */
function validateRequired(pField) {
	var lIsValid = true;

	if (typeof(pField.value) == undefined || trim(pField.value).length == 0) {
		showFieldInError(pField, "La saisie de ce champ est obligatoire !");
		
		lIsValid = false;
	}
	
    return lIsValid;
}

/**
 * Trim whitespace from left and right sides of pString.
 * 
 * @param pString
 * @author poussineauj
 */
function trim(pString) {
	if(pString==null){
		return "";
	}
	return pString.replace(/^\s*/, "").replace(/\s*$/, "");
}
