/**
 * @author fabio
 */
jQuery.validator.addMethod("isCAP", function(value, element) { 
var valore = parseInt(value);
var i=new RegExp("^[0-9]{5}$");
if(valore == 0) return false;
return i.test(value);
}, "Il CAP inserito non è valido.");
jQuery.validator.addMethod("isPass", function(value, element) { 
var i=new RegExp("^[a-zA-Z0-9\-_]+$");
return i.test(value);
}, "La password pu&ograve; contenere lettere, numeri, - e _.");
jQuery.validator.addMethod("isName", function(value, element) { 
var i=new RegExp("^[a-zA-Z àèéìòù]+$");
return i.test(value);
}, "Il nome pu&ograve; contenere lettere e spazi.");
jQuery.validator.addMethod("isSurname", function(value, element) { 
var i=new RegExp("^[a-zA-Z 'àèéìòù]+$");
return i.test(value);
}, "Il cognome pu&ograve; contenere lettere, spazi e '.");
jQuery.validator.addMethod("isPhone", function(value, element) { 
if (value != "") {
	var valore = parseInt(value);
	var i = new RegExp("^[0-9]+$");
	if(valore == 0) return false;
	return i.test(value);
}
else return true;
}, "Inserire solo caratteri numerici.");
jQuery.validator.addMethod("isMaggiorenne", function(value, element) {
	var data_nascita = value.split("/");
	var date = new Date();
	var date_now = new Date(date.getFullYear(), date.getMonth()+1, date.getDate()); // timestamp di oggi
	var date2 = new Date(data_nascita[2],data_nascita[1],data_nascita[0]);			// timestamp della data di nascita inserita
	// 568036800000: 18 anni in millisecondi
	if((date_now.getTime()-date2.getTime()) < 568036800000) return false;
	return true;
}, "Il viaggiatore non &egrave; maggiorenne.");
jQuery.validator.addMethod("isMaggiorenneCF", function(value, element) {
	var mesi = new Array();
	mesi['A'] = 1;
	mesi['B'] = 2;
	mesi['C'] = 3;
	mesi['D'] = 4;
	mesi['E'] = 5;
	mesi['H'] = 6;
	mesi['L'] = 7;
	mesi['M'] = 8;
	mesi['P'] = 9;
	mesi['R'] = 10;
	mesi['S'] = 11;
	mesi['T'] = 12;
	var giorno = parseInt(value.substr(9,2),10);
	if(giorno > 31) giorno = giorno - 40;
	var mese = value.substr(8,1);
	mese = mese.toUpperCase();
	meseNum = mesi[mese];
	var anno = parseInt(value.substr(6,2),10);
	if(anno >= 00 && anno <= 20) return false;
	anno = 1900 + anno;

	/* Calcolo della data di oggi */
	var date = new Date();
	var date_now = new Date(date.getFullYear(), date.getMonth()+1, date.getDate()); // timestamp di oggi

	var date2 = new Date(anno,meseNum,giorno);	// timestamp della data di nascita inserita
	// 568036800000: 18 anni in millisecondi
	if((date_now.getTime()-date2.getTime()) < 568036800000) return false;
	return true;
}, "Devi essere maggiorenne per registrarti.");
jQuery.validator.addMethod("isData", function(value, element) { 
var i=new RegExp("[0-9]{1,2}/[0-9]{1,2}/[0-9]{4}");
if(!i.test(value)) return false;
var data = value.split("/");
var today = new Date();
if(data[0] == "00" || data[1] == "00" || data[2] == "0000") return false;
if(data[0] > "31") return false;
if(data[1] > "12") return false;
if(data[2] > today.getFullYear()) return false;
if(data[1] > today.getMonth()+1 && data[2] == today.getFullYear()) return false;
if((data[1] == today.getMonth()+1 && data[2] == today.getFullYear()) && data[0] >= today.getDate()) return false;
return true;
}, "La data inserita non &egrave; corretta.");
jQuery.validator.addMethod("isCF", function(value, element) {
if($("[name=iva]").val() != "") return true;
if(value.length != 16) return false;
var i=new RegExp("^[a-zA-Z0-9]{16}$");
return i.test(value);
}, "Il codice fiscale non &egrave; corretto");
jQuery.validator.addMethod("isIVA", function(value, element) {
if($("[name=cod_fisc]").val() != "") return true;
if(value.length != 11) return false;
var i=new RegExp("^[0-9]{11}$");
return i.test(value);
}, "La partita IVA non &egrave; corretta");







