Index: /trunk/grails-app/controllers/AssignedGroupDetailedController.groovy
===================================================================
--- /trunk/grails-app/controllers/AssignedGroupDetailedController.groovy	(revision 253)
+++ /trunk/grails-app/controllers/AssignedGroupDetailedController.groovy	(revision 254)
@@ -12,29 +12,4 @@
     // the delete, save and update actions only accept POST requests
     static allowedMethods = [delete:'POST', save:'POST', update:'POST']
-
-    def list = {
-            def result = assignedGroupService.list(params)
-            if(!result.error) {
-                return [ assignedGroupInstanceList: result.assignedGroupInstanceList,
-                                assignedGroupInstanceTotal: result.assignedGroupInstanceTotal ]
-            }
-
-            flash.message = g.message(code: result.error.code, args: result.error.args)
-            redirect( controller: "appCore", action: "start" )
-    }
-
-    def show = {
-        def result = assignedGroupService.show(params)
-
-        if(!result.error)
-            return [ assignedGroupInstance: result.assignedGroupInstance ]
-
-        flash.message = g.message(code: result.error.code, args: result.error.args)
-
-        if(params.task?.id)
-            redirect(controller:"taskDetailed", action:"show", id: params.task.id)
-
-        redirect(controller:"taskDetailed", action:"search")
-    }
 
     def delete = {
@@ -60,6 +35,9 @@
         def result = assignedGroupService.edit(params)
 
-        if(!result.error)
-            return [ assignedGroupInstance : result.assignedGroupInstance ]
+        if(!result.error) {
+            return [assignedGroupInstance: result.assignedGroupInstance,
+                            personGroup: result.personGroup,
+                            personsInGroup: result.personsInGroup]
+        }
 
         flash.message = g.message(code: result.error.code, args: result.error.args)
@@ -74,5 +52,5 @@
         if(!result.error) {
             flash.message = g.message(code: "default.update.success", args: ["AssignedGroup", params.id])
-            redirect(action:show, id: params.id)
+            redirect(controller:"taskDetailed", action:"show", id: result.assignedGroupInstance.task.id)
             return
         }
@@ -84,5 +62,13 @@
         }
 
-        render(view:'edit', model:[assignedGroupInstance: result.assignedGroupInstance.attach()])
+        if(result.error.code == "personGroup.not.found") {
+            flash.message = g.message(code: result.error.code, args: result.error.args)
+            redirect(action:"edit", id: params.id)
+            return
+        }
+
+        render(view:'edit', model:[assignedGroupInstance: result.assignedGroupInstance.attach(),
+                                                personGroup: result.personGroup.attach(),
+                                                personsInGroup: result.personsInGroup])
     }
 
@@ -90,6 +76,9 @@
         def result = assignedGroupService.create(params)
 
-        if(!result.error)
-            return [assignedGroupInstance: result.assignedGroupInstance]
+        if(!result.error) {
+            return [assignedGroupInstance: result.assignedGroupInstance,
+                            personGroup: result.personGroup,
+                            personsInGroup: result.personsInGroup]
+        }
 
         if(result.error.code == "assignedGroup.task.not.found") {
@@ -112,5 +101,28 @@
         }
 
-        render(view:'edit', model:[assignedGroupInstance: result.assignedGroupInstance])
+        if(result.error.code == "personGroup.not.found") {
+            flash.message = g.message(code: result.error.code, args: result.error.args)
+            redirect(action:"create", params:["task.id": params.task?.id])
+            return
+        }
+
+        render(view:'create', model:[assignedGroupInstance: result.assignedGroupInstance,
+                                                personGroup: result.personGroup.attach(),
+                                                personsInGroup: result.personsInGroup])
+    }
+
+    def personsInGroup = {
+        def result = assignedGroupService.personsInGroup(params)
+
+        if(!result.error) {
+            render ( template:"personsInGroup",
+                            model: [personGroup: result.personGroup, personsInGroup: result.personsInGroup] )
+            return
+        }
+
+        render {
+            div(id:"personsInGroup", g.message(code: result.error.code, args: result.error.args) )
+        }
+
     }
 
Index: /trunk/grails-app/i18n/messages.properties
===================================================================
--- /trunk/grails-app/i18n/messages.properties	(revision 253)
+++ /trunk/grails-app/i18n/messages.properties	(revision 254)
@@ -52,4 +52,5 @@
 
 taskRecurringSchedule.notFound=Could not complete operation, recurring schedule not found.
