Index: trunk/web-app/js/taskShow.js
===================================================================
--- trunk/web-app/js/taskShow.js	(revision 831)
+++ trunk/web-app/js/taskShow.js	(revision 833)
@@ -1,21 +1,83 @@
 
-// Load an Entry from via AJAX.
-// @container Container object to load response into.
+// Load data into createContainer and register events.
+function loadCreateContainer(data, createContainer, listContainer, button) {
+        // Load the response data and show container.
+        createContainer.html(data).slideDown(800);
+        // Scroll the window.
+        jQuery('html,body').animate({scrollTop: createContainer.offset().top}, 900, function() {
+            createContainer.find(':input[name="comment"]').focus();
+        });
+        // Hijack form submit to use our function.
+        var eventData = {listContainer:listContainer,createContainer:createContainer, button:button};
+        createContainer.find('form:first').submit(eventData, submitCreateEntryForm);
+        // Register the close img click handler.
+        createContainer.find('.pane_close img').click(function(){
+            createContainer.slideUp(600);
+            button.show(600);
+        });
+}
+
+// Submit a create Entry form via AJAX.
+function submitCreateEntryForm(event) {
+
+    var actionUrl = getContextPath()+"/entryDetailed/ajaxSave/";
+
+    event.preventDefault();
+    var listContainer = event.data.listContainer;
+    var createContainer = event.data.createContainer;
+    var button = event.data.button;
+    var form = createContainer.find('form:first');
+
+    // On success reload listContainer.
+    function success(data, textStatus, jqXHR){
+        createContainer.hide();
+        listContainer.html(data);
+        button.show(600);
+    }
+
+    // On create failure controller sets 403 and returns the form template.
+    function error(jqXHR, textStatus, errorThrown){
+        if(jqXHR.status == 403 && jqXHR.responseText){
+            loadCreateContainer(jqXHR.responseText, createContainer, listContainer, button);
+        }
+        else {
+            createContainer.html(errorIndication().show()).slideDown(600);
+        }
+        button.show(600);
+    }
+
+    // Start.
+    createContainer.html(loadingIndication().show()).slideDown(600);
+
+    jQuery.ajax({
+        url: actionUrl,
+        data: form.serializeArray(),
+        success: success,
+        error: error
+    });
+}
+
+// Get a create Entry form via AJAX.
+// @listContainer Container object to reload list into.
+// @createContainer Container object to load response into.
 // @button Button object used to trigger this function.
-// @args Params map to pass to actionUrl.
-function loadEntryForm(container, button, params) {
+// @params Params map to pass to actionUrl.
+function getCreateEntryForm(listContainer, createContainer, button, params) {
 
     var actionUrl = getContextPath()+"/entryDetailed/ajaxCreate/";
 
+    // On success load createContainer.
     function success(data, textStatus, jqXHR){
-        container.html(data);
-        jQuery('html,body').animate({scrollTop: container.offset().top}, 800, function() {
-            container.css("border", "1px solid #006DBA");
-            container.find(':input[name="comment"]').focus();
-        });
+        loadCreateContainer(data, createContainer, listContainer, button);
     }
 
+    // On error show controller responseText or show default error.
     function error(jqXHR, textStatus, errorThrown){
-        container.html(errorIndication().slideDown(600));
+        if(jqXHR.status == 403 && jqXHR.responseText){
+            loadCreateContainer(jqXHR.responseText, createContainer, listContainer, button);
+        }
+        else {
+            createContainer.html(errorIndication().show()).slideDown(600);
+        }
         button.show(600);
     }
@@ -23,5 +85,5 @@
     // Start.
     button.hide(600);
-    container.html(loadingIndication().slideDown(600));
+    createContainer.html(loadingIndication().show()).slideDown(600);
 
     jQuery.ajax({
@@ -32,2 +94,3 @@
     });
 }
+
