// JScript source code
var NextUpdate = 0;
var UpdateInterval = 1000*60*30; //alle 30min

// Daten des Users (Weltweit irgend jemand)
var UserDataAvailable = 0;
var UserDate;
var UserDayOfYear;
var UserTZ;
var strUserLon="";
var strUserLat="";
var strUserMoonRise="";
var strUserMoonSet="";
var strUserSunRise="";
var strUserSunSet="";
var strUsertime = ""; 
var strUserdate = ""; 
var strUMST = "";
var strLocaltime = ""; 
var strLocaldate = ""; 
var strLMST = "";

	
// Daten von Greenwich
var UTCDayOfYear;
var strUTCLon="";
var strUTCLat="";
var strUTCMoonRise="";
var strUTCMoonSet="";
var strUTCSunRise="";
var strUTCSunSet="";
var strGMST = "";
var strUTCtime = "";
var strUTCdate = "";
var strZeitgleichung ="";

var JD0 = 0;
var JD  = 0;


// Daten für die Sternwarte (Zeitdifferenz zu UTC: siehe var LocalTZ
var LocalTZ; // Umrechnung Sommerzeit/Winterzeit noch notwendig
var LocalDate;
var LocalDayOfYear;
var strLocalLon="";
var strLocalLat="";
var strLocalMoonRise="";
var strLocalMoonSet="";
var strLocalSunRise="";
var strLocalSunSet="";



// Moon global
var ImgIndex=0;
var MoonAgeUTC=0;

var strMoonAge ="";
var strMoonPhase ="";
var strMoonPhaseDeg = "";
var strMoonPart = "";
var strMoonImg = "images/moon01.gif";

function InitData() {
// Daten des Users (Weltweit irgend jemand)
	UserDate      = new Date();
	UserDayOfYear = Get_DayNumber(UserDate);
	UserTZ        = - UserDate.getTimezoneOffset()/60; // in Stunden; getTimezone liefert negativ für osten; hier aber + für osten
	
	var Name   = ReadCookie("UserName");
	var Breite = ReadCookie("GeoBreite");
	var Laenge = ReadCookie("GeoLaenge");
	
	if (Name != "" && Laenge != "" && Breite != "") {
		SetUserData(Laenge, Breite, Name);
		UserDataAvailable = 1;
	}
// Daten von Greenwich
	UTCDayOfYear = Get_UTCDayNumber(UserDate);

// Daten für die Sternwarte (Zeitdifferenz zu UTC: siehe var LocalTZ
	LocalTZ = IsSummerTime(UserDate) ? 2 : 1;
	LocalDate = new Date();
	LocalDate.setTime(UserDate.valueOf() - UserTZ*3600*1000 + LocalTZ*3600*1000);
	LocalDayOfYear = Get_DayNumber(LocalDate);
// alert("UserTZ: " +UserTZ +"   LocalTZ: " + LocalTZ);
	
	strLocalLon = ToGradMinSec(geoLaenge) + (geoLaenge > 0 ? " Ost" : " West");
	strLocalLat = ToGradMinSec(geoBreite) + (geoBreite > 0 ? " Nord" : " Süd");
	
	strUTCLon = ToGradMinSec(GreenwichLaenge);
	strUTCLat = ToGradMinSec(GreenwichBreite) + (GreenwichBreite > 0 ? " Nord" : " Süd");

	if (UserDataAvailable) {
		strUserLon = ToGradMinSec(UserGeoLaenge) + (UserGeoLaenge > 0 ? " Ost" : " West");
		strUserLat = ToGradMinSec(UserGeoBreite) + (UserGeoBreite > 0 ? " Nord" : " Süd");
		}
	
	CalcData();
}




