( function() {
	'use strict';

    // Feature Test
	if ( 'querySelector' in document && 'addEventListener' in window ) {

		var goTopBtn = document.querySelector( '.generate-back-to-top' );

		var trackScroll = function() {
			var scrolled = window.pageYOffset;
			var coords = goTopBtn.getAttribute( 'data-start-scroll' ) ;

			if ( scrolled > coords ) {
				goTopBtn.style.opacity = '1';
				goTopBtn.style.visibility = 'visible';
			}

			if (scrolled < coords) {
				goTopBtn.style.opacity = '0';
				goTopBtn.style.visibility = 'hidden';
			}
		};

		// Function to animate the scroll
		var smoothScroll = function (anchor, duration) {
			// Calculate how far and how fast to scroll
			var startLocation = window.pageYOffset;
			var endLocation = document.body.offsetTop;
			var distance = endLocation - startLocation;
			var increments = distance/(duration/16);
			var stopAnimation;

			// Scroll the page by an increment, and check if it's time to stop
			var animateScroll = function () {
				window.scrollBy(0, increments);
				stopAnimation();
			};

			// Stop animation when you reach the anchor OR the top of the page
			stopAnimation = function () {
				var travelled = window.pageYOffset;
				if ( travelled <= (endLocation || 0) ) {
					clearInterval(runAnimation);
				}
			};

			// Loop the animation function
			var runAnimation = setInterval(animateScroll, 16);
		};

		if ( goTopBtn ) {
			// Show the button when scrolling down.
			window.addEventListener( 'scroll', trackScroll );

			// Scroll back to top when clicked.
			goTopBtn.addEventListener( 'click', function( e ) {
				e.preventDefault();
				smoothScroll( document.body, goTopBtn.getAttribute( 'data-scroll-speed' ) || 400 );
			}, false );
		}

	}

 } )();
