diff -up stormtask.module.orig stormtask.module
--- stormtask.module.orig 2009-07-24 10:05:00.000000000 -0400
+++ stormtask.module  2009-07-24 23:41:58.000000000 -0400
@@ -234,9 +234,37 @@ function stormtask_admin_settings() {

   $form['stormtask_jsgantt_color'] = array(
     '#type' => 'textfield',
-    '#title' => t('Gantt chart color'),
-    '#default_value' => variable_get('stormtask_jsgantt_color', '00CCFF'),
-    '#description' => t('Enter color for gantt chart bars.'),
+    '#title' => t('Gantt chart default color'),
+    '#default_value' => variable_get('stormtask_jsgantt_color', '666666'),
+    '#description' => t('Enter default color for gantt chart bars.'),
+    '#size' => 6,
+  );
+  $form['stormtask_jsgantt_color_completed'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Gantt chart "completed" color'),
+    '#default_value' => variable_get('stormtask_jsgantt_color_completed', '0DFF24'),
+    '#description' => t('Enter "completed" color for gantt chart bars.'),
+    '#size' => 6,
+  );
+  $form['stormtask_jsgantt_color_in_progress'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Gantt chart "in progress" color'),
+    '#default_value' => variable_get('stormtask_jsgantt_color_in_progress', '00CCFF'),
+    '#description' => t('Enter "in progress" color for gantt chart bars.'),
+    '#size' => 6,
+  );
+  $form['stormtask_jsgantt_color_on_hold'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Gantt chart "on hold" color'),
+    '#default_value' => variable_get('stormtask_jsgantt_color_on_hold', 'FFF60D'),
+    '#description' => t('Enter "on hold" color for gantt chart bars.'),
+    '#size' => 6,
+  );
+  $form['stormtask_jsgantt_color_overdue'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Gantt chart "overdue" color'),
+    '#default_value' => variable_get('stormtask_jsgantt_color_overdue', 'FF0D0D'),
+    '#description' => t('Enter "overdue" color for gantt chart bars.'),
     '#size' => 6,
   );
diff -up stormtask.admin.inc.orig stormtask.admin.inc
--- stormtask.admin.inc.orig  2009-07-17 10:13:48.000000000 -0400
+++ stormtask.admin.inc 2009-07-24 23:51:18.000000000 -0400
@@ -108,7 +108,11 @@ function stormtask_tasks($project) {
     $js = "";
     $pDepend = 0;
     $pParent = 0;
-
+
+    $now = time();
+    $one_day = (24 * 60 * 60);
+    $pColor_default = variable_get('stormtask_jsgantt_color', '00CCFF');
+    $pColor_overdue = variable_get('stormtask_jsgantt_color_overdue', 'FF0D0D');
     foreach($taskstree as $task ) {
       $pID = $task->nid;
       $pName = $task->title;
@@ -116,43 +120,71 @@ function stormtask_tasks($project) {
       $pLink = base_path()."node/".$task->nid;
       $pStart = date("n/j/Y",$task->datebegin);
       $pEnd = date("n/j/Y",$task->dateend);
-      $pColor = variable_get('stormtask_jsgantt_color', '00CCFF'); //$task->taskstatus;
       $pDepend = $task->parents[0];
-      //$pParent = $task->parents[0];
+      //  $pParent = $task->parents[0];
+
+      // theme by task status
+      $pColor = variable_get('stormtask_jsgantt_color_' . str_replace(' ', '_', $task->taskstatus), $pColor_default);
+      $pComp = 0;
+      switch($task->taskstatus) {
+        case 'completed':
+          $pComp = 100;
+          break;
+
+        case 'on hold':
+          $pComp = 50;
+          break;
+
+        case 'in progress':
+          // percent complete as f($now), end date inclusive
+          if ($now > $task->datebegin && $task->dateend > $task->datebegin) {
+            $pComp = ($now - $task->datebegin) / ($task->dateend - $task->datebegin + $one_day);
+            $pComp = round(100 * $pComp, 2);
+          }
+          // highlight overdue tasks
+          if ($now > $task->dateend) {
+            $pColor = $pColor_overdue;
+          }
+          break;
+      }
+
+      // show tasks with depth
+      if ($task->depth) {
+        $pName = str_repeat('--', $task->depth) .' '. $pName;
+      }

-      $pName = str_repeat('--', $task->depth) .' '. $pName;
       $js .= "g.AddTaskItem(new JSGantt.TaskItem(".$pID.",'".$pName."','".$pStart."','".$pEnd."','".$pColor."','".$pLink."',".$pMile.",'".$pRes."',".$pComp.",".$pGroup.",".$pParent.",".$pOpen.",".$pDepend.",'".$pCaption."'));\n";
     }

-    $o_gantt .= "<div style='position:relative' class='gantt' id='GanttChartDIV'></div>";
-    $o_gantt .= "<script>
-      // Here is all the html code neccessary to display the chart object
+    $o_gantt .="<div style='position:relative' class='gantt' id='GanttChartDIV'></div>";
+    drupal_add_js("
+      // here's all the html code neccessary to display the chart object
       // Future idea would be to allow XML file name to be passed in and chart tasks built from file.
       var g = new JSGantt.GanttChart('g',document.getElementById('GanttChartDIV'), 'day');
-        g.setShowRes(0); // Show/Hide Responsible (0/1)
-        g.setShowComp(0); // Show/Hide % Complete(0/1)
-        g.setShowDur('".$dispOpt['ShowDur']."'); // Show/Hide Duration (0/1)
-        g.setShowStartDate('".$dispOpt['ShowStartDate']."'); // Show/Hide Start Date(0/1)
-        g.setShowEndDate('".$dispOpt['ShowEndDate']."'); // Show/Hide End Date(0/1)
-        //g.setFormatArr('day','week','month')
-        g.setCaptionType('Resource');  // Set to Show Caption (None,Caption,Resource,Duration,Complete)
+      g.setShowRes(0); // Show/Hide Responsible (0/1)
+      g.setShowComp(0); // Show/Hide % Complete(0/1)
+      g.setShowDur('".$dispOpt['ShowDur']."'); // Show/Hide Duration (0/1)
+      g.setShowStartDate('".$dispOpt['ShowStartDate']."'); // Show/Hide Start Date(0/1)
+      g.setShowEndDate('".$dispOpt['ShowEndDate']."'); // Show/Hide End Date(0/1)
+      //g.setFormatArr('day','week','month');
+      g.setCaptionType('Resource');  // Set to Show Caption (None,Caption,Resource,Duration,Complete)
       if( g ) {
-// Parameters (pID, pName, pStart, pEnd, pColor, pLink, pMile, pRes,  pComp, pGroup, pParent, pOpen)
-".$js."
+        // Parameters (pID, pName, pStart, pEnd, pColor, pLink, pMile, pRes,  pComp, pGroup, pParent, pOpen)
+        ".$js."

-// use the XML file parser
-//    JSGantt.parseXML('http://localhost/services/sites/default/files/project.xml',g)
+        // use the XML file parser
+        // JSGantt.parseXML('http://localhost/services/sites/default/files/project.xml',g)

-    g.Draw();
-    g.DrawDependencies();
+        g.Draw();
+        g.DrawDependencies();
       }
       else
       {
-    alert('not defined');
+        alert('not defined');
       }
-    </script>";
+      ", "inline");
   }
-
+
   $o .= drupal_get_form('stormtask_tasks_form', $header, $taskstree, $project);
   $o .= $o_gantt;
   return $o;
