// Script per le funzioni di base astronomiche
// 1/8/2009

//----------------conversioni

var gradi  = 180/Math.PI;
var rad =  1/gradi;


//----------------gestione date


function Bisestile(AAAA)
{
    var bis = false
    if ((AAAA % 4)==0) { bis = true}
    if (AAAA > 1582) 
    {
        if ((AAAA % 100)==0) 
        {
            var anno = Math.floor(AAAA / 100)
            if ((anno % 4)==0) {bis = false} else {bis = true}
        }
    } 
return bis
}

function TrovaGiornoSett(g,m,a)
//restituisce il giorno della settimana per una data specifica
{
	var data= new Date()		
	data.setFullYear(a,m-1,g)
	var s=data.getDay()
	var gs
	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"}
return gs
}

function DataOggi()
//restituisce la data odierna completa
{
	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 AutoGiorno_c()
//restituisce il numero del giorno
{
	var oggi= new Date()		
	var s=oggi.getDate()
return s
}

function AutoGiorno_n()
//restituisce il nome del giorno
{
	var oggi= new Date()		
	var s=oggi.getDay()
	var gs
	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"}
return gs
}

function AutoMese_c()
//restituisce il numero del mese
	{
	var oggi= new Date()		
	var m=1+oggi.getMonth()		
return m
}

function AutoMese_n()
//restituisce il nome del mese
	{
	var ms	
	var oggi= new Date()		
	var m=1+oggi.getMonth()		
	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"}
return ms
}

function GiorniMese(m,AAAA)
//numero dei giorni nel mese
	{
	var ms
	var ab=Bisestile(AAAA)	
	var giorni
	var oggi= new Date()		
	if (m==1){giorni=31}
	if (m==2){giorni=28}	
	if ((m==2) && (ab==true)) {giorni=29} 
	if (m==3){giorni=31}
	if (m==4){giorni=30}
	if (m==5){giorni=31}
	if (m==6){giorni=30}
	if (m==7){giorni=31}
	if (m==8){giorni=31}
	if (m==9){giorni=30}
	if (m==10){giorni=31}
	if (m==11){giorni=30}
	if (m==12){giorni=31}
return giorni
}

function AutoAnno()
//restituisce l'anno
	{
	var browser=navigator.appName;
	var oggi= new Date()		
	var a=oggi.getYear()
	var browser=navigator.appName;
	if (browser=="Netscape") {a=a+1900}
return a
}

function ultimoaggiornamento()
//scrive la data di aggiornamento sulla pagina WEB
{
	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 ultima_domenica_mese(mese,anno)
{
	var domeniche=new Array()
	var trov=0
	var num_giorni=GiorniMese(mese,anno)
	for (var n=1;n<num_giorni+1;n++) {
		if (TrovaGiornoSett(n,mese,anno)=="Domenica") {
			trov=trov+1
			domeniche[trov]=n		
		}
	}
return giorno=domeniche[trov]
}


//-------------funzioni matematiche

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

function AngoloGiro(a)
// riduce all'angolo giro
{
	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 frac(n)
//restituisce la parte decimale di un numero decimale
{
	var i=Math.floor(n)
	var dec=n-i
return dec
}

function Log_10(num)
//calcola il logaritmo decimale
{       
	var Log10 = Math.log(num) /Math.log(10)
return Log10
}

//----------------------formattazione in uscita

function Format2dec(n)
//fornisce due decimali
{
	var sgn
	if (n<0) {sgn=-1} else {sgn=1}
	var na=Math.abs(n)
	var n2d=((Math.floor((na+0.005)*100))/100)*sgn
return n2d
}

function Format1dec(n)
//fornisce un decimale
{
	var sgn
	if (n<0) {sgn=-1} else {sgn=1}
	var na=Math.abs(n)
	var n1d=((Math.floor((na+0.05)*10))/10)*sgn
	if (n>=9999.9) {n1d="- - -"}
return n1d
}

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 FormatGD_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)*10)
	if (p==10) {p=0;g=g+1}
	if (g<10) {gs=g} else {gs=g}
	ps=p
	var formato=Sgn+gs+"°."+ps
return formato
}

function FormatGD_senzasegno(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.ceil((ang-g)*10)
	if (p==10) {p=0;g=g+1}
	if (g<10) {gs=g} else {gs=g}
	ps=p
	var formato=gs+"°."+ps
return formato
}

function FormatPD_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}
	ss=Math.floor(s/60*10)
	var formato=Sgn+ps+"'."+ss
