Index: release/project_release.js
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/project/release/project_release.js,v
retrieving revision 1.3
diff -u -p -r1.3 project_release.js
--- release/project_release.js	14 Jan 2009 06:13:57 -0000	1.3
+++ release/project_release.js	16 Jan 2010 20:46:10 -0000
@@ -1,73 +1,54 @@
 /* $Id: project_release.js,v 1.3 2009/01/14 06:13:57 dww Exp $ */
 
+// IE doesn't support hiding or disabling select options, so we have to rebuild the list. :(
+Drupal.projectReleaseRebuildSelect = function() {
+  // Remove everything
+  recommended = this.value;
+  while (this.length > 1) {
+    this.remove(1);
+  }
+
+  // Now add the choices back.
+  choices = this;
+  $(this).parents('table:eq(0)').find('input.form-checkbox.supported:checked').each(function () {
+    $(this).parents('tr:eq(0)').find('td:first-child').each(function () {
+      choices.appendChild(new Option(this.innerHTML, this.innerHTML));
+      if (this.innerHTML == recommended) {
+        choices.selectedIndex = choices.length-1;
+      }
+    });
+  });
+
+  // If removing a supported version changes the recommended version then highlight it.
+  if (this.selectedIndex == 0 && recommended != -1) {
+    $(this).parents('table:eq(0)').find('tr:last').css('background-color', '#FFFFAA');
+  }
+}
+
 Drupal.behaviors.projectReleaseAutoAttach = function () {
   // Set handler for clicking a radio to change the recommended version.
-  $('form#project-release-project-edit-form input.form-radio.recommended').click(function () {
-    Drupal.projectReleaseSetRecommended( this );
+  $('form#project-release-project-edit-form select.recommended').change(function () {
+    $(this).parents('table:eq(0)').find('tr:last').css('background-color', '#FFFFAA');
   });
   
   // Set handler for clicking checkbox to toggle a version supported/unsupported.
   $('form#project-release-project-edit-form input.form-checkbox.supported').click(function() {
+    $(this).parents('table:eq(0)').find('select').each(Drupal.projectReleaseRebuildSelect);
+
     if (this.checked) {
       // Marking this version as supported.
-      $(this).parents('tr:eq(0)').find('.recommended, .snapshot').removeAttr('disabled');
-      // If there are no recommended versions, make this newly supported version recommended.
-      if (!Drupal.projectReleaseIsRecommendedSet($(this).parents('table:eq(0)'))) {
-        Drupal.projectReleaseSetRecommended($(this).parents('tr:eq(0)').find('.recommended'));
-      }
+      $(this).parents('tr:eq(0)').find('.snapshot').removeAttr('disabled');
     }
     else {
       // Marking this version as unsupported, so disable row.
-      $(this).parents('tr:eq(0)').find('.recommended, .snapshot')
-        .attr('disabled','true')
-        .removeAttr('checked');
-
-      // Handle case were there are now no recommended versions.
-      if (!Drupal.projectReleaseIsRecommendedSet($(this).parents('table:eq(0)'))) {
-        // See if there is at least one supported versions.
-        var recommendable = null;
-        $(this).parents('table:eq(0)').find(".recommended").each( function(i) {
-          if (!this.disabled) {
-            recommendable = this;
-          }
-        });
-        if (recommendable) {
-          // There is a supported version, so recommend it.
-          Drupal.projectReleaseSetRecommended( recommendable );
-        }
-        else {
-          // There are no supported versions.
-          Drupal.projectReleaseUnsetRecommended( $(this).parents('table:eq(0)') );
-        }
-      }
+      $(this).parents('tr:eq(0)').find('.snapshot').attr('disabled','true').removeAttr('checked');
     }
   }).each( function() { // Disable unsupported versions on initial page load.
     if (!this.checked) {
-      $(this).parents('tr:eq(0)').find('.recommended, .snapshot').attr('disabled','true');
+      $(this).parents('tr:eq(0)').find('.snapshot').attr('disabled','true');
     }
   });
-};
-
-Drupal.projectReleaseIsRecommendedSet = function (table) {
-  var recommended = false;
-  $(table).find(".recommended").each( function(i) {
-    if (this.checked) {
-      recommended = true;
-    }
-  });
-  return recommended;
-};
-
-Drupal.projectReleaseSetRecommended = function (radio) {
-  $(radio).attr('checked','true');
-  var recommended = $(radio).parents('tr:eq(0)').find('.version-name').val();
-  $(radio).parents('table:eq(0)').find('tr:last span')
-    .html(recommended)
-    .css('background-color', '#FFFFAA');
-};
 
-Drupal.projectReleaseUnsetRecommended = function (table) {
-    $(table).find('tr:last span')
-      .html('n/a')
-      .css('background-color', '#FFFFAA');
+  // Go ahead and remove the unavailable choices from the recommended list.
+  $('select.recommended').each(Drupal.projectReleaseRebuildSelect);
 };
Index: release/project_release.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/project/release/project_release.module,v
retrieving revision 1.147
diff -u -p -r1.147 project_release.module
--- release/project_release.module	9 Dec 2009 00:08:46 -0000	1.147
+++ release/project_release.module	16 Jan 2010 20:46:12 -0000
@@ -263,16 +263,6 @@ function project_release_check_supported
         db_query("UPDATE {project_release_supported_versions} SET recommended = %d WHERE nid = %d AND tid = %d", 0, $pid, $tid);
         $num_recommended = 0;
       }
-
-      if ($num_recommended == 0) {
-        // We no longer have a recommended major for this API/tid, so select a
-        // sensible default, if possible. Find the lowest supported major
-        // number that has a published release.
-        $lowest_major = db_result(db_query("SELECT MIN(r.version_major) FROM {project_release_nodes} r INNER JOIN {project_release_supported_versions} prsv ON r.pid = prsv.nid INNER JOIN {node} n ON n.nid = r.nid INNER JOIN {term_node} tn ON tn.nid = n.nid WHERE r.pid = %d AND tn.tid = %d AND prsv.supported = %d AND n.status = %d", $pid, $tid, 1, 1));
-        if ($lowest_major !== NULL && $lowest_major !== FALSE) {
-          db_query("UPDATE {project_release_supported_versions} SET supported = %d, recommended = %d WHERE nid = %d AND tid = %d AND major = %d", 1, 1, $pid, $tid, $lowest_major);
-        }
-      }
     }
   }
   else {
cvs diff: Diffing release/includes
Index: release/includes/project_edit_releases.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/project/release/includes/project_edit_releases.inc,v
retrieving revision 1.2
diff -u -p -r1.2 project_edit_releases.inc
--- release/includes/project_edit_releases.inc	6 Aug 2009 01:32:57 -0000	1.2
+++ release/includes/project_edit_releases.inc	16 Jan 2010 20:46:12 -0000
@@ -122,15 +122,18 @@ function _project_release_edit_version_m
       'major' => array(),
     );
     $recommended_version = -1;
