/****************************************************************
 * La funzione controlla il formato data gg/mm/aaaa utilizzando 
 * la funzione parseString, che controlla se sono stati inseriti
 * caratteri al di fuori di '/' invece che numeri.
 ****************************************************************/

function checkDate(str) {
	if (str.value=='') 
	{
		return '';
	}
	var msg='Data non valida. Usare il formato gg/mm/aaaa.';
	if (str.value.length == 10)
	{
		var d0=parseString(1,str.value,'/');
		var m0=parseString(2,str.value,'/');
		var y0=parseString(3,str.value,'/');
	
		if (isNaN(d0)||isNaN(m0)||isNaN(y0)) 
		{
			alert(msg);
			str.focus(); 
			return false;
		}
		var d=parseInt(parseString(1,str.value,'/'),10);
		var m=parseInt(parseString(2,str.value,'/'),10);
		var y=parseInt(parseString(3,str.value,'/'),10);
				
		/*if (y<50) y += 2000;
		if (y<100) y += 1900;
		if (y<1901 || y>2100) */
		if (y<1900)
		{
			alert(msg);
			str.focus();
			return false;
		}

		if (m<1 || m>12 ) 
		{
			alert(msg);
			str.focus();
			return false;
		}
		var max=31;
		if (m==2) 
	  	{
		   max=28;
		   if(y%4==0 && !(y%400==0)) max=29;
		} 
		else 
		{
		   if (';4;6;9;11;'.indexOf(';'+m+';',0)>-1) max=30;
		}
		if (d<1 || d>max ) 	
		{
			alert(msg);
			str.focus(); 
			return false;
		}
		if (d<10) d='0'+d;
		if (m<10) m='0'+m;
		return d+'/'+m+'/'+y;
	}
	else
	{
		alert(msg);
		str.focus(); 
		return false;
	}
}

function parseString(pos,str,del) {
	var lun_del = del.length;
	var lun_str = str.length;
	var returnString= '';
	var p0=1;
	var p1=1;
	var i=0;
	while (i < pos && p1>0) 
	{
	  i++;
	  p1=str.indexOf(del,p0-1)+1;
	  if (i==pos) 
	  {
	    if (p1>0) 
	    {
	       returnString = str.substring(p0-1,p1-1);
	    } 
      else 
      {
		     returnString = str.substring(p0-1,lun_str);
		  }
	    break;
	 }
         p0=p1+lun_del;
       }
	return returnString;
}

/****************************************************************
 * La funzione controlla se il valore passato è un Numero
 ****************************************************************/
function checkNumber(str) 
{
  if (str.value.length != 0)
  {
      if (isNaN(str.value)) 
      {
          alert("Inserire valori Numerici");
          str.focus();
          return false;
      }
      else return true;
  }    
}

/****************************************************************
 * La funzione controlla se il valore passato è un CAP (Codice Avviamento Postale) valido
 ****************************************************************/
function checkCAP(str) 
{
  if (str.value.length != 0)
  {
	if (isNaN(str.value)) 
	{
		alert("Inserire valori Numerici");
		str.focus();
		return false;
	}
	if (str.value.length != 5)
	{
		alert("Il CAP deve essere composto da 5 numeri.");
		str.focus();
		return false;
	}
	if (parseInt(str.value,10) < 100)
	{
		alert("Il CAP minimo è 00100.");
		str.focus();
		return false;
	}

	return true;
  }    
	else return true;
}

/****************************************************************
 * La funzione controlla se il valore passato è un Anno Valido (AAAA)
 ****************************************************************/
function checkYear(str) {
	if (str.value=='') return '';
	//if (checkNumber(str) == true) return '';
	var y=parseInt(str.value,10)
	var msg='Anno non valido.';
	if (isNaN(y)) 
	{
        alert(msg);
        str.focus();
        return false;
	}
	if ((str.value.length == 4) && (str.value>=1900))
	{
      return y;
	}			
  else 
	{
		  alert(msg);
	    str.focus();
	    return false;
  }
}

/****************************************************************
 * La funzione Imposta nei Preferiti la Pagina Visualizzata
 ****************************************************************/	
