function larghezzaschermo()
{
	return (screen.width) ;
}

//Funzione per visualizzare fotografie in pop up auto resize
function apri(url_foto,des_foto){
addr="fullsize.htm?"+url_foto+"&"+escape(des_foto)
alt=150
lar=150
rszb=(document.layers)?1:0;
props='height='+alt+',width='+lar+',top='+parseInt((screen.availHeight-alt)/2)+',left='+parseInt((screen.availWidth-lar)/2)+',scrollbars=0,resizable='+rszb+',toolbar=0,menubar=0,location=0,status=0';
window.open(addr,'_Blank',props);
}

// Script di apertura per ogni finestra popup (centrata automaticamente) 
function finpopup(url, larg, alt) { 
var scw = screen.width 
var sch = screen.height 
var larghFin = larg.value;
var lunghFin = alt.value;
var dasx= ((scw-larghFin)/2) 
var datop = ((sch-lunghFin)/2) 
parametri = "'_Blank', fullscreen=no, status=yes, menubar=no, scrollbars = yes, resizable = no, dependent=yes, width =" + larghFin + ", height=" + lunghFin + ", left=" + dasx +", top=" + datop; 
window.open(url, "", parametri) 
}

function ControllaEmail(gField) {
		var EmailAddr = gField.value;
		var Filtro = new RegExp("^[a-zA-Z0-9_.-]{1,}@[a-zA-Z0-9\-]{2,}[.][a-zA-Z0-9]{2,}$");
		if (!Filtro.test(EmailAddr)) {
        alert("Controlla l'indirizzo di e-mail inserito");
		//gField.focus() ;
		//gField.select() ;
		return false ;
		}
		else 
		 {return true;}
}

function numeralsOnly(evt) {
    evt = (evt) ? evt : event;
    var charCode = (evt.charCode) ? evt.charCode : ((evt.keyCode) ? evt.keyCode : 
        ((evt.which) ? evt.which : 0));
    if (charCode > 31 && (charCode < 48 || charCode > 57)) {
        alert("Puoi inserire solo numeri!"); 
        return false;
    }
    return true;
}

function lettersOnly(evt) {
    evt = (evt) ? evt : event;
    var charCode = (evt.charCode) ? evt.charCode : ((evt.keyCode) ? evt.keyCode : 
        ((evt.which) ? evt.which : 0));
    if (charCode > 31 && (charCode < 65 || charCode > 90) && 
        (charCode < 97 || charCode > 122)) {
        alert("Puoi inserire solo lettere!");
        return false;
    }
    return true;
}

function isOnlyNumber(gField, warnmessage) {
	// la differenza tra isOnlyNumber e isNumber è che la prima 
	// funzione accetta solo numeri, mentre la seconda oltre ai numeri accetta
	// i caratteri - e .
  var numStr="0123456789";
  var thischar;
  var counter = 0;
  var data ;
  data = gField.value ;

  for (var i=0; i < data.length; i++)  {
      thischar = data.substring(i, i+1);
      if (numStr.indexOf(thischar) != -1)
         counter ++;
  }
  if (counter == data.length) 
  	{
    	 // All characters are numbers
	     // alert("Number is OK.");
		 return (true) ;
	}
	  else
    //  alert("Number is not valid.");
	if (warnmessage=='true')
	{
		alert("Il campo accetta solo valori numerici") ;
		gField.focus() ;
		gField.select() ;
	}	
	return (false) ;
}



function isNumber(gField) {
  var numStr="0123456789,.-' '/";
  var thischar;
  var counter = 0;
  var data ;
  data = gField.value ;

  for (var i=0; i < data.length; i++)  {
      thischar = data.substring(i, i+1);
      if (numStr.indexOf(thischar) != -1)
         counter ++;
  }
  if (counter == data.length) 
  	{
    	 // All characters are numbers
	     // alert("Number is OK.");
		 return (true) ;
	}
	  else
    //  alert("Number is not valid.");
	alert("Il campo accetta solo valori numerici") ;
	gField.focus() ;
	gField.select() ;
	return (false) ;
}