// --------------------------------------------------------------------------
function UpdateMoon(){
	var Moon        = new CTimes(-1,-1,0);
	var MoonVortag  = new CTimes(-1,-1,0);
	var MoonNexttag = new CTimes(-1,-1,0);

	var Vortag = new Date();
	var Nexttag = new Date();
	
	Vortag.setTime(UserDate.getTime()-24*60*60*1000);
	Nexttag.setTime(UserDate.getTime()+24*60*60*1000);
	
// für die Sternwarte ------------------------------------------------------------------------------------------
	Moon        = GetRiseTimes(MOND,UserDate,geoLaenge,geoBreite);
	MoonVortag  = GetRiseTimes(MOND,Vortag  ,geoLaenge,geoBreite);
	MoonNexttag = GetRiseTimes(MOND,Nexttag ,geoLaenge,geoBreite);

	if ((Moon.UTRise + LocalTZ) >= 24 && (Moon.UTRise >=0))	
		Moon.UTRise = MoonVortag.UTRise;
	else
		if ((Moon.UTRise + LocalTZ) < 0 && (Moon.UTRise >=0))	
			Moon.UTRise = MoonNexttag.UTRise;

	if ((Moon.UTSet  + LocalTZ) >= 24 && (Moon.UTSet >=0))	
		Moon.UTSet  = MoonVortag.UTSet;
	else
		if ((Moon.UTSet + LocalTZ) < 0 && (Moon.UTSet >=0))	
			Moon.UTSet = MoonNexttag.UTSet;

	
	switch (Moon.Sichtbar){
		case -1:
			strLocalMoonRise = "unsichtbar";
			strLocalMoonSet = "unsichtbar";
			break;
		case 0:
			if (Moon.UTRise < 0)
				strLocalMoonRise = "----";
			else
				strLocalMoonRise = GetTimeStringSmall((Moon.UTRise + LocalTZ)%24);
				
			if (Moon.UTSet < 0)
				strLocalMoonSet = "----";
			else
				strLocalMoonSet = GetTimeStringSmall((Moon.UTSet + LocalTZ)%24);
				
			break;
		case 1:
			strLocalMoonRise = "immer sichtbar";
			strLocalMoonSet = "immer sichtbar";
			break;
	}
	
// für Greenwich ----------------------------------------------------------------------------------------
	Moon        = GetRiseTimes(MOND,UserDate,GreenwichLaenge,GreenwichBreite);
	MoonAgeUTC  = GetMoonAge(UserDate);
	
	strMoonAge = MoonAgeUTC + " Tage";
	
	switch (Moon.Sichtbar){
		case -1:
			strUTCMoonRise = "unsichtbar";
			strUTCMoonSet = "unsichtbar";
			break;
		case 0:
			if (Moon.UTRise < 0)
				strUTCMoonRise = "----";
			else
				strUTCMoonRise = GetTimeStringSmall(Moon.UTRise);
				
			if (Moon.UTSet < 0)
				strUTCMoonSet = "----";
			else
				strUTCMoonSet = GetTimeStringSmall(Moon.UTSet);
				
			break;
		case 1:
			strUTCMoonRise = "immer sichtbar";
			strUTCMoonSet = "immer sichtbar";
			break;
	}
	var MoonPhase = GetMoonPhase(UserDate);
//	alert("Angle: " + MoonPhase.Angle + "°\nPart: " + MoonPhase.Part + "%%");
//	ImgIndex = Math.round(MoonAgeUTC/29.53*23);
    ImgIndex = Math.round(MoonPhase.Angle / 360 * 23);
	if (ImgIndex > 23)
		ImgIndex = 23;
	
	strMoonPhase;
	
	switch(ImgIndex){
		case 0:
			strMoonPhase = "Neumond";
			break;
		case 1:
			strMoonPhase = "zunehmend, kurz nach Neumond";
			break;
		case 2:
			strMoonPhase = "zunehmend, nach Neumond";
			break;
		case 3:
			strMoonPhase = "zunehmend, zwischen Neumond und Halbmond";
			break;
		case 4:
			strMoonPhase = "zunehmend, vor erstem Viertel";
			break;
		case 5:
			strMoonPhase = "zunehmend, kurz vor erstem Viertel";
			break;
		case 6:
			strMoonPhase = "Halbmond, erstes Viertel";
			break;
		case 7:
			strMoonPhase = "zunehmend, kurz nach erstem Viertel";
			break;
		case 8:
			strMoonPhase = "zunehmend, nach erstem Viertel";
			break;
		case 9:
			strMoonPhase = "zunehmend, zwischen Halbmond und Vollmond";
			break;
		case 10:
			strMoonPhase = "zunehmend, vor Vollmond";
			break;
		case 11:
			strMoonPhase = "zunehmend, kurz vor Vollmond";
			break;
		case 12:
			strMoonPhase = "Vollmond";
			break;
		case 13:
			strMoonPhase = "abnehmend, kurz nach Vollmond";
			break;
		case 14:
			strMoonPhase = "abnehmend, nach Vollmond";
			break;
		case 15:
			strMoonPhase = "abnehmend, zwischen Vollmond und Halbmond";
			break;
		case 16:
			strMoonPhase = "abnehmend, vor letztem Viertel";
			break;
		case 17:
			strMoonPhase = "abnehmend, kurz vor letztem Viertel";
			break;
		case 18:
			strMoonPhase = "Halbmond, letztes Viertel";
			break;
		case 19:
			strMoonPhase = "abnehmend, kurz nach letztem Viertel";
			break;
		case 20:
			strMoonPhase = "abnehmend, nach letztem Viertel";
			break;
		case 21:
			strMoonPhase = "abnehmend, zwischen Halbmond und Neumond";
			break;
		case 22:
			strMoonPhase = "abnehmend, vor Neumond";
			break;
		case 23:
			strMoonPhase = "abnehmend, kurz vor Neumond";
			break;
		default:
			strMoonPhase = "unbekannt";
			break;
	}
	
    strMoonPhaseDeg = (Math.round(MoonPhase.Angle*10)/10) + " °";
    strMoonPart = MoonPhase.Part + " %";

	if (ImgIndex < 10)
		strMoonImg = "images/moon" + "0" + ImgIndex + ".gif";
	else
		strMoonImg = "images/moon" + ImgIndex + ".gif";
	
	
// für den User ------------------------------------------------------------------------------------------
	if ( UserDataAvailable == 0 )
		return;
		
	Moon        = GetRiseTimes(MOND,UserDate,UserGeoLaenge,UserGeoBreite);
	MoonVortag  = GetRiseTimes(MOND,Vortag  ,UserGeoLaenge,UserGeoBreite);
	MoonNexttag = GetRiseTimes(MOND,Nexttag ,UserGeoLaenge,UserGeoBreite);

	if ((Moon.UTRise + UserTZ) >= 24 && (Moon.UTRise >=0))	
		Moon.UTRise = MoonVortag.UTRise;
	else
		if ((Moon.UTRise + UserTZ) < 0 && (Moon.UTRise >=0))	
			Moon.UTRise = MoonNexttag.UTRise;

	if ((Moon.UTSet  + UserTZ) >= 24 && (Moon.UTSet >=0))	
		Moon.UTSet  = MoonVortag.UTSet;
	else
		if ((Moon.UTSet + UserTZ) < 0 && (Moon.UTSet >=0))	
			Moon.UTSet = MoonNexttag.UTSet;

	
	switch (Moon.Sichtbar){
		case -1:
			strUserMoonRise = "unsichtbar";
			strUserMoonSet = "unsichtbar";
			break;
		case 0:
			if (Moon.UTRise < 0)
				strUserMoonRise = "----";
			else
				strUserMoonRise = GetTimeStringSmall((Moon.UTRise + UserTZ)%24);
				
			if (Moon.UTSet < 0)
				strUserMoonSet = "----";
			else
				strUserMoonSet = GetTimeStringSmall((Moon.UTSet + UserTZ)%24);
				
			break;
		case 1:
			strUserMoonRise = "immer sichtbar";
			strUserMoonSet = "immer sichtbar";
			break;
	}
	
}
// End moon --------------------------------------------------------------------------


