
function checkNumeric(n) 
{
 	return !isNaN(parseFloat(n)) && isFinite(n);
}


function checkValidExtension(ff,valid_ext)
{
	var comodo=","+valid_ext+",";	
	comodo=comodo.toUpperCase();
	var pos=ff.lastIndexOf(".");
	if (pos===-1) return false;
	var ext=","+ff.substr(pos+1)+",";
	ext=ext.toUpperCase();
	return (comodo.indexOf(ext)!=-1);
}

function checkEmail(email) 
{
	//var validRegExp = /^[^@]+@[^@]+.[a-z]{2,}$/i;
	
	var validRegExp = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;

	if (email.search(validRegExp) == -1) return false;
	return true; 			
}

function piCheck(p) 
{ 
	if( p == '' ) return ""; 
	
	reg=/^[0-9]+$/i;
	
	if( p == '00000000000' ) return "La partita IVA non e' valida: il codice di controllo non corrisponde."; 
	if( p.length != 11 ) return "La lunghezza della partita IVA non e' corretta: la partita IVA dovrebbe essere lunga esattamente 11 caratteri."; 
	if( p.search(reg)==-1 ) return "La partita IVA contiene dei caratteri non ammessi: la partita IVA dovrebbe contenere solo cifre."; 
	s = 0; 
	
	for( i = 0; i <= 9; i += 2 ) s += p.charCodeAt(i) - 48;
	for( i = 1; i <= 9; i += 2 ){ 
		c = 2*( p.charCodeAt(i) - 48 ); 
		if( c > 9 ) c = c - 9; 
		s += c; 
		} 
	if( ( 10 - s%10 )%10 != p.charCodeAt(10) - 48 ) return "La partita IVA non e' valida: il codice di controllo non corrisponde."; 
	return ""; 
}


function cfCheck(cf)
{
	CONST_CHECKSTRING_CODICE_FISCALE=/^[A-Z]{6}[0-9]{2}[A-Z][0-9]{2}[A-Z][0-9]{3}[A-Z]$/i;
	
	if( cf == '')  		return "";
	
	if( cf.length != 16 )
		return "Il campo deve essere lungo 16 caratteri.";
	
	cf = cf.toUpperCase();
	
	if( cf.search(CONST_CHECKSTRING_CODICE_FISCALE)==-1 )
		return "Il campo contiene dei caratteri non validi.";
	
	s = 0;
	for( i = 1; i <= 13; i += 2 )
	{
		c = cf.charAt(i);
		
		v=cf.charCodeAt(i);
		
		if( '0' <= c && c <= '9' )
			s += v - 48;
		else
			s += v - 65;
	}
	
	for( i = 0; i <= 14; i += 2 )
	{
		c = cf.charAt(i);
		switch( c ){
		case '0':  s += 1;  break;
		case '1':  s += 0;  break;
		case '2':  s += 5;  break;
		case '3':  s += 7;  break;
		case '4':  s += 9;  break;
		case '5':  s += 13;  break;
		case '6':  s += 15;  break;
		case '7':  s += 17;  break;
		case '8':  s += 19;  break;
		case '9':  s += 21;  break;
		case 'A':  s += 1;  break;
		case 'B':  s += 0;  break;
		case 'C':  s += 5;  break;
		case 'D':  s += 7;  break;
		case 'E':  s += 9;  break;
		case 'F':  s += 13;  break;
		case 'G':  s += 15;  break;
		case 'H':  s += 17;  break;
		case 'I':  s += 19;  break;
		case 'J':  s += 21;  break;
		case 'K':  s += 2;  break;
		case 'L':  s += 4;  break;
		case 'M':  s += 18;  break;
		case 'N':  s += 20;  break;
		case 'O':  s += 11;  break;
		case 'P':  s += 3;  break;
		case 'Q':  s += 6;  break;
		case 'R':  s += 8;  break;
		case 'S':  s += 12;  break;
		case 'T':  s += 14;  break;
		case 'U':  s += 16;  break;
		case 'V':  s += 10;  break;
		case 'W':  s += 22;  break;
		case 'X':  s += 25;  break;
		case 'Y':  s += 24;  break;
		case 'Z':  s += 23;  break;
		}
	}
	if( (s%26 + 65 ) != cf.charCodeAt(15) )	return "Il campo risulta essere errato.";
	
	return "";
}

