anchor.diff:      }
   }
   
  -function registerCellInputHandlers(input) {
  -    Event.observe(input, "click", function(e) {
  -        return ajaxform(input, null, null, null, null)
  -    })
  +// extracts row from an ID like grid[row].property
  +function extractRow(gridElementId) {
  +    return gridElementId.substring(gridElementId.indexOf("[") + 1, gridElementId.indexOf("]"))
   }
   
   // extracts row and column from an ID like grid[row].eventIds[col]
   function extractRowAndColumn(gridElementId) {
  -    var row = gridElementId.substring(gridElementId.indexOf("[") + 1, gridElementId.indexOf("]"));
  +    var row = extractRow(gridElementId);
       var eventIdsPortion = gridElementId.substring(gridElementId.indexOf("]") + 1);
       var col = eventIdsPortion.substring(eventIdsPortion.indexOf("[") + 1, eventIdsPortion.indexOf("]"));
   
       return [row, col];
   }
   
  -function getInfoFromConditionalCheckbox(formdata, conditionalCheckbox, index) {
  -    var checkboxName = 'grid[' + index + '].conditionalCheckbox1';
  -    var isChecked = $(checkboxName).checked;
  -    var details = 'grid[' + index + '].conditionalDetails';
  -    if (!isChecked) {
  -        $(details).value = "";
  -        $(details).disabled = true;
  -    } else {
  -        $(details).disabled = false;
  -    }
  -
  -    return formdata
  -}
  -
  -function getInfoFromEventCheckbox(formdata, checkbox, row, col) {
  -    var data = { }
  -    addInfoFromEventCheckbox(data, checkbox, row, col)
  -    return formdata + '&' + Object.toQueryString(data) + '&';
  -}
  -
  -function addInfoFromEventCheckbox(data, checkbox, row, col) {
  -    var details = 'grid[' + row + '].details';
  -    data.details = $(details).value;
  -    data.columnNumber = col;
  -}
  -
  -function getInfoFromEventDetails(formdata, details, index) {
  -    var data = { }
  -    addInfoFromEventDetails(data, details)
  -    return formdata + '&' + Object.toQueryString(data) + '&';
  -}
  -
  -function addInfoFromEventDetails(data, details) {
  -    data.details = $(details).value;
  -    data.columnNumber = -1;
  -}
  -
  -function getInfoFromEventTextbox(formdata, isAdding, row, col) {
  -    var data = { }
  -    addInfoFromEventTextbox(data, isAdding, row, col)
  -    return formdata + '&' + Object.toQueryString(data) + '&';
  -}
  -
  -function addInfoFromEventTextbox(data, isAdding, row, col) {
  -    var details = 'grid[' + row + '].details';
  -    data.details = $(details).value;
  -    data.columnNumber = col;
  +function createBasicPostBody(row) {
  +    var data = { id: '${period.id}' }
  +    if (row) addParametersForRow(data, row)
  +    return data
  +}
  +
  +function addParametersForRow(data, row) {
  +    data.rowNumber = row
  +    data.activity = $('grid[' + row + '].activity').value;
  +    data.details = $('grid[' + row + '].details').value;
  +    data.conditionalDetails = $('grid[' + row + '].conditionalDetails').value;
  +
  +    for (var c = 0; c < ${period.duration.days}; c++) {
  +        var val = $('grid[' + row + '].eventIds[' + c + ']').getAttribute('value')
  +        if (val && val != -1) {
  +            data['eventIds[' + c + ']'] = val;
  +        }
  +    }
   }
   
   function createAddControl(text, objectType, objectId) {
  
positive.code:         name: name,
          value: 'true'
      });
      registerCellInputHandlers(input)
      cells.push(Builder.node('td', {}, [input]))
  
      // conditionalDetails
  
negative.code:         if (parentRC[0] == childRC[0]) {
              //need to set up ajax call for move
              if (wholeElement.firstChild == null) {
                  executePlannedActivityMove(parentRC[0], parentRC[1], childRC[1])
                  setUpMovingMarker(draggable, dropZone)
              }
          }
  