/**
 * @todo : Pouvoir faire des tests sur des éléments type CheckBox, Select, Radio
 * @todo : Faire des tests sur des spécificités (dateX > dateY, etc)
 * 
 * @Greetz : Bultez
 * 
 * @see : http://zendold.lojcomm.com.br/fvalidator/js/fValidator-full.js !important
 * 		@see : http://zendold.lojcomm.com.br/fvalidator/exampleA.asp
 * @see : http://css.alsacreations.com/Tutoriels-JavaScript/La-gestion-des-evenements-en-JavaScript
 * @see : http://webdesign.about.com/od/dom/a/aa120202a.htm 
 */


window.onload=montre;

function montre(id) {
var d = document.getElementById(id);
	for (var i = 1; i<=10; i++) {
		if (document.getElementById('smenu'+i)) {document.getElementById('smenu'+i).style.display='none';}
	}
if (d) {d.style.display='block';}
}

String.prototype.trim = function () {
	var	str = this.replace(/^\s\s*/, ''), ws = /\s/, i = str.length;
	while (ws.test(str.charAt(--i)));
	return str.slice(0, i + 1);
}

/************************************************************************************************
                *****************************************************************                
************************************************************************************************/

function JsChecker (oFormElement, oOptions) {
	/**
	 * @var _oFormElement
	 * The form element
	 */
	var _oFormElement = (typeof (oFormElement) == 'object') ? oFormElement : document.getElementById (oFormElement);
	
	/**
	 * @var Object _oOptions
	 * The Options to be specified
	 * 		onError : function called when an error is hanlded
	 * 		onSuccess : functon called when no errors was found
	 * 		parse : Parse the form to find rules (contained into alt attributes, with JScon format)
	 */
	var _oOptions = {
		onError: (oOptions != null && typeof (oOptions.onError) == 'string') ? oOptions.onError : 'alert',
		onValid: (oOptions != null && typeof (oOptions.onValid) == 'string') ? oOptions.onValid : 'toString',
		parse: (oOptions != null && typeof (oOptions.parse) == 'boolean') ? oOptions.parse : 'false',
		focusOnError: true
	}
	
	/**
	 * @var Array _oRules
	 * Contain all the rules, listed by associated array
	 */
	var _oRules = new Array ();
	
	/**
	 * @var Array _oValidity
	 * Check the validity of the elements with rules
	 */
	 var _oValidity = new Array ();
	
	/**
	 * We adds the submit event to the form to check if it's correct
	 */
	_oFormElement.onsubmit = function () 
	{
		return _onSubmit ()
	};

	/**
	 * @name private _addRule
	 * Add a specified rule to a specific element
	 * 
	 * @param String eltName
	 * @param Object oRule {rule, value, message}
	 * 
	 * @return void
	 */
	var _addRule = function (eltName, oRule) {
		if (_oRules[eltName] == null) {
			_oFormElement.elements[eltName].onblur = function (oEvent) {_onBlur (oEvent)};
			_oRules[eltName] = new Array ();
		}
		
		_oRules[eltName].push ({
									rule: (oRule.rule != null) ? oRule.rule : '',
									value: (oRule.value != null) ? oRule.value : '',
									message: (oRule.message != null) ? oRule.message : ''});
		
		_oValidity[eltName] = false;
	}
	
	/**
	 * @name Public addRule
	 * Add one or more specifics rules to an element
	 * 
	 * @param String eltName
	 * @param Object oRules
	 * 
	 * @return Boolean
	 */
	this.addRule = function (eltName, oRules) {
		if (typeof (_oFormElement.elements[eltName]) == 'object') {
			// If we have more than one rule
			if (oRules.length > 0) {
				var size = oRules.length;
				for (var i = 0; i < size; i++) {
					_addRule (eltName, oRules[i]);
				}
			}
			else
				_addRule (eltName, oRules);
			
			return true;
		}
		return false;
	}
	
	this.onLoadPage = function() {
	var ret = 0;
	for (elementName in _oValidity) {
			if (!_oValidity[elementName]) {
				if (!_checkRules (elementName))
				{
				ret = 1;	
				}
			}
		}
		if (ret == 1)
			return false;
		return true;
	};
	
	this.onButton_subfront = function() {
	document.getElementById("sub_front").onclick = function() {
	var ret = 0;
	for (elementName in _oValidity) {
			if (!_oValidity[elementName]) {
				if (!_checkRules (elementName))
				{
				ret = 1;	
				}
			}
		}
		if (ret == 1)
			return false;
		send_form_front();
		return true;};
	};
	
	/**
	 * @name Private _checkRules
	 * Check if an element complete the rules
	 * 
	 * @param String eltName
	 * 
	 * @return boolean
	 */
	var _checkRules = function (eltName) {
		if (_oRules[eltName] != null) {
			var checkResult = true;
			for (var i=0; i < _oRules[eltName].length; i++) {
				if (typeof (_oRules[eltName][i].value) == 'string' && _oRules[eltName][i].value.substring (0, 1) == '=' && _oFormElement.elements[_oRules[eltName][i].value.substring (1)] != null)
					_oRules[eltName][i].value = _oFormElement.elements[_oRules[eltName][i].value.substring (1)].value;

				if (_oRules[eltName][i].rule == 'isRequired')
					checkResult = (_oFormElement.elements[eltName].value.trim () != '') ? true : false;
				else if (_oFormElement.elements[eltName].value.trim () != '') {
					switch (_oRules[eltName][i].rule) {
						case 'isEqual': // isEq
							checkResult = (_oFormElement.elements[eltName].value == _oRules[eltName][i].value) ? true : false;
							break;
						case 'isNotEqual': // isNeq
							checkResult = (_oFormElement.elements[eltName].value != _oRules[eltName][i].value) ? true : false;
							break;
						case 'maxLength': // maxLen, lt, lessThan, lowerThan
							if (typeof (_oFormElement.elements[eltName].value) == 'string')
								checkResult = (_oFormElement.elements[eltName].value.length <= _oRules[eltName][i].value) ? true : false;
							else
								checkResult = (_oFormElement.elements[eltName].value <= _oRules[eltName][i].value) ? true : false;
							break;
						case 'minLength': // minLen, gt, greaterThan
							if (typeof (_oFormElement.elements[eltName].value) == 'string')
								checkResult = (_oFormElement.elements[eltName].value.length >= _oRules[eltName][i].value) ? true : false;
							else
								checkResult = (_oFormElement.elements[eltName].value >= _oRules[eltName][i].value) ? true : false;
							break;
						case 'rangeLength': // rangeLen
							if (typeof (_oFormElement.elements[eltName].value) == 'string')
								checkResult = (_oFormElement.elements[eltName].value.length >= _oRules[eltName][i].value.min && _oFormElement.elements[eltName].value.length <= _oRules[eltName][i].value.max) ? true : false;
							else
								checkResult = (_oFormElement.elements[eltName].value >= _oRules[eltName][i].value.min && _oFormElement.elements[eltName].value <= _oRules[eltName][i].value.max) ? true : false;
							break;
						case 'regExp':
							var expReg = new RegExp (_oRules[eltName][i].value);
							checkResult = expReg.test (_oFormElement.elements[eltName].value);
							break;
						case 'isEmpty':
							checkResult = (_oFormElement.elements[eltName].value.trim () == '') ? true : false;
							break;
						case 'isAlphabetic': // isAlpha
							// Test if the value contain only a to z and A to Z chars
							checkResult = /^[a-zA-Z]+$/.test(_oFormElement.elements[eltName].value);
							break;
							
						case 'isNumeric':
							checkResult = /^[0-9]+$/.test(_oFormElement.elements[eltName].value);
							break;
							
						case 'isNumberCard':
							checkResult = /^([0-9]{16})$/.test (_oFormElement.elements[eltName].value);
							break;
							
						case 'isDateExpi':
							checkResult = /^([0-9]{2})\/([0-9]{2})$/.test (_oFormElement.elements[eltName].value);
							break;							
							
						case 'isCrypto':
							checkResult = /^([0-9]{3})$/.test (_oFormElement.elements[eltName].value);
							break;							
							
						case 'isAlphaNumeric': // isAlphaNumeric
							// Test if the value contain only a to z, A to Z and 0 to 9 chars
							checkResult = /^[a-zA-Z0-9]+$/.test(_oFormElement.elements[eltName].value);
							break;
						case 'isPostal':
							// Test if the value contain only five numbers
							checkResult = /^([0-9]{5})$/.test (_oFormElement.elements[eltName].value);
							break;
						case 'isEmail':
							// Test if the value contain a to z, A to Z, _, -, ., +, {, } followed by an @ and by a to z, A to Z, ., - and followed by a . and a to z, A to Z on 2 to 4 chars
							checkResult = (/^[a-zA-Z0-9_}{+\-_]+(\.[a-zA-Z0-9_}{+\-_]+)*@[a-zA-Z0-9\-\.]*[a-zA-Z0-9](\.[a-zA-Z0-9\.\-]*[a-zA-Z0-9\.])*[\.][a-zA-Z]{2,4}$/.test (_oFormElement.elements[eltName].value));
							break;
						case 'isIpv4':
							// Test if the number is between 0 and 1 for the first, if yes, test if the two seconds are between 0 and 9. If the number is not between 0 and 1, test if the number is 2, if yes, test if the second number is between 0 and 4 and the third between 0 and 9 OR the second number equals 5 and the third between 0 and 5, and repeat it fourth times
							checkResult = /^((([0-1]{1}[0-9]{0,2})|([2]{1}(([0-4]{1}[0-9]{1})|([5]{1}[0-5]{1}))))\.(([0-1]{1}[0-9]{0,2})|([2]{1}(([0-4]{1}[0-9]{1})|([5]{1}[0-5]{1}))))\.(([0-1]{1}[0-9]{0,2})|([2]{1}(([0-4]{1}[0-9]{1})|([5]{1}[0-5]{1}))))\.(([0-1]{1}[0-9]{0,2})|([2]{1}(([0-4]{1}[0-9]{1})|([5]{1}[0-5]{1})))))$/.test (_oFormElement.elements[eltName].value);
							break;
						case 'isUrl':
							// Test if the value start with ftp, ftps, http, https, mailto, followed by ://, a to z, A to Z, 0 to 9, :, .
							checkResult = (/^(((ht|f)tp(s?)|(mailto))\:\/\/)([0-9a-zA-Z\-]+\.)+[a-zA-Z]+(\:[0-9]+)?(\/\S*)?$/gi.test(_oFormElement.elements[eltName].value.toLowerCase()));
							break;
						case 'isHexadecimal': // isHexa
							// Test if the value has 0 to 9 and a to f or A to F
							checkResult = /^[a-fA-F0-9]+$/.test (_oFormElement.elements[eltName].value);
							break;
						case 'isColor': // isHexa
							// Test if the value has 0 to 9 and a to f or A to F
							checkResult = /^#([0-9A-Fa-f]+$)/.test (_oFormElement.elements[eltName].value);
							if (checkResult == true)
							checkResult = (_oFormElement.elements[eltName].value.length == 7) ? true: false;
							break;
						case 'isPhone':
							// Test if the value is a number and contain eventually (), +, -, .
							checkResult = /^[\d\s ().+-]+$/.test (_oFormElement.elements[eltName].value);
							break;
						case 'isDate':
							// Test if the value is date between 0 and 31 / 0 and 12 / 0 and 9999
							checkResult = /^([0-9]{1,4})[-]((0[1-9]{1})|([1]{1}[0-2]{1}))[-]((0[1-9]{1})|([1-2]{1}[0-9]{1})|([3]{1}[0-1]{1}))$/.test (_oFormElement.elements[eltName].value);
							break;
						case 'isTime':
							// Test if the value is between 0 and 24 : 0 and 59 : 0 and 59
							checkResult = /^(((0[0-9]{0,1})|([1]{1}[0-9]{1})|([2]{1}[0-3]{1}))[:]((0[0-9]{1})|([1-5]{1}[0-9]{1}))[:]((0[0-9]{1})|([1-5]{1}[0-9]{1}))([ ]?(((am)?)|((pm)?))))$/.test (_oFormElement.elements[eltName].value);
							break;
						case 'isCorrespondInscription':
							// Test if the value is between 0 and 24 : 0 and 59 : 0 and 59
							checkResult = _oFormElement.elements["pass_inscription"].value == _oFormElement.elements[eltName].value ? true: false;
							break;
						case 'isEmailUnique':
							checkResult = (/^[a-zA-Z0-9_}{+\-_]+(\.[a-zA-Z0-9_}{+\-_]+)*@[a-zA-Z0-9\-\.]*[a-zA-Z0-9](\.[a-zA-Z0-9\.\-]*[a-zA-Z0-9\.])*[\.][a-zA-Z]{2,4}$/.test (_oFormElement.elements[eltName].value));
							if (checkResult == false)
									_oRules[eltName][i].message = "Une adresse email valide est requise.";
							else
								{
									checkResult = verif_unique_email(_oFormElement.elements[eltName].value);
									if (checkResult == false)
										_oRules[eltName][i].message = "Cette adresse email est d&eacute;j&agrave; utilis&eacute;e par un autre compte.";
									else
									{
										if (document.getElementById('email_inscription').value == document.getElementById('parrain_inscription').value)
										{
											checkResult = false;
											_oRules[eltName][i].message = "Vous ne pouvez pas vous parrainer";
										}
									}
								}
							break;
						case 'isEmptyorEmail':
							checkResult = (/^[a-zA-Z0-9_}{+\-_]+(\.[a-zA-Z0-9_}{+\-_]+)*@[a-zA-Z0-9\-\.]*[a-zA-Z0-9](\.[a-zA-Z0-9\.\-]*[a-zA-Z0-9\.])*[\.][a-zA-Z]{2,4}$/.test (_oFormElement.elements[eltName].value));
							break
/*						case 'isNoSelfMail':
alert("bonjour fred! ");
checkResult = true;
							if (document.getElementById('email_inscription').value == document.getElementById('parrain_inscription').value)
								checkResult = false;
							else
								checkResult = true;
							alert(checkResult);
						
							break;*/
					}
				}
				else {		
					if (_oRules[eltName][i].rule == 'isEmptyorEmail') {
						checkResult = (/^[a-zA-Z0-9_}{+\-_]+(\.[a-zA-Z0-9_}{+\-_]+)*@[a-zA-Z0-9\-\.]*[a-zA-Z0-9](\.[a-zA-Z0-9\.\-]*[a-zA-Z0-9\.])*[\.][a-zA-Z]{2,4}$/.test (_oFormElement.elements[eltName].value));
						if (checkResult == false)
							checkResult = (_oFormElement.elements[eltName].value == "") ? true : false;
					}
					else
						checkResult = false;
				}
				
				

				if (!checkResult) {
					window[_oOptions.onError] (_oRules[eltName][i].message, {element: eltName, rule: _oRules[eltName][i].rule, value: _oRules[eltName][i].value});
					return false;
				}
				
				_oValidity[eltName] = true;
				window[_oOptions.onValid] (_oRules[eltName][i].message, {element: eltName, rule: _oRules[eltName][i].rule, value: _oRules[eltName][i].value});
			}
			return true;
		}
		return true;
	}
	
	/**
	 * @name _onSubmit
	 * Return the state of the validation (true for correct, false for incorrect)
	 * 
	 * @return boolean
	 */
	 

	function surcouche_verif_inscription_onsubmit()
	{
		checkResult_mail = (/^[a-zA-Z0-9_}{+\-_]+(\.[a-zA-Z0-9_}{+\-_]+)*@[a-zA-Z0-9\-\.]*[a-zA-Z0-9](\.[a-zA-Z0-9\.\-]*[a-zA-Z0-9\.])*[\.][a-zA-Z]{2,4}$/.test (document.getElementById('email_inscription').value));
		
		if (document.getElementById('parrain_inscription').value == "")
			checkResult_parrain = true;
		else
			checkResult_parrain = (/^[a-zA-Z0-9_}{+\-_]+(\.[a-zA-Z0-9_}{+\-_]+)*@[a-zA-Z0-9\-\.]*[a-zA-Z0-9](\.[a-zA-Z0-9\.\-]*[a-zA-Z0-9\.])*[\.][a-zA-Z]{2,4}$/.test (document.getElementById('parrain_inscription').value));
			
		if (checkResult_mail &&
			document.getElementById('parrain_inscription').value == document.getElementById('email_inscription').value && 
			document.getElementById('parrain_inscription').value != "")
		{
				document.getElementById('msg_email_inscription').style.display = "block";
				document.getElementById('msg_email_inscription').innerHTML = "<img src='./images/cruz_red.png' width='10' height='10'> Vous ne pouvez pas vous parrainer";
				return false;
		}
		else if (!checkResult_parrain)
		{
			document.getElementById('msg_parrain_inscription').style.display = "block";
			document.getElementById('msg_parrain_inscription').innerHTML = "<img src='./images/cruz_red.png' width='10' height='10'> L'email de votre parrain n'est pas valide";
			return false;
		}
		else
		{
			document.getElementById('msg_parrain_inscription').style.display = "none";
			document.getElementById('msg_email_inscription').style.display = "none";
			var ret = 0;
			for (elementName in _oValidity) {
				if (!_oValidity[elementName]) {
					if (!_checkRules (elementName))
						ret = 1;
				}
			}
			if (ret)
				return false;
			else
				return true;
		}	
	}

	var _onSubmit = function () 
	{	
		if (document.getElementById('form_inscription'))
		{
			var ret = surcouche_verif_inscription_onsubmit();
			return ret;
		}
		else
		{
			var ret = 0;
			for (elementName in _oValidity) {
				if (!_oValidity[elementName]) {
					if (!_checkRules (elementName))
						ret = 1;
				}
			}
			if (ret)
				return false;
			return true;			
		}
	}
/*		

	
	/**
	 * @name _onBlur
	 * Parse the blurred element by it rules
	 * 
	 * @return void
	 */
	var _onBlur = function (oEvent) {
		if (window.event)
			var target = window.event.srcElement;
		else if (oEvent)
			var target = oEvent.target
		else
			return;
		
		_checkRules (target.name);
	}

	/**
	 * @name Private _parseForm
	 * Parse the form to find if somes rules are in
	 * 
	 * @return void
	 */
	var _parseForm = function () {
		var countElt = _oFormElement.elements.length;
		for (var i = 0; i < countElt; i++) {
			if (_oFormElement.elements[i] != null && _oFormElement.elements[i].alt != null && _oFormElement.elements[i].alt != '') {
				try {
					var oRule = eval (_oFormElement.elements[i].alt);
					if (oRule.length > 0) {
						for (var j = 0; j < oRule.length; j++) {
							_addRule (_oFormElement.elements[i].name, oRule[j]);
						}
					}
				}
				catch (oE) {};
			}
		}
	}
	
	if (_oOptions.parse) {
		_parseForm ();
	}
}

