
String.prototype.trim = function(){
    return this.replace(/^\s*|\s*$/g,"");
}

/* Verifica che la stringa abbia una lunghezza compresa fra n ed m caratteri */
function verifica_stringa(min, max, string){
    var s = min == max ? "^.{" + min + "}$" : "^.{" + min + ", " + max +"}$";
    var regExp = new RegExp(s);
    //var regExp = new RegExp(/^.{2}$/);
    if (!regExp.test(string)){
        return false
    }
    return true;
}

function verifica_numero(min, max, num){
    var s = min == max ? "^[0-9]{" + min + "}$" : "^[0-9]{" + min + ", " + max +"}$";
    var regExp = new RegExp(s);
    if (!regExp.test(num)) {
        return false;
    }
    return true;
}

function verifica_alfanum(min, max, string){
    var s = min == max ? '^[0-9a-zA-Z]{' + min + '}$' : '^[0-9a-zA-Z]{' + min + ', ' + max +'}$';
    var regExp = new RegExp(s);
    if (!regExp.test(string)) {
        return false;
    }
    return true;
}

function verifica_domain_string(string){
    /*
function verifica_domain_string(min, max, string){
    var s = min == max ? '^[0-9a-zA-Z\-\_]{' + min + '}$' : '^[0-9a-zA-Z]{' + min + ', ' + max +'}$';
    var regExp = new RegExp(s);
    */
    var regExp = new RegExp(/^[0-9a-zA-Z\-\_\.]{2,50}$/);
    if (!regExp.test(string)) {
        return false;
    }
    return true;
}

function verifica_mail(email){
    var regExpEmail = new RegExp(/^[a-zA-Z0-9\_\-\.]+@[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,}$/);
    if (!regExpEmail.test(email)) {
        return false;
    }
    return true;
}

function verifica_pec_mail(email){
    var regExpEmail = new RegExp(/^[a-zA-Z0-9\-\.]+@[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,}$/);
    if (!regExpEmail.test(email)) {
        return false;
    }
    return true;
}

function verifica_num_tel(numero){
    //+39.123456789
    var regExpTel = new RegExp(/^[\+]{1}[0-9]{2}[\.]{1}[0-9]{3,}$/);

    if (!regExpTel.test(numero)) {
        return false;
    }
    return true;
}

function verifica_data(data){
    //gg/mm/aaaa
    var regExpTel = new RegExp(/^[0-9]{2}\/[0-9]{2}\/[0-9]{4}$/);

    if (!regExpTel.test(data)) {
        return false;
    }
    return true;
}

