<?xml version="1.0" encoding="UTF-8"?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at
  
  http://www.apache.org/licenses/LICENSE-2.0
  
  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<!-- $Id: groups.jx 473861 2006-11-12 03:51:14Z gregor $ -->

<jx:template
  xmlns:jx="http://apache.org/cocoon/templates/jx/1.0"
  xmlns:page="http://apache.org/cocoon/lenya/cms-page/1.0"
  xmlns="http://www.w3.org/1999/xhtml"
  xmlns:i18n="http://apache.org/cocoon/i18n/2.1"    
  >
  
  <p>
    <i18n:translate>
      <i18n:text>notification.nofMessages</i18n:text>
      <i18n:param>${usecase.getParameter('nofMessages')}</i18n:param>
      <i18n:param>${usecase.getParameter('nofUnreadMessages')}</i18n:param>
    </i18n:translate>
  </p>
  <div class="lenyaListContainer" style="height: 200px;">
    <table>
      <thead>
        <tr>
          <th style="text-align: left; padding-right: 20px;"><i18n:text>Subject</i18n:text></th>
          <th style="text-align: left; padding-right: 20px;"><i18n:text>Sender</i18n:text></th>
          <th style="text-align: left; padding-right: 20px;"><i18n:text>Date</i18n:text></th>
          <th>&#160;</th>
        </tr>
      </thead>
      <tbody>
        <jx:forEach var="message" items="${inbox.getMessages()}">
          
          <jx:set var="class" value="normal"/>
          <jx:choose>
            <jx:when test="${messageId.equals(message.getId())}">
              <jx:set var="class" value="lenyaNotificationMessageHighlight"/>
            </jx:when>
            <jx:when test="${message.isMarkedAsRead()}">
              <jx:set var="class" value="lenyaNotificationMessageRead"/>
            </jx:when>
          </jx:choose>
          
          <tr class="${class}">
            <td class="lenyaNotificationSubject">
              <a href="?lenya.usecase=notification.inbox&amp;messageId=${message.getId()}">
                <i18n:translate>
                  <i18n:text><jx:out value="${message.getMessage().getSubject()}"/></i18n:text>
                  <jx:forEach var="param" items="${message.getMessage().getSubjectParameters()}">
                    <i18n:param><jx:out value="${param}"/></i18n:param>
                  </jx:forEach>
                </i18n:translate>
              </a>
            </td>
            <td>
              <a href="?lenya.usecase=admin.user&amp;userId=${message.getMessage().getSender().getId()}"><jx:out value="${message.getMessage().getSender().getId()}"/></a>
            </td>
            <td class="lenyaNotificationDate">
              <jx:formatDate pattern="yyyy-MM-dd HH:mm:ss" value="${message.getMessage().getTime()}"/>
            </td>
            <td style="text-align: center;">
              <a href="?lenya.usecase=notification.deleteMessage&amp;messageId=${message.getId()}"><img src="/modules/gui/icons/sweetie/base/16-square-red-delete.png" alt="Delete"/></a>
            </td>
          </tr>
        </jx:forEach>
      </tbody>
    </table>
  </div>
  
</jx:template>
