$(document).ready(function(){
 	
	$("form").validate({
		invalidHandler: function(e, validator) {
			var errors = validator.numberOfInvalids();
			if (errors) {
				var message = errors == 1
					? ' Hai inserito 1 campo errato. Gli errori sono evidenziati in rosso'
					: ' Hai inserito ' + errors + ' campi errati. Gli errori sono evidenziati in rosso';
				$("div.error span").html(message);
				$("div.error").show();
			} else {
				$("div.error").hide();
			}
		},
		onkeyup: false,
		submitHandler: function() {
			$("div.error").hide();
			alert("Invia! Usa il link sotto per andare al prossimo step");
		},
		messages: {
			password2: {
				required: " ",
				equalTo: "Conferma la password"	
			},
			email: {
				required: " ",
				email: "Indirizzo email non valido, esempio: tuonome@tuodominio.it",
				remote: jQuery.validator.format("{0} &egrave; gi&agrave; preso, inserisci un altro indirizzo.")	
			}
		},
		debug:true
	});
	
	// ----------------- Maschere di INPUT ------------------
	$("input.zipcode").mask("99999");
	$("input.dateITA").mask("99/99/9999");
	// ------------------------------------------------------
});


// ----------------- Traduzioni Standard ------------------
jQuery.extend(jQuery.validator.messages, {
       required: "Campo obbligatorio.",
       remote: "Controlla questo campo.",
       email: "Inserisci un indirizzo email valido.",
       url: "Inserisci un indirizzo web valido (es: http://www.miosito.it).",
       date: "Inserisci una data valida.",
       dateISO: "Inserisci una data valida (ISO).",
       dateITA: "Inserisci una data valida.",
       number: "Inserisci un numero valido.",
       numberDE: "Inserisci un numero valido.",
       digits: "Inserisci solo numeri.",
       creditcard: "Inserisci un numero di carta di credito valido.",
       equalTo: "Il valore non corrisponde.",
       accept: "Inserisci un valore con un&apos;estensione valida.",
       maxlength: jQuery.validator.format("Non inserire pi&ugrave; di {0} caratteri."),
       minlength: jQuery.validator.format("Inserisci almeno {0} caratteri."),
       rangelength: jQuery.validator.format("Inserisci un valore compreso tra {0} e {1} caratteri."),
       range: jQuery.validator.format("Inserisci un valore compreso tra {0} e {1}."),
       max: jQuery.validator.format("Inserisci un valore minore o uguale a {0}."),
       min: jQuery.validator.format("Inserisci un valore maggiore o uguale a {0}.")
});
// ------------------------------------------------------

// ----------------- Metodi Specifici -------------------
jQuery.validator.addMethod("codfiscale", function(value){ 
	var regex = /[A-Za-z]{6}[\d]{2}[A-Za-z][\d]{2}[A-Za-z][\d]{3}[A-Za-z]/;
	if(value == "") return true;
	else return value.match(regex);
}, "Formato Codice Fiscale errato");

jQuery.validator.addMethod("codfiscale75", function(value){ 
	var regex = /[A-Za-z]{6}[\d]{2}[A-Za-z][\d]{2}[A-Za-z][\d]{3}[A-Za-z]/;
	if(value == ""){
		return true;
	}else{
		if(value.match(regex)){
			var d=new Date();
			var a=d.getFullYear();
			ac="19"+value.substr(6,2);
			if( (a - 1*(ac))<=76 ){/*<76*/
				return true;
			}else{
				alert("Intestatario OVER 75, contratto non inseribile");
				return false;
			}
		}else{
			return false;
		}
	}
}, "Formato Codice Fiscale errato");

jQuery.validator.addMethod("piva", function(value){ 
	var regex = /[\d]{11}/;
	if(value == "") return true;
	else return value.match(regex);
}, "Formato Partita IVA errato");

jQuery.validator.addMethod("codfiscale_piva", function(value){ 
	if(value == "") return true;
	var regex_cf = /[A-Za-z]{6}[\d]{2}[A-Za-z][\d]{2}[A-Za-z][\d]{3}[A-Za-z]/;
	var regex_pi = /[\d]{11}/;
	return (value.match(regex_cf) || value.match(regex_pi));
}, "Formato Codice fiscale / partita IVA errato");

jQuery.validator.addMethod("codfiscale_azienda", function(value){ 
	var regexCF = /[A-Za-z]{6}[\d]{2}[A-Za-z][\d]{2}[A-Za-z][\d]{3}[A-Za-z]/; // Regexp CF
	var regexPI = /[\d]{11}/; // Regexp PI
	if(value == "") return true;
	else return value.match(regexCF) || value.match(regexPI);
}, "Formato Codice Fiscale errato");

jQuery.validator.addMethod("zipcode", function(value, element){ 
	var regex = /[\d]{5}/;
	if(value == "") return true;
	else if(value == "_____") return true;
	else return value.match(regex);
}, "Formato CAP errato");

jQuery.validator.addMethod("dateITA", function(value, element){
		if(value == "__/__/____") return true;
		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;
	}, "Formato data errato");

jQuery.validator.addMethod("almeno", function(value, element, params){ 
	if(value == "") return true;
	if(value.length >= params*1) return true;
	else return false;
}, "Troppi pochi caratteri");

jQuery.validator.addMethod("somma100", function(value, element, params){ 
	if((params*1 + value*1) <= 100) return true;
	else return false;
}, "Si prega di specificare un valore che sommato non superi il 100%");

jQuery.validator.addMethod("data_successiva", function(value, element, params){ 
	if(value == "") return true;
	else if(value == "__/__/____") return true;

	var arr1 = value.split("/");
	var arr2 = params.split("/");
	var d1 = new Date(arr1[2], arr1[1]-1, arr1[0]);
	var d2 = new Date(arr2[2], arr2[1]-1, arr2[0]);
	var r1 = d1.getTime();
	var r2 = d2.getTime();

	if(r1>=r2) return true;
	else return false;

}, "Si prega di specificare una data successiva alla compilazione");

jQuery.validator.addMethod("anno_uguale", function(value, element, params){ 
	if(value == "") return true;
	else if(value == "__/__/____") return true;

	var a1 = value.split('/')[2];
	var a2 = params;
	return a1 == a2;
}, "Anno sbagliato.");
// ------------------------------------------------------

