function scaglioniinfl (reddi,sca1,ali1,sca2,ali2,sca3,ali3)
	{
	reddidefl=0; i=3
	while (reddi>arguments[i]&&i<arguments.length)
		{
		reddidefl=reddidefl+(arguments[i]-arguments[i-2])/arguments[i-1]; 
		reddidefl=eval(round2(reddidefl));
		i=i+2;
		}
	reddidefl=round2(reddidefl+(reddi-arguments[i-2])/arguments[i-1]); 
	
	if (tondo) reddidefl=Math.round(reddidefl); 
	return(reddidefl);
	}

function defl (reddi,ann)
	{ 
	switch (ann)
		{
		case "2006": reddi=scaglioniinfl(reddi,0,1.017,1282.73,1.0153,2134.31,1.0275); break;

		case "2007": reddi=scaglioniinfl(reddi,0,1.02,1308.39,1.018,2176.38,1.015);
		}

	return(reddi);
	}


function irpef05mens(redmens,redprogmens,cat,mon,con,fig,pic,dis,prc)
{
	impm=detr=redlor=0;
	switch (calcolo)
		{
		case "0": 	{
				coered1=coered2=mensi;
				coededu=12;
				break;
				}
		case "1": 	{
				coered1=coered2=mensi; 
				coededu=mensi;
				break;
				}
		case "2": 	{
				coered1=mensi;
				coered2=12;
				coededu=12;
				}
		}
	redlor=redprogmens/mon*coered1;
	if ((cat==3||cat==4)&&redmens==redprogmens/mon&&irpef05(redlor,cat,con,fig,pic,dis,prc,365,0,0)<=0) impm=0;
	else
		{
		if (mon<=coededu) redmens=minus(redmens,notax03(redlor,0,cat,365)/coededu);
		if (mon<=coededu) redmens=minus(redmens,family05(redlor,0,con,fig,pic,dis,prc)/coededu);
		impm=scaglioni(redmens*coered2,0,0.23,26000,0.33,33500,0.39,100000,0.43)/coered2;
		}
	return(impm);
}


function irpef07mens(redmens,redprogmens,cat,mon,con,totfig,fig,pic,dis,prc)
{
	
	impm=detr=redlor=0; 
	switch (calcolo)
		{
		case "0": 	{
				coered1=coered2=mensi;
				coedetr=12;
				break;
				}
		case "1": 	{
				coered1=coered2=mensi; 
				coedetr=mensi;
				break;
				}
		case "2": 	{
				coered1=mensi;
				coered2=12;
				coedetr=12;
				}
		}

	redlor=redprogmens/mon*coered1; 
	if ((cat==3||cat==4)&&redmens==redprogmens/mon&&irpef07(redlor,cat,con,totfig,fig,pic,dis,prc,365,0,0)<=0) impm=0;
	else
		{
		impm=scaglioni(redmens*coered2,0,0.23,15000,0.27,28000,0.38,55000,0.41,75000,0.43)/coered2;
		switch (cat) 
			{
			case "0": 	{
					detralav=detra07dip(redlor,365)/coedetr;
					break; 
					}
			case "1": 	{
					detralav=detra07diptemdet(redlor,365)/coedetr; 
					break;
					}
			case "3": detralav=detra07pen(redlor,365)/coedetr; break; 
			case "4": detralav=detra07pen75(redlor,365)/coedetr; break;	
			
			}
		if (con==1) detrafam=detra07con(redlor,1); 		
		detrafam=(detrafam+detra07fig(redlor,con,totfig,fig,pic,dis,prc))/coedetr;	
		detr=detralav+detrafam;
		if (mon<=coedetr) impm=minus(impm, detr);
			else
				{
				detralav=detrafam=0;
				if (calcolo==2)
					{
					impm1=minus(impm,detr)*12
					impm2=irpef07(redlor-redmens*(mensi-13),cat,con,totfig,fig,pic,dis,prc,365,0,0); 
					if (mon==13) impm=impm2-impm1;
						else impm=irpef07(redlor,cat,con,totfig,fig,pic,dis,prc,365,0,0)-impm2;
					}
				}
		}
	return(impm);				
	}
	
