// 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;
//                              ip=Indirizzo IP
//                              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)
function checkField(frm, Fname, FType, FErr, FObbl, FMin, FMax)
	{
	var oldFCtr=''
	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 == '') return false
		}
	else
		{
		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 (FCtr!='' || FObbl!='0')
				{
				switch(FCtr.length)
					{
					case 6:
						{
						oldFCtr=FCtr;
						FCtr=oldFCtr.substr(0,2)+'/'+oldFCtr.substr(2,2)+'/20'+oldFCtr.substr(4,2);
						break;
						}
					case 8:
						{
						oldFCtr=FCtr;
						FCtr=oldFCtr.substr(0,2)+'/'+oldFCtr.substr(2,2)+'/'+oldFCtr.substr(4,4);
						break;
						}
					default:
						oldFCtr=''
						break;
					}
				if (FMin=='') FMin='01/01/1901'
				if (FMax=='') FMax='31/12/2099'
				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.getFullYear();
				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.getFullYear() 
						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.getFullYear();
						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.getFullYear() 
						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.getFullYear();
						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,4}$/;
				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;
			}
// Indirizzo IP
		case 'ip':
			{
			if (FCtr!='' || FObbl=='1')
				{
				var ipPattern = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/;
				var ipArray = FCtr.match(ipPattern);
				if ((FCtr == "0.0.0.0") || (FCtr == "255.255.255.255") || (ipArray == null))
					{
					alert (FErr)
					checkFieldFocus(frm, Fname, TypeReq)
					return true
					}
				for (i = 0; i < 4; i++)
					{
					thisSegment = ipArray[i];
					if (thisSegment > 255)
						{
						alert (FErr)
						checkFieldFocus(frm, Fname, TypeReq)
						i = 4;
						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
				}
			}
		}
	if (FType=='d' && oldFCtr!='')
		{
		if (TypeReq==0)
			{	
			frm.elements[Fname].value=FCtr;
			}
		else
			{
			document.forms[frm].elements[Fname].value=FCtr;
			}
		}		 
	}
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;
	}
