$(document).ready( function() {
	/* open links with rel="external" in a new window */
	$('A[rel="external"]').click( function() {
   	window.open( $(this).attr('href') );
   	return false;
	});
	
	/* On met le focus sur le premier élément du 1er formulaire */
	if($('form').length){
		if($('form:first :input:enabled').length){
			$('form:first :input:enabled')[0].focus();
		}		
	}

	/**
	  * Return true, if the value is a valid date, also making this formal check dd/mm/yyyy.
	  *
	  * @example jQuery.validator.methods.date("01/01/1900")
	  * @result true
	  *
	  * @example jQuery.validator.methods.date("01/13/1990")
	  * @result false
	  *
	  * @example jQuery.validator.methods.date("01.01.1900")
	  * @result false
	  *
	  * @example <input name="pippo" class="{dateFR:true}" />
	  * @desc Declares an optional input element whose value must be a valid date.
	  *
	  * @name jQuery.validator.methods.dateFR
	  * @type Boolean
	  * @cat Plugins/Validate/Methods
	  */
	jQuery.validator.addMethod(
		"dateFR",
		function(value, element) {
			var check = false;
			var re = /^\d{1,2}\/\d{1,2}\/\d{4}$/
			if( re.test(value)){
				var adata = value.split('/');
				var gg = parseInt(adata[0],10);
				var mm = parseInt(adata[1],10);
				var aaaa = parseInt(adata[2],10);
				var xdata = new Date(aaaa,mm-1,gg);
				if ( ( xdata.getFullYear() == aaaa ) && ( xdata.getMonth () == mm - 1 ) && ( xdata.getDate() == gg ) )
					check = true;
				else
					check = false;
			} else
				check = false;
			return this.optional(element) || check;
		}, 
		"Please enter a correct date"
	);


	/* Message d'erreur validation des formulaires */
	$.extend($.validator.messages, {
		required: "Ce champ est requis.",
		remote: "Veuillez remplir ce champ pour continuer.",
		email: "Veuillez entrer une adresse email valide.",
		url: "Veuillez entrer une URL valide.",
		date: "Veuillez entrer une date valide.",
		dateFR: "Veuillez entrer une date valide.",
		dateISO: "Veuillez entrer une date valide (ISO).",
		number: "Veuillez entrer un nombre valide.",
		digits: "Veuillez entrer (seulement) une valeur numérique.",
		creditcard: "Veuillez entrer un numéro de carte de crédit valide.",
		equalTo: "Veuillez entrer une nouvelle fois la même valeur.",
		accept: "Veuillez entrer une valeur avec une extension valide.",
		maxlength: $.format("Veuillez ne pas entrer plus de {0} caractères."),
		minlength: $.format("Veuillez entrer au moins {0} caractères."),
		rangelength: $.format("Veuillez entrer entre {0} et {1} caractères."),
		range: $.format("Veuillez entrer une valeur entre {0} et {1}."),
		max: $.format("Veuillez entrer une valeur inférieure ou égale à {0}."),
		min: $.format("Veuillez entrer une valeur supérieure ou égale à {0}."),
		fixedlength: $.format("Veuillez entrer une valeur comportant {0} caractères"),
		confirmConditions: "Veuillez accepter les conditions générales avant de confirmer",
		confirmPaiementMensuel: "Veuillez accepter le paiement par prélèvement mensuel avant de confirmer"
	});


	$.extend($.validator, {
		preventsDoubleSubmition: function(form) {
			//alert("DEBUT preventsDoubleSubmition");
			form.submit();
			$(':submit').addClass('disabled');
			// prevents double submition
			$(form).submit(function(){
				return false;
			});
			//alert("FIN preventsDoubleSubmition");
		},
		handleSubmition: function(form) {
			//alert("DEBUT handleSubmition");
			$(':submit').addClass('disabled');
			$(':submit').removeClass('enabled');
			document.getElementById("submit").disabled=true;
			$(form).submit(function(){
				return false;
			});
			form.submit();
			//alert("FIN handleSubmition");
		},
		handleAjaxSubmit: function(form) {
			//alert("DEBUT submitSouscription");
			handleForward();
			// prevents double submition
			$(form).submit(function(){
				return false;
			});
			//alert("FIN submitSouscription");
		}
		
	});
	/* 
		Les erreurs levées par le validateur s'affichent sous le champ concerné
	 	excepté: 
		- dans le cas de boutons radio où elles s'affichent après le dernier 
		  bouton
		- dans le cas des ckecbox où elles s'affichent après le label
	*/
	$.validator.setDefaults( {
		errorPlacement: function(error, el){
			if ( el[0].type == "radio"){
				error.appendTo( el.parent("fieldset") );
			}else if( el[0].type == "checkbox"){
				error.appendTo( el.parent("p") );
			}else{
				error.insertAfter( el );
			}
		}
	});
	
	/* v1-1 */
	if($('#souscription').length){
		$('#souscription').validate({
			rules: {
				'emailSouscripteur': {
					required: function(){
						return $("#new_email_fields").css('display') != 'none';
					}
				}
			},
			submitHandler: $.validator.handleAjaxSubmit
		});
	}
	
	if($('#souscription_extension').length){
		$('#souscription_extension').validate({
			rules: {
				'confirmation[ok]': {
					required: true
				},
				'confirmation2[ok]': {
					required: true
				},
				'codeBanque': {
					rangelength: [5,5]
				},
				'codeGuichet': {
					rangelength: [5,5]
				},
				'numeroCompte': {
					rangelength: [11,11]
				},
				'cleRIB': {
					rangelength: [2,2]
				}
			},
			messages: {
				'confirmation[ok]': $.validator.messages.confirmConditions,
				'confirmation2[ok]': $.validator.messages.confirmPaiementMensuel,
				'codeBanque': {
					rangelength: $.validator.messages.fixedlength
				},
				'codeGuichet': {
					rangelength: $.validator.messages.fixedlength
				},
				'numeroCompte': {
					rangelength: $.validator.messages.fixedlength
				},
				'cleRIB': {
					rangelength: $.validator.messages.fixedlength
				}
			},
			submitHandler: $.validator.handleAjaxSubmit
		});
	}
	
	/* v2, a2 */
	if($('#confirmation').length){
		$('#confirmation').validate({
			rules: {
				'confirmation[ok]': {
					required: true
				}
			},
			messages: {
				'confirmation[ok]': $.validator.messages.confirmConditions
			},
			submitHandler: $.validator.handleAjaxSubmit
		});
	}
	
	/* a1-1 */
	if($('#access_activation').length){
		$('#access_activation').validate({
			rules: {
				'referenceExterneFormatee': {
					rangelength: [6,6]
				},
				'numeroContrat': {
					rangelength: [11,11]
				}
			},
			messages: {
				'referenceExterneFormatee': {
					rangelength: $.validator.messages.fixedlength
				},
				'numeroContrat': {
					rangelength: $.validator.messages.fixedlength
				}
			},
			submitHandler: $.validator.handleAjaxSubmit
		});
	}
	
	if($('#recuperation_codes').length){
		$('#recuperation_codes').validate({
			rules: {
				'referenceExterneFormatee': {
					rangelength: [6,6]
				}
			},
			messages: {
				'referenceExterneFormatee': {
					rangelength: $.validator.messages.fixedlength
				}
			},
			submitHandler: $.validator.handleAjaxSubmit
		});
	}
	
	/* a1-2 */
	if($('#activation').length){
		$('#activation').validate({
			rules: {
				'vin': {
					rangelength: [17,17]
				},
				'emailClientConfirmation': {
					equalTo: "#beneficiaire_email"
				},
				'kilometrage': {
					min: [document.getElementById("kilometrageCache").value]
				}
			},
			messages: {
				'vin': {
					rangelength: $.validator.messages.fixedlength
				}
			},
			submitHandler: $.validator.handleAjaxSubmit
		});
	}
	
	/* a3c, a3m */
	/*if($('#extension').length){
		var setPrice = function(type){
			var key = $('#garantie_duree_'+type+' option:selected').val();
			var str = key == "" ? "--" : prices[type][key];
			$('#price').text(str);
		};
		var setSelectOptions = function(type){
			$('#garantie_duree_'+type).change(function(){
				$('#garantie_duree_'+type+' option:selected').each(function(){
					setPrice(type);
				});
			}).change();
		}
		var validatorOptions = {
			submitHandler: $.validator.handleSubmition
		}
		if(prices != undefined){
			setSelectOptions('F0811005');
			// cas a3m
			if($("#bloc_duree_F0811004").length){
				setSelectOptions('F0811004');
				$('#bloc_duree_F0811004').hide();
				$('#bloc_duree_F0811005').hide();
				$('ul.buttons').css('margin-top','3em');
				
				var contraires = { F0811004:"F0811005", F0811005:"F0811004"};
				var key = $("input[@name='formule']:checked").val();
				
				if(key == "F0811004") $('#bloc_duree_F0811004').show();
				if(key == "F0811005") $('#bloc_duree_F0811005').show();
				
				$("input[@name='formule']").click(function(){
					key = $("input[@name='formule']:checked").val();
					$('#bloc_duree_'+contraires[key]).hide();
					$('#bloc_duree_'+key).show();
					setPrice(key);
				});
				validatorOptions = {
					rules: {
						//'garantie[duree_F0811004]': {
							//required: function(){
								//return $("#bloc_duree_F0811004").css('display') != 'none';
							//}
						//},
						//'garantie[duree_F0811005]': {
							//required: function(){
								//return $("#bloc_duree_F0811005").css('display') != 'none';
							//}
						//}
						
						'dureeCouverture': {
							required: function(){
								return $("#bloc_duree_F0811004").css('display') != 'none';
							}
						}
					},
					submitHandler: $.validator.handleSubmition
				}
			}
		}
		
		$('#extension').validate(validatorOptions);
	}*/
	
	
	
	
	
	
	/* a3c, a3m */
	if($('#extension').length){
		var setPrice = function(type){
			//alert("setPrice: " + type);
			var key = $('#garantie_duree option:selected').val();
			//alert("setPrice: key = " + key);
			var str = key == "" ? "--" : prices[type][key];
			$('#price').text(str);
			document.getElementById("montantPrime").value = str.substring(0, str.length-4).replace(',','.');
		};
		var setSelectOptions = function(type){
			//alert("setSelectOptions: " + type);
			$('#garantie_duree').change(function(){
				$('#garantie_duree option:selected').each(function(){
					setPrice(type);
				});
			}).change();
		}
		var validatorOptions = {
			submitHandler: $.validator.handleSubmition
		}
		if(prices != undefined){
			//setSelectOptions('F0811005');
			// cas a3m
			//if($("#bloc_duree_F0811004").length){
				//setSelectOptions('F0811004');
				//$('#bloc_duree_F0811004').hide();
				//$('#bloc_duree_F0811005').hide();
				$('ul.buttons').css('margin-top','3em');
				
				var contraires = { F0811004:"F0811005", F0811005:"F0811004"};
				var key = $("input[@name='formule']:checked").val();
				setPrice(key);
				//if(key == "F0811004") $('#bloc_duree_F0811004').show();
				//if(key == "F0811005") $('#bloc_duree_F0811005').show();
				$("input[@name='formule']").click(function(){
					//document.getElementsByName("formule")[0].value = key;
					key = $("input[@name='formule']:checked").val();
					//$('#bloc_duree_'+contraires[key]).hide();
					//$('#bloc_duree_'+key).show();
					//alert(key);
					setSelectOptions(key);
					setPrice(key);
				});
				validatorOptions = {
					rules: {
						//'garantie[duree_F0811004]': {
							//required: function(){
								//return $("#bloc_duree_F0811004").css('display') != 'none';
							//}
						//},
						//'garantie[duree_F0811005]': {
							//required: function(){
								//return $("#bloc_duree_F0811005").css('display') != 'none';
							//}
						//}
						
						'dureeCouverture': {
							required: function(){
								return $("#bloc_duree_F0811004").css('display') != 'none';
							}
						}
					},
					submitHandler: $.validator.handleSubmition
				}
			//}
		}
		
		$('#extension').validate(validatorOptions);
	}
	
	
	
	
	
	/* g1-1 */
	if($('#codes-recovery').length){
		$('#codes-recovery').validate({
			submitHandler: $.validator.handleAjaxSubmit
		});
	}	

});
