Index: trunk/grails-app/controllers/TaskRecurringScheduleDetailedController.groovy
===================================================================
--- trunk/grails-app/controllers/TaskRecurringScheduleDetailedController.groovy	(revision 212)
+++ trunk/grails-app/controllers/TaskRecurringScheduleDetailedController.groovy	(revision 213)
@@ -77,12 +77,11 @@
     def create = {
         if(!params.task?.id || !Task.exists(params.task?.id)) {
-            flash.message = "Please select a task, then Create a Recurring Schedule for it."
+            flash.message = "Please select a task, then create a recurring schedule for it."
             redirect(controller:"taskDetailed", action:"search")
             return
         }
-        def taskRecurringScheduleInstance = new TaskRecurringSchedule()
-        taskRecurringScheduleInstance.properties = params
+        def taskRecurringScheduleInstance = new TaskRecurringSchedule(params)
         return [taskRecurringScheduleInstance: taskRecurringScheduleInstance]
-    } // end create()
+    }
 
     def save = {
@@ -96,5 +95,5 @@
             render(view:'create',model:[taskRecurringScheduleInstance: result.taskRecurringScheduleInstance])
         }
-    } // end save()
+    }
 
 }
Index: trunk/grails-app/i18n/messages.properties
===================================================================
--- trunk/grails-app/i18n/messages.properties	(revision 212)
+++ trunk/grails-app/i18n/messages.properties	(revision 213)
@@ -47,7 +47,18 @@
 task.leadPerson.help=The primay contact person.
 
-taskRecurring.nextTargetStartDate.NotInTheFuture=Please select a start date that is not in the past, or use original date.
-taskRecurring.nextTargetStartDate=Next Target Start Date
-taskRecurring.nextTargetStartDate.help=The target start date for the next auto generated subTask.
+taskRecurringSchedule.nextTargetStartDate.mayNotBePast=Please select a start date that is not in the past.
+taskRecurringSchedule.nextTargetStartDate=Next Target Start Date
+taskRecurringSchedule.nextTargetStartDate.help=The target start date for the next auto generated sub task.
+taskRecurringSchedule.recurEvery=Recur Every
+taskRecurringSchedule.recurEvery.help=How often this task should recur. Determines the period between sub task target start dates.
+taskRecurringSchedule.taskDuration=Task Duration
+taskRecurringSchedule.taskDuration.help=How long to allow for the task. Determines the target completion date of the sub tasks.
+taskRecurringSchedule.generateAhead=Generate Ahead
+taskRecurringSchedule.generateAhead.help=How far ahead of the next target start date to generate sub tasks. \
+This allows work packs to be built and work load to be seen and planned. \
+Only generate ahead as far as short term planning is done, since all generated sub task values will be set and therefore \
+time consuming to change.
+taskRecurringSchedule.enabled=Enabled
+taskRecurringSchedule.enabled.help=On to enable automatic sub task generation. Off to stop automatic sub task generation.
 
 task.primaryAsset=Primary Asset
@@ -78,5 +89,5 @@
 default.paginate.prev=Previous
 default.paginate.next=Next
-default.optimistic.locking.failure=Another user has updated this item while you were editing.
+default.optimistic.locking.failure=Another user has updated this item while you were editing, please check the updated values.
 
 # Rich UI plugin - Calendar
Index: trunk/grails-app/services/TaskRecurringScheduleService.groovy
===================================================================
--- trunk/grails-app/services/TaskRecurringScheduleService.groovy	(revision 212)
+++ trunk/grails-app/services/TaskRecurringScheduleService.groovy	(revision 213)
@@ -74,5 +74,5 @@
 
             if(result.taskRecurringScheduleInstance.nextTargetStartDate < dateUtilService.getToday())
-                return fail("nextTargetStartDate", "taskRecurring.nextTargetStartDate.NotInTheFuture")
+                return fail("nextTargetStartDate", "taskRecurringSchedule.nextTargetStartDate.mayNotBePast")
 
             taskInstance.taskRecurringSchedule = result.taskRecurringScheduleInstance
@@ -115,16 +115,8 @@
             }
 
-            result.taskRecurringScheduleInstance.validate()
+            result.taskRecurringScheduleInstance.properties = params
 
