
//AUTOCLEAR
//cancella il valore di default di un campo e, all'occorrenza ne mette un'altro
//Ingresso: obj       --> l'oggetto del form a cui fa riferimento (può essere usato "THIS");
//          standard  --> stringa di confronto per il mathcing;
//          subst     --> stringa sostitutiva
function autoClear(obj, standard, subst){
	if (obj.value == standard) { obj.value = subst ;}
}

//FIND OBJ
//Cerca la posizione logica dell'oggetto all'interno del documento XHTML.
//Utilizzata da VALIDATE FORM. Restituisce l'identificativo dell'oggetto per poterne usare gli attributi.
//Ingresso: n   --> nome dell'INPUT così come specificato nell'XHTML
//          d   --> (opzionale) attributo "document" di riferimento. Se omesso uso quello della pagina corrente
function findObj(n, d) { 
  var p, i, x;
  if(!d) d=document;
  if((p = n.indexOf("?")) > 0 && parent.frames.length) {
    d = parent.frames[n.substring(p+1)].document;
    n = n.substring(0, p);
  }
  if(!(x = d[n]) && d.all) x = d.all[n];
  for (i = 0;!x && i < d.forms.length;i++) x=d.forms[i][n];
  for (i = 0;!x && d.layers && i < d.layers.length; i++) x = findObj(n,d.layers[i].document);
  if(! x && d.getElementById) x = d.getElementById(n);
  return x;
}

//VALIDATE FORM
//Valida gli elementi di un Form nel caso siano indirizzi mail, numeri o campi obbligatori.
//Ingresso: numero illimitato di campi di un form. Ogni campo ha 3 argomenti, per cui il primo campo passato
//          è definito dai primi 3 valori, il secondo dai seguenti 3 e così via.
//
//          Primo argomento   : nome dell'INPUT così come specificato nell'XHTML
//          Secondo argomento : nome del campo (stringa arbitraria)
//          Terzo argomento   : Stringa identificativa del campo. Funziona come combinazione di stringhe.
//                              Se contiene "P" come secondo carattere il campo non deve contenere "@persal.org"
//                              Se contiene "O" come primo carattere il campo è Obbligatorio.
//                              Se contiene "èunaEmail" il campo è una mail
//                              Se contiene "K" come secondo carattere è un numero e si devono definire range di validità
//                              Se è un numero e contiene "nelRange" seguono il val MIN e MAX separti da ":"
//
//          Esempi: "OèunaEmail"         Campo mail obbligatorio
//                  "O"                  Solo obbligatorio
//                  "JKnelRange1:500"    Numero non obbligatorio compreso tra 1 e 500
//                  "OK"                 Numero obbligatorio senza range
function validateForm() {
  var i, p, q, nm, test, num, min, max, errors='', args = validateForm.arguments;
  for (i=0; i < (args.length-2); i+=3) {
    test = args[i+2];
    val  = findObj(args[i]);
    if (val) { 
      nm = args[i+1];
      if ((val = val.value) != "") {
        if (test.indexOf('èunaEmail') != -1) {
          p = val.indexOf('@');
          if (p < 1 || p == (val.length-1)) errors+='- Field ' + nm + ' must contains a valid E-mail address.\n';
        } else if (test.charAt(1) == 'K') {
          num = parseFloat(val);
          if (isNaN(val)) errors+='- Field ' + nm + ' must contains a number.\n';
          if (test.indexOf('nelRange') != -1) {
            p = test.indexOf(':');
            min=test.substring(10,p);
            max=test.substring(p+1);
            if (num < min || max < num) errors+= '- Field ' + nm + ' must contains a number between ' + min + ' and ' + max + '.\n';
          }
        } else if (test.charAt(1) == 'P') {
          if (val.indexOf('@persal.org') != -1) {
            errors+='- Field ' + nm + ' must contains <@persal.org>.\n';
          }
        }
      } else if (test.charAt(0) == 'O') errors += '- Field ' + nm + ' is mandatory.\n'; }
    } 
  if (errors) alert('Errore:\n' + errors);
  document.returnValue = (errors == '');
}
