<!DOCTYPE HTML>
<!--
  ~ 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.
  -->
<html lang="en">
<head>
    <meta charset="utf-8"/>
    <title>Qpid Management</title>
    <link rel="icon" type="image/png" href="images/qpid-favicon.png"/>
    <link rel="stylesheet" href="dojo/dojo/resources/dojo.css"/>
    <link rel="stylesheet" href="dojo/dijit/themes/claro/claro.css"/>
    <link rel="stylesheet" href="dojo/dojox/grid/resources/claroGrid.css"/>
    <link rel="stylesheet" href="dojo/dojox/grid/enhanced/resources/claro/EnhancedGrid.css"/>
    <link rel="stylesheet" href="dojo/dojox/grid/enhanced/resources/EnhancedGrid_rtl.css"/>
    <link rel="stylesheet" href="dojo/dojox/form/resources/CheckedMultiSelect.css"/>
    <link rel="stylesheet" href="dojo/dojox/form/resources/FileInput.css"/>
    <link rel="stylesheet" href="dojo/dijit/themes/claro/document.css"/>
    <link rel="stylesheet" href="dojo/dgrid/css/dgrid.css"/>
    <link rel="stylesheet" href="dojo/dgrid/css/skins/claro.css"/>
    <link rel="stylesheet" href="dojo/dojo/resources/dnd.css"/>
    <link rel="stylesheet" href="dojo/dojox/layout/resources/GridContainer.css"/>
    <link rel="stylesheet" href="dojo/dojox/layout/resources/DndGridContainer.css"/>
    <link rel="stylesheet" href="dojo/dojox/widget/Portlet/Portlet.css"/>
    <link rel="stylesheet" href="css/common.css" media="screen"/>
    <script>
        function getContextPath()
        {
            var contextPath = "/";
            var documentURL = document.URL;
            var managementPageStart = documentURL.lastIndexOf("/");
            var firstSlashPos = documentURL.indexOf("/", documentURL.indexOf("//") + 2);
            if (managementPageStart > firstSlashPos)
            {
                contextPath = documentURL.substring(firstSlashPos, managementPageStart + 1);
            }
            return contextPath;
        }

        var dojoConfig = {
            parseOnLoad: false,
            tlmSiblingOfDojo: false,
            async: true,
            baseUrl: getContextPath(),
            packages: [
                {
                    name: "dojo",
                    location: "dojo/dojo"
                },
                {
                    name: "dijit",
                    location: "dojo/dijit"
                },
                {
                    name: "dojox",
                    location: "dojo/dojox"
                },
                {
                    name: "qpid",
                    location: "js/qpid"
                },
                {
                    name: "dgrid",
                    location: "dojo/dgrid"
                },
                {
                    name: "dstore",
                    location: "dojo/dstore"
                }
            ]
        };

    </script>
    <script src="dojo/dojo/dojo.js"></script>
    <script>
        var qpidManagementHelper = null;
        var management = null;
        require([
                    "dojo/parser",
                    "dojo/ready",
                    "qpid/common/LoginForm",
                    "dijit/layout/BorderContainer",
                    "dijit/layout/TabContainer",
                    "dijit/layout/ContentPane",
                    "dijit/Toolbar",
                    "dijit/ToolbarSeparator",
                    "dijit/form/DropDownButton",
                    "dijit/form/Button",
                    "dijit/Dialog",
                    "dijit/Menu",
                    "dijit/MenuItem",
                    "qpid/common/footer"
                ],
                function (parser, ready)
                {
                    ready(function()
                    {
                        parser.parse().then(function ()
                        {
                             require(["qpid/common/ConsoleHelper"], function (ConsoleHelper)
                                        {
                                          qpidManagementHelper = ConsoleHelper;
                                          qpidManagementHelper.init();
                                          management = qpidManagementHelper.management;
                                        });
                        });
                    });
                });
    </script>
