docs: public int doRecordChange(FieldInfo field, int iChangeType, boolean bDisplayOption)
      {
          switch (iChangeType)
          {
              case DBConstants.ADD_TYPE:
              case DBConstants.UPDATE_TYPE:
                  if (this.getOwner().getField(MessageLog.LAST_CHANGED) != null)  // Always
                      if (this.getOwner().getField(MessageLog.TIMEOUT_SECONDS).getValue() > 0)
                          if (this.getOwner().getField(MessageLog.TIMEOUT_TIME).getValue() == 0)  // Don't change timeout after it was set
                      {
                          if (MessageStatus.SENT.equalsIgnoreCase(((ReferenceField)this.getOwner().getField(MessageLog.MESSAGE_STATUS_ID)).getReference().getField(MessageStatus.CODE).toString()))
                          {
                              Calendar cal = ((DateTimeField)this.getOwner().getField(MessageLog.LAST_CHANGED)).getCalendar();
                              int iSeconds = (int)this.getOwner().getField(MessageLog.TIMEOUT_SECONDS).getValue();
                              cal.add(Calendar.SECOND, iSeconds);
                              ((DateTimeField)this.getOwner().getField(MessageLog.TIMEOUT_TIME)).setCalendar(cal, bDisplayOption, DBConstants.SCREEN_MOVE);
                          }
                          else
                          {   // Clear the timeout
                              ((DateTimeField)this.getOwner().getField(MessageLog.TIMEOUT_TIME)).setData(null, bDisplayOption, DBConstants.SCREEN_MOVE);                    
                          }
                      }
                  break;
          }
          return super.doRecordChange(field, iChangeType, bDisplayOption);
      }