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