// Script per il calcolo delle effemeridi di Sole
//21-2-2009

var gradi  = 180/Math.PI;
var rad =  1/gradi;
var AlfaLuna
var DeltaLuna
var AlfaSole
var DeltaSole
var par
var sd
var dist
var psi
var k
var ii
var fraz
var RVS
var LVS
var Etagiorni
var hsorge="-"
var htram="-"
var g
var m
var a
var hr
var mn
var sc
var OraLeg=0
var Deps
var Dpsi


var LatCit=new Array(43.86,45.7170,45.1000,44.9170,44.9000,44.3830,45.4500,45.3330,
45.4670,45.6830,45.5330,45.8000,45.1330,45.1500,45.2000,46.1670,45.8170,45.4170,
46.1500,45.4170,45.0830,45.6670,45.4330,45.5500,46.0050,46.4830,45.6500,45.9500,
45.9500,46.0670,44.5000,44.8330,44.2170,44.6500,44.8000,45.0500,44.4170,44.7000,
43.9500,44.4170,43.9000,44.1170,44.3170,43.8000,43.4670,44.0830,42.7830,43.5500,
43.8500,44.0330,43.7330,43.9500,43.3330,43.1330,42.5670,43.6170,42.8500,43.3170,
43.9170,43.7500,41.9000,41.6170,41.4670,42.4170,42.3670,42.3500,42.4670,42.6670,
40.8500,40.9170,41.1170,41.0670,40.6670,41.5670,41.5830,42.4500,40.6500,40.6670,
41.1330,40.6330,41.4670,40.3500,40.4670,38.9000,39.2830,38.1000,38.1330,37.3170,
37.4830,37.5000,37.5670,38.2000,36.9330,37.0500,38.0000,39.2170,40.3330,39.9000,40.7330,0.000);

var LonCit=new Array(10.245,7.3330,7.6830,8.6330,8.2000,7.5500,8.6170,8.4170,9.1830,
9.6500,10.2170,9.0830,10.0170,10.7830,9.1500,9.8670,8.8170,12.3170,12.2000,11.8670,
11.7830,12.2230,11.0000,11.5500,11.1330,11.3670,13.7670,13.6170,12.0650,13.2330,
11.3330,11.6000,12.0500,10.9170,10.3170,9.6830,12.1830,10.6330,12.4330,8.9170,
8.0330,9.8170,8.4830,11.2670,11.8670,10.1000,11.1170,10.3170,10.5170,10.1500,10.4000,
10.9170,11.3330,12.3830,12.6500,13.5170,13.5670,13.4500,12.9170,12.6170,12.4670,
13.3500,12.8830,12.8500,13.3830,14.1670,14.2170,13.7170,14.2670,14.7500,14.7830,14.3500,
14.7670,14.7170,14.1170,12.1000,15.8000,16.6170,16.8500,17.9500,15.5330,18.1830,
17.2500,16.5830,16.2670,15.6500,13.3500,13.5830,14.0500,15.0830,14.2670,15.5330,
14.7330,15.3000,12.5170,9.1170,9.3170,8.5833,8.5670,0.000);



function daticitta()
{
	var scelta=EffeLuna.citta.selectedIndex
	EffeLuna.lat.value=LatCit[scelta]
	EffeLuna.long.value=LonCit[scelta]
	//if (scelta==99) {EffeLuna.fuso.value=0} else {EffeLuna.fuso.value=2}
}


function DataOggi()
	{
	var oggi= new Date()		
	var s=oggi.getDay()
	    g=oggi.getDate()		
	    m=1+oggi.getMonth()		
	    a=oggi.getYear()
	var browser=navigator.appName;
	if (browser=="Netscape") {a=a+1900}
	    hr=oggi.getHours()
	    mn=oggi.getMinutes()
	    sc=oggi.getSeconds()
	var gS
	var ms
	var DataCompleta
	if (s==0){gS="Domenica"}
	if (s==1){gS="Lunedi"}
	if (s==2){gS="Martedi"}
	if (s==3){gS="Mercoledi"}
	if (s==4){gS="Giovedi"}
	if (s==5){gS="Venerdi"}
	if (s==6){gS="Sabato"}

	if (m==1){ms="Gennaio"}
	if (m==2){ms="Febbraio"}
	if (m==3){ms="Marzo"}
	if (m==4){ms="Aprile"}
	if (m==5){ms="Maggio"}
	if (m==6){ms="Giugno"}
	if (m==7){ms="Luglio"}
	if (m==8){ms="Agosto"}
	if (m==9){ms="Settembre"}
	if (m==10){ms="Ottobre"}
	if (m==11){ms="Novembre"}
	if (m==12){ms="Dicembre"}

	DataCompleta=gS+" "+g+" "+ms+" "+a
return DataCompleta
}

