---
layout: default
---

<div class="post-header">
   <h1 class="post-title-main">{{ page.title }}</h1>
</div>

{% if page.simple_map == true %}

<script>
    $(document).ready ( function(){
        $('.box{{page.box_number}}').addClass('active');
    });
</script>

{% include custom/{{page.map_name}}.html %}

{% elsif page.complex_map == true %}

<script>
    $(document).ready ( function(){
        $('.modalButton{{page.box_number}}').addClass('active');
    });
</script>

{% include custom/{{page.map_name}}.html %}

{% endif %}

<div class="post-content">

   {% if page.summary %}
    <div class="summary">{{page.summary}}</div>
   {% endif %}

    {% unless page.toc == false %}
    {% include toc.html %}
    {% endunless %}

  {{content}}

    <div class="tags">
        {% if page.tags != null %}
        <b>Tags: </b>
        {% assign projectTags = site.data.tags.allowed-tags %}
        {% for tag in page.tags %}
        {% if projectTags contains tag %}
        <a href="{{ "tag_" | append: tag | append: ".html" }}" class="btn btn-default navbar-btn cursorNorm" role="button">{{page.tagName}}{{tag}}</a>
        {% endif %}
        {% endfor %}
        {% endif %}
    </div>

</div>

{{site.data.alerts.hr_shaded}}

{% include footer.html %}
