// JavaScript Document
/*
R
isMail
isDate
isNum
StrLenRangemin:max		lunghezza stringa compresa tra min e max
DateinRangemin:max		data compresa tra min e max	controlla cmq la validità della data
isPrice					costo formato xx,xx xxx.xx
inRangemin:max			numero compreso tra min e max, senza min e max controlla che il numero sia un intero
*/
var day,month,year,maxDay;
var arrMonths = new Array("Gennaio","Febbraio","Marzo","Aprile","Maggio","Giugno","Luglio","Agosto","Settembre","Ottobre","Novembre","Dicembre");
function MM_findObj(n, d)
{  var p,i,x;  if(!d) d=document;
	if((p=n.indexOf('?'))>0&&parent.frames.length) 
	{
		d=parent.frames[n.substring(p+1)].document;
		n=n.substring(0,p);
	}
	if(!(x=d[n])&&d.all) 
		x=d.all[n]; 
	for (i=0;!x&&i<d.forms.length;i++)
		x=d.forms[i][n];
	for(i=0;!x&&d.layers&&i<d.layers.length;i++)
		x=MM_findObj(n,d.layers[i].document);
	if(!x && d.getElementById) 
		x=d.getElementById(n); 
	return x;
}

function DateIsValid(valore)
{
	day=valore.substr(0,2);
	month=valore.substr(3,2);
	year=valore.substr(6,4);
	if (month == '02') 
		maxDay = (!(year % 4) && ((year % 100) || !(year % 400))) ? 29 : 28;
	else 
		maxDay = (month == 4 || month == 6 || month == 9 || month == 11) ? 30 : 31;
	month=month-1;
	if ((day < 1) || (day > maxDay))
	  return (false);
	else
	  return (true);
}

function ExtractString(stringa)
{
	var p,lenrange;
	var valori=new Array(2);
	p=stringa.indexOf('g');
	lenrange=stringa.substring(0,p+2);					
	p=stringa.indexOf(':');
	if(p!=-1)
	{
		valori[0]=stringa.substring(lenrange.length,p);
		valori[1]=stringa.substring(p+1);
	}
	return (valori);
}