function addbookmark() 
{
    if (navigator.appName.substring(0,8)!='Microsof') {
      alert('La funzione è disponibile solo per Internet Explorer.\n Premi CTRL+D per Netscape!')
    }
    if (navigator.appName.substring(0,8) == 'Microsof') 
    {
      if (parseInt(navigator.appVersion) >= 4) 
      {
        var URL=location.href;
        var Title="Processo Telematico";
        window.external.AddFavorite(URL,Title);
      }
    }
}

/****************************************************************
 * La funzione Imposta come HomePage la pagina
 ****************************************************************/
function homepage() 
{
    if (document.all) 
    {
      document.body.style.behavior= 'URL(#default#homepage)';
      document.body.setHomePage(location.href);
    } 
    else 
    { 
      alert("La funzione e' disponibile solo per Internet Explorer!")
    }
}// -->    

/****************************************************************
 * La funzione chiede conferma quando si clicca sull'immagine Home 
 * se si desidera chiudere la sessione.
 ****************************************************************/
function conferma(thislink, linkhref) {
        if (confirm("Richiesta chiusura dell'area riservata di PolisWeb. Confermi?"))
            thislink.href=linkhref;
        else
            thislink.href="javascript:void(0)";
}

/****************************************************************
 * La funzione chiede conferma quando si clicca sul link per  
 * rimuovere dalla sessione l'utente selezionato.
 ****************************************************************/
function confCancSessione(thislink) {
    if (confirm("Richiesta la rimozione della Sessione per l'utente selezionato. Confermi ?"))
        return true;
    else
        return false;
}

/****************************************************************
 * La funzione chiede conferma quando si clicca sul link per  
 * cambiare il tribunale selezionato.
 ****************************************************************/
function impostaTribunale(thislink) {
    if (confirm("Richiesta di impostazione dell'Ufficio Giudiziario selezionato. Confermi ?"))
        return true;
    else
        return false;

}

/**
 * Valida la stringa Ascii
 * @param s stringa da controllare
 * @return Carattere non previsto
 */
function validaStringaASCII(s,name) 
{
    for (var j = 0;j < s.value.length;j++) {
    
        var alphaa = s.value.charAt(j);
		var hh = alphaa.charCodeAt(0);
		if (! ((hh == 32) || (hh == 38) || (hh == 39) || 
            (hh >= 44 && hh <= 59) || (hh == 64) || (hh > 64 && hh<91) || (hh > 96 && hh<123)))
        {
            alert("Il "+name+" ha un carattere non previsto: " + s.value.charAt(j));
            s.focus();
            return false;
        }
    }
    return true;
}

/****************************************************************
 * La funzione Controlla che la lunghezza del campo passato
 * rientri in un range impostato con minCar e maxCar
 * str : e' l'oggetto su cui controllare la lunghezza
 * name : e' la descrizione dell'oggetto
 * minCar : e' la lunghezza minima della stringa
 * maxCar : e' la lunghezza massima della stringa
 ****************************************************************/ 
function checkLength(str,name,minCar,maxCar) 
{
	if (str.value.length != 0)
	{
        // Controlla i caratteri della stringa
        if (!validaStringaASCII(str,name)) {
            return false;
        }

        if (!((str.value.length >= minCar) && (str.value.length <= maxCar)))
        {
          alert("Il "+name+" deve avere un minimo\ndi "+minCar+" ed un massimo di "+maxCar+" caratteri.");
          str.focus();
          return false;
        }
    }    
} 

// ===================================================================
// Author: Matt Kruse <matt@mattkruse.com>
// WWW: http://www.mattkruse.com/
//
// NOTICE: You may use this code for any purpose, commercial or
// private, without any further permission from the author. You may
// remove this notice from your final code if you wish, however it is
// appreciated by the author if at least my web site address is kept.
//
// You may *NOT* re-distribute this code in any way except through its
// use. That means, you can include it in your product, or your web
// site, or any other form where the code is actually being used. You
// may not put the plain javascript up on your site for download or
// include it in your javascript libraries for download. 
// If you wish to share this code with others, please just point them
// to the URL instead.
// Please DO NOT link directly to my .js files from your site. Copy
// the files to your server and use them there. Thank you.
// ===================================================================


