<html>
  <head>
    <title>Gerrit Code Review</title>
    <script id="gwtdevmode">
      (function () {
        var pn = 'gwt.codesvr';
        var cn = 'gerrit_ui.' + pn;

        var p_start = window.location.search.indexOf(pn + '=');
        if (p_start != -1) {
          p_start = p_start + pn.length + 1;
          var p_end = window.location.search.indexOf(";", p_start);
          if (p_end == -1) p_end = window.location.search.length;
          var v = window.location.search.substring(p_start, p_end);

          var e = new Date();
          e.setDate(e.getDate() + 1);
          document.cookie = cn + "=" + v + ';expires=' + e.toGMTString();

        } else if (document.cookie.length != 0) {
          var c_start = document.cookie.indexOf(cn + '=');
          if (c_start != -1) {
            c_start = c_start + cn.length + 1;
            var c_end = document.cookie.indexOf(";", c_start);
            if (c_end == -1) c_end = document.cookie.length;
            var v = document.cookie.substring(c_start, c_end);
            window.location.replace('?' + pn + '=' + v + document.location.hash);
          }
        }
      })();
    </script>
    <style id="gerrit_sitecss" type="text/css"></style>
  </head>
  <body>
    <div id="gerrit_topmenu" style="height:45px;" class="gerritTopMenu"></div>
    <div id="gerrit_header"></div>
    <div id="gerrit_body" class="gerritBody">
      <h2>Sign In</h2>
      <table border="0">
        <tr>
          <th>Username:</th>
          <td>
            <form method="GET">
              <input type="text" size="30" name="user_name" />
              <input type="submit" value="Become Account" />
            </form>
          </td>
        </tr>

        <tr>
          <th>Email Address:</th>
          <td>
            <form method="GET">
              <input type="text" size="30" name="preferred_email" />
              <input type="submit" value="Become Account" />
            </form>
          </td>
        </tr>

        <tr>
          <th>Account ID:</th>
          <td>
            <form method="GET">
              <input type="text" size="12" name="account_id" />
              <input type="submit" value="Become Account" />
            </form>
          </td>
        </tr>

        <tr>
          <th style="vertical-align: top;">Choose:</th>
          <td id="userlist"/>
        </tr>
      </table>

      <hr />
      <h2>Register</h2>
      <form method="POST">
        <input type="hidden" name="action" value="create_account" />
        <input type="submit" value="New Account" />
      </form>
    </div>
    <div style="clear: both; margin-top: 15px; padding-top: 2px; margin-bottom: 15px;">
      <div id="gerrit_footer"></div>
    </div>
  </body>
</html>
