// Autore: Paolo Molinari
// p.molinari@axnet.it


var date = new Date();
var current_year = date.getFullYear();
var max_year = current_year - 18;
var min_year = current_year - 60;


function _Contains_Only( str, character_list ) {
	for (var t = str.length - 1; t>=0; t-- ) {
		if ( character_list.lastIndexOf(str.charAt(t),9) < 0 ) {
			return 0;
		}
	}
	return 1;
}

function _exit( object, str ) {
    alert( str );
    var delay = function() { setFocus(object); };
    setTimeout(delay, 1);
    return false;
}

function setFocus(object){
    object.focus();
    object.select();
}


function Check_Characters_Range( object, descr, set, min, max, type ) {
	var character_set = "";
	var l = object.value.length;
	var exitstr= "'" + descr + "' non corretto";

	if ( set=='NUMBERS' ) {
		character_set = '0987654321';
	}
	else {
		character_set = set;
	}

	if ( object.value=="" )
		return true;

	if (type !=null && type=='RANGE') {
		if ((object.value<min && min!=null) || (object.value>max && max!=null))
			return _exit(object, exitstr);
	}
	else {
		if ( (l<min && min!=null) || (l>max && max!=null) )
			return _exit(object, exitstr);
	}

	if ( _Contains_Only( object.value, '0987654321' ) == 0 )
		return _exit(object, exitstr);

	return true;
}



function Check_Characters( object, descr, set, length_min, length_max ) {
	var character_set = "";
	var l = object.value.length;
	var exitstr= "'" + descr + "' non corretto";

	if ( set=='NUMBERS' ) {
		character_set = '0987654321';
	}
	else {
		character_set = set;
	}

	if ( object.value=="")
        return true;


	if ( (l<length_min && length_min!=null) ||
		 (l>length_max && length_max!=null)
	   ) {
		return _exit(object, exitstr);
	}

	if ( _Contains_Only( object.value, '0987654321' ) == 0 )
		return _exit(object, exitstr);


	return true;
}

function _Check_Characters( object, set, min, max, type ) {
	var character_set = "";
	var l = object.value.length;

	if ( set=='NUMBERS' ) {
		character_set = '0987654321';
	}
	else {
		character_set = set;
	}

	if ( object.value=="" )
		return true;

	if (type !=null && type=='RANGE') {
		if ((object.value<min && min!=null) || (object.value>max && max!=null))
			return false;
	}
	else {
		if ( (l<min && min!=null) || (l>max && max!=null) )
			return false;
	}

	if ( _Contains_Only( object.value, '0987654321' ) == 0 )
		return false;

	return true;
}

function Check_Anno( obj, descr ) {
	var errorstr= "'" + descr + "' non corretto";
	if (! _Check_Characters(obj, 'NUMBERS', 1900, current_year, 'RANGE')) {
		return _exit(obj, errorstr);
	}

	return true;
}


function Check_Mese( mese ) {
	if ( isNaN(mese) ) {
		return 0;
	}
	if ( mese>12 || mese<1 ) {
		return 0;
	}

	return 1;
}


function Check_Giorno( giorno ) {
	if ( isNaN(giorno) ) {
		return 0;
	}
	if ( giorno>31 || giorno<1 ) {
		return 0;
	}
	return 1;
}

function Abnormal_Day(giorno, mese, anno) {
	if ( isNaN(giorno) || isNaN(mese) || isNaN(anno) ) {
		return -1;
	}
	if (giorno>29 && mese==2) {
		return 1;
	}
	if ( giorno==31 && (mese==11 || mese==4 || mese==6 || mese==9) ) {
		return 1;
	}
}

function Check_Data(obj,msg) {
    var strData = obj.value;
	if ( !IsDate(strData) ) {
		errorstr =  "'" + msg + "' non valida";
        return _exit(obj, errorstr);
	}
	return true;
}

