Index: stormtask/stormtask.module
===================================================================
--- stormtask/stormtask.module	(revision 758)
+++ stormtask/stormtask.module	(working copy)
@@ -400,7 +400,7 @@
   db_query($s, $organization_nid, $organization_title, $project_nid);
 }
 
-function stormtask_form(&$node) {
+function stormtask_form(&$node, $form_state) {
   $breadcrumb = array();
   $breadcrumb[] = l(t('Storm'), 'storm');
 
@@ -664,7 +664,12 @@
     '#weight' => module_exists('content') ? content_extra_field_weight($node->type, 'group5') : -16,
   );
   
-  $options = storm_get_assignment_options($node->organization_nid, $node->project_nid);
+  if ((!empty($form_state['post']['organization_nid']) && is_numeric($form_state['post']['organization_nid'])) && (!empty($form_state['post']['project_nid']) && is_numeric($form_state['post']['project_nid']))) {
+    $options = storm_get_assignment_options($form_state['post']['organization_nid'], $form_state['post']['project_nid']);
+  }
+  else {
+    $options = storm_get_assignment_options($node->organization_nid, $node->project_nid);
+  }
 
   $form['group5']['assigned_nid'] = array(
     '#type' => 'select',
@@ -686,10 +691,104 @@
     '#type' => 'hidden',
     '#default_value' => $node->title_old,
   );
+  
+  // ADD PRE RENDER FUNCTION
+  $form['#pre_render'][] = 'stormtask_pre_render_task_form';
+  
+  return $form;
+}
+
+
+/**
+ * Implementation of hook_form_alter()
+ *
+ * @return unknown_type
+ */
+function stormtask_form_alter(&$form, $form_state, $form_id) {
+  
+  switch ($form_id) {
+
+    // TIMETRACKING NODE FORM
+    case 'stormtask_node_form':
+
+      // AVOID FETCHING FORM FROM CACHE IF AN ERROR OCCURS
+      unset($form['form_build_id']);
+      
+      break;
 
+  }
+}
+
+
+/**
+ * pre render the timetracking form before it is rendered as html
+ * update the options of the select forms because they maybe were modified by javascript
+ * but the form is fetched from the cache without the modifications
+ * 
+ * @param unknown_type $form
+ */
+function stormtask_pre_render_task_form($form) {
+  
+  // --------------------
+  // CHECK ORGANIZATIONS
+  // --------------------
+  if (!empty($form['group1']['organization_nid']['#value']) && $form['group1']['organization_nid']['#value'] != $form['group1']['organization_nid']['#default_value']) {
+    $form['group1']['organization_nid']['#default_value'] = $form['group1']['organization_nid']['#value'];
+    // OPTIONS ARE THE SAME BECAUSE THEY ARE NOT CHANGED BY JS
+  }
+  
+  // ----------------
+  // CHECK PROJECTS
+  // ----------------
+  if (!empty($form['group1']['project_nid']['#value']) && ($form['group1']['project_nid']['#value'] != $form['group1']['project_nid']['#default_value'])) {
+    
+    $form['group1']['project_nid']['#default_value'] = $form['group1']['project_nid']['#value'];
+    
+    // TODO MAYBE SOURCE OUT INTO SEPARATE FUNCTION
+    // GET OPTIONS
+    $s = "SELECT n.nid, n.title FROM {node} AS n INNER JOIN {stormproject} AS spr ON spr.vid=n.vid
+    WHERE n.status=1 AND spr.organization_nid=%d AND n.type='stormproject' ORDER BY n.title";
+    $s = stormproject_access_sql($s);
+    $s = db_rewrite_sql($s);
+    $r = db_query($s, $form['group1']['organization_nid']['#value']);
+    $projects = array();
+    while ($project = db_fetch_object($r)) {
+      $projects[$project->nid] = $project->title;
+    }
+    $form['group1']['project_nid']['#options'] = $projects;
+    
+  }
+  
+  // -------------------
+  // CHECK PARENT TASK
+  // -------------------
+  if (!empty($form['group1']['parent_nid']['#value']) && $form['group1']['parent_nid']['#value'] != $form['group1']['parent_nid']['#default_value']) {
+    
+    $form['group1']['parent_nid']['#default_value'] = $form['group1']['parent_nid']['#value'];
+    
+    $tree = _stormtask_get_tree($form['group1']['project_nid']['#value']);
+    $parent_tasks = _stormtask_plain_tree($tree);
+    $form['group1']['parent_nid']['#options'] = array(0 => '-') + $parent_tasks;
+    
+  }
+  
+  
+  // -------------------
+  // CHECK ASSIGNED TO
+  // -------------------
+  if (!empty($form['group5']['assigned_nid']['#value']) && $form['group5']['assigned_nid']['#value'] != $form['group5']['assigned_nid']['#default_value']) {
+    
+    $form['group5']['assigned_nid']['#default_value'] = $form['group5']['assigned_nid']['#value'];
+    
+    $options = storm_get_assignment_options($form['group1']['organization_nid']['#value'], $form['group1']['project_nid']['#value']);
+    $form['group5']['assigned_nid']['#options'] = $options;
+    
+  }
+  
   return $form;
 }
 
+
 // INSERT / UPDATE FUNCTIONS
 function stormtask_insert($node) {
   _stormtask_beforesave($node);