+personGroup.not.found=Person Group not found, it may have been deleted.
 
 task.assignedGroups=Assigned Groups
Index: /trunk/grails-app/services/AssignedGroupService.groovy
===================================================================
--- /trunk/grails-app/services/AssignedGroupService.groovy	(revision 253)
+++ /trunk/grails-app/services/AssignedGroupService.groovy	(revision 254)
@@ -4,38 +4,4 @@
 
     def personService
-
-    def list(params) {
-        def result = [:]
-        def fail = { Map m ->
-            result.error = [ code: m.code, args: ["AssignedGroup"] ]
-            return result
-        }
-
-        params.max = Math.min( params.max ? params.max.toInteger() : 10,  100)
-        result.assignedGroupInstanceList = AssignedGroup.list(params)
-        result.assignedGroupInstanceTotal = AssignedGroup.count()
-
-        if(!result.assignedGroupInstanceList || !result.assignedGroupInstanceTotal)
-            return fail(code:"default.list.failure")
-
-        // Success.
-        return result
-    }
-
-    def show(params) {
-        def result = [:]
-        def fail = { Map m ->
-            result.error = [ code: m.code, args: ["AssignedGroup", params.id] ]
-            return result
-        }
-
-        result.assignedGroupInstance = AssignedGroup.get(params.id)
-
-        if(!result.assignedGroupInstance)
-            return fail(code:"default.not.found")
-
-        // Success.
-        return result
-    }
 
     def delete(params) {
@@ -86,4 +52,7 @@
             return fail(code:"default.not.found")
 
+        result.personGroup = result.assignedGroupInstance.personGroup
+        result.personsInGroup = result.personGroup.persons
+
         // Success.
         return result
@@ -101,4 +70,12 @@
                 return result
             }
+
+            result.personGroup = PersonGroup.get(params.personGroup.id)
+
+            // Prevent a null property reference.
+            if(!result.personGroup)
+                return fail(code:"personGroup.not.found")
+
+            result.personsInGroup = result.personGroup.persons
 
             result.assignedGroupInstance = AssignedGroup.get(params.id)
@@ -144,4 +121,7 @@
         result.assignedGroupInstance.properties = params
 
+        result.personGroup = PersonGroup.list().sort { p1, p2 -> p1.name.compareToIgnoreCase(p2.name)}[0] // Get the first result.
+        result.personsInGroup = result.personGroup.persons
+
         // success
         return result
@@ -153,4 +133,5 @@
 
             def fail = { Map m ->
+                status.setRollbackOnly()
                 if(result.assignedGroupInstance && m.field)
                     result.assignedGroupInstance.errors.rejectValue(m.field, m.code)
@@ -159,10 +140,19 @@
             }
 
-            result.assignedGroupInstance = new AssignedGroup(params)
+            result.personGroup = PersonGroup.get(params.personGroup.id)
+
+            // Prevent a null property reference.
+            if(!result.personGroup)
+                return fail(code:"personGroup.not.found")
+
+            result.personsInGroup = result.personGroup.persons
+
+            result.assignedGroupInstance = new AssignedGroup()
+            result.assignedGroupInstance.properties = params
 
             if(result.assignedGroupInstance.hasErrors() || !result.assignedGroupInstance.save())
                 return fail(code:"default.create.failure")
 
-            // Record a taskModification for every one except "system".
+            // Record a taskModification for everyone except "system".
             if(personService.currentUser.id != 1) {
                 def taskModification = new TaskModification(person: personService.currentUser,
@@ -174,5 +164,5 @@
             }
 
-            // success
+            // Success.
             return result
 
@@ -180,3 +170,22 @@
     } // end save()
 
+    def personsInGroup(params) {
+        def result = [:]
+
+        def fail = { Map m ->
+            result.error = [ code: m.code, args: ["PersonGroup", params.personGroup?.id] ]
+            return result
+        }
+
+        result.personGroup = PersonGroup.get(params.personGroup?.id)
+
+        if(!result.personGroup)
+            return fail(code:"default.not.found")
+
+        result.personsInGroup = result.personGroup.persons
+
+        // Success.
+        return result
+    }
+
 } // end class
