<!--
  ~ 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;" id="moveMessages">
        <form id="formMoveMessages" method="post" dojoType="dijit.form.Form">
            <table cellpadding="0" cellspacing="2">
                <tr>
                    <td valign="top"><strong>Queue: </strong></td>
                    <td><div id="moveMessages.selectQueueDiv"></div></td>
                </tr>
            </table>
            <br/>

            <!-- submit buttons -->

            <input type="button" value="Cancel" label="Cancel" dojoType="dijit.form.Button" id="moveMessageCancel"/>
            <input type="submit" value="Submit" dojoType="dijit.form.Button" id="moveMessageSubmit"/>

        </form>
    </div>
</div>
