// Telefoni e cellulari italiani
jQuery.validator.addMethod("phoneitaly", function(phone_number, element) {
	return this.optional(element) || phone_number.length > 9 &&
		phone_number.match(/^((\+|00)?39\s)?(0\d{1,3}|3\d{2})\/\d{5,8}$/);
}, "Please specify a valid phone number +39 XXXX/YYYYYYYY");

// Codice fiscale italiano
jQuery.validator.addMethod("cfitaly", function(cf, element) {
	return this.optional(element) || cf.length == 16 &&
		cf.match(/^[a-zA-Z]{6}\d{2}[a-zA-Z]{1}\d{2}[a-zA-Z]{1}\d{3}[a-zA-Z]{1}$/);
}, " ");

// Partita Iva
jQuery.validator.addMethod("piitaly", function(pi, element) {
	return this.optional(element) || pi.length == 11 &&
		pi.match(/^\d{5}\d{6}$/);
}, " ");

// PI O CF
jQuery.validator.addMethod("picfitaly", function(picf, element) {
	return this.optional(element) || 
         picf.length == 16 && picf.match(/^[a-zA-Z]{6}\d{2}[a-zA-Z]{1}\d{2}[a-zA-Z]{1}\d{3}[a-zA-Z]{1}$/) ||
         picf.length == 11 &&	picf.match(/^\d{5}\d{6}$/);
}, " ");

// Data/ora italiana
jQuery.validator.addMethod("datehourITA", function(value, element) {
	var check = false;
	var re = /^\d{1,2}\/\d{1,2}\/\d{4} \d{1,2}:\d{1,2}$/
	if( re.test(value)){
		var adata = value.split(' ');
		var adata1 = adata[0].split('/');
		var adata2 = adata[1].split(':');
		var gg = parseInt(adata1[0],10);
		var mm = parseInt(adata1[1],10);
		var aaaa = parseInt(adata1[2],10);
		var hh = parseInt(adata2[0],10);
		var mn = parseInt(adata2[1],10);
		var xdata = new Date(aaaa,mm-1,gg,hh,mn);
		if ( ( xdata.getFullYear() == aaaa ) && ( xdata.getMonth () == mm - 1 ) && ( xdata.getDate() == gg ) && ( xdata.getHours() == hh ) && ( xdata.getMinutes() == mn ) )
			check = true;
		else
			check = false;
	} else
		check = false;
	return this.optional(element) || check;
}, " ");

// Iban
jQuery.validator.addMethod("iban", function(cf, element) {
	return this.optional(element) || cf.length == 27 &&
		cf.match(/^[a-zA-Z]{2}\d{2}[a-zA-Z]{1}[a-zA-Z0-9]{22}$/);
}, " ");

// Diverso da
jQuery.validator.addMethod("notEqualTo", function(value, element, param) {
	return this.optional(element) || value != $(param).val();
}, " ");
