{% capture start %}{{site.baseurl}}/start{% endcapture %}
<nav class="navbar navbar-default navbar-fixed-top">
  <div class="container">
    <div class="navbar-header">
      <a href="/distributedlog" 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="">