return formato
}

function FormatPD_senzasegno(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}
	ss=Math.floor(s/60*10)
	var formato=ps+"'."+ss
return formato
}

function FormatGPD_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}
	ss=Math.floor(s/60*10)
	var formato=Sgn+gs+"°"+ps+"'."+ss
return formato
}

function FormatGPD_senzasegno(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}
	ss=Math.floor(s/60*10)
	var formato=gs+"°"+ps+"'."+ss
return formato
}

function FormatGP_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.ceil((ang-g)*60)
	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}
	var formato=Sgn+gs+"°"+ps+"'"
return formato
}

function FormatGP_senzasegno(grd)
{
var ps=""
var gs=""
var ss=""	
	var ang=Math.abs(grd)
	var g=Math.floor(ang)
	var p=Math.ceil((ang-g)*60)
	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}
	var formato=gs+"°"+ps+"'"
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 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 FormatSD_consegno(grd)
{
//solo i secondi e i decimi
var ps=""
var gs=""
var ss=""	
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 s=Math.floor(ang*3600-g*3600-p*60)
	var d=(ang*3600-g*3600-p*60)-s
    	d=Math.floor(d*10)
	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}
	ds=d
	var formato=Sgn+ss+"\""+"."+ds
return formato
}

function FormatSD_senzasegno(grd)
{
var ps=""
var gs=""
var ss=""	
var ds=""
	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)
	var d=(ang*3600-g*3600-p*60)-s
    	d=Math.floor(d*10)
	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}
	ds=d
	var formato=ss+"\""+"."+ds
return formato
}

