(CNN)The Dodge Challenger crept up, reversed, then accelerated toward the crowd. As he watched a surveillance video of that moment — the car barreling toward people protesting a white nationalist rally in Charlottesville, Virginia last summer — Marcus Martin grew angry and cursed out loud.
‘);$vidEndSlate.removeClass(‘video__end-slate–inactive’).addClass(‘video__end-slate–active’);}};CNN.autoPlayVideoExist = (CNN.autoPlayVideoExist === true) ? true : false;var configObj = {thumb: ‘none’,video: ‘us/2017/08/15/man-saves-fiance-intv-charlottesville-attack-newday.cnn’,width: ’100%’,height: ’100%’,section: ‘domestic’,profile: ‘expansion’,network: ‘cnn’,markupId: ‘body-text_4′,adsection: ‘const-article-inpage’,frameWidth: ’100%’,frameHeight: ’100%’,posterImageOverride: {“mini”:{“height”:124,”width”:220,”type”:”jpg”,”uri”:”//cdn.cnn.com/cnnnext/dam/assets/170815074017-man-saves-fiance-intv-charlottesville-attack-newday-00002025-small-169.jpg”},”xsmall”:{“height”:173,”width”:307,”type”:”jpg”,”uri”:”//cdn.cnn.com/cnnnext/dam/assets/170815074017-man-saves-fiance-intv-charlottesville-attack-newday-00002025-medium-plus-169.jpg”},”small”:{“height”:259,”width”:460,”type”:”jpg”,”uri”:”//cdn.cnn.com/cnnnext/dam/assets/170815074017-man-saves-fiance-intv-charlottesville-attack-newday-00002025-large-169.jpg”},”medium”:{“height”:438,”width”:780,”type”:”jpg”,”uri”:”//cdn.cnn.com/cnnnext/dam/assets/170815074017-man-saves-fiance-intv-charlottesville-attack-newday-00002025-exlarge-169.jpg”},”large”:{“height”:619,”width”:1100,”type”:”jpg”,”uri”:”//cdn.cnn.com/cnnnext/dam/assets/170815074017-man-saves-fiance-intv-charlottesville-attack-newday-00002025-super-169.jpg”},”full16x9″:{“height”:900,”width”:1600,”type”:”jpg”,”uri”:”//cdn.cnn.com/cnnnext/dam/assets/170815074017-man-saves-fiance-intv-charlottesville-attack-newday-00002025-full-169.jpg”},”mini1x1″:{“height”:120,”width”:120,”type”:”jpg”,”uri”:”//cdn.cnn.com/cnnnext/dam/assets/170815074017-man-saves-fiance-intv-charlottesville-attack-newday-00002025-small-11.jpg”}}},autoStartVideo = false,isVideoReplayClicked = false,callbackObj,containerEl,currentVideoCollection = [],currentVideoCollectionId = ”,isLivePlayer = false,moveToNextTimeout,mutePlayerEnabled = false,nextVideoId = ”,nextVideoUrl = ”,turnOnFlashMessaging = false,videoPinner,videoEndSlateImpl;if (CNN.autoPlayVideoExist === false) {autoStartVideo = false;if (autoStartVideo === true) {if (turnOnFlashMessaging === true) {autoStartVideo = false;containerEl = jQuery(document.getElementById(configObj.markupId));CNN.VideoPlayer.showFlashSlate(containerEl);} else {CNN.autoPlayVideoExist = true;}}}configObj.autostart = autoStartVideo;CNN.VideoPlayer.setPlayerProperties(configObj.markupId, autoStartVideo, isLivePlayer, isVideoReplayClicked, mutePlayerEnabled);CNN.VideoPlayer.setFirstVideoInCollection(currentVideoCollection, configObj.markupId);videoEndSlateImpl = new CNN.VideoEndSlate(‘body-text_4′);/*** Finds the next video ID and URL in the current collection, if available.* @param currentVideoId The video that is currently playing* @param containerId The parent container Id of the video element*/function findNextVideo(currentVideoId) {var i,vidObj;if (currentVideoId jQuery.isArray(currentVideoCollection) currentVideoCollection.length 0) {for (i = 0; i 0) {videoEndSlateImpl.showEndSlateForContainer();}}}callbackObj = {onPlayerReady: function (containerId) {CNN.VideoPlayer.reportLoadTime(containerId);CNN.VideoPlayer.handleInitialExpandableVideoState(containerId);CNN.VideoPlayer.handleAdOnCVPVisibilityChange(containerId, CNN.pageVis.isDocumentVisible());if (Modernizr !Modernizr.phone !Modernizr.mobile !Modernizr.tablet) {var containerClassId = ‘#’ + containerId;if (jQuery(containerClassId).parents(‘.js-pg-rail-tall__head’).length) {videoPinner = new CNN.VideoPinner(containerClassId);videoPinner.init();} else {CNN.VideoPlayer.hideThumbnail(containerId);}}},/** Listen to the metadata event which fires right after the ad ends and the actual video playback begins*/onContentEntryLoad: function(containerId, playerId, contentid, isQueue) {CNN.VideoPlayer.showSpinner(containerId);},onContentMetadata: function (containerId, playerId, metadata, contentId, duration, width, height) {var endSlateLen = jQuery(document.getElementById(containerId)).parent().find(‘.js-video__end-slate’).eq(0).length;CNN.VideoSourceUtils.updateSource(containerId, metadata);if (endSlateLen 0) {videoEndSlateImpl.fetchAndShowRecommendedVideos(metadata);}},onAdPlay: function (containerId, cvpId, token, mode, id, duration, blockId, adType) {clearTimeout(moveToNextTimeout);CNN.VideoPlayer.hideSpinner(containerId);if (Modernizr !Modernizr.phone !Modernizr.mobile !Modernizr.tablet) {if (typeof videoPinner !== ‘undefined’ videoPinner !== null) {videoPinner.setIsPlaying(true);videoPinner.animateDown();}}},onTrackingFullscreen: function (containerId, PlayerId, dataObj) {CNN.VideoPlayer.handleFullscreenChange(containerId, dataObj);},onContentPlay: function (containerId, cvpId, event) {var playerInstance,prevVideoId;/** When the video content starts playing, inject analytics data* for Aspen (if enabled) and the companion ad layout* (if it was set when the ad played) should switch back to* epic ad layout. onContentPlay calls updateCompanionLayout* with the ‘restoreEpicAds’ layout to make this switch*/if (CNN.companion typeof CNN.companion.updateCompanionLayout === ‘function’) {CNN.companion.updateCompanionLayout(‘restoreEpicAds’);}clearTimeout(moveToNextTimeout);CNN.VideoPlayer.hideSpinner(containerId);if (CNN.VideoPlayer.getLibraryName(containerId) === ‘fave’) {playerInstance = FAVE.player.getInstance(containerId) || null;} else {playerInstance = containerId window.cnnVideoManager.getPlayerByContainer(containerId).videoInstance.cvp || null;}prevVideoId = (window.jsmd window.jsmd.v (window.jsmd.v.eVar18 || window.jsmd.v.eVar4)) || ”;if (playerInstance typeof playerInstance.reportAnalytics === ‘function’) {if (prevVideoId.length === 0 document.referrer document.referrer.search(//videos//) = 0) {prevVideoId = document.referrer.replace(/^(?:http|https)://[^/]/videos/(.+.w+)(?:/video/playlists/.*)?$/, ‘/video/$1′);if (prevVideoId === document.referrer) {prevVideoId = ”;}}playerInstance.reportAnalytics(‘videoPageData’, {videoCollection: currentVideoCollectionId,videoBranding: CNN.omniture.branding_content_page,templateType: CNN.omniture.template_type,nextVideo: nextVideoId,previousVideo: prevVideoId,referrerType: ”,referrerUrl: document.referrer});}if (Modernizr !Modernizr.phone !Modernizr.mobile !Modernizr.tablet) {if (typeof videoPinner !== ‘undefined’ videoPinner !== null) {videoPinner.setIsPlaying(true);videoPinner.animateDown();}}},onContentReplayRequest: function (containerId, cvpId, contentId) {if (Modernizr !Modernizr.phone !Modernizr.mobile !Modernizr.tablet) {if (typeof videoPinner !== ‘undefined’ videoPinner !== null) {videoPinner.setIsPlaying(true);var $endSlate = jQuery(document.getElementById(containerId)).parent().find(‘.js-video__end-slate’).eq(0);if ($endSlate.length 0) {$endSlate.removeClass(‘video__end-slate–active’).addClass(‘video__end-slate–inactive’);}}}},onContentBegin: function (containerId, cvpId, contentId) {CNN.VideoPlayer.mutePlayer(containerId);if (CNN.companion typeof CNN.companion.updateCompanionLayout === ‘function’) {CNN.companion.updateCompanionLayout(‘removeEpicAds’);}CNN.VideoPlayer.hideSpinner(containerId);clearTimeout(moveToNextTimeout);CNN.VideoSourceUtils.clearSource(containerId);jQuery(document).triggerVideoContentStarted();},onContentComplete: function (containerId, cvpId, contentId) {if (CNN.companion typeof CNN.companion.updateCompanionLayout === ‘function’) {CNN.companion.updateCompanionLayout(‘restoreFreewheel’);}navigateToNextVideo(contentId, containerId);},onContentEnd: function (containerId, cvpId, contentId) {if (Modernizr !Modernizr.phone !Modernizr.mobile !Modernizr.tablet) {if (typeof videoPinner !== ‘undefined’ videoPinner !== null) {videoPinner.setIsPlaying(false);}}},onCVPVisibilityChange: function (containerId, cvpId, visible) {CNN.VideoPlayer.handleAdOnCVPVisibilityChange(containerId, visible);}};if (typeof configObj.context !== ‘string’ || configObj.context.length 0) {configObj.adsection = window.ssid;}CNN.autoPlayVideoExist = (CNN.autoPlayVideoExist === true) ? true : false;CNN.VideoPlayer.getLibrary(configObj, callbackObj, isLivePlayer);});/* videodemanddust is a default feature of the injector */CNN.INJECTOR.scriptComplete(‘videodemanddust’);MUST WATCH