function verifica_modulo(){
    var mode = 0;
    var return_value = true;
    var error_message = '';

    try{
        mode = document.getElementById('mode').value.trim();
    } catch(e){
        alert('mode unknow');
        return false;
    }

    try{
        if(!verifica_nome()){
            error_message += 'Specificare il Nome\n';
            return_value = false;
        }
        if(!verifica_cognome()){
            error_message += 'Specificare il Cognome\n';
            return_value = false;
        }

        if(!verifica_luogo_nascita()){
            error_message += 'Specificare il Luogo di Nascita\n';
            return_value = false;
        }

        if(!verifica_provincia('provincia_nascita')){
            error_message += 'Specificare la Provincia di Nascita\n';
            return_value = false;
        }

        if(!verifica_data_nascita()){
            error_message += 'Specificare la Data di nascita\n';
            return_value = false;
        }

        if(!verifica_codice_fiscale()){
            error_message += 'Il campo Codice Fiscale e\' vuoto o in formato non corretto\n';
            return_value = false;
        }

        if(!verifica_luogo_residenza()){
            error_message += 'Specificare il Luogo di Residenza\n';
            return_value = false;
        }

        if(!verifica_provincia('provincia_residenza')){
            error_message += 'Specificare la Provincia di Residenza\n';
            return_value = false;
        }

        if(!verifica_indirizzo('indirizzo')){
            error_message += 'Specificare l\'Indirizzo\n';
            return_value = false;
        }

        if(!verifica_cap('cap_residenza')){
            error_message += 'Il CAP di Residenza è vuoto o in formato non corretto\n';
            return_value = false;
        }

        if(!verifica_nazionalita()){
            error_message += 'Specificare la Nazionalità\n';
            return_value = false;
        }

        if( mode == 0){ // privati
            if(!verifica_email('email')){
                error_message += 'Il campo Email è vuoto o in formato non corretto (es mario.rossi@dominio.it) \n';
                return_value = false;
            }

            if(!verifica_telefono()){
                error_message += 'Il campo Telefono e\' vuoto o in formato non corretto (es. +39.06123456)\n';
                return_value = false;
            }

            if(!verifica_fax()){
                error_message += 'Il campo Fax e\' in formato non corretto (es. +39.06123456)\n';
                return_value = false;
            }
        }

        if(!verifica_documento_identita()){
            error_message += '\n';
            return_value = false;
        }

        if(!verifica_numero_documento()){
            error_message += 'Specificare il Numero del Documento\n';
            return_value = false;
        }

        if(!verifica_rilasciato_da()){
            error_message += 'Specificare chi ha rilasciato il Documento\n';
            return_value = false;
        }

        if(!verifica_data_rilascio_documento()){
            error_message += 'Specificare la Data di rilascio del Documento\n';
            return_value = false;
        }

        if( mode == 1){ // aziende
            //if(!verifica_nome_legale_rappresentante()) return false;
            //if(!verifica_cognome_legale_rappresentante()) return false;
            if(!verifica_ragione_sociale('ragione_sociale')){
                error_message += 'Specificare la Ragione Sociale dell\'Azienda\n';
                return_value = false;
            }

            if(!verifica_partita_iva('partita_iva')){
                error_message += 'Il campo Partita IVA dell\'Azienda e\' vuoto o in formato non corretto\n';
                return_value = false;
            }

            if(!verifica_indirizzo('indirizzo_azienda')){
                error_message += 'Specificare l\'indirizzo dell\'Azienda\n';
                return_value = false;
            }

            if(!verifica_comune('comune_azienda')){
                error_message += 'Specificare il Comune dell\'Azienda\n';
                return_value = false;
            }

            if(!verifica_provincia('provincia_azienda')){
                error_message += 'Specificare la Provincia dell\'Azienda\n';
                return_value = false;
            }

            if(!verifica_cap('cap_azienda')){
                error_message += 'Il CAP dell\'Azienda è vuoto o in formato non corretto\n';
                return_value = false;
            }

            if(!verifica_email('email_rappresentante')){
                error_message += 'Il campo Email del Rappresentante Legale e\' vuoto o in formato non corretto (es mario.rossi@dominio.it) \n';
                return_value = false;
            }

            if(!verifica_telefono_rappresentante()){
                error_message += 'Il campo Telefono del Rappresentante Legale e\' vuoto o in formato non corretto (es. +39.06123456)\n';
                return_value = false;
            }

            if(!verifica_fax_rappresentante()){
                error_message += 'Il campo Fax del Rappresentante Legale e\' in formato non corretto (es. +39.06123456)\n';
                return_value = false;
            }

            /* Dati di Fatturazione */
            if(    document.getElementById('ragione_sociale_fatturazione').value.trim().length > 2
                || document.getElementById('partita_iva_fatturazione').value.trim().length == 11
                || document.getElementById('indirizzo_azienda_fatturazione').value.trim().length > 2
                || document.getElementById('comune_azienda_fatturazione').value.trim().length > 2
                || document.getElementById('email_fatturazione').value.trim().length > 5
                ){
                if(!verifica_ragione_sociale('ragione_sociale_fatturazione')){
                    error_message += 'Specificare la Ragione Sociale nei dati di fatturazione\n';
                    return_value = false;
                }

                if(!verifica_partita_iva('partita_iva_fatturazione')){
                    error_message += 'Il campo Partita IVA dell\'indirizzo di fatturazione e\' vuoto o in formato non corretto\n';
                    return_value = false;
                }

                if(!verifica_indirizzo('indirizzo_azienda_fatturazione')){
                    error_message += 'Specificare l\'indirizzo di fatturazione dell\'Azienda\n';
                    return_value = false;
                }
                
                if(!verifica_comune('comune_azienda_fatturazione')){
                    error_message += 'Specificare il Comune nei dati di fatturazione dell\'Azienda\n';
                    return_value = false;
                }

                if(!verifica_provincia('provincia_azienda_fatturazione')){
                    error_message += 'Specificare la Provincia nei dati di fatturazione dell\'Azienda\n';
                    return_value = false;
                }
                
                if(!verifica_cap('cap_azienda_fatturazione')){
                    error_message += 'Il CAP dell\'Azienda nei dati di fatturazione è vuoto o in formato non corretto\n';
                    return_value = false;
                }

                if(!verifica_email('email_fatturazione')){
                    error_message += 'Il campo Email dei dati di fatturazione e\' vuoto o in formato non corretto (es mario.rossi@dominio.it) \n';
                    return_value = false;
                }

            }

        }

        if(document.getElementById('2_level_domain')){
            if( !verifica_dominio_da_certificare() ){
                error_message += 'Il dominio inserito ha caratteri non validi o campi vuoti\n';
                return_value = false;
            }
        }

        // campo opzionale
        if( document.getElementById('email_copia_moduli').value.trim() != ''
            && !verifica_email('email_copia_moduli')){
            error_message += 'Il campo Email Copia Moduli e\' in formato non corretto (es mario.rossi@dominio.it) \n';
            return_value = false;
        }

        var imploded = '';

        if(caselle_pec.length == 0){
            error_message += 'Attenzione: specificare almeno una casella PEC\n';
            return_value = false;
            //**/alert('Attenzione: specificare almeno una casella PEC');
        }

        try{
            for(i = 0; i < caselle_pec.length; i++){
                var addr_tmp = caselle_pec[i][0] + '@' + caselle_pec[i][1];

                if(!verifica_pec_mail( addr_tmp )){
                    error_message += 'La casella '+addr_tmp+' ha un formato non corretto\n';
                    return_value = false;
                    //**/alert('La casella '+addr_tmp+' ha un formato non corretto');
                }

                imploded += addr_tmp + ','+ caselle_pec[i][2] + '|';
            }
        } catch (e1){
            alert(e1);
        }

        document.getElementById('casellePEC').value = imploded.substr(0, imploded.length -1);
        //return_value = true
        //return true;
    } catch(e) {
        alert(e);
        return false;
    }
    
    if( !return_value ){
        alert(' *** Attenzione: per poter procedere con la registrazione è necessario correggere i seguenti errori ***\n\n'
                +error_message);
    }
    
    return return_value;
}