function checkSepDec(gField)
{
	var counter=0 ;
	var data_originale ;
	
	data = gField.value ;
	data_originale = data ;
	
	// converto le virgole in punti
	data = data.replace(/,/g, '.')
	
	var thischar = "" ;
	for (var i=0; i < data.length; i++) 
	{
  		thischar = data.substring(i, i+1);
		if (thischar == '.') 
		{
			counter += 1
		}	
	
		if (counter > 1)
		{
			
			alert("Inserire solo un separatore decimale") ;
			gField.value = data_originale ;
			gField.focus() ;
			gField.select() ;
			return (false) ;
		}
	}	
		
	
	// Testo se esiste il carattere "-" (segno negativo)
	// se lo trovo deve essere nella prima posizione della stringa
	// altrimenti non e' un numero valido
	for (var i=0; i < data.length; i++) 
	{
    	thischar = data.substring(i, i+1);
		if (thischar == '-') 
		{
			if (i==0)
			{
				// va tutto bene
				return(true)
			}
			else
			{
				alert("Il segno negativo deve essere il primo carattere") ;
				gField.value = data_originale ;
				gField.focus() ;
				gField.select() ;
				return (false) ;
			}
		}	
	 }		
	 
	
}
// fine checkSepDec
// ---------------------------- //


function ContaCifreDecimali(gField)
{
	 // Controllo che il numero di cifre decimali dopo la virgola
	 // non siano piu' di due
	 // 
	 var data = gField.value ;
	 var data_originale ;
	 var nPosSep ;
	 var nCifreDec ;
	 data = gField.value ;
     data_originale = data ;
	
	// converto le virgole in punti
	data = data.replace(/,/g, '.')
		 
	nPosSep =  data.lastIndexOf(".")

	 // il separatore non e' stato trovato
	 if (nPosSep == -1) 
	 {
	 	nCifreDec = 0 ;
	 }		
	 else
	 {
	 	nCifreDec = data.substring( nPosSep + 1 ) ;
		 
		nCifreDec = nCifreDec.length ;
	 }
	 	
	 
	 if ( nCifreDec > 2 )
	 {
			 gField.value = data_originale ;	
			alert("Dopo il separatore  sono ammesse solo 2 cifre decimali") ;
			gField.focus() ;
			gField.select() ;
			return (false) ;
	 }
}
// fine ContaCifreDecimali
// ---------------------------- //




function checkEuro(pField)
{
	// in pField e' memorizzato il il campo e la form di provenienza

	var rc = "" ;

	// test se e' un numero
	rc = isNumber(pField) ;
	if (rc==false)
	{
		return(false);
	}
	
	// test per contare i separatori decimali e eventuali segni negativi
	rc = checkSepDec(pField) ;
	if (rc==false)
	{
		return(false)
	}

}
// fine checkEuro() 




 // Formatta un numero con i punti delle migliaglia
// da 1000000
// a 1.000.000
function outputMoney(gField) {
	gField.value = RemoveMoney(gField) ;
	// gField.value = replace(gField.value, "." , "") ;
	var number=gField.value ;
	gField.value=outputDollars(Math.floor(number-0) + "");
    return outputDollars(Math.floor(number-0) + "");
}


function outputDollars(number) {

    if (number.length <= 3)
        return (number == "" ? "0" : number);
    else {
        var mod = number.length%3;
        var output = (mod == 0 ? "" : (number.substring(0,mod)));
        for (i=0 ; i < Math.floor(number.length/3) ; i++) {
            if ((mod ==0) && (i ==0))
                output+= number.substring(mod+3*i,mod+3*i+3);
            else
                output+= "." + number.substring(mod+3*i,mod+3*i+3);
        }
        return (output);
    }
}
 
 
 
function RemoveMoney(gField)
{
	
	var r, re;
	  var s = gField.value ;
	  {
	  re = /\./g;
	  r = s.replace(re, "");
	 return(r);
	 
	  }
} 