function ultimoaggiornamento()
{
	var data=document.lastModified;
	var gg=data.substring(3,5)
	var mm=data.substring(0,2)
	var aaaa=data.substring(6,10)
	var datagg
	datagg="Ultimo aggiornamento: "+gg+"/"+mm+"/"+aaaa
return datagg
}

function Sgn(n)
{	
	var S
	if (n<0){S=-1} else {S=1}
return S
}

function AngoloGiro(a)
{
	var Ag
	var Sgn
	if (a<0) {Sgn=-1} else {Sgn=1}
	var I=Math.floor(Math.abs(a))
	var F=Math.abs(a)-I
	var R=I%360
	if (Sgn>0) {Ag=R+F} else {Ag=360-(R+F)} 
return Ag
}

function Format_migliaia(num)
//mette il puntino nelle migliaia
{
var n1s=""
var n2s=""
	var nr=Math.round(num)
	var n1=Math.floor(nr/1000)
	var n2=Math.floor(nr-n1*1000)
	n1s=n1
	n2s=n2
	if(n2s<100&&n2s>11) {n2s="0"+n2s}
	if(n2s<10) {n2s="00"+n2s}
	var formato=n1s+"."+n2s
return formato
}

function FormatGPS_consegno(grd)
{
var ps=""
var gs=""
var ss=""	
var Sgn
	if (grd<0) {Sgn="-"} else {Sgn="+"}
	var ang=Math.abs(grd)
	var g=Math.floor(ang)
	var p=Math.floor((ang-g)*60)
	var s=Math.floor(ang*3600-g*3600-p*60)
	if (s==60) {s=0
		    p=p+1
		   }
	if (p==60) {p=0
		    g=g+1
		   }
	if (g<10) {gs=g} else {gs=g}
	if (p<10) {ps="0"+p} else {ps=p}
	if (s<10) {ss="0"+s} else {ss=s}
	var formato=Sgn+gs+"° "+ps+"'"+ss+"\""
return formato
}

function FormatGPD_consegno(grd)
{
var ps=""
var gs=""
var ds=""	
var Sgn
	if (grd<0) {Sgn="-"} else {Sgn="+"}
	var ang=Math.abs(grd)
	var g=Math.floor(ang)
	var p=Math.floor((ang-g)*60)
	var d=Math.floor(((ang-g)*60-p)*10)
	if (g<10) {gs=g} else {gs=g}
	if (p<10) {ps="0"+p} else {ps=p}
	ds=d
	var formato=Sgn+gs+"° "+ps+"'."+d
return formato
}


function FormatGP_consegno(grd)
{
var ps=""
var gs=""
	
var Sgn
	if (grd<0) {Sgn="-"} else {Sgn="+"}
	var ang=Math.abs(grd)
	var g=Math.floor(ang)
	var p=Math.floor((ang-g)*60)
	if (g<10) {gs=g} else {gs=g}
	if (p<10) {ps="0"+p} else {ps=p}
	var formato=Sgn+gs+"° "+ps+"'"
return formato
}

function FormatGPS_senzasegno(grd)
{
var ps=""
var gs=""
var ss=""	
	var ang=Math.abs(grd)
	var g=Math.floor(ang)
	var p=Math.floor((ang-g)*60)
	var s=Math.floor(ang*3600-g*3600-p*60)
	if (s==60) {s=0
		    p=p+1
		   }
	if (p==60) {p=0
		    g=g+1
		   }
	if (g<10) {gs=g} else {gs=g}
	if (p<10) {ps="0"+p} else {ps=p}
	if (s<10) {ss="0"+s} else {ss=s}
	var formato=gs+"° "+ps+"'"+ss+"\""
return formato
}

function FormatGPD_senzasegno(grd)
{
var ps=""
var gs=""
var ds=""	
	var ang=Math.abs(grd)
	var g=Math.floor(ang)
	var p=Math.floor((ang-g)*60)
	var d=Math.floor(((ang-g)*60-p)*10)
	if (g<10) {gs=g} else {gs=g}
	if (p<10) {ps="0"+p} else {ps=p}
	ds=d
	var formato=gs+"° "+ps+"'."+ds
return formato
}

function FormatGP_senzasegno(grd)
{
var ps=""
var gs=""
	var ang=Math.abs(grd)
	var g=Math.floor(ang)
	var p=Math.floor((ang-g)*60)
	if (g<10) {gs=g} else {gs=g}
	if (p<10) {ps="0"+p} else {ps=p}
	var formato=gs+"° "+ps+"'"
return formato
}