function IsDate(strDate) {

		var strSeparator = "/";
		var strDay="";
		var strMonth="";
		var strYear="";

        if (strDate.length < 10) return false;
		if (strDate.indexOf(strSeparator) != -1) {
		 	strDateArray = strDate.split(strSeparator);
		 	if (strDateArray.length != 3) return false;
		 	else {
		 		strDay = strDateArray[0];
		 		strMonth = strDateArray[1];
		 		strYear = strDateArray[2];
		 	}
		}

		if (strDay.length != 2) return false;
		if (strMonth.length != 2) return false;
		if (strYear.length != 4) return false;

		intday = parseInt(strDay, 10);
		if (isNaN(intday)) return false;
		intMonth = parseInt(strMonth, 10);
		if (isNaN(intMonth)) return false;
		intYear = parseInt(strYear, 10);
		if (isNaN(intYear)) return false;
		if (intMonth>12 || intMonth<1) return false;
		if ((intMonth == 1 || intMonth == 3 || intMonth == 5 || intMonth == 7 || intMonth == 8 || intMonth == 10 || intMonth == 12) && (intday > 31 || intday < 1)) return false;
		if ((intMonth == 4 || intMonth == 6 || intMonth == 9 || intMonth == 11) && (intday > 30 || intday < 1)) return false;
		if (intMonth == 2) {
			if (intday < 1) return false;
			if (LeapYear(intYear) == true) {
				if (intday > 29) return false;
			}
			else {
				if (intday > 28) return false;
			}
		}

		return true;
	}


function LeapYear(intYear) {
		if (intYear % 100 == 0) {
			if (intYear % 400 == 0) return true;
		}
		else {
			if ((intYear % 4) == 0) return true;
		}
		return false;
	}

function Check_Date(obj_giorno, obj_mese, obj_anno) {
	var giorno = parseInt( obj_giorno.value, 10 );
	var mese= parseInt( obj_mese.value, 10 );
	var anno= parseInt( obj_anno.value, 10 );

	var output="";

	if ( isNaN(giorno) && isNaN(mese) && isNaN(anno) )
		return true;

	if ( isNaN(giorno) || isNaN(mese) || isNaN(anno) ) {
		alert("Devi specificare tutti i campi della data");
		return false;
	}

	if ( Abnormal_Day(giorno, mese, anno)==1 ) {
		alert("Hai specificato una data impossibile");
		return false;
	}

	if ( Check_Giorno( giorno )==0 ) {
		alert("Giorno di nascita non corretto");
		return false;
	}

	if ( Check_Mese( mese )==0 ) {
		alert("Mese di nascita non corretto");
		return false;
	}

	return true;
}


// si differenzia dalla Check_Date per il fatto che non considera il giorno.
//
function _Check_Date_1(obj_mese, obj_anno) {
	var mese= parseInt( obj_mese.value, 10 );
	var anno= parseInt( obj_anno.value, 10 );
	var output="";

	if ( isNaN(mese) && isNaN(anno) )
		return true;
	if ( isNaN(mese) || isNaN(anno) ) {
		return false;
	}
	if ( Check_Mese( mese )==0 ) {
		return false;
	}
	return true;
}


function Check_Mail( obj ) {
	var mail = obj.value;
	var errorstr = "'E-mail' non corretta";
	if (mail=="") return true;
	if ((mail.lastIndexOf('@', mail.length)<0) ||
		(mail.lastIndexOf('.', mail.length)<0)) {
		return _exit( obj, errorstr );
	}
	return true;
}

function Check_Votazione(obj, descr) {
	var errormsg = "'" + descr + "' non corretto";
	if ( ! _Check_Characters(obj, 'NUMBERS', 0, 110, 'RANGE' )) {
		return _exit( obj, errormsg );
	}
	return true;
}

function _Check_Precedence(gi, mi, ai, gf, mf, af) {
	if ( af < ai ) return 1;
	if ( af==ai && mf<mi ) return 1;
	if ( af==ai && mf==mi && gf<=gi ) return 1;
	return 0;
}


function Check_Precedence(mi, ai, mf, af, descr) {
	if ( mi.value=="" && ai.value=="" && mf.value=="" && af.value=="" )
		return true;
	if ( mi.value=="" || ai.value=="" || mf.value=="" || af.value=="" ) {
		return false;
	}

	var a = parseInt(mi.value, 10);
	var b = parseInt(ai.value, 10);
	var c = parseInt(mf.value, 10);
	var d = parseInt(af.value, 10);

	if (_Check_Precedence(1, a, b, 1, c, d)==1)
		return false;

	return true;
}