function iscurrency(gField)
{
	var data = gField.value
	var isNegative=false ;
	if  (data.substring(0,1) == "-" )
		{
			isNegative = true ;
		}
	
	data = replace(data, " " , "") ;
	data = replace(data, "." , "") ;
	data = replace(data, "-" , "") ;

	if (isNegative==true)
		{
			data = "-" + data ;
		}

	return( data )
		
}


 function replace(string,text,by)
  {
 // Replaces text with by in string
     var strLength = string.length, txtLength = text.length;
     if ((strLength == 0) || (txtLength == 0)) return string;

     var i = string.indexOf(text);
     if ((!i) && (text != string.substring(0,txtLength))) return string;
     if (i == -1) return string;

     var newstr = string.substring(0,i) + by;

     if (i+txtLength < strLength)
         newstr += replace(string.substring(i+txtLength,strLength),text,by);

     return newstr;
 }

function rediretta()
{
	if ( top.location.href == self.location.href )
		{
			top.location.href = "/budget/default.asp" ;
		}	
		
}


function isDate1(gField, warnmessage ) {
      var inputStr = gField.value

	  if ( inputStr == "" ) 
	{
	  	//  alert( "Il campo e' obbligatorio") ;	
		 return true ;
	}
	  
      var delim1 = inputStr.indexOf("/")
      var delim2 = inputStr.lastIndexOf("/")

     if (delim1 != -1 && delim1 == delim2 ||
       delim1 == -1 && delim2 == -1) 
	   {
	   		if (warnmessage=='true')
			{
		     	alert("Immettere la data nel formato (gg/mm/aaaa)")
  	           gField.focus()
  		       gField.select()
			}

      return false }

     if (delim1 != -1) {
        var d = parseInt(inputStr.substring(delim1 - 1,delim1),10)
        var dd = parseInt(inputStr.substring(0,delim1),10)
        var m = parseInt(inputStr.substring(delim1 + 2,delim2),10)
        var mm = parseInt(inputStr.substring(delim1 + 1,delim2),10)
        var y = parseInt(inputStr.substring(delim2 + 2),10)
        var yy = parseInt(inputStr.substring(delim2 + 3),10)
        var yyy = parseInt(inputStr.substring(delim2 + 4),10)
        var yyyy = parseInt(inputStr.substring(delim2 + 1,inputStr.length),10) }

    if (isNaN(m) || isNaN(mm) || isNaN(d) || isNaN(dd) || isNaN(y) || isNaN(yy) || isNaN(yyy) || isNaN(yyyy)) {
	   		if (warnmessage=='true')
				{
		        alert("Immettere la data nel formato (gg/mm/aaaa)")
  				gField.focus()
		        gField.select()
				}
	
    return false }

    if (mm < 01 || mm > 12) 
	{
		if (warnmessage=='true')
				{
		    	    alert("I mesi devono essere immessi in un range da 01 (Gennaio) a 12 (Dicembre).")
        		    gField.focus()
		            gField.select()
				}	
		    return false
	}

    if (dd < 1 || dd > 31)
	 {
	 	   		if (warnmessage=='true')
				{

			        alert("I giorni devono essere immessi in un range da 01 a 31 (dipendenti dal mese e dall'anno).")
           			gField.focus()
		           gField.select()
				 }  
    	return false
	 }

    if (!checkMonthLength(mm,dd) && warnmessage=='true' ) {
           gField.focus()
           gField.select()
    return false }

    if (mm == 2) {
    if (!checkLeapMonth(mm,dd,yyyy) && warnmessage=='true') {
          gField.focus()
          gField.select()
    return false }
         }
    return true
}

function checkMonthLength(mm,dd) {
    var months = new
         Array("","Gennaio","Febbraio","Marzo","Aprile","Maggio","Giugno","Luglio","Agosto","Settembre","Ottobre","Novembre","Dicembre")
    if ((mm == 4 || mm == 6 || mm == 9 || mm == 11) && dd > 30) 
	{
	   		if (warnmessage=='true')
				{
			       alert(months[mm] + " ha solo 31 giorni. Modifica la data. ")
				 }  
       return false
    } else if (dd > 31) {
		   		if (warnmessage=='true')
				{
			       alert(months[mm] + " ha solo 31 giorni. Modifica la data. ")
				 }  
       return false
    }
    return true
}