function setCampoErrato(campo){
    campo.className = 'error';
    campo.focus();
}

function setCampoOK(campo){
    campo.className = '';
}

/******************************************************************************/
/* VERIFICA DEI SINGOLI CAMPI                                                 */
/******************************************************************************/
function verifica_nome (){
    if( document.getElementById('nome').value.trim().length < 2 ){
        setCampoErrato(document.getElementById('nome'));
        return false;
    }
    setCampoOK(document.getElementById('nome'));
    return true;
}

function verifica_cognome (){
    if( document.getElementById('cognome').value.trim().length < 2 ){
        setCampoErrato(document.getElementById('cognome'));
        return false;
    }
    setCampoOK(document.getElementById('cognome'));
    return true;
}

function verifica_luogo_nascita (){
    if( document.getElementById('luogo_nascita').value.trim().length < 2 ){
        setCampoErrato(document.getElementById('luogo_nascita'));
        return false;
    }
    setCampoOK(document.getElementById('luogo_nascita'));
    return true;
}

/*
function verifica_provincia_nascita (){
    if( document.getElementById('provincia_nascita').options[document.getElementById('provincia_nascita').selectedIndex].value == 0
            //!verifica_stringa(2, 2, document.getElementById('provincia_nascita').value.trim())
    ){
        setCampoErrato(document.getElementById('provincia_nascita'));
        return false;
    }
    setCampoOK(document.getElementById('provincia_nascita'));
    return true;
}
*/

function verifica_provincia (provincia){
    if( document.getElementById(provincia).options[document.getElementById(provincia).selectedIndex].value == 0 ){
        setCampoErrato(document.getElementById(provincia));
        return false;
    }
    setCampoOK(document.getElementById(provincia));
    return true;
}

function verifica_data_nascita (){
    if( !verifica_data( document.getElementById('data_nascita').value.trim() ) ){
        setCampoErrato(document.getElementById('data_nascita'));
        return false;
    }
    setCampoOK(document.getElementById('data_nascita'));
    return true;
}

