Index: /trunk/FACT++/src/smartfact.cc
===================================================================
--- /trunk/FACT++/src/smartfact.cc	(revision 15200)
+++ /trunk/FACT++/src/smartfact.cc	(revision 15201)
@@ -1,7 +1,4 @@
 #ifdef HAVE_NOVA
-#include <libnova/solar.h>
-#include <libnova/lunar.h>
-#include <libnova/rise_set.h>
-#include <libnova/transform.h>
+#include "externals/nova.h"
 #endif
 
@@ -105,24 +102,15 @@
     // Could be done more efficient: Only recalcuate if
     // the current time exceeds at least on of the stored times
-    Sun(double lon, double lat, const Time &t=Time()) :  time(t)
+    Sun(const Time &t) :  time(t)
     {
 #ifdef HAVE_LIBNOVA
-        ln_lnlat_posn observer;
-        observer.lng = lon;
-        observer.lat = lat;
-
         // get Julian day from local time
         const double JD = time.JD();
 
-        ln_rst_time sun_day;
-        ln_rst_time sun_civil;
-        ln_rst_time sun_astronomical;
-        ln_rst_time sun_dark;
-
         // Warning: return code of 1 means circumpolar and is not checked!
-        ln_get_solar_rst        (JD-0.5, &observer,      &sun_day);
-        ln_get_solar_rst_horizon(JD-0.5, &observer, - 6, &sun_civil);
-        ln_get_solar_rst_horizon(JD-0.5, &observer, -12, &sun_astronomical);
-        ln_get_solar_rst_horizon(JD-0.5, &observer, -18, &sun_dark);
+        Nova::RstTime sun_day          = Nova::GetSolarRst(JD-0.5);
+        Nova::RstTime sun_civil        = Nova::GetSolarRst(JD-0.5,  -6);
+        Nova::RstTime sun_astronomical = Nova::GetSolarRst(JD-0.5, -12);
+        Nova::RstTime sun_dark         = Nova::GetSolarRst(JD-0.5, -18);
 
         fSetDayTime       = Time(sun_day.set);
@@ -139,8 +127,8 @@
         const bool is_night = JD>sun_dark.set;
 
-        ln_get_solar_rst        (JD+0.5, &observer,      &sun_day);
-        ln_get_solar_rst_horizon(JD+0.5, &observer, - 6, &sun_civil);
-        ln_get_solar_rst_horizon(JD+0.5, &observer, -12, &sun_astronomical);
-        ln_get_solar_rst_horizon(JD+0.5, &observer, -18, &sun_dark);
+        sun_day          = Nova::GetSolarRst(JD+0.5);
+        sun_civil        = Nova::GetSolarRst(JD+0.5,  -6);
+        sun_astronomical = Nova::GetSolarRst(JD+0.5, -12);
+        sun_dark         = Nova::GetSolarRst(JD+0.5, -18);
 
         if (is_day)
@@ -242,22 +230,10 @@
     // Could be done more efficient: Only recalcuate if
     // the current time exceeds at least on of the stored times
-    Moon(double lon, double lat, const Time &t=Time()) : time(t)
+    Moon(const Time &t) : time(t)
     {
 #ifdef HAVE_LIBNOVA
         const double JD = time.JD();
 
-        ln_lnlat_posn observer;
-        observer.lng = lon;
-        observer.lat = lat;
-
-        //observer.lng.degrees = -5;
-        //observer.lng.minutes = 36;
-        //observer.lng.seconds = 30;
-        //observer.lat.degrees = 42;
-        //observer.lat.minutes = 35;
-        //observer.lat.seconds = 40;
-
-        ln_rst_time moon;
-        ln_get_lunar_rst(JD-0.5, &observer, &moon);
+        Nova::RstTime moon = Nova::GetLunarRst(JD-0.5);
 
         fRise    = Time(moon.rise);
@@ -273,5 +249,5 @@
         const bool is_dn      = JD>moon.set;
 
-        ln_get_lunar_rst(JD+0.5, &observer, &moon);
+        moon = Nova::GetLunarRst(JD+0.5);
         if (is_up)
             fRise = Time(moon.rise);
@@ -281,9 +257,7 @@
             fSet = Time(moon.set);
 
-        ln_equ_posn pos;
-        ln_get_lunar_equ_coords(JD, &pos);
-
-        ln_hrz_posn hrz;
-        ln_get_hrz_from_equ (&pos, &observer, JD, &hrz);
+        const Nova::EquPosn pos = Nova::GetLunarEquCoords(JD);
+        const Nova::HrzPosn hrz = Nova::GetHrzFromEqu(pos, JD);
+
         az =    hrz.az;
         zd = 90-hrz.alt;
@@ -292,5 +266,5 @@
         dec = pos.dec;
 
-        disk = ln_get_lunar_disk(JD)*100;
+        disk = Nova::GetLunarDisk(JD)*100;
         state = 0;
         if (fRise   <fTransit && fRise   <fSet)     state = 0;  // not visible
@@ -1925,5 +1899,5 @@
 #ifdef HAVE_NOVA
 
-    vector<pair<ln_equ_posn, double>> fMoonCoords;
+    vector<pair<Nova::EquPosn, double>> fMoonCoords;
 
     void CalcMoonCoords(double jd)
@@ -1934,8 +1908,7 @@
         for (double h=0; h<1; h+=1./(24*12))
         {
-            ln_equ_posn  moon;
-            ln_get_lunar_equ_coords_prec(jd+h, &moon, 0.01);
-
-            const double disk = ln_get_lunar_disk(jd+h);
+            const Nova::EquPosn moon = Nova::GetLunarEquCoords(jd+h,0.01);
+
+            const double disk = Nova::GetLunarDisk(jd+h);
 
             fMoonCoords.push_back(make_pair(moon, disk));
@@ -1943,5 +1916,5 @@
     }
 
-    pair<vector<float>, pair<Time, float>> GetVisibility(ln_equ_posn *src, ln_lnlat_posn *observer, double jd)
+    pair<vector<float>, pair<Time, float>> GetVisibility(Nova::EquPosn *src, double jd)
     {
         jd = floor(jd);
@@ -1950,6 +1923,6 @@
         const double jd1 = fmod(fSun.fRiseAstronomical.JD(), 1);
 
-        ln_equ_posn  moon;
-        ln_equ_posn *pos = src ? src : &moon;
+        Nova::EquPosn  moon;
+        Nova::EquPosn *pos = src ? src : &moon;
 
         double max   = 0;
@@ -1966,6 +1939,5 @@
                 moon = fMoonCoords[i].first; //ln_get_lunar_equ_coords_prec(jd+h, &moon, 0.01);
 
-            ln_hrz_posn hrz;
-            ln_get_hrz_from_equ(pos, observer, jd+h, &hrz);
+            const Nova::HrzPosn hrz = Nova::GetHrzFromEqu(*pos, jd+h);
 
             if (h>jd0 && h<jd1)
@@ -1988,5 +1960,5 @@
     }
 
-    pair<vector<float>, pair<Time, float>> GetLightCondition(ln_equ_posn *src, ln_lnlat_posn *observer, double jd)
+    pair<vector<float>, pair<Time, float>> GetLightCondition(Nova::EquPosn *src, double jd)
     {
         jd = floor(jd);
@@ -2008,9 +1980,8 @@
             if (h>jd0 && h<jd1)
             {
-                ln_equ_posn moon  = fMoonCoords[i].first;//ln_get_lunar_equ_coords_prec(jd+h, &moon, 0.01);
-                const double disk = fMoonCoords[i].second;//ln_get_lunar_disk(jd+h);
-
-                ln_hrz_posn hrz;
-                ln_get_hrz_from_equ(&moon, observer, jd+h, &hrz);
+                Nova::EquPosn moon = fMoonCoords[i].first;//ln_get_lunar_equ_coords_prec(jd+h, &moon, 0.01);
+                const double disk  = fMoonCoords[i].second;//ln_get_lunar_disk(jd+h);
+
+                const Nova::HrzPosn hrz = Nova::GetHrzFromEqu(moon, jd+h);
 
                 Moon m;
@@ -2049,13 +2020,10 @@
     void UpdateAstronomy()
     {
-        const double lon = -(17.+53./60+26.525/3600);
-        const double lat =   28.+45./60+42.462/3600;
-
         Time now;
 
         CalcMoonCoords(now.JD());
 
-        fSun  = Sun (lon, lat, now);
-        fMoon = Moon(lon, lat, now);
+        fSun  = Sun (now);
+        fMoon = Moon(now);
 
         vector<string> color(8, HTML::kWhite);
@@ -2144,12 +2112,8 @@
 
 #ifdef HAVE_NOVA
-        ln_lnlat_posn observer;
-        observer.lng = lon;
-        observer.lat = lat;
-
         int ccol = 0;
         int lcol = 0;
 
-        /*const*/ pair<vector<float>, pair<Time, float>> vism = GetVisibility(0, &observer, now.JD());
+        /*const*/ pair<vector<float>, pair<Time, float>> vism = GetVisibility(0, now.JD());
         if (vism.first.size()>0)
         {
@@ -2181,12 +2145,11 @@
                 const double dec  = (*v)[2];
 #ifdef HAVE_NOVA
-                ln_equ_posn pos;
+                Nova::EquPosn pos;
                 pos.ra  = ra*15;
                 pos.dec = dec;
 
-                ln_hrz_posn hrz;
-                ln_get_hrz_from_equ(&pos, &observer, now.JD(), &hrz);
-
-                /*const*/ pair<vector<float>, pair<Time, float>> vis = GetVisibility(&pos, &observer, now.JD());
+                const Nova::HrzPosn hrz = Nova::GetHrzFromEqu(pos, now.JD());
+
+                /*const*/ pair<vector<float>, pair<Time, float>> vis = GetVisibility(&pos, now.JD());
                 if (vis.first.size()>0)
                 {
@@ -2199,5 +2162,5 @@
                     ccol++;
 
-                    /*const*/ pair<vector<float>, pair<Time, float>> lc = GetLightCondition(&pos, &observer, now.JD());
+                    /*const*/ pair<vector<float>, pair<Time, float>> lc = GetLightCondition(&pos, now.JD());
                     if (lc.first.size()>0)
                     {