-    $recommended_options = array();
+    $recommended_options = array(-1 => t('None'));
     foreach ($api_data['majors'] as $major_version => $major_data) {
       if ($major_data['#recommended'] == TRUE) {
         $recommended_version = $major_version;
       }
-      $recommended_options[$major_version] = '';
-      $current = project_release_get_current_recommended($node->nid, $api_tid, $major_version);
-      $version_name = (!empty($current)) ? $current->version : t('n/a');
+
+      $recommended_options[$major_version] = $major_version;
       $form['api'][$api_tid]['major'][$major_version] = array(
+        'current' => array(
+          '#type' => 'markup',
+          '#value' => project_release_get_current_recommended($node->nid, $api_tid, $major_version)->version,
+        ),
         'supported' => array(
           '#type' => 'checkbox',
           '#title' => t('Supported'),
@@ -158,22 +161,13 @@ function _project_release_edit_version_m
       );
     }
     $form['api'][$api_tid]['recommended'] = array(
-      '#type' => 'radios',
-      '#title' => t('Recommended'),
+      '#title' => t('Recommended major version'),
+      '#type' => 'select',
       '#options' => $recommended_options,
       '#default_value' => $recommended_version,
-      '#attributes' => array('class'=>'recommended'),
-    );
-    $recommended_major = db_result(db_query("SELECT major FROM {project_release_supported_versions} WHERE nid = %d AND tid = %d AND recommended = %d", $node->nid, $api_tid, 1));
-    if ($recommended_major !== FALSE) {
-      $current_recommended = $form['api'][$api_tid]['major'][$recommended_major]['version_name']['#value'];
-    }
-    else {
-      $current_recommended = t('n/a');
-    }
-    $form['api'][$api_tid]['currently_recommended'] = array(
-      '#type' => 'markup',
-      '#value' => '<label>'. t('Currently recommended') .':</label> <span>'. $current_recommended .'</span>',
+      '#prefix' => '<div class="container-inline">',
+      '#suffix' => '</div>',
+      '#attributes' => array('class' => 'recommended'),
     );
   }
   return $form;