function Check_Lode_Laurea( obj ) {
	if ( obj.checked ) {
		if (document.form1.laureaVotoCentesimi.value=="" ||
			document.form1.laureaVoto.value=="") {
			return false;
		}
		if (document.form1.laureaVotoCentesimi.value=="110" &&
			document.form1.laureaVoto.value!="110") {
			return false;
		}
		if (document.form1.laureaVotoCentesimi.value=="100" &&
			document.form1.laureaVoto.value!="100") {
			return false;
		}
	}
	return true;
}


function Check_Diploma(objvoto, objdiv) {
	if (objdiv.value=="" && objvoto.value=="") {
		return true;
	}
	if (objvoto.value=="" || objdiv.value=="")
		return false;
	if ((objdiv.value=="60" && ! _Check_Characters(objvoto, 'NUMBERS', 0, 60, 'RANGE') ) || (! _Check_Characters(objvoto, 'NUMBERS', 0, 100, 'RANGE' ))) {
		return false;
	}

	return true;
}

function Check_Laurea(objvoto, objdiv, objlode) {
	if (objdiv.value=="" &&
		objvoto.value=="" &&
		! objlode.checked ) {
		return true;
	}
	if (objvoto.value=="" || objdiv.value=="")
		return false;
	if (
		(objdiv.value=="100" &&
		! _Check_Characters(objvoto, 'NUMBERS', 0, 100, 'RANGE') )
		||
		(! _Check_Characters(objvoto, 'NUMBERS', 0, 110, 'RANGE' ))
	) {
		return false;
	}
	if (objdiv.value=="100") {
		if ( objvoto.value!="100"  && objlode.checked )
			return false;
	}
	else {
		if ( objvoto.value!="110"  && objlode.checked )
			return false;
	}

	return true;
}

function Check_Digits (obj){
    if (obj.value=="") return true;
    var i;
    for (i = 0; i < obj.value.length; i++){   
        // Check that current character is number.
        var c = obj.value.charAt(i);
        if (((c < "0") || (c > "9"))) 
		return false;
    }
    // All characters are numbers.
    return true;

}





function _Check_Date_And_Precedence_BIS(obj1i, obj1f, obj2i, obj2f, descr) {
	if (
		obj1i.value=="" && obj1f.value=="" &&
		obj2i.value=="" && obj2f.value=="" ) {
		return true;
	}
	if (!_Check_Date_1(obj1i, obj1f) ) {
		alert("Data inizio <" + descr + "> non corretta");
		return false;
	}
	if (! _Check_Date_1(obj2i, obj2f) ) {
		alert("Data fine <" + descr + "> non corretta");
		return false;
	}
	if (
		(obj1i.value=="" || obj1f.value=="") &&
		(obj2i.value!="" && obj2f.value!="" )
	   ) {

		alert("Se specifichi una data finale per <" + descr + ">, devi specificare anche quella iniziale");
		return false;
	}
	if (
		obj1i.value!="" && obj1f.value!="" &&
		obj2i.value!="" && obj2f.value!="" ) {

		if ( !Check_Precedence(obj1i, obj1f, obj2i, obj2f) ) {
			alert("La data di inizio <" +
					descr +
					"> deve precedere quella della fine!");
			return false;
		}
	}

	return true;
}

function _Check_Date_And_Precedence(obj1i, obj1f, obj2i, obj2f, descr) {
	if (
		obj1i.value=="" && obj1f.value=="" &&
		obj2i.value=="" && obj2f.value=="" ) {
		return true;
	}
	if (!_Check_Date_1(obj1i, obj1f) ) {
		alert("Data inizio <" + descr + "> non corretta");
		return false;
	}
	if (! _Check_Date_1(obj2i, obj2f) ) {
		alert("Data fine <" + descr + "> non corretta");
		return false;
	}
	if (
		obj1i.value=="" || obj1f.value=="" ||
		obj2i.value=="" || obj2f.value=="" ) {

		alert("Entrambe le date di <" + descr + "> devono essere specificate");

		return false;
	}
	if ( !Check_Precedence(obj1i, obj1f, obj2i, obj2f) ) {
		alert("La data di inizio <" +
				descr +
				"> deve precedere quella della fine!");
		return false;
	}

	return true;
}


