<!--
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 xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
    <title>Brooklyn Location - brooklyn.policy.followthesun.DefaultFollowTheSunModel$1</title>
    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
    <link rel="stylesheet" href="../items.css" type="text/css" media="screen"/>
</head>
<body>
<div id="container">
    <div id="header">
        <div id="identity">
            <a href="http://brooklyncentral.github.com/" rel="home">Brooklyn</a>
        </div>
    </div>
    <div id="content" class="objectContent">
        <h1>brooklyn.policy.followthesun.DefaultFollowTheSunModel$1</h1>
        <h2 class="typeLabel">Type:</h2><span id="type"></span>

        <h2>Config Keys</h2>
        <table id="configKeys">
            <tr>
                <th>Name</th>
                <th>Type</th>
                <th>Default Value</th>
                <th>Description</th>
            </tr>
        </table>
        <br>
    </div>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
<script src="../items.js" type="text/javascript"></script>
<script type="text/javascript">
    $(document).ready(function () {
        var item = $.grep((items.locations), function (entity) {
            return entity.type == "brooklyn.policy.followthesun.DefaultFollowTheSunModel$1";
        })[0];
        $("#type").html(item.type);
        item.config.forEach(function (element) {
            $("#configKeys").find("tr:last").after("<tr><td>" + element.name + "</td><td>" + element.type + "</td><td>" + element.defaultValue + "</td><td class='wordWrap'>" + element.description + "</td></tr>")
        });
    });
</script>
</body>
</html>
