<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">

    {% include head.html %}

    <body>

        {% include header.html %}

        <!-- Content -->
        <div id="page">
            <div id="content">
                {{ content }}
            </div>
        </div>

        {% include footer.html %}

        <!-- Google Analytics -->
        <script type="text/javascript">
          (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
          (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
          m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
          })(window,document,'script','//www.google-analytics.com/analytics.js','ga');

          ga('create', 'UA-75289145-1', 'auto');
          ga('send', 'pageview');
        </script>

        <!-- Download tracking helper function -->
        <script type="text/javascript">

            /**
             * Signals Google Analytics that a file is being downloaded (or, at
             * least, we expect that it is). Note that it is not possible to
             * determine this with 100% certainty without grepping server logs,
             * but this should still at least help gauge interest/usage.
             *
             * @param {String} action
             *     A human-readable string describing the user event which
             *     occurred to initiate the download.
             *
             * @param {String} filename
             *     The filename of the file being downloaded.
             */
            function trackDownload(action, filename) {
                ga('send', 'event', {
                    eventCategory : 'Download',
                    eventAction   : action,
                    eventLabel    : filename,
                    transport     : 'beacon'
                });
            }

        </script>

        <!-- jQuery -->
        <script src="/scripts/jquery.min.js" type="text/javascript"></script>

        <!-- Dropdown toggle -->
        <script src="/scripts/dropdown.js" type="text/javascript"></script>

    </body>
</html>