function Check_Autorizzo() {
	if (! document.form1.autorizzo.checked ) {
		alert("Attenzione: \nnon � stata fornita l'autorizzazione al trattamento dei dati personali, \nsenza la quale � impossibile effettuare la registrazione.");
		return false;
	}
	return true;
}


function MM_openBrWindow(theURL,winName,features) { //v2.0
  window.open(theURL,winName,features);
}


function Show_TipoLaurea (obj){
	if ('nuovo ordinamento' == obj.value){
		document.form1.tipoLaurea.disabled=false;
	} else {
		document.form1.tipoLaurea.selectedIndex = 0;
		document.form1.tipoLaurea.disabled=true;
	}
}

function Check_Fields() {

	if (!jcap()){
		//alert("Devi inserire il codice di sicurezza corretto");
		return false;
	}

	var output="";
/*
	var mandatory_field = new Array(9);

	// Elenco dei campi obbligatori
	mandatory_field[0] = document.form1.nome;
	mandatory_field[1] = document.form1.cognome;
	mandatory_field[2] = document.form1.dataNascita;
    	mandatory_field[3] = document.form1.residenzaIndirizzo;
	mandatory_field[4] = document.form1.residenzaCap;
	mandatory_field[5] = document.form1.residenzaComune;
	mandatory_field[6] = document.form1.provResidenza;
	mandatory_field[7] = document.form1.recapitiPrefTel;
	mandatory_field[8] = document.form1.recapitiTelefono1;
*/
    if (document.form1.nome.value=="") {
		alert("Il campo 'Nome' � obbligatorio.");
        document.form1.nome.focus();
		return false;
	}
    if (document.form1.cognome.value=="") {
		alert("Il campo 'Cognome' � obbligatorio.");
        document.form1.cognome.focus();
		return false;
	}


    if (document.form1.dataNascita.value=="") {
		alert("Il campo 'Data di Nascita' � obbligatorio.");
        document.form1.cognome.focus();
		return false;
    } else if (!Check_Data(document.form1.dataNascita,'data di nascita')){
        return false;
    }


    if (document.form1.codiceFiscale.value=="") {
		alert("Il campo 'Codice Fiscale' � obbligatorio.");
	        document.form1.codiceFiscale.focus();
		return false;
    } else if (document.form1.codiceFiscale.value.length!=16){
		alert("Il campo 'Codice Fiscale' non e' valido.");
        	document.form1.codiceFiscale.focus();
		return false;
	}

    if (document.form1.codicePIN.value=="") {
		alert("Il campo 'Codice PIN' � obbligatorio.");
        document.form1.codicePIN.focus();
		return false;
	}
    if (document.form1.residenzaIndirizzo.value=="") {
		alert("Il campo 'Indirizzo di residenza' � obbligatorio.");
        document.form1.residenzaIndirizzo.focus();
		return false;
	}
    if (document.form1.residenzaCap.value=="") {
		alert("Il campo 'CAP del comune di residenza' � obbligatorio.");
        document.form1.residenzaCap.focus();
		return false;
	}
    if (document.form1.residenzaComune.value=="") {
		alert("Il campo 'Comune di residenza' � obbligatorio.");
        document.form1.residenzaComune.focus();
		return false;
	}
    if (document.form1.provResidenza.value=="") {
		alert("Il campo 'Provincia di residenza' � obbligatorio.");
        document.form1.provResidenza.focus();
		return false;
	}
    if (document.form1.domicilioIndirizzo.value=="") {
		alert("Il campo 'Indirizzo di domicilio' � obbligatorio.");
        document.form1.domicilioIndirizzo.focus();
		return false;
	}
    if (document.form1.domicilioCap.value=="") {
		alert("Il campo 'CAP del comune di domicilio' � obbligatorio.");
        document.form1.domicilioCap.focus();
		return false;
	}
    if (document.form1.domicilioComune.value=="") {
		alert("Il campo 'Comune di domicilio' � obbligatorio.");
        document.form1.domicilioComune.focus();
		return false;
	}
    if (document.form1.provDomicilio.value=="") {
		alert("Il campo 'Provincia di domicilio' � obbligatorio.");
        document.form1.provDomicilio.focus();
		return false;
	}
    if (document.form1.recapitiPrefTel.value=="") {
		alert("Il campo 'Prefisso telefonico' � obbligatorio.");
        document.form1.recapitiPrefTel.focus();
		return false;
	}
    if (document.form1.recapitiTelefono1.value=="") {
		alert("Il campo 'Telefono' � obbligatorio.");
        document.form1.recapitiTelefono1.focus();
		return false;
	}
    if (document.form1.recapitiMail.value=="") {
		alert("Il campo 'E-Mail' � obbligatorio.");
        document.form1.recapitiMail.focus();
		return false;
	}
    if (document.form1.recapitiMail2.value=="") {
		alert("Il campo 'E-Mail Conferma' � obbligatorio.");
        document.form1.recapitiMail2.focus();
		return false;
	}
    if (document.form1.tipoContratto.value=="") {
		alert("Il campo 'Tipologia Contratto' � obbligatorio.");
        document.form1.tipoContratto.focus();
		return false;
	}

    //email e email conferma devono coincidere
    if (document.form1.recapitiMail.value!=document.form1.recapitiMail2.value) {
		alert("'E-Mail' ed 'E-Mail Conferma' devono coincidere.");
        document.form1.recapitiMail.focus();
		return false;
	}

    var mim= document.form1.masterInizioMese.options[document.form1.masterInizioMese.selectedIndex];
	var mfm= document.form1.masterFineMese.options[document.form1.masterFineMese.selectedIndex];
	var mia= document.form1.masterInizioAnno;
	var mfa= document.form1.masterFineAnno;

    if (!_Check_Date_1(mim,mia) ) {
		alert("'Data inizio master' non corretta");
		return false;
	}
	if (!_Check_Date_1(mfm, mfa) ) {
		alert("'Data fine master' non corretta");
		return false;
	}
	if ( !Check_Precedence(mim, mia, mfm, mfa) ) {
		alert("La data di inizio master deve precedere quella della fine\ne devono essere specificate entrambe");
		return false;
	}
	if ( ! Check_Laurea(document.form1.laureaVoto,
						document.form1.laureaVotoCentesimi.options[document.form1.laureaVotoCentesimi.selectedIndex],
						document.form1.laureaLode) ) {
		alert("Votazione di laurea non corretta");
		return false;
	}
	if ( ! Check_Diploma(document.form1.diplomaVoto,
						document.form1.diplomaVotoCentesimi.options[document.form1.diplomaVotoCentesimi.selectedIndex]) ) {
		alert("Votazione di diploma non corretta");
		return false;
	}


    var eami= document.form1.esperienzaAttualeProfDataInizio.options[document.form1.esperienzaAttualeProfDataInizio.selectedIndex];
	var eaai= document.form1.esperienzaAttualeProfAnnoInizio;
	var eamf= document.form1.esperienzaAttualeProfDataFine.options[document.form1.esperienzaAttualeProfDataFine.selectedIndex];
	var eaaf= document.form1.esperienzaAttualeProfAnnoFine;

	var mim= document.form1.masterInizioMese2.options[document.form1.masterInizioMese2.selectedIndex];
	var mia= document.form1.masterInizioAnno2;
	var mfm= document.form1.masterFineMese2.options[document.form1.masterFineMese2.selectedIndex];
	var mfa= document.form1.masterFineAnno2;

	var epmi= document.form1.esperienzaProfPrecedenteDataInizio.options[document.form1.esperienzaProfPrecedenteDataInizio.selectedIndex];
	var epai= document.form1.esperienzaProfPrecedenteAnnoInizio;
	var epmf= document.form1.esperienzaProfPrecedenteDataFine.options[document.form1.esperienzaProfPrecedenteDataFine.selectedIndex];
	var epaf= document.form1.esperienzaProfPrecedenteAnnoFine;

    if ( ! _Check_Date_And_Precedence_BIS(eami, eaai, eamf, eaaf, 'attuale o ultima esperienza professionale') )
		return false;

	if ( ! _Check_Date_And_Precedence(epmi, epai, epmf, epaf, 'precedente esperienza professionale') )
		return false;

	if ( ! _Check_Date_And_Precedence_BIS(mim, mia, mfm, mfa, 'stage') )
		return false;


    if ( ! Check_Autorizzo() )
		return false;

    //controllo numeri
    if (!Check_Digits(document.form1.residenzaCap)){
	alert("Il campo 'CAP del comune di residenza' non ha un formato corretto.");
        document.form1.residenzaCap.focus();
	return false;
    }	
    if (!Check_Digits(document.form1.domicilioCap)){
	alert("Il campo 'CAP del comune di domicilio' non ha un formato corretto.");
        document.form1.domicilioCap.focus();
	return false;
    }	
    if (!Check_Digits(document.form1.recapitiPrefTel)){
	alert("Il campo 'Numero di telefono' non ha un formato corretto.");
        document.form1.recapitiPrefTel.focus();
	return false;
    }	
    if (!Check_Digits(document.form1.recapitiTelefono1)){
	alert("Il campo 'Numero di telefono' non ha un formato corretto.");
        document.form1.recapitiTelefono1.focus();
	return false;
    }	
    if (!Check_Digits(document.form1.recapitiPrefCellulare)){
	alert("Il campo 'Numero di cellulare' non ha un formato corretto.");
        document.form1.recapitiPrefCellulare.focus();
	return false;
    }	
    if (!Check_Digits(document.form1.recapitiCellulare)){
	alert("Il campo 'Numero di cellulare' non ha un formato corretto.");
        document.form1.recapitiCellulare.focus();
	return false;
    }	
    if (!Check_Digits(document.form1.diplomaVoto)){
	alert("Il campo 'Voto diploma' non ha un formato corretto.");
        document.form1.diplomaVoto.focus();
	return false;
    }	
    if (!Check_Digits(document.form1.laureaVoto)){
	alert("Il campo 'Voto laurea' non ha un formato corretto.");
        document.form1.laureaVoto.focus();
	return false;
    }	

    //controllo anni
    if (!Check_Anno( document.form1.diplomaAnno, 'Anno Diploma')){
        document.form1.diplomaAnno.focus();
	return false;
    }	
    if (!Check_Anno( document.form1.laureaAnno, 'Anno Laurea' )){
        document.form1.laureaAnno.focus();
	return false;
    }	
    if (!Check_Anno( document.form1.masterInizioAnno, 'Anno inizio master' )){
        document.form1.masterInizioAnno.focus();
	return false;
    }	
    if (!Check_Anno( document.form1.masterFineAnno, 'Anno fine master' )){
        document.form1.masterFineAnno.focus();
	return false;
    }	
    if (!Check_Anno( document.form1.esperienzaAttualeProfAnnoInizio, 'Anno inizio esperienza professione attuale' )){
        document.form1.esperienzaAttualeProfAnnoInizio.focus();
	return false;
    }	
    if (!Check_Anno( document.form1.esperienzaAttualeProfAnnoFine, 'Anno fine esperienza professione attuale' )){
        document.form1.esperienzaAttualeProfAnnoFine.focus();
	return false;
    }	
    if (!Check_Anno( document.form1.esperienzaProfPrecedenteAnnoInizio, 'Anno inizio esperienza professione precedente' )){
        document.form1.esperienzaProfPrecedenteAnnoInizio.focus();
	return false;
    }	
    if (!Check_Anno( document.form1.esperienzaProfPrecedenteAnnoFine, 'Anno fine esperienza professione precedente' )){
        document.form1.esperienzaProfPrecedenteAnnoFine.focus();
	return false;
    }	
    if (!Check_Anno( document.form1.masterInizioAnno2, 'Anno inizio stage aziendale' )){
        document.form1.masterInizioAnno2.focus();
	return false;
    }	
    if (!Check_Anno( document.form1.masterFineAnno2, 'Anno fine stage aziendale' )){
        document.form1.masterFineAnno2.focus();
	return false;
    }	
    if (!Check_Anno( masterInizioAnno, 'Anno inizio master' )){
        document.form1.masterInizioAnno.focus();
	return false;
    }	
    if (!Check_Anno( masterFineAnno, 'Anno fine master' )){
        document.form1.masterFineAnno.focus();
	return false;
    }	

    //controllo mail
    if (!Check_Mail(document.form1.recapitiMail)){
	alert("Il campo 'E-Mail' non ha un formato corretto.");
        document.form1.recapitiMail.focus();
	return false;
    }	



	return true;
}
