Index: form_builder.js
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/form_builder/form_builder.js,v
retrieving revision 1.23
diff -u -p -r1.23 form_builder.js
--- form_builder.js	30 Dec 2010 17:09:05 -0000	1.23
+++ form_builder.js	1 Feb 2011 17:01:18 -0000
@@ -53,7 +53,7 @@ Drupal.behaviors.formBuilderElement.atta
 Drupal.behaviors.formBuilderFields = {};
 Drupal.behaviors.formBuilderFields.attach = function(context) {
   // Bind a function to all elements to update the preview on change.
-  var $configureForm = $('#form-builder-field-configure');
+  var $configureForm = $('.form-builder-field-configure', context);
 
   $configureForm.find('input, textarea, select')
     .not('.form-builder-field-change)')
@@ -126,7 +126,7 @@ Drupal.behaviors.formBuilderTabs.attach 
   $fieldsets.filter(':first').before($close).before($tabs);
 
   // Hide all the fieldsets except the first.
-  $fieldsets.not(':first)').css('display', 'none');
+  $fieldsets.not(':first').css('display', 'none');
   $tabs.find('li:first').addClass('active').click(Drupal.formBuilder.clickCancel);
 
   // Enable tab switching by clicking on each tab.
@@ -151,7 +151,7 @@ Drupal.behaviors.formBuilderTabs.attach 
  */
 Drupal.behaviors.formBuilderDeleteConfirmation = {};
 Drupal.behaviors.formBuilderDeleteConfirmation.attach = function(context) {
-  $confirmForm = $('form.confirmation');
+  var $confirmForm = $('form.confirmation', context);
   if ($confirmForm.length) {
     $confirmForm.submit(Drupal.formBuilder.deleteField);
     $confirmForm.find('a').click(Drupal.formBuilder.clickCancel);
@@ -249,7 +249,9 @@ Drupal.formBuilder = {
   // replacing newer updates.
   lastUpdateTime: 0,
   // Status of mouse click.
-  mousePressed: 0
+  mousePressed: 0,
+  // Field configure form target
+  fieldConfigureHolder: false
 };
 
 /**
@@ -315,12 +317,23 @@ Drupal.formBuilder.editField = function(
   if (element == Drupal.formBuilder.activeElement && link == Drupal.formBuilder.activeLink) {
     $(link).addClass('progress');
     Drupal.formBuilder.closeActive(function() {
-      $(link).removeClass('progress');
+      link.removeClass('progress');
+      if (Drupal.formBuilder.fieldConfigureForm) {
+        Drupal.formBuilder.fieldConfigureForm.html($('<div class="field-settings-message">' + Drupal.t('No field selected') + '</div>'));
+      }
     });
     Drupal.formBuilder.unsetActive();
     return false;
   }
 
+  if (!Drupal.formBuilder.fieldConfigureForm) {
+    $('<div id="#form-builder-field-configure" class="form-builder-field-configure"><div class="field-settings-message">' + Drupal.t('Loading...') + '</div></div>').appendTo(element);
+  } else {
+    $('.field-settings-message').remove();
+    Drupal.formBuilder.fieldConfigureForm.append($('<div class="field-settings-message">' + Drupal.t('Loading...') + '</div>'));
+  }
+  
+
   var getForm = function() {
     $.ajax({
       url: link.href,
@@ -365,7 +378,15 @@ Drupal.formBuilder.clickCancel = functio
  */
 Drupal.formBuilder.displayForm = function(response) {
   var $preview = $('#form-builder-element-' + response.elementId);
-  var $form = $(response.html).insertAfter($preview).css('display', 'none');
+  var $form = $(response.html)
+  if (!Drupal.formBuilder.fieldConfigureForm) {
+    $('.form-builder-field-configure').html($form);
+    $form.css('display', 'none');
+  } else {
+    Drupal.formBuilder.fieldConfigureForm.html($form);
+    $form.css('visibility: hidden');
+  }
+  $('.field-settings-message').remove();
   Drupal.attachBehaviors($form.parent().get(0));
 
   $form
@@ -377,10 +398,13 @@ Drupal.formBuilder.displayForm = functio
     // Add in any messages from the server.
     .find('fieldset:visible:first').prepend(response.messages);
 
+  $form.css({visibility: 'visible', display: 'none'});
   $form.slideDown(function() {
-    $form.parents('div.form-builder-wrapper:first').find('a.progress').removeClass('progress');
+    $preview.parents('.form-builder-wrapper:first').find('a.progress').removeClass('progress');
   });
-  //Drupal.unfreezeHeight();
+
+  // Give focus to the form
+  $form.find('input:visible:first').focus();
 
   Drupal.formBuilder.updatingElement = false;
 };
@@ -435,7 +459,7 @@ Drupal.formBuilder.elementPendingChange 
  * After submitting the change to the server, display the updated element.
  */
 Drupal.formBuilder.updateElement = function(response) {
-  var $configureForm = $('#form-builder-field-configure');
+  var $configureForm = $('.form-builder-field-configure');
 
   // Do not let older requests replace newer updates.
   if (response.time < Drupal.formBuilder.lastUpdateTime) {
@@ -710,13 +734,13 @@ Drupal.formBuilder.unsetActive = functio
 
 Drupal.formBuilder.closeActive = function(callback) {
   if (Drupal.formBuilder.activeElement) {
-    var $activeForm = $(Drupal.formBuilder.activeElement).find('form');
+    var $activeForm = Drupal.formBuilder.fieldConfigureForm ? Drupal.formBuilder.fieldConfigureForm.find('form') : $(Drupal.formBuilder.activeElement).find('form');
 
     if ($activeForm.length) {
       Drupal.freezeHeight();
       $activeForm.slideUp(function(){
         $(this).remove();
-        if (callback) {
+        if (callback && $.isFunction(callback)) {
           callback.call();
         }
       });
