{% capture start %}{{site.baseurl}}/start{% endcapture %}
<nav class="navbar navbar-default navbar-fixed-top">
  <div class="container">
    <div class="navbar-header">
      <a href="{{ site.logo_url }}" class="navbar-brand" >
        <img alt="Brand" style="height: 28px" src="{{ "/images/distributedlog_logo_navbar.png" | prepend: site.baseurl }}">
      </a>
      <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
        <span class="sr-only">Toggle navigation</span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
      </button>
    </div>
    <div id="navbar" class="navbar-collapse collapse">
      <ul class="nav navbar-nav">
        <!-- Overview -->
        <li><a href="{{ site.baseurl}}/">V{{ site.distributedlog_version_short }}</a></li>
        <!-- Concepts -->
        <li><a href="{{ site.baseurl }}/basics/introduction">Concepts</a></li>
        <!-- Quick Start -->
        <li>
          <a href="{{ start }}" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">Start<span class="caret"></span></a>
          <ul class="dropdown-menu" role="menu">
            {% assign setup_group = (site.pages | where: "top-nav-group" , "setup" | sort: "top-nav-pos") %}
            {% for setup_group_page in setup_group %}
            <li>
              <a href="{{ site.baseurl }}{{ setup_group_page.url }}">
                {% if setup_group_page.top-nav-title %}{{ setup_group_page.top-nav-title }}{% else %}{{ setup_group_page.title }}{% endif %}
              </a>
            </li>
            {% endfor %}
            <li role="separator" class="divider"></li>
            <li class="dropdown-header"><strong>Quickstart</strong></li>
            {% assign quickstart_group = (site.pages | where: "top-nav-group" , "quickstart" | sort: "top-nav-pos") %}
            {% for quickstart_group_page in quickstart_group %}
            <li>
              <a href="{{ site.baseurl }}{{ quickstart_group_page.url }}">
                {% if quickstart_group_page.top-nav-title %}{{ quickstart_group_page.top-nav-title }}{% else %}{{ quickstart_group_page.title }}{% endif %}
              </a>
            </li>
            {% endfor %}
            <li role="separator" class="divider"></li>
            <li class="dropdown-header"><strong>Deployment</strong></li>
            {% assign deployment_group = (site.pages | where: "top-nav-group" , "deployment" | sort: "top-nav-pos") %}
            {% for deployment_group_page in deployment_group %}
            <li>
              <a href="{{ site.baseurl }}{{ deployment_group_page.url }}">
                {% if deployment_group_page.top-nav-title %}{{ deployment_group_page.top-nav-title }}{% else %}{{ deployment_group_page.title }}{% endif %}
              </a>
            </li>
            {% endfor %}
          </ul>
        </li>
        <!-- API -->
        <li>
          <a href="{{ start }}" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">API<span class="caret"></span></a>
          <ul class="dropdown-menu" role="menu">
            <li><a href="{{ site.baseurl }}/api/java">Java</a></li>
          </ul>
        </li>
        <!-- User Guide -->
        <li class="dropdown">
		      <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">User Guide<span class="caret"></span></a>
          <ul class="dropdown-menu">
            {% assign userguide_group = (site.pages | where: "top-nav-group" , "user-guide" | sort: "top-nav-pos") %}
            {% for userguide_group_page in userguide_group %}
            <li>
              <a href="{{ site.baseurl }}{{ userguide_group_page.url }}">
                {% if userguide_group_page.top-nav-title %}{{ userguide_group_page.top-nav-title }}{% else %}{{ userguide_group_page.title }}{% endif %}
              </a>
            </li>
            {% endfor %}
          </ul>
        </li>
        <!-- Admin Guide -->
        <li class="dropdown">
		      <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Admin Guide<span class="caret"></span></a>
          <ul class="dropdown-menu">
            <li><a href="{{ site.baseurl }}/deployment/cluster">Cluster Setup</a></li>
            {% assign adminguide_group = (site.pages | where: "top-nav-group" , "admin-guide" | sort: "top-nav-pos") %}
            {% for adminguide_group_page in adminguide_group %}
            <li>
              <a href="{{ site.baseurl }}{{ adminguide_group_page.url }}">
                {% if adminguide_group_page.top-nav-title %}{{ adminguide_group_page.top-nav-title }}{% else %}{{ adminguide_group_page.title }}{% endif %}
              </a>
            </li>
            {% endfor %}
          </ul>
        </li>
        <!-- Tutorials -->
        <li class="dropdown">
		      <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Tutorials<span class="caret"></span></a>
          <ul class="dropdown-menu">
            <li class="dropdown-header"><strong>Basic</strong></li>
            <li><a href="{{ site.baseurl }}/tutorials/basic-1">Write Records (via Core Library)</a></li>
            <li><a href="{{ site.baseurl }}/tutorials/basic-2">Write Records (via Write Proxy)</a></li>
            <li><a href="{{ site.baseurl }}/tutorials/basic-3">Write Records to multiple streams</a></li>
            <li><a href="{{ site.baseurl }}/tutorials/basic-4">Atomic Write Records</a></li>
            <li><a href="{{ site.baseurl }}/tutorials/basic-5">Tailing Read Records</a></li>
            <li><a href="{{ site.baseurl }}/tutorials/basic-6">Rewind Read Records</a></li>
            <li role="separator" class="divider"></li>
            <li class="dropdown-header"><strong>Messaging</strong></li>
            {% assign messaging_group = (site.pages | where: "top-nav-group" , "messaging" | sort: "top-nav-pos") %}
            {% for messaging_group_page in messaging_group %}
            <li>
              <a href="{{ site.baseurl }}{{ messaging_group_page.url }}">
                {% if messaging_group_page.top-nav-title %}{{ messaging_group_page.top-nav-title }}{% else %}{{ messaging_group_page.title }}{% endif %}
              </a>
            </li>
            {% endfor %}
            <li role="separator" class="divider"></li>
            <li class="dropdown-header"><strong>Replicated State Machines</strong></li>
            {% assign rsm_group = (site.pages | where: "top-nav-group" , "replicatedstatemachine" | sort: "top-nav-pos") %}
            {% for rsm_group_page in rsm_group %}
            <li>
              <a href="{{ site.baseurl }}{{ rsm_group_page.url }}">
                {% if rsm_group_page.top-nav-title %}{{ rsm_group_page.top-nav-title }}{% else %}{{ rsm_group_page.title }}{% endif %}
              </a>
            </li>
            {% endfor %}
            <li role="separator" class="divider"></li>
            <li class="dropdown-header"><strong>Analytics</strong></li>
            <li><a href="{{ site.baseurl }}/tutorials/analytics-mapreduce">Process log streams using MapReduce</a></li>
          </ul>
        </li>
      </ul>
    </div><!--/.nav-collapse -->
  </div>
</nav>


<link rel="stylesheet" href="">
