<!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?1.4.2"></script>
    <script src="script/jquery.couch.js?0.11.0"></script>
    <script src="script/jquery.dialog.js?0.11.0"></script>
    <script src="script/futon.js?0.11.0"></script>
    <script src="script/futon.browse.js?0.11.0"></script>
    <script src="script/futon.format.js?0.11.0"></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>
