// Script per il calcolo delle effemeridi di Sole
// Versione aggiornata il 9/9/07
// corretto il formato ore e gradi aggiungendo gli zeri davanti e i minuti=60

var gradi  = 180/Math.PI;
var rad =  1/gradi;
var AlfaSole
var DeltaSole
var hsorge="-"
var htram=""
var sorge_n
var tram_n
var CAM=""
var CAS=""
var g
var m
var a
var hr
var mn
var sc
var OraLeg=0

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=Effesole.citta.selectedIndex
	Effesole.lat.value=LatCit[scelta]
	Effesole.long.value=LonCit[scelta]
	//if (scelta==99) {Effesole.fuso.value=0} else {Effesole.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 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 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 FormatHMS(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 (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=Sgn+gs+"h"+ps+"m"+ss+"s"
	var formato=gs+"h"+ps+"m"+ss+"s"
return formato
}



function FormatMS(grd)
//solo minuti e secondi
{
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 (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=Sgn+" "+ps+"m"+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(T,Deps,Dpsi)
{
	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(T)
	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(T,Deps,Dpsi)
	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(T)
{
	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
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(T)
{
	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)
	var LV=L+AnV-M+cl
	var RV=1.0000002*(1-e*Math.cos(rad*AnEcc))+cr
	var Deps=""
	var Dpsi=""
	Nutazione(T,Deps,Dpsi)
	var Lapp=LV-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 TransitoSole(g,ms,a,Lat,Long)
{
	var T=SecoloGiuliano(GiornoGiuliano(g,ms,a,0,0,0))
	var EOT=""
	for (var i=1; i<=4; i++)
		{
		    EOT=EquazTM(T)/60
		var tv=0
		var tm=AngoloGiro(tv+180)/15-EOT
		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)
		    T=SecoloGiuliano(GiornoGiuliano(g,ms,a,nore,nmin,nsec))
	}
return tm	
}

function SorgeSole(g,ms,a,Lat,Long)
{
	var T=SecoloGiuliano(GiornoGiuliano(g,ms,a,0,0,0))
	var h0=-0.8333
	var EOT=""
	for (var i=1; i<=4; i++)
		{
	            EffemeridiSole(T)
		    EOT=EquazTM(T)/60
	        var temp=(Math.sin(h0*rad)-Math.sin(Lat*rad)*Math.sin(DeltaSole*rad))/(Math.cos(Lat*rad)*Math.cos(DeltaSole*rad))
	        if (Math.abs(temp)>1) {
				var HS=9999
				}
			else
				{
				var HS=Math.acos(temp)*gradi
				}	
		var tv=360-HS
		var tm=AngoloGiro(tv+180)/15-EOT
		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}		    
	}
sorge_n=tm
return tm	
}

function TramSole(g,ms,a,Lat,Long)
{
	var T=SecoloGiuliano(GiornoGiuliano(g,ms,a,0,0,0))
	var h0=-0.8333
	var EOT=""
	for (var i=1; i<=4; i++)
		{
	            EffemeridiSole(T)
		    EOT=EquazTM(T)/60
	        var temp=(Math.sin(h0*rad)-Math.sin(Lat*rad)*Math.sin(DeltaSole*rad))/(Math.cos(Lat*rad)*Math.cos(DeltaSole*rad))
	        if (Math.abs(temp)>1) {
				var HS=9999
				}
			else
				{
				var HS=Math.acos(temp)*gradi
				}	
		var tv=HS
		var tm=AngoloGiro(tv+180)/15-EOT
		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}
		    T=SecoloGiuliano(GiornoGiuliano(g,ms,a,nore,nmin,nsec))
	}
tram_n=tm
return tm	
}

function CrepAstroMatt(g,ms,a,Lat,Long)
{
	var T=SecoloGiuliano(GiornoGiuliano(g,ms,a,0,0,0))
	var h0=-18
	var EOT=""
	for (var i=1; i<=4; i++)
		{
	            EffemeridiSole(T)
		    EOT=EquazTM(T)/60
	        var temp=(Math.sin(h0*rad)-Math.sin(Lat*rad)*Math.sin(DeltaSole*rad))/(Math.cos(Lat*rad)*Math.cos(DeltaSole*rad))
	        if (Math.abs(temp)>1) {
				var HS=9999
				}
			else
				{
				var HS=Math.acos(temp)*gradi
				}	
		var tv=360-HS
		var tm=AngoloGiro(tv+180)/15-EOT
		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}
		    T=SecoloGiuliano(GiornoGiuliano(g,ms,a,nore,nmin,nsec))
	}
return tm	
}

