// Funzioni di controllo dei campi
var reSex = /^(m|M|f|F|)$/

function isEmail (obj) {
    var emailStr = obj.value;
    var emailPat=/^(.+)@(.+)$/
    var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]"
    var validChars="\[^\\s" + specialChars + "\]"
    var quotedUser="(\"[^\"]*\")"
    var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/
    var atom=validChars + '+'
    var word="(" + atom + "|" + quotedUser + ")"
    var userPat=new RegExp("^" + word + "(\\." + word + ")*$")
    var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$")

    var matchArray=emailStr.match(emailPat)
    if (matchArray==null) {
    	return false
    }
    var user=matchArray[1]
    var domain=matchArray[2]
    
    if (user.match(userPat)==null) {
        return false
    }

    var IPArray=domain.match(ipDomainPat)
    if (IPArray!=null) {
    	  for (var i=1;i<=4;i++) {
    	    if (IPArray[i]>255) {
        		return false
    	    }
        }
        return true
    }
    
    var domainArray=domain.match(domainPat)
    if (domainArray==null) {
        return false
    }

    var atomPat=new RegExp(atom,"g")
    var domArr=domain.match(atomPat)
    var len=domArr.length
    if (domArr[domArr.length-1].length<2 || 
        domArr[domArr.length-1].length>3) {
       return false
    }
    
    if (len<2) {
       return false
    }
    
    return true;
}

function trimString (str) {
    return str.replace(/^\s+/g, '').replace(/\s+$/g, '');
}

function isLetter(obj) {
    return !isDigit(obj);
}

function isRequired(obj) {
    return isEmpty(obj);
}

function toPreviousPage() {
	window.location = document.referrer;
}

function isDigit(obj) {
	return (!isEmpty(obj) && !isNaN(obj.value));
}

function isMaxDigit(obj, max) {
	if (!isNaN(obj.value)) {
		return (obj.value < max);
	}
	return false;
}

function isMaxLetter(obj, max) {
	return (obj.value.length <= max);
}

function isEmpty(obj) {
    return ( trimString(obj.value).length==0);
}

function isSex(obj) {
	return reSex.test(obj.value);
}

// funzioni di gestione date
function isValidDate(gg, mm , aaaa) {
    var retValue = true;
	if ( !(isDigit(gg) && isDigit(mm) && isDigit(aaaa)) ) {
	   retValue=false;
	}
	else {   
	  if ( mm.value>12 || gg.value >31 ) {
	    retValue=false;
	  }	
	  else {	
        if ((mm.value==04 || mm.value==06 || mm.value==09 || mm.value==11) && gg.value>30) {
          retValue=false;
        } 
	    else if (mm.value==02) {
          if (gg.value>28) {
            if (aaaa.value%4==0 && aaaa.value%100!=0 || aaaa.value%400==0) {
                retValue=!(gg.value>29);
            } else {
                retValue=!(gg.value>28);
            }
          }
        }
	  }
	}
	  
    return retValue;
}

function getInstanceDate(gg, mm, aa, d) {
  d.setYear(aa.value);
  d.setMonth(mm.value-1); // la numerazione dei mesi è a partire da zero.
  d.setDate(gg.value);
}

function getCurrentDate(d) {

  d.getDate();
  d.getMonth();
  d.getFullYear();
}

function isFutureDate(d) {
  var Today=new Date();
  getCurrentDate(Today);
  
  return (d>Today);
}

function isPastDate(d) {
  var Today=new Date();
  getCurrentDate(Today);
  
  return (d<Today);
}

// Altre funzioni
/* Abilita o disabilita una form
 * fname: il nome della form da disabilitare
 * active: lo stato a cui portare la form. 
 *         True attiva la form, cioe' rende i 
 *         campi editabili.
 */
function activate(fname, active) {
    var frm = document.forms[fname];
    for (i=0; i<frm.length; i++) {
		frm.elements[i].disabled=!(active);
	}
}                     


// Fa il submit di una form alla pagina specificata
function reload(frmName, destPage){ 	
    document.forms[frmName].action = destPage;
    document.forms[frmName].submit();
} 

function scorro_reload(frmName, destPage, verso){ 
	document.forms[frmName].fid.value=verso;
    document.forms[frmName].action = destPage;
    document.forms[frmName].submit();
}


// Mostra un messaggio in una casella di alert
function showMsg(msg) {
	alert(msg);
}

// Apre una finestra modale
var win;
function openModalWindow(popName) {
	var popW = 400; // Larghezza della finestra di popup
	var popH = 450; // Altezza della finestra di popup

	// Mostro la finestra di popup con caratteristiche di default
	openWindow(popName, popW, popH, "status=no,toolbar=no,menubar=no,location=no,scrollbars=no");
}

function openModalWindowVariabile(popName,w,h) {
	var popW = w; // Larghezza della finestra di popup
	var popH = h; // Altezza della finestra di popup

	// Mostro la finestra di popup con caratteristiche di default
	openWindow(popName, popW, popH, "status=no,toolbar=no,menubar=no,location=no,scrollbars=no");
}

// Apre una finestra modale centrata nello schermo
function openWindow(popName, popW, popH, windowFeatures) {
   	var w = screen.availWidth; // Larghezza dello scehrmo
   	var h = screen.availHeight; // Altezza dello schermo
	
	// Calcolo la posizione sinistro e alto
	var leftPos = (w-popW)/2, topPos = (h-popH)/2;
    win = window.open(popName, "_blank", "left=" + leftPos + ",top=" + topPos + ",height=" + popH + ",width=" + popW + "," + windowFeatures);
}

// Verifica che la finestra modale sia aperta
function verifyWindow() {
	if (win && win.open && !win.closed) {
		win.focus();
	}
}

// Carica una pagina
function redirect(destUrl) {
	location = destUrl;
}

/* Funzione di utilita' usata in parecchie pagine. Inizializza i valori degli elementi codice 
 * e descrizione di una form con i valori specificati.
 * Parametri:
 * - frm: il nome della form
 * - codice: il valore per il codice
 * - descrizione: il valore per la descrizione
 */
function fill(frm, codice, descrizione){
	var obj = document.forms[frm].elements;
	obj.codice.value = codice;
	obj.descrizione.value = descrizione;
}

/* Verifico se un oggetto e' nullo.
 * Parametri: 
 * - val: l'oggetto da verificare
 * Ritorno:
 * - true se l'oggetto e' nullo
 */
function isNull(val){
    return(val==null);
}

/* Sostituisce le virgole con i punti
 */
function escapeComma(obj) {
    return obj.value.replace(/\,/gi,'.');
}

// FindForBadChar function searchs for bad characters contained in the input string (field)
// Input Parameter: value of a text field
// result: true if a bad Character found
// Bad Characters = \,%,<,>,"
function FindForBadChar(field /* IN */, BadChar /* OUT */) {
  var RetValue;
  if (RetValue = field.search("[\\\\%\<\>\"]") != -1)
  {
    /* bad char found */
    BadChar.value=field.charAt(field.search("[\\\\%\<\>\"]"));
  }
  
  return RetValue;
}