Index: modules/menu/menu.admin.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/menu/menu.admin.inc,v
retrieving revision 1.52
diff -u -r1.52 menu.admin.inc
--- modules/menu/menu.admin.inc	29 Jun 2009 14:24:56 -0000	1.52
+++ modules/menu/menu.admin.inc	17 Jul 2009 14:06:19 -0000
@@ -419,8 +419,23 @@
       '#type' => 'textfield',
       '#title' => t('Menu name'),
       '#maxsize' => MENU_MAX_MENU_NAME_LENGTH_UI,
-      '#description' => t('The machine-readable name of this menu. This text will be used for constructing the URL of the <em>menu overview</em> page for this menu. This name must contain only lowercase letters, numbers, and hyphens, and must be unique.'),
+      '#description' => t('This text will be used to construct the URL for this menu. This name must contain only lowercase letters, numbers and hyphens, and must be unique.'),
       '#required' => TRUE,
+      '#weight' => 1,
+      '#attached_js' => array(
+        'misc/auto-machine-readable.js',
+        array(
+          'data' => array(
+            'autoMachineReadable' => array(
+              'title' => array(
+                'target' => 'menu-name',
+                'searchPattern' => '[^a-z0-9]+',
+                'replaceToken' => '-',
+              ),
+            )
+          ),
+          'type' => 'setting')
+        ),
     );
     $form['#insert'] = TRUE;
   }
@@ -437,16 +452,20 @@
       '#title' => t('Title'),
       '#default_value' => $menu['title'],
       '#required' => TRUE,
+      '#field_suffix' => ' <small id="edit-title-suffix">&nbsp;</small>',
+      '#weight' => 0,    
     );
   }
   $form['description'] = array(
     '#type' => 'textarea',
     '#title' => t('Description'),
     '#default_value' => $menu['description'],
+    '#weight' => 2,    
   );
   $form['submit'] = array(
     '#type' => 'submit',
     '#value' => t('Save'),
+    '#weight' => 3,    
   );
 
   return $form;
Index: misc/auto-machine-readable.js
===================================================================
RCS file: misc/auto-machine-readable.js
diff -N misc/auto-machine-readable.js
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ misc/auto-machine-readable.js	1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,53 @@
+// $Id$
+(function ($) {
+
+/**
+ * Attach the auto machine readable behaviour
+ *
+ * Settings are expected to have an array of
+ *   source-form-element-name = {
+ *     target : target-form-element-name,
+ *     searchPattern : regex string without modifiers ie '[^a-z0-9]+'
+ *     replaceToken : token to use for replacement ie '-' or '_'
+ *   }
+ *
+ * @see menu.admin.inc function menu_edit_menu
+ */
+Drupal.behaviors.autoMachineReadable = {
+  attach: function () {
+    var autoMRS = Drupal.settings.autoMachineReadable;
+    for(var autoMR in autoMRS) {
+      searchPattern = autoMRS[autoMR].searchPattern;
+      // We do global search
+      searchPattern = new RegExp(searchPattern, 'g');
+      replaceToken = autoMRS[autoMR].replaceToken;
+      replaceMultipleToken = new RegExp( replaceToken + '+', 'g');
+      var source = '#edit-' + autoMR;
+      var suffix = source + '-suffix';
+      var target = '#edit-' + autoMRS[autoMR].target;
+      var wrapper = '.' + autoMRS[autoMR].target + '-wrapper';
+      if (!$(target).hasClass('error') && ($(target).val() == $(source).val().toLowerCase().replace(searchPattern, replaceToken).replace(replaceMultipleToken, replaceToken) || $(target).val() == '')) {
+        $(wrapper).hide();
+        $(source).keyup(function () {
+          var machine = $(this).val().toLowerCase().replace(searchPattern, replaceToken).replace(replaceMultipleToken, replaceToken);
+          if (machine != '_' && machine != '') {
+            $(target).val(machine);
+            $(suffix).empty().append(' URL path: ' + machine + ' [').append($('<a href="#">' + Drupal.t('Edit') + '</a>').click(function () {
+              $(wrapper).show();
+              $(suffix).hide();
+              $(source).unbind('keyup');
+              return false;
+            })).append(']');
+          }
+          else {
+            $(target).val(machine);
+            $(suffix).text('');
+          }
+        });
+        $(source).keyup();
+      }
+    }
+  }
+};
+
+})(jQuery);