function FormatHMS(grd)
{
var ps=""
var gs=""
var ss=""
	var ang=Math.abs(grd)
	var g=Math.floor(ang)
	var p=Math.floor((ang-g)*60)
	var s=Math.floor(ang*3600-g*3600-p*60) 
	if (s==60) {s=0
		    p=p+1
		   }
	if (p==60) {p=0
		    g=g+1
		   }
	if (p<10) {ps="0"+p} else {ps=p}
	if (g<10) {gs="0"+g} else {gs=g}
	if (s<10) {ss="0"+s} else {ss=s}
	var formato=gs+"h"+ps+"m"+ss+"s"
return formato
}

function FormatHMSore(grd)
{
var ps=""
var gs=""
var ss=""
	var ang=Math.abs(grd)
	var g=Math.floor(ang)
	var p=Math.floor((ang-g)*60)
	var s=Math.floor(ang*3600-g*3600-p*60) 
	if (s==60) {s=0
		    p=p+1
		   }
	if (p==60) {p=0
		    g=g+1
		   }
	if (p<10) {ps="0"+p} else {ps=p}
	if (g<10) {gs="0"+g} else {gs=g}
	if (s<10) {ss="0"+s} else {ss=s}
	var formato=gs+":"+ps+":"+ss
return formato
}

function FormatHM(grd)
{
var ps=""
var gs=""
	var ang=Math.abs(grd)
	var g=Math.floor(ang)
	var p=Math.floor((ang-g)*60+0.5)
	if (p==60) {p=0
		    g=g+1
		   } 
	if (p<10) {ps="0"+p} else {ps=p}
	if (g<10) {gs="0"+g} else {gs=g}
	var formato=gs+":"+ps
return formato
}

function FormatHhMm(grd)
{
var ps=""
var gs=""
	var ang=Math.abs(grd)
	var g=Math.floor(ang)
	var p=Math.floor((ang-g)*60+0.5)
	if (p==60) {p=0
		    g=g+1
		   } 
	if (p<10) {ps="0"+p} else {ps=p}
	if (g<10) {gs="0"+g} else {gs=g}
	var formato=gs+"h "+ps+"m"
return formato
}

function GiornoGiuliano(g,m,a,h,mn,s)
{
	var y
	var mm
	var x
	var b
	var ora_dec=(h+mn/60+s/3600)/24
	var g_dec=g+ora_dec
	var JulD
	if (m<=2) {
		y=a-1
		mm=m+12
		}
	else {
		y=a
		mm=m
		}
	x=Math.floor(y/100)
	b=2-x+Math.floor(x/4)
	JulD=Math.floor(365.25*(y+4716))+Math.floor(30.6*(mm+1))+g_dec+b-1524.5
return JulD
}

function SecoloGiuliano(JD)
{
	var T
	T=(JD-2415020.0)/36525
return T
}

function Keplero(ec,M)
{
	var Conv
	var ecg=ec*gradi
	var Eapp=M
	for (var i=1; i<=20; i++)
		{
		Conv=Eapp					
		var Temp=Eapp+((M+ecg*Math.sin(Eapp*rad)-Eapp)/(1-ec*Math.cos(Eapp*rad)))
		Eapp=Temp
		if (Math.abs(Conv-Eapp)<0.000001) {break}
	}
return Eapp 
}

function AnomVera(ecc,Anecc)
{
	var a=Math.sqrt((1+ecc)/(1-ecc))
	var b=Math.tan((Anecc/2)*rad)
	var c=(2*Math.atan(a*b))*gradi
	var AnV=AngoloGiro(c)
return AnV
}

function Nutazione(JD)
{
	var T=(JD-2415020.0)/36525
	var T2=T*T
	var L=rad*(AngoloGiro(279.6967+36000.7689*T+0.000303*T2))
	var L1=rad*(AngoloGiro(270.4342+481267.8831*T-0.001133*T2))
	var M=rad*(AngoloGiro(358.4758+359999.0498*T-0.000150*T2))
	var M1=rad*(AngoloGiro(296.1046+477198.8491*T+0.009192*T2))
	var omega=rad*(AngoloGiro(259.1833-1934.1420*T+0.002078*T2))
	var P1=-(17.2327+0.01737*T)*Math.sin(omega)-(1.2729+0.00013*T)*Math.sin(2*L)
	var P2=0.2088*Math.sin(2*omega)-0.2037*Math.sin(2*L1)+(0.1261-0.00031*T)*Math.sin(M)
	var P3=0.0675*Math.sin(M1)-(0.0497-0.00012*T)*Math.sin(2*L+M)-0.0342*Math.sin(2*L1-omega)
	var P4=-0.0261*Math.sin(2*L1+M1)+0.0214*Math.sin(2*L-M)-0.0149*Math.sin(2*L-2*L1+M)
	var P5=0.0124*Math.sin(2*L-omega)+0.0114*Math.sin(2*L1-M1)
            Dpsi=(P1+P2+P3+P4+P5)/3600
	var P1=(9.21+0.00091*T)*Math.cos(omega)+(0.5522-0.00029*T)*Math.cos(2*L)
	var P2=-0.0904*Math.cos(2*omega)+0.0884*Math.cos(2*L1)+0.0216*Math.cos(2*L+M)
	var P3=0.0183*Math.cos(2*L1-omega)+0.0113*Math.cos(2*L1+M1)-0.0093*Math.cos(2*L-M)-0.0066*Math.cos(2*L-omega)
	    Deps=(P1+P2+P3)/3600
}

