? book-589440-D6.patch
Index: modules/book/book.admin.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/book/book.admin.inc,v
retrieving revision 1.8.2.3
diff -u -p -r1.8.2.3 book.admin.inc
--- modules/book/book.admin.inc	22 Oct 2008 19:26:01 -0000	1.8.2.3
+++ modules/book/book.admin.inc	11 Feb 2010 00:37:12 -0000
@@ -160,7 +160,12 @@ function _book_admin_table($node, &$form
       '#type' => 'value',
       '#value' => $hash,
     );
-    _book_admin_table_tree($tree['below'], $form['table']);
+    // Delta must be an integer > half the number of nodes in the book.
+    $delta = ceil(count($tree['below']) / 2) + 1;
+    if ($delta < 15) {
+      $delta = 15;
+    }
+    _book_admin_table_tree($tree['below'], $form['table'], $delta);
   }
 }
 
@@ -169,7 +174,7 @@ function _book_admin_table($node, &$form
  *
  * @see book_admin_edit()
  */
-function _book_admin_table_tree($tree, &$form) {
+function _book_admin_table_tree($tree, &$form, $delta) {
   foreach ($tree as $data) {
     $form['book-admin-'. $data['link']['nid']] = array(
       '#item' => $data['link'],
@@ -185,7 +190,7 @@ function _book_admin_table_tree($tree, &
       'weight' => array(
         '#type' => 'weight',
         '#default_value' => $data['link']['weight'],
-        '#delta' => 15,
+        '#delta' => $delta,
       ),
       'plid' => array(
         '#type' => 'textfield',
@@ -198,7 +203,7 @@ function _book_admin_table_tree($tree, &
       ),
     );
     if ($data['below']) {
-      _book_admin_table_tree($data['below'], $form);
+      _book_admin_table_tree($data['below'], $form, $delta);
     }
   }
 
Index: modules/book/book.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/book/book.module,v
retrieving revision 1.454.2.6
diff -u -p -r1.454.2.6 book.module
--- modules/book/book.module	25 Feb 2009 11:47:37 -0000	1.454.2.6
+++ modules/book/book.module	11 Feb 2010 00:37:12 -0000
@@ -381,12 +381,17 @@ function _book_add_form_elements(&$form,
   }
 
   $form['book']['plid'] = _book_parent_select($node->book);
+  // Delta must be an integer > half the number of nodes in the book.
+  $delta = ceil(db_result(db_query('SELECT COUNT(nid) - 1 FROM {book} WHERE bid = %d', $node->book['bid'])) / 2) + 1;
+  if ($delta < 15) {
+    $delta = 15;
+  }
 
   $form['book']['weight'] = array(
     '#type' => 'weight',
     '#title' => t('Weight'),
     '#default_value' => $node->book['weight'],
-    '#delta' => 15,
+    '#delta' => $delta,
     '#weight' => 5,
     '#description' => t('Pages at a given level are ordered first by weight and then by title.'),
   );
