function eurolira(s)
	{
	s=Math.round(s*1936.27);
	return(s+"");
	}

function liraeuro(s)
	{
	s=round2(s/1936.27);
	return(s);
	}

function scaglioni (reddi,sca1,ali1,sca2,ali2,sca3,ali3,sca4,ali4,sca5,ali5)
	{
	impsca=0; i=3
	while (reddi>arguments[i]&&i<arguments.length)
		{
		impsca=impsca+(arguments[i]-arguments[i-2])*arguments[i-1];
		i=i+2;
		}
	impsca=impsca+(reddi-arguments[i-2])*arguments[i-1];
	if ((tondo)&&(!lire))  impsca=Math.round(impsca); 
	return(impsca);
	}

function scaglionianf (reddi,ass,sca1,ali1,sca2,ali2,sca3,ali3,sca4,ali4,sca5,ali5)
	{
	i=4;
	while (reddi>arguments[i]&&i<arguments.length)
		{
		ass=minus(ass,(arguments[i]-arguments[i-2])*arguments[i-1]);
		i=i+2;
		}
	ass=minus(ass,(Math.ceil(reddi/100)*100-arguments[i-2])*arguments[i-1]);
	if ((tondo)&&(!lire))  ass=Math.round(ass); 
	return(ass);
	}

function altredetra(altdtr)
	{
	altdtr=altdtr*0.19;
	if ((tondo)&&(!lire))  altdtr=Math.round(altdtr);
	return (altdtr); 
	}

function notax03(redlor,onr,cat,gio)
	{
	
	ded=new Array(5);
		
	ded[0]=ded[1]=3000+4500*gio/365; ded[2]=4500; ded[3]=3000+4000*gio/365; ded[4]=3000+4000*gio/365; ded[5]=3000;
	
	var quandedu=tronca4((26000+ded[cat]+onr-redlor)/26000);
	if (quandedu<0) quandedu=0; else if (quandedu>1) quandedu=1;
	dedu=ded[cat]*quandedu;
	if (tondo) dedu=Math.round(dedu);
	return(dedu);
	}

function family05 (redlor,onr,con,fig,pic,dis,prc)
	{
	dedufamteor=3200*con+(2900*fig+550*pic+800*dis)*prc;
	quandedufam=tronca4((78000+dedufamteor+onr-redlor)/78000); 
	if (quandedufam<0) quandedufam=0; else if (quandedufam>1) quandedufam=1; 
	dedufam=dedufamteor*quandedufam;
	if (tondo) dedufam=Math.round(dedufam);
	return(dedufam);
	}


function detra01dip (redlor,gio)
	{
	var detr=0;
	if (redlor<=6197.48) detr=1146.53;
	else if ((redlor>6197.48)&&(redlor<=6352.42)) detr=1084.56;
	else if ((redlor>6352.42)&&(redlor<=6507.36)) detr=1032.91;
	else if ((redlor>6507.36)&&(redlor<=7746.85)) detr=981.27;
	else if ((redlor>7746.85)&&(redlor<=7901.79)) detr=903.80;
	else if ((redlor>7901.79)&&(redlor<=8056.73)) detr=826.33;
	else if ((redlor>8056.73)&&(redlor<=8211.66)) detr=748.86;
	else if ((redlor>8211.66)&&(redlor<=8263.31)) detr=686.89; 
	else if ((redlor>8263.31)&&(redlor<=8779.77)) detr=650.74;
	else if ((redlor>8779.77)&&(redlor<=9296.22)) detr=614.58;
	else if ((redlor>9296.22)&&(redlor<=9812.68)) detr=578.43; 
	else if ((redlor>9812.68 )&&(redlor<=15493.71)) detr=542.28;
	else if ((redlor>15493.71)&&(redlor<=20658.28)) detr=490.63;
	else if ((redlor>20658.28)&&(redlor<=25822.84)) detr=438.99;
	else if ((redlor>25822.84)&&(redlor<=30987.41)) detr=387.34;
	else if ((redlor>30987.41)&&(redlor<=31142.35)) detr=335.70; 
	else if ((redlor>31142.35)&&(redlor<=36151.98)) detr=284.05;
	else if ((redlor>36151.98)&&(redlor<=41316.55)) detr=232.41;
	else if ((redlor>41316.55)&&(redlor<=46481.12)) detr=180.76;
	else if ((redlor<=46481.12)&&(redlor>46687.70)) detr=129.11;
	else if ((redlor>46687.70)&&(redlor<=51645.69)) detr=77.47; 
	else if (redlor>51645.69) detr=51.65;
	detr=detr*gio/365;
	if ((tondo)&&(!lire)) detr=Math.round(detr);
	return (detr);
	}

function detra01aut (redlor)
	{
	var detr=0;
	if (redlor<=4699.76) detr=568.10;
	else if ((redlor>4699.76)&&(redlor<=4803.05)) detr=516.45;
	else if ((redlor>4803.05)&&(redlor<=4957.99)) detr=464.81;
	else if ((redlor>4957.99)&&(redlor<=5112.92)) detr=413.17; 
	else if ((redlor>5112.92)&&(redlor<=7746.85)) detr=361.52; 
	else if ((redlor>7746.85)&&(redlor<=7901.79)) detr=309.87;
	else if ((redlor>7901.79)&&(redlor<=8263.31)) detr=247.90;
	else if ((redlor>8263.31)&&(redlor<=8779.77)) detr=211.75;
	else if ((redlor>8779.77)&&(redlor<=9296.22)) detr=175.60;
	else if ((redlor>9296.22)&&(redlor<=9812.68)) detr=139.44;
	else if ((redlor>9812.68)&&(redlor<=15493.71)) detr=103.29; 
	else if ((redlor>15493.71)&&( redlor<=30987.41)) detr=51.65
	if ((tondo)&&(!lire)) detr=Math.round(detr);
	return (detr);
	}