@@ -191,14 +185,13 @@ function theme_project_release_project_e
 
     $header = array(
       t('Major version'),
+      t('Current Release'),
       t('Supported'),
-      t('Recommended'),
       array(
         'data' => t('Show snapshot release'),
         'colspan' => 2,
       ),
     );
-
     foreach (element_children($form['api']) as $tid) {
       $output .= '<h3>'. $form['api'][$tid]['#api_term_name'] .'</h3>';
       $rows = array();
@@ -206,21 +199,19 @@ function theme_project_release_project_e
       foreach (element_children($form['api'][$tid]['major']) as $major) {
         $row = array();
         $row[] = $major;
+        $row[] = drupal_render($form['api'][$tid]['major'][$major]['current']);
         // We want to unset the titles for each element, since we already have
         // table headers to label each column.
         unset($form['api'][$tid]['major'][$major]['supported']['#title']);
         $row[] = drupal_render($form['api'][$tid]['major'][$major]['supported']);
-        unset($form['api'][$tid]['recommended'][$major]['#title']);
-        $row[] = drupal_render($form['api'][$tid]['recommended'][$major]);
         unset($form['api'][$tid]['major'][$major]['snapshot']['#title']);
-        $row[] = drupal_render($form['api'][$tid]['major'][$major]['snapshot']).
-          drupal_render($form['api'][$tid]['major'][$major]['version_name']);
+        $row[] = drupal_render($form['api'][$tid]['major'][$major]['snapshot']);
         $rows[] = $row;
       }
       // Finally, add a row for the currently recommended version.
       $row = array();
       $row[] = array(
-        'data' => drupal_render($form['api'][$tid]['currently_recommended']),
+        'data' => drupal_render($form['api'][$tid]['recommended']),
         'colspan' => 5,
       );
       $rows[] = $row;
@@ -249,24 +240,12 @@ function project_release_project_edit_fo
       $supported = FALSE;
       // First, we just iterate through to see if *any* majors are supported.
       foreach ($api_info['major'] as $major => $flags) {
-        if (!empty($flags['supported'])) {
-          $supported = TRUE;
-          break;
-        }
-      }
-      if ($supported) {
         // At least 1 major is supported, so validate the settings.
-        foreach ($api_info['major'] as $major => $flags) {
-          if (empty($flags['supported']) && !empty($flags['snapshot'])) {
-            $element = 'api]['. $tid .'][major]['. $major .'][snapshot';
-            form_set_error($element, t('You can not show a snapshot release for a major version that is not supported for %api_term_name.', array('%api_term_name' => $form_state['values']['api'][$tid]['#api_term_name'])));
-          }
+        if ($flags['supported'] == FALSE && $flags['snapshot'] == TRUE) {
+          $element = 'api]['. $tid .'][major]['. $major .'][snapshot';
+          form_set_error($element, t('You can not show a snapshot release for a major version that is not supported for %api_term_name.', array('%api_term_name' => $form_state['values']['api'][$tid]['#api_term_name'])));
         }
-        $recommended = $api_info['recommended'];
-        if ($recommended < 0) {
-          form_set_error("api][$tid][recommended", t('You must select a recommended major version for %api_term_name.', array('%api_term_name' => $form_state['values']['api'][$tid]['#api_term_name'])));
-        }
-        elseif (empty($api_info['major'][$recommended]['supported'])) {
+        if ($flags['supported'] == FALSE && $api_info['recommended'] == $major) {
           form_set_error("api][$tid][recommended", t('You can not recommend a major version that is not supported for %api_term_name.', array('%api_term_name' => $form_state['values']['api'][$tid]['#api_term_name'])));
         }
       }
@@ -285,13 +264,9 @@ function project_release_project_edit_fo
 
   if (!empty($form_state['values']['api'])) {
     foreach ($form_state['values']['api'] as $tid => $values) {
-      if (isset($values['recommended'])) {
-        $recommended_major = $values['recommended'];
-      }
       if (!empty($values['major'])) {
         foreach ($values['major'] as $major => $major_values) {
-          $major_values['recommended'] = ($major_values['supported'] && $recommended_major == $major) ? 1 : 0;
-          $major_values['snapshot'] = ($major_values['supported'] && $major_values['snapshot']) ? 1 : 0;
+          $major_values['recommended'] = ($values['recommended'] == $major) ? 1 : 0;
           if ($obj = db_fetch_object(db_query("SELECT * FROM {project_release_supported_versions} WHERE nid = %d AND tid = %d AND major = %d", $nid, $tid, $major))) {
             if ($obj->supported != $major_values['supported']
                 || $obj->recommended != $major_values['recommended']
