<!-- Copyright (C) 2011 Google Inc. All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

    * Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
    * Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the
distribution.
    * Neither the name of Google Inc. nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-->
<!DOCTYPE HTML>
<html>

<head>
<title>Test Timeline Explorer</title>
<style>
body {
    font-family: Helvetica, Arial, sans-serif;
    font-size: 12px;
}

#timeline-container {
    position: relative;
}

#inspector-container {
    width: 300px;
    float: right;
    border-left: 1px dashed;
    padding-left: 5px;
    margin-left: 5px;
}

#inspector-container caption {
    background: #eee;
    font-weight: bold;
    padding: 2px;
    font-size: 14px;
    text-align: left;
}

#inspector-table {
    width: 100%;
}

#inspector-table td {
    white-space: nowrap;
}

#inspector-table .label {
    color: #666;
    text-align: right;
    width: 10em;
}

#inspector-table .delta.positive {
    color: #090;
}

#inspector-table .delta.negative {
    color: #900;
}

#inspector-container .buttons {
    padding: 1em 0;
    text-align: center;
}

#inspector-container #build-buttons {
    border-top: 1px dashed;
}

#indicator {
    top: 0;
    width: 1px;
    position: absolute;
    background: red;
}
</style>
<script src="dygraph-combined.js"></script>
<script src="builders.js"></script>
<script src="loader.js"></script>
<script src="string.js"></script>
<script src="history.js"></script>
<script src="dashboard_base.js"></script>
<script src="timeline_explorer.js"></script>
<script src="ui.js"></script>
</head>
<body>
    <div id="test-type-switcher"></div>

    <div id="inspector-container" style="visibility: hidden">
        <p>Click on a point on the graph to see details about that build.</p>
        <p>Click and drag on the graph to zoom in to that period.</p>
    </div>
    <div id="timeline-container">Loading...</div>
</body>
</html>