function detra01pen (redlor,gio)
	{
	var detr=0;
	if (redlor<=4854.69) detr=98.13;
	else if ((redlor>4854.69)&&(redlor<=9296.22)) detr=61.97; 
	detr=detr*gio/365;
	if ((tondo)&&(!lire)) detr=Math.round(detr);
	return (detr);
	}

function detra01pen75 (redlor,gio)
	{
	var detr=0;
	if (redlor<=4854.69) detr=222.08;
	else if ((redlor>4854.69)&&(redlor<=9296.22)) detr=185.92;
	else if ((redlor>9296.22)&&(redlor<=9554.45)) detr=92.96;
	else if ((redlor>9554.45)&&(redlor<=9812.68)) detr=46.48;
	detr=detr*gio/365;
	if ((tondo)&&(!lire)) detr=Math.round(detr); 
	return (detr);
	}

function detra01diptemdet (redlor,gio)
	{
	var detr=0;
	if (redlor<=4699.76) detr=206.58;
	else if ((redlor>4699.76)&&(redlor<=5164.57)) detr=154.94;
	else if ((redlor>5164.57)&&(redlor<=5681.03)) detr=103.29;
	else if ((redlor>5681.03)&&(redlor<=6197.48)) detr=51.65;
	if ((tondo)&&(!lire))  detr=Math.round(detr); 
	return (detr);
	}

function detra01diptemind (redlor,gio)
	{
	var detr=0;
	if (redlor<=4699.76) detr=154.94;
	else if ((redlor>4699.76)&&(redlor<=4803.05)) detr=103.29;
	else if ((redlor>4803.05)&&(redlor<=4957.99)) detr=51.65;
	if ((tondo)&&(!lire)) detr=Math.round(detr); 
	return (detr);
	}

function detra03dip (redlor,gio)
	{
	var detr=0;
	if ((redlor>27000)&&(redlor<=29500)) detr=130; 
	else if ((redlor>29500)&&(redlor<=36500)) detr=235; 
	else if ((redlor>36500)&&(redlor<=41500)) detr=180; 
	else if ((redlor>41500)&&(redlor<=46700)) detr=130; 
	else if ((redlor>46700)&&(redlor<=52000)) detr=25; 
	detr=detr*gio/365; 	
	if ((tondo)&&(!lire)) detr=Math.round(detr);
	return (detr);
	}

function detra03aut (redlor)
	{
	var detr=0;
	if ((redlor>25500)&&(redlor<=29400)) detr=80; 
	else if ((redlor>29400)&&(redlor<=31000)) detr=126; 
	else if ((redlor>31000)&&(redlor<=32000)) detr=80;
	if ((tondo)&&(!lire)) detr=Math.round(detr); 
	return (detr);
	}

function detra03pen (redlor,gio)
	{
	var detr=0;
	if ((redlor>24500)&&(redlor<=27000)) detr=70;
	else if ((redlor>27000)&&(redlor<=29000)) detr=170; 
	else if ((redlor>29000)&&(redlor<=31000)) detr=290; 
	else if ((redlor>36500)&&(redlor<=31000)) detr=230; 
	else if ((redlor>36500)&&(redlor<=41500)) detr=180; 
	else if ((redlor>41500)&&(redlor<=46700)) detr=130; 
	else if ((redlor>46700)&&(redlor<=52000)) detr=25;
	detr=detr*gio/365;
	if ((tondo)&&(!lire)) detr=Math.round(detr); 
	return (detr);
	}

function detracon01 (redlor,con)
	{
	var detr=0;
	if (redlor<=15493.71) detr=detr+546.18*con;
		else if ((redlor>15493.71)&&(redlor<=30987.41)) detr=detr+496.60*con
			else if ((redlor>30987.41)&&(redlor<=51645.69)) detr=detr+459.42*con
				else if (redlor>51645.69) detr=detr+422.23*con;
	if ((tondo)&&(!lire)) detr=Math.round(detr);	
	return (detr);
	}

function detrafig01 (redlor,totfig,fig,pic,prc)
	{
	var detr=0;
	if (redlor>51645.69)	
		detr=detr+(266.49*fig+123.95*pic)*prc;
	else
		detr=detr+((285.08*minus(totfig,(totfig-1))+318.14*minus(totfig,1))*(fig/totfig)+123.95*pic)*prc;
	if ((tondo)&&(!lire)) detr=Math.round(detr);
	return (detr);
	}

function detrafig02 (redlor,totfig,fig,pic,dis,prc)
	{
	var detr=0;
	detr=detr+774.69*dis;
	fig=fig-dis;
	if (fig>0)
	if ((redlor>51645.69)&&(totfig<4)) detr=detr+(285.08*fig+123.95*pic)*prc;
		else
			if ((redlor<36151.98)||((redlor<41316.55)&&(totfig==2))||((redlor<46481.12)&&(totfig==3))||(totfig>=4))
				detr=detr+516.46*fig*prc;		
			else	{
				totfig=totfig-dis;
				detr=detr+((303.68*minus(totfig,(totfig-1))+336.73*minus(totfig,1))*(fig/totfig)+123.95*pic)*prc;
				}
	if ((tondo)&&(!lire))  detr=Math.round(detr); 	
	return (detr);
	}