function CrepAstroSer(g,ms,a,Lat,Long)
{
	var T=SecoloGiuliano(GiornoGiuliano(g,ms,a,0,0,0))
	var h0=-18
	var EOT=""
	for (var i=1; i<=4; i++)
		{
	            EffemeridiSole(T)
		    EOT=EquazTM(T)/60
	        var temp=(Math.sin(h0*rad)-Math.sin(Lat*rad)*Math.sin(DeltaSole*rad))/(Math.cos(Lat*rad)*Math.cos(DeltaSole*rad))
	        if (Math.abs(temp)>1) {
				var HS=9999
				}
			else
				{
				var HS=Math.acos(temp)*gradi
				}	
		var tv=HS
		var tm=AngoloGiro(tv+180)/15-EOT
		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}
		    T=SecoloGiuliano(GiornoGiuliano(g,ms,a,nore,nmin,nsec))
	}
return tm	
}

function CrepNautMatt(g,ms,a,Lat,Long)
{
	var T=SecoloGiuliano(GiornoGiuliano(g,ms,a,0,0,0))
	var h0=-12
	var EOT=""
	for (var i=1; i<=4; i++)
		{
	            EffemeridiSole(T)
		    EOT=EquazTM(T)/60
	        var temp=(Math.sin(h0*rad)-Math.sin(Lat*rad)*Math.sin(DeltaSole*rad))/(Math.cos(Lat*rad)*Math.cos(DeltaSole*rad))
	        if (Math.abs(temp)>1) {
				var HS=9999
				}
			else
				{
				var HS=Math.acos(temp)*gradi
				}	
		var tv=360-HS
		var tm=AngoloGiro(tv+180)/15-EOT		
		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}		    T=SecoloGiuliano(GiornoGiuliano(g,ms,a,nore,nmin,nsec))
	}
return tm	
}

function CrepNautSer(g,ms,a,Lat,Long)
{
	var T=SecoloGiuliano(GiornoGiuliano(g,ms,a,0,0,0))
	var h0=-6
	var EOT=""
	for (var i=1; i<=4; i++)
		{
	            EffemeridiSole(T)
		    EOT=EquazTM(T)/60
	        var temp=(Math.sin(h0*rad)-Math.sin(Lat*rad)*Math.sin(DeltaSole*rad))/(Math.cos(Lat*rad)*Math.cos(DeltaSole*rad))
	        if (Math.abs(temp)>1) {
				var HS=9999
				}
			else
				{
				var HS=Math.acos(temp)*gradi
				}	
		var tv=HS
		var tm=AngoloGiro(tv+180)/15-EOT
		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}
		    T=SecoloGiuliano(GiornoGiuliano(g,ms,a,nore,nmin,nsec))
	}
return tm	
}


function CrepCivMatt(g,ms,a,Lat,Long)
{
	var T=SecoloGiuliano(GiornoGiuliano(g,ms,a,0,0,0))
	var h0=-0.8
	var EOT=""
	for (var i=1; i<=4; i++)
		{
	            EffemeridiSole(T)
		    EOT=EquazTM(T)/60
	        var temp=(Math.sin(h0*rad)-Math.sin(Lat*rad)*Math.sin(DeltaSole*rad))/(Math.cos(Lat*rad)*Math.cos(DeltaSole*rad))
	        if (Math.abs(temp)>1) {
				var HS=9999
				}
			else
				{
				var HS=Math.acos(temp)*gradi
				}	
		var tv=360-HS
		var tm=AngoloGiro(tv+180)/15-EOT
		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}
		    T=SecoloGiuliano(GiornoGiuliano(g,ms,a,nore,nmin,nsec))
	}
return tm	
}

function CrepCivSer(g,ms,a,Lat,Long)
{
	var T=SecoloGiuliano(GiornoGiuliano(g,ms,a,0,0,0))
	var h0=-6
	var EOT=""
	for (var i=1; i<=4; i++)
		{
	            EffemeridiSole(T)
		    EOT=EquazTM(T)/60
	        var temp=(Math.sin(h0*rad)-Math.sin(Lat*rad)*Math.sin(DeltaSole*rad))/(Math.cos(Lat*rad)*Math.cos(DeltaSole*rad))
	        if (Math.abs(temp)>1) {
				var HS=9999
				}
			else
				{
				var HS=Math.acos(temp)*gradi
				}	
		var tv=HS
		var tm=AngoloGiro(tv+180)/15-EOT
		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}
		    T=SecoloGiuliano(GiornoGiuliano(g,ms,a,nore,nmin,nsec))
	}
return tm	
}


