Index: /trunk/FACT++/scripts/Main.js
===================================================================
--- /trunk/FACT++/scripts/Main.js	(revision 15288)
+++ /trunk/FACT++/scripts/Main.js	(revision 15289)
@@ -101,12 +101,18 @@
 sub_incomplete.onchange = function(evt)
 {
-    if (!evt)
+    if (!evt.data)
+    {
+        this.last_inc = 0;
         return;
-
-    var inc = evt.data[0];//obj['incomplete'];
+    }
+
+    var inc = evt.obj['incomplete'];
     if (!inc)
+    {
+        this.last_inc = 0;
         return;
-
-    if ((evt.time - this.last_time)<5000 && this.last_inc==inc)
+    }
+
+    if (this.last_inc==inc)
         return;
 
@@ -136,5 +142,4 @@
     }
 
-    this.last_time = evt.time;
     this.last_inc  = inc;
 }
@@ -322,5 +327,5 @@
             if (stat[i]!=0x43)
             {
-                console.out("   ...disconnect ", i);
+                console.out("   ...disconnect "+i);
                 dim.send("FAD_CONTROL/DISCONNECT", i);
             }
@@ -332,5 +337,5 @@
             if (stat[i]!=0x43)
             {
-                console.out("   ...reconnect ", i);
+                console.out("   ...reconnect "+i);
                 dim.send("FAD_CONTROL/CONNECT", i);
             }
@@ -353,5 +358,5 @@
             if (incomplete&(1<<i))
             {
-                console.out("   ...disconnect ", i);
+                console.out("   ...disconnect "+i);
                 dim.send("FAD_CONTROL/DISCONNECT", i);
             }
@@ -363,5 +368,5 @@
             if (incomplete&(1<<i))
             {
-                console.out("   ...reconnect ", i);
+                console.out("   ...reconnect "+i);
                 dim.send("FAD_CONTROL/CONNECT", i);
             }
@@ -650,11 +655,6 @@
 function Shutdown()
 {
-    /**** dummy ****/
-    //console.out("  => [SHUTDOWN] called.");
     console.out("Shutdown: start");
 
-    dim.send("FEEDBACK/STOP");
-    dim.send("FEEDBACK/ENABLE_OUTPUT", false);
-    dim.send("FTM_CONTROL/STOP_TRIGGER");
     service_feedback.voltageOff();
     CloseLid(); 
@@ -665,8 +665,4 @@
     // FIXME: This might not work is the drive is already close to park position
     dim.wait("DRIVE_CONTROL", "Locked", 3000);
-    //dim.wait("DRIVE_CONTROL", "Moving", 3000);
-    //dim.wait("DRIVE_CONTROL", "Armed", 120000);
-
-    // dim.wait("DRIVE_CONTROL", "Locked", 3000);
 
     var sub = new Subscription("DRIVE_CONTROL/POINTING_POSITION");
@@ -688,4 +684,11 @@
     var now = new Date();
     v8.timeout(150000, func);
+
+    //dim.send("FEEDBACK/STOP");
+    dim.send("FEEDBACK/ENABLE_OUTPUT", false);
+    dim.send("FTM_CONTROL/STOP_TRIGGER");
+
+    dim.wait("FEEDBACK", "CurrentCtrlIdle", 3000);
+    dim.wait("FTM_CONTROL", "Idle", 3000);
 
     var report = sub.get();
@@ -789,4 +792,5 @@
 var lastObs;
 var sun = Sun.horizon(-13);
+var system_on;  // undefined
 
 while (1)
@@ -815,4 +819,5 @@
         // FIXME: State check?
         Shutdown();
+        system_on = false;
         continue;
     }
@@ -863,6 +868,8 @@
     }
 
+    var task = obs[sub].task;
+
     // Check if sun is still up... only DATA and RATESCAN must be suppressed
-    if ((obs[sub].task=="DATA" || obs[sub].task=="RATESCAN") && sun.isUp)
+    if ((task=="DATA" || task=="RATESCAN") && sun.isUp)
     {
         var now = new Date();
@@ -872,4 +879,14 @@
         continue;
     }
+
+    if (system_on===false && task!="STARTUP")
+    {
+        v8.sleep(1000);
+        continue;
+    }
+
+    var power_states = sun.isUp || system_on===false ? [ "DriveOff" ] : [ "SystemOn" ];
+
+    var drive_states = sun.isUp || system_on===false ? [ ] : [ "Armed", "Tracking", "OnTrack" ];
 
     // A scheduled task was found, lets check if all servers are
@@ -887,10 +904,10 @@
          [ "MCP",             [ "Idle"                     ] ],
          [ "TIME_CHECK",      [ "Valid"                    ] ],
-         [ "PWR_CONTROL",     [ "SystemOn"                 ] ],
+         [ "PWR_CONTROL",     power_states/*[ "SystemOn"                 ]*/ ],
          [ "AGILENT_CONTROL", [ "VoltageOn"                ] ],
          [ "BIAS_CONTROL",    [ "VoltageOff", "VoltageOn", "Ramping" ] ],
          [ "FEEDBACK",        [ "CurrentControl", "CurrentCtrlIdle" ] ],
          [ "LID_CONTROL",     [ "Open", "Closed"           ] ],
-         [ "DRIVE_CONTROL",   [ "Armed", "Tracking", "OnTrack" ] ],
+         [ "DRIVE_CONTROL",   drive_states/*[ "Armed", "Tracking", "OnTrack" ]*/ ],
          [ "FTM_CONTROL",     [ "Idle", "TriggerOn"        ] ],
          [ "FAD_CONTROL",     [ "Connected", "WritingData" ] ],
@@ -926,4 +943,5 @@
         // It is unclear what comes next, so we better switch off the voltage
         service_feedback.voltageOff();
+        system_on = true;
         break;
 
@@ -931,4 +949,5 @@
         console.out("  SHUTDOWN", "");
         Shutdown();
+        system_on = false;
 
         // FIXME: Avoid new observations after a shutdown until
