@RequestMapping(value = "/deleteReminder.ajax", method = RequestMethod.POST)
  protected void deleteReminder(HttpServletRequest request, HttpServletResponse response)
      throws Exception {

    String message = "";
    AuthRequest ar = null;
    try {
      ar = getLoggedInAuthRequest(request, response, "message.must.be.login");
      String containerId = ar.reqParam("containerId");
      NGContainer ngc = NGPageIndex.getContainerByKeyOrFail(containerId);
      ar.setPageAccessLevels(ngc);
      String rid = ar.reqParam("rid");

      ReminderMgr rMgr = ngc.getReminderMgr();

      ReminderRecord rRec = rMgr.findReminderByID(rid);

      if (rRec != null) {
        rMgr.removeReminder(rid);
        message = NGWebUtils.getJSONMessage(Constant.SUCCESS, "", "");
      } else {
        throw new NGException(
            "nugen.exception.no.attachment.found", new Object[] {rid, ngc.getFullName()});
      }
      ngc.saveContent(ar, "Modified attachments");
    } catch (Exception ex) {
      message = NGWebUtils.getExceptionMessageForAjaxRequest(ex, ar.getLocale());
      ar.logException("Caught by deleteReminder.ajax", ex);
    }
    NGWebUtils.sendResponse(ar, message);
  }
  @RequestMapping(value = "/unDeleteAttachment.ajax", method = RequestMethod.POST)
  protected void unDeleteAttachment(HttpServletRequest request, HttpServletResponse response)
      throws Exception {

    String message = "";
    AuthRequest ar = null;
    try {
      ar = getLoggedInAuthRequest(request, response, "message.must.be.login");
      String containerId = ar.reqParam("containerId");
      NGContainer ngc = NGPageIndex.getContainerByKeyOrFail(containerId);
      ar.setPageAccessLevels(ngc);
      String aid = ar.reqParam("aid");
      AttachmentRecord attachment = ngc.findAttachmentByID(aid);
      if (attachment == null) {
        throw new NGException(
            "nugen.exception.no.attachment.found", new Object[] {aid, ngc.getFullName()});
      }
      attachment.clearDeleted();
      message = NGWebUtils.getJSONMessage(Constant.SUCCESS, "", "");
      ngc.saveContent(ar, "Modified attachments");
    } catch (Exception ex) {
      message = NGWebUtils.getExceptionMessageForAjaxRequest(ex, ar.getLocale());
      ar.logException("Caught by getFileAccessName.ajax", ex);
    }
    NGWebUtils.sendResponse(ar, message);
  }
  @RequestMapping(value = "/{siteId}/{pageId}/remindAttachment.htm", method = RequestMethod.GET)
  protected ModelAndView remindAttachment(
      @PathVariable String siteId,
      @PathVariable String pageId,
      HttpServletRequest request,
      HttpServletResponse response)
      throws Exception {
    AuthRequest ar = AuthRequest.getOrCreate(request, response);
    try {
      NGPage ngp = registerRequiredProject(ar, siteId, pageId);
      ar.setPageAccessLevels(ngp);

      String rid = ar.reqParam("rid");
      ReminderMgr mgr = ngp.getReminderMgr();
      ReminderRecord reminderRecord = mgr.findReminderByIDOrFail(rid);
      if (AccessControl.canAccessReminder(ar, ngp, reminderRecord)) {
        request.setAttribute("subTabId", "nugen.projecthome.subtab.upload.document");
        return createNamedView(siteId, pageId, ar, "remind_attachment", "Project Documents");
      }

      if (!ar.isLoggedIn()) {
        request.setAttribute("property_msg_key", "nugen.project.remind.doc.login.msg");
      } else if (!ar.isMember()) {
        request.setAttribute("property_msg_key", "nugen.attachment.remind.doc.memberlogin");
      } else {
        // basically, the reminder should have been display, and we have no idea now why not
        throw new Exception(
            "Program Logic Error ... something is wrong with the canAccessReminder method");
      }
      return createNamedView(siteId, pageId, ar, "Warning", "Project Documents");

    } catch (Exception ex) {
      Exception extd =
          new NGException(
              "nugen.operation.fail.project.reminder.attachment.page",
              new Object[] {pageId, siteId},
              ex);
      return displayException(request, extd);
    }
  }