/**
 * 
 * Not Implemented Yet !
 * 
 *
 * @name hasExtension
 * test if the extension of the element is the same than the ext given
 * 
 * @return boolean
 * @alias hasExt
 *
JsChecker.hasExtension = function (mElement, sExt) {
	var aExtent = mElement.split (/([^.]*)$/);
	alert (aExtent[0]);
	return (aExtent[1] == sExt) ? true : false;
}
JsChecker.hasExt = JsChecker.hasExtension;


/**
 * @name isIpv6
 * Test if the element is a valid Ipv6
 * 
 * @return boolean
 *
JsChecker.isIpv6 = function (mElement) {
	// Not Implemented
}

/**
 * @name isChecked
 * Test if the element is checked
 * 
 * @return boolean
 *
JsChecker.isChecked = function (mElement) {
	return mElement.checked;
}*/

window.onload = function () {
	// document.form[0] ou document.forms[formName] ou document.formName (ou formName = name="ici") ou byId
	
	if (document.getElementById('formchecker_cmd_cb'))
	{
		var jsChecker_cmd_cb = new JsChecker ('formchecker_cmd_cb', {onError: 'displayError_cmd_cb', onValid: 'deleteDisplay_cmd_cb'});
		jsChecker_cmd_cb.addRule ('nb_carte', {rule: 'isNumberCard', message : 'Le numero de carte est requis et doit &ecirc;tretre compos&eacute; de 16 chiffres'});
		jsChecker_cmd_cb.addRule ('date_expiration', {rule: 'isDateExpi', message : "La date d'expiration est requise et doit &ecirc;tre de format MM/YY"});
		jsChecker_cmd_cb.addRule ('crypto', {rule: 'isCrypto', message : "Le cryptogramme est requis et doit &ecirc;tretre compos&eacute; de 3 chiffres"});
		jsChecker_cmd_cb.addRule ('nom_l', {rule: 'isRequired', message : "Le nom du destinataire de la commande est requis"});
		jsChecker_cmd_cb.addRule ('prenom_l', {rule: 'isRequired', message : "Le prenom du destinataire de la commande est requis"});
		jsChecker_cmd_cb.addRule ('adresse_l', {rule: 'isRequired', message : "L'adresse du destinataire de la commande est requis"});
		jsChecker_cmd_cb.addRule ('ville_l', {rule: 'isRequired', message : "La ville du destinataire de la commande est requiss"});
		jsChecker_cmd_cb.addRule ('code_postal_l', {rule: 'isPostal', message : "Le code postal du destinataire de la commande est requis et doit &ecirc;tre compos&eacute; de 5 chiffres"});
		jsChecker_cmd_cb.addRule ('nom_f', {rule: 'isRequired', message : "Le nom du destinataire de la facture est requis"});
		jsChecker_cmd_cb.addRule ('prenom_f', {rule: 'isRequired', message : "Le prenom du destinataire de la facture est requis"});
		jsChecker_cmd_cb.addRule ('adresse_f', {rule: 'isRequired', message : "L'adresse du destinataire de la facture est requis"});
		jsChecker_cmd_cb.addRule ('ville_f', {rule: 'isRequired', message : "La ville du destinataire de la facture est requiss"});
		jsChecker_cmd_cb.addRule ('code_postal_f', {rule: 'isPostal', message : "Le code postal du destinataire de la facture est requis et doit &ecirc;tre compos&eacute; de 5 chiffres"});			
	}
	
	if (document.getElementById('form_inscription'))
	{
		var jsChecker_cmd_cb = new JsChecker ('form_inscription', {onError: 'displayError_inscription', onValid: 'deleteDisplay_inscription'});
		jsChecker_cmd_cb.addRule ('nom_inscription', {rule: 'isRequired', message : 'Un nom est requis.'});
		jsChecker_cmd_cb.addRule ('prenom_inscription', {rule: 'isRequired', message : 'Un pr&eacute;nom est requis.'});
		jsChecker_cmd_cb.addRule ('email_inscription', {rule: 'isEmailUnique', message : 'Une adresse email valide est requise.'});
		/* jsChecker_cmd_cb.addRule ('parrain_inscription', {rule: 'isNoSelfMail', message : 'Vous ne pouvez pas vous parrainer.'});	 */
		jsChecker_cmd_cb.addRule ('addresse_inscription', {rule: 'isRequired', message : 'Une adresse est requise.'});
		jsChecker_cmd_cb.addRule ('postal_inscription', {rule: 'isPostal', message : 'Un code postal correcte est requis.'});
		jsChecker_cmd_cb.addRule ('ville_inscription', {rule: 'isRequired', message : 'Une ville est requise.'});
		jsChecker_cmd_cb.addRule ('pays_inscription', {rule: 'isRequired', message : 'Un pays est requis.'});
		jsChecker_cmd_cb.addRule ('pass_inscription', {rule: 'isRequired', message : 'Un mot de passe est requis.'});
		jsChecker_cmd_cb.addRule ('conf_pass_inscription', {rule: 'isCorrespondInscription', message : 'le mot de passe ne correspond pas.'});
	}

	if (document.getElementById('form_parrain'))
	{
		var jsChecker_cmd_cb = new JsChecker ('form_parrain', {onError: 'displayError_inscription', onValid: 'deleteDisplay_inscription'});
		jsChecker_cmd_cb.addRule ('nom_contact1', {rule: 'isEmptyorEmail', message : 'Une adresse mail valide est requise.'});
		jsChecker_cmd_cb.addRule ('nom_contact2', {rule: 'isEmptyorEmail', message : 'Une adresse mail valide est requise.'});
		jsChecker_cmd_cb.addRule ('nom_contact3', {rule: 'isEmptyorEmail', message : 'Une adresse mail valide est requise.'});
		jsChecker_cmd_cb.addRule ('nom_contact4', {rule: 'isEmptyorEmail', message : 'Une adresse mail valide est requise.'});
		jsChecker_cmd_cb.addRule ('nom_contact5', {rule: 'isEmptyorEmail', message : 'Une adresse mail valide est requise.'});
		jsChecker_cmd_cb.addRule ('nom_contact6', {rule: 'isEmptyorEmail', message : 'Une adresse mail valide est requise.'});
		jsChecker_cmd_cb.addRule ('nom_contact7', {rule: 'isEmptyorEmail', message : 'Une adresse mail valide est requise.'});
		jsChecker_cmd_cb.addRule ('nom_contact8', {rule: 'isEmptyorEmail', message : 'Une adresse mail valide est requise.'});
		jsChecker_cmd_cb.addRule ('nom_contact9', {rule: 'isEmptyorEmail', message : 'Une adresse mail valide est requise.'});
		jsChecker_cmd_cb.addRule ('nom_contact10', {rule: 'isEmptyorEmail', message : 'Une adresse mail valide est requise.'});
	}

	if (document.getElementById('form_ajouter_addresse'))
	{
		var jsChecker_cmd_cb = new JsChecker ('form_ajouter_addresse', {onError: 'displayError_inscription', onValid: 'deleteDisplay_inscription'});
		jsChecker_cmd_cb.addRule ('content_adresse', {rule: 'isRequired', message : 'Une adresse est requise.'});
		jsChecker_cmd_cb.addRule ('nom_addresse', {rule: 'isRequired', message : 'Un nom est requis.'});
		jsChecker_cmd_cb.addRule ('prenom_addresse', {rule: 'isRequired', message : 'Un pr&eacute;nom est requis.'});
		jsChecker_cmd_cb.addRule ('designation_addresse', {rule: 'isRequired', message : 'Une désignation est indispensable.'});
		jsChecker_cmd_cb.addRule ('postal_addresse', {rule: 'isPostal', message : 'Un code postal correcte est requis.'});
		jsChecker_cmd_cb.addRule ('ville_addresse', {rule: 'isRequired', message : 'Une ville est requise.'});
		jsChecker_cmd_cb.addRule ('pays_addresse', {rule: 'isRequired', message : 'Un pays est requis.'});
		jsChecker_cmd_cb.addRule ('pass_addresse', {rule: 'isRequired', message : 'Un mot de passe est requis.'});
		jsChecker_cmd_cb.addRule ('conf_pass_addresse', {rule: 'isCorrespondaddresse', message : 'le mot de passe ne correspond pas.'});
	}

	if (document.getElementById('form_livraison'))
	{
		var jsChecker_cmd_cb = new JsChecker ('form_livraison', {onError: 'displayError_inscription', onValid: 'deleteDisplay_inscription'});
		jsChecker_cmd_cb.addRule ('nom_addresse_livraison', {rule: 'isRequired', message : 'Un nom est requis.'});
		jsChecker_cmd_cb.addRule ('prenom_addresse_livraison', {rule: 'isRequired', message : 'Un pr&eacute;nom est requis.'});
		jsChecker_cmd_cb.addRule ('addresse_addresse_livraison', {rule: 'isRequired', message : 'Une adresse est requise.'});
		jsChecker_cmd_cb.addRule ('postal_addresse_livraison', {rule: 'isPostal', message : 'Un code postal correcte est requis.'});
		jsChecker_cmd_cb.addRule ('ville_addresse_livraison', {rule: 'isRequired', message : 'Une ville est requise.'});
/*		if (document.getElementById("mail_unique_flag"))
			jsChecker_cmd_cb.addRule ('email_addresse_livraison', {rule: 'isEmailUnique', message : 'Une adresse email valable est requise.'});
		else
			jsChecker_cmd_cb.addRule ('email_addresse_livraison', {rule: 'isEmail', message : 'Une adresse email valable est requise.'});*/
		jsChecker_cmd_cb.addRule ('email_addresse_livraison', {rule: 'isEmail', message : 'Une adresse email valable est requise.'});
		jsChecker_cmd_cb.addRule ('pays_addresse_livraison', {rule: 'isRequired', message : 'Un pays est requis.'});
		jsChecker_cmd_cb.addRule ('nom_addresse_facturation', {rule: 'isRequired', message : 'Un nom est requis.'});
		jsChecker_cmd_cb.addRule ('prenom_addresse_facturation', {rule: 'isRequired', message : 'Un pr&eacute;nom est requis.'});
		jsChecker_cmd_cb.addRule ('designation_addresse_facturation', {rule: 'isRequired', message : 'Une désignation est indispensable.'});
		jsChecker_cmd_cb.addRule ('addresse_addresse_facturation', {rule: 'isRequired', message : 'Une adresse est requise.'});
		jsChecker_cmd_cb.addRule ('postal_addresse_facturation', {rule: 'isPostal', message : 'Un code postal est requis.'}); 
		jsChecker_cmd_cb.addRule ('ville_addresse_facturation', {rule: 'isRequired', message : 'Une ville est requise.'});
		jsChecker_cmd_cb.addRule ('pays_addresse_facturation', {rule: 'isRequired', message : 'Un pays est requis.'});
	}

	/* le reste
	jsChecker.addRule ('isNotEqual', {rule: 'isRequired', message : 'The field isNotEqual is required'});
	jsChecker.addRule ('isNotEqual', {rule: 'isNotEqual', value: 'hello', message : 'The field isNotEqual must not be equal to \'hello\' !'});
	
	jsChecker.addRule ('isEqualTo', {rule: 'isRequired', message : 'The field isEqualTo is required'});
	jsChecker.addRule ('isEqualTo', {rule: 'isEqual', value: '=disabled', message : 'The field isEqualTo must be equal to the disabled textbox'});
	
	jsChecker.addRule ('maxLength', {rule: 'isRequired', message : 'The field maxLength is required'});
	jsChecker.addRule ('maxLength', {rule: 'maxLength', value: 5, message : 'The field must have less than 5 chars'});
	
	jsChecker.addRule ('minLength', {rule: 'isRequired', message : 'The field minLength is required'});
	jsChecker.addRule ('minLength', {rule: 'minLength', value: 5, message : 'The field must have more than 5 chars'});
	
	jsChecker.addRule ('rangeLength', {rule: 'isRequired', message : 'The field rangeLength is required'});
	jsChecker.addRule ('rangeLength', {rule: 'rangeLength', value: {min:5, max:10}, message : 'The field must have between 5 and 10 chars'});
	
	jsChecker.addRule ('hasExtension', {rule: 'isRequired', message : 'The field hasExtension is required'});
	jsChecker.addRule ('hasExtension', {rule: 'hasExtension', value: 'jpg', message : 'The textbox must finish by the .jpg extension'});
	
	jsChecker.addRule ('regExp', {rule: 'isRequired', message : 'The field regExp is required'});
	jsChecker.addRule ('regExp', {rule: 'regExp', value: '-[0-9]{2}', message : 'The field has incorrect response for the regexp specified'});
	
	jsChecker.addRule ('isAlphabetic', {rule: 'isRequired', message : 'The field isAlphabetic is required'});
	jsChecker.addRule ('isAlphabetic', {rule: 'isAlphabetic', message : 'The field is not only alphabetics'});
	
	jsChecker.addRule ('isNumeric', {rule: 'isRequired', message : 'The field isNumeric is required'});
	jsChecker.addRule ('isNumeric', {rule: 'isNumeric', message : 'The field is not only numerical'});
	
	jsChecker.addRule ('isAlphaNumeric', {rule: 'isRequired', message : 'The field isAlphaNumeric is required'});
	jsChecker.addRule ('isAlphaNumeric', {rule: 'isAlphaNumeric', message : 'The field is not only alpha-numeric'});
	
	jsChecker.addRule ('isPostal', {rule: 'isRequired', message : 'The field isPostal is required'});
	jsChecker.addRule ('isPostal', {rule: 'isPostal', message : 'The field is not a correct postal code'});
	
	jsChecker.addRule ('isEmail', {rule: 'isRequired', message : 'The field isEmail is required'});
	jsChecker.addRule ('isEmail', {rule: 'isEmail', message : 'The field is not a correct email'});
	
	jsChecker.addRule ('isUrl', {rule: 'isRequired', message : 'The field isUrl is required'});
	jsChecker.addRule ('isUrl', {rule: 'isUrl', message : 'The field is not a correct url'});
	
	jsChecker.addRule ('isIpv4', {rule: 'isRequired', message : 'The field isIpv4 is required'});
	jsChecker.addRule ('isIpv4', {rule: 'isIpv4', message : 'The field is not a correct Ip v4'});
	
	jsChecker.addRule ('isChecked', {rule: 'isRequired', message : 'The field isChecked is required'});
	
	jsChecker.addRule ('isHexadecimal', {rule: 'isRequired', message : 'The field isHexadecimal is required'});
	jsChecker.addRule ('isHexadecimal', {rule: 'isHexadecimal', message : 'The field is not a correct hexadecimal value'});
	
	jsChecker.addRule ('isPhone', {rule: 'isRequired', message : 'The field isPhone is required'});
	jsChecker.addRule ('isPhone', {rule: 'isPhone', message : 'The field is not a correct phone number'});
	
	jsChecker.addRule ('isDate', {rule: 'isRequired', message : 'The field isDate is required'});
	jsChecker.addRule ('isDate', {rule: 'isDate', message : 'The field is not a correct date (dd/mm/yyyy)'});
	
	jsChecker.addRule ('isTime', {rule: 'isRequired', message : 'The field isTime is required'});
	jsChecker.addRule ('isTime', {rule: 'isTime', message : 'The field is not a correct time'});
	*/
}

