Index: trunk/grails-app/controllers/TaskDetailedController.groovy
===================================================================
--- trunk/grails-app/controllers/TaskDetailedController.groovy	(revision 431)
+++ trunk/grails-app/controllers/TaskDetailedController.groovy	(revision 433)
@@ -219,4 +219,11 @@
         if(params._action_Show)
             params.action='show'
+
+        // Used by navigation.
+        if(params.id == 'nav') {
+            params.id = session.currentTaskId ?: null
+            redirect(action: show, id: params.id)
+            return
+        }
 
         def showTab = [:]
@@ -245,4 +252,7 @@
         }
         else {
+            // Remember the current task id for use with navigation.
+            session.currentTaskId = params.id
+
             params.max = 10
             params.order = "desc"
@@ -477,4 +487,11 @@
             params.action='edit'
 
+        // Used by navigation.
+        if(params.id == 'nav') {
+            params.id = session.currentTaskId ?: null
+            redirect(action: edit, id: params.id)
+            return
+        }
+
         def taskInstance = Task.get( params.id )
 
@@ -484,4 +501,7 @@
         }
         else {
+            // Remember the current task id for use with navigation.
+            session.currentTaskId = params.id
+
             if(taskInstance.trash) {
                 flash.message = "You may not edit tasks that are in the trash."
@@ -524,5 +544,11 @@
         taskInstance.leadPerson = authService.currentUser
         taskInstance.properties = params
-        return ['taskInstance': taskInstance]
+
+        def scheduledTaskTypes = taskService.scheduledTaskTypes
+        def scheduledTaskPriorities = taskService.scheduledTaskPriorities
+        taskInstance.taskPriority = scheduledTaskPriorities.default
+        return ['taskInstance': taskInstance,
+                    'scheduledTaskTypes': scheduledTaskTypes,
+                    'scheduledTaskPriorities': scheduledTaskPriorities.list]
     }
 
@@ -540,5 +566,10 @@
             flash.errorMessage = g.message(code: result.error.code, args: result.error.args)
 
-        render(view:'create', model:[taskInstance:result.taskInstance])
+
+        def scheduledTaskTypes = taskService.scheduledTaskTypes
+        def scheduledTaskPriorities = taskService.scheduledTaskPriorities
+        render(view:'create', model:[taskInstance:result.taskInstance,
+                                                    'scheduledTaskTypes': scheduledTaskTypes,
+                                                    'scheduledTaskPriorities': scheduledTaskPriorities.list])
     }
 
@@ -591,4 +622,39 @@
 
     @Secured(['ROLE_AppAdmin', 'ROLE_Manager', 'ROLE_TaskManager', 'ROLE_TaskUser'])
+    def createUnscheduled = {
+        def taskInstance = new Task()
+
+        // Default leadPerson to current user, unless supplied in params.
+        taskInstance.leadPerson = authService.currentUser
+        taskInstance.properties = params
+
+        // Always for Unscheduled task.
+        taskInstance.taskType = TaskType.get(2) // Unscheduled Breakin.
+        def unscheduledTaskPriorities = taskService.unscheduledTaskPriorities
+        taskInstance.taskPriority = unscheduledTaskPriorities.default
+
+        return ['taskInstance': taskInstance, 'unscheduledTaskPriorities': unscheduledTaskPriorities.list]
+    }
+
+    @Secured(['ROLE_AppAdmin', 'ROLE_Manager', 'ROLE_TaskManager', 'ROLE_TaskUser'])
+    def saveUnscheduled = {
+        def result = taskService.saveUnscheduled(params)
+
+        if(!result.error) {
+            flash.message = "Task ${result.taskInstance.id} created."
+            redirect(action: 'show', id: result.taskInstance.id)
+            return
+        }
+
+        if(result.error.code == "task.modifications.failedToSave")
+            flash.errorMessage = g.message(code: result.error.code, args: result.error.args)
+
+        def unscheduledTaskPriorities = taskService.unscheduledTaskPriorities
+
+        render(view:'createUnscheduled',
+                    model: ['taskInstance': result.taskInstance, 'unscheduledTaskPriorities': unscheduledTaskPriorities.list])
+    }
+
+    @Secured(['ROLE_AppAdmin', 'ROLE_Manager', 'ROLE_TaskManager', 'ROLE_TaskUser'])
     def createImmediateCallout = {
         def taskInstance = new Task()