function checkLeapMonth(mm,dd,yyyy) {
    if (yyyy % 4 > 0 && dd > 28) 
	{
		   		if (warnmessage=='true')
				{

		    	   alert("Febbraio del " + yyyy + " ha solo 28 giorni. Modifica la data. ")
				 }  
	      return false
   }
    else if (dd > 29) 
	{
		   		if (warnmessage=='true')
				{
			       alert("Febbraio del " + yyyy + " ha solo 29 giorni. Modifica la data. ")		
				}   
      return false
   }
    return true
}




// Inizio Funzione isEmpty
function isEmpty(gField,warnmessage)
{
	// testa se un campo e' vuoto effettuando un trim degli spazi
	// return true se il campo e' vuoto
	// return false se il campo NON e' vuoto
	
	// OnSelect determina se il tipo di campo accetta il select sul campo
	// TipoCampoPrevisto sono i tipi di campo gestiti dalla funzione
	// per ora(text, hidden, select,textarea)
	
	var rc ;
	var OnSelect = false ;
	var TipoCampoPrevisto = false ;
	var msg = "" ;

	if (gField.type == "text"  || gField.type == "hidden" ) 
	{
		var data = gField.value	
		OnSelect = true ;
		TipoCampoPrevisto = true ;
	}

	if (gField.type == "select-one")
	{
		var opzSelected = gField.selectedIndex ;
		var txtSelected = gField.options[opzSelected].value ;
		var data = txtSelected
		OnSelect = false ;
		TipoCampoPrevisto = true ;
	}
	
	if (gField.type == "textarea")
	{
		var data = gField.value
		OnSelect = true ;
		TipoCampoPrevisto = true ;
	}

	if (TipoCampoPrevisto == false )
	{
		msg += "La funzione isEmpty non riconosce il tipo di campo: " + gField.type
		msg += "\n"
		msg += "appartenente all'oggetto: " + gField.name 
		alert(msg ) ;
		return(false)
	
	}

	data = Trim(data) 
	if ( data.length == 0)
	{
		if (warnmessage=='true')
		{
			alert("Il campo e' obbligatorio") ;
			 
			gField.focus() ;
			if ( OnSelect == true )
			{
				gField.select() ;
			}	
		}
	
		return (true) ;	
	}
	else
	{
		return(false)
	}	

}
// Fine Funzione isEmpty



function Trim(orgString){
  return LTrim(RTrim(orgString))
}

function LTrim(orgString){
  return orgString.replace(/^\s+/,'')
}

function RTrim(orgString){
  return orgString.replace(/\s+$/,'')
}



function CompareDate(startDate, endDate)
{

// la funziona compare 2 date nel formato dd-mm-yyyy
// facendo la sottrazione tra le 2 
// se il risultato della sottrazione e' positivo la 
// prima data startDate e' inferiore alla seconda
// se il risultato della sottrazione e' 0
// le due date sono uguali
// se il risultato della sottrazione e' negativo la 
// seconda data endDate e' inferiore alla prima

	var DayStartDate =  startDate.substr(0,2) 
	var MonthStartDate =  startDate.substr(3,2) 
	var YearStartDate =  startDate.substr(6,4) 
	var dtStartDate = new Date( YearStartDate, MonthStartDate, DayStartDate)
	
	var DayEndDate =  endDate.substr(0,2) 
	var MonthEndDate =  endDate.substr(3,2) 
	var YearEndDate =  endDate.substr(6,4) 
	
	var dtEndDate = new Date( YearEndDate, MonthEndDate, DayEndDate)
	
	var diff = parseInt(dtEndDate - dtStartDate )
	
	return(diff)

}

function AnnoDataValido(gField, warnmessage)
{
	// gField - campo data in formato gg/mm/aaaa
	// se l'anno e' minore di 1754 o maggiore di 9998 (limite sql server)
	// la data / anno non e' valido , restituisce false
	// la funzione deve girare dopo isDate1
	var sData = gField.value ;
	var nAnno = sData.substr(6,4)
	var rc 
	if ( nAnno < 1900 || nAnno > 2078 )
	{
		rc = false
		if (warnmessage='true')
		{
			alert("Anno Non Valido")
			gField.focus() ;
			gField.select() ;
		}
	}
	else
	{
		rc = true
	}
		
	return(rc)	
	


}




