﻿<!--
  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.
-->
<script type="text/javascript" src="${pluginRoot}/res/ui/ipojo.js"></script>
<script>
    var root_url = '${pluginRoot}';
    var instances_url = '${pluginRoot}' + '/instances';
    var factories_url = '${pluginRoot}' + '/factories';
    var handlers_url = '${pluginRoot}' + '/handlers';
</script>

<!-- status line -->
<p class="statline">&nbsp;</p>

<!-- top header -->
<form method="post" enctype="multipart/form-data" action="">
	<div class="ui-widget-header ui-corner-top buttonGroup">
		<button class="instancesButton" type="button">Instances</button>
		<button class="factoriesButton" type="button">Factories</button>
		<button class="handlersButton" type="button">Handlers</button>
	</div>
</form>

<table id="plugin_table" class="tablesorter nicetable noauto">
	<thead>
		<tr>
			<th class="col_Name">Instance Name</th>
			<th class="col_Factory">Factory</th>
			<th class="col_State">State</th>
		</tr>
	</thead>
	<tbody>
		<tr><!-- template -->
			<td class="name">&nbsp;	</td>
			<td class="factory">&nbsp;</td><!-- factory -->
			<td class="state">&nbsp;</td><!-- state -->
		</tr>
	</tbody>
</table>

<!-- bottom header -->
<form method="post" enctype="multipart/form-data" action="">
    <div class="ui-widget-header ui-corner-bottom buttonGroup">
        <button class="instancesButton" type="button">Instances</button>
        <button class="factoriesButton" type="button">Factories</button>
        <button class="handlersButton" type="button">Handlers</button>
    </div>
</form>

<!-- status line -->
<p class="statline">&nbsp;</p>