function verifica_codice_fiscale (){
    /*
    if( !verifica_alfanum(16, 16, document.getElementById('codice_fiscale').value.trim())){
        alert('Il campo Codice Fiscale e\' vuoto o in formato non corretto');
        setCampoErrato(document.getElementById('codice_fiscale'));
        return false;
    }
    */
    if( !verificaCodiceFiscale( document.getElementById('codice_fiscale').value.trim() ) ) {
        setCampoErrato(document.getElementById('codice_fiscale'));
        return false;
    }
    setCampoOK(document.getElementById('codice_fiscale'));
    return true;
}

function verifica_luogo_residenza (){
    if( document.getElementById('luogo_residenza').value.trim().length < 2 ){
        setCampoErrato(document.getElementById('luogo_residenza'));
        return false;
    }
    setCampoOK(document.getElementById('luogo_residenza'));
    return true;
}
/*
function verifica_provincia_residenza (){
    if( document.getElementById('provincia_residenza').options[document.getElementById('provincia_residenza').selectedIndex].value == 0 ){
        setCampoErrato(document.getElementById('provincia_residenza'));
        return false;
    }
    setCampoOK(document.getElementById('provincia_residenza'));
    return true;
}
*/
/*
function verifica_indirizzo (){
    if( document.getElementById('indirizzo').value.trim().length < 2 ){
        setCampoErrato(document.getElementById('indirizzo'));
        return false;
    }
    setCampoOK(document.getElementById('indirizzo'));
    return true;
}
 */
function verifica_indirizzo (indirizzo){
    if( document.getElementById(indirizzo).value.trim().length < 2 ){
        setCampoErrato(document.getElementById(indirizzo));
        return false;
    }
    setCampoOK(document.getElementById(indirizzo));
    return true;
}
/*
function verifica_cap_residenza (){
    if( !verifica_numero(5, 5, document.getElementById('cap_residenza').value.trim()) ){
        setCampoErrato(document.getElementById('cap_residenza'));
        return false;
    }
    setCampoOK(document.getElementById('cap_residenza'));
    return true;
}
*/

function verifica_cap (cap){
    if( !verifica_numero(5, 5, document.getElementById(cap).value.trim()) ){
        setCampoErrato(document.getElementById(cap));
        return false;
    }
    setCampoOK(document.getElementById(cap));
    return true;
}

function verifica_nazionalita (){
    if(document.getElementById('nazionalita').selectedIndex == 0
        //if( document.getElementById('nazionalita').options[document.getElementById('nazionalita').selectedIndex].value == 0
    ){
        setCampoErrato(document.getElementById('nazionalita'));
        return false;
    }
    setCampoOK(document.getElementById('nazionalita'));
    return true;
}
/*
function verifica_email (){
    if( !verifica_mail(document.getElementById('email').value.trim()) ){
        setCampoErrato(document.getElementById('email'));
        return false;
    }
    setCampoOK(document.getElementById('email'));
    return true;
}
*/
function verifica_email (email){
    if( !verifica_mail(document.getElementById(email).value.trim()) ){
        setCampoErrato(document.getElementById(email));
        return false;
    }
    setCampoOK(document.getElementById(email));
    return true;
}

function verifica_telefono (){
    if(!verifica_num_tel(document.getElementById('telefono').value.trim())){
        setCampoErrato(document.getElementById('telefono'));
        return false;
    }
    setCampoOK(document.getElementById('telefono'));
    return true
}

function verifica_fax (){
    // campo opzionale
    if( document.getElementById('fax').value.trim() == '' )
        return true;
    if(!verifica_num_tel(document.getElementById('fax').value.trim())){
        setCampoErrato(document.getElementById('fax'));
        return false;
    }
    setCampoOK(document.getElementById('fax'));
    return true
}

function verifica_documento_identita (){
    /*
    carta_identita
    patente
    passaporto
    */
    return true;
}

function verifica_numero_documento (){
    if( document.getElementById('numero_documento').value.trim().length < 2 ){
        setCampoErrato(document.getElementById('numero_documento'));
        return false;
    }
    setCampoOK(document.getElementById('numero_documento'));
    return true;
}