var gl_tab_ajt_produit = new Array();
var gl_error_ajt_produit = 0;

function displayError_cmd_cb (msg, oArgs) {
	if (gl_tab_ajt_produit[oArgs.element] != 1)
	{
		gl_error_ajt_produit++;
		if (gl_error_ajt_produit)
			document.getElementById ('div_check').style.display = 'block';
		gl_tab_ajt_produit[oArgs.element] = 1;
		document.getElementById ("msg_" + oArgs.element).style.color = 'red';
		document.getElementById ("msg_" + oArgs.element).style.display = 'inline';
		document.getElementById (oArgs.element).style.border = '1px solid red';
		document.getElementById ("msg_" + oArgs.element).innerHTML = msg + "<br>";
	}
}

function deleteDisplay_cmd_cb (msg, oArgs) {
	if (gl_tab_ajt_produit[oArgs.element] == 1)
	{
		gl_error_ajt_produit--;
		gl_tab_ajt_produit[oArgs.element] = 0;
		if (gl_error_ajt_produit == 0)
			document.getElementById ('div_check').style.display = 'none';
	}
	document.getElementById (oArgs.element).style.border = '1px solid green';
	document.getElementById ("msg_" + oArgs.element).style.display = 'none';
}

function deleteDisplay_inscription (msg, oArgs) {
document.getElementById ("msg_" + oArgs.element).style.display = 'none';	
}

function displayError_inscription (msg, oArgs) {
	if (document.getElementById("erreur_livraison"))
		document.getElementById("erreur_livraison").style.color = "red";
	document.getElementById ("msg_" + oArgs.element).innerHTML = "<img src='./images/cruz_red.png' width='10' height='10'> " + msg;
	document.getElementById ("msg_" + oArgs.element).style.display = 'block';
}