function CheckIP(pIP)
{

	var rc = isNumberIP(pIP) 
	if ( rc == false ) { return ( false ) }
	var rc = ContaSepIP(pIP)
 	if ( rc == false ) { return ( false ) } 
	var rc = ValueIp(pIP)
return rc
}


function isNumberIP(gField) 
{
 // solo numeri e punti sono validi per un indirizzo IP
  var numStr="0123456789./";
  var thischar;
  var counter = 0;
  var data ;
  data = gField.value ;
 
  for (var i=0; i < data.length; i++)  {
      thischar = data.substring(i, i+1);
      if (numStr.indexOf(thischar) != -1)
         counter ++;
		 
  }
  if (counter == data.length) 
  	{
    	 // All characters are numbers
	     // alert("Number is OK.");
		 return (true) ;
	}
	  else
    //  alert("Number is not valid.");
	alert("Il campo accetta solo valori numerici separati da punti e/o barra finale") ;
	gField.focus() ;
	gField.select() ;
	return (false) ;
}

function ContaSepIP(gField) 
{
	// conta il numero del separatore dell'ip ( devono essere uguali a 3 )
	
	var thischar;
	var counter = 0;
	var counter1 = 0;
    var data ;
	data = gField.value ;
    for (var i=0; i < data.length; i++)
		{
      		thischar = data.substring(i, i+1);
			 
		    if (thischar== ".")
	  	    	{
				   counter ++;
				   
		   	    }
			if (thischar=="/")
				{
				  counter1 ++;
				}
		}
		
	  if ((counter == 3) && ((counter1 == 0) || (counter1 == 1)))
  		{
		  	return (true) ;
		}
	    else
		{
		
 			alert("Numero di separatori errato\nsono validi tre punti e una eventuale barra finale") ;
			gField.focus() ;
			gField.select() ;
			return (false) ;			
		}
}


function ValueIp(gField)
{
	/* Controlla se il valore dell'IP e' comprese tra 0 e 254 
	   Controlla se in caso di barra finale, dopo la barra non ci sia un valore
	   minore di 8 e maggiore di 32 */
	var data ;
	var arIP
	var thisChar = "/"
	
	data = gField.value ;
	arIP = data.split(".");
	for (var i=0; i < arIP.length; i++)
	{
		
		if (i == 3)
		{
			
			if (arIP[i].indexOf(thisChar) != -1)
			{
				
				var ar1IP = arIP[i].split("/");
					
					if (ar1IP[0] < 0 || ar1IP[0] > 254)
					{
						
						alert("Valore IP non valido") ;
						gField.focus() ;
						gField.select() ;
						return (false) ;		
					}
					if (ar1IP[1] < 8 || ar1IP[1] > 32)
					{
						alert("Valore IP non valido") ;
						gField.focus() ;
						gField.select() ;
						return (false) ;		
					}
			}
		}
		if (i < 3)
		{
			
			if (arIP[i] < 0 || arIP[i] > 254)
			{
				
				alert("Valore IP non valido") ;
				gField.focus() ;
				gField.select() ;
				return (false) ;		
			}
		} 
		
 			
			if (arIP[i] < 0 || arIP[i] > 254)
			{
				
				alert("Valore IP non valido") ;
				gField.focus() ;
				gField.select() ;
				return (false) ;		
			}
		
		
		
		/*if (arIP[i] < 0 || arIP[i] > 254)
		{
			alert("Valore IP non valido") ;
			gField.focus() ;
			gField.select() ;
			return (false) ;		
		}*/
	}
	
	return( true)
}