function irpef01(redlor,cat,con,totfig,fig,pic,dis,prc,gio,altdtr)
	{
	imp=0;
	detr=0;
	imp=scaglioni(redlor,0,0.18,10329.14,0.24,15493.71,0.32,30987.41,0.39,69721.68,0.45);
	switch (cat) 
		{
		case "0": 	{
				if (gio<365) detr=detra01dip(redlor,gio)+detra01diptemind(redlor,gio);
				else detr=detra01dip(redlor,gio); 
				break;
				}
		case "1": 	{
				if (gio<365) detr=detra01dip(redlor,gio)+detra01diptemdet(redlor,gio);
				else detr=detra01dip(redlor,gio); 
				break;
				}
		case "2": detr=detra01aut(redlor); break;
		case "3": detr=detra01dip(redlor,gio)+detra01pen(redlor,gio); break;
		case "4": detr=detra01dip(redlor,gio)+detra01pen75(redlor,gio); break;	
		case "5": break;
		}
	
	if (con>0) detr=detr+detracon01(redlor,con); 
	if (totfig>0) detr=detr+detrafig01(redlor,totfig,fig,pic,prc);
	detr=detr+altredetra(altdtr);
	imp=minus(imp, detr);
	return(imp);
	}

function irpef02 (redlor,cat,con,totfig,fig,pic,dis,prc,gio,altdtr)
	{
	imp=0;
	detr=0;
	imp=scaglioni(redlor,0,0.18,10329.14,0.24,15493.71,0.32,30987.41,0.39,69721.68,0.45);
	switch (cat) 
		{
		case "0": 	{
				if (gio<365) detr=detra01dip(redlor,gio)+detra01diptemind(redlor,gio);
				else detr=detra01dip(redlor,gio); 
				break;
				}
		case "1": 	{
				if (gio<365) detr=detra01dip(redlor,gio)+detra01diptemdet(redlor,gio);
				else detr=detra01dip(redlor,gio); 
				break;
				}
		case "2": detr=detra01aut(redlor); break;
		case "3": detr=detra01dip(redlor,gio)+detra01pen(redlor,gio); break;
		case "4": detr=detra01dip(redlor,gio)+detra01pen75(redlor,gio); break;	
		case "5": break;
		}
	if (con>0) detr=detr+detracon01(redlor,con); 
	if (totfig>0) detr=detr+detrafig02(redlor,totfig,fig,pic,dis,prc);
	detr=detr+altredetra(altdtr);
	imp=minus(imp, detr);
	return(imp);				
	}		


function irpef03(redlor,cat,con,totfig,fig,pic,dis,prc,gio,onr,altdtr)
	{
	imp=0;
	detr=detrafigcon=0;
	rednet=minus(redlor-onr,notax03(redlor,onr,cat,gio));
	imp=scaglioni(rednet,0,0.23,15000,0.29,29000,0.31,32600,0.39,70000,0.45);
	if ((tondo)&&(!lire))  imp=Math.round(imp); 
	
	switch (cat) {
		case "0": detr=detra03dip(redlor,gio); break;
		case "1": detr=detra03dip(redlor,gio); break;
		case "2": detr=detra03aut(redlor); break;
		case "3": detr=detra03pen(redlor,gio); break;
		case "4": detr=detra03pen(redlor,gio); break;
		case "5": break;
			}
	
	if (con>0) detr=detr+detracon01(redlor,con);
	if (totfig>0) detr=detr+detrafig02(redlor,totfig,fig,pic,dis,prc);
	detr=detr+altredetra(altdtr);
	imp=minus(imp, detr);

	if ((cat==3||cat==4)&&(redlor<=7800)) imp=Math.min(imp, minus(redlor,7500));
	return(imp);		
	}


function irpef05(redlor,cat,con,fig,pic,dis,prc,gio,onr,altdtr)
{
	imp=0;
	detr=familycon=0; 
	rednet=minus(redlor-onr, notax03(redlor,onr,cat,gio));
	rednet=minus(rednet, family05(redlor,onr,con,fig,pic,dis,prc)); 
	imp=scaglioni(rednet,0,0.23,26000,0.33,33500,0.39,100000,0.43);
	detr=detr+altredetra(altdtr);
	imp=minus(imp, detr);
	if ((cat==3||cat==4)&&(redlor<=7800)) imp=Math.min(imp, minus(redlor,7500)); 
	return(imp);
}

function detra07dip (redlor,gio)
{	
	if (redlor<=8000) detr=1840;
	else if (redlor<=15000) detr=1338+502*tronca4((15000-redlor)/7000);
	else if (redlor<=55000) detr=1338*tronca4((55000-redlor)/40000);
	detr=detr*gio/365; 
	if (redlor>23000&&redlor<=24000) detr=detr+10;
	else if (redlor>24000&&redlor<=25000) detr=detr+20;
	else if (redlor>25000&&redlor<=26000) detr=detr+30;
	else if (redlor>26000&&redlor<=27700) detr=detr+40;
	else if (redlor>27700&&redlor<=28000) detr=detr+25;
	if (redlor<=8000&&detr<690) detr=690;
	if ((tondo)&&(!lire)) detr=Math.round(detr); 
	return (detr);
}

