/**
 * @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;
}, "Numero non valido, inserire solo numeri.");
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 inserito 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("^[a-zA-Z0-9]{11}$");
return i.test(value);
}, "La partita IVA inserita 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 isMaggiorenne2(value, data_partenza){
	var data_nascita = value.split("/");
	var data_nascita_obj = new Date(data_nascita[2],data_nascita[1]-1,data_nascita[0]);		// oggetto della data di nascita inserita
	
	var dp = data_partenza.split("/");
	var data_partenza_obj = new Date(dp[2], dp[1] - 1, dp[0]);		// oggetto della data di partenza
	
	// 568036800000: 18 anni in millisecondi
	// 473364000000: 15 anni
	if((data_partenza_obj.getTime()-data_nascita_obj.getTime()) < 473364000000) return false;
	
	numero_quindicenni++;
	return true;
}


function valida_campo(campo){
//	alert(i);
	var value = $("[name="+campo+"]").val();
	var data_partenza = $("[name="+campo+"]").attr('rel');
	
	// tipo: 0 = data, 1 = nome, 2 = cognome
	if(campo.match("data")) tipo = 0;
	if(campo.match("nome")) tipo = 1;
	if(campo.match("cognome")) tipo = 2;
		
	if (value == "") {
		errori.push({
			'nome': campo,
			'msg': 'Questo 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': 'Nome inserito non valido'
		});
		return false;
	}
	if(tipo == 2 && !isSurname2(value)){
		errori.push({
			'nome': campo,
			'msg': 'Cognome inserito non valido'
		});
		return false;
	}
	if(tipo == 0){
		if(!isData2(value)){
			errori.push({
				'nome': campo,
				'msg': 'La data inserita non è corretta.'
			});
			return false;
		}
		if(!isMaggiorenne2(value, data_partenza)){
			errori.push({
				'nome': campo,
				'msg': 'Viaggiatore con meno di 15 anni',
				'tipo': 1
			});
			return false;
		}
	}
	return true;
}

$(document).ready(function(){
	numero_quindicenni = 0;
	
	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)) 
				if(errori[0].tipo != 1) $(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 = $('#contratto:checked').length;
		var contratto2 = $('#contratto2:checked').length;

		if(numero_quindicenni == 0) alert('Almeno un viaggiatore deve avere più di 15 anni.');
		
		if(errori.length != 0 || contratto == 0 || contratto2 == 0){
			for(x = 0; x < errori.length; x++){
				if (numero_quindicenni != 0 && errori[x].tipo == 1) continue;
				$('[name='+errori[x].nome+']').parent().append('<span class="err_msg">'+errori[x].msg+'</span>');
			}
			if (contratto == 0) {
				$('#contratto').parent().append('<span class="err_msg" style="color:red">Questo campo è obbligatorio<br><br></span>');
			}
			if(contratto2 == 0) {
				$('#contratto2').parent().append('<span class="err_msg" style="color:red">Questo campo è obbligatorio<br><br></span>');
			}
			
			if(!numero_quindicenni || !contratto || !contratto2) {
				numero_quindicenni = 0;
				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) {
//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"));
//				error.appendTo(element.parent("td").parent("tr").next("tr").find("td.err1"));
				error.appendTo( element.parent() );
			}
		});
		
		
		$("#login").validate({
			rules: {
				mail: {
					required: true,
					email: true
				},
				pass: {
					required: true
				}
			},
			errorPlacement: function(error, element) {
				error.appendTo( element.parent() );
			}
		});
		
		
		$("#recupera_pass").validate({
			rules: {
				mail_pass: {
					required: true,
					email: true
				}
			},
			errorPlacement: function(error, element) {
				error.appendTo( element.parent() );
			}
		});
});