</head>
<body class="claro qpid">

    <div id="loadingLayout">
        <div class="header"></div>
        <div class="clear"></div>
        <div class="loadingBar">
            <div>Please wait.... <span class="loading">&nbsp;&nbsp;&nbsp;&nbsp;</span> </div>
        </div>

    </div>

    <div id="loginLayout" class="dijitHidden">
        <div class="header"></div>
        <div class="clear"></div>
        <div style="width:350px; margin-left: auto; margin-right: auto;" id="loginForm"
             data-dojo-type="qpid.common.LoginForm"></div>
        <div qpid-type="footer"></div>
    </div>

    <div id="pageLayout" class="dijitHidden"
         data-dojo-type="dijit.layout.BorderContainer"
         data-dojo-props="design: 'headline', gutters: false, isLayoutContainer:false">
        <div data-dojo-type="dijit.layout.ContentPane" data-dojo-props="region:'top', isLayoutContainer:false">
            <div class="header"></div>
            <div class="alignRight">
                <div id="login" class="hidden" data-dojo-type="dijit/Toolbar">
                    <div data-dojo-type="dijit/form/DropDownButton" data-dojo-props="iconClass: 'dijitIconChart'">
                        <span>Dashboard</span>
                        <div data-dojo-type="dijit/Menu">
                            <div data-dojo-type="dijit/MenuItem"
                                 data-dojo-props="onClick: function(e){qpidManagementHelper.showDashboardCreateDialog(e);}">
                                Create
                            </div>
                            <div data-dojo-type="dijit/MenuItem"
                                 data-dojo-props="onClick: function(e){qpidManagementHelper.showDashboardBrowser(e);}">
                                Browse
                            </div>
                        </div>
                    </div>
                    <div data-dojo-type="dijit/form/DropDownButton"
                         data-dojo-props="iconClass: 'dijitIconApplication'">
                        <span>Query</span>
                        <div data-dojo-type="dijit/Menu">
                            <div data-dojo-type="dijit/MenuItem"
                                 data-dojo-props="onClick: function(e){qpidManagementHelper.showQueryCreateDialog(e);}">
                                Create
                            </div>
                            <div data-dojo-type="dijit/MenuItem"
                                 data-dojo-props="onClick: function(e){qpidManagementHelper.showQueryBrowser(e);}">
                                Browse
                            </div>
                        </div>
                    </div>
                    <div data-dojo-type="dijit/form/DropDownButton"
                         data-dojo-props="iconClass: 'dijitIconDocuments'">
                        <span>Documentation</span>
                        <div data-dojo-type="dijit/Menu">
                            <div data-dojo-type="dijit/MenuItem"
                                 data-dojo-props="onClick: function(){qpidManagementHelper.showAPI();}">API
                                documentation
                            </div>
                            <div data-dojo-type="dijit/MenuItem"
                                 data-dojo-props="onClick: function(){qpidManagementHelper.showDocumentation();}">
                                Broker Manual
                            </div>
                        </div>
                    </div>
                    <span data-dojo-type="dijit/ToolbarSeparator"></span>
                    <div id="authenticatedUserControls" data-dojo-type="dijit/form/DropDownButton"
                         data-dojo-props="iconClass: 'userIcon ui-icon'">
                        <div data-dojo-type="dijit/Menu">
                            <div data-dojo-type="dijit/MenuItem"
                                 data-dojo-props="onClick: function(){qpidManagementHelper.logout();}">Log out
                            </div>
                            <div data-dojo-type="dijit/MenuItem"
                                 data-dojo-props="onClick: function(){qpidManagementHelper.showPreferencesDialog();}">
                                Preferences
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
        <div id="tree" data-dojo-type="dijit.layout.ContentPane"
             data-dojo-props="region:'leading', splitter: true, isLayoutContainer:false">
            <div qpid-type="treeView"></div>
        </div>
        <div id="main" data-dojo-type="dijit.layout.ContentPane"
             data-dojo-props="region:'center', gutters: true, isLayoutContainer:false">
            <div id="managedViews" data-dojo-type="dijit.layout.TabContainer"
                 data-dojo-props="tabPosition: 'top', doLayout:false, isLayoutContainer:false">
            </div>
            <div data-dojo-type="dijit.layout.ContentPane"
                 data-dojo-props="region:'bottom', isLayoutContainer:false">
                <div qpid-type="footer"></div>
            </div>
        </div>
    </div>

    <div class="dijitHidden">
        <div data-dojo-type="dijit.Dialog" data-dojo-props="title: 'Error'" id="errorDialog">
            <div>
                <div class="errorDialogErrorPrimary">
                    <span id="errorDialog.statusCode">000</span>&nbsp;-&nbsp;<span
                        id="errorDialog.errorMessage">error</span>
                </div>

                <div class="clear" class="errorDialogErrorSecondary">
                    <div id="errorDialog.advice.reconnect">
                        Please login again and retry your operation.
                    </div>
                    <div id="errorDialog.advice.retry">
                        Please correct the problem and retry your operation.
                    </div>
                </div>
            </div>
            <div class="dijitDialogPaneActionBar qpidDialogPaneActionBar">
                <input type="button" id="errorDialog.button.cancel" value="Cancel"
                       data-dojo-type="dijit.form.Button"
                       data-dojo-props="label: 'Cancel',onClick:function(){dijit.byId('errorDialog').hide();}"/>
                <input type="button" id="errorDialog.button.relogin" value="Login"
                       data-dojo-type="dijit.form.Button"
                       data-dojo-props="label:'Login',onClick:function(){dijit.byId('errorDialog').hide();location.reload();}"/>
            </div>
        </div>
    </div>

</body>
</html>