// --------------------------------------------------------------------------
function UpdateSun(){
 	var Sun        = new CTimes(-1,-1,0);
	var SunVortag  = new CTimes(-1,-1,0);
	var SunNexttag = new CTimes(-1,-1,0);

	var Vortag  = new Date();
	var Nexttag = new Date();
	
	Vortag.setTime(UserDate.getTime()-24*60*60*1000);
	Nexttag.setTime(UserDate.getTime()+24*60*60*1000);

// für die Sternwarte -----------------------------------------------------------------
	Sun        = GetRiseTimes(SONNE,UserDate,geoLaenge,geoBreite);
	SunVortag  = GetRiseTimes(SONNE,Vortag  ,geoLaenge,geoBreite);
	SunNexttag = GetRiseTimes(SONNE,Nexttag ,geoLaenge,geoBreite);

	if ((Sun.UTRise + LocalTZ) >= 24 && (Sun.UTRise >=0))	
		Sun.UTRise = SunVortag.UTRise;
	else
		if ((Sun.UTRise + LocalTZ) < 0 && (Sun.UTRise >=0))	
			Sun.UTRise = SunNexttag.UTRise;

	if ((Sun.UTSet  + LocalTZ) >= 24 && (Sun.UTSet >=0))	
		Sun.UTSet  = SunVortag.UTSet;
	else
		if ((Sun.UTSet + LocalTZ) < 0 && (Sun.UTSet >=0))	
			Sun.UTSet = SunNexttag.UTSet;


	switch (Sun.Sichtbar){
		case -1:
			strLocalSunRise = "unsichtbar";
			strLocalSunSet = "unsichtbar";
			break;
		case 0:
			if (Sun.UTRise < 0)
				strLocalSunRise = "----";
			else
				strLocalSunRise = GetTimeStringSmall(Sun.UTRise + LocalTZ);
				
			if (Sun.UTSet < 0)
				strLocalSunSet = "----";
			else
				strLocalSunSet = GetTimeStringSmall(Sun.UTSet + LocalTZ);
				
			break;
		case 1:
			strLocalSunRise = "immer sichtbar";
			strLocalSunSet = "immer sichtbar";
			break;
	}



// für Greenwich -----------------------------------------------------------------
	Sun        = GetRiseTimes(SONNE,UserDate,GreenwichLaenge,GreenwichBreite);
	switch (Sun.Sichtbar){
		case -1:
			strUTCSunrise = "unsichtbar";
			strUTCSunset = "unsichtbar";
			break;
		case 0:
			if (Sun.UTRise < 0)
				strUTCSunRise = "----";
			else
				strUTCSunRise = GetTimeStringSmall(Sun.UTRise);
				
			if (Sun.UTSet < 0)
				strUTCSunSet = "----";
			else
				strUTCSunSet = GetTimeStringSmall(Sun.UTSet);
				
			break;
		case 1:
			strUTCSunRise = "immer sichtbar";
			strUTCSunSet = "immer sichtbar";
			break;
	}

	

// für den User  -----------------------------------------------------------------
	if ( UserDataAvailable == 0 )
		return;
	Sun        = GetRiseTimes(SONNE,UserDate,UserGeoLaenge,UserGeoBreite);
	SunVortag  = GetRiseTimes(SONNE,Vortag  ,UserGeoLaenge,UserGeoBreite);
	SunNexttag = GetRiseTimes(SONNE,Nexttag ,UserGeoLaenge,UserGeoBreite);

	if ((Sun.UTRise + UserTZ) >= 24 && (Sun.UTRise >=0))	
		Sun.UTRise = SunVortag.UTRise;
	else
		if ((Sun.UTRise + UserTZ) < 0 && (Sun.UTRise >=0))	
			Sun.UTRise = SunNexttag.UTRise;

	if ((Sun.UTSet  + UserTZ) >= 24 && (Sun.UTSet >=0))	
		Sun.UTSet  = SunVortag.UTSet;
	else
		if ((Sun.UTSet + UserTZ) < 0 && (Sun.UTSet >=0))	
			Sun.UTSet = SunNexttag.UTSet;


	switch (Sun.Sichtbar){
		case -1:
			strUserSunRise = "unsichtbar";
			strUserSunSet = "unsichtbar";
			break;
		case 0:
			if (Sun.UTRise < 0)
				strUserSunRise = "----";
			else
				strUserSunRise = GetTimeStringSmall(Sun.UTRise + UserTZ);
				
			if (Sun.UTSet < 0)
				strUserSunSet = "----";
			else
				strUserSunSet = GetTimeStringSmall(Sun.UTSet + UserTZ);
				
			break;
		case 1:
			strUserSunRise = "immer sichtbar";
			strUserSunSet = "immer sichtbar";
			break;
	}

}
// End Sun--------------------------------------------------------------------------


