
//--------------------------------------------------------------------------------
// progetto   : COMUNE
// nome       : stdlib.js
// autore     : CS
// modificato : 11/09/2007 12.08
// descrizione: funzioni javascript comuni
//--------------------------------------------------------------------------------

//--------------------------------------------------------------------------------

function apri_finestra(nome, url, w, h)
{
  // apre una finestra separata con menu
  var parametri = "toolbar=no,location=no,directories=no,status=no"
                 +",menubar=yes"
                 +",resizable=yes"
                 +",copyhistory=no"
                 +",titlebar=no"
                 +",scrollbars=yes"
                 +",left=20"
                 +",top=20"
                 +",width=" + (w+20)
                 +",height=" + (h+20);
  var finestra = window.open(url, nome, parametri);
  finestra.focus();
}

//--------------------------------------------------------------------------------

function apri_popup(nome, url, w, h)
{
  // apre una finestra popup senza menu
  var parametri = "toolbar=no,location=no,directories=no,status=no"
                 +",menubar=no"
                 +",resizable=no"
                 +",copyhistory=no"
                 +",titlebar=no"
                 +",scrollbars=yes"
                 +",dependent=yes"
                 +",left=20"
                 +",top=20"
                 +",width=" + (w+20)
                 +",height=" + (h+20);
  var finestra = window.open(url, nome, parametri);
  finestra.focus();
}

//--------------------------------------------------------------------

function campo_valido(frm, campo)
{
  var esito  = true;
  var vuota  = true;
  var nogood = "";
  var valore = frm.elements[campo].value;
  var len    = valore.length;
  if(arguments.length == 3)
    nogood = arguments[2];
  for(i = 0; i < len; i++) {
    var c = valore.charAt(i);
    if(c != " ") {
      vuota = false;
      break;
    }
  }
  if((len == 0) || (vuota == true) || (valore == nogood)) {
    alert("assegnare un valore a questo campo");
    frm.elements[campo].focus();
    esito = false;
  }
  return esito;
}

//--------------------------------------------------------------------

function cap_valido(frm, cap)
{
  if((frm.elements[cap].value == "") || (isNaN(frm.elements[cap].value))) {
    alert("inserire un CAP valido");
    frm.elements[cap].focus();
    return false;
  }
  return true;
}

//--------------------------------------------------------------------------------

function cf_valido(cf)
{
  var validi, i, s, set1, set2, setpari, setdisp;
  // va bene anche se non c'e'
  if(cf == '')  return true;
  cf = cf.toUpperCase();
  if(cf.length != 16) {
    alert("La lunghezza del codice fiscale non è\n"
         + "corretta: il codice fiscale dovrebbe essere lungo\n"
         + "esattamente 16 caratteri.\n");
    return false;
  }
  validi = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
  for(i = 0; i < 16; i++) {
    if(validi.indexOf(cf.charAt(i)) == -1) {
      alert("Il codice fiscale contiene un carattere non valido\n"
           + "I caratteri validi sono le lettere e le cifre.\n");
      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)) {
    alert("Il codice fiscale non è corretto:\n"
         + "il codice di controllo non corrisponde.\n") ;
    return false;
  }
  return true;
}

//--------------------------------------------------------------------------------
//
// verifica la correttezza di una data composta da giorno, mese e anno
// NOTA: una data nulla e' una data valida
//
function data_valida(g,m,a)
{
  var esito = true;

  // se non c'e' nessun parametro, OK;
  // se ne manca qualcuno, KO
  if(!g && !m && !a) {
    esito = true;
  }
  else if(!g || !m || !a) {
    esito = false;
  }
  else if(m == 4 || m == 6 || m == 9 || m == 11) {
    // 30 di conta novembre, con april, giugno e settembre
    if(g > 30) esito = false;
  }
  else if(m == 2) {
    // di 28 ce n'e' uno (29 bisestile)
    if((a % 4) && (g > 28))
      esito = false;
    else if(g > 29)
      esito = false;
  }
  else if(m > 12 || g > 31) {
    // tutti gli altri ne han 31
    esito = false;
  }

  return esito;
}

//--------------------------------------------------------------------

function e_mail_valido(frm, e_mail)
{
  if((frm.elements[e_mail].value.length < 5)
  || (frm.elements[e_mail].value == "")
  || (!frm.elements[e_mail].value.match("@.+[.]+"))) {
    alert("inserire un indirizzo di posta elettronica valido.");
    frm.elements[e_mail].focus();
    return false;
  }
  return true;
}

//--------------------------------------------------------------------

function on_pagina_inizio(select)
{
  if(select) {
    if(document.forms[select]) {
      if(document.forms[select].elements[0]) {
        document.forms[select].elements[0].focus();
      }
    }
  }
}

//--------------------------------------------------------------------------------

function p_iva_valida(pi)
{
  // se non c'e', assumiamo che vada bene: il controllo
  // sulla presenza del campo lo si puo' fare con campo_valido
  if(pi == '') return true;
  validi = "0123456789";
  if(pi.length != 11) {
    alert("la lunghezza della partita IVA non è corretta\n");
    return false;
  }
  for(i = 0; i < 11; i++) {
    if(validi.indexOf(pi.charAt(i)) == -1) {
      alert("la partita IVA contiene un carattere non valido '"+ pi.charAt(i)+"'.\n");
      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)) {
    alert("la partita IVA non è valida:\nil codice di controllo non corrisponde.\n");
    return false;
  }
  return true;
}

//--------------------------------------------------------------------

function password_valida(frm, pswd)
{
  if((frm.elements[pswd].value.length < 5) || (frm.elements[pswd].value == "")) {
    alert("la password deve contenere almeno 5 caratteri");
    frm.elements[pswd].focus();
    return false;
  }
  return true;
}

//--------------------------------------------------------------------

function radio_checked(frm, campo)
{
  for(var i in frm.elements[campo])
    if(frm.elements[campo][i].checked=="1")
      return frm.elements[campo][i].value;
  alert("selezionare una delle opzioni");
  frm.elements[campo][0].focus();
  return false;
}

//--------------------------------------------------------------------

function text_counter(campo, testo, limite)
{
  if(navigator.appName == "Netscape") {
  } else {
    if(campo.value.length > limite)
      campo.value = campo.value.substring(0, limite);
    else
      testo.value = (limite-campo.value.length);
  }
}

//--------------------------------------------------------------------------------