-            Date originalDate = result.taskRecurringScheduleInstance.nextTargetStartDate
-            result.taskRecurringScheduleInstance.properties = params
-            Date newDate = result.taskRecurringScheduleInstance.nextTargetStartDate
-
-            // If user changes nextTargetStartDate then ensure it is in the future, otherwise it's ok to keep the original date.
-            if(originalDate.getTime() != newDate.getTime())
-            {
-                if(newDate < dateUtilService.getToday())
-                    return fail("nextTargetStartDate", "taskRecurring.nextTargetStartDate.NotInTheFuture")
-            }
+            if(result.taskRecurringScheduleInstance.nextTargetStartDate < dateUtilService.getToday())
+                return fail("nextTargetStartDate", "taskRecurringSchedule.nextTargetStartDate.mayNotBePast")
 
             result.taskRecurringScheduleInstance.setNextGenerationDate()
Index: trunk/grails-app/views/taskDetailed/edit.gsp
===================================================================
--- trunk/grails-app/views/taskDetailed/edit.gsp	(revision 212)
+++ trunk/grails-app/views/taskDetailed/edit.gsp	(revision 213)
@@ -169,5 +169,5 @@
                 <div class="buttons">
                     <span class="button"><g:actionSubmit class="save" value="Update" /></span>
-                    <span class="button"><g:actionSubmit class="cancel" value="Cancel" action="show"/></span>
+                    <span class="button"><g:actionSubmit class="cancel" value="Cancel" action="Show"/></span>
                     <span class="button"><g:actionSubmit class="trash" onclick="return confirm('Are you sure?');" value="Trash" /></span>
                 </div>
Index: trunk/grails-app/views/taskDetailed/show.gsp
===================================================================
--- trunk/grails-app/views/taskDetailed/show.gsp	(revision 212)
+++ trunk/grails-app/views/taskDetailed/show.gsp	(revision 213)
@@ -648,5 +648,5 @@
                                     </g:else>
                                     <span class="button"><g:actionSubmit action="listSubTasks" class="table" value="List" /></span>
-                                    <span class="button"><g:actionSubmit action="createSubTask" class="add" value="Add" /></span>
+                                    <span class="button"><g:actionSubmit action="createSubTask" class="add" value="Create" /></span>
                                 </g:form>
                             </div>
@@ -662,5 +662,5 @@
                                 <g:form>
                                     <g:hiddenField name="id" value="${taskInstance?.id}" />
-                                    <span class="button"><g:actionSubmit action="createSubTask" class="add" value="Add" /></span>
+                                    <span class="button"><g:actionSubmit action="createSubTask" class="add" value="Create" /></span>
                                 </g:form>
                             </div>
Index: trunk/grails-app/views/taskRecurringScheduleDetailed/create.gsp
===================================================================
--- trunk/grails-app/views/taskRecurringScheduleDetailed/create.gsp	(revision 212)
+++ trunk/grails-app/views/taskRecurringScheduleDetailed/create.gsp	(revision 213)
@@ -42,4 +42,5 @@
                                 <td valign="top" class="value ${hasErrors(bean:taskRecurringScheduleInstance,field:'nextTargetStartDate','errors')}">
                                     <richui:dateChooser name="nextTargetStartDate" format="dd-MM-yyyy" value="${taskRecurringScheduleInstance?.nextTargetStartDate}" />
+                                    <g:helpBalloon class="helpballoon" code="taskRecurringSchedule.nextTargetStartDate" />
                                 </td>
                             </tr>   
@@ -53,4 +54,5 @@
                                         id="recurEvery" name="recurEvery" value="${fieldValue(bean:taskRecurringScheduleInstance,field:'recurEvery')}" />
                                     <g:select optionKey="id" from="${Period.list()}" name="recurPeriod.id" value="${taskRecurringScheduleInstance?.recurPeriod?.id}" ></g:select>
+                                    <g:helpBalloon class="helpballoon" code="taskRecurringSchedule.recurEvery" />
                                 </td>
                             </tr>   
@@ -58,5 +60,5 @@
                             <tr class="prop">
                                 <td valign="top" class="name">
-                                    <label for="recurEvery">Task Duration:</label>
+                                    <label for="taskDuration">Task Duration:</label>
                                 </td>
                                 <td valign="top" class="value" >
@@ -64,4 +66,5 @@
                                         id="taskDuration" name="taskDuration" value="${fieldValue(bean:taskRecurringScheduleInstance,field:'taskDuration')}" />
                                     <g:select optionKey="id" from="${Period.list()}" name="taskDurationPeriod.id" value="${taskRecurringScheduleInstance?.taskDurationPeriod?.id}" ></g:select>