function TempoSidereo1(g,ms,a,h,mn,s)
{
	var JD=GiornoGiuliano(g,ms,a,0,0,0)
	var T=SecoloGiuliano(JD)
	var T2=T*T
	var T3=T2*T
	//var Deps=""
	//var Dpsi=""
	Nutazione(JD)
	var eps=23.452294-0.0130125*T-0.00000164*T2+0.000000503*T3
	var epsc=(eps+Deps)*rad
	var Ts=Math.floor(0.276919398+100.0021359*T+0.000001075*T2)*24
	var oradec=h+mn/60+s/3600
	    Ts=(Ts+oradec*1.002737908)*15
	    Ts=AngoloGiro(Ts+(Dpsi*Math.cos(epsc))/15)
return Ts
}

function TempoSidereo(g,ms,a,h,mn,s)
{
	var JD=GiornoGiuliano(g,ms,a,h,mn,s)
	var T=(JD-2451545.0)/36525
	var T2=T*T
	var T3=T2*T
	var Ts=280.46061837+360.98564736629*(JD-2451545.0)+0.000387933*T2-T3/38710000
	//var Deps=""
	//var Dpsi=""
	    Nutazione(JD)
	var eps=23.43929111-0.0130042*T-0.00000164*T2+0.000000503*T3
	var epsc=(eps+Deps)*rad
	    Ts=AngoloGiro(Ts+(Dpsi*Math.cos(epsc))/15)
	    Ts=Ts+360
	    Ts=AngoloGiro(Ts)	
return Ts
}

function EquazTM(JD)
{
     	var T = (JD - 2415020.0) / 36525
	var T2=T*T
	var T3=T2*T
	var L=rad*(AngoloGiro(279.69668+36000.76892*T+0.0003025*T2))
	var M=rad*(AngoloGiro(358.47583+35999.04975*T-0.000150*T2-0.0000033*T3))
	var e=0.01675104-0.0000418*T-0.000000126*T2
	var eps=rad*(23.452294-0.0130125*T-0.00000164*T2+0.000000503*T3)
	var y=Math.tan(eps/2)*Math.tan(eps/2)
	var EQTM=y*Math.sin(2*L)-2*e*Math.sin(M)+4*e*Math.sin(M)*Math.cos(2*L)*y
	    EQTM=EQTM-0.5*(y*y)*Math.sin(4*L)-(5/4)*(e*e)*Math.sin(2*M)
//	    EQTM=EQTM*4*gradi  //in min
	    EQTM=EQTM*gradi    //in gradi
return EQTM
}

function AltezzaAzimuth(Lat,Decl,TA)
{	
	TA=TA+360
	TA=AngoloGiro(TA)
	if (TA<180) {AP=TA} else {AP=360-TA}
 	var D=Math.sin(rad*Lat)*Math.sin(rad*Decl)+Math.cos(rad*Lat)*Math.cos(rad*Decl)*Math.cos(rad*AP)
	Alt=gradi*Math.asin(D)
	var D=(Math.sin(rad*Decl)-Math.sin(rad*Lat)*Math.sin(rad*Alt))/(Math.cos(rad*Lat)*Math.cos(rad*Alt))
	Az=gradi*Math.acos(D)
	if (TA<180) {Az=360-Math.abs(Az)}
}

