<?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 Group Profile</i18n:text></h1>
    
    <form id="form-edit_group_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>Group ID</i18n:text>:</td>
          <td><jx:out value="${usecase.getParameter('groupId')}"/></td>
        </tr>
        <tr>
          <td class="lenya-entry-caption"><label for="name"><i18n:text>Name</i18n:text>:</label></td>
          <td><input type="text" name="name" class="lenya-form-element" value="${usecase.getParameter('name')}"/></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/>
          <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>