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

<page:page
  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"    
  >
  
  <page:body>
    <jx:import uri="fallback://lenya/modules/usecase/templates/tabs.jx"/>
    <div id="contentblock1" class="lenya-tab">
    <h1><i18n:text>Edit User Profile</i18n:text></h1>
    
    <form id="form-edit_user_profile">
      <input type="hidden" name="lenya.continuation" value="${continuation.id}"/>
      <input type="hidden" name="lenya.usecase" value="${request.getParameter('lenya.usecase')}"/>

      <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>User ID</i18n:text>:</td>
          <td><jx:out value="${usecase.getParameter('userId')}"/></td>
        </tr>
        <tr>
          <td class="lenya-entry-caption"><label for="name"><i18n:text>Name</i18n:text></label>:</td>
          <td><input type="text" name="fullName" class="lenya-form-element" value="${usecase.getParameter('fullName')}"/></td>
        </tr>
        <tr>
          <td valign="top" class="lenya-entry-caption"><label for="description"><i18n:text>Description</i18n:text>:</label></td>
          <td>
            <!-- N.B.: do not put spaces or carriage returns inside the
                 textarea element - these would be rendered -->
            <textarea name="description" class="lenya-form-element"><jx:out value="${usecase.getParameter('description')}"/></textarea>
          </td>
        </tr>

        <tr>
          <td class="lenya-entry-caption"><label for="email"><i18n:text>E-Mail</i18n:text> *</label>:</td>
          <td><input type="text" name="email" class="lenya-form-element" value="${usecase.getParameter('email')}"/></td>
        </tr>
        
        <tr>
          <td class="lenya-entry-caption"><label for="defaultMenuLocale"><i18n:text>Default Menu Locale</i18n:text>:</label></td>
          <td><input type="text" name="defaultMenuLocale" class="lenya-form-element" value="${usecase.getParameter('defaultMenuLocale')}"/></td>
        </tr>
        
        <tr>
          <td class="lenya-entry-caption"><label for="defaultDocumentLocale"><i18n:text>Default Document Locale</i18n:text>:</label></td>
          <td><input type="text" name="defaultDocumentLocale" class="lenya-form-element" value="${usecase.getParameter('defaultDocumentLocale')}"/></td>
        </tr>
        
        <tr>
          <td/>
          <td>
            <input i18n:attr="value" type="submit" name="submit" value="Save"/>
            <input i18n:attr="value" type="submit" name="cancel" value="Cancel"/>
          </td>
        </tr>
      </table>
    </form>
    </div>
  </page:body>
</page:page>
