<!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=device-width, initial-scale=1">
    <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
    <title>Manage Email Addresses - 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">
    <link href="css/metro.css" rel="alternate stylesheet" type="text/css" title="Metropolis" media="all">
    <link rel="stylesheet" href="//cdn.jsdelivr.net/font-hack/2.013/css/hack.min.css">

    <!-- 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: 0px;" onload="listAlts()">
        <header class="navbar navbar-default" style="margin-bottom: 5px; background: linear-gradient(to bottom, rgba(229,229,229,1) 0%,rgba(191,191,191,1) 100%);">
        <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="27" width="32" />&#160;Pony Mail!</span>
                </a>
            </div>
            <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1" style="float: left;">
                <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>
        </div>
    </header>
    
    <div class="container-fluid">
    
    <div class="row">
       <!-- Popup box for various notices -->
      <div style="display: none;" class="bs-callout bs-callout-success fade-in" id="popupper" style="margin: 2px !important; padding: 5px;">
      </div>
      <div id="bread" class="col-md-12" style="text-align: center">
        <noscript>
          <div class="bs-callout bs-callout-alert">
            This site requires JavaScript enabled. Please enable it.
          </div>
      </noscript>
          <h3 id="welcome">Manage Email Addresses</h3>
        <div id="alts">
          Loading account info, please hang on...
        </div>
        
        <div id="associate" class="bs-callout bs-callout-alert">
          <h3>Associate a new email address with this account:</h3>
          Adding a secondary email address to your account will let you pick which
          address to reply to emails from. <br/>You could use this to choose whether
          to reply to an email with your personal address or work address.<br/>
          It will <b>not</b> make any change to your
          access restrictions in the archive - only the primary login information is
          used for this.
          <form onsubmit="return newAlt(document.getElementById('altemail').value);">
          <input type="text" style="width:300px;" id="altemail" placeholder="Enter an email address to associate"/>
          <input type="submit" class="btn btn-info" value="Associate"/>
          </form>
        </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/alts.js"></script>
    <script src="js/weburl.js"></script>
  </body>
</html>