 // -- Expression régulières de validation du formulaire d'inscription
 var REGEXPS = new Hash({
	'type-nom': new Hash({
		regexp	: /^[a-z 0-9'.:-]+$/i,
		help	: 'Veuillez saisir votre nom de famille ou le nom de votre société.',
		error	: 'Le champs est invalide. Les caractères autorisés sont les lettres sans accent, l\'apostrophe, les chiffres et le tiret.'
	}),
	'type-qualite': new Hash({
		regexp	: /^[a-z 0-9'.:-]+$/i,
		help	: 'Veuillez sélectionner votre qualité.',
		error	: 'Veuillez sélectionner votre qualité.'
	}),	
	'type-prenom': new Hash({
		regexp	: /^[a-z 0-9'.:-]+$/i,
		help	: 'Veuillez saisir votre prénom.',
		error	: 'Le champs est invalide. Les caractères autorisés sont les lettres sans accent, l\'apostrophe, les chiffres et le tiret.'
	}),
	'type-adresse': new Hash({
		regexp	: /^[a-z 0-9'.:-]+$/i,
		help	: '<b>Exemple</b><br /><i class="orange">58 AVENUE DU GENERAL DE GAULLE</i>',
		error	: 'Le champs est invalide. Les caractères autorisés sont les lettres sans accent, l\'apostrophe, les chiffres et le tiret.'
	}),
	'type-etage': new Hash({
		regexp	: /^[a-z 0-9'.:-]+$/i,
		help	: '<b>Exemple</b><br /><i class="orange">APPT 58 - ETAGE 6 - ESC A</i>',
		error	: 'Le champs est invalide. Les caractères autorisés sont les lettres sans accent, l\'apostrophe, les chiffres et le tiret.'
	}),
	'type-adresse-complement': new Hash({
		regexp	: /^[a-z 0-9'.:-]+$/i,
		help	: '<b>Exemple</b><br /><i class="orange">BAT A, RES LAURIERS, ENTREE B, A L\'ATTENTION DE...</i>',
		error	: 'Le champs est invalide. Les caractères autorisés sont les lettres sans accent, l\'apostrophe, les chiffres et le tiret.'
	}),
	'type-ville': new Hash({
		regexp	: /^[a-z 0-9'.:-]+$/i,
		help	: '<b>Exemple</b><br /><i class="orange">ST MARTIN SUR FOSSETTE</i>',
		error	: 'Le champs est invalide. Les caractères autorisés sont les lettres sans accent, l\'apostrophe, les chiffres et le tiret.'
	}),
	'type-string': new Hash({
		regexp	: /^[a-z 0-9'.:-]+$/i,
		help	: '',
		error	: 'Le champs est invalide. Les caractères autorisés sont les lettres sans accent, l\'apostrophe, les chiffres et le tiret.'
	}),
	'type-int': new Hash({
		regexp	: /^[0-9]+$/i,
		help	: '',
		error	: 'Le champs est invalide. Seuls les chiffres sont acceptés.'
	}),
	'type-postal': new Hash({
		regexp	: /^[a-z0-9-]+$/i,
		help	: 'Saisir un code postal à 5 caractères.',
		error	: 'Veuillez saisir un code postal valide.'
	}),
	'type-telephone': new Hash({
		regexp	: /^[0-9]+$/i,
		help	: 'Pour vous informer de la livraison de votre commande. Exemple : 0609080910 ou 0102030405.',
		error	: 'Veuillez saisir un numéro de téléphone valide.'
	}),
	'type-telephone-contact': new Hash({
		regexp	: /^[0-9]+$/i,
		help	: '<b>Exemple: </b><b class="orange">0143671515</b>',
		error	: 'Veuillez saisir un numéro de téléphone valide.'
	}),	
	'type-email': new Hash({
		regexp	: /^[0-9a-z.@_-]+$/i,
		regexpf	: /^[a-z0-9._-]+@[a-z0-9.-]{2,}[.][a-z]{2,3}$/,
		help	: '<b>Exemple: </b><b class="orange">celyatis@celyatis.com</b>',
		error	: 'Veuillez saisir une adresse email valide.'
	}),
	'type-id-commande': new Hash({
		regexp	: /^[0-9]+$/i,
		help	: '<b>Exemple: </b><b class="orange">1755800</b>',
		error	: 'Veuillez saisir votre numéro de commande.'
	}),	
	'type-password': new Hash({
		regexp	: /^[a-z0-9]+$/i,
		help	: 'Veuillez saisir un mot de passe (chiffres et lettres sans accent, de 6 à 8 caractères).',
		error	: 'Le champs est invalide. Les caractères autorisés sont les lettres sans accent et les chiffres.'
	})
});

window.addEvent('domready', function(){
	if( $chk($('general-wait')) && $chk($('general-submit')) && $chk($('myform')) ){
		$('general-wait').setStyle('visibility', 'hidden');
		$('general-wait').removeClass('hidden');
		$$('input[type=hidden][name=mode]').each(function(el){ el.value = 'dynamic'; });
		$('myform').addEvent('submit', function(event){
			event.stop();
			var q = new Request.JSON({
				'url'		: this.get('action'),
				'method'	: 'post',
				'onRequest'	: function(){
					$('general-submit').setStyle('visibility', 'hidden');
					$('general-wait').setStyle('visibility', 'visible');
				}.bind(this),
				'onSuccess'	: function( _response ){
					$('general-submit').setStyle('visibility', 'visible');
					$('general-wait').setStyle('visibility', 'hidden');
					
					if( _response.status.toInt() == 1 ){
						if( $defined(_response.redirection) ){
							document.location.replace(_response.redirection);
						}else{
							$('form-message-box').setStyle('visibility', 'visible');
							new Fx.Scroll(window).toTop();
							$$('.fac-line').each(function(el){
								el.set('class', 'fac-line fl-good');
							});
							$('form-message-box').set({
								'class': 'fmb-good',
								'html': _response.okmessage
							});
						}
					}else{
						$('form-message-box').setStyle('visibility', 'visible');
						if( $defined(_response.errormessage) ){
							new Fx.Scroll(window).toTop();
							$('form-message-box').set({
								'class': 'fmb-error',
								'html': _response.errormessage
							});
						}else{
							$('form-message-box').set({
								'class': 'fmb-error',
								'html': 'Votre formulaire contient des erreurs !'
							});
							var elemsOk = new String(_response.ok).split(',');
							$A(elemsOk).each(function(el){
								if( $defined(el) && $chk($(el)) ){
									$(el).getParent().set('class', 'fac-line fl-good');
								}
							});
							$each($A(_response.error), function(el, ind){
								if( $defined(el.field) && $chk($(el.field)) ){
									var message = el.message;
									if( ind == 0 ){
										new Fx.Scroll(window).toTop();
										//$(el.field).focus();
									}
									$(el.field).getParent().set('class', 'fac-line fl-error fl-focus');
		
									// -- On est sur une erreur de ville avec pb de correspondance code postal / ville
									if( new RegExp(/ville/i).test(el.field) ){
										// -- On récupère la liste des suggestions
										$A(_response.suggestions).each(function(sugg){
											if( sugg.field == el.field ){
												var villes = new String(sugg.villes).split(',');
												if( villes.length > 0 ){
													message += '<br /><br />Choisissez parmi nos suggestions de villes :<br /><br /><ul class="arrowed fac-arrowed">'; 
													$A(villes).each(function(ville){
														message += '<li><a href="javascript:void(0)" onclick="$(\'' + el.field + '\').value = \'' + ville + '\'">' + ville + '</a></li>';
													});
													message += '</ul>';
													message += '<br />ou bien conservez ce que vous avez saisi en <a href="javascript:void(0)" onclick="$(\'' + el.field + '\').getParent().set(\'class\', \'fac-line fl-good\');$(\'' + el.field + '-save\').value = $(\'' + el.field + '\').value">cliquant ici</a>.';
												}
											}
										});
									}
									var parent = $(el.field).getParent();
									if( $defined(parent) ){
										var first = parent.getFirst('.fac-field-help');
										if( $defined(first) ){
											first.set('html', message);
										}
									}
								}
							});
						}
					}					
				}.bind(this)
			}).send(this.toQueryString());
		});
		
		$$('input[class~=dyn-check]').each(function(inp){
			$each(['keyup', 'change', 'focus', 'blur'], function(ev){
				inp.addEvent(ev, function(event){
					var types = new RegExp(/(type-[a-z0-9-]+)/i).exec(inp.get('class'));
					if( types.length == 2 ){
						var type = types[0];
						var infos_regexp = REGEXPS.get(type);
						if( $defined(infos_regexp) && inp.value.trim() == '' ){
							if( ev != 'blur' ){
								var message = $defined(infos_regexp.help) ? infos_regexp.help : '';
								if( message.trim() != '' ){
									inp.getParent().set('class', 'fac-line fl-focus');
									inp.getParent().getFirst('.fac-field-help').set('html', message);
								}else{
									inp.getParent().set('class', 'fac-line');
									inp.getParent().getFirst('.fac-field-help').set('html', message);
								}
							}else{
								inp.getParent().removeClass('fl-focus');
							}
						}else if( $defined(infos_regexp) && ev != 'blur' || new RegExp(/(email|password)/i).test(inp.id) ){
							if( new RegExp(/email/i).test(inp.id) && (ev == 'blur' || ev == 'focus') ){
								var re = new RegExp(infos_regexp.regexpf);
							}else{
								var re = new RegExp(infos_regexp.regexp);
							}
							if( ! re.test(inp.value) ){
								inp.getParent().set('class', 'fac-line fl-error fl-focus');
								inp.getParent().getFirst('.fac-field-help').set('html', infos_regexp.error);
							}else{
								inp.getParent().set('class', 'fac-line fl-good');
								var message = '';
								if( type == 'type-password' && ! new RegExp(/confirmation/i).test(inp.name) ){
									inp.getParent().set('class', 'fac-line fl-good fl-focus');
									var strength = passwordStrengthEvaluator(inp.value);
									if( strength == 0 ){
										message = 'Niveau de sécurité du mot de passe : <b class="password-strength-weak">Faible</b>';
									}else if( strength == 1 ){
										message = 'Niveau de sécurité du mot de passe : <b class="password-strength-normal">Bon</b>';
									}else if( strength == 2 ){
										message = 'Niveau de sécurité du mot de passe : <b class="password-strength-high">Elevé</b>';
									}
								}else if( type == 'type-password' ){
									// -- Comparaison des valeurs des mots de passe
									var confValue = inp.value;
									var value = $(inp.id.replace('-confirmation', '')).value;
									if( confValue.length != value.length ){
										inp.getParent().removeClass('fl-error').removeClass('fl-focus').removeClass('fl-good');
									}
									if( (confValue.length >= value.length && confValue != value) || ((ev == 'blur' || ev == 'focus') && confValue != value) ){
										inp.getParent().set('class', 'fac-line fl-error fl-focus');
										message = 'Veuillez saisir 2 mots de passe identiques !';
									}
								}
								inp.getParent().getFirst('.fac-field-help').set('html', message);
							}
						}
					}
				});
			});
		});
		
		$$('select[id=fac-demande-objet]').each(function(rad){
			rad.addEvent('click', function(event){
				var i = new RegExp(/(.*)-demande-objet/i).exec(this.name);
				if( this.value == '1' || this.value == '2' || this.value == '3' || this.value == '4' || this.value == '8' || this.value == '9' || this.value == '10'){
					$(i[1] + '-id-commande-required').setStyle('visibility', 'hidden');
					$(i[1] + '-id-commande').set('disabled', 'disabled');
					$(i[1] + '-id-commande').setStyle('background-color', '#DDDDDD');
					$(i[1] + '-id-commande').set('rel', $(i[1] + '-id-commande').value);
					$(i[1] + '-id-commande').value = '';
					$(i[1] + '-id-commande').getParent().set('class', 'fac-line');
				}else{
					$(i[1] + '-id-commande-required').setStyle('visibility', 'visible');
					$(i[1] + '-id-commande').removeProperty('disabled');
					$(i[1] + '-id-commande').setStyle('background-color', '');
					if( $(i[1] + '-id-commande').value.trim() == '' ){
						var oldValue = $(i[1] + '-id-commande').get('rel');
						$(i[1] + '-id-commande').value = $defined(oldValue) ? oldValue : '';
					}
				}
			});
		});

		$$('input[type=radio][name$=civilite]').each(function(rad){
			rad.addEvent('click', function(event){
				var i = new RegExp(/(.*)-civilite/i).exec(this.name);
				if( this.value == 'STE' ){
					$(i[1] + '-prenom-required').setStyle('visibility', 'hidden');
					$(i[1] + '-prenom').set('disabled', 'disabled');
					$(i[1] + '-prenom').setStyle('background-color', '#DDDDDD');
					$(i[1] + '-prenom').set('rel', $(i[1] + '-prenom').value);
					$(i[1] + '-prenom').value = '';
					$(i[1] + '-prenom').getParent().set('class', 'fac-line');
					
					$(i[1] + '-nom-header').set('html', 'Nom de la société<sup>*</sup>');
				}else{
					$(i[1] + '-prenom-required').setStyle('visibility', 'visible');
					$(i[1] + '-prenom').removeProperty('disabled');
					$(i[1] + '-prenom').setStyle('background-color', '');
					if( $(i[1] + '-prenom').value.trim() == '' ){
						var oldValue = $(i[1] + '-prenom').get('rel');
						$(i[1] + '-prenom').value = $defined(oldValue) ? oldValue : '';
					}
					$(i[1] + '-nom-header').set('html', 'Nom<sup>*</sup>');
				}
			});
		});		
		
		$$('input[type=radio][name=fac-infos-livraison]').each(function(rad){
			rad.addEvent('click', function(event){
				$('creer-adresse-livraison').setStyle('display', this.value.toInt() == 1 ? 'none' : 'block');
			});
		});

		$$('input[type=radio][name=fac-infos-qualite]').each(function(rad){
			rad.addEvent('click', function(event){
				$('selectionner-qualite').setStyle('display', this.value.toInt() == 1 ? 'none' : 'block');
			});
		});		
		
	}
});
