var Executed=false;
var RefreshFlag=false;
var CurHour;
var CurMins;

// global variables CurDate, ActTZO exist
var Longitude=-25.73;

function rev(angle){return angle-Math.floor(angle/360.0)*360.0;}

// The Julian date at 0 hours UT at Greenwich

function jd0(year,month,day) {
  var y  = year;
  var m = month;
  if (m < 3) {m += 12; y -= 1};
  var a = Math.floor(y/100);
  var b = 2-a+Math.floor(a/4);
  var j = Math.floor(365.25*(y+4716))+Math.floor(30.6001*(m+1))+day+b-1524.5;
  return j;
}

// sidereal time in hours for Greenwich

function g_sidereal(year,month,day) {
	var T=(jd0(year,month,day)-2451545.0)/36525;
	var res=100.46061837+T*(36000.770053608+T*(0.000387933-T/38710000.0));
	return rev(res)/15.0;
}

// sidereal time in hours for observer

function local_sidereal(year,month,day,hours,minutes,seconds) {
	var res=g_sidereal(year,month,day);
	res+=1.00273790935*(hours+(minutes+ActTZO+(seconds/60.0))/60.0);
	res-=Longitude/15.0;
	while (res < 0) res+=24.0;
	while (res > 24) res-=24.0;
	return res;
}

// local sidereal time

function SiderealTime() {
	var cyear=CurDate.getFullYear();
	var cmonth=CurDate.getMonth()+1;
	var cday=CurDate.getDate();
	var chours=CurHour;
	var cminutes=CurMins;
	var cseconds=0;

	var lstn=local_sidereal(cyear,cmonth,cday,chours,cminutes,cseconds);
	var lstni=Math.floor(lstn);
	var lsts=((lstni < 10) ? "0" : "") + lstni;
	lstn=60*(lstn-lstni); lstni=Math.floor(lstn);
	lsts+=((lstni < 10) ? ":0" : ":") + lstni;
//  as commented print time widout seconds
//	lstn=60*(lstn-lstni); lstni=Math.floor(lstn);
//	lsts+=((lstni < 10) ? ":0" : ":") + lstni;
	document.getElementById("LSTCell").innerHTML=lsts;
}

// real clock

function Clock(StartDate){
	var StartHour=StartDate.getHours();
	var StartMins=StartDate.getMinutes();
	var StartSecs=StartDate.getSeconds();
	var PrintHour;
	var PrintMins;

	if (Executed) {
		if(RefreshFlag){document.location.reload(true);RefreshFlag=false;}
		SiderealTime();
		if(CurHour<10){PrintHour="0"+CurHour.toString();}else{PrintHour=CurHour.toString();}
		if(CurMins<10){PrintMins="0"+CurMins.toString();}else{PrintMins=CurMins.toString();}
		document.getElementById("ClockCell").innerHTML=PrintHour+":"+PrintMins;
	    
		CurMins++;
		if(CurMins>59){CurMins=0;CurHour++;}
		if(CurHour>23){CurHour=0;RefreshFlag=true;}

		window.setTimeout('Clock(CurDate,\"ClockCell\")',60000);

	} else {
		CurHour=StartHour;
		CurMins=StartMins;
		SiderealTime();
		if(CurHour<10){PrintHour="0"+CurHour.toString();}else{PrintHour=CurHour.toString();}
		if(CurMins<10){PrintMins="0"+CurMins.toString();}else{PrintMins=CurMins.toString();}
		document.getElementById("ClockCell").innerHTML=PrintHour+":"+PrintMins;

		CurMins++;
		if(CurMins>59){CurMins=0;CurHour++;}
		if(CurHour>23){CurHour=0;RefreshFlag=true;}

		Executed=true;
		window.setTimeout('Clock(CurDate,\"ClockCell\")',(60-StartSecs)*1000);
	}
}
