Index: modules/node.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/node.module,v
retrieving revision 1.576
diff -u -r1.576 node.module
--- modules/node.module	31 Dec 2005 10:48:56 -0000	1.576
+++ modules/node.module	3 Jan 2006 13:02:47 -0000
@@ -1685,17 +1685,24 @@
     $form['delete'] = array('#type' => 'button', '#value' => t('Delete'), '#weight' => 50);
   }
 
-  if ($op == t('Preview')) {
-    $form['#after_build'] = 'node_form_add_preview';
-  }
+  $form['#after_build'] = 'node_form_add_preview';
 
   return drupal_get_form($node->type . '_node_form', $form, 'node_form');
 }
 
 function node_form_add_preview($form, $edit) {
-  $edit = (object)$edit;
-  node_validate($edit);
-  $form['node_preview'] = array('#value' => node_preview($edit), '#weight' => -100);
+  $op = isset($_POST['op']) ? $_POST['op'] : '';
+  if ($op == t('Preview')) {
+    $edit = (object)$edit;
+    node_validate($edit);
+    _form_validate($form);
+    if (!form_get_errors()) {
+      $form['node_preview'] = array('#value' => node_preview($edit), '#weight' => -100);
+    }
+  }
+  if (variable_get('node_preview', 0) && (form_get_errors() || $op != t('Preview'))) {
+    unset($form['submit']);
+  }
   return $form;
 }
 
