<!DOCTYPE html>
<!--

Licensed 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.

-->
<html lang="en">
  <head>
    <title>Session</title>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
    <link rel="stylesheet" href="style/layout.css?0.11.0" type="text/css">
    <script src="script/json2.js"></script>
    <script src="script/sha1.js"></script>
    <script src="script/jquery.js"></script>
    <script src="script/jquery.couch.js"></script>
    <script src="script/jquery.dialog.js"></script>
    <script src="script/futon.js"></script>
    <script src="script/futon.browse.js"></script>
    <script src="script/futon.format.js"></script>
    <script>
      $(function() {
        var ret, reason, q = window.location.search, qps = q.split("&");
        $.map(qps, function(qp) {
          var m = qp.match(/return=(.*)/);
          if (m) {
            ret = decodeURIComponent(m[1]);
          }
          m = qp.match(/reason=(.*)/);
          if (m) {
            reason = $.futon.escape(decodeURIComponent(m[1]));
          }
        });
        if (reason) {
          $("#aboutSession").append('<p>The application says: <em>'+reason+'</em></p>');
        }
        if (ret) {
          $("#aboutSession").append($('<p>Once you are logged in, click this link to return to your application: </p>').append($("<a></a>").attr("href", ret).text(ret)));
          // todo this needs to look different if you are already logged in
          // a note about you are logged in but you can't access this
        }
        // do the sidebar but in the middle without the sidebar
        $.futon.storage.set("sidebar", "hidden");
        setTimeout(function() {
          var ctx = $$("#userCtx").userCtx;
          $.futon.storage.set("sidebar", "show");
          if (ctx && ctx.name) {
            $("#aboutSession").append("<p>It looks like you are logged in, maybe you don't have access to that url.</p>");
          }
        },100);
      });
    </script>
  </head>
  <body>
    <div id="wrap">
      <h1><a href="index.html">Overview</a>
      <strong>Session</strong></h1>
      <div id="content">
        <h2>Establish or Modify Your Session</h2>
        <div id="loginSignup">
          <div id="aboutSession"></div>
          <span id="userCtx">
            <span class="loggedout">
              <a href="#" class="signup">Signup</a> or <a href="#" class="login">Login</a>
            </span>
            <span class="loggedin">
              Welcome <a class="name">?</a>!
              <br/>
              <a href="#" class="logout">Logout</a>
            </span>
            <span class="loggedinadmin">
              Welcome <a class="name">?</a>!
              <br/>
              <a href="#" class="createadmin">Setup more admins</a> or
              <a href="#" class="logout">Logout</a>
            </span>
            <span class="adminparty">
              Welcome to Admin Party!
              <br/>
              Everyone is admin. <a href="#" class="createadmin">Fix this</a>
            </span>
          </span>
        </div>
      </div>

    </div>
  </body>
</html>