function verifica_rilasciato_da (){
    if( document.getElementById('rilasciato_da').value.trim().length < 2 ){
        setCampoErrato(document.getElementById('rilasciato_da'));
        return false;
    }
    setCampoOK(document.getElementById('rilasciato_da'));
    return true;
}

function verifica_data_rilascio_documento (){
    if( !verifica_data( document.getElementById('data_rilascio_documento').value.trim() ) ){
        setCampoErrato(document.getElementById('data_rilascio_documento'));
        return false;
    }
    setCampoOK(document.getElementById('data_rilascio_documento'));
    return true;
}

/*
function verifica_nome_legale_rappresentante (){
    if( document.getElementById('nome_legale_rappresentante').value.trim().length < 2 ){
        alert('Specificare il Nome del Legale Rappresentante');
        setCampoErrato(document.getElementById('nome_legale_rappresentante'));
        return false;
    }
    setCampoOK(document.getElementById('nome_legale_rappresentante'));
    return true;
}

function verifica_cognome_legale_rappresentante (){
    if( document.getElementById('cognome_legale_rappresentante').value.trim().length < 2 ){
        alert('Specificare il Cognome del Legale Rappresentante');
        setCampoErrato(document.getElementById('cognome_legale_rappresentante'));
        return false;
    }
    setCampoOK(document.getElementById('cognome_legale_rappresentante'));
    return true;
}
*/

/*
function verifica_ragione_sociale (){
    if( document.getElementById('ragione_sociale').value.trim().length < 2 ){
        setCampoErrato(document.getElementById('ragione_sociale'));
        return false;
    }
    setCampoOK(document.getElementById('ragione_sociale'));
    return true;
}
*/
function verifica_ragione_sociale (ragione_sociale){
    if( document.getElementById(ragione_sociale).value.trim().length < 2 ){
        setCampoErrato(document.getElementById(ragione_sociale));
        return false;
    }
    setCampoOK(document.getElementById(ragione_sociale));
    return true;
}

/*
function verifica_partita_iva (){
    if( document.getElementById('partita_iva').value.trim() == 'IN ATTRIBUZ' )
        return true;
    if( !verificaPartitaIVA(document.getElementById('partita_iva').value.trim()) ){
        setCampoErrato(document.getElementById('partita_iva'));
        return false;
    }
    setCampoOK(document.getElementById('partita_iva'));
    return true;
}
 **/
function verifica_partita_iva (partita_iva){
    if( document.getElementById(partita_iva).value.trim() == 'IN ATTRIBUZ' )
        return true;
    if( !verificaPartitaIVA(document.getElementById(partita_iva).value.trim()) ){
        setCampoErrato(document.getElementById(partita_iva));
        return false;
    }
    setCampoOK(document.getElementById(partita_iva));
    return true;
}

/*
 function verifica_indirizzo_azienda (){
    if( document.getElementById('indirizzo_azienda').value.trim().length < 2 ){
        setCampoErrato(document.getElementById('indirizzo_azienda'));
        return false;
    }
    setCampoOK(document.getElementById('indirizzo_azienda'));
    return true;
}
 */

/*
function verifica_comune_azienda (){
    if( document.getElementById('comune_azienda').value.trim().length < 2 ){
        setCampoErrato(document.getElementById('comune_azienda'));
        return false;
    }
    setCampoOK(document.getElementById('comune_azienda'));
    return true;
}
*/
function verifica_comune (comune){
    if( document.getElementById(comune).value.trim().length < 2 ){
        setCampoErrato(document.getElementById(comune));
        return false;
    }
    setCampoOK(document.getElementById(comune));
    return true;
}
/*
function verifica_provincia_azienda (){
    if( document.getElementById('provincia_azienda').options[document.getElementById('provincia_azienda').selectedIndex].value == 0 ){
        setCampoErrato(document.getElementById('provincia_azienda'));
        return false;
    }
    setCampoOK(document.getElementById('provincia_azienda'));
    return true;
}
*/
/*
function verifica_cap_azienda (){
    if( !verifica_numero(5, 5, document.getElementById('cap_azienda').value.trim()) ){
        setCampoErrato(document.getElementById('cap_azienda'));
        return false;
    }
    setCampoOK(document.getElementById('cap_azienda'));
    return true;
}
*/
/*
function verifica_email_rappresentante (){
    if( !verifica_mail(document.getElementById('email_rappresentante').value.trim()) ){
        setCampoErrato(document.getElementById('email_rappresentante'));
        return false;
    }
    setCampoOK(document.getElementById('email_rappresentante'));
    return true;
}
*/
function verifica_telefono_rappresentante (){
    if(!verifica_num_tel(document.getElementById('telefono_rappresentante').value.trim())){
        setCampoErrato(document.getElementById('telefono_rappresentante'));
        return false;
    }
    setCampoOK(document.getElementById('telefono_rappresentante'));
    return true    
}

