Index: hierarchical_select.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/hierarchical_select/hierarchical_select.module,v
retrieving revision 1.170
diff -u -F^f -r1.170 hierarchical_select.module
--- hierarchical_select.module	15 Aug 2009 13:15:47 -0000	1.170
+++ hierarchical_select.module	17 Aug 2009 21:49:04 -0000
@@ -783,6 +783,7 @@ function _hierarchical_select_validate(&
             )
           )
         );
+        _hierarchical_select_form_set_error_class($element);
       }
     }
   }
@@ -806,6 +807,7 @@ function _hierarchical_select_validate(&
   // form.inc, so it works in an identical way.
   if ($element['#required'] && (!count($element['#value']) || (is_string($element['#value']) && strlen(trim($element['#value'])) == 0))) {
     form_error($element, t('!name field is required.', array('!name' => $element['#title'])));
+    _hierarchical_select_form_set_error_class($element);
   }
 }
 
@@ -1544,6 +1546,26 @@ function _hierarchical_select_form_has_h
 }
 
 /**
+ * Set the 'error' class on the appropriate part of Hierarchical Select,
+ * depending on its configuration.
+ *
+ * @param $element
+ *   A Hierarchical Select form item.
+ */
+function _hierarchical_select_form_set_error_class(&$element) {
+  $config = _hierarchical_select_inherit_default_config($element['#config']);
+
+  if ($config['dropbox']['status']) {
+    form_error($element['dropbox']['visible']);
+  }
+  else {
+    for ($i = 0; $i < count(element_children($element['hierarchical_select']['selects'])); $i++) {
+      form_error($element['hierarchical_select']['selects'][$i]);
+    }
+  }
+}
+
+/**
  * Append messages to Hierarchical Select's log. Used when in developer mode.
  *
  * @param $item
Index: includes/theme.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/hierarchical_select/includes/theme.inc,v
retrieving revision 1.7
diff -u -F^f -r1.7 theme.inc
--- includes/theme.inc	15 Aug 2009 10:52:07 -0000	1.7
+++ includes/theme.inc	17 Aug 2009 21:49:04 -0000
@@ -74,11 +74,14 @@ function theme_hierarchical_select_selec
  * @return
  *   A themed HTML string representing the form element.
  */
-// TODO: check if this has changed in D6.
 function theme_hierarchical_select_select($element) {
   $select = '';
   $size = $element['#size'] ? ' size="'. $element['#size'] .'"' : '';
-  _form_set_class($element, array('form-select'));
+  $class = array('form-select');
+  if (form_get_error($element) === '') {
+    $class = array_merge($class, array('error'));
+  }
+  _form_set_class($element, $class);
   $multiple = isset($element['#multiple']) && $element['#multiple'];
   return '<select name="'. $element['#name'] .''. ($multiple ? '[]' : '') .'"'. ($multiple ? ' multiple="multiple" ' : '') . drupal_attributes($element['#attributes']) .' id="'. $element['#id'] .'" '. $size .'>'. _hierarchical_select_options($element) .'</select>';
 }
@@ -145,6 +148,10 @@ function theme_hierarchical_select_textf
 function theme_hierarchical_select_dropbox_table($element) {
   $output = '';
 
+  $class = 'dropbox';
+  if (form_get_error($element) === '') {
+    $class .= ' error';
+  }
 
   $title     = $element['title']['#value'];
   $separator = $element['separator']['#value'];
@@ -152,7 +159,7 @@ function theme_hierarchical_select_dropb
 
   $separator_html = '<span class="hierarchical-select-item-separator">'. $separator .'</span>';
 
-  $output .= '<div class="dropbox">';
+  $output .= '<div class="' . $class . '">';
   $output .= '<table>';
   $output .= '<caption class="dropbox-title">'. $title .'</caption>';
   $output .= '<tbody>';
