public void setPurchaseDate(String purchaseDate)
   {
      if (purchaseDate == null || purchaseDate.length() != 8 || !purchaseDate.matches("\\d{8}"))
         throw new IllegalArgumentException("The purchase date field in the " + frameType.getId() + " frame contains an invalid value, " + purchaseDate + ".  It must have the format YYYYMMDD.");

      // check month
      try
      {
         int month = Integer.valueOf(purchaseDate.substring(5, 6));
         if (month < 1 || month > 12)
            throw new IllegalArgumentException("The purchase date field in the " + frameType.getId() + " frame contains an invalid value, " + purchaseDate + ".  It must have the format YYYYMMDD.");
      }
      catch (NumberFormatException ex)
      {
         throw new IllegalArgumentException("The purchase date field in the " + frameType.getId() + " frame contains an invalid value, " + purchaseDate + ".  It must have the format YYYYMMDD.");
      }

      // check day
      try
      {
         int day = Integer.valueOf(purchaseDate.substring(7, 8));
         if (day < 1 || day > 31)
            throw new IllegalArgumentException("The purchase date field in the " + frameType.getId() + " frame contains an invalid value, " + purchaseDate + ".  It must have the format YYYYMMDD.");
      }
      catch (NumberFormatException ex)
      {
         throw new IllegalArgumentException("The purchase date field in the " + frameType.getId() + " frame contains an invalid value, " + purchaseDate + ".  It must have the format YYYYMMDD.");
      }
      this.purchaseDate = purchaseDate;
      this.dirty        = true;
   }