function FormatHMSore(grd)
// es. 08:03:42
{
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 FormatHMS(grd)
// es. 08h03m42s
{
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 FormatHM(grd)
// es. 08:03
{
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)
// es. 08h03m
{
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+"<sup>h </sup>"+ps+"<sup>m </sup>"
return formato
}

function FormatMS(grd)
//minuti e secondi: 08m42s
{
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=Sgn+ps+"m"+ss+"s"
return formato
}



//--------------------------funzioni astronomiche

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 giornoPasqua(anno)
{
//Ritorna il giorno della Pasqua
var a
var b
var c
var d
var e
var f
var g
var h
var i
var j
var k
var l
var m
var n
var p
var giorno

     if (anno>=1583) {
        a= anno % 19;
        b= parseInt(anno/100);
        c= anno % 100;
        d= parseInt(b/4);
        e= b % 4;
        f= parseInt((b+8)/25);
        g= parseInt((b-f+1)/3);
        h= (19*a+b-d-g+15) % 30;
        i= parseInt(c/4);
        k= c % 4;
        l= (32+2*e+2*i-h-k) % 7;
        m= parseInt((a+11*h+22*l)/451);
        n= parseInt((h+l-7*m+114)/31);
        p= (h+l-7*m+114) % 31;
        giorno=p+1;
    }
     else {
        a= anno % 4;
        b= anno % 7;
        c= anno % 19;
        d= (19*c+15) % 30;
        e= (2*a+4*b-d+34) % 7;
        f= parseInt((d+e+114)/31);
        g= (d+e+114) % 31;
        giorno=g+1;
     }
     return giorno
}

function mesePasqua(anno)
{
//Ritorna il mese della Pasqua
var a
var b
var c
var d
var e
var f
var g
var h
var i
var j
var k
var l
var m
var n
var p
var mese
     if (anno>=1583) {
        a= anno % 19;
        b= parseInt(anno/100);
        c= anno % 100;
        d= parseInt(b/4);
        e= b % 4;
        f= parseInt((b+8)/25);
        g= parseInt((b-f+1)/3);
        h= (19*a+b-d-g+15) % 30;
        i= parseInt(c/4);
        k= c % 4;
        l= (32+2*e+2*i-h-k) % 7;
        m= parseInt((a+11*h+22*l)/451);
        n= parseInt((h+l-7*m+114)/31);
        p= (h+l-7*m+114) % 31;
        mese=n;
    }
     else {
        a= anno % 4;
        b= anno % 7;
        c= anno % 19;
        d= (19*c+15) % 30;
        e= (2*a+4*b-d+34) % 7;
        f= parseInt((d+e+114)/31);
        g= (d+e+114) % 31;
        mese=f;
     }
     return mese
}

function dataPasqua(anno)
{
//Ritorna il mese della Pasqua
var a
var b
var c
var d
var e
var f
var g
var h
var i
var j
var k
var l
var m
var n
var p
var data
var mese
var giorno
     if (anno>=1583) {
        a= anno % 19;
        b= parseInt(anno/100);
        c= anno % 100;
        d= parseInt(b/4);
        e= b % 4;
        f= parseInt((b+8)/25);
        g= parseInt((b-f+1)/3);
        h= (19*a+b-d-g+15) % 30;
        i= parseInt(c/4);
        k= c % 4;
        l= (32+2*e+2*i-h-k) % 7;
        m= parseInt((a+11*h+22*l)/451);
        n= parseInt((h+l-7*m+114)/31);
        p= (h+l-7*m+114) % 31;
        mese=n;
	giorno=p+1;
    }
     else {
        a= anno % 4;
        b= anno % 7;
        c= anno % 19;
        d= (19*c+15) % 30;
        e= (2*a+4*b-d+34) % 7;
        f= parseInt((d+e+114)/31);
        g= (d+e+114) % 31;
        mese=f;
	giorno=g+1;
     }
     return data=giorno+"/"+mese+"/"+anno;
}

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 Sorgere_Az(Lat,decl)
{
       var Az_S=(Math.acos(Math.sin(rad*decl)/Math.cos(rad*Lat)))
return Az_S*gradi
}

function Nutazione(JD)
{
	var T=(JD-2415020.0)/36525
	var T2=T*T
	var T3=T2*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
	    eps=23.43929111-0.0130042*T-0.00000164*T2+0.000000503*T3
	    epsc=eps+Deps
}

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 Ecl_in_Equa_Alfa(lat_E,lon_E,epsc)
        {
         var latr=rad*(lat_E);
         var lonr=rad*(lon_E);
         var eclr=rad*(epsc);
         var num=Math.sin(lonr)*Math.cos(eclr)-Math.tan(latr)*Math.sin(eclr);
         var den=Math.cos(lonr);
         var alfa=gradi*(Math.atan2(num,den));
         if (alfa<0) {alfa=360+alfa;}
return alfa;
}       

function Ecl_in_Equa_Delta(lat_E,lon_E,epsc)
        {
         var latr=rad*(lat_E);
         var lonr=rad*(lon_E);
         var eclr=rad*(epsc);
         var delta=gradi*(Math.asin(Math.sin(latr)*Math.cos(eclr)+Math.cos(latr)*Math.sin(eclr)*Math.sin(lonr)));
return delta;
}       

function EquazTM(JD)
//in minuti
{
	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=gradi*EQTM*4
return EQTM
}

function DataOre_da_Jul(JDe)
//Calcola la data e orario partire dal Giorno Giuliano
{
var JD,Z,F,A,alfa
var B,C,D,E,Gd
var m,AAAA
var giorno, mese,anno
var ore, min, sec

   JD = JDe+0.5
   Z = Math.floor(JD)
   F = JD-Z
   if (Z<2299161) {A=Z} else
       { alfa=Math.floor((Z-1867216.25)/36524.25)
         A=Z+1+alfa-Math.floor(alfa/4)
       }
   B = A+1524
   C = Math.floor((B-122.1)/365.25)
   D = Math.floor(365.25*C)
   E = Math.floor((B-D)/30.6001)
   Gd = B-D-Math.floor(30.6001*E)+F
   if (E<13.5) {m=E-1} else {m=E-13}
   if (m>2.5) {AAAA=C-4716} else {AAAA=C-4715}
//data in formato numerico
   giorno=Math.floor(Gd)
   mese=m
   anno=AAAA
//ora in formato numerico
  pdg=Gd-Math.floor(Gd)
  ore=Math.floor(pdg*24)
  min=Math.floor((pdg*24-ore)*60)
  sec=Math.floor(pdg*86400)-ore*3600-min*60
//conversione in stringa
  if (giorno<10) {var gs="0"+giorno} else {gs=giorno}
  if (mese<10) {var ms="0"+mese} else {ms=mese}
  if (ore<10) {var hs="0"+ore} else {hs=ore}
  if (min<10) {var ms="0"+min} else {ms=min} 
  if (sec<10) {var ss="0"+sec} else {ss=sec} 
  ris=gs+"/"+ms+"/"+anno+"  "+hs+":"+ms+":"+ss
return ris
}

function Data_da_Jul(JDe)
//Calcola la sola data a partire dal Giorno Giuliano
{
var JD,Z,F,A,alfa
var B,C,D,E,Gd
var m,AAAA
var giorno, mese,anno
var ore, min, sec

   JD = JDe+0.5
   Z = Math.floor(JD)
   F = JD-Z
   if (Z<2299161) {A=Z} else
       { alfa=Math.floor((Z-1867216.25)/36524.25)
         A=Z+1+alfa-Math.floor(alfa/4)
       }
   B = A+1524
   C = Math.floor((B-122.1)/365.25)
   D = Math.floor(365.25*C)
   E = Math.floor((B-D)/30.6001)
   Gd = B-D-Math.floor(30.6001*E)+F
   if (E<13.5) {m=E-1} else {m=E-13}
   if (m>2.5) {AAAA=C-4716} else {AAAA=C-4715}
//data in formato numerico
   giorno=Math.floor(Gd)
   mese=m
   anno=AAAA
//ora in formato numerico
//  pdg=Gd-Math.floor(Gd)
//  ore=Math.floor(pdg*24)
//  min=Math.floor((pdg*24-ore)*60)
//  sec=Math.floor(pdg*86400)-ore*3600-min*60
//conversione in stringa
    if (giorno<10) {var gs="0"+giorno} else {gs=giorno}
    if (mese<10) {var ms="0"+mese} else {ms=mese} 
    ris=gs+"/"+ms+"/"+anno
return ris
}

function Ora_da_Jul(JDe)
//Calcola il solo orario a partire dal Giorno Giuliano
{
var JD,Z,F,A,alfa
var B,C,D,E,Gd
var m,AAAA
var giorno, mese,anno
var ore, min, sec

   JD = JDe+0.5
   Z = Math.floor(JD)
   F = JD-Z
   if (Z<2299161) {A=Z} else
       { alfa=Math.floor((Z-1867216.25)/36524.25)
         A=Z+1+alfa-Math.floor(alfa/4)
       }
   B = A+1524
   C = Math.floor((B-122.1)/365.25)
   D = Math.floor(365.25*C)
   E = Math.floor((B-D)/30.6001)
   Gd = B-D-Math.floor(30.6001*E)+F
   if (E<13.5) {m=E-1} else {m=E-13}
   if (m>2.5) {AAAA=C-4716} else {AAAA=C-4715}
//data in formato numerico
   giorno=Math.floor(Gd)
   mese=m
   anno=AAAA
//ora in formato numerico
  pdg=Gd-Math.floor(Gd)
  ore=Math.floor(pdg*24)
  min=Math.floor((pdg*24-ore)*60)
  sec=Math.floor(pdg*86400)-ore*3600-min*60
//conversione in stringa
    if (ore<10) {var hs="0"+ore} else {hs=ore}
    if (min<10) {var ms="0"+min} else {ms=min} 
    if (sec<10) {var ss="0"+sec} else {ss=sec} 
  ris=hs+":"+ms+":"+ss
return ris
}

function OraMin_da_Jul(JDe)
//Calcola il solo orario a partire dal Giorno Giuliano
{
var JD,Z,F,A,alfa
var B,C,D,E,Gd
var m,AAAA
var giorno, mese,anno
var ore, min, sec

   JD = JDe+0.5
   Z = Math.floor(JD)
   F = JD-Z
   if (Z<2299161) {A=Z} else
       { alfa=Math.floor((Z-1867216.25)/36524.25)
         A=Z+1+alfa-Math.floor(alfa/4)
       }
   B = A+1524
   C = Math.floor((B-122.1)/365.25)
   D = Math.floor(365.25*C)
   E = Math.floor((B-D)/30.6001)
   Gd = B-D-Math.floor(30.6001*E)+F
   if (E<13.5) {m=E-1} else {m=E-13}
   if (m>2.5) {AAAA=C-4716} else {AAAA=C-4715}
//data in formato numerico
   giorno=Math.floor(Gd)
   mese=m
   anno=AAAA
//ora in formato numerico
  pdg=Gd-Math.floor(Gd)
  ore=Math.floor(pdg*24)
  min=Math.floor((pdg*24-ore)*60)
  sec=Math.floor(pdg*86400)-ore*3600-min*60
//conversione in stringa
    if (ore<10) {var hs="0"+ore} else {hs=ore}
    if (min<10) {var ms="0"+min} else {ms=min} 
    if (sec<10) {var ss="0"+sec} else {ss=sec} 
  ris=hs+":"+ms
return ris
//return pdg
}