function EffemeridiSole(JD)
{
     	var T = (JD - 2415020.0) / 36525;
	var T2=T*T;
	var T3=T2*T;
	var L=AngoloGiro(279.69668+36000.76892*T+0.0003025*T2)
	var M=AngoloGiro(358.47583+35999.04975*T-0.000150*T2-0.0000033*T3)
	var e=0.01675104-0.0000418*T-0.000000126*T2
	var AnEcc=Keplero(e,M)
	var AnV=AnomVera(e,AnEcc)
	var c1=rad*(153.23+22518.7541*T)
	var c2=rad*(216.57+45037.5082*T)
	var c3=rad*(312.69+32964.3577*T)
	var c4=rad*(350.74+445267.1142*T-0.00144*T2)
	var c5=rad*(231.19+20.20*T)
	var c6=rad*(353.40+65928.7155*T)
	var cl=0.00134*Math.cos(c1)+0.00154*Math.cos(c2)+0.00200*Math.cos(c3)+0.00179*Math.sin(c4)+0.00178*Math.sin(c5)
	var cr=0.00000543*Math.sin(c1)+0.00001575*Math.sin(c2)+0.00001627*Math.sin(c3)+0.00003076*Math.cos(c4)+0.00000927*Math.sin(c6)
	    LVS=L+AnV-M+cl
	    RVS=1.0000002*(1-e*Math.cos(rad*AnEcc))+cr
	//var Deps=""
	//var Dpsi=""
	Nutazione(JD)
	var Lapp=LVS-0.00569+Dpsi
	var eps=23.452294-0.0130125*T-0.00000164*T2+0.000000503*T3
	var epsc=eps+Deps
	    DeltaSole=gradi*(Math.asin(Math.sin(rad*eps)*Math.sin(rad*Lapp)))
	var N=Math.cos(rad*eps)*Math.sin(rad*Lapp)
	var D=Math.cos(rad*Lapp)
	    AlfaSole=gradi*(Math.atan2(N,D))
	if (AlfaSole<0) {AlfaSole=AlfaSole+360}
}

