<!--
  ~ 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" data-dojo-props="title:'Authentication Provider'" id="addAuthenticationProvider">
        <div id="addAuthenticationProvider.contentPane">
            <form id="addAuthenticationProvider.form" method="post" data-dojo-type="dijit/form/Form">
                <div class="formBox">
                    <fieldset>
                        <legend>Authentication Provider</legend>
                        <div class="clear">
                            <div class="formLabel-labelCell tableContainer-labelCell">Name*:</div>
                            <div class="formLabel-controlCell tableContainer-valueCell">
                                <input type="text" id="addAuthenticationProvider.name"
                                       data-dojo-type="dijit/form/ValidationTextBox"
                                       data-dojo-props="
                                  name: 'name',
                                  placeHolder: 'authentication provider name',
                                  required: true,
                                  promptMessage: 'Name of authentication provider, must be unique',
                                  title: 'Enter a unique authentication provider name per broker'" />
                            </div>
                        </div>
                        <div class="clear">
                            <div class="formLabel-labelCell tableContainer-labelCell">Type*:</div>
                            <div class="tableContainer-valueCell formLabel-controlCell">
                                <select id="addAuthenticationProvider.type" data-dojo-type="dijit/form/FilteringSelect"
                                        data-dojo-props="
                                        name: 'type',
                                        required: true,
                                        placeHolder: 'select authentication provider type',
                                        promptMessage: 'Type of  authentication provider',
                                        title: 'Select  authentication provider type',
                                        searchAttr: 'name'">
                                </select>
                            </div>
                        </div>
                        <div class="clear"></div>
                        <div id="addAuthenticationProvider.typeFields"></div>
                        <div class="editorPanel clear"
                             data-dojo-type="dijit/TitlePane"
                             data-dojo-props="title: 'Context variables',  open: false">
                            <div id="addAuthenticationProvider.context"
                                 data-dojo-type="qpid.common.ContextVariablesEditor"
                                 data-dojo-props="name: 'context', title: 'Context variables'"></div>
                        </div>
                    </fieldset>
                </div>
            </form>
        </div>
        <div class="dijitDialogPaneActionBar qpidDialogPaneActionBar">
            <button data-dojo-type="dijit/form/Button" id="addAuthenticationProvider.addButton" data-dojo-props="label: 'Save'" type="submit"></button>
            <button data-dojo-type="dijit/form/Button" id="addAuthenticationProvider.cancelButton" data-dojo-props="label: 'Cancel'" ></button>
        </div>
    </div>
</div>