Index: /trunk/grails-app/views/assignedGroupDetailed/_personsInGroup.gsp
===================================================================
--- /trunk/grails-app/views/assignedGroupDetailed/_personsInGroup.gsp	(revision 254)
+++ /trunk/grails-app/views/assignedGroupDetailed/_personsInGroup.gsp	(revision 254)
@@ -0,0 +1,22 @@
+
+<table>
+    <tbody>
+        <tr class="prop">
+            <td valign="top" class="name">
+                <label for="persons">Persons in group (${personGroup.encodeAsHTML()}):</label>
+            </td>
+            <td valign="top" class="value">
+                <ul>
+                    <g:if test="${personsInGroup.size() > 0}">
+                        <g:each var="a" in="${personsInGroup}">
+                            <li>${a?.encodeAsHTML()}</li>
+                        </g:each>
+                    </g:if>
+                    <g:else>
+                        <li>None</li>
+                    </g:else>
+                </ul>
+            </td>
+        </tr>
+    </tbody>
+</table>
Index: /trunk/grails-app/views/assignedGroupDetailed/create.gsp
===================================================================
--- /trunk/grails-app/views/assignedGroupDetailed/create.gsp	(revision 253)
+++ /trunk/grails-app/views/assignedGroupDetailed/create.gsp	(revision 254)
@@ -6,4 +6,5 @@
         <meta name="layout" content="main" />
         <title>Create Assigned Group</title>
+        <g:javascript src="overlayPane.js" />
     </head>
     <body>
@@ -42,5 +43,10 @@
                                 </td>
                                 <td valign="top" class="value ${hasErrors(bean:assignedGroupInstance,field:'personGroup','errors')}">
-                                    <g:select optionKey="id" from="${PersonGroup.list()}" name="personGroup.id" value="${assignedGroupInstance?.personGroup?.id}" ></g:select>
+                                    <g:select optionKey="id"
+                                                        from="${PersonGroup.list().sort { p1, p2 -> p1.name.compareToIgnoreCase(p2.name) }}"
+                                                        name="personGroup.id"
+                                                        value="${assignedGroupInstance?.personGroup?.id}"
+                                                        onchange="${remoteFunction(action:'personsInGroup', update:'personsInGroup', params: '\'personGroup.id=\' + this.value' )}">
+                                    </g:select>
                                 </td>
                             </tr> 
@@ -66,8 +72,16 @@
                     </table>
                 </div>
+
                 <div class="buttons">
                     <span class="button"><input class="save" type="submit" value="Create" /></span>
                 </div>
             </g:form>
+
+            <br />
+
+            <div id="personsInGroup" class="dialog">
+                <g:render template="personsInGroup" />
+            </div>
+
         </div>
     </body>
Index: /trunk/grails-app/views/assignedGroupDetailed/edit.gsp
===================================================================
--- /trunk/grails-app/views/assignedGroupDetailed/edit.gsp	(revision 253)
+++ /trunk/grails-app/views/assignedGroupDetailed/edit.gsp	(revision 254)
@@ -44,5 +44,10 @@
                                 </td>
                                 <td valign="top" class="value ${hasErrors(bean:assignedGroupInstance,field:'personGroup','errors')}">
-                                    <g:select optionKey="id" from="${PersonGroup.list()}" name="personGroup.id" value="${assignedGroupInstance?.personGroup?.id}" ></g:select>
+                                    <g:select optionKey="id"
+                                                        from="${PersonGroup.list().sort { p1, p2 -> p1.name.compareToIgnoreCase(p2.name) }}"
+                                                        name="personGroup.id"
+                                                        value="${assignedGroupInstance?.personGroup?.id}"
+                                                        onchange="${remoteFunction(action:'personsInGroup', update:'personsInGroup', params: '\'personGroup.id=\' + this.value' )}">
+                                    </g:select>
                                 </td>
                             </tr>
@@ -72,4 +77,11 @@
                 </div>
             </g:form>
+
+            <br />
+
+            <div id="personsInGroup" class="dialog">
+                <g:render template="personsInGroup" />
+            </div>
+
         </div>
     </body>