// ------------------------------------------------------------------
// These functions use the same 'format' strings as the 
// java.text.SimpleDateFormat class, with minor exceptions.
// The format string consists of the following abbreviations:
// 
// Field        | Full Form          | Short Form
// -------------+--------------------+-----------------------
// Year         | yyyy (4 digits)    | yy (2 digits), y (2 or 4 digits)
// Month        | MMM (name or abbr.)| MM (2 digits), M (1 or 2 digits)
// Day of Month | dd (2 digits)      | d (1 or 2 digits)
// Hour (1-12)  | hh (2 digits)      | h (1 or 2 digits)
// Hour (0-23)  | HH (2 digits)      | H (1 or 2 digits)
// Hour (0-11)  | KK (2 digits)      | K (1 or 2 digits)
// Hour (1-24)  | kk (2 digits)      | k (1 or 2 digits)
// Minute       | mm (2 digits)      | m (1 or 2 digits)
// Second       | ss (2 digits)      | s (1 or 2 digits)
// AM/PM        | a                  |
//
// NOTE THE DIFFERENCE BETWEEN MM and mm! Month=MM, not mm!
// Examples:
//  "MMM d, y" matches: January 01, 2000
//                      Dec 1, 1900
//                      Nov 20, 00
//  "M/d/yy"   matches: 01/20/00
//                      9/2/00
//  "MMM dd, yyyy hh:mm:ssa" matches: "January 01, 2000 12:30:45AM"
// ------------------------------------------------------------------

var MONTH_NAMES=new Array('Gennaio','Febbraio','Marzo','Aprile','Maggio','Giugno','Luglio','Agosto','Settembre','Ottobre','Novembre','Dicembre','Geb','Feb','Mar','Apr','Mag','Giu','Lug','Ago','Set','Ott','Nov','Dec');
function LZ(x) {return(x<0||x>9?"":"0")+x}

// ------------------------------------------------------------------
// isDate ( date_string, format_string )
// Returns true if date string matches format of format string and
// is a valid date. Else returns false.
// It is recommended that you trim whitespace around the value before
// passing it to this function, as whitespace is NOT ignored!
// ------------------------------------------------------------------
function isDate(val,format) {
	var date=getDateFromFormat(val,format);
	if (date==0) { return false; }
	return true;
	}

// -------------------------------------------------------------------
// compareDates(date1,date1format,date2,date2format)
//   Compare two date strings to see which is greater.
//   Returns:
//   1 if date1 is greater than date2
//   0 if date2 is greater than date1 of if they are the same
//  -1 if either of the dates is in an invalid format
// -------------------------------------------------------------------
function compareDates(date1,dateformat1,date2,dateformat2) {
	var d1=getDateFromFormat(date1,dateformat1);
	var d2=getDateFromFormat(date2,dateformat2);
	if (d1==0 || d2==0) {
		return -1;
		}
	else if (d1 > d2) {
		return 1;
		}
	return 0;
	}

// ------------------------------------------------------------------
// formatDate (date_object, format)
// Returns a date in the output format specified.
// The format string uses the same abbreviations as in getDateFromFormat()
// ------------------------------------------------------------------
function formatDate(date,format) {
	format=format+"";
	var result="";
	var i_format=0;
	var c="";
	var token="";
	var y=date.getYear()+"";
	var M=date.getMonth()+1;
	var d=date.getDate();
	var H=date.getHours();
	var m=date.getMinutes();
	var s=date.getSeconds();
	var yyyy,yy,MMM,MM,dd,hh,h,mm,ss,ampm,HH,H,KK,K,kk,k;
	// Convert real date parts into formatted versions
	var value=new Object();
	if (y.length < 4) {y=""+(y-0+1900);}
	value["y"]=""+y;
	value["yyyy"]=y;
	value["yy"]=y.substring(2,4);
	value["M"]=M;
	value["MM"]=LZ(M);
	value["MMM"]=MONTH_NAMES[M-1];
	value["d"]=d;
	value["dd"]=LZ(d);
	value["H"]=H;
	value["HH"]=LZ(H);
	if (H==0){value["h"]=12;}
	else if (H>12){value["h"]=H-12;}
	else {value["h"]=H;}
	value["hh"]=LZ(value["h"]);
	if (H>11){value["K"]=H-12;} else {value["K"]=H;}
	value["k"]=H+1;
	value["KK"]=LZ(value["K"]);
	value["kk"]=LZ(value["k"]);
	if (H > 11) { value["a"]="PM"; }
	else { value["a"]="AM"; }
	value["m"]=m;
	value["mm"]=LZ(m);
	value["s"]=s;
	value["ss"]=LZ(s);
	while (i_format < format.length) {
		c=format.charAt(i_format);
		token="";
		while ((format.charAt(i_format)==c) && (i_format < format.length)) {
			token += format.charAt(i_format++);
			}
		if (value[token] != null) { result=result + value[token]; }
		else { result=result + token; }
		}
	return result;
	}
	
