<!--
  ~ 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 class="dijitHidden">
    <div data-dojo-type="dijit/Dialog" style="width:600px;" data-dojo-props="title:'Add Binding'" id="addBinding">
        <form id="formAddBinding" method="post" data-dojo-type="dijit/form/Form">

            <div class="clear">
                <div class="formLabel-labelCell tableContainer-labelCell">Exchange Name*:</div>
                <div class="formLabel-controlCell tableContainer-valueCell">
                    <div id="addBinding.selectExchangeDiv"></div>
                </div>
            </div>
            <div class="clear">
                <div class="formLabel-labelCell tableContainer-labelCell">Destination Name*: </div>
                <div class="formLabel-controlCell tableContainer-valueCell">
                    <input type="select" id="formAddbinding.destinationChooser"
                           data-dojo-type="qpid/common/DestinationChooser"
                           data-dojo-props="
                                      name: 'destination',
                                      value: ' ',
                                      required: true,
                                      placeHolder: 'destination',
                                      promptMessage: 'Destination of this binding',
                                      title: 'Select a destination of this binding'"/>
                </div>
            </div>
            <div class="clear">
                <div class="formLabel-labelCell tableContainer-labelCell">Binding Key*:</div>
                <div class="formLabel-controlCell tableContainer-valueCell">
                    <input type="text" id="formAddbinding.bindingKey"
                           data-dojo-type="dijit/form/ValidationTextBox"
                           data-dojo-props="
                              name: 'name',
                              placeHolder: 'Binding Key',
                              required: true,
                              promptMessage: 'Binding key',
                              title: 'Enter binding key'" />
                </div>
            </div>
            <div class="clear">
                <div class="formLabel-labelCell">Replace existing arguments?</div>
                <div class="formLabel-controlCell">
                    <input type="checkbox" id="formAddbinding.replaceExistingArguments"
                           data-dojo-type="dijit/form/CheckBox"
                           data-dojo-props="
                              name: 'replaceExistingArguments',
                              value: 'replaceExistingArguments',
                              checked: false"/>
                </div>
            </div>

            <div class="clear formBox">
                <fieldset>
                    <legend>Binding Arguments</legend>
                    <div class="editNoteBanner">NOTE: Only arguments with name and value will be submitted. To edit, please, click on a grid cell.</div>
                    <div id="formAddbinding.bindingArguments"></div>
                    <div>
                        <button data-dojo-type="dijit/form/Button" id="formAddbinding.addArgumentButton" type="button" data-dojo-props="title:'Add new binding argument'">+</button>
                        <button data-dojo-type="dijit/form/Button" id="formAddbinding.deleteArgumentButton" type="button" data-dojo-props="title:'Remove selected binding argument(s)'">-</button>
                    </div>
                </fieldset>
            </div>

            <div class="dijitDialogPaneActionBar qpidDialogPaneActionBar">
                <input type="submit" value="Create Binding" label="Create Binding"  data-dojo-type="dijit/form/Button" />
            </div>
        </form>
    </div>
</div>
