function valida_mail(email) {
    var email_reg = /^[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}$/;
    return email_reg.test(email);
}
var reg_nome_cognome = /^[a-zA-ZàèéìòùÀÈÉÌÒÙ\-_ ’'‘ÆÐƎƏƐƔĲŊŒẞÞǷȜæðǝəɛɣĳŋœĸſßþƿȝĄƁÇĐƊĘĦĮƘŁØƠŞȘŢȚŦŲƯY̨Ƴąɓçđɗęħįƙłøơşșţțŧųưy̨ƴÁÀÂÄǍĂĀÃÅǺĄÆǼǢƁĆĊĈČÇĎḌĐƊÐÉÈĖÊËĚĔĒĘẸƎƏƐĠĜǦĞĢƔáàâäǎăāãåǻąæǽǣɓćċĉčçďḍđɗðéèėêëěĕēęẹǝəɛġĝǧğģɣĤḤĦIÍÌİÎÏǏĬĪĨĮỊĲĴĶƘĹĻŁĽĿʼNŃN̈ŇÑŅŊÓÒÔÖǑŎŌÕŐỌØǾƠŒĥḥħıíìiîïǐĭīĩįịĳĵķƙĸĺļłľŀŉńn̈ňñņŋóòôöǒŏōõőọøǿơœŔŘŖŚŜŠŞȘṢẞŤŢṬŦÞÚÙÛÜǓŬŪŨŰŮŲỤƯẂẀŴẄǷÝỲŶŸȲỸƳŹŻŽẒŕřŗſśŝšşșṣßťţṭŧþúùûüǔŭūũűůųụưẃẁŵẅƿýỳŷÿȳỹƴźżžẓ]*$/;
var reg_luogo_nascita_residenza = /^[A-Za-zàèéìòùÀÈÉÌÒÙ\s\-']{2,}$/;
var reg_rea = /^[A-Z]{2} ?\d{1,7}$/;
var reg_inps = /^\d{10}$/;
var reg_indirizzo = /^[A-Za-z0-9àèéìòùÀÈÉÌÒÙ\s\-\.,']{3,}$/;
var reg_civico = /^\d+(\/[a-zA-Z])?$/;


function controllaCFPIVA(sValue) {
  var bRc = true;
  var iOdd = 0;
  var iEven = 0;
  var iDouble = 0;
  var iCin = 0;
  var tabellaCF = new Array(36);
  var tabellaCFB = new Array(36);
  var tabellaCFA = new Array(36);
  if (sValue.length === 11) {
    iOdd = sValue.charAt(0) * 1 + sValue.charAt(2) * 1 + sValue.charAt(4) * 1 + sValue.charAt(6) * 1 + sValue.charAt(8) * 1;
    for (var i = 1; i < 11; i = i + 2) {
      iDouble = sValue.charAt(i) * 2;
      if (iDouble > 9)
        iEven += iDouble % 10 + 1;
      else
        iEven += iDouble;
    }
    iCin = (10 - (iEven + iOdd) % 10) % 10;
    if (iCin === (sValue.charAt(10) * 1))
      return true;
    else
      return false;
  } else {
    if (sValue.length === 16) {
      tabellaCF[0] = '0';
      tabellaCF[1] = '1';
      tabellaCF[2] = '2';
      tabellaCF[3] = '3';
      tabellaCF[4] = '4';
      tabellaCF[5] = '5';
      tabellaCF[6] = '6';
      tabellaCF[7] = '7';
      tabellaCF[8] = '8';
      tabellaCF[9] = '9';
      tabellaCF[10] = 'A';
      tabellaCF[11] = 'B';
      tabellaCF[12] = 'C';
      tabellaCF[13] = 'D';
      tabellaCF[14] = 'E';
      tabellaCF[15] = 'F';
      tabellaCF[16] = 'G';
      tabellaCF[17] = 'H';
      tabellaCF[18] = 'I';
      tabellaCF[19] = 'J';
      tabellaCF[20] = 'K';
      tabellaCF[21] = 'L';
      tabellaCF[22] = 'M';
      tabellaCF[23] = 'N';
      tabellaCF[24] = 'O';
      tabellaCF[25] = 'P';
      tabellaCF[26] = 'Q';
      tabellaCF[27] = 'R';
      tabellaCF[28] = 'S';
      tabellaCF[29] = 'T';
      tabellaCF[30] = 'U';
      tabellaCF[31] = 'V';
      tabellaCF[32] = 'W';
      tabellaCF[33] = 'X';
      tabellaCF[34] = 'Y';
      tabellaCF[35] = 'Z';
      for (var iTab = 0; iTab < 10; iTab++) {
        tabellaCFA[iTab] = iTab;
      }
      for (var iTab = 10; iTab < 36; iTab++)
        tabellaCFA[iTab] = iTab - 10;
      tabellaCFB[0] = 1;
      tabellaCFB[1] = 0;
      tabellaCFB[2] = 5;
      tabellaCFB[3] = 7;
      tabellaCFB[4] = 9;
      tabellaCFB[5] = 13;
      tabellaCFB[6] = 15;
      tabellaCFB[7] = 17;
      tabellaCFB[8] = 19;
      tabellaCFB[9] = 21;
      tabellaCFB[10] = 1;
      tabellaCFB[11] = 0;
      tabellaCFB[12] = 5;
      tabellaCFB[13] = 7;
      tabellaCFB[14] = 9;
      tabellaCFB[15] = 13;
      tabellaCFB[16] = 15;
      tabellaCFB[17] = 17;
      tabellaCFB[18] = 19;
      tabellaCFB[19] = 21;
      tabellaCFB[20] = 2;
      tabellaCFB[21] = 4;
      tabellaCFB[22] = 18;
      tabellaCFB[23] = 20;
      tabellaCFB[24] = 11;
      tabellaCFB[25] = 3;
      tabellaCFB[26] = 6;
      tabellaCFB[27] = 8;
      tabellaCFB[28] = 12;
      tabellaCFB[29] = 14;
      tabellaCFB[30] = 16;
      tabellaCFB[31] = 10;
      tabellaCFB[32] = 22;
      tabellaCFB[33] = 25;
      tabellaCFB[34] = 24;
      tabellaCFB[35] = 23;
      var tot = 0;
      var tmp = '';
      for (var iChar = 0; iChar < 15; iChar++) {
        tmp = sValue.charAt(iChar);
        var j = 0;
        for (j = 0; j < 36; j++) {
          if (tmp === tabellaCF[j])
            break;
        }
        if (j === 36)
          return false;
        if ((iChar % 2) === 0) {
          tot += tabellaCFB[j];
        } else {
          tot += tabellaCFA[j];
        }
      }
      tot %= 26;
      iCin = tabellaCF[tot + 10];
      if (iCin === sValue.charAt(15))
        return true;
      else
        return false;
    } else
      return false;
  }
}

/*==== VALIDAZIONI SEZIONE ANAGRAFICA ====*/
  $(document).on("input", "#nome", function () {
    var nome = $(this).val();
    if (nome.length == 0) {
      $("#nome").addClass("is-invalid");
      $("#errore_nome").addClass("invalid-feedback");
      $("#errore_nome").text("Nome obbligatorio.");
    } else if (nome.length < 2) {
      $("#nome").addClass("is-invalid");
      $("#errore_nome").addClass("invalid-feedback");
      $("#errore_nome").text("Il nome deve avere almeno due caratteri.");
    } else {
      if (!reg_nome_cognome.test(nome)) {
        $("#nome").addClass("is-invalid");
        $("#errore_nome").addClass("invalid-feedback");
        $("#errore_nome").text("Hai inserito caratteri non consentiti.");
      } else {
        $("#nome").removeClass("is-invalid");
        $("#errore_nome").removeClass("invalid-feedback");
        $("#errore_nome").text("");
      }
    }
  });

  $(document).on("input", "#cognome", function () {
    var cognome = $(this).val();
    if (cognome.length == 0) {
      $("#cognome").addClass("is-invalid");
      $("#errore_cognome").addClass("invalid-feedback");
      $("#errore_cognome").text("Cognome obbligatorio.");
    } else if (cognome.length < 2) {
      $("#cognome").addClass("is-invalid");
      $("#errore_cognome").addClass("invalid-feedback");
      $("#errore_cognome").text("Il cognome deve avere almeno due caratteri.");
    } else {
      if (!reg_nome_cognome.test(cognome)) {
        $("#cognome").addClass("is-invalid");
        $("#errore_cognome").addClass("invalid-feedback");
        $("#errore_cognome").text("Hai inserito caratteri non consentiti.");
      } else {
        $("#cognome").removeClass("is-invalid");
        $("#errore_cognome").removeClass("invalid-feedback");
        $("#errore_cognome").text("");
      }
    }
  });

  $(document).on("input", "#data-nascita", function () {
    var dataNascita = $(this).val();
    const array_data = dataNascita.split("-");
    var anno = array_data[0];
    if (dataNascita == "") {
        $("#data-nascita").addClass("is-invalid");
        $("#errore_data_nascita").addClass("invalid-feedback");
        $("#errore_data_nascita").text("Data di nascita obbligatoria.");
      } 
      else if(anno < 1900 || anno > 2026){        
        $("#data-nascita").addClass("is-invalid");
        $("#errore_data_nascita").addClass("invalid-feedback");
        $("#errore_data_nascita").text("Data di nascita non valida.");
    }
    else {
        $("#data-nascita").removeClass("is-invalid");
        $("#errore_data_nascita").removeClass("invalid-feedback");
        $("#errore_data_nascita").text("");
    }
  });

  $(document).on("input", "#luogo-nascita", function () {
    var luogoNascita = $(this).val();
    if (luogoNascita.length == 0) {
      $("#luogo-nascita").addClass("is-invalid");
      $("#errore_luogo_nascita").addClass("invalid-feedback");
      $("#errore_luogo_nascita").text("Luogo di nascita obbligatorio.");
    }else if (!reg_luogo_nascita_residenza.test(luogoNascita)) {
      $("#luogo-nascita").addClass("is-invalid");
      $("#errore_luogo_nascita").addClass("invalid-feedback");
      $("#errore_luogo_nascita").text("Luogo di nascita non valido.");
    } 
    else {
      $("#luogo-nascita").removeClass("is-invalid");
      $("#errore_luogo_nascita").removeClass("invalid-feedback");
      $("#errore_luogo_nascita").text("");
    }
  });

  $(document).on("input", "#provincia-nascita", function () {
    var provinciaNascita = $(this).val();
    if (provinciaNascita.length == 0) {
      $("#provincia-nascita").addClass("is-invalid");
      $("#errore_provincia_nascita").addClass("invalid-feedback");
      $("#errore_provincia_nascita").text("Provincia di nascita obbligatoria.");
    }else if (!reg_luogo_nascita_residenza.test(provinciaNascita)) {
      $("#provincia-nascita").addClass("is-invalid");
      $("#errore_provincia_nascita").addClass("invalid-feedback");
      $("#errore_provincia_nascita").text("Provincia di nascita non valida.");
    } 
    else {
      $("#provincia-nascita").removeClass("is-invalid");
      $("#errore_provincia_nascita").removeClass("invalid-feedback");
      $("#errore_provincia_nascita").text("");
    }
  });

  $(document).on("input", "#cuua", function () {
    var cuua = $(this).val();
    if (cuua.length == 0) {
      $("#cuua").addClass("is-invalid");
      $("#errore_cuua").addClass("invalid-feedback");
      $("#errore_cuua").text("Codice CUAA obbligatorio.");
    }else if(!controllaCFPIVA(cuua)){
        $("#cuua").addClass("is-invalid");
        $("#errore_cuua").addClass("invalid-feedback");
        $("#errore_cuua").text("Codice CUAA errato: inserire in formato corretto e in maiuscolo.");
    } 
    else {
        $("#cuua").removeClass("is-invalid");
        $("#errore_cuua").removeClass("invalid-feedback");
        $("#errore_cuua").text("");
    }
  });

  $(document).on("input", "#residenza", function () {
    var residenza = $(this).val();
    if (residenza.length == 0) {
        $("#residenza").addClass("is-invalid");
        $("#errore_residenza").addClass("invalid-feedback");
        $("#errore_residenza").text("Comune di residenza obbligatorio.");
    }else if (!reg_luogo_nascita_residenza.test(residenza)) {
      $("#residenza").addClass("is-invalid");
      $("#errore_residenza").addClass("invalid-feedback");
      $("#errore_residenza").text("Comune di residenza non valido.");
    }else {
        $("#residenza").removeClass("is-invalid");
        $("#errore_residenza").removeClass("invalid-feedback");
        $("#errore_residenza").text("");
    }
  });

  $(document).on("input", "#provincia", function () {
    var provincia = $(this).val();
    if (provincia.length == 0) {
      $("#provincia").addClass("is-invalid");
      $("#errore_provincia").addClass("invalid-feedback");
      $("#errore_provincia").text("Provincia obbligatoria.");
    }else if (!reg_luogo_nascita_residenza.test(provincia)) {
      $("#provincia").addClass("is-invalid");
      $("#errore_provincia").addClass("invalid-feedback");
      $("#errore_provincia").text("Provincia non valida.");
    } 
    else {
      $("#provincia").removeClass("is-invalid");
      $("#errore_provincia").removeClass("invalid-feedback");
      $("#errore_provincia").text("");
    }
  });

  $(document).on("input", "#indirizzo", function () {
    var indirizzo = $(this).val();
    if (indirizzo.length == 0) {
        $("#indirizzo").addClass("is-invalid");
        $("#errore_indirizzo").addClass("invalid-feedback");
        $("#errore_indirizzo").text("Indirizzo obbligatorio.");
    }else if (!reg_indirizzo.test(indirizzo)){
      $("#indirizzo").addClass("is-invalid");
      $("#errore_indirizzo").addClass("invalid-feedback");
      $("#errore_indirizzo").text("Indirizzo non valido.");
    } else {
        $("#indirizzo").removeClass("is-invalid");
        $("#errore_indirizzo").removeClass("invalid-feedback");
        $("#errore_indirizzo").text("");
    }
  });

  $(document).on("input", "#civico", function () {
    var civico = $(this).val();
    if (civico.length == 0) {
        $("#civico").addClass("is-invalid");
        $("#errore_civico").addClass("invalid-feedback");
        $("#errore_civico").text("Numero civico obbligatorio.");
    } else {
        $("#civico").removeClass("is-invalid");
        $("#errore_civico").removeClass("invalid-feedback");
        $("#errore_civico").text("");
    }
  });

  $(document).on("input", "#pec", function () {
    var pec = $(this).val();
    if (pec.length == 0) {
        $("#pec").addClass("is-invalid");
        $("#errore_pec").addClass("invalid-feedback");
        $("#errore_pec").text("Indirizzo PEC obbligatorio.");
    } else {
      if(pec.includes("@")){
        var pec_check = pec.split("@");
        if(pec_check[1].length == 0){
          $("#pec").addClass("is-invalid");
          $("#errore_pec").addClass("invalid-feedback");
          $("#errore_pec").text("Formato PEC errato.");
        }
        else{
          if (!valida_mail(pec)) {
            $("#pec").addClass("is-invalid");
            $("#errore_pec").addClass("invalid-feedback");
            $("#errore_pec").text("Formato PEC errato.");
          } else {
            $("#pec").removeClass("is-invalid");
            $("#errore_pec").removeClass("invalid-feedback");
            $("#errore_pec").text("");
          }
        }
      }else{
        if (!valida_mail(pec)) {
          $("#pec").addClass("is-invalid");
          $("#errore_pec").addClass("invalid-feedback");
          $("#errore_pec").text("Formato PEC errato.");
        } else {
          $("#pec").removeClass("is-invalid");
          $("#errore_pec").removeClass("invalid-feedback");
          $("#errore_pec").text("");
        }
      }
    }
  });

  $(document).on("input", "#email_aziendale", function () {
    var email_aziendale = $(this).val();
    if (email_aziendale.length == 0) {
        $("#email_aziendale").addClass("is-invalid");
        $("#errore_email_aziendale").addClass("invalid-feedback");
        $("#errore_email_aziendale").text("Indirizzo Email obbligatorio.");
    } else {
      if(email_aziendale.includes("@")){
        var email_aziendale_check = email_aziendale.split("@");
        if(email_aziendale_check[1].length == 0){
          $("#email_aziendale").addClass("is-invalid");
          $("#errore_email_aziendale").addClass("invalid-feedback");
          $("#errore_email_aziendale").text("Formato Email errato.");
        }
        else{
          if (!valida_mail(email_aziendale)) {
            $("#email_aziendale").addClass("is-invalid");
            $("#errore_email_aziendale").addClass("invalid-feedback");
            $("#errore_email_aziendale").text("Formato Email errato.");
          } else {
            $("#email_aziendale").removeClass("is-invalid");
            $("#errore_email_aziendale").removeClass("invalid-feedback");
            $("#errore_email_aziendale").text("");
          }
        }
      }else{
        if (!valida_mail(email_aziendale)) {
          $("#email_aziendale").addClass("is-invalid");
          $("#errore_email_aziendale").addClass("invalid-feedback");
          $("#errore_email_aziendale").text("Formato Email errato.");
        } else {
          $("#email_aziendale").removeClass("is-invalid");
          $("#errore_email_aziendale").removeClass("invalid-feedback");
          $("#errore_email_aziendale").text("");
        }
      }
    }
  });

  $(document).on("input", "#telefono", function () {
    var telefono = $(this).val().trim();
    if (telefono.length == 0) {
        $("#telefono").addClass("is-invalid");
        $("#errore_telefono").addClass("invalid-feedback");
        $("#errore_telefono").text("Recapito obbligatorio.");
    } else if (!/^\+?\d+$/.test(telefono)) {
        $("#telefono").addClass("is-invalid");
        $("#errore_telefono").addClass("invalid-feedback");
        $("#errore_telefono").text("Inserire solo numeri.");
    } else {
        $("#telefono").removeClass("is-invalid");
        $("#errore_telefono").removeClass("invalid-feedback");
        $("#errore_telefono").text("");
    }
  });

  $(document).on("change", "input[name='qualifica']", function () {
    $("#errore_qualifica").removeClass("invalid-feedback");
    $("#errore_qualifica").text("");
  });

  $(document).on("input", "#denominazione", function () {
    var denominazione = $(this).val();
    if (denominazione.length == 0) {
        $("#denominazione").addClass("is-invalid");
        $("#errore_denominazione").addClass("invalid-feedback");
        $("#errore_denominazione").text("Nome dell'impresa obbligatorio.");
    } else {
        $("#denominazione").removeClass("is-invalid");
        $("#errore_denominazione").removeClass("invalid-feedback");
        $("#errore_denominazione").text("");
    }
  });

  $(document).on("input", "#sede", function () {
    var sede = $(this).val();
    if (sede.length == 0) {
        $("#sede").addClass("is-invalid");
        $("#errore_sede").addClass("invalid-feedback");
        $("#errore_sede").text("Sede legale dell'impresa obbligatoria.");
    } 
    else {
        $("#sede").removeClass("is-invalid");
        $("#errore_sede").removeClass("invalid-feedback");
        $("#errore_sede").text("");
    }
  });

  $(document).on("input", "#sede_indirizzo", function () {
    var sede_indirizzo = $(this).val();
    if (sede_indirizzo.length == 0) {
        $("#sede_indirizzo").addClass("is-invalid");
        $("#errore_sede_indirizzo").addClass("invalid-feedback");
        $("#errore_sede_indirizzo").text("Indirizzo della sede legale obbligatorio.");
    } 
    else if (!reg_indirizzo.test(sede_indirizzo)){
      $("#sede_indirizzo").addClass("is-invalid");
      $("#errore_sede_indirizzo").addClass("invalid-feedback");
      $("#errore_sede_indirizzo").text("Indirizzo non valido.");
    }
    else {
        $("#sede_indirizzo").removeClass("is-invalid");
        $("#errore_sede_indirizzo").removeClass("invalid-feedback");
        $("#errore_sede_indirizzo").text("");
    }
  });

  $(document).on("input", "#civico_sede", function () {
    var civico_sede = $(this).val();
    if (civico_sede.length == 0) {
        $("#civico_sede").addClass("is-invalid");
        $("#errore_civico_sede").addClass("invalid-feedback");
        $("#errore_civico_sede").text("Numero civico obbligatorio.");
    } else {
        $("#civico_sede").removeClass("is-invalid");
        $("#errore_civico_sede").removeClass("invalid-feedback");
        $("#errore_civico_sede").text("");
    }
  });

  $(document).on("input", "#ccia-riferimento", function () {
    var cciaRiferimento = $(this).val();
    if (cciaRiferimento.length == 0) {
        $("#ccia-riferimento").addClass("is-invalid");
        $("#errore_ccia_riferimento").addClass("invalid-feedback");
        $("#errore_ccia_riferimento").text("Provincia di riferimento della CCIA obbligatoria.");
    } else if (!reg_luogo_nascita_residenza.test(cciaRiferimento)){
        $("#ccia-riferimento").addClass("is-invalid");
        $("#errore_ccia_riferimento").addClass("invalid-feedback");
        $("#errore_ccia_riferimento").text("Provincia della CCIA non valida.");
    } else {
        $("#ccia-riferimento").removeClass("is-invalid");
        $("#errore_ccia_riferimento").removeClass("invalid-feedback");
        $("#errore_ccia_riferimento").text("");
    }
});

$(document).on("input", "#numero-rea", function () {
    var numeroREA = $(this).val();
    if (numeroREA.length == 0) {
        $("#numero-rea").addClass("is-invalid");
        $("#errore_numero_rea").addClass("invalid-feedback");
        $("#errore_numero_rea").text("Numero REA obbligatorio.");
    } else if (!reg_rea.test(numeroREA)){
        $("#numero-rea").addClass("is-invalid");
        $("#errore_numero_rea").addClass("invalid-feedback");
        $("#errore_numero_rea").text("Numero REA non valido. (es. MI123456)");
    } else {
        $("#numero-rea").removeClass("is-invalid");
        $("#errore_numero_rea").removeClass("invalid-feedback");
        $("#errore_numero_rea").text("");
    }
});

/*
$(document).on("input", "#numero-inps", function () {
    var numeroINPS = $(this).val();
    if (numeroINPS.length == 0) {
        $("#numero-inps").addClass("is-invalid");
        $("#errore_numero_inps").addClass("invalid-feedback");
        $("#errore_numero_inps").text("Numero INPS obbligatorio.");
    } else if (!reg_inps.test(numeroINPS)){
        $("#numero-inps").addClass("is-invalid");
        $("#errore_numero_inps").addClass("invalid-feedback");
        $("#errore_numero_inps").text("Numero INPS non valido. (es. 8765432199)");
    } else {
        $("#numero-inps").removeClass("is-invalid");
        $("#errore_numero_inps").removeClass("invalid-feedback");
        $("#errore_numero_inps").text("");
    }
});
*/
  $(document).on("input", "#p-iva", function () {
    var pIva = $(this).val();
    if (pIva.length == 0) {
      $("#p-iva").addClass("is-invalid");
      $("#errore_p_iva").addClass("invalid-feedback");
      $("#errore_p_iva").text("Partita IVA dell'impresa obbligatoria.");
  }else if(!controllaCFPIVA(pIva)){
      $("#p-iva").addClass("is-invalid");
      $("#errore_p_iva").addClass("invalid-feedback");
      $("#errore_p_iva").text("Partita IVA errata.");
  } 
  else {
      $("#p-iva").removeClass("is-invalid");
      $("#errore_p_iva").removeClass("invalid-feedback");
      $("#errore_p_iva").text("");
  }
  });

$(document).on("change", "input[name=antimafia]", function(){
  $("#errore_antimafia").removeClass("invalid-feedback d-block");
  $("#errore_antimafia").text("");
});


/*==== VALIDAZIONI SEZIONE ANAGRAFICA ====*/