// ------------------------------------------------------------------
// Utility functions for parsing in getDateFromFormat()
// ------------------------------------------------------------------
function _isInteger(val) {
	var digits="1234567890";
	for (var i=0; i < val.length; i++) {
		if (digits.indexOf(val.charAt(i))==-1) { return false; }
		}
	return true;
	}
function _getInt(str,i,minlength,maxlength) {
	for (var x=maxlength; x>=minlength; x--) {
		var token=str.substring(i,i+x);
		if (token.length < minlength) { return null; }
		if (_isInteger(token)) { return token; }
		}
	return null;
	}
	
// ------------------------------------------------------------------
// getDateFromFormat( date_string , format_string )
//
// This function takes a date string and a format string. It matches
// If the date string matches the format string, it returns the 
// getTime() of the date. If it does not match, it returns 0.
// ------------------------------------------------------------------
function getDateFromFormat(val,format) {
	val=val+"";
	format=format+"";
	var i_val=0;
	var i_format=0;
	var c="";
	var token="";
	var token2="";
	var x,y;
	var now=new Date();
	var year=now.getYear();
	var month=now.getMonth()+1;
	var date=now.getDate();
	var hh=now.getHours();
	var mm=now.getMinutes();
	var ss=now.getSeconds();
	var ampm="";
	
	while (i_format < format.length) {
		// Get next token from format string
		c=format.charAt(i_format);
		token="";
		while ((format.charAt(i_format)==c) && (i_format < format.length)) {
			token += format.charAt(i_format++);
			}
		// Extract contents of value based on format token
		if (token=="yyyy" || token=="yy" || token=="y") {
			if (token=="yyyy") { x=4;y=4; }
			if (token=="yy")   { x=2;y=2; }
			if (token=="y")    { x=2;y=4; }
			year=_getInt(val,i_val,x,y);
			if (year==null) { return 0; }
			i_val += year.length;
			if (year.length==2) {
				if (year > 70) { year=1900+(year-0); }
				else { year=2000+(year-0); }
				}
			}
		else if (token=="MMM"){
			month=0;
			for (var i=0; i<MONTH_NAMES.length; i++) {
				var month_name=MONTH_NAMES[i];
				if (val.substring(i_val,i_val+month_name.length).toLowerCase()==month_name.toLowerCase()) {
					month=i+1;
					if (month>12) { month -= 12; }
					i_val += month_name.length;
					break;
					}
				}
			if ((month < 1)||(month>12)){return 0;}
			}
		else if (token=="MM"||token=="M") {
			month=_getInt(val,i_val,token.length,2);
			if(month==null||(month<1)||(month>12)){return 0;}
			i_val+=month.length;}
		else if (token=="dd"||token=="d") {
			date=_getInt(val,i_val,token.length,2);
			if(date==null||(date<1)||(date>31)){return 0;}
			i_val+=date.length;}
		else if (token=="hh"||token=="h") {
			hh=_getInt(val,i_val,token.length,2);
			if(hh==null||(hh<1)||(hh>12)){return 0;}
			i_val+=hh.length;}
		else if (token=="HH"||token=="H") {
			hh=_getInt(val,i_val,token.length,2);
			if(hh==null||(hh<0)||(hh>23)){return 0;}
			i_val+=hh.length;}
		else if (token=="KK"||token=="K") {
			hh=_getInt(val,i_val,token.length,2);
			if(hh==null||(hh<0)||(hh>11)){return 0;}
			i_val+=hh.length;}
		else if (token=="kk"||token=="k") {
			hh=_getInt(val,i_val,token.length,2);
			if(hh==null||(hh<1)||(hh>24)){return 0;}
			i_val+=hh.length;hh--;}
		else if (token=="mm"||token=="m") {
			mm=_getInt(val,i_val,token.length,2);
			if(mm==null||(mm<0)||(mm>59)){return 0;}
			i_val+=mm.length;}
		else if (token=="ss"||token=="s") {
			ss=_getInt(val,i_val,token.length,2);
			if(ss==null||(ss<0)||(ss>59)){return 0;}
			i_val+=ss.length;}
		else if (token=="a") {
			if (val.substring(i_val,i_val+2).toLowerCase()=="am") {ampm="AM";}
			else if (val.substring(i_val,i_val+2).toLowerCase()=="pm") {ampm="PM";}
			else {return 0;}
			i_val+=2;}
		else {
			if (val.substring(i_val,i_val+token.length)!=token) {return 0;}
			else {i_val+=token.length;}
			}
		}
	// If there are any trailing characters left in the value, it doesn't match
	if (i_val != val.length) { return 0; }
	// Is date valid for month?
	if (month==2) {
		// Check for leap year
		if ( ( (year%4==0)&&(year%100 != 0) ) || (year%400==0) ) { // leap year
			if (date > 29){ return false; }
			}
		else { if (date > 28) { return false; } }
		}
	if ((month==4)||(month==6)||(month==9)||(month==11)) {
		if (date > 30) { return false; }
		}
	// Correct hours value
	if (hh<12 && ampm=="PM") { hh=hh-0+12; }
	else if (hh>11 && ampm=="AM") { hh-=12; }
	var newdate=new Date(year,month-1,date,hh,mm,ss);
	return newdate.getTime();
	}