function EffemeridiLuna(JD)
{     
var VTa=60
var Tab_A_d=new Array(0,2,2,0,0,0,2,2,2,2,0,1,0,2,0,0,4,0,4,2,2,1,1,2,2,4,2,0,2,2,1,2,0,0,2,2,2,4,0,3,2,4,0,2,2,2,4,0,4,1,2,0,1,3,4,2,0,1,2,2);
var Tab_A_M=new Array(0,0,0,0,1,0,0,-1,0,-1,1,0,1,0,0,0,0,0,0,1,1,0,1,-1,0,0,0,1,0,-1,0,-2,1,2,-2,0,0,-1,0,0,1,-1,2,2,1,-1,0,0,-1,0,1,0,1,0,0,-1,2,1,0,0);
var Tab_A_M1=new Array(1,-1,0,2,0,0,-2,-1,1,0,-1,0,1,0,1,1,-1,3,-2,-1,0,-1,0,1,2,0,-3,-2,-1,-2,1,0,2,0,-1,1,0,-1,2,-1,1,-2,-1,-1,-2,0,1,4,0,-2,0,2,1,-2,-3,2,1,-1,3,-1);
var Tab_A_F=new Array(0,0,0,0,0,2,0,0,0,0,0,0,0,-2,2,-2,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,-2,2,0,2,0,0,0,0,0,0,-2,0,0,0,0,-2,-2,0,0,0,0,0,0,0,-2);
var Tab_A_s=new Array(6288774,1274027,658314,213618,-185116,-114332,58793,57066,53322,45758,-40923,-34720,-30383,15327,-12528,10980,10675,10034,8548,-7888,-6766,-5163,4987,4036,3994,3861,3665,-2689,-2602,2390,-2348,2236,-2120,-2069,2048,-1773,-1595,1215,-1110,-892,-810,759,-713,-700,691,596,549,537,520,-487,-399,-381,351,-340,330,327,-323,299,294,0);
var Tab_A_c=new Array(-20905355,-3699111,-2955968,-569925,48888,-3149,246158,-152138,-170733,-204586,-129620,108743,104755,10321,0,79661,-34782,-23210,-21636,24208,30824,-8379,-16675,-12831,-10445,-11650,14403,-7003,0,10056,6322,-9884,5751,0,-4950,4130,0,-3958,0,3258,2616,-1897,-2117,2354,0,0,-1423,-1117,-1571,-1739,0,-4421,0,0,0,0,1165,0,0,8752);

var VTb=60
var Tab_B_d=new Array(0,0,0,2,2,2,2,0,2,0,2,2,2,2,2,2,2,0,4,0,0,0,1,0,0,0,1,0,4,4,0,4,2,2,2,2,0,2,2,2,2,4,2,2,0,2,1,1,0,2,1,2,0,4,4,1,4,1,4,2);
var Tab_B_M=new Array(0,0,0,0,0,0,0,0,0,0,-1,0,0,1,-1,-1,-1,1,0,1,0,1,0,1,1,1,0,0,0,0,0,0,0,0,-1,0,0,0,0,1,1,0,-1,-2,0,1,1,1,1,1,0,-1,1,0,-1,0,0,0,-1,-2);
var Tab_B_M1=new Array(0,1,1,0,-1,-1,0,2,1,2,0,-2,1,0,-1,0,-1,-1,-1,0,0,-1,0,1,1,0,0,3,0,-1,1,-2,0,2,1,-2,3,2,-3,-1,0,0,1,0,1,1,0,0,-2,-1,1,-2,2,-2,-1,1,1,-1,0,0);
var Tab_B_F=new Array(1,1,-1,-1,1,-1,1,1,-1,-1,-1,-1,1,-1,1,1,-1,-1,-1,1,3,1,1,1,-1,-1,-1,1,-1,1,-3,1,-3,-1,-1,1,-1,1,-1,1,1,1,1,-1,3,-1,-1,1,-1,-1,1,-1,1,-1,-1,-1,-1,-1,-1,1);
var Tab_B_s=new Array(5128122,280602,277693,173237,55413,46271,32573,17198,9266,8822,8216,4324,4200,-3359,2463,2211,2065,-1870,1828,-1794,-1749,-1565,-1491,-1475,-1410,-1344,-1335,1107,1021,833,777,671,607,596,491,-451,439,422,421,-366,-351,331,315,302,-283,-229,223,223,-220,-220,-185,181,-177,176,166,-164,132,-119,115,107);
var Tab_B_c=new Array(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);

   	var T = (JD - 2451545) / 36525;
     	var T2 = T * T;
     	var T3 = T2 * T;
     	var T4 = T3 * T;
     	var L1 = AngoloGiro(218.3164477 + 481267.88123421 * T - 0.0015786 * T2 + T3 / 538841 - T4 / 65194000);
     	    L1 = rad*(L1);
     	var d = AngoloGiro(297.8501921 + 445267.1114034 * T - 0.0018819 * T2 + T3 / 545868 - T4 / 113065000)
            d = rad*(d)
     	var M = AngoloGiro(357.5291092 + 35999.0502909 * T - 0.0001536 * T2 + T3 / 24490000)
            M = rad*(M)
     	var M1 = AngoloGiro(134.9633964 + 477198.8675055 * T + 0.0087414 * T2 - T3 / 69699 - T4 / 14712000)
     	    M1 = rad*(M1)
     	var F = AngoloGiro(93.272095 + 483202.0175233 * T - 0.0036539 * T2 - T3 / 3526000 + T4 / 863310000)
            F = rad*(F)
     	var A1 = 119.75 + 131.849 * T
     	    A1 = rad*(A1)
     	var A2 = AngoloGiro(53.09 + 479264.29 * T)
     	    A2 = rad*(A2)
     	var A3 = AngoloGiro(313.45 + 481266.484 * T)
     	    A3 = rad*(A3)
     	var E = 1 - 0.002516 * T - 0.0000074 * T2
     	var E2 = E * E

//Calcoli tabella A
     	var El = 0
	var Er = 0
	for (var i=0; i<=VTa-1; i++)
	    {
         	var FE = 1
         	if (Math.abs(Tab_A_M[i])==1) {FE = E}
         	if (Math.abs(Tab_A_M[i])==2) {FE = E2}
         	El = El + Tab_A_s[i] * FE * Math.sin(d * Tab_A_d[i] + M * Tab_A_M[i] + M1 * Tab_A_M1[i] + F * Tab_A_F[i])
         	Er = Er + Tab_A_c[i] * FE * Math.cos(d * Tab_A_d[i] + M * Tab_A_M[i] + M1 * Tab_A_M1[i] + F * Tab_A_F[i])
        }
        El = El + 3958 * Math.sin(A1) + 1962 * Math.sin(L1 - F) + 318 * Math.sin(A2)

//Calcoli tabella B
     	var Eb = 0
	for (var i=0; i<=VTb-1; i++)
	    {
         	var FE = 1
	        if (Math.abs(Tab_B_M[i]) == 1) {FE = E}
         	if (Math.abs(Tab_B_M[i]) == 2) { FE = E2}
         	Eb = Eb + Tab_B_s[i] * FE * Math.sin(d * Tab_B_d[i] + M * Tab_B_M[i] + M1 * Tab_B_M1[i] + F * Tab_B_F[i])
     }
    
// correzioni
     	Eb = Eb - 2235 * Math.sin(L1) + 382 * Math.sin(A3) + 175 * Math.sin(A1 - F) + 175 * Math.sin(A1 + F) + 127 * Math.sin(L1 - M1) - 115 * Math.sin(L1 + M1)
     	var Lon_e = gradi*(L1) + El / 1000000
     	var Lat_e = Eb / 1000000
     	dist = 385000.56 + Er / 1000
	//var Deps=0
	//var Dpsi=0
 	Nutazione(JD)
     	Lon_e = Lon_e + Dpsi

// trasformazione coordinate
	var eps=23.439291111-0.013004167*T-0.00000164*T2+0.000000504*T3
	var epsc=eps+Deps
	    DeltaLuna=gradi*(Math.asin(Math.sin(rad*Lat_e)*Math.cos(rad*epsc)+Math.cos(rad*Lat_e)*Math.sin(rad*epsc)*Math.sin(rad*Lon_e)))
	var N=Math.cos(rad*epsc)*Math.sin(rad*Lon_e)-Math.tan(rad*Lat_e)*Math.sin(rad*epsc)
	var D=Math.cos(rad*Lon_e)
	    AlfaLuna=gradi*(Math.atan2(N,D))
	if (AlfaLuna<0) {AlfaLuna=AlfaLuna+360}
  
//  'parallasse
     	par = gradi*(Math.asin(6378.14 / dist))
//  'semidiametro
     	sd = Math.asin(0.272481 * Math.sin(rad*(par)))
     	sd = gradi*(sd)
//  'Frazione illuminata
       EffemeridiSole(JD)
     	var Da = rad*(AlfaSole - AlfaLuna)
     	var ds = rad*(DeltaSole)
     	var dl = rad*(DeltaLuna)
     	psi = gradi*(Math.acos(Math.sin(ds) * Math.sin(dl) + Math.cos(ds) * Math.cos(dl) * Math.cos(Da)))
     	var num = RVS * 149597870 * Math.sin(rad*(psi))
     	var Den = dist - (RVS * 149597870) * Math.cos(rad*(psi))
     	ii = gradi*(Math.atan2(num, Den))
     	k=(1+Math.cos(rad*(ii))/2)
	var Eta = AngoloGiro((Lon_e - (LVS + 180)) + 360)  //eta della luna in gradi
     	if (Eta > 360) { Eta = Eta - 360}
     	if (Eta < 180) {fraz = -((1 + Math.cos(rad*(ii))) / 2)} else {fraz = ((1 + Math.cos(rad*(ii))) / 2)}
 	//Etagiorni=Math.floor(AngoloGiro((AlfaLuna-AlfaSole+360))*29/360)+1
	Etagiorni = Math.floor(AngoloGiro((Lon_e - LVS  + 360))*29/360)+1  //eta della luna in giorni


// 'angolo di posizione del settore illuminato (contato dal Nord della sfera locale)
//     num = Cos(ds) * Sin(Da)
//     Den = Cos(dl) * Sin(ds) - Sin(dl) * Cos(ds) * Cos(Da)
//     PABL = gradi(ArcTan2(num, Den))
}

