Index: misc/drupal.js
===================================================================
RCS file: /cvs/drupal/drupal/misc/drupal.js,v
retrieving revision 1.21
diff -u -r1.21 drupal.js
--- misc/drupal.js	5 Apr 2006 00:53:16 -0000	1.21
+++ misc/drupal.js	16 Apr 2006 16:26:38 -0000
@@ -228,39 +228,49 @@
 }
 
 /**
+ * Like the String object's indexOf method, returns the index of an array element, or -1 if the element is not in the array
+ */
+Array.prototype.indexOf = function (el) {
+  for (var i = 0; i < this.length; i++) {
+    if (this[i] == el) {
+      return i;
+    }
+  }
+  return -1;
+}
+
+/**
  * Returns true if an element has a specified class name
  */
 function hasClass(node, className) {
-  if (node.className == className) {
-    return true;
-  }
-  var reg = new RegExp('(^| )'+ className +'($| )')
-  if (reg.test(node.className)) {
-    return true;
-  }
-  return false;
+  var classes = node.className.split(' ');
+  return classes.indexOf(className) != -1 ? true : false;
 }
 
 /**
  * Adds a class name to an element
  */
 function addClass(node, className) {
-  if (hasClass(node, className)) {
-    return false;
+  var classes = node.className.split(' ');
+  if (classes.indexOf(className) == -1) {
+    classes.push(className);
+    node.className = classes.join(' ');
+    return true;
   }
-  node.className += ' '+ className;
-  return true;
+  return false;
 }
 
 /**
  * Removes a class name from an element
  */
 function removeClass(node, className) {
-  if (!hasClass(node, className)) {
-    return false;
+  var classes = node.className.split(' ');
+  if (classes.indexOf(className) != -1) {
+    classes.splice(classes.indexOf(className), 1);
+    node.className = classes.join(' ');
+    return true;
   }
-  node.className = eregReplace('(^| )'+ className +'($| )', '', node.className);
-  return true;
+  return false;
 }
 
 /**
