<!--
  ~ 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.
  ~
  -->
<div>
    <form data-dojo-attach-point="form" data-dojo-type="dijit/form/Form" id="${id}_form">
        <div>
            <div class="clear">
                <label class="formLabel-labelCell tableContainer-labelCell" for="${id}_name">Name*: </label>
                <input id="${id}_name" type="text"
                       class="formLabel-controlCell tableContainer-valueCell"
                       data-dojo-attach-point="name"
                       data-dojo-type="dijit/form/ValidationTextBox"
                       data-dojo-props="   name: 'name',
                                        required: true,
                                        intermediateChanges: true,
                                        placeHolder: 'Name',
                                        title: 'Enter name'">
                </input>
            </div>
            <div class="clear">
                <label class="formLabel-labelCell tableContainer-labelCell" for="${id}_description">Description: </label>
                <div class="formLabel-controlCell tableContainer-valueCell fillRemaining">
                <textarea id="${id}_description"
                          data-dojo-attach-point="description"
                          data-dojo-type="dijit/form/SimpleTextarea"
                          data-dojo-props="  name: 'description',
                                             rows: 4,
                                             intermediateChanges: true,
                                             placeHolder: 'description',
                                             title: 'Enter description',
                                             promptMessage: 'Enter description'"></textarea>
                </div>
            </div>

            <div class="clear">
                <label class="formLabel-labelCell tableContainer-labelCell" for="${id}_groups">Shared with: </label>
                <div  class="formLabel-controlCell tableContainer-valueCell">

                    <div id="${id}_groups"
                         data-dojo-attach-point="groupChooser"
                         data-dojo-type="qpid/management/query/OptionsPanel"
                         data-dojo-props="  name: 'groups',
                                         title: 'Select groups to share with',
                                         promptMessage: 'Select groups to share with'"> </div>
                </div>
            </div>
            <div class="clear"></div>
        </div>
        <div class="dijitDialogPaneActionBar">
            <input id="${id}_cancelButton"
                   data-dojo-attach-point="cancelButton"
                   data-dojo-type="dijit/form/Button"
                   type="button"
                   label="Cancel"/>
            <input id="${id}_saveButton"
                   data-dojo-attach-point="saveButton"
                   data-dojo-type="dijit/form/Button"
                   type="submit" label="Save"/>
        </div>
    </form>
</div>