function checkDateTime(valore) {

    var data = valore.value;
    var returnVal = true;
    var msg='Data non valida. Usare il formato gg/mm/aaaa hh:mi.';

	if (data=='') 
	{
		return '';
	}

//    alert('data: ' + data);

//    if (isDate(data, "dd/MM/yyyy HHmm") ||
//      isDate(data, "dd/MM/yyyy HH:mm") ||
//      isDate(data, "dd/MM/yyyy HH:mm:ss") ) 
    if (isDate(data, "dd/MM/yyyy HH:mm"))
    {
        returnVal = true;
    }
	else 
    {
        returnVal = false;
        alert(msg);
    }

    return returnVal;
}

function checkDateBefore(str) {

	ret = checkDate( str);
	if ( ret == false )
		return false;
		
	timeToday = new Date();
	dayChk = str.value.substr(0,2);
	monthChk = parseInt(str.value.substr(3,2),10) - 1;
	yearChk = str.value.substr(6,4);
	timeChk = new Date( yearChk, monthChk, dayChk );
	
	if ( timeToday <= timeChk ) 
	{
		alert("Data inserita successiva alla data odierna");
		str.focus(); 
		return false;
	}
}

// Verifica che la data inserita non sia precedente alla data odierna
function checkDateAfter(str) {

	ret = checkDate( str);
	if ( ret == false )
		return false;
		
	timeToday = new Date();
	dayChk = str.value.substr(0,2);
	monthChk = parseInt(str.value.substr(3,2),10) - 1;
	yearChk = str.value.substr(6,4);
	timeChk = new Date( yearChk, monthChk, dayChk );
	
	if ( timeToday >= timeChk ) 
	{
		alert("Data inserita precedente alla data odierna");
		str.focus(); 
		return false;
	}
}

// Verifica che la data e ora inserita non sia precedente all'ora di sistema
function checkDateTimeAfter(str) {

	ret = checkDateTime( str);
	if ( ret == false )
		return false;
		
	timeToday = new Date();
	dayChk = str.value.substr(0,2);
	monthChk = parseInt(str.value.substr(3,2),10) - 1;
	yearChk = str.value.substr(6,4);
	minChk = str.value.substr(11,2);
	secChk = str.value.substr(14,2);
	timeChk = new Date( yearChk, monthChk, dayChk, minChk, secChk );
	
	if ( timeToday > timeChk ) 
	{
		alert("Data inserita precedente alla data odierna");
		str.focus(); 
		return false;
	}
}