function Calcola(OraLeg)
{
	var fuso=parseFloat(Effesole.fuso.value)
	var gi=parseInt(Effesole.giorno.value,10)
	var me=parseInt(Effesole.mese.value,10)
	var an=parseInt(Effesole.anno.value,10)
	var ho=parseInt(Effesole.ore.value,10)
	    ho=ho-fuso-OraLeg
	var pr=parseInt(Effesole.minuti.value,10)
	var se=parseInt(Effesole.secondi.value,10)
	var Lat=parseFloat(Effesole.lat.value)
	var Long=parseFloat(Effesole.long.value)
	var cf=(parseInt(Effesole.fuso.value,10)*15-Long)*4+OraLeg*60

	Effesole.GG.value=GiornoGiuliano(gi,me,an,ho,pr,se) 
	//Effesole.GG.value=GiornoGiuliano(gi,me,an,ho,pr,se)
	var T=SecoloGiuliano(GiornoGiuliano(gi,me,an,ho,pr,se))

	EffemeridiSole(T)
	Effesole.AscSole.value=FormatHMS(AlfaSole/15)
	Effesole.DecSole.value=FormatGPS_consegno(DeltaSole)
	
	var Ts=TempoSidereo(gi,me,an,ho,pr,se)+Long
	var AOH=AngoloGiro((Ts-AlfaSole+360))/15
	var AOG=AngoloGiro(Ts-AlfaSole+360)
	Effesole.AngOrH.value=FormatHMS(AOH)
	Effesole.AngOrG.value=FormatGPS_senzasegno(AOG)
	Effesole.EOT.value=FormatMS(EquazTM(T)/60)
	Effesole.cfuso.value=FormatHMS(cf/60)

	var TAS=Ts-AlfaSole
	AltezzaAzimuth(Lat,DeltaSole,TAS)
	Effesole.AltSole.value=FormatGPS_consegno(Alt)
	Effesole.AzimSole.value=FormatGPS_senzasegno(Az)

	var PM=TransitoSole(gi,me,an,Lat,Long)
	Effesole.trans.value=FormatHMSore(PM+cf/60)

	var PM=SorgeSole(gi,me,an,Lat,Long)
	if (PM==9999) {hsorge="- - - -"} else {hsorge=FormatHM(PM+cf/60)}
	Effesole.sorge.value=hsorge

	var PM=TramSole(gi,me,an,Lat,Long)
	if (PM==9999) {htram="- - - -"} else {htram=FormatHM(PM+cf/60)}
	Effesole.tram.value=htram

	var PM=CrepAstroMatt(gi,me,an,Lat,Long)
	if (PM==9999) {CAM="- - - -"} else {CAM=FormatHM(PM+cf/60)}
	Effesole.crepamatt.value=CAM

	var PM=CrepAstroSer(gi,me,an,Lat,Long)
	if (PM==9999) {CAS="- - - -"} else {CAS=FormatHM(PM+cf/60)}
	Effesole.crepaser.value=CAS

	var PM=CrepNautMatt(gi,me,an,Lat,Long)
	if (PM==9999) {CAM="- - - -"} else {CAM=FormatHM(PM+cf/60)}
	Effesole.crepnmatt.value=CAM

	var PM=CrepNautSer(gi,me,an,Lat,Long)
	if (PM==9999) {CAS="- - - -"} else {CAS=FormatHM(PM+cf/60)}
	Effesole.crepnser.value=CAS


//	var PM=CrepCivMatt(gi,me,an,Lat,Long)
//	if (PM==9999) {CAM="- - - -"} else {CAM=FormatHM(PM+cf/60)}
//	Effesole.crepcmatt.value=CAM

//	var PM=CrepCivSer(gi,me,an,Lat,Long)
//	if (PM==9999) {CAS="- - - -"} else {CAS=FormatHM(PM+cf/60)}
//	Effesole.crepcser.value=CAS

	var Qoresole=tram_n-sorge_n
	var S1=Sgn(DeltaSole)
	var S2=Sgn(Lat)
	if ((Qoresole==0) && (S1==S2)) {Qoresole=24} 
	//if ((Qoresole==0) && (S1<>S2))  {Qoresole=0}
	Effesole.oresole.value=FormatHhMm(Qoresole)

	var Qorebuio=24-Qoresole
	Effesole.orebuio.value=FormatHhMm(Qorebuio)

}
function AggiornaData()
{
	DataOggi()
	Effesole.giorno.value=g
	Effesole.mese.value=m
	Effesole.anno.value=a
	Effesole.ore.value=hr
	Effesole.minuti.value=mn
	Effesole.secondi.value=sc
	if ((m>3) && (m<11)) {Effesole.Oralegale[1].checked=true
			      OraLeg=1 } 
			else 
			      {Effesole.Oralegale[0].checked=true
			       OraLeg=0}
	Calcola(OraLeg)
}

