/**
 * Nouvelle gestion de la validation d'un formulaire
 */
/**
 * Gestion au chargement de la page
 */
$(document).ready(function()
{
	/**
	 * Code postale à 5 chiffres
	 */
	$('#codepostal').attr('minlength', 5);
	$('#codepostal').attr('maxlength', 5);
	/**
	 * Fonction de validation d'un numéro de téléphone
	 */
	jQuery.validator.addMethod("telephone", function(telephone_number, element)
	{
		var numbers = telephone_number.split(/\s{1}/);
		var wrongNumbers = false;
		/**
		 * test chaque bloc de chiffres
		 */
		for (index in numbers)
		{
			wrongNumbers |= (2 != numbers[index].length);
		}
		/**
		 * Tetst de 00 00 00 00 00/11 11 11 11 11/etc
		 */
		for ( var i = 0; i < 10; i++)
			wrongNumbers |= (telephone_number == i + '' + i + ' ' + i + '' + i + ' ' + i + '' + i + ' ' + i + '' + i + ' ' + i + '' + i);
		/**
		 * Tetst de 01 01 01 01 01/02 02 02 02 02/etc
		 */
		for ( var i = 1; i < 10; i++)
			wrongNumbers |= (telephone_number == '0' + i + ' 0' + i + ' 0' + i + ' 0' + i + ' 0' + i);
		/**
		 * tests supplémentaires
		 */
		wrongNumbers |= (telephone_number == '01 23 45 67 89');
		wrongNumbers |= (telephone_number == '12 34 56 78 90');
		wrongNumbers |= (telephone_number == '98 76 54 32 10');
		wrongNumbers |= (telephone_number == '09 87 65 43 21');
		return this.optional(element) || (5 == numbers.length && !wrongNumbers);
	}, "");
	/**
	 * Email : ajout de la règle ci-dessous pour s'assurer qu'il n'y ai pas d'accent
	 * 	Voir http://fr.wikipedia.org/wiki/Adresse_%C3%A9lectronique
	 * 	/^([a-zA-Z0-9@_\-\.!#\$%&'*+\/=\?\^_`{\|}~]*)$/.test('mikaelcom-^@hotmail.com')
	 */
	jQuery.validator.addMethod("email", function(email, element)
	{
		return this.optional(element) || ((/^([a-zA-Z0-9@_\-\.!#\$%&'*+\/=\?\^_`{\|}~]*)$/.test(email) && /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test(email)));
	}, "");
	/**
	 * Si pas le div pour contenir les erreurs masquées, on le crée
	 */
	if (!document.getElementById('errorContainer'))
	{
		var div = document.createElement('div');
		div.setAttribute('id', 'errorContainer');
		div.setAttribute('style', 'display:none;');
		var div2 = document.createElement('div');
		div2.setAttribute('id', 'innerDiv');
		div2.setAttribute('style', 'display:none;');
		div.appendChild(div2);
		document.getElementsByTagName('body')[0].appendChild(div);
	}
});
/**
 * Variable indiquand que le formulaire a été saisi évitant la double soumission
 * @var bool
 */
var formSubmitted = false;
/**
 * Fonction de validation du formulaire d'id contact_form
 * 
 * @return void
 */
function checkform($_formId, $_submitForm)
{
	if (!formSubmitted)
	{
		var formId = typeof $_formId != 'undefined' ? (typeof $_formId == 'string' ? '#' + $_formId : $_formId) : '#contact_form';
		/**
		 * Par défaut, les sites ne transmettent pas $_submitForm et permettant la soumission du formulaire
		 */
		var submitForm = ((typeof $_submitForm != 'undefined') && $_submitForm == false) ? false : true;
		/**
		 * Gestion champs du tip a friend : si non vide => doit être testé comme email
		 */
		if (formId == 'taf_form')
		{
			if ($('#taf_email_1').val() != '')
				$('#taf_email_1').addClass('required email');
			else
				$('#taf_email_1').removeClass('required email');
			if ($('#taf_email_2').val() != '')
				$('#taf_email_2').addClass('required email');
			else
				$('#taf_email_2').removeClass('required email');
		}
		$(formId).validate(
		{
			submitHandler : function(form)
			{
				$("#processed").val('true');
				if (form.id != 'taf_form')
				{
					try
					{
						formSubmitted = true;
						if (submitForm)
							form.submit();
					}
					catch (e)
					{
						formSubmitted = false;
					}
				}
				else
					sendTipAFriend();
			},
			invalidHandler : function(form, validator)
			{
				if (document.getElementById('footer_msg_default'))
					$("#footer_msg_default").css('display', 'none');
				/**
				 * Selon le type du conteneur de message
				 * 	- pichet-immobilire.fr => p => block
				 * 	- immobilier-defisc => span => inline
				 */
				if (document.getElementById('footer_msg_error'))
					$("#footer_msg_error").css('display', $("#footer_msg_error")[0].tagName.toLowerCase() == 'p' ? 'block' : 'inline');
			},
			errorLabelContainer : "#errorContainer #innerDiv",
			highlight : function(element, errorClass)
			{
				$(element).addClass("error").removeClass("valid");
				/**
				* Si select sans label, on le met en rouge
				*/
				if ($(element).hasClass("select") && $(element).get(0).id && !document.getElementById($(element).get(0).id).parentNode.getElementsByTagName('label').length)
					$(element).css('color', 'red');
				/**
				 * Si champ de type bouton radio
				 */
				if ($(element).hasClass("rad_input"))
					$(element).parent('label').css('color', 'red').siblings('label').css('color', 'red');
				else
					$(element.form).find("label[for=" + element.id + "]").css('color', 'red');
				if (element.id == 'taf_email_1' || element.id == 'taf_email_2')
					$(element.form).find("label[for=taf_email_0]").css('color', 'red');
			},
			unhighlight : function(element, validClass)
			{
				$(element).addClass("valid").removeClass("error");
				/**
				* Si select sans label, on le met en rouge
				*/
				if ($(element).hasClass("select") && $(element).get(0).id && !document.getElementById($(element).get(0).id).parentNode.getElementsByTagName('label').length)
					$(element).css('color', '');
				/**
				 * Si champ de type bouton radio
				 */
				if ($(element).hasClass("rad_input"))
					$(element).parent('label').css('color', '').siblings('label').css('color', '');
				else
					$(element.form).find("label[for=" + element.id + "]").css('color', '');
				if (element.id == 'taf_email_1' || element.id == 'taf_email_2')
					$(element.form).find("label[for=taf_email_0]").css('color', '');
			}
		});
		if (submitForm)
			$(formId).submit();
		else
			return $(formId).valid();
	}
}
/**
 * Fonction permettant de valider un champ en particulier d'un formulaire tout en utilisant la fonction générale
 * @param $_formId string id du formulaire
 * @param $_fieldId string id du champ à valider
 * @return
 */
function checkformField($_formId, $_fieldId, $_submitForm)
{
	var formId = typeof $_formId == 'string' ? '#' + $_formId : $_formId;
	/**
	 * Par défaut, les sites ne transmettent pas $_submitForm et permettant la soumission du formulaire
	 */
	var submitForm = ((typeof $_submitForm != 'undefined') && $_submitForm == false) ? false : true;
	if ($_fieldId != null && $_fieldId != undefined && typeof $_fieldId != 'undefined')
	{
		if ($(formId).validate(
		{
			'errorLabelContainer' : '#errorContainer #innerDiv'
		}).element('#' + $_fieldId))
		{
			checkform($_formId, submitForm);
			return true;
		}
	}
	else
	{
		if ($(formId).validate(
		{
			'errorLabelContainer' : '#errorContainer #innerDiv'
		}))
		{
			checkform($_formId, submitForm);
			return true;
		}
	}
	return false;
}
/**
 * Gestion des champs avec affichage d'un lart JS pour lister tous les champs invalides
 * Ancienne méthode de validation de formulaire
 */
$(document).ready(function()
{
	$("#submit_form_button").click(function()
	{
		/**
		 * Messages
		 */
		var messages = new Array();
		messages['id_immo'] = ' - un programme';
		messages['civilite'] = ' - votre civilité';
		messages['nom'] = ' - votre nom';
		messages['prenom'] = ' - votre prénom';
		messages['codepostal'] = ' - votre code postal';
		messages['ville'] = ' - votre ville';
		messages['telephone'] = ' - votre téléphone';
		messages['email'] = ' - un email valide';
		messages['annee_naissance'] = ' - votre année de naissance';
		messages['situation_actuelle'] = ' - votre situtation actuelle (Propriétaire ou Locataire)';
		messages['imposition'] = ' - votre niveau d\'imposition';
		messages['optinfiliale'] = ' - oui ou non pour recevoir les informations sur la défiscalisation immobilière';
		messages['optinpartenaire'] = ' - oui ou non pour recevoir les offres spéciales des partenaires sélectionnés par Immobilier Defisc';
		/**
		 * Eléments du formulaire
		 */
		if (document.getElementById('contact_form'))
			var elements = document.getElementById('contact_form').elements;
		if (document.getElementById('abo_form'))
			var elements = document.getElementById('abo_form').elements;
		/**
		 * Nombre d'éléments
		 */
		var nbElements = elements.length;
		/**
		 * Alertes à afficher
		 */
		var alerts = new Array();
		/**
		 * Nombre d'alertes à afficher
		 */
		var nbAlerts = 0;
		for ( var i = 0; i < nbElements; i++)
		{
			var element = elements[i];
			if (element)
			{
				switch (element.tagName.toLowerCase())
				{
					case 'select':
						if (element.options[element.selectedIndex].value == '')
						{
							alerts[element.name] = messages[element.name];
							nbAlerts++;
						}
						break;
					case 'input':
						switch (element.type.toLowerCase())
						{
							case 'text':
								if (element.name == 'email' && !JSC_isEmail_String(element.value))
								{
									alerts[element.name] = messages[element.name];
									nbAlerts++;
								}
								if (element.name == 'telephone' && element.value.length < 14)
								{
									alerts[element.name] = messages[element.name];
									nbAlerts++;
								}
								else
								{
									if (element.value == '')
									{
										alerts[element.name] = messages[element.name];
										nbAlerts++;
									}
								}
								break;
							case 'radio':
								if ($('input[type=radio][name=' + element.name + ']:checked').attr('value') == undefined)
								{
									alerts[element.name] = messages[element.name];
									nbAlerts++;
								}
								break;
						}
						break;
				}
			}
		}
		var alertsToDisplay = new Array();
		for ( var index in alerts)
			alertsToDisplay.push(alerts[index]);
		if (nbAlerts > 0)
			return alert("Merci de sélectionner/saisir :\r\n " + alertsToDisplay.join("\r\n "));
		else
		{
			/**
			 * On désactive le bouton pour éviter la double soumission
			 */
			$("#submit_form_button").click(function()
			{
			});
			/**
			 * On met à jour la valeur de processed
			 */
			$("#processed").val('true');
			if (document.getElementById('contact_form'))
				$("#contact_form").submit();
			if (document.getElementById('abo_form'))
				$("#abo_form").submit();
		}
	});
});