function verifica_fax_rappresentante (){
    // campo opzionale
    if( document.getElementById('fax_rappresentante').value.trim() == '' )
        return true;

    if(!verifica_num_tel(document.getElementById('fax_rappresentante').value.trim())){
        setCampoErrato(document.getElementById('fax_rappresentante'));
        return false;
    }
    setCampoOK(document.getElementById('fax_rappresentante'));
    return true    
}

/*
function verifica_email_copia_moduli(){
    // campo opzionale
    if( document.getElementById('email_copia_moduli').value.trim() == '' )
        return true;

    if( !verifica_mail(document.getElementById('email_copia_moduli').value.trim()) ){
        setCampoErrato(document.getElementById('email_copia_moduli'));
        return false;
    }
    setCampoOK(document.getElementById('email_copia_moduli'));
    return true;
}
*/
function verifica_dominio_da_certificare(){
    var return_value = true;
    
    if( !verifica_domain_string(document.getElementById('2_level_domain').value.trim()) ){
        setCampoErrato(document.getElementById('2_level_domain'));
        return_value = false;
    } else {
        setCampoOK(document.getElementById('2_level_domain'));
    }

    if( !verifica_domain_string(document.getElementById('1_level_domain').value.trim()) ){
        setCampoErrato(document.getElementById('1_level_domain'));
        return_value = false;
    } else {
        setCampoOK(document.getElementById('1_level_domain'));
    }
    
    if( !verifica_domain_string(document.getElementById('ext_domain').value.trim()) ){
        setCampoErrato(document.getElementById('ext_domain'));
        return_value = false;
    } else {
        setCampoOK(document.getElementById('ext_domain'));
    }

    return return_value;

}

function verificaPartitaIVA(pi){
    if( pi == '' )
        return false;

    if( pi.length != 11 )
        return false;

    validi = "0123456789";
    for( i = 0; i < 11; i++ ){
        if( validi.indexOf( pi.charAt(i) ) == -1 )
            return false;
    }

    s = 0;
    for( i = 0; i <= 9; i += 2 )
        s += pi.charCodeAt(i) - '0'.charCodeAt(0);
    for( i = 1; i <= 9; i += 2 ){
        c = 2*( pi.charCodeAt(i) - '0'.charCodeAt(0) );
        if( c > 9 )
            c = c - 9;
        s += c;
    }
    if( ( 10 - s%10 )%10 != pi.charCodeAt(10) - '0'.charCodeAt(0) )
        return false;

    return true;
}

function verificaCodiceFiscale(cf){
	var validi, i, s, set1, set2, setpari, setdisp;
	if( cf == '' )
        return false;
	cf = cf.toUpperCase();
	if( cf.length != 16 )
		return false;

	validi = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
	for( i = 0; i < 16; i++ ){
		if( validi.indexOf( cf.charAt(i) ) == -1 )
			return false;
	}
	set1 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
	set2 = "ABCDEFGHIJABCDEFGHIJKLMNOPQRSTUVWXYZ";
	setpari = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
	setdisp = "BAKPLCQDREVOSFTGUHMINJWZYX";
	s = 0;
	for( i = 1; i <= 13; i += 2 )
		s += setpari.indexOf( set2.charAt( set1.indexOf( cf.charAt(i) )));
	for( i = 0; i <= 14; i += 2 )
		s += setdisp.indexOf( set2.charAt( set1.indexOf( cf.charAt(i) )));
	if( s%26 != cf.charCodeAt(15)-'A'.charCodeAt(0) )
		return false;

    return true;
}

