<!DOCTYPE html>
<!-- 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
&quot;License&quot;); 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 &quot;AS IS&quot; 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 lang="en">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=1080, initial-scale=1">
    <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
    <title>Pony Mail!</title>

    <!-- Bootstrap -->
    <link href="css/bootstrap.min.css" rel="stylesheet">
    <link href="css/popup.css" rel="stylesheet">
    <link href="css/solar.css" rel="alternate stylesheet" type="text/css" title="Solar theme" media="all">
    
    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
    <!--[if lt IE 9]>
      <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
      <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
  </head>
  <body style="margin: 20px;" onload="listDomains()">
    <nav class="navbar navbar-default" style="margin-bottom: 5px;">
    <div class="container-fluid">
      <!-- Brand and toggle get grouped for better mobile display -->
      <div class="navbar-header" style="min-width: 160px;">
      <a class="navbar-brand" href="./"><span><img src="images/logo.png" style="margin-top: -10px !important;" height="30" width="32"/>&nbsp;Pony Mail!</span></a>
      </div>
    
    
      <ul class="nav navbar-nav" id="userprefs" style="position: absolute; right: 8px;">
      <li class="dropdown navbar-right" id="listchoice">
          <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"><img id="uimg" src="images/user_loggedout.png" title="Not logged in"/>
            <span class="caret"></span></a>
            <ul class="dropdown-menu" id="prefs_dropdown">
            <li><a href="oauth.html">Log in</a></li>
          </ul>
      </li>
      </ul>
      
    </div>
    </nav>
    
    <div class="container-fluid">
      <!-- Popup box for various notices -->
      <div style="display: none;" class="bs-callout bs-callout-success" id="popupper" style="margin: 2px !important; padding: 5px;">
      </div>
     <div class="row">
      <div id="list_stats" class="bs-callout bs-callout-info" style="margin-top: 0px; padding-top: 10px; text-align: center; font-size: 12pt; padding-bottom: 0px; min-height: 64px;">
      </div>
    </div>
    <div class="row">
      <div id="bread" class="col-md-4" style="text-align: center">
        <img src="images/logo_large.png" width="256" height="233"/><br/>
        <noscript>
          <div class="bs-callout bs-callout-alert">
            This site requires JavaScript enabled. Please enable it.
          </div>
      </noscript>
          <h3 id="welcome">Welcome to Pony Mail!</h3>
        <p id="phonebook_help">
          Pick a mailing list domain to start viewing lists:
        </p>
        <p id="login_disclaimer" class="bs-callout bs-callout-warning" style="display: none;">
          <b>You are currently not logged in</b><br/>
          If you are only browsing public archives, that's totally fine! But remember
          to <a href="oauth.html"><b>log in</b></a> if you want to reply to emails
          through the web interface, or search private archives. 
        </p>
      </div>
      <div id="bread" class="col-md-8" style="text-align: center">
        <div id="domains">
          
        </div>
      </div>
      
      </div>
    </div>

    <div id="splash" class="splash fade-in"> &nbsp; </div>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
    <!-- Include all compiled plugins (below), or include individual files as needed -->
    <script src="js/bootstrap.min.js"></script>
    <script src="js/config.js"></script>
    <script src="js/ponymail.js"></script>
    <script src="js/weburl.js"></script>
  </body>
</html>
