<?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.
-->

<jx:template
  xmlns:jx="http://apache.org/cocoon/templates/jx/1.0"
  xmlns:i18n="http://apache.org/cocoon/i18n/2.1"
  xmlns="http://www.w3.org/1999/xhtml"
  name="">

  <form id="form-change_password">
    <input type="hidden" name="lenya.continuation" value="${continuation.id}"/>
    <input type="hidden" name="lenya.usecase" value="${request.getParameter('lenya.usecase')}"/>
    
    <jx:set var="currentUserId" value="${usecase.getParameter('private.session').getIdentity().getUser().getId()}"/>
    <jx:set var="userId" value="${usecase.getParameter('userId', currentUserId)}"/>
    
    <table class="lenya-table-noborder">
      <tr>
        <td colspan="2">
          <jx:import uri="fallback://lenya/modules/usecase/templates/messages.jx"/>
        </td>
      </tr>
      <tr>
        <td class="lenya-entry-caption"><i18n:text>Username</i18n:text></td>
        <td><jx:out value="${userId}"/></td>
      </tr>
      <jx:if test="${usecase.getView().getParameter('checkPassword').equals('true')}">
        <tr>
          <td class="lenya-entry-caption"><label for="oldPassword"><i18n:text>Old Password</i18n:text> *</label></td>
          <td><input type="password" name="oldPassword" class="lenya-form-element" value="${usecase.getParameter('oldPassword')}"/></td>
        </tr>
      </jx:if>
      <tr>
        <td class="lenya-entry-caption"><label for="newPassword"><i18n:text>New Password</i18n:text> *</label></td>
        <td><input type="password" name="newPassword" class="lenya-form-element" value="${usecase.getParameter('newPassword')}"/></td>
      </tr>
      <tr>
        <td class="lenya-entry-caption"><label for="confirmPassword"><i18n:text>Confirm Password</i18n:text> *</label></td>
        <td><input type="password" name="confirmPassword" class="lenya-form-element" value="${usecase.getParameter('confirmPassword')}"/></td>
      </tr>
      
      <tr>
        <td/>
        <td>
          <input i18n:attr="value" type="submit" name="submit" value="Save"/>
          <a href="?lenya.usecase=admin.user&amp;userId=${userId}">
            <input type="button" name="cancel" value="Cancel" i18n:attr="value"/>
          </a>
        </td>
      </tr>
    </table>
  </form>
</jx:template>