
function creamese(m)
	{
	switch (m)
		{
		case 1: mstr="gennaio"; break;
		case 2: mstr="febbraio"; break;
		case 3: mstr="marzo"; break;
		case 4: mstr="aprile"; break;
		case 5: mstr="maggio"; break;
		case 6: mstr="giugno"; break;
		case 7: mstr="luglio"; break;
		case 8: mstr="agosto"; break;
		case 9: mstr="settembre"; break;
		case 10: mstr="ottobre"; break;
		case 11: mstr="novembre"; break;
		case 12: mstr="dicembre"; break;
		}
	return(mstr);
	}

function dategiorni (a1,m1,g1,a2,m2,g2) //rileva la distanza in giorni tra due date
	{
	mcorto=0;
	if (m1<m2)
		{
		mmin=m1;
		mmax=m2;
		}
	else if (m2<m1)
		{
		mmin=m2;
		mmax=m1;
		}
	if (m1!=m2)
		for (i=mmin; i<mmax; i++)
			{
			if (i==4||i==6||i==9||i==11) mcorto=mcorto+1;
			if (i==2) mcorto=mcorto+3;
 			}
	
	if (m1>m2) mcorto=mcorto*(-1);
	gg=365*(a2-a1)+31*(m2-m1)-mcorto+(g2-g1); 
	return (gg);
}

function giornidata(a1,m1,g1,gg) //dà (come stringa aaaammgg) la data ottenuta aggiungendo a una data un tot di giorni
	{
	finem=new Array(31,31,28,31,30,31,30,31,31,30,31,30);
	
	while (gg>365)
		{
		a1++;
		gg=gg-365;
		}
	
	if (gg>finem[m1%12])
		{
		m=m1;
		while (gg>finem[m%12])
			{
			gg=gg-finem[m%12];
			m++;
			}
		if (m>12)
			{
			a1++;
			m1=m%12;
			}
		else m1=m;
		}
	if (g1+gg>finem[m1%12])
		{
		g1=(g1+gg)-finem[m1%12];
		//if (g1==0) g1=finem[m1%12]; clausola salvataggio per g1 uguale a zero non più necessaria
		m1++;
		if (g1>finem[m1%12]) 
			{
			g1=g1-finem[m1%12];
			m1++;
			}

		if (m1>12)
			{
			m1=m1%12;
			a1++;
			}
		}

	else g1=g1+gg;
	
	a1=""+a1;
	if (m1<10) m1="0"+m1; else m1=""+m1;
	if (g1<10) g1="0"+g1; else g1=""+g1;
	
	data=a1+m1+g1;
	return (data);
}

function estraianno(s)
{
	return(eval(s.substring(0,4)));
}

function estraimese(s)
{
	return(eval(s.substring(4,6)));
}
function estraigiorno(s)
{
	return(eval(s.substring(6,8)));
}

function fragiorni (an,me,gi,et,anc,mec,gic)
//restituisce come stringa aaaammgg la data in cui si raggiunge la quota con le frazioni di età e contributi
{
			
	distaetacon=dategiorni(an+et,me,gi,anc,mec,gic); 
	totreq=Math.ceil((365+distaetacon)/2);
	giosing=(365+distaetacon)%2;
	totcon=totreq-distaetacon;
	diffe=totreq+Math.min(minus(totcon%7,giosing),7-totcon%7);
	frag=giornidata(an+et,me,gi,diffe);
	return(frag); 
}