function detra07diptemdet (redlor,gio)
{	
	detr=detra07dip(redlor,gio);
	if (redlor<=8000&&detr<1380) detr=1380;
	return (detr);
}


function detra07pen (redlor,gio)
{	
	if (redlor<=7500) detr=1725;
	else if (redlor<=15000) detr=1255+470*tronca4((15000-redlor)/7500);
	else if (redlor<=55000) detr=1255*tronca4((55000-redlor)/40000);
	detr=detr*gio/365; 
	if (redlor<=7500&&detr<690) detr=690;
	if ((tondo)&&(!lire)) detr=Math.round(detr);
	return (detr);	
}

function detra07pen75 (redlor,gio)
{	
	if (redlor<=7750) detr=1783;
	else if (redlor<=15000) detr=1297+486*tronca4((15000-redlor)/7250);
	else if (redlor<=55000) detr=1297*tronca4((55000-redlor)/40000);
	detr=detr*gio/365; 
	if (redlor<=7750&&detr<713) detr=713;
	if ((tondo)&&(!lire)) detr=Math.round(detr);
	return (detr);	
}


function detra07aut (redlor)
{	
	if (redlor<=4800) detr=1104;
	else if (redlor<=55000) detr=1104*tronca4((55000-redlor)/50200);
	if ((tondo)&&(!lire)) detr=Math.round(detr); 
	return (detr);
}

function detra07fig (redlor,con,totfig,fig,pic,dis,prc)
{	
	var detr=0;
	if (con>0) divi=1; else divi=2;
	tetto=95000+(totfig-1)*15000;
	if (totfig>3) num=1; else num=0;
	detr=(800*fig+100*pic+220*dis+200*num*fig)*prc*tronca4((tetto-redlor)/tetto)+num*1200/divi;
	if (detr<0) detr=0;
	if ((tondo)&&(!lire)) detr=Math.round(detr);
	return (detr);
}

function detra07con (redlor,con)
{	
	var detr=0;
	if (redlor<=15000) detr=800*con-110*con*tronca4(redlor/15000);
	else if (redlor<=40000) detr=690*con;
	else if (redlor<=80000) detr=690*con*tronca4((80000-redlor)/40000);
	if (redlor>29000&&redlor<=29200) detr=detr+10;
	else if (redlor>29200&&redlor<=34700) detr=detr+20;
	else if (redlor>34700&&redlor<=35000) detr=detr+30;
	else if (redlor>35000&&redlor<=35100) detr=detr+20;
	else if (redlor>35100&&redlor<=35200) detr=detr+10;
	if (detr<0) detr=0;
	if ((tondo)&&(!lire)) detr=Math.round(detr);
	return (detr);
}


function irpef07 (redlor,cat,con,totfig,fig,pic,dis,prc,gio,onr,altdtr)
	{
	imp=0;
	detr=detrafigcon=0;
	imp=scaglioni(redlor-onr,0,0.23,15000,0.27,28000,0.38,55000,0.41,75000,0.43);
	switch (cat) 
		{
		case "0": 	{
				detr=detra07dip(redlor,gio); 
				break;
				}
		case "1": 	{
				detr=detra07diptemdet(redlor,gio); 
				break;
				}
		case "2": detr=detra07aut(redlor); break;
		case "3": detr=detra07pen(redlor,gio); break;
		case "4": detr=detra07pen75(redlor,gio); break;	
		case "5": break;
		}
	if (con>0) detr=detr+detra07con(redlor,con); 
	detr=detr+detra07fig(redlor,con,totfig,fig,pic,dis,prc)+altredetra(altdtr);
	imp=minus(imp, detr);
	if ((cat==3||cat==4)&&redlor<=7500&&gio==365) imp=0;
	return(imp);				
	}	