function addicom (reddi,comu,con,fig,pic,dis,prc,ann,onr)
	{
	if (ann>2004&&ann<2007) reddi=minus(reddi-onr,family05(reddi,onr,con,fig,pic,dis,prc));
	else reddi=reddi-onr;
	switch (comu)
		{
		case "0": if (ann<2007) addic=reddi*0.002; else addic=reddi*0.002; break; //generico
		case "1": switch (ann) //Ancona
					{
					case "2001": addic=reddi*0.004; break;
					case "2007": addic=reddi*0.007; break;
					case "2008": addic=reddi*0.008; break;
					case "2009": addic=reddi*0.008; break;
					case "2010": addic=reddi*0.008; break;
					default: addic=reddi*0.005;
					}
					break;
		case "2": if (ann<2002) addic=reddi*0.004; else addic=reddi*0.005; break; //Bari
		case "3": if (ann<2002) addic=reddi*0.002; //Bologna con esenzione a 12000
					else if (ann<2007) addic=reddi*0.004; 
						else if (reddi<=12000) addic=0; 
							else addic=reddi*0.007; break;
		case "4": if (ann<2002) addic=reddi*0.001; //Firenze
					else if (ann==2004||ann==2005) addic=reddi*0.005; 
						else addic=reddi*0.003; break;
		case "5": switch (ann) //Genova esenzione
					{
					case "2001": addic=reddi*0.0027; break;
					case "2008": if(reddi<=10000) addic=0; else addic=reddi*0.007; break;
					case "2009": if(reddi<=10000) addic=0; else addic=reddi*0.007; break;
					case "2010": if(reddi<=10000) addic=0; else addic=reddi*0.007; break;
					default: addic=reddi*0.0047;
					}
					break;
		case "6": addic=0; break; //Milano
		case "7": if (ann<2002) addic=reddi*0.004; else addic=reddi*0.005; break; //Napoli
		case "8": switch (ann) //Padova con esenzione
					{
					case "2001": addic=reddi*0.002; break;
					case "2007": if (reddi<=10500) addic=0; else addic=reddi*0.006; break;
					case "2008": if (reddi<=12000) addic=0; else addic=reddi*0.006; break;
					case "2009": if (reddi<=12000) addic=0; else addic=reddi*0.006; break;
					case "2010": if (reddi<=12000) addic=0; else addic=reddi*0.006; break;
					default: addic=reddi*0.004;
					}
					break;
		case "9":  switch (ann) //Palermo
					{
					case "2001": addic=0; break;
					case "2007": addic=reddi*0.004; break;
					case "2008": addic=reddi*0.004; break;
					case "2009": addic=reddi*0.004; break;
					case "2010": addic=reddi*0.004; break;
					default: addic=reddi*0.002;
					}
					break;
		case "10": switch (ann) //Perugia con esenzione
					{
					case "2005": addic=reddi*0.001; break;
					case "2006": addic=reddi*0.001; break;
					case "2007": if (reddi<=10500) addic=0; else addic=reddi*0.007; break;
					case "2008": if (reddi<=12500) addic=0; else addic=reddi*0.007; break;
					case "2009": if (reddi<=12500) addic=0; else addic=reddi*0.007; break;
					case "2010": if (reddi<=12500) addic=0; else addic=reddi*0.007; break;
					default: addic=0;
					}
					break;
		case "11": if (ann<2006) addic=0; //Pescara con esenzione a 15050
					else if (ann<2007) addic=reddi*0.001; 
						else if (reddi<15050) addic=0; 
							else addic=reddi*0.0049; break;
		case "12": if (ann<2002) addic=0; //Roma
					else if (ann<2007) addic=reddi*0.002; 
						else addic=reddi*0.005; break;
		case "13": switch (ann) //Torino esenzione
					{
					case "2001": addic=reddi*0.001; break;
					case "2007": if (reddi<=10300) addic=0; else addic=reddi*0.005; break;
					case "2008": if (reddi<=10400) addic=0; else addic=reddi*0.005; break;
					case "2009": if (reddi<=10700) addic=0; else addic=reddi*0.005; break;
					case "2010": if (reddi<=10700) addic=0; else addic=reddi*0.005; break;
					default: addic=reddi*0.003;
					}
					break;
		case "14": switch (ann) //Udine
					{
					case "2005": addic=reddi*0.001; break;
					case "2006": addic=reddi*0.001; break;
					case "2007": addic=reddi*0.002; break;
					case "2008": addic=reddi*0.002; break;
					case "2009": addic=reddi*0.002; break;
					case "2010": addic=reddi*0.002; break;
					default: addic=0;
					}

		}
	return(addic);
	}