function contenutoSelect(nomedellaform, nomedellalistbox, valueORtext)
{

	// recupera il valore o il testo selezionato in una select box
	// input:
	// nomedellaform
	// nomedellalistbox
	// valueORtext se v recupera valore, se t recupera testo
	
	var myFormName = nomedellaform ;
	var myElementName = nomedellalistbox ;
	var valueORtext = valueORtext.toLowerCase();
	var rc = "" ;
	var opzSelected = document.forms[myFormName][myElementName].selectedIndex ;
	var txtSelected = document.forms[myFormName][myElementName].options[opzSelected].text;
	var valueSelected = document.forms[myFormName][myElementName].options[opzSelected].value;
	if (valueORtext == 'v')
	{
		rc = valueSelected ;
	}
	if (valueORtext == 't')
	{
		rc = txtSelected ;
	}
	 
	return( rc );
}

// ---------------------------------------------------------------------------------------------
// TestRequiredFields - FormData, FieldsList, Output
// ---------------------------------------------------------------------------------------------
// Controlla se i campi di una form passati come parametro sono stati compilati
// Restituisce: true se sono tutti compilati correttamente, false almeno uno non e' compilato
//              e una lista con i nomi dei campi vuoti dentro a Output
// ---------------------------------------------------------------------------------------------
// Parametri:
// FormData:    nome della Form da cui controllare i campi
// FieldsList:  Array di stringhe contenente i dati dei campi da controllare
//              Formato: "ID, Name, Max, Min"
//                ID = ID o Name del campo
//                Name = Nome del campo (viene restituito in caso non sia compilato)
//                Max = Lunghezza massima del campo
//                Min = Lunghezza minima del campo
// Output:      Object (creato con pippo = new Object()) che conterra' una stringa con l'elenco
//              dei campi non compilati dentro alla proprietà message (pippo.message = ...).
// CheckSingle: true se la funzione deve ritornare solo il primo campo non compilato
//              false per controllarli tutti
//              Ritorna inoltre l'ID del campo dentro alla proprietà tag (pippo.tag = ...)
// DA REVISIONARE, NON SEMPRE IL CONTROLLO SUL MINIMO E MASSIMO FUNZIONA CORRETTAMENTE
// ---------------------------------------------------------------------------------------------
function TestRequiredFields(FormData, FieldsList, Output, CheckSingle)
{
    var Field;
    var TestField;
    
    var TestString;
    var nEmpty = 0;
    
    var minl;
    var maxl;

    Output.message = "";
    for (var i = 0; i < FieldsList.length; i++)
    {
        Field = FieldsList[i].split(",");
//        TestString = document.all.namedItem(Field[0]).value;  // Solo su IE
        TestString = "TestField = FormData." + Field[0];
        eval(TestString);  // Per compatibilita' con browser diversi da IE
        TestString = TestField.value;

        minl = parseInt(Field[3]);
        maxl = parseInt(Field[2]);
        if ((TestString == "") || 
        ((TestString.length < minl) || 
        ( (TestString.length > maxl) && (maxl > 0) ) ) ||
        ((TestString.length < maxl) && (minl == 0))) 
        {
            if ((i > 0) && ((i + 1) <= FieldsList.length) && (Output.message.length > 0))
                Output.message += ",\n";
            Output.message += Field[1];
            
            if ((minl > 0) || (maxl > 0))            
            {
                if ((minl == maxl) && (TestString.length != maxl))
                    Output.message += " - Lunghezza campo = " + Field[2];
                else if ((TestString.length > maxl) && (maxl > 0))
                    Output.message += " - Lunghezza massima = " + Field[2];
                else if (TestString.length < minl)
                    Output.message += " - Lunghezza minima = " + Field[3];
            }
            
            nEmpty++;
            if (CheckSingle)
            {
                Output.tag = Field[0];
                return false;
            }
        }
    }

    if (nEmpty > 0)
        return false;
    else
        return true;
}

function Oggi()
{
    var d, oggi;
    d = new Date();
    var Giorno, Mese, Anno;
    
    Giorno = d.getDate();
    Mese = d.getMonth() + 1;
    Anno = d.getFullYear();
    
    if (Giorno.toString(10).length == 1) Giorno = "0" + Giorno;
    if (Mese.toString(10).length == 1) Mese = "0" + Mese;
    oggi = Giorno + "/" + Mese + "/" + Anno;
    return oggi;
}