// JavaScript Document

// + Updates
// + ------------------------------------------------------------
// +
// + 2009-04-22 => Bouton submit au lieu d'un lien
// + 			=> Ajout du controle des familles de champ dont
// + 				un est seul requis. email OU numéro de mobile
// + 			=> Suppression du BR devant les messages d'erreur
// + 				des SELECT. Idem pour TEXTAREA
// + 2009-04-24 => Ajout d'un test de présence de class require
// + 				sur la civilité
// +
// + ------------------------------------------------------------


(function($) {
	$(function(){
		/* Document is ready
		---------------------------------------- */
		
		//
		// Click on the submit button : updated on 2009-04-22
		//
		$('form').submit(function () {
			// Get the form
			var myForm = $(this);
			
			// Regular expression for the email : name = person-email
			var reg1 = /^[\w-]+(\.[\w-]+)*@([\w-]+\.)+[a-zA-Z]{2,7}$/;
			
			// Regular expression names
			var reg2 = /^([ÀÂÄÉÈÊËÎÏÔÖÛÜàâäéèêiîïôöûüça-zA-Z]+[-'\s]?[ÀÂÄÉÈÊËÎÏÔÖÛÜàâäéèêiîïôöûüça-zA-Z]+)+$/;
			
			// Regular expression french zip
			var reg3 = /^[0-9]{5}$/;
			
			// Regular expression french phone number
			var reg4 = /^[0-9]{10}$/;
			
			var errorsCount = 0;
			
			//
			// First remove all previous error messages
			//
			myForm.find('span.error-msg').remove();
			
			//
			// Required person title
			//
			if ( myForm.find('input[type=radio][name=person_title]:first').parents('dl:first').hasClass('require') && myForm.find('input[type=radio][name=person_title]').length && !myForm.find('input[type=radio][name=person_title]:checked').length ) {
				$('input[type=radio][name=person_title]:last').parent().after('<span class="error-msg">Ce champ est obligatoire</span>');
				errorsCount++;
			}
			
			//
			// Required select
			//
			myForm.find('dl.require select').each(function () {
				if ( $(this).find('option:selected').val() == '' ) {
					$(this).after('<span class="error-msg">Ce champ est obligatoire</span>');
					errorsCount++;
				}
			});
			
			//
			// Required textarea
			//
			myForm.find('dl.require textarea').each(function () {
				if ( $.trim($(this).val()) == '' ) {
					$(this).after('<span class="error-msg">Ce champ est obligatoire</span>');
					errorsCount++;
				}
			});
			
			//
			// Linked fields : added on 2009-04-22
			//
			$('input.linked-field').each(function () {
				var fieldValue = $.trim($(this).val());
				
				if (fieldValue != '') {
					// Others linked fields are no longer required
					$(this).parents('dl:first').siblings('dl').find('input.linked-field').each(function () {
						$(this).parents('dl:first').removeClass('require');
					});
				}
				else {
					// Others linked fields are required
					$(this).parents('dl:first').siblings('dl').find('input.linked-field').each(function () {
						$(this).parents('dl:first').addClass('require');
					});
				}
			});
      
      //
      // AJOUT THOMAS TOOG
      $('input.optin').each(function () {
        if ('' != $.trim($('#' + this.id.split('_')[1]).val()) && !$(this).attr('checked')) {
          $(this).parent('label').after('<span class="error-msg" style="display:block;margin-top:3px;">Ce champ est obligatoire afin qu\'Atlantic puisse suivre le bon déroulement de votre relation. Si vous ne le souhaitez pas nous vous invitons à vous diriger vers la liste des installateurs.</span>');
          errorsCount++;
        }
      });
      
			
			//
			// Get text fields and run tests
			//
			myForm.find('input[type=text]').each(function () {
				var fieldValue = $.trim($(this).val());
				var fieldName = $(this).attr("name");
				var fieldType = $(this).attr('type');
				
				// Required fields
				if ( $(this).parents('dl').hasClass('require') && fieldValue == '' ) {
					$(this).after('<span class="error-msg">Ce champ est obligatoire</span>');
					errorsCount++;
				}
				
				if ( fieldValue != '' ) {
					// Emails
					if ( $(this).hasClass('email-field') && !fieldValue.match(reg1) ) {
						$(this).after('<span class="error-msg">L\'e-mail n\'est pas valide</span>');
						errorsCount++;
					}
					// Names
					else if ( $(this).hasClass('name-field') && !fieldValue.match(reg2) ) {
						$(this).after('<span class="error-msg">Le nom n\'est pas valide</span>');
						errorsCount++;
					}
					// Zip codes
					else if ( $(this).hasClass('zip-field') && !fieldValue.match(reg3) ) {
						$(this).after('<span class="error-msg">Le code postal n\'est pas valide</span>');
						errorsCount++;
					}
					// Zip codes
					else if ( $(this).hasClass('phone-field') && !fieldValue.match(reg4) ) {
						$(this).after('<span class="error-msg">Le numéro n\'est pas valide</span>');
						errorsCount++;
					}
				}
			});
			
			// Do not submit form
			if ( errorsCount ) {
				return false;
			}
      
		});
		// END click on submit button actions

	});
})(jQuery);