function TransitoLuna(g,ms,a,Lat,Long)
{
     	var JD=GiornoGiuliano(g,ms,a,0,0,0)
	var EOT=""
	for (var i=1; i<=4; i++)
	    {
          EffemeridiLuna(JD)
          EffemeridiSole(JD)
          EOT=EquazTM(JD)
          var tv=AngoloGiro(AlfaLuna-AlfaSole)
          var tm=(AngoloGiro(tv+180-EOT))/15
          var TMG=tm-Long/15
	  var nore=Math.floor(TMG)
	  var nmin=Math.floor((TMG-nore)*60)
	  var nsec=Math.floor((((TMG-nore)*60)-nmin)*60)
          JD=GiornoGiuliano(g,ms,a,nore,nmin,nsec)
        }
//     hm:=90-(Lat-d1);
return tm
}

function SorgeLuna(g,ms,a,Lat,Long)
{
     	var JD=GiornoGiuliano(g,ms,a,0,0,0)
	var EOT=""
	for (var i=1; i<=4; i++)
		{
          EffemeridiLuna(JD)
          EffemeridiSole(JD)
          EOT=EquazTM(JD)
          var ho=0.7275*par-0.5666667   //valore rigoroso
          var temp=(Math.sin(ho*rad)-Math.sin(Lat*rad)*Math.sin(DeltaLuna*rad))/(Math.cos(Lat*rad)*Math.cos(DeltaLuna*rad))
	    if (Math.abs(temp)>1) {
				var HS=9999
				}
			else
				{
				var HS=Math.acos(temp)*gradi
	                        }	
          var tv=AngoloGiro(AlfaLuna-AlfaSole-HS)
          var tm=(AngoloGiro(tv+180-EOT))/15
          var TMG=tm-Long/15
	  var nore=Math.floor(TMG)
	  var nmin=Math.floor((TMG-nore)*60)
	  var nsec=Math.floor((((TMG-nore)*60)-nmin)*60)
	  if (HS==9999) {tm=9999}		    
          JD=GiornoGiuliano(g,ms,a,nore,nmin,nsec)
    }
return tm
}


