docs: function ( toggle, anchor, options, event ) {
  
  		// Options and overrides
  		options = _mergeObjects( _defaults, options || {} ); // Merge user options with defaults
  		var overrides = _getDataOptions( toggle ? toggle.getAttribute('data-options') : null );
  		var speed = parseInt(overrides.speed || options.speed, 10);
  		var easing = overrides.easing || options.easing;
  		var offset = parseInt(overrides.offset || options.offset, 10);
  		var updateURL = overrides.updateURL || options.updateURL;
  
  		// Selectors and variables
  		var fixedHeader = document.querySelector('[data-scroll-header]'); // Get the fixed header
  		var headerHeight = fixedHeader === null ? 0 : (fixedHeader.offsetHeight + fixedHeader.offsetTop); // Get the height of a fixed header if one exists
  		var startLocation = window.pageYOffset; // Current location on the page
  		var endLocation = _getEndLocation( document.querySelector(anchor), headerHeight, offset ); // Scroll to location
  		var animationInterval; // interval timer
  		var distance = endLocation - startLocation; // distance to travel
  		var documentHeight = _getDocumentHeight();
  		var timeLapsed = 0;
  		var percentage, position;
  
  		// Prevent default click event
  		if ( toggle && toggle.tagName === 'A' && event ) {
  			event.preventDefault();
  		}
  
  		// Update URL
  		_updateURL(anchor, updateURL);
  
  		// Stop the scroll animation when it reaches its target (or the bottom/top of page)
  		// Private method
  		// Runs functions
  		var _stopAnimateScroll = function (position, endLocation, animationInterval) {
  			var currentLocation = window.pageYOffset;
  			if ( position == endLocation || currentLocation == endLocation || ( (window.innerHeight + currentLocation) >= documentHeight ) ) {
  				clearInterval(animationInterval);
  				options.callbackAfter( toggle, anchor ); // Run callbacks after animation complete
  			}
  		};
  
  		// Loop scrolling animation
  		// Private method
  		// Runs functions
  		var _loopAnimateScroll = function () {
  			timeLapsed += 16;
  			percentage = ( timeLapsed / speed );
  			percentage = ( percentage > 1 ) ? 1 : percentage;
  			position = startLocation + ( distance * _easingPattern(easing, percentage) );
  			window.scrollTo( 0, Math.floor(position) );
  			_stopAnimateScroll(position, endLocation, animationInterval);
  		};
  
  		// Set interval timer
  		// Private method
  		// Runs functions
  		var _startAnimateScroll = function () {
  			options.callbackBefore( toggle, anchor ); // Run callbacks before animating scroll
  			animationInterval = setInterval(_loopAnimateScroll, 16);
  		};
  
  		// Reset position to fix weird iOS bug
  		// https://github.com/cferdinandi/smooth-scroll/issues/45
  		if ( window.pageYOffset === 0 ) {
  			window.scrollTo( 0, 0 );
  		}
  
  		// Start scrolling animation
  		_startAnimateScroll();
  
  	}