function CalcData() {
	var Jetzt = new Date();
	UserDate.setTime(Jetzt.getTime());
	
	UserDayOfYear = Get_DayNumber(UserDate);

	UTCDayOfYear = Get_UTCDayNumber(UserDate);
	
	LocalDate.setTime(UserDate.valueOf() - UserTZ*3600*1000 + LocalTZ*3600*1000);
	LocalDayOfYear = Get_DayNumber(LocalDate);

	JD0 = Get_JD0(UserDate);
	JD  = Get_JD(UserDate);
	
//----------------------------------------------------------------
//  diese Funktionen existieren nur ab JScript Engine 5.5; erst ab IE5.5, nicht bei IE5.0
//     toLocaleTimeString(); toLocaleDateString(); 
//----------------------------------------------------------------
	
	strLocaltime = ToTimeString(LocalDate); 
	strLocaldate = ToDateString(LocalDate); 

	strUsertime = ToTimeString(UserDate); 
	strUserdate = ToDateString(UserDate); 

  	strUTCtime = ToUTCTimeString(UserDate);
	strUTCdate = ToUTCDateString(UserDate);
	
	strLMST = ToHourMinSec(Get_LMST(UserDate));
	strGMST = ToHourMinSec(Get_GMST(UserDate));
	strUMST = ToHourMinSec(Get_UMST(UserDate));
	
	strZeitgleichung = Get_Zeitgleichung(UTCDayOfYear) + " min";
	
	if ( (UserDate.getTime()>NextUpdate) || ((NextUpdate - UserDate.getTime())> UpdateInterval)) {
		UpdateMoon();
		UpdateSun();
		NextUpdate = UserDate.getTime() + UpdateInterval; 
	}
}

