<!-- Bootstrap core JavaScript
    ================================================== -->
<!-- Placed at the end of the document so the pages load faster -->
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script>window.jQuery || document.write('<script src="assets/js/vendor/jquery-slim.min.js"><\/script>')</script>
<script src="assets/js/vendor/popper.min.js"></script>
<script src="assets/js/vendor/bootstrap.min.js"></script>

<script type="text/javascript">

	(function ($) {
	  "use strict";

	  // Mobile Navigation
	  if ($('.main-nav').length) {
	    var $mobile_nav = $('.main-nav').clone().prop({
	      class: 'mobile-nav d-lg-none'
	    });
	    $('body').append($mobile_nav);
	    $('body').prepend('<button type="button" class="mobile-nav-toggle d-lg-none"><i class="fa fa-bars"></i></button>');
	    $('body').append('<div class="mobile-nav-overly"></div>');

	    $(document).on('click', '.mobile-nav-toggle', function(e) {
	      $('body').toggleClass('mobile-nav-active');
	      $('.mobile-nav-toggle i').toggleClass('fa-times fa-bars');
	      $('.mobile-nav-overly').toggle();
	    });

	    $(document).on('click', '.mobile-nav .drop-down > a', function(e) {
	      e.preventDefault();
	      $(this).next().slideToggle(300);
	      $(this).parent().toggleClass('active');
	    });

	    $(document).click(function(e) {
	      var container = $(".mobile-nav, .mobile-nav-toggle");
	      if (!container.is(e.target) && container.has(e.target).length === 0) {
	        if ($('body').hasClass('mobile-nav-active')) {
	          $('body').removeClass('mobile-nav-active');
	          $('.mobile-nav-toggle i').toggleClass('fa-times fa-bars');
	          $('.mobile-nav-overly').fadeOut();
	        }
	      }
	    });
	  } else if ($(".mobile-nav, .mobile-nav-toggle").length) {
	    $(".mobile-nav, .mobile-nav-toggle").hide();
	  }

	})(jQuery);

</script>