function addireg(redlor,cat,con,fig,pic,dis,prc,reg,ann,onr)
{
	if (ann>2004&&ann<2007) rednet=minus(redlor-onr,family05(redlor,onr,con,fig,pic,dis,prc));
	else rednet=redlor-onr;
	switch (reg)
		{
		case "0": if (ann<2006) add=rednet*0.009; else add=rednet*0.014; break; //Abruzzo
		case "1": add=rednet*0.009; break; //Basilicata
		case "2": if (ann<2003) add=rednet*0.009; else add=rednet*0.014; break; //Calabria
		case "3": if (ann<2006) add=rednet*0.009; else add=rednet*0.014; break; //Campania
		case "4": if (ann<2007) add=rednet*0.009; //Emilia-Romagna
				else if (rednet<=15000) add=rednet*0.011; 
 					else if (rednet<=20000) add=rednet*0.012;
						else if (rednet<=25000) add=rednet*0.013;
							else add=rednet*0.014; break;
		case "5": add=rednet*0.009; break; //Friuli
		case "6": if (ann<2006) add=rednet*0.009; else add=rednet*0.014; break; //Lazio
		case "7": switch (ann) //Liguria
					{
					case "2010": if (rednet<=20000) add=rednet*0.009; 
								else if (rednet<=20101.42) add=rednet*0.014-0.986*(20101.42-rednet);
									else add=rednet*0.014; break;
					case "2009": if (rednet<=30000||fig>=4) add=rednet*0.009; 
								else if (rednet<=30152.13) add=rednet*0.014-0.986*(30152.13-rednet);
									else add=rednet*0.014; break;
					case "2008": if (rednet<=25000||fig>=4) add=rednet*0.009; 
								else if (rednet<=25126.77) add=rednet*0.014-0.986*(25126.77-rednet);
									else add=rednet*0.014; break;
					case "2007": if (rednet<=20000) add=rednet*0.009; 
								else if (rednet<=20101.42) add=rednet*0.014-0.986*(20101.42-rednet);
									else add=rednet*0.014; break;
					case "2006": if (rednet<=13000) add=rednet*0.009; 
 								else if (rednet<=20000) add=rednet*0.0125; 
									else add=rednet*0.014; break;
					default: add=rednet*0.009
					}
				break;
		case "8": if (ann<2002) add=rednet*0.009; //Lombardia
				else 
					if (ann<2008) 
						if ((cat==3||cat==4)&&(rednet<=10329.14)) add=rednet*0.009; 
						else add=scaglioni(rednet,0,0.012,15493.71,0.013,30987.41,0.014);
					else 	add=scaglioni(rednet,0,0.009,15493.71,0.013,30987.41,0.014); break;
		case "9": switch (ann) //Marche
					{
					case "2010": add=scaglioni(rednet,0,0.009,15500,0.012,31000,0.014); break;		
					case "2009": add=scaglioni(rednet,0,0.009,15500,0.012,31000,0.014); break;
					case "2008": add=scaglioni(rednet,0,0.009,15500,0.012,31000,0.014); break;
					case "2007": add=scaglioni(rednet,0,0.009,15500,0.012,31000,0.014); break;
					case "2006": add=scaglioni(rednet,0,0.009,15500,0.012,31000,0.014); break;
					case "2005": add=scaglioni(rednet,0,0.009,15500,0.012,31000,0.014); break;
					case "2004": add=scaglioni(rednet,0,0.009,15493.71,0.014,30987.41,0.036,69721.68,0.04); break; 
					case "2003": add=scaglioni(rednet,0,0.009,15493.71,0.0191,30987.41,0.036,69721.68,0.04); break;
					case "2002": add=scaglioni(rednet,0,0.009,28000,0.0191,30987.41,0.036,69721.68,0.04); break;
					default: add=rednet*0.009
					}
				break;
		case "10": if (ann<2005) add=rednet*0.009; //Molise
					else if (ann==2005)add=rednet*0.012; 
						else add=rednet*0.014; break;
		case "11": switch (ann) //Piemonte
					{
					case "2010": if (rednet<=15000) add=rednet*0.009; 
								else if (rednet<=22000) add=rednet*0.012; 
									else add=rednet*0.014; break;
					case "2009": if (rednet<=15000) add=rednet*0.009; 
								else if (rednet<=22000) add=rednet*0.012; 
									else add=rednet*0.014; break;
					case "2008": if (rednet<=15000) add=rednet*0.009; 
								else if (rednet<=22000) add=rednet*0.012; 
									else add=rednet*0.014; break;
					case "2007": if (rednet<=11071.35) add=rednet*0.009; else add=rednet*0.014; break;
					case "2006": if (rednet<=10854.26) add=rednet*0.009; else add=rednet*0.014; break;
					case "2005": if (rednet<=10672.82) add=rednet*0.009; else add=rednet*0.014; break;
					case "2004": if (rednet<=10504.74) add=rednet*0.009; else add=rednet*0.014; break;
					case "2003": if (rednet<=10329.14) add=rednet*0.009; else add=rednet*0.014; break;
					case "2002": if (rednet<=10329.14) add=rednet*0.009; else add=rednet*0.014; break;
					default: add=rednet*0.009
					}
					break;
		case "12": switch (ann) //Puglia
					{
					case "2010": add=rednet*0.009; break;
					case "2009": if (rednet<=28000) add=rednet*0.009; else add=rednet*0.014; break;
					case "2008": if (rednet<=28000) add=rednet*0.009; else add=rednet*0.014; break;
					case "2004": add=rednet*0.011; break;
					case "2003": add=rednet*0.012; break;
					case "2002": add=rednet*0.014; break;
					default: add=rednet*0.009
					}
					break;
		case "13": add=rednet*0.009; break; //Sardegna
		case "14": if (ann<2006) add=rednet*0.009; else add=rednet*0.014; break; //Sicilia
		case "15": add=rednet*0.009; break; //Toscana
		case "16": add=rednet*0.009; break; // Trentino A. A.
		case "17": switch (ann) //Umbria
					{
					case "2010": if (rednet<=15000) add=rednet*0.009; else add=rednet*0.011; break;
					case "2009": if (rednet<=15000) add=rednet*0.009; else add=rednet*0.011; break;
					case "2008": if (rednet<=15000) add=rednet*0.009; else add=rednet*0.011; break;
					case "2007": if (rednet<=15000) add=rednet*0.009; else add=rednet*0.011; break;
					case "2006": if (rednet<=26000) add=rednet*0.009; else add=rednet*0.011; break;
					case "2005": if (rednet<=26000) add=rednet*0.009; else add=rednet*0.011; break;
					case "2004": if (rednet<=15000) add=rednet*0.009; else add=rednet*0.011; break;
					case "2003": if (rednet<=15000) add=rednet*0.009; else add=rednet*0.011; break;
					case "2002": if (rednet<=10329.14) add=rednet*0.009; else add=rednet*0.011; break;
					default: add=rednet*0.009
					}
					break;
		case "18": add=rednet*0.009; break; //Valle d'Aosta
		case "19": switch (ann)  //Veneto
					{
					case "2010": add=rednet*0.009; break;
					case "2009":{
							if (rednet<=29500||(dis>0&&rednet<=45000)||(fig>2&&rednet<=(20000+fig*10000))) 
								add=rednet*0.009; 
							else if ((rednet>29500)&&(rednet<=29650))
								add=rednet*round4(1-29235/rednet);
								else add=rednet*0.014
							break;
							}
					case "2008":{
							if (rednet<=29500||(dis>0&&rednet<=45000)||(fig>2&&rednet<=(20000+fig*10000))) 
								add=rednet*0.009; 
							else if ((rednet>29500)&&(rednet<=29650))
								add=rednet*round4(1-29235/rednet);
								else add=rednet*0.014
							break;
							}
					case "2007":{
							if (rednet<=28000||(dis>0&&rednet<=45000)||(fig>2&&rednet<=(20000+fig*10000))) 
								add=rednet*0.009; 
							else if ((rednet>28000)&&(rednet<=28142))
								add=rednet*round4(1-27748/rednet);
								else add=rednet*0.014
							break;
							}
					case "2006":{
							if (rednet<=29000||(dis>0&&rednet<=45000)||(fig>2&&rednet<=(20000+fig*10000))) 
								add=rednet*0.009; 
							else if ((rednet>29000)&&(rednet<=29147))
								add=rednet*round4(1-28739/rednet);
								else add=rednet*0.014
							break;
							}
					case "2005":{
							if (rednet<=29000||(dis>0&&rednet<=32600)) 
								add=rednet*0.009; 
							else add=rednet*0.014;
							if ((rednet>29000)&&(rednet<=29147)) add=add-0.986*(29147-rednet);
							break;
							}
					case "2004":{
							if (((cat==3||cat==4)&&rednet<=15000)||rednet<=14500||(dis>0&&rednet<=32600)) 
								add=rednet*0.009
							else add=scaglioni(rednet,0,0.012,15000,0.013,29000,0.014);
							break;
							}
					
 					case "2003":{
							if (rednet<=10400||(dis>0&&rednet<=32600)) add=rednet*0.009
							else add=scaglioni(rednet,0,0.012,15000,0.013,29000,0.014);
							break;
							}
					case "2002":{
							if (dis>0&&rednet<=30987.41) add=rednet*0.009
							else add=scaglioni(rednet,0,0.012,10329.14,0.013,15493.71,0.014,69721.68,0.019);
							break;
							}
					default: add=rednet*0.009
				break;
					}
		}
return(add);
}

