var regexpAlfa = /^([\W\' _\w\\\/]+)$/;
var regexpNum = /^-?\d+(\.\d+)?$/;
//var regexpNumFisso = /^([\+]{1}[\d]{2,4}[\s]*)*[\d]{2,4}([\s]*[\-\.\\\/]{0,1}[\s]*[1-9]{1}[0-9]+)+$/;
//var regexpNumCell = /^([\+]{1}[\d]{2,4}[\s]*)*[\d]{2,4}([\s]*[\-\.\\\/]{0,1}[\s]*[1-9]{1}[0-9]+)+$/;
var regexpNumFisso = /^[\W\'\w\d\\\/\(\)\., _\-\+]+$/;
var regexpNumCell = /^[\W\'\w\d\\\/\(\)\., _\-\+]+$/;
var regexpAlfaNum = /^[\W\'\w\d\\\/\(\)\., _\-\+]+$/;
var regexpPwd = /^([a-zA-Z0-9])+$/;
var regexpCAP = /^\d{5}$/;
var regexpEmail = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
var regexpCF = /^[a-zA-Z]{6}[\d]{2}[a-zA-Z][\d]{2}[a-zA-Z][\d]{3}[a-zA-Z]$/;
var regexpPiva = /^\d{5}\d{6}$/;

//
// -----------------------------------------------------------------------------
//

/*
 *
 */
function ImpostaImmagineValidazione(_idCampo, _valido)
{
	var nodoImmagine = document.getElementById(_idCampo + '_img');
	if (!_valido)
	{
	  nodoImmagine.src = 'immagini/false.png';
	  nodoImmagine.alt = 'Campo non valido';
	}
	else
	{
	  nodoImmagine.src = 'immagini/true.png';
	  nodoImmagine.alt = '';
	}
	
	return;
}

/*
 *
 */
function CreaStringaData(_id)
{
	var campoGiorno = document.getElementById(_id + '_giorno');
	var campoMese = document.getElementById(_id + '_mese');
	var campoAnno = document.getElementById(_id + '_anno');

	var strGiorno = (campoGiorno != null ? campoGiorno.value : '01');
	if (strGiorno.length == 1)
	{
		strGiorno = '0' + strGiorno;
	}
	var strMese = (campoMese.value < 10 ? '0' + campoMese.value : campoMese.value);

	return campoAnno.value + '' + strMese + '' + strGiorno;
}

/*
 *
 */
function CreaStringaDataCorrente()
{
	var dataCorrente = new Date();

	var giorno = dataCorrente.getDate();
	var mese = dataCorrente.getMonth() + 1;
	var anno = dataCorrente.getFullYear();

	var strGiorno = (giorno < 10 ? '0' + giorno : giorno);
	var strMese = (mese < 10 ? '0' + mese : mese);

	return anno + '' + strMese + '' + strGiorno;
}

/*
 *
 */
function EstraiAnnoCorrente()
{
	var dataCorrente = new Date();
	var anno = dataCorrente.getFullYear();

	return anno;
}

/*
 *
 */
function ValidaCampo(_id, _tipo, _obbligatorio)
{
	var campoCorrente = document.getElementById(_id);
	if (campoCorrente == null)
	{
		return true;
	}
	if (!_obbligatorio && campoCorrente.value == '')
	{
	  return true;
	}
	
	if (campoCorrente == null)
	{
	  return true;
	}
	
	var isValido = false;
	
	if (campoCorrente.tagName == 'INPUT')
	{
		switch (_tipo)
		{
			case 'alfa': isValido = regexpAlfa.test(campoCorrente.value); break;
			case 'alfanum': isValido = regexpAlfaNum.test(campoCorrente.value); break;
			case 'num': isValido = regexpNum.test(campoCorrente.value); break;
			case 'numfisso': isValido = regexpNumFisso.test(campoCorrente.value); break;
			case 'numcell': isValido = regexpNumCell.test(campoCorrente.value); break;
			case 'pwd': isValido = regexpPwd.test(campoCorrente.value); break;
			case 'email': isValido = regexpEmail.test(campoCorrente.value); break;
			case 'cap': isValido = regexpCAP.test(campoCorrente.value); break;
			case 'cf': isValido = regexpCF.test(campoCorrente.value); break;
			case 'piva': isValido = regexpPiva.test(campoCorrente.value); break;
			case 'check': isValido = campoCorrente.checked; break;
		  default: return true; break;
		}

		ImpostaImmagineValidazione(_id, isValido);
	}
	else if (campoCorrente.tagName == 'SELECT')
	{
		isValido = (campoCorrente.value != 0);
		
		if (_tipo != 'data')
		{
		  ImpostaImmagineValidazione(_id, isValido);
		}
	}
	else if (campoCorrente.tagName == 'TEXTAREA')
	{
		var lunghezzaMin = parseInt(_tipo);
		if (isNaN(lunghezzaMin))
		{
			lunghezzaMin = 0;
		}

		if (_obbligatorio)
		{
			isValido = (campoCorrente.value.length > lunghezzaMin);
		}
		else
		{
			isValido = (campoCorrente.value.length > 0);
		}
		ImpostaImmagineValidazione(_id, isValido);
	}
	
	return isValido;
}

/*
 *
 */
function ValidaCampoDoppio(_idA, _idB, _tipo, _inModifica)
{
	var campoA = document.getElementById(_idA);
	var campoB = document.getElementById(_idB);

	if (_inModifica)
	{
		var soloPrimo = (campoA.value != '' && campoB.value == '' && _tipo == 'email');
		var nessuno = (campoA.value == '' && campoB.value == '' && _tipo == 'pwd');
		
		if (soloPrimo || nessuno)
		{
			ImpostaImmagineValidazione(_idA, true);
			return true;
		}
	}
	
	var campoAValido = ValidaCampo(_idA, _tipo, true);
	var campoBValido = ValidaCampo(_idB, _tipo, true);
	var campiUguali = (campoA.value == campoB.value);
	
	return (campoAValido && campoBValido && campiUguali);
}

/*
 *
 */
function ValidaCampoData(_id, _minAnni)
{
	_minAnni = _minAnni || 0;

	var campoGiornoValido = ValidaCampo(_id + '_giorno', 'data', true);
	var campoMeseValido = ValidaCampo(_id + '_mese', 'data', true);
	var campoAnnoValido = ValidaCampo(_id + '_anno', 'data', true);
	
	if (!campoGiornoValido || !campoMeseValido || !campoAnnoValido)
	{
		ImpostaImmagineValidazione(_id, false);
		return false;
	}

	var dataStringa = CreaStringaData(_id);
	var dataCorrenteStringa = CreaStringaDataCorrente();
	var dataAntecedente = (dataStringa <= dataCorrenteStringa);

	if (_minAnni != 0)
	{
		var annoCorrente = parseInt(EstraiAnnoCorrente());
		var annoIndicato = parseInt(dataStringa.substring(0, 4));
		
		var intervalloAnni = annoCorrente - annoIndicato;
		var anniValidi = intervalloAnni >= _minAnni;
		dataAntecedente = dataAntecedente && anniValidi;
	}

	ImpostaImmagineValidazione(_id, dataAntecedente);
	return dataAntecedente;
}

/*
 *
 */
function ValidaIntervalloDate(_idInizio, _idFine, _minAnni)
{
	_minAnni = _minAnni || 0;

	var dataValidaInizio = ValidaCampoData(_idInizio);
	var dataValidaFine = ValidaCampoData(_idFine);
	
	ImpostaImmagineValidazione(_idInizio, dataValidaInizio);
	ImpostaImmagineValidazione(_idFine, dataValidaFine);
	
	var nodoAnnoInizio = document.getElementById(_idInizio + '_anno');
	var nodoAnnoFine = document.getElementById(_idFine + '_anno');
	var nodoMeseInizio = document.getElementById(_idInizio + '_mese');
	var nodoMeseFine = document.getElementById(_idFine + '_mese');
	var nodoGiornoInizio = document.getElementById(_idInizio + '_giorno');
	var nodoGiornoFine = document.getElementById(_idFine + '_giorno');
	
	var meseInizio = '01';
	if (nodoMeseInizio != null && nodoMeseInizio.value != 0)
	{
	  if (nodoMeseInizio.value < 10)
	  {
	  	meseInizio = '0' + nodoMeseInizio.value;
		}
		else
		{
		  meseInizio = nodoMeseInizio.value;
		}
	}
	
	var meseFine = '01';
	if (nodoMeseFine != null && nodoMeseFine.value != 0)
	{
	  if (nodoMeseInizio.value < 10)
	  {
	  	meseFine = '0' + nodoMeseFine.value;
		}
		else
		{
		  meseFine = nodoMeseFine.value;
		}
	}

	var stringaDataInizio = '' + nodoAnnoInizio.value + meseInizio + (nodoGiornoInizio != null ? nodoGiornoInizio.value : '01');
	var stringaDataFine = '' + nodoAnnoFine.value + meseFine + (nodoGiornoFine != null ? nodoGiornoFine.value : '01');

	var intervalloValido = (stringaDataFine > stringaDataInizio);
	if (intervalloValido && _minAnni != 0)
	{
	  var numeroAnni = parseInt(nodoAnnoFine.value) - parseInt(nodoAnnoInizio.value);
	  var anniValidi = numeroAnni >= _minAnni;
    intervalloValido = intervalloValido && anniValidi;
	}
	ImpostaImmagineValidazione(_idFine, intervalloValido);
	
	return (dataValidaInizio && dataValidaFine && intervalloValido);
}

/*
 *
 */
function ValidaSelectMultiplo(_id)
{
	var campoCorrente1 = document.getElementById(_id+'_1');
	var campoCorrente2 = document.getElementById(_id+'_2');
	var campoCorrente3 = document.getElementById(_id+'_3');
	if (campoCorrente1 == null || campoCorrente2 == null || campoCorrente3 == null)
	{
		return true;
	}

	var isValido = false;

	var isValido1 = (campoCorrente1.value != 0);
	var isValido2 = (campoCorrente2.value != 0);
	var isValido3 = (campoCorrente3.value != 0);

	var isValido = isValido1 || isValido2 || isValido3;
	ImpostaImmagineValidazione(_id, isValido);

	return isValido;
}

/*
 *
 */
function ValidaAnagrafica(_inModifica)
{
	var formValidato = true;
	var campoValido = false;
	
	campoValido = ValidaCampo('utente_nome', 'alfa', true);
	formValidato = formValidato && campoValido;
	
	campoValido = ValidaCampo('utente_cognome', 'alfa', true);
	formValidato = formValidato && campoValido;
	
	campoValido = ValidaCampoData('utente_data_nascita', 18);
	formValidato = formValidato && campoValido;
	
	campoValido = ValidaCampoDoppio('utente_email', 'utente_email_conf', 'email', _inModifica);
	formValidato = formValidato && campoValido;
	
	campoValido = ValidaCampoDoppio('utente_password', 'utente_password_conf', 'pwd', _inModifica);
	formValidato = formValidato && campoValido;
	
	campoValido = ValidaCampo('utente_tel_fisso', 'numfisso', false);
	formValidato = formValidato && campoValido;

	campoValido = ValidaCampo('utente_tel_cell', 'numcell', false);
	formValidato = formValidato && campoValido;
	
	campoValido = ValidaCampo('utente_residenza_indirizzo', '0', true);
	formValidato = formValidato && campoValido;

	campoValido = ValidaCampo('utente_residenza_citta', 'alfa', true);
	formValidato = formValidato && campoValido;
	
	campoValido = ValidaCampo('utente_residenza_cap', 'cap', false);
	formValidato = formValidato && campoValido;
	
	campoValido = ValidaCampo('utente_residenza_provincia', '', true);
	formValidato = formValidato && campoValido;
	
	campoValido = ValidaCampo('utente_domicilio_indirizzo', '0', true);
	formValidato = formValidato && campoValido;

	campoValido = ValidaCampo('utente_domicilio_citta', 'alfa', true);
	formValidato = formValidato && campoValido;

	campoValido = ValidaCampo('utente_domicilio_cap', 'cap', false);
	formValidato = formValidato && campoValido;

	campoValido = ValidaCampo('utente_domicilio_provincia', '', true);
	formValidato = formValidato && campoValido;
	
	if (!_inModifica)
	{
		campoValido = ValidaCampo('utente_privacy', 'check', true);
		formValidato = formValidato && campoValido;
	}
	
	return formValidato;
}

/*
 *
 */
function ValidaStudio()
{
	var formValidato = true;
	var campoValido = false;

	campoValido = ValidaCampo('studio_livello', '', true);
	formValidato = formValidato && campoValido;
	
	campoValido = ValidaCampo('studio_titolo', 'alfanum', true);
	formValidato = formValidato && campoValido;
	
	campoValido = ValidaIntervalloDate('studio_inizio', 'studio_fine');
	formValidato = formValidato && campoValido;
	
	campoValido = ValidaCampo('studio_votazione', 'alfanum', true);
	formValidato = formValidato && campoValido;

	campoValido = ValidaCampo('studio_luogo', 'alfanum', false);
	formValidato = formValidato && campoValido;

	return formValidato;
}

/*
 *
 */
function ValidaLingua()
{
	var formValidato = true;
	var campoValido = false;
	
	campoValido = ValidaCampo('conoscenza_lingua', '', true);
	formValidato = formValidato && campoValido;
	
	campoValido = ValidaCampo('conoscenza_lingua_livello', '', true);
	formValidato = formValidato && campoValido;
	
	return formValidato;
}

/*
 *
 */
function ValidaInformatica()
{
	var formValidato = true;
	var campoValido = false;

	campoValido = ValidaCampo('conoscenza_settore', '', true);
	formValidato = formValidato && campoValido;

	campoValido = ValidaCampo('conoscenza_infor_livello', '', true);
	formValidato = formValidato && campoValido;

	return formValidato;
}

/*
 *
 */
function ValidaLavoro()
{
	var formValidato = true;
	var campoValido = false;

	campoValido = ValidaCampo('lavoro_societa', 'alfanum', true);
	formValidato = formValidato && campoValido;

	campoValido = ValidaCampo('lavoro_citta', 'alfa', true);
	formValidato = formValidato && campoValido;

	campoValido = ValidaCampo('lavoro_provincia', '', true);
	formValidato = formValidato && campoValido;

	campoValido = ValidaIntervalloDate('lavoro_data_inizio', 'lavoro_data_fine');
	formValidato = formValidato && campoValido;

	campoValido = ValidaCampo('lavoro_area', '', true);
	formValidato = formValidato && campoValido;

	campoValido = ValidaCampo('lavoro_inquadramento', '', true);
	formValidato = formValidato && campoValido;

	campoValido = ValidaCampo('lavoro_ruolo', 'alfanum', true);
	formValidato = formValidato && campoValido;
	
	campoValido = ValidaCampo('lavoro_lordo', 'alfanum', false);
	formValidato = formValidato && campoValido;
	
	campoValido = ValidaCampo('lavoro_benefit', 'alfanum', false);
	formValidato = formValidato && campoValido;
	
	campoValido = ValidaCampo('lavoro_cessazione', 'alfanum', false);
	formValidato = formValidato && campoValido;

	return formValidato;
}

/*
 *
 */
function ValidaAnnuncio()
{
	var campoValido = ValidaCampo('annuncio_titolo', 'alfanum', true);
	var formValidato = campoValido;

	campoValido = ValidaSelectMultiplo('annuncio_occ');
	formValidato = formValidato && campoValido;

	campoValido = ValidaCampo('annuncio_qualifica', '', true);
	formValidato = formValidato && campoValido;

	campoValido = ValidaCampo('annuncio_sede_citta', 'alfanum', true);
	formValidato = formValidato && campoValido;

	campoValido = ValidaCampo('annuncio_sede_cap', 'cap', true);
	formValidato = formValidato && campoValido;

	campoValido = ValidaCampo('annuncio_descrizione', '25', true);
	formValidato = formValidato && campoValido;
	
	campoValido = ValidaCampoData('annuncio_data');
	formValidato = formValidato && campoValido;

	return formValidato;
}

/*
 *
 */
function ValidaAnagraficaPersonale(_inModifica)
{
	var formValidato = true;
	var campoValido = false;
	
	campoValido = ValidaCampo('personale_nome', 'alfa', true);
	formValidato = formValidato && campoValido;

	campoValido = ValidaCampo('personale_cognome', 'alfa', true);
	formValidato = formValidato && campoValido;
	
	campoValido = ValidaCampoDoppio('personale_email', 'personale_email_conf', 'email', _inModifica);
	formValidato = formValidato && campoValido;
	
	campoValido = ValidaCampo('personale_username', 'alfanum', true);
	formValidato = formValidato && campoValido;

	campoValido = ValidaCampoDoppio('personale_password', 'personale_password_conf', 'pwd', _inModifica);
	formValidato = formValidato && campoValido;
	
	return formValidato;
}

/*
 *
 */
function ValidaAnnuncioSegnalazione()
{
	var formValidato = true;
	var campoValido = false;

	campoValido = ValidaCampo('mittente_nome', 'alfa', true);
	formValidato = formValidato && campoValido;
	
	campoValido = ValidaCampo('mittente_email', 'email', true);
	formValidato = formValidato && campoValido;

	campoValido = ValidaCampo('destinatario_email', 'email', true);
	formValidato = formValidato && campoValido;

	return formValidato;
}