function isName2(value) {
	var i=new RegExp("^[a-zA-Z àèéìòù]+$");
	return i.test(value);
}

function isSurname2(value) {
	var i=new RegExp("^[a-zA-Z 'àèéìòù]+$");
	return i.test(value);
}

function isData2(value){
	var data = value.split("/");
	var i=new RegExp("[0-9]{1,2}/[0-9]{1,2}/[0-9]{4}");
	var giorno = parseInt(data[0],10);
	var mese = parseInt(data[1],10);
	var anno = parseInt(data[2],10);
	
	if(i.test(value) == false) return false;
	if(data.length != 3) return false;
	var today = new Date();
	if(giorno == 0 || mese == 0 || anno == 0) return false;
	if(giorno > 31) return false;
	if(mese > 12) return false;
	if(anno < 1900 || anno > today.getFullYear()) return false;
	if(mese > today.getMonth()+1 && anno == today.getFullYear()) return false;
	if((mese == today.getMonth()+1 && anno == today.getFullYear()) && giorno >= today.getDate()) return false;
	
	return true;
}

function isEtaGiusta(value, eta, data_partenza){
	var data_partenza = parseInt(data_partenza, 10) * 1000;			// timestamp della data di partenza con orario
	var dt = new Date();
	dt.setTime(data_partenza);
	var giorno = dt.getDate();
	var mese = dt.getMonth();
	var anno = dt.getFullYear();
	new_dp = new Date(anno, mese, giorno);							// data di partenza senza orario
	
	var data_nascita = value.split("/");
	var date2 = new Date(data_nascita[2], data_nascita[1] - 1, data_nascita[0]);		// timestamp della data di nascita inserita
	
	if (eta >= 18) {
		// 568036800000: 18 anni in millisecondi
		if (new_dp.getTime() - date2.getTime() < 568036800000) return false;
		return true;
	}
	else {
		if(eta == 1) max_eta = 31535999000;
		else max_eta = 31557600000*eta;

		if (new_dp.getTime() - date2.getTime() > max_eta) return false;
		return true;
	}
}


function valida_campo(campo){
	var value = $("[name="+campo+"]").val();
	
		if(campo.match("data")){
			tipo=0;
			var eta_lista = $("[name="+campo+"]").attr('title').split('_');
			var eta = eta_lista[1];
			var data_partenza = $("[name="+campo+"]").attr('rel');
		}
		if(campo.match("nome")) tipo=1;
		if(campo.match("cognome")) tipo=2;
		
	if (value == "") {
		errori.push({
			'nome': campo,
			'msg': 'Campo obbligatorio'
		});
		return false;
	}
	if (value.length < 2 && tipo != 0) {
		errori.push({
			'nome': campo,
			'msg': 'Inserisci almeno 2 caratteri'
		});
		return false;
	}
	if(tipo == 1 && !isName2(value)){
		errori.push({
			'nome': campo,
			'msg': 'Inserire solo lettere o spazi'
		});
		return false;
	}
	if(tipo == 2 && !isSurname2(value)){
		errori.push({
			'nome': campo,
			'msg': 'Inserire lettere, spazi o \''
		});
		return false;
	}
	if(tipo == 0){
		if(!isData2(value)){
			errori.push({
				'nome': campo,
				'msg': 'La data non è corretta'
			});
			return false;
		}
		if(!isEtaGiusta(value, eta, data_partenza)){
			var messaggio = "";
			if(eta < 18)
			{
				messaggio = "Ha più di "+eta+" ann"+(eta > 1?'i':'o')+".";
				errori.push({
					'nome': campo,
					'msg': messaggio
				});
				return false;
			}
			/*else
			{
				//messaggio = "Viaggiatore non maggiorenne";
				alert("ATTENZIONE!\n\nI viaggiatori minorenni devono essere in possesso di un passaporto valido\naltrimenti non gli verrà consentito di passare la dogana in aeroporto.");
			}*/
		}
	}
	return true;
}