+                                    <g:helpBalloon class="helpballoon" code="taskRecurringSchedule.taskDuration" />
                                 </td>
                             </tr>   
@@ -69,5 +72,5 @@
                             <tr class="prop">
                                 <td valign="top" class="name">
-                                    <label for="recurEvery">Generate Ahead:</label>
+                                    <label for="generateAhead">Generate Ahead:</label>
                                 </td>
                                 <td valign="top" class="value" >
@@ -75,4 +78,5 @@
                                         id="generateAhead" name="generateAhead" value="${fieldValue(bean:taskRecurringScheduleInstance,field:'generateAhead')}" />
                                         ${Period.get(1).encodeAsHTML()}
+                                        <g:helpBalloon class="helpballoon" code="taskRecurringSchedule.generateAhead" />
                                 </td>
                             </tr>
@@ -84,4 +88,5 @@
                                 <td valign="top" class="value ${hasErrors(bean:taskRecurringScheduleInstance,field:'enabled','errors')}">
                                     <g:checkBox name="enabled" value="${taskRecurringScheduleInstance?.enabled}" ></g:checkBox>
+                                        <g:helpBalloon class="helpballoon" code="taskRecurringSchedule.enabled" />
                                 </td>
                             </tr>
Index: trunk/grails-app/views/taskRecurringScheduleDetailed/edit.gsp
===================================================================
--- trunk/grails-app/views/taskRecurringScheduleDetailed/edit.gsp	(revision 212)
+++ trunk/grails-app/views/taskRecurringScheduleDetailed/edit.gsp	(revision 213)
@@ -43,4 +43,5 @@
                                 <td valign="top" class="value ${hasErrors(bean:taskRecurringScheduleInstance,field:'nextTargetStartDate','errors')}">
                                     <richui:dateChooser name="nextTargetStartDate" format="dd-MM-yyyy" value="${taskRecurringScheduleInstance?.nextTargetStartDate}" />
+                                    <g:helpBalloon class="helpballoon" code="taskRecurringSchedule.nextTargetStartDate" />
                                 </td>
                             </tr>   
@@ -54,4 +55,5 @@
                                         id="recurEvery" name="recurEvery" value="${fieldValue(bean:taskRecurringScheduleInstance,field:'recurEvery')}" />
                                     <g:select optionKey="id" from="${Period.list()}" name="recurPeriod.id" value="${taskRecurringScheduleInstance?.recurPeriod?.id}" ></g:select>
+                                    <g:helpBalloon class="helpballoon" code="taskRecurringSchedule.recurEvery" />
                                 </td>
                             </tr>   
@@ -59,5 +61,5 @@
                             <tr class="prop">
                                 <td valign="top" class="name">
-                                    <label for="recurEvery">Task Duration:</label>
+                                    <label for="taskDuration">Task Duration:</label>
                                 </td>
                                 <td valign="top" class="value" >
@@ -65,4 +67,5 @@
                                         id="taskDuration" name="taskDuration" value="${fieldValue(bean:taskRecurringScheduleInstance,field:'taskDuration')}" />
                                     <g:select optionKey="id" from="${Period.list()}" name="taskDurationPeriod.id" value="${taskRecurringScheduleInstance?.taskDurationPeriod?.id}" ></g:select>
+                                    <g:helpBalloon class="helpballoon" code="taskRecurringSchedule.taskDuration" />
                                 </td>
                             </tr>       
@@ -70,5 +73,5 @@
                             <tr class="prop">
                                 <td valign="top" class="name">
-                                    <label for="recurEvery">Generate Ahead:</label>
+                                    <label for="generateAhead">Generate Ahead:</label>
                                 </td>
                                 <td valign="top" class="value" >
@@ -76,4 +79,5 @@
                                         id="generateAhead" name="generateAhead" value="${fieldValue(bean:taskRecurringScheduleInstance,field:'generateAhead')}" />
                                         ${Period.get(1).encodeAsHTML()}
+                                        <g:helpBalloon class="helpballoon" code="taskRecurringSchedule.generateAhead" />
                                 </td>
                             </tr>
@@ -85,4 +89,5 @@
                                 <td valign="top" class="value ${hasErrors(bean:taskRecurringScheduleInstance,field:'enabled','errors')}">
                                     <g:checkBox name="enabled" value="${taskRecurringScheduleInstance?.enabled}" ></g:checkBox>
+                                        <g:helpBalloon class="helpballoon" code="taskRecurringSchedule.enabled" />
                                 </td>
                             </tr>
