function checkField(frm, Fname, FType, FErr, FObbl, FMin, FMax)
// Variabili:   Nome form (this)
//              Nome variabile
//              Tipo variabile: a=alfanum.
//                              d oppure dGMA=data italiana;
//                              dMGA=data inglese;
//                              e=email;
//                              f=nome file;
//                              fi=nome file immagine;
//                              i=p.iva;
//                              n=numerico;
//				Campo obbligatorio (0=no; 1=sė, 2=Codice)
//				Valore minimo (x date formato GG/MM/AAAA)
//				Valore massimo (x date formato GG/MM/AAAA)
	{
	var FmtDate='GMA'
	if (FType=='dGMA' || FType=='dMGA')
		{
		FmtDate=FType.substring(1,4)
		FType='d'
		}
	var FCtr=''
	var TypeReq=0
	var frmPass='['+frm+']'
	if (frmPass.indexOf('[[object') == 0)
		{
		FCtr=frm.elements[Fname].value;
		}
	else
		{
		FCtr=document.forms[frm].elements[Fname].value;
		TypeReq=1
		}
	if (FObbl!='0')
		{
		if (FCtr == '')
			{
			alert (FErr)
			checkFieldFocus(frm, Fname, TypeReq)
			return true
			}
		if (FObbl=='2')
			{
			var illegalChars= /[\(\)\<\>\,\;\:\\\/\"\[\]\*\?\^\ \#\%]/
			if (FCtr.match(illegalChars))
				{
				alert (FErr)
				checkFieldFocus(frm, Fname, TypeReq)
				return true
				}
			}
		}
	switch(FType)
		{
// Alfanumerico
		case 'a':
			{
			var FCtrMM=FCtr
			var FCtrMin=FMin
			var FCtrMax=FMax
			break;
			}
// Data
		case 'd':
			{
			if (FMin=='') FMin='01/01/1901'
			if (FMax=='') FMax='31/12/2050'
			if ((FCtr.indexOf('/', 2) == -1) || (FCtr.indexOf('/', 5) == -1)) 
				{
				alert (FErr)
				checkFieldFocus(frm, Fname, TypeReq)
				return true
				}
			var sdate = FCtr.split('/');
			if (FmtDate=='MGA')
				{
				var chkDate = new Date(Date.parse((Math.abs(sdate[0]))+'/'+(Math.abs(sdate[1]))+'/'+(Math.abs(sdate[2]))));
				}
			else
				{			
				var chkDate = new Date(Date.parse((Math.abs(sdate[1]))+'/'+(Math.abs(sdate[0]))+'/'+(Math.abs(sdate[2]))));
				}
			var Ycal = chkDate.getYear();
			var Cent = Ycal + ((Ycal > 100) ? 0 : 1900);
			var FCtrMM=(Cent*10000)+((chkDate.getMonth()+1)*100)+(chkDate.getDate());
			var cmpDate=((chkDate.getMonth()+1)+'/'+(chkDate.getDate())+'/'+(Cent));
			if (FmtDate=='MGA')
				{
				var indate2=((Math.abs(sdate[0]))+'/'+(Math.abs(sdate[1]))+'/'+(Math.abs(sdate[2])));
				}
			else
				{
				var indate2=((Math.abs(sdate[1]))+'/'+(Math.abs(sdate[0]))+'/'+(Math.abs(sdate[2])));
				}
			if (indate2!=cmpDate)
				{
				alert (FErr)
				checkFieldFocus(frm, Fname, TypeReq)
				return true
				}
			if ((FCtr != '') && (!(FMin==null)))
				{
				if (FMin.toLowerCase()=='now')
					{
					var CurrDate=new Date()
					var CurrYear = CurrDate.getYear() 
					CurrYear += (CurrYear < 100) ? 1900 : 0 
					var FCtrMin=(CurrYear*10000)+((CurrDate.getMonth()+1)*100)+(CurrDate.getDate())
					}
				else
					{
					var sdate = FMin.split('/');
					var chkDate = new Date(Date.parse((Math.abs(sdate[1]))+'/'+(Math.abs(sdate[0]))+'/'+(Math.abs(sdate[2]))));
					var Ycal = chkDate.getYear();
					var Cent = Ycal + ((Ycal > 100) ? 0 : 1900);
					var FCtrMin=(Cent*10000)+((chkDate.getMonth()+1)*100)+(chkDate.getDate())
					}
				}
			if ((FCtr != '') && (!(FMax==null)))
				{
				if (FMax.toLowerCase()=='now')
					{
					var CurrDate=new Date()
					var CurrYear = CurrDate.getYear() 
					CurrYear += (CurrYear < 100) ? 1900 : 0 
					var FCtrMax=(CurrYear*10000)+((CurrDate.getMonth()+1)*100)+(CurrDate.getDate())
					}
				else
					{
					var sdate = FMax.split('/');
					var chkDate = new Date(Date.parse((Math.abs(sdate[1]))+'/'+(Math.abs(sdate[0]))+'/'+(Math.abs(sdate[2]))));
					var Ycal = chkDate.getYear();
					var Cent = Ycal + ((Ycal > 100) ? 0 : 1900);
					var FCtrMax=(Cent*10000)+((chkDate.getMonth()+1)*100)+(chkDate.getDate())
					}
				}
			break;
			}
// E-Mail
		case 'e':
			{
			if (!FCtr=='')
				{
				var emailFilter=/^.+@.+\..{2,3}$/;
				if (!(emailFilter.test(FCtr)))
					{ 
					alert (FErr)
					checkFieldFocus(frm, Fname, TypeReq)
					return true
					}
				}
			break;
			}
// Nome file
		case 'f':
			{
			
			break;
			}
// Nome file immagine
		case 'fi':
			{
			var Este = '';
			if (FCtr.length > 4)
				{
				var IniExt = FCtr.length - 4;
				var i=0;
				for(i=IniExt; i<FCtr.length; i++)
					{
					Este = Este + FCtr.charAt(i);
					}
				}
			if ((Este!='.gif') && (Este!='.jpg'))
				{
				alert (FErr)
				checkFieldFocus(frm, Fname, TypeReq)
				return true
				}
			break;
			}
// Partita IVA o Codice Fiscale
		case 'i':
			{
			if (checkPICF(FCtr))
				{
				alert (FErr)
				checkFieldFocus(frm, Fname, TypeReq)
				return true
				}
			break;
			}
// Numerico
		case 'n':
			{
			if (FCtr=='') FCtr='0';
			if (SMig != '')
				{
				if (FCtr.indexOf(SMig)!=-1) FCtr=getReplace(FCtr, SMig, '');
				}
			if (SDec != '.')
				{
				if (FCtr.indexOf(SDec)!=-1) FCtr=getReplace(FCtr, SDec, '.');
				}
			if ((FCtr != '') && (isNaN(FCtr)))
				{
				alert (FErr)
				checkFieldFocus(frm, Fname, TypeReq)
				return true
				}
			if (FMin=='') FMin=FCtr;
			if (FMax=='') FMax=FCtr;
			var FCtrMM=eval(FCtr);
			var FCtrMin=eval(FMin);
			var FCtrMax=eval(FMax);
			if ((!(FCtrMin<=FCtrMM)) || (!(FCtrMM<=FCtrMax)))
				{
				alert (FErr)
				checkFieldFocus(frm, Fname, TypeReq)
				return true
				}
			break;
			}
		}
	if (!(FCtrMin=='' && FCtrMax==''))
		{
		if (!(FCtrMM=='') && (!(FCtrMin==null)))
			{
			if (!(FCtrMin<=FCtrMM))
				{
				alert (FErr)
				checkFieldFocus(frm, Fname, TypeReq)
				return true
				}
			}
		if ((FCtrMM != '') && (!(FCtrMax==null)))
			{
			if (!(FCtrMax>=FCtrMM))
				{
				alert (FErr)
				checkFieldFocus(frm, Fname, TypeReq)
				return true
				}
			}
		}
	}
function checkFieldFocus(frm, Fname, TypeReq)
	{
	if (TypeReq==0)
		{	
		frm.elements[Fname].focus();
		}
	else
		{
		document.forms[frm].elements[Fname].focus();
		}
	}
function checkPICF(pi)
//////////////////////////////////////
// Controlli P.IVA e Codice Fiscale //
//////////////////////////////////////
//	pi=Codice da controllare
//	restituisce true se errato
{
	switch(pi.length)
	{
	case 11:
		{
		return checkPIVA(pi)
		break;
		}
	case 16:
		{
		return checkCF(pi)
		break;
		}
	case 0:
		{
		return false
		break;
		}
	default:
		{
		return true;
		break;
		}
	}
}
function checkPIVA(pi)
//	Controllo Partita I.V.A.
//	pi=Codice da controllare
//	restituisce true se errato
{
	validi = "0123456789";
	for(i=0;i<11;i++)
		{
		if(validi.indexOf(pi.charAt(i))==-1) return true;
		}
	var 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)) return true;
	return false;
}
function checkCF(cf)
//	Controllo Codice Fiscale
//	cf=Codice da controllare
//	restituisce true se errato
{
	var validi, i, s, set1, set2, setpari, setdisp;
	cf = cf.toUpperCase();
	validi = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
	for(i=0;i<16;i++)
		{
		if (validi.indexOf(cf.charAt(i))==-1) return true;
		}
	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)) return true;
	return false;
}