function calcola()
{
geoal=true;
straal=false;
document.forms[0].diff.style.color="#000099"
lire=document.forms[0].lire[1].checked;
tondo=document.forms[0].tondo[0].checked;
anno=document.forms[0].anno.value;
anno1=document.forms[0].anno1.value;
regio=document.forms[0].regio.value;
comune=document.forms[0].comune.value;

if (comune==1&&regio!=9||comune==2&&regio!=12||comune==3&&regio!=4||comune==4&&regio!=15||comune==5&&regio!=7||comune==6&&regio!=8||comune==7&&regio!=3||comune==8&&regio!=19||comune==9&&regio!=14||comune==10&&regio!=17||comune==11&&regio!=0||comune==12&&regio!=6||comune==13&&regio!=11||comune==14&&regio!=5)
geoal=confirm('Comune e Regione scelti non concordano\nPremere "OK" per procedere nel calcolo\no "Annulla" per ripartire da zero');

mensi=document.forms[0].mensi.value;
giorni=document.forms[0].giorni.value;
figli=Math.round(document.forms[0].figli.value); 
piccoli=Math.round(document.forms[0].piccoli.value); 
disab=Math.round(document.forms[0].disab.value);
tipoca=document.forms[0].tipoca.value;
if (tipoca==0||tipoca==1) document.forms[0].tiporedca[0].checked=true;
if (tipoca==3) document.forms[0].tiporedca[1].checked=true;
tiporedca=document.forms[0].tiporedca[0].checked;

if (document.forms[0].coniu[0].checked) 
	{
	coniu=1; 
	document.forms[0].perc.value=100;
	document.forms[0].mesicon.value=0;
	}
else if (document.forms[0].mesicon.value>0&&document.forms[0].mesicon.value<12)
		coniu=document.forms[0].mesicon.value/12;
			else document.forms[0].mesicon.value=coniu=0;

mesifig=new Array(2);
for (k=0; k<2; k++)
if (document.forms[0].mesifig[k].value>0&&document.forms[0].mesifig[k].value<12)
	mesifig[k]=document.forms[0].mesifig[k].value;
else 
	document.forms[0].mesifig[k].value=mesifig[k]=0;

perc=document.forms[0].perc.value;
lav=document.forms[0].lav.value;
contri=document.forms[0].contri[0].checked;
if (anno>2006) alicontri=0.0949; else alicontri=0.0919;
if (anno1>2006) alicontri1=0.0949; else alicontri1=0.0919;

if (contri) 
	{
	decontri=1-alicontri; 
	decontri1=1-alicontri1;
	}
else 
	decontri=decontri1=1;

primaca=0;
redfa=0;
altraca=parse(document.forms[0].altraca.value);
oneri=parse(document.forms[0].oneri.value);
altredetr=parse(document.forms[0].altredetr.value);
stra=parse(document.forms[0].stra.value);
red=parse(document.forms[0].red.value);

if (geoal&&red&&isNumor0(figli)&&isNumor0(piccoli)&&isNumor0(disab)&&isNum(giorni)&&isNumor0(perc)&&altraca&&oneri&&altredetr&&stra) 
	{
	if (stra>3000/decontri)
		stra=round2(3000/decontri);

	if (tondo)
		if (lire)
			{
			red=roundmig(red);
			oneri=roundmig(oneri);
			altredetr=roundmig(altredetr);
			altraca=roundmig(altraca);
			}

		else 
			{
			red=Math.round(red);
			oneri=Math.round(oneri);
			altredetr=Math.round(altredetr);
			altraca=Math.round(altraca);
			}
	
	document.forms[0].red.value=punt(virg(red+""));
	document.forms[0].oneri.value=punt(virg(oneri+""));
	document.forms[0].altredetr.value=punt(virg(altredetr+""));
	document.forms[0].stra.value=punt(virg(stra+""));
	document.forms[0].altraca.value=punt(virg(altraca+""));

	if(lire)
			{
			red=liraeuro(red);
			oneri=liraeuro(oneri);
			altredetr=liraeuro(altredetr);
			altraca=liraeuro(altraca);
			}

	if (piccoli>figli)
	{
	piccoli=figli;
	document.forms[0].piccoli.value=piccoli;
	}
	if (disab>figli)
	{
	disab=figli;
	document.forms[0].disab.value=disab;
	}
	if (giorni>365)
	{
	giorni=365;
	document.forms[0].giorni.value=giorni;
	}	
	if (perc>100)
	{
	perc=100;
	document.forms[0].perc.value=perc;
	}
	if (anno>2006) 
		if (perc<100)
		{
		perc=50;
		document.forms[0].perc.value=perc;
		}

	perc=perc/100;
	totfigli=figli;

	if (mesifig[0]!=0)
		{
		totfigli=totfigli+1;
		figli=figli+mesifig[0]/12;
		}		
	if (mesifig[1]!=0)
		{
		totfigli=totfigli+1;
		figli=figli+mesifig[1]/12;
		if (document.forms[0].figfra2[0].checked) piccoli=piccoli+mesifig[1]/12;
			else if (document.forms[0].figfra2[1].checked) disab=disab+mesifig[1]/12;
		}


	red1=red*decontri1;
	red=red*decontri;
	stra=stra*decontri;

	switch (tipoca) 
		{
		case "0": 	{
				redfa=0;
				break;
				}
		case "1": 	redfa=altraca*1.05*1.333333; break;
		case "2": 	if (tiporedca) redfa=altraca*1.05; 
					else redfa=altraca*0.85; break;
		case "3": 	redfa=altraca*0.85; break;
		case "4":	redfa=altraca*0.85*0.70;
		}

	if (stra>red) 
			{
			stra=red;
			document.forms[0].stra.value=stra;
			}

	if (stra>0&&anno>2007)
		{
		straal=confirm('La tassazione separata su premi e voci variabili\nsi applica solo ai lavoratori dipendenti privati\n il cui reddito da lavoro non abbia superato\n i 35.0000 euro. Procedere con la tassazione separata?');
		if (straal) 
				{
				red=minus(red,stra);
				if (lav>1)
					{
					document.forms[0].lav.value="0";
					lav="0"; 
					}
				}
			else
				{
				document.forms[0].stra.value="0";
				stra=0;
				}
		}
	if (anno>2006&&red==0)
		if (redfa<=500) redfa=0; else lav=5;	//esenzione per i soli redditi fondiari sotto i 500 euro dal 2007
	red=eval(red)+eval(redfa); 		
	red1=eval(red1)+eval(redfa); 
	
	oneri=eval(oneri);
	switch (anno)
		{
		case "2001":{
				impo=irpef01(minus(red,oneri),lav,coniu,totfigli,figli,piccoli,disab,perc,giorni,altredetr); 
				impomarg=irpef01(minus(red+500,oneri),lav,coniu,totfigli,figli,piccoli,disab,perc,giorni,altredetr);
				break;
				}
		case "2002":{
				impo=irpef02(minus(red,oneri),lav,coniu,totfigli,figli,piccoli,disab,perc,giorni,altredetr);
				impomarg=irpef02(minus(red+500,oneri),lav,coniu,totfigli,figli,piccoli,disab,perc,giorni,altredetr);
				break;
				}
		case "2003":{
				impo=irpef03(red,lav,coniu,totfigli,figli,piccoli,disab,perc,giorni,oneri,altredetr);
				impomarg=irpef03(red+500,lav,coniu,totfigli,figli,piccoli,disab,perc,giorni,oneri,altredetr);
				break;
				}
		case "2004":{
				impo=irpef03(red,lav,coniu,totfigli,figli,piccoli,disab,perc,giorni,oneri,altredetr);
				impomarg=irpef03(red+500,lav,coniu,totfigli,figli,piccoli,disab,perc,giorni,oneri,altredetr);
				break;
				}
		case "2005":{
				impo=irpef05(red,lav,coniu,figli,piccoli,disab,perc,giorni,oneri,altredetr);
				impomarg=irpef05(red+500,lav,coniu,figli,piccoli,disab,perc,giorni,oneri,altredetr);
				break;
				}
		case "2006":{
				impo=irpef05(red,lav,coniu,figli,piccoli,disab,perc,giorni,oneri,altredetr);
				impomarg=irpef05(red+500,lav,coniu,figli,piccoli,disab,perc,giorni,oneri,altredetr);
				break;
				}
		case "2007":{
				impo=irpef07(red,lav,coniu,totfigli,figli,piccoli,disab,perc,giorni,oneri,altredetr);
				impomarg=irpef07(red+500,lav,coniu,totfigli,figli,piccoli,disab,perc,giorni,oneri,altredetr);
				break; 
				}
		case "2008":{
				impo=irpef07(red,lav,coniu,totfigli,figli,piccoli,disab,perc,giorni,oneri,altredetr)+stra*0.1;
				impomarg=irpef07(red+500,lav,coniu,totfigli,figli,piccoli,disab,perc,giorni,oneri,altredetr)+stra*0.1;
				break; 
				}
            case "2009":{
				impo=irpef07(red,lav,coniu,totfigli,figli,piccoli,disab,perc,giorni,oneri,altredetr)+stra*0.1;
				impomarg=irpef07(red+500,lav,coniu,totfigli,figli,piccoli,disab,perc,giorni,oneri,altredetr)+stra*0.1;
				break; 
				}
		case "2010":{
				impo=irpef07(red,lav,coniu,totfigli,figli,piccoli,disab,perc,giorni,oneri,altredetr)+stra*0.1;
				impomarg=irpef07(red+500,lav,coniu,totfigli,figli,piccoli,disab,perc,giorni,oneri,altredetr)+stra*0.1;
				break; 
				}

		}
	if (anno1!=anno)
			switch (anno1)
				{
				case "2001":{
						impo1=irpef01(minus(red1,oneri),lav,coniu,totfigli,figli,piccoli,disab,perc,giorni,altredetr); 
						break;
						}
				case "2002":{
						impo1=irpef02(minus(red1,oneri),lav,coniu,totfigli,figli,piccoli,disab,perc,giorni,altredetr); 
						break;
						}
				case "2003":{
						impo1=irpef03(red1,lav,coniu,totfigli,figli,piccoli,disab,perc,giorni,oneri,altredetr); 
						break;
						}
				case "2004":{
						impo1=irpef03(red1,lav,coniu,totfigli,figli,piccoli,disab,perc,giorni,oneri,altredetr); 
						break;
						}
				case "2005":{
						impo1=irpef05(red1,lav,coniu,figli,piccoli,disab,perc,giorni,oneri,altredetr); 
						break;
						}
				case "2006":{
						impo1=irpef05(red1,lav,coniu,figli,piccoli,disab,perc,giorni,oneri,altredetr); 
						break;
						}
				case "2007":{
						impo1=irpef07(red1,lav,coniu,totfigli,figli,piccoli,disab,perc,giorni,oneri,altredetr); 
						break;
						}
                        case "2008":{
						impo1=irpef07(red1,lav,coniu,totfigli,figli,piccoli,disab,perc,giorni,oneri,altredetr); 
						break;
						}
				case "2009":{
						impo1=irpef07(red1,lav,coniu,totfigli,figli,piccoli,disab,perc,giorni,oneri,altredetr); 
						break;
						}
				}
	else impo1=impo;
	if (impo>0)
		{
		addi=addireg(red,lav,coniu,figli,piccoli,disab,perc,regio,anno,oneri);
		addico=addicom(red,comune,coniu,figli,piccoli,disab,perc,anno,oneri);
		}
	else 
		addi=addico=0;
	
	impo=round2(impo); 
	impo1=round2(impo1); 
	addi=round2(addi);
	addico=round2(addico);
	if (red==0) ali="0"; 
		else ali=round2(impo/(red-oneri+stra*straal)*100);
	marg=round2((impomarg-impo)/5); 
	if (!tiporedca) redaficor=redfa/0.85; else redaficor=0;
	if (tipoca==4) redaficor=redaficor/0.7;
	netimp=eval(round2(minus(minus(minus(red-redfa+redaficor+(stra*straal),impo),addi),addico)));   
	
	mese=round2(netimp/mensi);
	if(lire) 
		{
		impo=eurolira(impo);
		impo1=eurolira(impo1);
		addi=eurolira(addi);
		addico=eurolira(addico);
		mese=eurolira(mese);
		if (tondo)
			{
			impo=roundmig(impo);
			impo1=roundmig(impo1);
			addi=roundmig(addi);
			addico=roundmig(addico);
			mese=roundmig(mese);
			}
		}
	else if (tondo) 
			{
			impo=Math.round(impo)+"";
			impo1=Math.round(impo1)+"";
			addi=Math.round(addi)+"";
			addico=Math.round(addico)+"";
			mese=Math.round(mese)+"";
			}
	diff=round2(impo-impo1);
	
	document.forms[0].imp.value=punt(virg(impo));
	document.forms[0].media.value=virg(ali);
	document.forms[0].margi.value=virg(marg);
	document.forms[0].addi.value=punt(virg(round2(addi)));
	document.forms[0].addico.value=punt(virg(round2(addico)));
	if (diff==0) document.forms[0].diff.value=0;
		else if (diff>0){
			document.forms[0].diff.style.color="red"; 
			document.forms[0].diff.value="+"+punt(virg(diff)); }
			else
				document.forms[0].diff.value="-"+punt(virg(Math.abs(diff)+""));
	document.forms[0].mese.value=punt(virg(mese));
	
	}
else 
	{
	if(geoal)
	alert("È presente un valore non numerico o scorretto\noppure c'è un errore nei separatori delle migliaia\nPremere OK per ricominciare");
	document.forms[0].reset();
	}
}