function pensione()
{

giorno=eval(document.forms[0].giorno.value);
mese=eval(document.forms[0].mese.value);
anno=eval(document.forms[0].anno.value);
giornocon=eval(document.forms[0].giornocon.value);
mesecon=eval(document.forms[0].mesecon.value);
annocon=eval(document.forms[0].annocon.value);
annicon=eval(document.forms[0].annicon.value);
setticon=eval(document.forms[0].setticon.value);
uomo=document.forms[0].uomo[0].checked;
dipe=document.forms[0].dipe[0].checked;
usura=0;
scuola=document.forms[0].scuola[0].checked;
statale=document.forms[0].statale[0].checked;
	
if (uomo) vec=65; else vec=60;
if (scuola)
	{
	dipe=true;
	document.forms[0].dipe[0].checked=true;
	statale=true;
	document.forms[0].statale[0].checked=true;

	//usura=false;
	//document.forms[0].usura[1].checked=true;
	}

if (statale)
	{
	dipe=true;
	document.forms[0].dipe[0].checked=true;
	}

if (dipe) aut=0; 
else
	{
	aut=1;
	//usura=false;
	//document.forms[0].usura[1].checked=true;
	}

if ((setticon==undefined||setticon!=annicon*52)&&annicon!=undefined)
	{
	setticon=annicon*52;
	document.forms[0].setticon.value=setticon;
	}
else if (setticon==undefined) setticon=0;

if (annicon==undefined)
	if (setticon!=undefined) annicon=Math.floor(setticon/52);
	else annicon=0;

settiav=setticon%52;
annoconor=annocon;  //tiene traccia della data originaria in cui è stata indicata la maturazione dei contrib.
meseconor=mesecon;
giornoconor=giornocon; 
if (settiav!=0)
	{
	giorniav=(52-settiav)*7+1;
	datacon=giornidata(annocon-1,mesecon,giornocon,giorniav);
	annocon=estraianno(datacon);
	mesecon=estraimese(datacon);
	giornocon=estraigiorno(datacon);
	}


fra=annofin=0;
aug=0; //aumento di un anno da applicare nel 2009 se è scattato il secondo semestre
annoreq=2007;
annic=annicon=annicon+(annoreq-annocon); //contributi maturati riportati al 2007, se indicati per un anno diverso

if (anno+vec>=2007&&annicon>0&&annic<=39+aut&&!(anno<1950-aut&&annic>35)) //controlla che la pensione non sia maturata prima del 2007
{
eta=57+aut;	

if ((annoreq<anno+eta||annic<35)&&annic<39+aut&&annoreq-anno<vec)
	{
	annoreq=2008;
	eta=58+aut-usura*1;
	annic++;
	
	if ((annoreq<anno+eta||annic<35)&&annic<40&&annoreq-anno<vec)
		{
		annoreq=2009;
		annic++;
		if (((mese>6&&anno>1950-aut)||(mesecon>6&&annic<36))&&!scuola)
			{
			eta=59+aut-usura*2;
			aug=1;
			if (anno==1950-aut&&(annic==35||(annic==34&&mesecon<mese)||(annic==36&&mesecon>mese)))
 				{
				annocon35=annoreq+35-annic;
				fragio=fragiorni(anno,mese,giorno,eta,annocon35,mesecon,giornocon);
				if (estraianno(fragio)==2009) fra=1; else fra=0.5;
				}
			}
		if ((annoreq-anno<eta||annic<35||annoreq-anno+annic+fra<93+2*aug)&&annic<40&&annoreq-anno<vec)
			{
			annoreq=2010;
			if (statale&&!uomo) vec++;
			annic++;
			eta=59+aut-usura*2;
			if (fra>0) fra=1; 
			else if (anno==1951-aut&&(annic==35||(annic==34&&mesecon<mese)||(annic==36&&mesecon>mese)))
 				{
				annocon35=annoreq+35-annic;
				fragio=fragiorni(anno,mese,giorno,eta,annocon35,mesecon,giornocon);
				if (estraianno(fragio)==2010) fra=1;
				}
			if ((annoreq-anno<eta||annic<35||annoreq-anno+annic+fra<95)&&annic<40&&annoreq-anno<vec)
				{
				annoreq=2011;
				annic++; 
				eta=60+aut-usura*3;
				if (anno==1951-aut&&(annic==35||(annic==34&&mesecon<mese)||(annic==36&&mesecon>mese)))
 					{
					annocon35=annoreq+35-annic;
					fragio=fragiorni(anno,mese,giorno,eta,annocon35,mesecon,giornocon);
					if (estraianno(fragio)==2011) fra=1; else fra=0.5;
					}
				if ((annoreq-anno<eta||annic<35||annoreq-anno+annic+fra<96)&&annic<40&&annoreq-anno<vec)
					{
					annoreq=2012;
					if (statale&&!uomo) vec=vec+4;
					annic++;
					if (fra>0) fra=1;
					else if (anno==1952&&(annic==35||(annic==34&&mesecon<mese)||(annic==36&&mesecon>mese)))
 						{
						annocon35=annoreq+35-annic;
						fragio=fragiorni(anno,mese,giorno,eta,annocon35,mesecon,giornocon);
						if (estraianno(fragio)==2012) fra=1; 
						}
					if ((annoreq-anno<eta||annic<35||annoreq-anno+annic+fra<96)&&annic<40&&annoreq-anno<vec)
						{
						annoreq=2013;
						annic++;
						eta=61+aut-usura*3;
						if (anno==1952-aut&&(annic==35||(annic==34&&mesecon<mese)||(annic==36&&mesecon>mese)))
 							{
							annocon35=annoreq+35-annic;
							fragio=fragiorni(anno,mese,giorno,eta,annocon35,mesecon,giornocon);
							if (estraianno(fragio)==2013) fra=1; else fra=0.5;
							}
						if ((annoreq-anno<eta||annic<35||annoreq-anno+annic+fra<97)&&annic<40&&annoreq-anno<vec)
							{
 							annoet=anno+eta; //va all'anno oltre il 2013 in cui si compiono 61 anni
							etaag=annoet-annoreq; //registra gli anni così passati dal 2013
							annicag=minus(35,annic+etaag); //registra gli eventuali anni mancanti a 35 di contr.
							annoet=annoet+annicag; //avanza ancora fino a 35 anni di contr. 
							etaag=annoet-annoreq;  //registra di nuovo gli eventuali ulteriori anni
							annic1=etaag+annic-annicag;
							if (annoet-annicag==anno+61+aut&&(annic1==35||(annic1==34&&mesecon<mese)||(annic1==36&&mesecon>mese)))
								{
								annocon35=annoreq+35-annic;
								fragio=fragiorni(anno,mese,giorno,eta,annocon35,mesecon,giornocon);
								if (estraianno(fragio)==annoet) fra=1;
								}
							
							if (annoet-anno+etaag+annic+fra<97+aut&&annic<40&&annoreq-anno<vec)

							if (eta+annic+etaag<97+aut-usura*3) annoet=annoet+1 //aggiunge l'eventuale anno per quota 97
							annoreq=Math.min(annoet,annoreq+(40-annic),anno+vec);
							
							}
						}
					}
				}
			}
		}
	}

	          //ultimo caso: si esce con i due requisiti, quindi vale la data in cui risultano maturati tutti e due
			//Se entrambi maturano nello stesso anno è la data più avanzata nell'anno, altrimenti occorre tenere 				//traccia di quale requisito è maturato anticipatamente	
		
antcon=false;
anteta=false;
switch (annoreq)
	{
	case 2007:
		{
		if (annic>35&&anno==1950-aut) antcon=true;
		if (anno<1950-aut&&annic==35) anteta=true; 
		break;
		}

	case 2008:
		{
		if (annic>35&&anno==1950-aut) antcon=true;
		if (anno<1950-aut&&annic==35) anteta=true; 
		break;
		}
	case 2009:
		{
		if ((mese<=6||anno<1951-aut)&&(mesecon<=6||annic>35))
			{
			if (annic>35&&anno==1951-aut) antcon=true;
			if (anno<1951-aut&&annic==35) anteta=true; 
			}
		else
			{
			if ((annic>35&&anno==1949-aut)||(annic>36&&anno==1950-aut)) antcon=true;
			if ((anno<1949-aut&&annic==35)||(anno<1950-aut&&annic==36)) anteta=true; 
			}	
		break;
		}

	case 2010:
		{
		if ((annic>35&&anno==1950-aut)||(annic>36&&anno==1951-aut)) antcon=true;
		if ((anno<1950-aut&&annic==35)||(anno<1951-aut&&annic==36)) anteta=true;
		break;
		}
	case 2011:
		{
		if ((annic>35&&anno==1950-aut)||(annic>36&&anno==1951-aut)) antcon=true;
		if ((anno<1950-aut&&annic==35)||(anno<1951-aut&&annic==36)) anteta=true;
		break;
		}
	case 2012:
		{
		if ((annic>35&&anno==1951-aut)||(annic>36&&anno==1952-aut)) antcon=true;
		if ((anno<1951-aut&&annic==35)||(anno<1952-aut&&annic==36)) anteta=true;
		break;
		}
	case 2013:
		{
		if ((annic>35&&anno==1951-aut)||(annic>36&&anno==1952-aut)) antcon=true;
		if ((anno<1951-aut&&annic==35)||(anno<1952-aut&&annic==36)) anteta=true;
		break;
		}

	default:
		{
		dist=annoreq-2013;
		annic=annicon+annoreq-2007;
		if ((annic>35&&anno==1951-aut+dist)||(annic>36&&anno==1952-aut+dist)) antcon=true;
		if ((anno<1951-aut+dist&&annic==35)||(anno<1952-aut+dist&&annic==36)) anteta=true;
		break;
		}

	}
if (fra==1) 
	{
	mesereq=estraimese(fragio);
	giornoreq=estraigiorno(fragio);
	}
else	
if (antcon&&!anteta) // contributi già maturati: si esce al compimento dell'età nell'anno
	{
	if (((annoreq<2008&&annicon+annoreq-2007==39)||annicon+annoreq-2007==40)&&(mese>mesecon||(mese==mesecon&&giorno>			giornocon))) //uscita con 40 anni con contributi potenzialmente già misurati
		{
		mesereq=mesecon;
		giornoreq=giornocon;
		}
	else
		{
		mesereq=mese;
		giornoreq=giorno;
		}
	}
else if (anteta&&!antcon)
	{
	if ((annoreq==anno+vec)&&(mese<mesecon||(mese==mesecon&&giorno<giornocon))) 
		{ 			//uscita a 65 o 60 anni con età potenzialmente già maturata
		mesereq=mese;
		giornoreq=giorno;
		}
	else
		{
		mesereq=mesecon;
		giornoreq=giornocon;
		}
	}
	else 
		
		if ((annoreq<2008&&annicon+annoreq-2007==39)||annicon+annoreq-2007==40) //uscita con 40 anni
		{
				
				{
				mesereq=mesecon;
				giornoreq=giornocon;
				}
		}
		else if(annoreq==anno+vec)  //uscita a 65 o 60 anni vale il mese in cui si compiono
				{
				if(annic<20) alert("Attenzione: per avere la pensione\nnel sistema retributivo servono\nalmeno 20 anni di contributi");
				mesereq=mese; 
				giornoreq=giorno;
				}
	
			else if (antcon&&anteta)
			{
			mesereq=Math.min(mese,mesecon); 
			if (mesecon<mese||(mesecon==mese&&giornocon<giorno)) giornoreq=giornocon; 
				else giornoreq=giorno;
			}
				else
				{
				mesereq=Math.max(mese,mesecon); 
				if (mesecon>mese||(mesecon==mese&&giornocon>giorno)) giornoreq=giornocon; 
					else giornoreq=giorno;
				}

if (annoreq>2007&&annoreq<2011) //se prima della finestra di anzianità arrivano la vecchiaia o i 40 anni...
	{
	if (mesereq<=6) meselim=6+aut*3; else meselim=(12+aut*3);
	if (meselim==15) meselim=3;
	if (meselim==3&&(mesecon<=3||mese<=3)) scav=1; else scav=0;
	if (anno+vec==annoreq+scav&&(mese<=meselim||(mese>6&&meselim==3)))
		{
		annoreq=annoreq+scav;
		mesereq=mese;
		giornoreq=giorno;
		anteta=false;
 		}
	if (annic+scav==40&&(mesecon<=meselim||(mesecon>6&&meselim==3)))
		{
		annoreq=annoreq+scav;
		mesereq=mesecon;
		giornoreq=giornocon;
		antcon=false;
 		}
	}
else
	{
	if (mesereq<=3) meselim=6+aut*3;
	else if (mesereq<=6) meselim=9+aut*3;
		else meselim=12;
 	if (anno+vec==annoreq&&mese<=meselim)
		{
		mesereq=mese;
		giornoreq=giorno;
		anteta=false;
 		}
	}

// qui si stabilisce la finestra di uscita
if (annoreq>2010) //uscita dal 2011: attesa di 12 mesi per i dipendenti, 18 per gli autonomi
	{
	mesefin=(mesereq+1+aut*6)%12;
	if (mesefin==0) mesefin=12;
	annsca=minus(1+aut*6,(12-mesereq));
	if (annsca>1) annsca=1;
	annofin=annoreq+1+annsca;
	}

else if (annoreq<2008&&annoreq==anno+vec&&(!anteta||(mese<mesecon||(mese==mesecon&&giorno<giornocon)))) //vecchiaia ante 2007: si esce subito
	{	
	mesefin=mesereq+1;
	if (mesefin==13) 
		{
		mesefin=1;
		annofin=annoreq+1;
 		}
	else annofin=annoreq;
	}

else if (usura||annoreq<2008||(annoreq>=2008&&(annoreq==anno+vec&&(!anteta||mese<mesecon||(mese==mesecon&&giorno<giornocon)))||annic+scav>=40&&(!antcon||mese>mesecon||(mese==mesecon&&giorno>giornocon)))) //uscita con quattro finestre
	{
	if (aut==1) autf=3; else autf=0;
	if (mesereq>=1&&mesereq<=3)
		{
		mesefin=(7+autf)%12;
		annofin=annoreq;
		}
		else if (mesereq>=4&&mesereq<=6) 
			{
			mesefin=(10+autf)%12; 
			annofin=annoreq+aut;
			}
			else if (mesereq>=7&&mesereq<=9) 
				{
				mesefin=1+autf;
				annofin=annoreq+1;
				}
				else 
					{
					mesefin=4+autf; 
					annofin=annoreq+1;
					}
	}
else // uscita con due sole finestre per l'anzianità, dopo il 2008,
	{
	if (aut==1) autf=6; else autf=0;
	if (mesereq>=1&&mesereq<=6)
		{
		mesefin=1+autf;
		annofin=annoreq+1;
		}
		else 
			{
			mesefin=(7+autf)%12;
			annofin=annoreq+1+aut;
			}
	}


if (annoreq<2011)
if (annoreq<2008||(annic==40&&!antcon)) stepfin=3; else stepfin=6; // a luglio e ottobre si esce solo con 57 anni compiuti
while (aut==0&&(mesefin==7||mesefin==10)&&(annofin-anno<57||(annoreq-anno==57&&mese>=mesefin)))
	{
	mesefin=(mesefin+stepfin)%12;
	if (mesefin==1) annofin=annofin+1;
	}

if (scuola)
	{
	annofin=annoreq;
	mesefin=9
	giornofin=1;
	}

noncompanno=0;
noncompcon=0;
if (mese>mesereq||(mese==mesereq&&giorno>giornoreq)) noncompanno=1; 
if (mesecon>mesereq||(mesecon==mesereq&&giornocon>giornoreq)) noncompcon=1;
restoan=(annoreq-annoconor)*52;
restoset=dategiorni(annoreq,meseconor,giornoconor,annoreq,mesereq,giornoreq);
if (restoset>=0||(restoset<0&&(365-Math.abs(restoset))%7!=0)) restoset=Math.floor(restoset/7);
else restoset=Math.ceil(restoset/7); //questo if nel caso la data orig. di maturaz. contrib. sia successiva al conseguim. pensione
etadec=round3(dategiorni(anno,mese,giorno,annoreq,mesereq,giornoreq)/365); 
condec=round3((setticon+restoan+restoset)/52); 
document.forms[0].req.value=""+giornoreq+" "+creamese(mesereq)+" "+annoreq;
document.forms[0].req1.value=annoreq-anno-noncompanno;
document.forms[0].req2.value=annicon+annoreq-2007-noncompcon;
document.forms[0].quota.value=virg(round3(eval(etadec)+eval(condec)));

document.forms[0].fin.value="1"+" "+creamese(mesefin)+" "+annofin

}
else
{

alert ("I dati sono incompleti oppure la pensione\nè già stata maturata prima del 2007");
document.forms[0].reset();
}
		
}


