Index: modules/book/book.admin.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/book/book.admin.inc,v
retrieving revision 1.31
diff -u -p -r1.31 book.admin.inc
--- modules/book/book.admin.inc	9 Jan 2010 21:54:00 -0000	1.31
+++ modules/book/book.admin.inc	18 Jan 2010 12:30:03 -0000
@@ -176,6 +176,16 @@ function _book_admin_table($node, &$form
  * @see book_admin_edit()
  */
 function _book_admin_table_tree($tree, &$form) {
+  // Compute the appropriate #delta only for the first call: number of the
+  // book's pages won't change afterwards.
+  $delta = &drupal_static(__FUNCTION__);
+  if (empty($delta)) {
+    $data = each($tree);
+    $delta = (int)(db_query('SELECT COUNT(nid) - 1 FROM {book} WHERE bid = :bid', array(':bid' => $data[1]['link']['bid']))->fetchField() / 2) + 1;
+    if ($delta < 15) {
+      $delta = 15;
+    }
+  }
   foreach ($tree as $data) {
     $form['book-admin-' . $data['link']['nid']] = array(
       '#item' => $data['link'],
@@ -191,7 +201,7 @@ function _book_admin_table_tree($tree, &
       'weight' => array(
         '#type' => 'weight',
         '#default_value' => $data['link']['weight'],
-        '#delta' => 15,
+        '#delta' => $delta,
       ),
       'plid' => array(
         '#type' => 'textfield',
Index: modules/book/book.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/book/book.module,v
retrieving revision 1.536
diff -u -p -r1.536 book.module
--- modules/book/book.module	9 Jan 2010 21:54:00 -0000	1.536
+++ modules/book/book.module	18 Jan 2010 12:30:06 -0000
@@ -497,12 +497,16 @@ function _book_add_form_elements(&$form,
   }
 
   $form['book']['plid'] = _book_parent_select($node->book);
+  $delta = (int)(db_query('SELECT COUNT(nid) - 1 FROM {book} WHERE bid = :bid', array(':bid' => $form['book']['original_bid']['#value']))->fetchField() / 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.'),
   );