function isDate(dateStr) {
	var datePat = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/;
	var matchArray = dateStr.match(datePat); // is the format ok?
	
	if (matchArray == null) {
		return false;
	}

	day = matchArray[1]; // p@rse date into variables
	month = matchArray[3];
	year = matchArray[5];

	if (month < 1 || month > 12) return false;

	if (day < 1 || day > 31) return false;

	if ((month==4 || month==6 || month==9 || month==11) && day==31) return false;

	if (month == 2) { // check for february 29th
		var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
		if (day > 29 || (day==29 && !isleap)) return false;
	}
	return true; // date is valid
}


function zmGetDataFromForm(dd,formid)
{
	if (dd==undefined) return false;
	if (dd.constructor!=Object) return false;

	var idx; 
	var nn;
	var vv;
	var comodo;
	var ss;
	var ss_ck;
	
	var errore=false;
	
	if (typeof formid === 'undefined') 
	{
		ss=":input";	
		ss_ck=":checkbox";
	}
	else
	{
		ss="#"+formid+" :input";
		ss_ck="#"+formid+" :checkbox";
	}
	
	$(ss).parent().removeClass("has-error");
	$(ss_ck).parent().removeClass("has-error");
	
	$(ss).removeClass("error");
	$(ss_ck).removeClass("error");
	
	
	$(ss).each( function() {
		idx=""+$(this).attr("id");
		if ((idx!="undefined") && (idx.indexOf("zfld_")==0))
		{
			if (idx.lastIndexOf("_txt")>0)
			{
				nn=idx.substr(1);
				vv=$("#"+idx).val();
				dd[nn]=encodeURIComponent(vv);
				
				if (idx.indexOf("_email_")>0)
				{
					if (vv!='')
					{
						  if (!checkEmail(vv))
						  {
								$("#"+idx).parent().addClass("has-error");
								$("#"+idx).addClass("error");
								errore=true;
						  }
					}
				}
				
				if (idx.indexOf("_piva_")>0)
				{
					comodo=vv;
					comodo=piCheck(comodo);
 					if (comodo!='')
					{
						$("#"+idx).parent().addClass("has-error");
						$("#"+idx).addClass("error");
						errore=true;
					}
				}
				
				if (idx.indexOf("_cf_")>0)
				{
					comodo=vv;
					if (comodo!='')
					{
						if (comodo.length==11)
						{
							comodo=piCheck(comodo);
							if (comodo!='')
							{
								$("#"+idx).parent().addClass("has-error");
								$("#"+idx).addClass("error");
								errore=true;
							}
						}
						else
						{
							comodo=cfCheck(comodo);
							if (comodo!='')
							{
								$("#"+idx).parent().addClass("has-error");
								$("#"+idx).addClass("error");
								errore=true;
							}
						}
						    
					}
				}
				
				
				
			}
			
			if (idx.lastIndexOf("_num")>0)
			{
				nn=idx.substr(1);
				vv=$("#"+idx).val();
				dd[nn]=vv;
			}
			
			if (idx.lastIndexOf("_dta")>0)
			{
				nn=idx.substr(1);
				vv=$("#"+idx).val();
				if (vv!="") 
				{
						if (!isDate(vv))
						{
							$("#"+idx).parent().addClass("has-error");
							$("#"+idx).addClass("error");
							errore=true;
						}
						else
						{
							vv=dateToTimestamp(vv);
						}
				}
				dd[nn]=vv;
			}
			
			if ($("#"+idx).attr("required"))
			{
				vv=$("#"+idx).val();
				if (vv=="") 
				{
					errore=true;
					$("#"+idx).parent().addClass("has-error");
					$("#"+idx).addClass("error");
				}
			}
			

			
		}});
		
	$(ss_ck).each( function() {
		idx=""+$(this).attr("id");
		if ((idx!="undefined") && (idx.indexOf("zfld_")==0))
		{
			if (idx.lastIndexOf("_flg")>0)
			{
				nn=idx.substr(1);
				vv=0;
				if ($("#"+idx).is(':checked')) vv=1;
				dd[nn]=vv;
				
				if ($("#"+idx).attr("required"))
				{
					if (vv==0)
					{
						errore=true;
						$("#"+idx).parent().addClass("has-error");
						$("#"+idx).addClass("error");
					}
				}
				
			}
			
		
			
			
			
		}});
		
	return errore;
	
}


function meseCF(mese)
{
	var arr=new Array();
	
	arr[0]="A";
	arr[1]="B";
	arr[2]="C";
	arr[3]="D";
	
	arr[4]="E";
	arr[5]="H";
	arr[6]="L";
	arr[7]="M";
	
	arr[8]="P";
	arr[9]="R";
	arr[10]="S";
	arr[11]="T";
	
	mese--;
	
	if (mese<0) return "";
	if (mese>11) return "";
	
	return arr[mese];
	

}


