<html>
  <head>
    <title>Gerrit Code Review - Sign In</title>
    <style type="text/css">
      #error_message {
        padding: 5px;
        margin: 2em;
        width: 20em;
        background-color: rgb(255, 255, 116);
        font-weight: bold;
      }
      #cancel_link {
        margin-left: 45px;
      }
    </style>
    <style id="gerrit_sitecss" type="text/css"></style>
  </head>
  <body class="login" id="login_ldap">
    <div id="gerrit_topmenu" style="height:45px;" class="gerritTopMenu"></div>
    <div id="gerrit_header"></div>
    <div id="gerrit_body" class="gerritBody">
      <h1>Sign In to Gerrit Code Review at <span id="hostName">example.com</span></h1>
      <div id="error_message">Invalid username or password.</div>
      <form method="POST" action="#" id="login_form" autocomplete="off" onsubmit="return shouldSubmit()">
        <table style="border: 0;">
        <tr>
          <th>Username</th>
          <td><input name="username" id="f_user"
                     type="text"
                     size="25"
                     tabindex="1" /></td>
        </tr>
        <tr>
          <th>Password</th>
          <td><input name="password" id="f_pass"
                     type="password"
                     size="25"
                     tabindex="2" /></td>
        </tr>
        <tr>
          <td></td>
          <td>
            <input name="rememberme" id="f_remember"
                   type="checkbox"
                   value="1"
                   tabindex="3" />
            <label for="f_remember">Remember me</label>
          </td>
        </tr>
        <tr>
          <td></td>
          <td>
            <input id="b_signin" type="submit" value="Sign In" tabindex="4"/>
            <a href="../" id="cancel_link">Cancel</a>
          </td>
        </tr>
        </table>
      </form>
      <div style="clear: both; margin-top: 15px; padding-top: 2px; margin-bottom: 15px;">
        <div id="gerrit_footer"></div>
      </div>
    </div>

    <script type="text/javascript">
    <![CDATA[
      var submitted = false;
      function shouldSubmit() {
        if(!submitted) {
          submitted = true;
          document.getElementById('b_signin').disabled=true;
          return true;
        }
        return false;
      }

      var login_form = document.getElementById('login_form');
      var f_user = document.getElementById('f_user');
      var f_pass = document.getElementById('f_pass');

      // Keyup event must be used to avoid issue with Firefox autocomplete
      // Issue #6083
      f_user.onkeyup = function(e) {
        if (e.keyCode == 13) {
          f_pass.focus();
          return false;
        }
      }
      f_pass.onkeyup = function(e) {
        if (e.keyCode == 13 && shouldSubmit()) {
          login_form.submit();
          return false;
        }
      }
      f_user.focus();
    ]]>
    </script>
  </body>
</html>