function TramLuna(g,ms,a,Lat,Long)
{
     	var JD=GiornoGiuliano(g,ms,a,0,0,0)
	var EOT=""
	for (var i=1; i<=4; i++)
		{
          EffemeridiLuna(JD)
          EffemeridiSole(JD)
          EOT=EquazTM(JD)
          var ho=0.7275*par-0.5666667   //valore rigoroso
          var temp=(Math.sin(ho*rad)-Math.sin(Lat*rad)*Math.sin(DeltaLuna*rad))/(Math.cos(Lat*rad)*Math.cos(DeltaLuna*rad))
	    if (Math.abs(temp)>1) {
				var HS=9999
				}
			else
				{
				var HS=Math.acos(temp)*gradi
	                        }	
          var tv=AngoloGiro(AlfaLuna-AlfaSole+HS)
          var tm=(AngoloGiro(tv+180-EOT))/15
          var TMG=tm-Long/15
	  var nore=Math.floor(TMG)
	  var nmin=Math.floor((TMG-nore)*60)
	  var nsec=Math.floor((((TMG-nore)*60)-nmin)*60)
	  if (HS==9999) {tm=9999}		    
          JD=GiornoGiuliano(g,ms,a,nore,nmin,nsec)
    }
return tm
}

function Calcola(OraLeg)
{
	var fuso=parseFloat(EffeLuna.fuso.value)
	var gi=parseInt(EffeLuna.giorno.value,10)
	var me=parseInt(EffeLuna.mese.value,10)
	var an=parseInt(EffeLuna.anno.value,10)
	var ho=parseInt(EffeLuna.ore.value,10)
	    ho=ho-fuso-OraLeg
	var pr=parseInt(EffeLuna.minuti.value,10)
	var se=parseInt(EffeLuna.secondi.value,10)
	var Lat=parseFloat(EffeLuna.lat.value)
	var Long=parseFloat(EffeLuna.long.value)
	var cf=(parseInt(EffeLuna.fuso.value,10)*15-Long)*4+OraLeg*60
	var JD=GiornoGiuliano(gi,me,an,ho,pr,se);
	EffemeridiLuna(JD);
	EffeLuna.AscSole.value=FormatGPD_senzasegno(AlfaLuna)
	EffeLuna.DecSole.value=FormatGPD_consegno(DeltaLuna)

	var Ts=TempoSidereo(gi,me,an,ho,pr,se)+Long
	var AOH=AngoloGiro((Ts-AlfaLuna+360))/15
	var AOG=AngoloGiro(Ts-AlfaLuna+360)
	EffeLuna.AngOrH.value=FormatHMS(AOH)
	EffeLuna.AngOrG.value=FormatGPD_senzasegno(AOG)

	var TAS=Ts-AlfaLuna
	AltezzaAzimuth(Lat,DeltaLuna,TAS)
	EffeLuna.AltSole.value=FormatGPD_consegno(Alt)
	EffeLuna.AzimSole.value=FormatGPD_senzasegno(Az)

	var PM=TransitoLuna(gi,me,an,Lat,Long)
	EffeLuna.trans.value=FormatHM(PM+cf/60)

	var PM=SorgeLuna(gi,me,an,Lat,Long)
	if (PM==9999) {hsorge="- - - -"} else {hsorge=FormatHM(PM+cf/60)}
	EffeLuna.sorge.value=hsorge

	var PM=TramLuna(gi,me,an,Lat,Long)
	if (PM==9999) {htram="- - - -"} else {htram=FormatHM(PM+cf/60)}
	EffeLuna.tram.value=htram

	EffeLuna.fase.value=Math.floor(fraz*100)/100
	EffeLuna.etaluna.value=Etagiorni
	EffeLuna.parall.value=FormatGPD_senzasegno(par)
	EffeLuna.semid.value=FormatGPD_senzasegno(sd)
	EffeLuna.dist_T.value=Format_migliaia(dist)
        var dia=new Array("moon0.bmp","moon1.bmp","moon2.bmp","moon3.bmp","moon4.bmp","moon5.bmp","moon6.bmp","moon7.bmp","moon8.bmp","moon9.bmp","moon10.bmp","moon11.bmp","moon12.bmp","moon13.bmp","moon14.bmp","moon15.bmp","moon16.bmp","moon17.bmp","moon18.bmp","moon19.bmp","moon20.bmp","moon21.bmp","moon22.bmp","moon23.bmp","moon24.bmp","moon25.bmp","moon26.bmp","moon27.bmp","moon28.bmp","moon29.bmp")			
        document.etaimg.src="fissi/moon/"+dia[Etagiorni]

}

function AggiornaData()
{
	DataOggi()
	EffeLuna.giorno.value=g
	EffeLuna.mese.value=m
	EffeLuna.anno.value=a
	EffeLuna.ore.value=hr
	EffeLuna.minuti.value=mn
	EffeLuna.secondi.value=sc
	if ((m>3) && (m<11)) {EffeLuna.Oralegale[1].checked=true
			      OraLeg=1 } 
			else 
			      {EffeLuna.Oralegale[0].checked=true
			       OraLeg=0}
	Calcola(OraLeg)
}
