anchor.diff:                              </td>
                               <td>
                                   <form:input path="grid[${gridStatus.index}].conditionalDetails"
  -                                            onchange="return ajaxform(null, null, null, null, this);"
                                               disabled="${empty gridRow.conditionalDetails}"
                                           />
                               </td>
  
positive.code:         id: conditionDetailsName,
          name: conditionDetailsName,
          type: 'text',
          disabled: 'true',
          onChange:"return ajaxform(null, null, null, null, this);"});
      cells.push(Builder.node('td', {}, [conditionDetailsInput]))
  
      var rowId = 'activity' + activity.id;
  
negative.code:     return '<c:url value="/pages/cal/managePeriod/update"/>'
  }
  
  function executePlannedActivityAdd(targetId) {
      var rc = extractRowAndColumn(targetId)
      var href = '<c:url value="/pages/cal/managePeriod/addTo"/>'
      var data = createBasicPostBody(rc[0])
      data.columnNumber = rc[1]
  
      new Ajax.Request(href, {
          postBody: Object.toQueryString(data)
      });
  }
  
  function executePlannedActivityRemove(targetId) {
      var rc = extractRowAndColumn(targetId)
      var href = '<c:url value="/pages/cal/managePeriod/remove"/>'
      var data = createBasicPostBody(rc[0])
      data.columnNumber = rc[1]
  
      new Ajax.Request(href, {
          postBody: Object.toQueryString(data)
      });
  }
  
  function executePlannedActivityMove(row, fromCol, toCol) {
      var href = '<c:url value="/pages/cal/managePeriod/move"/>';
      // Set up data variable
      var data = createBasicPostBody(row)
      var eventIds = 'grid[' + row + '].eventIds';
  
      var fromElementId = eventIds + '[' + fromCol + ']';
      if ($(fromElementId).getAttribute('value') != null) {
          data['eventIds[' + fromCol + ']'] = $(fromElementId).getAttribute('value');
      }
  
      data.columnNumber = toCol;
      data.moveFrom = fromCol;
      data.moveTo = toCol;
  
      new Ajax.Request(href, {
          postBody: Object.toQueryString(data)
      });
  }
  
  function executeUpdateDetails(rowElement) {
      var row = extractRow(rowElement.id)
      var href = '<c:url value="/pages/cal/managePeriod/update"/>'
      var data = createBasicPostBody(row)
  
      new Ajax.Request(href, {
          postBody: Object.toQueryString(data)
      });
  }
  
  function registerRowEventHandlers(rowElt) {
      rowElt.select('input[type=checkbox]').each(function(condCheckbox) {
          condCheckbox.observe("click", function() {
              var row = extractRow(condCheckbox.id)
              var conditionElt = $('grid[' + row + '].conditionalDetails')
              if (condCheckbox.checked) {
                  conditionElt.disabled = false;
              } else {
                  conditionElt.value = "";
                  conditionElt.disabled = true;
              }
              executeUpdateDetails(condCheckbox)
          })
      })
  
      rowElt.select('input[type=text]').each(function(input) {
          input.observe('change', function(evt) {
              executeUpdateDetails(input)
          })
      })
  }
  
  function registerHandlers() {
      $$('.input-row').each(registerRowEventHandlers)
      Event.observe('add-activity-button', 'click', addActivityRow)
      Event.observe('add-activity-button', 'click', resetActivitiesAutocompleter)
      Event.observe('return-to-template', 'click', function() {
  