function calcolamens()
{
lire=false;
noadd=false;
geoal=true;
tondo=document.forms[0].tondo[0].checked;
anno=document.forms[0].anno.value; 
month=Math.round(document.forms[0].month.value);
regio=document.forms[0].regio.value;
comune=document.forms[0].comune.value;
mensi=Math.round(document.forms[0].mensi.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);
detrafam=detralav=0;
if (document.forms[0].coniu[0].checked) 
	{
	coniu=1; 
	document.forms[0].perc.value=100;
	}
else coniu=0;
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');
perc=document.forms[0].perc.value;
lav=document.forms[0].lav.value;
for (k=0; k<3; k++)
if (document.forms[0].calcolo[k].checked) calcolo=k+"";

contri=document.forms[0].contri[0].checked;
if (anno>2006) alicontri=0.0949; else alicontri=0.0919;
alicontri1=0.0919;
if (contri) 
	{
	decontri=1-alicontri; 
	decontri1=1-alicontri1;
	decontri2=0.9051;
	}
else 
	decontri=decontri1=decontri2=1;

red=parse(document.forms[0].red.value);
if (red)
	{
	if (document.forms[0].redprog.value==""||prosti==true)
		{
		document.forms[0].redprog.value=punt(virg(round2(red*month+"")));
		prosti=true;
		}
	if (document.forms[0].redprec.value==""||presti==true)
		{
		if (lav==3||lav==4) reddefl=defl(red,anno); else reddefl=red;
		document.forms[0].redprec.value=punt(virg(round2(reddefl*mensi+"")));
		presti=true;
		}
	}

redprog=parse(document.forms[0].redprog.value);
redprec=parse(document.forms[0].redprec.value);

if (geoal&&red&&redprog&&redprec&&isNumor0(figli)&&isNumor0(piccoli)&&isNumor0(disab)&&isNumor0(perc)) 
	{
	if (tondo)
		{
		red=Math.round(red);
		redprog=Math.round(redprog);
		redprec=Math.round(redprec);
		}

	document.forms[0].red.value=punt(virg(red+""));
	document.forms[0].redprog.value=punt(virg(redprog+""));
	document.forms[0].redprec.value=punt(virg(redprec+""));

	if (piccoli>figli)
		{
		piccoli=figli;
		document.forms[0].piccoli.value=piccoli;
		}
	if (disab>figli)
		{
		disab=figli;
		document.forms[0].disab.value=disab;
		}	
	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;
			}
	if (month>mensi)
		{
		mensi=month;
		document.forms[0].mensi.value=mensi;
		}

	
	perc=perc/100;
	totfigli=figli;
	
	switch (anno)
		{
		case "2006":{
				impo=irpef05mens(red*decontri,redprog*decontri,lav,month,coniu,figli,piccoli,disab,perc);
				if (irpef05(redprec*decontri,lav,coniu,figli,piccoli,disab,perc,365,0,0)<=0) noadd=true;
				break;
				}
		case "2007":{
				impo=irpef07mens(red*decontri,redprog*decontri,lav,month,coniu,totfigli,figli,piccoli,disab,perc);
				if (irpef05(redprec*decontri,lav,coniu,figli,piccoli,disab,perc,365,0,0)<=0) noadd=true;
				break;
				}
		case "2008":{
				impo=irpef07mens(red*decontri,redprog*decontri,lav,month,coniu,totfigli,figli,piccoli,disab,perc);
				if (irpef05(redprec*decontri,lav,coniu,figli,piccoli,disab,perc,365,0,0)<=0) noadd=true;
				break;
				}
            case "2009":{
				impo=irpef07mens(red*decontri,redprog*decontri,lav,month,coniu,totfigli,figli,piccoli,disab,perc);
				if (irpef05(redprec*decontri,lav,coniu,figli,piccoli,disab,perc,365,0,0)<=0) noadd=true;
				break;
				}
		case "2010":{
				impo=irpef07mens(red*decontri,redprog*decontri,lav,month,coniu,totfigli,figli,piccoli,disab,perc);
				if (irpef05(redprec*decontri,lav,coniu,figli,piccoli,disab,perc,365,0,0)<=0) noadd=true;
				break;
				}


		}
	if (!noadd)
			{
			if (month<12) 
				{
				addiregio=addireg(redprec*decontri,lav,coniu,figli,piccoli,disab,perc,regio,(anno-1)+"",0)/11;
				addicomusa=addicom(redprec*decontri,comune,coniu,figli,piccoli,disab,perc,(anno-1)+"",0)/11;
				if (anno>2007) addicomusa=addicomusa*0.7;
				if (anno>2006&&month>2) addicomuac=addicom(redprec*decontri,comune,0,0,0,0,0,anno,0)/30; 
				else addicomuac=0;
				}
			else addiregio=addicomusa=addicomuac=0; 
			} 
	else 
		addiregio=addicomusa=addicomuac=0;

	impo=round2(impo); 
	addiregio=round2(addiregio);
	addicomusa=round2(addicomusa);
	addicomuac=round2(addicomuac);
	detralav=round2(detralav);
	detrafam=round2(detrafam); 
	netimp=round2(red*decontri-impo-addiregio-addicomusa-addicomuac);   // netimp e netimp1 danno il reddito netto dopo contributi e imposte.
	
	if (tondo) 
			{
			impo=Math.round(impo)+"";
			addiregio=Math.round(addiregio)+"";
			addicomusa=Math.round(addicomusa)+"";
			addicomuac=Math.round(addicomuac)+"";
			detralav=Math.round(detralav)+"";
			detrafam=Math.round(detrafam)+"";
			netimp=Math.round(netimp)+"";
			}

	document.forms[0].imp.value=punt(virg(impo));
	document.forms[0].addiregio.value=punt(virg(addiregio));
	document.forms[0].addicomusa.value=punt(virg(addicomusa));
	document.forms[0].addicomuac.value=punt(virg(addicomuac));
	document.forms[0].detralav.value=punt(virg(detralav));
	document.forms[0].detrafam.value=punt(virg(detrafam));
	document.forms[0].netto.value=punt(virg(netimp));

	}
else 
	{
	if (geoal)
	alert("È presente un valore non numerico o scorretto\noppure c'è un errore nei separatori delle migliaia\nPremere OK per ricominciare");
	azzeramens();
	}
}

function azzeramens()
{
document.forms[0].reset();
prosti=presti=false;
}

function azzesti()
{
prosti=presti=false;
document.forms[0].redprog.value="";
document.forms[0].redprec.value="";
}