function formatIVA(frm, Fname, m, d)
// 	 frm=Nome frame
// Fname=Nome variabile da formattare
// 	   m=separatore migliaia
// 	   d=separatore decimali
{
  	txt=document.forms[frm].elements[Fname].value;
	for (var i=0;i<txt.length;i++)
		{
		while (txt.indexOf(m)>-1)
			{
			pos=txt.indexOf(m);
			txt=txt.substring(0,pos)+txt.substring((pos+1),txt.length);
			}
		}
	for (var i=0;i<txt.length;i++)
		{
		while (txt.indexOf(d)>-1)
			{
			pos=txt.indexOf(d);
			txt=txt.substring(0,pos)+'.'+txt.substring((pos+1),txt.length);
			}
		}
return txt;	
}

function getReplace(getString, getStringBef, getStringAft)
////////////////////////////////////////////
//	Sostituzione sottostringa             //
//		getString=Stringa                 //
//		getStringBef=Valore da sostituire //
//		getStringAft=Nuovo valore         //
////////////////////////////////////////////
	{
	var i=0;
	var p=0;
	while (getString.indexOf(getStringBef)!=-1)
		{
		p=getString.indexOf(getStringBef);
		getString=getString.substring(0,p)+getStringAft+getString.substring((p+1),getString.length);
		}
	return getString;
	}

