﻿{% load admin_static %}{% load suit_tags core_tags %}{% load url from future %}
<!DOCTYPE html>
<html lang="{{ LANGUAGE_CODE|default:"en-us" }}" {% if LANGUAGE_BIDI %}dir="rtl"{% endif %}>
<head>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>
      {% block title %}
          {%if title %}
              {{ title }} |
          {% endif %}
          {{XOS_BRANDING_NAME}}
      {% endblock %}
  </title>
  <link rel="stylesheet" type="text/css" href="{% block stylesheet %}{% endblock %}"/>
  <!--<link rel="stylesheet" type="text/css" href="{% static 'suit/bootstrap/dist/css/bootstrap.min.css' %}" media="all"/>-->
  <link rel="stylesheet" type="text/css" href="{% static 'suit/css/suit.css' %}" media="all">
  <link rel="stylesheet" type="text/css" href="{% static 'xos.css' %}" media="all">
  <link rel="stylesheet" type="text/css" href="{% static 'xosNgLib.css' %}" media="all">
  {% if XOS_BRANDING_CSS %}
  <link rel="stylesheet" type="text/css" href="{% static 'cord.css' %}" media="all">
  <link rel="stylesheet" type="text/css" href="{{ XOS_BRANDING_CSS }}">
  {% endif %}
  {% block extrastyle %}{% endblock %}
  {% if LANGUAGE_BIDI %}
  <link rel="stylesheet" type="text/css" href="{% block stylesheet_rtl %}{% static "admin/css/rtl.css" %}{% endblock %}"/>
  {% endif %}
  <script type="text/javascript">window.__admin_media_prefix__ = "{% filter escapejs %}{% static "admin/" %}{% endfilter %}";</script>
  <script src="{% static 'suit/js/jquery-1.9.1.min.js' %}"></script>
  <script src="http://code.jquery.com/ui/1.10.4/jquery-ui.js"></script>
  <link rel="stylesheet" href="http://code.jquery.com/ui/1.10.4/themes/smoothness/jquery-ui.css">
  <script type="text/javascript" src="{% static 'log4javascript-1.4.6/log4javascript.js' %}"></script>
  <script type="text/javascript" src="{% static 'uploadTextarea.js' %}"></script>
  <script type="text/javascript" src="{% static 'observer_status.js' %}"></script>

  <!-- ngXosLib -->
  <script src="{% static 'js/vendor/ngXosVendor.js' %}"></script>
  <script src="{% static 'js/vendor/ngXosHelpers.js' %}"></script>

  <script type="text/javascript">var Suit = { $: $.noConflict() }; if (!$) $ = Suit.$; </script>
  {% if 'SHOW_REQUIRED_ASTERISK'|suit_conf %}
  <style type="text/css">.required:after { content: '*'; margin: 0 0 0 5px; position: absolute; color: #ccc;}</style>
  {% endif %}
  {% block extrahead %}{% endblock %}
  {% block blockbots %}
  <meta name="robots" content="NONE,NOARCHIVE"/>
  {% endblock %}
  <link rel="shortcut icon" href="{{ XOS_BRANDING_FAVICON }}"></head>
  {% load i18n %}
<body class="{% if is_popup %}popup {% endif %}{% block bodyclass %}{% endblock %}">
  <div id="dialog-placeholder">
    <!-- This is a placeholder for dialog boxes, like the observer calendar -->
  </div>

  <!-- Sticky footer wrap -->
  <div id="wrap">

    <!-- Container -->
    {% block container %}
    <!-- <div id="container"> -->
      
    <!-- </div> -->
    <!-- END Header -->
    {% if not is_popup %}
    <div id="wrapper">
    {% endif %}

    {% if is_popup %}
    <div id="wrapper-popup">
    {% endif %}

      <!-- Sidebar -->
      {% if not is_popup %}
      <div id="sidebar-wrapper">
        <a href="{% url 'admin:index' %}" class="hidden-xs">
          <img class="logo" src="{% static XOS_BRANDING_ICON %}"/>
        </a>
            {% comment %}
            <!--{% include 'suit/menu.html' %}-->
            {% endcomment %}
        {% include 'admin/menu.html' %}
        <button class="navbar-toggle collapsed visible-xs" type="button">
          <i class="glyphicon glyphicon-arrow-left"></i>
        </button>
      </div>
      {% endif %}
      <!-- /#sidebar-wrapper -->

      <!-- Page Content -->
      <div id="page-content-wrapper">
        <div class="container-fluid">
          <div class="row">
            <div class="col-xs-12">
              {% block header %}
                {% if not is_popup %}
                  <!-- Header -->
                  <div id="header" class="header">
                    <button class="navbar-toggle collapsed" type="button">
                      <span class="icon-bar"></span>
                      <span class="icon-bar"></span>
                      <span class="icon-bar"></span>
                    </button>
                    {% block logo %}
                      <a href="{% url 'admin:index' %}" class="visible-xs">
                        <img class="logo" src="{% static XOS_BRANDING_ICON %}"/>
                      </a>
                    {% endblock %}
                    <!-- <div id="branding">
                      {% block quick-search %}
                        {% with 'SEARCH_URL'|suit_conf as search_url %}
                          {% if search_url %}
                            <form class="form-search nav-quick-search" autocomplete="off" action="{% if '/' in search_url %}{{ search_url }}{% else %}{% url search_url %}{% endif %}" method="GET"> <i class="input-icon icon-search"></i>
                              <input type="text" name="q" class="input-medium search-query" id="quick-search">
                              <input type="submit" class="submit" value="">
                            </form>
                          {% endif %}
                        {% endwith %}
                      {% endblock %}
                    </div> -->
                    {% block header_time %}
                      <!-- <div id="branding2">
                        <div class="header-content header-content-first">
                          <div class="header-column icon"> <i class="icon-time"></i></div>
                          <div class="header-column">
                            <span class="date">{% suit_date %}</span>
                            <br>
                            <span class="time" id="clock">{% suit_time %}</span>
                          </div>
                        </div>
                      </div> -->
                    {% endblock %}

                    {% block header_content %}
                      <div class="header-content">
                        <div class="header-column icon">
                          <i class="icon-comment"></i>
                        </div>
                        <div class="header-column">
                          <a href="" class="grey"> <b>2</b>
                            new messages
                          </a>
                        </div>
                      </div>
                    {% endblock %}

                    {% if user.is_active and user.is_staff %}
                    {% notification %}
                      <div id="user-tools">
                        {% trans 'Welcome,' %}
                        <a href="http://{{ request.get_host}}/admin/core/user/{{user.id}}">{{user.email}}</a>
                        <span id="observer-status"></span>
                        <span class="user-links">
                          {% block userlinks %}
                            {% url 'django-admindocs-docroot' as docsroot %}
                            {% if docsroot %}
                              <a href="http://guide.xosproject.org/">{% trans 'Documentation' %}</a>
                              <span class="separator">|</span>
                            {% endif %}
                            <a href="{% url 'admin:password_change' %}">{% trans 'Change password' %}</a>
                            <span class="separator">|</span>
                            <a href="{% url 'admin:logout' %}">{% trans 'Log out' %}</a>
                          {% endblock %}
                        </span>
                      </div>
                    {% endif %}

                    {% block nav-global %}
                    {% endblock %}
                  </div>
                {% endif %}
              {% endblock %}
            </div>
          </div>
          <div class="row content-wrapper">
            <div class="col-lg-12">
              <div class="suit-columns {{ is_popup|yesno:'one-column,two-columns' }}">
                {% block content-center %}
                  {% if not is_popup %}
                    {% block minidash %}
                      <div id="openCloudTopPage">
                        {% include "admin/newminidashboard.html" %}
                      </div>
                    {% endblock %} 

                    {% block breadcrumbs %}
                      <ul class="breadcrumb">
                        <li>
                          <a href="{% url 'admin:index' %}">{% trans 'Home' %}</a>
                          {% if title %}
                            <span class="divider">&raquo;</span>
                        </li>
                        <li class="active">
                          {{ title }}
                          {% endif %}
                        </li>
                      </ul>
                    {% endblock %}
                  {% endif %}

                  {% block messages %}
                    {% if messages %}
                      {% for message in messages %}
                        <div class="alert alert-{% firstof message.tags 'info' %}">
                          <button class="close" data-dismiss="alert">×</button>
                          <strong>{% if message.tags %}{{ message.tags|capfirst }}{% else %}Message{% endif %}!</strong> 
                          {{ message }}
                        </div>
                      {% endfor %}
                    {% endif %}
                  {% endblock messages %}

                  <!-- Content -->
                  <div id="content" class="{% block coltype %}colM{% endblock %} row">
                    {% block pretitle %}
                    {% endblock %}
                    {% block content_title %}
                      {% if title %}
                        <h2 class="content-title">{{ title }}</h2>
                      {% endif %}
                    {% endblock %}
                    {% block content %}
                      {% block object-tools %}
                      {% endblock %}
                      {{ content }}
                    {% endblock %}
                    {% block sidebar_content %}
                      {% block sidebar %}{% endblock %}
                    {% endblock %}
                  </div>
                  <!-- END Content -->
                  <span class="clearfix"></span>
                  <!-- </div>
                  -->
                {% endblock %}
              </div>
            </div>
          </div>
        </div>
      </div>
      <!-- /#page-content-wrapper -->
    <!-- /#wrapper -->
    {% endblock %}
    </div>
    {% if not is_popup %}
      <!-- Sticky footer push -->
      <div id="push"></div>
    {% endif %}

    {% block footer %}
      {% if not is_popup %}
        <div id="footer" class="footer">
          <div class="container-fluid">
            <div class="row">
              <div class="tools col-xs-4">
                {% block footer_links %}
                  <a href="https://wiki.opencord.org/" target="_blank" class="icon">
                    <i class="icon-question-sign"></i>
                    Support
                  </a>
                  <a href="https://wiki.opencord.org/" target="_blank" class="icon">
                    <i class="icon-bookmark"></i>
                    Licence
                  </a>
                  <a href="https://wiki.opencord.org/" target="_blank" class="icon">
                    <i class="icon-comment"></i>
                    Report a bug
                  </a>
                {% endblock %}
              </div>

              <div class="branding col-xs-4">
                {% block footer_branding %}
                  {% with 'ADMIN_NAME'|suit_conf as admin_name %}
                    {{XOS_BRANDING_NAME}}
                    <!-- {{ admin_name }} -->
                  {% endwith %}
                {% endblock %}
              </div>
            </div>
            <div class="row">
              <div class="statusMsg col-xs-12" id="statusMsg">
                <!-- this is a placeholder for xoslib views to display status messages -->
              </div>
            </div>
          </div>
        </div>
      {% endif %}
    {% endblock %}
  </div>

  <script src="{% static 'suit/bootstrap/dist/js/bootstrap.min.js' %}"></script>
  <script src="{% static 'suit/js/suit.js' %}"></script>
  <script type="text/javascript" src="//www.google.com/jsapi"></script>
  {% block extrajs %}
  {% endblock %}
  <script src="http://d3js.org/d3.v3.js"></script>
  <div class="modal fade hide" id="chartsModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
    <div class="modal-dialog">
      <div class="modal-content">
        <!--<div class="modal-header">
          <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
          <h4 class="modal-title" id="myModalLabel">OpenCloud</h4>
        </div>-->
        <div class="modal-body" style="overflow-y:hidden; overflow-x:hidden;">
          <div class="chartContainer">
            <div class="row">
              <div class=" padding"></div>
            </div>

            <div class="row">
              <div class=" heading">
                <p id="chartHeading" class="heading">OpenCloud</p>
              </div>
            </div>
            <div class="row">
              <div class="padding"></div>
              <div class="padding"></div>
            </div>
            <div class="row">
              <div id="graph" class="graph"></div>
            </div>
          </div>
          <div id="graph_work" style="display:none"></div>
        </div>
        <!--<div class="modal-footer">
        <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
        </div>
        -->
      </div>
      <!-- /.modal-content -->
    </div>
    <!-- /.modal-dialog -->
  </div>
  <!-- /.modal -->

  <!-- Menu Toggle Script -->
  <script>
    $(".navbar-toggle").click(function(e) {
      e.preventDefault();
      $("#wrapper").toggleClass("toggled");
    });
  </script>
</body>
</html>
