<!--
   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.
-->
<!DOCTYPE html>
<html lang="en" class="no-js">
  <head>
    <link href="../../css/bootstrap-theme.min.css" type="text/css" rel="stylesheet" />
    <link href="../../css/bootstrap.min.css" type="text/css" rel="stylesheet" />
    <script src="../../js/jquery.js" type="text/javascript"></script>
    <script src="../../js/bootstrap.min.js" type="text/javascript"></script>
    <script src="../../../js/js-cookie.js" type="text/javascript"></script>
  </head>
  <body>
    <div class="container-fluid">
      <div class="row">
        <div class="col-xs-1 col-md-1 col-lg-1"></div>
        <div class="col-xs-10 col-md-10 col-lg-10">
          <h1>Settings</h1>
          <p class="lead">
            <form>
              <input type="checkbox" id="timezone" onclick="setTimeZone()"> Use UTC timezone
            </form>
          </p>
        </div>
        <div class="col-xs-1 col-md-1 col-lg-1"></div>
      </div>
    </div>
    <script>
$(function() {
  if(Cookies.get("tz")=="UTC") {
    $('#timezone').attr('checked',true);
  }
});

function setTimeZone() {
  if($('#timezone').is(':checked')) {
    Cookies.set("tz", "UTC");
  } else {
    Cookies.set("tz", "");
  }
}
    </script>
  </body>
</html>