$(document).ready(function(){
	input = new Array();
	
	$('#prenota :text').each(function (i){
		input[i] = $(this).attr('name');
	});

	for(z = 0; z < input.length; z++){
		$('[name='+input[z]+']').change(function(){
			var nome = $(this).attr('name');
			
			errori = new Array();
			
			if(nome.match("data")) $(this).next('img').next('<br>').next('<span>').remove('.err_msg');
			else $(this).next('<br>').next('<span>').remove('.err_msg');
			
			if(!valida_campo(nome)) $(this).parent().append('<span class="err_msg">'+errori[0].msg+'</span>');
		});
	}

	$('#prenota').submit(function(){
		errori = new Array();
		$('.err_msg').remove();
		
		for(i = 0; i < input.length; i++) {
			valida_campo(input[i]);
		}


		var contratto = $('input:checked').length;
		
		if(errori.length != 0 || contratto == 0){
			for(x = 0; x < errori.length; x++){
				$('[name='+errori[x].nome+']').parent().append('<span class="err_msg">'+errori[x].msg+'</span>');
			}
			if (contratto == 0) {
				$('#accetto').append('<span class="err_msg" style="color: red">Questo campo è obbligatorio<br><br></span>');
			}
			alert("Ci sono problemi nella compilazione del form. Correggi gli errori contrassegnati dal messaggio.");
			return false;
		}
		
		
		return true;
	});

	$("#conf_reg").validate({
		rules: {
			dati_pers: {
				required: true
			}
		},
		errorPlacement: function(error, element) {
			error.appendTo( element.parent('td').next('td') ).addClass('err');
		}
		
	});
	
	$("#registra").validate({
			rules: {
				nome: {
					required: true,
					minlength: 2,
					isName: true
				},
				cognome: {
					required: true,
					minlength: 2,
					isSurname: true
				},
				indirizzo: {
					required: true
				},
				cap: {
					required: true,
					minlength: 5,
					isCAP: true
				},
				citta: {
					required: true
				},
				provincia: {
					required: true
				},
				stato: {
					required: true
				},
				tel_1: {
					required: true,
					rangelength: [7,15],
					isPhone: true
				},
				tel_2: {
					required: true,
					rangelength: [7,15],
					isPhone: true
				},
				email: {
					required: true,
					email: true
				},
				pass: {
					required: true,
					rangelength: [6,20],
					isPass: true
				},
				confirm_pass: {
					required: true,
					isPass: true,
					equalTo: '#conf_pass'
				},
				cod_fisc: {
					required: function() {
                        return ($("[name=iva]").val() == "") ? true : false;
						},
						isCF: true,
						isMaggiorenneCF: true
				},
				iva: {
					required: function() {
                        return ($("[name=cod_fisc]").val() == "") ? true : false;
						},
						isIVA: true
				}
			},
			messages: {
				confirm_pass: {
					equalTo: "Le password sono diverse"
				}
			},
			errorPlacement: function(error, element) {
				error.appendTo( element.parent() );
			}
		});
		
		
		$("#login").validate({
			rules: {
				mail: {
					required: true,
					email: true
				},
				pass: {
					required: true
				}
			},
			errorPlacement: function(error, element) {
				error.appendTo( element.parent() );
			}
		});
		
		
		$("#contatti").validate({
			rules: {
				nome: {
					required: true,
					minlength: 2,
					isName: true
				},
				cognome: {
					required: true,
					minlength: 2,
					isSurname: true
				},
				mail: {
					required: true,
					email: true
				},
				tel: {
					required: true,
					rangelength: [7,15],
					isPhone: true
				},
				note: {
					required: true
				}
			},
			errorPlacement: function(error, element) {
				error.appendTo( element.parent() );
			}
		});
		
		
		$("#recupera_pass").validate({
			rules: {
				mail_pass: {
					required: true,
					email: true
				}
			},
			errorPlacement: function(error, element) {
				element.parent("td").parent("tr").after('<tr><td></td><td class="err"></td></tr>');
				error.appendTo(element.parent("td").parent("tr").next("tr").find("td.err"));
			}
		});
});