function MM_validateForm()
{
	var i,p,q,nm,test,lenrange,datemin,datemax,num,min,max,pos,errors='';
	var args=MM_validateForm.arguments;
	var tmpregexp=new Array();
	var tmparray=new Array(2);
	var tmpval,tmpval1,tmpvalins;
	for (i=0; i<(args.length-2); i+=3) 
	{ 
		test=args[i+2];
		val=MM_findObj(args[i]);
		if (val) 
		{ 
			nm=val.name; 
			if ((val=val.value)!='') 
			{
				if (test.indexOf('isEmail')!=-1) 
				{ 
					p=val.indexOf('@');
					if (p<1 || p==(val.length-1)) 
						errors+='\n- '+args[i+1]+' deve contenere un indirizzo email.';
				}
				else if (test!='R')
				{ 
					if (test.indexOf('isDate') != -1)
					{
						if(!DateIsValid(val))
							errors+='\n- Il mese di '+arrMonths[month]+' non ha '+day+' giorni.\nSpecificare un giorno compreso tra 1 e '+maxDay+'.';
					}
					if (test.indexOf('isNum') != -1)
					{
						if (isNaN(val)) 
							errors+='\n- '+args[i+1]+' deve contenere un numero.';
					}
					else if (test.indexOf('StrLenRange') != -1)
					{
						if (isNaN(val)) 
							errors+='\n- '+args[i+1]+' deve contenere un numero.';						
						tmparray=ExtractString(test);
						tmpvalins=val.length;				
						if (tmpvalins<tmparray[0] || tmparray[1]<tmpvalins)
						{
							if(tmparray[0]==tmparray[1])
								errors+='\n-La lunghezza della stringa del campo '+args[i+1]+' deve essere di '+tmparray[0]+' caratteri.';
							else
								errors+='\n-La lunghezza della stringa del campo '+args[i+1]+' deve essere tra '+tmparray[0]+' e '+tmparray[1]+' caratteri.';							
						}
					}
					else if (test.indexOf('DateinRange') != -1)
					{ 
						tmparray=ExtractString(test);
						datemin=tmparray[0];
						datemax=tmparray[1];
						if(!DateIsValid(val))
							errors+='\n-Il mese di '+arrMonths[month]+' non ha '+day+' giorni.\nSpecificare un giorno compreso tra 1 e '+maxDay+'.';
						else
						{
							tmpval=Date.UTC(datemin.substr(6,4),datemin.substr(3,2)-1,datemin.substr(0,2),00,00,01);
							tmpval1=Date.UTC(datemax.substr(6,4),datemax.substr(3,2)-1,datemax.substr(0,2),23,59,59);
							tmpvalins=Date.UTC(val.substr(6,4),val.substr(3,2)-1,val.substr(0,2),00,00,01);
							if((tmpvalins<tmpval)||(tmpvalins>tmpval1))
								errors+='\n-La data deve essere compresa tra '+datemin+' e '+datemax+'.';
						}						
					}
					else if (test.indexOf('minValue') != -1)
					{
						if (isNaN(val))
							errors+='\n- '+args[i+1]+' deve contenere un numero.';					
						nm=new RegExp("(\\d+)");
						tmpregexp=test.search(nm);
						min=test.substring(tmpregexp,test.length);
						if(val<min)
							errors+='\n- '+args[i+1]+' non deve essere inferiore a '+min+'.';				
					}					
					else if (test.indexOf('isPrice') != -1)
					{
						if(val.indexOf(".")!=-1)
							errors+='\n- '+args[i+1]+' deve contenere un numero.';					
						else
						{					
							if(isNaN(val))//se è un numero
							{
								nm=new RegExp("^(\\d+)(,)(\\d{1,2})$");
								if(!val.match(nm))
									errors+='\n- '+args[i+1]+' deve contenere un costo nel formato 1,00 10,00 100,00 1000,00';
							}
						}
						/*nm=new RegExp("[.,]");
						tmpregexp=val.match(nm);
						if(tmpregexp)
						{		
							pos=val.indexOf(',');
							tmpval=val.substring(0,pos);
							tmpval1=val.substring(pos+1,val.length);
							//controllo per la parte prima della virgola
							nm=new RegExp("^(\\d+)(.+)(\\d+)$");
							if(!tmpval.match(nm))
								if (isNaN(tmpval))
									errors+='\n- '+args[i+1]+' deve contenere un costo nel formato xxxx,xx o x.xxx,xx';
							//controllo che i decimali siano interi e siano 1 o 2
							nm=new RegExp("(\\d{1,2})");
							if(!tmpval1.match(nm))
								errors+='\n- '+args[i+1]+' deve contenere un costo nel formato xxxx,xx o x.xxx,xx';
						}
						else if(isNaN(val))
							errors+='\n- '+args[i+1]+' deve contenere un numero.';*/				
					}
					else if (test.indexOf('inRange') != -1)
					{ 
						if (isNaN(val))
							errors+='\n- '+args[i+1]+' deve contenere un numero.';					
						tmparray=ExtractString(test);
						if (num<tmparray[0] || tmparray[1]<num) 
							errors+='\n- '+args[i+1]+' deve contenere un numero tra '+tmparray[0]+' e '+tmparray[1]+'.';
					}
					else if (test.indexOf('radio') != -1)
					{ 
						
						var temp=document.getElementById("consenso").checked;
						if(temp==false)
							errors+='\n- '+args[i+1]

					}									
				} 
			} 
			else if (test.charAt(0) == 'R') errors += '\n- '+args[i+1]+' e\' obbligatorio'; 
		}
	} 
	if (errors) alert('Sono presenti i seguenti errori:'+errors); document.MM_returnValue = (errors == '');
}