Index: unk/grails-app/views/assignedGroupDetailed/list.gsp
===================================================================
--- /trunk/grails-app/views/assignedGroupDetailed/list.gsp	(revision 253)
+++ 	(revision )
@@ -1,58 +1,0 @@
-
-
-<html>
-    <head>
-        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
-        <meta name="layout" content="main" />
-        <title>AssignedGroup List</title>
-    </head>
-    <body>
-        <div class="nav">
-            <h1>Assigned Group List</h1>
-        </div>
-        <div class="body">
-            <g:if test="${flash.message}">
-            <div class="message">${flash.message}</div>
-            </g:if>
-            <div class="list">
-                <table>
-                    <thead>
-                        <tr>
-                        
-                   	        <g:sortableColumn property="id" title="Id" />
-                        
-                   	        <th>Task</th>
-                   	    
-                   	        <th>Group</th>
-                   	    
-                   	        <g:sortableColumn property="estimatedHour" title="Estimated Hour" />
-                        
-                   	        <g:sortableColumn property="estimatedMinute" title="Estimated Minute" />
-                        
-                        </tr>
-                    </thead>
-                    <tbody>
-                    <g:each in="${assignedGroupInstanceList}" status="i" var="assignedGroupInstance">
-                        <tr class="${(i % 2) == 0 ? 'odd' : 'even'}">
-                        
-                            <td><g:link action="show" id="${assignedGroupInstance.id}">${fieldValue(bean:assignedGroupInstance, field:'id')}</g:link></td>
-                        
-                            <td>${fieldValue(bean:assignedGroupInstance, field:'task')}</td>
-                        
-                            <td>${fieldValue(bean:assignedGroupInstance, field:'personGroup')}</td>
-                        
-                            <td>${fieldValue(bean:assignedGroupInstance, field:'estimatedHour')}</td>
-                        
-                            <td>${fieldValue(bean:assignedGroupInstance, field:'estimatedMinute')}</td>
-                        
-                        </tr>
-                    </g:each>
-                    </tbody>
-                </table>
-            </div>
-            <div class="paginateButtons">
-                <g:paginate total="${assignedGroupInstanceTotal}" />
-            </div>
-        </div>
-    </body>
-</html>
Index: unk/grails-app/views/assignedGroupDetailed/show.gsp
===================================================================
--- /trunk/grails-app/views/assignedGroupDetailed/show.gsp	(revision 253)
+++ 	(revision )
@@ -1,61 +1,0 @@
-
-
-<html>
-    <head>
-        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
-        <meta name="layout" content="main" />
-        <title>Show AssignedGroup</title>
-    </head>
-    <body>
-        <div class="nav">
-            <h1>Show Assigned Group</h1>
-        </div>
-        <div class="body">
-            <g:if test="${flash.message}">
-            <div class="message">${flash.message}</div>
-            </g:if>
-            <div class="dialog">
-                <table>
-                    <tbody>
-
-                    
-                        <tr class="prop">
-                            <td valign="top" class="name">Id:</td>
-                            
-                            <td valign="top" class="value">${fieldValue(bean:assignedGroupInstance, field:'id')}</td>
-                            
-                        </tr>
-                    
-                        <tr class="prop">
-                            <td valign="top" class="name">Task:</td>
-                            
-                            <td valign="top" class="value"><g:link controller="taskDetailed" action="show" id="${assignedGroupInstance?.task?.id}">${assignedGroupInstance?.task?.encodeAsHTML()}</g:link></td>
-                            
-                        </tr>
-                    
-                        <tr class="prop">
-                            <td valign="top" class="name">Group:</td>
-                            
-                            <td valign="top" class="value"><g:link controller="personGroup" action="show" id="${assignedGroupInstance?.personGroup?.id}">${assignedGroupInstance?.personGroup?.encodeAsHTML()}</g:link></td>
-                            
-                        </tr>
-                    
-                        <tr class="prop">
-                            <td valign="top" class="name">Estimated Duration:</td>
-                            <td valign="top" class="value">${assignedGroupInstance.estimatedHour}h : ${assignedGroupInstance.estimatedMinute}min</td>
-                        </tr>
-
-                    </tbody>
-                </table>
-            </div>
-            <div class="buttons">
-                <g:form>
-                    <g:hiddenField name="id" value="${assignedGroupInstance?.id}" />
-                    <g:hiddenField name="task.id" value="${assignedGroupInstance?.task?.id}" />
-                    <span class="button"><g:actionSubmit class="edit" value="Edit" /></span>
-                    <span class="button"><g:actionSubmit class="delete" onclick="return confirm('Are you sure?');" value="Delete" /></span>
-                </g:form>
-            </div>
-        </div>
-    </body>
-</html>
