(function(factory){if(typeof define==="function"&&define["amd"]){define(["video.js","videojs-contrib-ads"],function(videojs){factory(window,document,videojs)})}else if(typeof exports==="object"&&typeof module==="object"){var vjs=require("video.js");require("videojs-contrib-ads");factory(window,document,vjs)}else{factory(window,document,videojs)}})(function(window,document,videojs){"use strict";var extend=function(obj){var arg;var index;var key;for(index=1;index0?currentTime:0;var isPod=false;var totalAds=0;var adPosition;if(this.currentAd.getAdPodInfo()){isPod=true;adPosition=this.currentAd.getAdPodInfo().getAdPosition();totalAds=this.currentAd.getAdPodInfo().getTotalAds()}var remainingMinutes=Math.floor(remainingTime/60);var remainingSeconds=Math.floor(remainingTime%60);if(remainingSeconds.toString().length<2){remainingSeconds="0"+remainingSeconds}var podCount=": ";if(isPod&&totalAds>1){podCount=" ("+adPosition+" of "+totalAds+"): "}this.countdownDiv.innerHTML=this.settings.adLabel+podCount+remainingMinutes+":"+remainingSeconds;var playProgressRatio=currentTime/duration;var playProgressPercent=playProgressRatio*100;this.progressDiv.style.width=playProgressPercent+"%"}.bind(this);this.getPlayerWidth=function(){var retVal=parseInt(getComputedStyle(this.player.el()).width,10)||this.player.width();return retVal}.bind(this);this.getPlayerHeight=function(){var retVal=parseInt(getComputedStyle(this.player.el()).height,10)||this.player.height();return retVal}.bind(this);var hideAdControls_=function(){this.controlsDiv.style.height="14px";this.playPauseDiv.style.display="none";this.muteDiv.style.display="none";this.sliderDiv.style.display="none";this.fullscreenDiv.style.display="none"}.bind(this);var showAdControls_=function(){this.controlsDiv.style.height="37px";this.playPauseDiv.style.display="block";this.muteDiv.style.display="block";this.sliderDiv.style.display="block";this.fullscreenDiv.style.display="block"}.bind(this);var showPauseButton=function(){addClass_(this.playPauseDiv,"ima-paused");removeClass_(this.playPauseDiv,"ima-playing")}.bind(this);var showPlayButton=function(){addClass_(this.playPauseDiv,"ima-playing");removeClass_(this.playPauseDiv,"ima-paused")}.bind(this);var onAdPlayPauseClick_=function(){if(this.adPlaying){showPauseButton();this.adsManager.pause();this.adPlaying=false}else{showPlayButton();this.adsManager.resume();this.adPlaying=true}}.bind(this);var onAdMuteClick_=function(){if(this.adMuted){addClass_(this.muteDiv,"ima-non-muted");removeClass_(this.muteDiv,"ima-muted");this.adsManager.setVolume(1);this.player.muted(false);this.adMuted=false;this.sliderLevelDiv.style.width=this.player.volume()*100+"%"}else{addClass_(this.muteDiv,"ima-muted");removeClass_(this.muteDiv,"ima-non-muted");this.adsManager.setVolume(0);this.player.muted(true);this.adMuted=true;this.sliderLevelDiv.style.width="0%"}}.bind(this);var onAdVolumeSliderMouseDown_=function(){document.addEventListener("mouseup",onMouseUp_,false);document.addEventListener("mousemove",onMouseMove_,false)};var onMouseMove_=function(event){setVolumeSlider_(event)};var onMouseUp_=function(event){setVolumeSlider_(event);document.removeEventListener("mousemove",onMouseMove_);document.removeEventListener("mouseup",onMouseUp_)};var setVolumeSlider_=function(event){var percent=(event.clientX-this.sliderDiv.getBoundingClientRect().left)/this.sliderDiv.offsetWidth;percent*=100;percent=Math.min(Math.max(percent,0),100);this.sliderLevelDiv.style.width=percent+"%";this.player.volume(percent/100);this.adsManager.setVolume(percent/100);if(this.player.volume()==0){addClass_(this.muteDiv,"ima-muted");removeClass_(this.muteDiv,"ima-non-muted");this.player.muted(true);this.adMuted=true}else{addClass_(this.muteDiv,"ima-non-muted");removeClass_(this.muteDiv,"ima-muted");this.player.muted(false);this.adMuted=false}}.bind(this);var onAdFullscreenClick_=function(){if(this.player.isFullscreen()){this.player.exitFullscreen()}else{this.player.requestFullscreen()}}.bind(this);var onFullscreenChange_=function(){if(this.player.isFullscreen()){addClass_(this.fullscreenDiv,"ima-fullscreen");removeClass_(this.fullscreenDiv,"ima-non-fullscreen");if(this.adsManager){this.adsManager.resize(window.screen.width,window.screen.height,google.ima.ViewMode.FULLSCREEN)}}else{addClass_(this.fullscreenDiv,"ima-non-fullscreen");removeClass_(this.fullscreenDiv,"ima-fullscreen");if(this.adsManager){this.adsManager.resize(this.getPlayerWidth(),this.getPlayerHeight(),google.ima.ViewMode.NORMAL)}}}.bind(this);var onVolumeChange_=function(){var newVolume=this.player.muted()?0:this.player.volume();if(this.adsManager){this.adsManager.setVolume(newVolume)}if(newVolume==0){this.adMuted=true;addClass_(this.muteDiv,"ima-muted");removeClass_(this.muteDiv,"ima-non-muted");this.sliderLevelDiv.style.width="0%"}else{this.adMuted=false;addClass_(this.muteDiv,"ima-non-muted");removeClass_(this.muteDiv,"ima-muted");this.sliderLevelDiv.style.width=newVolume*100+"%"}}.bind(this);var seekContentToZero_=function(){this.player.off("loadedmetadata",seekContentToZero_);this.player.currentTime(0)}.bind(this);var playContentFromZero_=function(){this.player.off("loadedmetadata",playContentFromZero_);this.player.currentTime(0);this.player.play()}.bind(this);var resetIMA_=function(){this.adsActive=false;this.adPlaying=false;this.player.on("ended",this.localContentEndedListener);if(this.currentAd&&this.currentAd.isLinear()){this.adContainerDiv.style.display="none"}this.vjsControls.show();this.player.ads.endLinearAdMode();if(this.adTrackingTimer){clearInterval(this.adTrackingTimer)}if(this.adsManager){this.adsManager.destroy();this.adsManager=null}if(this.adsLoader&&!this.contentComplete){this.adsLoader.contentComplete()}this.contentComplete=false;this.allAdsCompleted=false}.bind(this);this.addEventListener=function(event,callback){if(this.adsManager){this.adsManager.addEventListener(event,callback)}}.bind(this);this.getAdsManager=function(){return this.adsManager}.bind(this);this.setContent=function(contentSrc,adTag,playOnLoad){window.console.log("WARNING: player.ima.setContent is deprecated. Use "+"player.ima.setContentWithAdTag instead.");this.setContentWithAdTag(contentSrc,adTag,playOnLoad)}.bind(this);this.setContentWithAdTag=function(contentSrc,adTag,playOnLoad){resetIMA_();this.settings.adTagUrl=adTag?adTag:this.settings.adTagUrl;changeSource_(contentSrc,playOnLoad)}.bind(this);this.setContentWithAdsResponse=function(contentSrc,adsResponse,playOnLoad){resetIMA_();this.settings.adsResponse=adsResponse?adsResponse:this.settings.adsResponse;changeSource_(contentSrc,playOnLoad)}.bind(this);this.changeAdTag=function(adTag){resetIMA_();this.settings.adTagUrl=adTag}.bind(this);var changeSource_=function(contentSrc,playOnLoad){if(!!this.player.currentSrc()){this.player.currentTime(0);this.player.pause()}if(contentSrc){this.player.src(contentSrc)}if(playOnLoad){this.player.on("loadedmetadata",playContentFromZero_)}else{this.player.on("loadedmetadata",seekContentToZero_)}}.bind(this);this.addContentEndedListener=function(listener){this.contentEndedListeners.push(listener)}.bind(this);this.addContentAndAdsEndedListener=function(listener){this.contentAndAdsEndedListeners.push(listener)}.bind(this);this.setAdBreakReadyListener=function(listener){this.adBreakReadyListener=listener}.bind(this);this.pauseAd=function(){if(this.adsActive&&this.adPlaying){showPauseButton();this.adsManager.pause();this.adPlaying=false}}.bind(this);this.resumeAd=function(){if(this.adsActive&&!this.adPlaying){showPlayButton();this.adsManager.resume();this.adPlaying=true}}.bind(this);var setUpPlayerIntervals_=function(){this.updateTimeIntervalHandle=setInterval(updateCurrentTime_,this.seekCheckInterval);this.seekCheckIntervalHandle=setInterval(checkForSeeking_,this.seekCheckInterval);this.resizeCheckIntervalHandle=setInterval(checkForResize_,this.resizeCheckInterval)}.bind(this);var updateCurrentTime_=function(){if(!this.contentPlayheadTracker.seeking){this.contentPlayheadTracker.currentTime=this.player.currentTime()}}.bind(this);var checkForSeeking_=function(){var tempCurrentTime=this.player.currentTime();var diff=(tempCurrentTime-this.contentPlayheadTracker.previousTime)*1e3;if(Math.abs(diff)>this.seekCheckInterval+this.seekThreshold){this.contentPlayheadTracker.seeking=true}else{this.contentPlayheadTracker.seeking=false}this.contentPlayheadTracker.previousTime=this.player.currentTime()}.bind(this);var checkForResize_=function(){var currentWidth=this.getPlayerWidth();var currentHeight=this.getPlayerHeight();if(this.adsManager&&(currentWidth!=this.adsManagerDimensions.width||currentHeight!=this.adsManagerDimensions.height)){this.adsManagerDimensions.width=currentWidth;this.adsManagerDimensions.height=currentHeight;this.adsManager.resize(currentWidth,currentHeight,google.ima.ViewMode.NORMAL)}}.bind(this);this.setShowCountdown=function(showCountdownIn){this.showCountdown=showCountdownIn;this.countdownDiv.style.display=this.showCountdown?"block":"none"}.bind(this);this.VERSION="0.2.0";this.settings;this.controlPrefix;this.contentPlayer;this.showCountdown;this.autoPlayAdBreaks;this.vjsControls;this.adContainerDiv;this.controlsDiv;this.countdownDiv;this.seekBarDiv;this.progressDiv;this.playPauseDiv;this.muteDiv;this.sliderDiv;this.sliderLevelDiv;this.fullscreenDiv;this.adDisplayContainer;this.adDisplayContainerInitialized=false;this.adsLoader;this.adsManager;this.adsRenderingSettings=null;this.adTagUrl;this.adsResponse;this.currentAd;this.contentTrackingTimer;this.adTrackingTimer;this.adsActive=false;this.adPlaying=false;this.adMuted=false;this.contentComplete=false;this.allAdsCompleted=false;this.updateTimeIntervalHandle;this.seekCheckIntervalHandle;this.seekCheckInterval=1e3;this.resizeCheckIntervalHandle;this.resizeCheckInterval=250;this.seekThreshold=100;this.contentPlayheadTracker={currentTime:0,previousTime:0,seeking:false,duration:0};this.adPlayheadTracker={currentTime:0,duration:0,isPod:false,adPosition:0,totalAds:0};this.adsManagerDimensions={width:0,height:0};this.contentEndedListeners=[];this.contentAndAdsEndedListeners=[];this.adBreakReadyListener=undefined;this.contentSource="";this.localContentEndedListener=function(){if(this.adsLoader&&!this.contentComplete){this.adsLoader.contentComplete();this.contentComplete=true}for(var index in this.contentEndedListeners){this.contentEndedListeners[index]()}if(this.allAdsCompleted){for(var index in this.contentAndAdsEndedListeners){this.contentAndAdsEndedListeners[index]()}}clearInterval(this.updateTimeIntervalHandle);clearInterval(this.seekCheckIntervalHandle);clearInterval(this.resizeCheckIntervalHandle);if(this.player.el()){this.player.one("play",setUpPlayerIntervals_)}}.bind(this);this.playerDisposedListener=function(){this.contentEndedListeners,this.contentAndAdsEndedListeners=[],[];this.contentComplete=true;this.player.off("ended",this.localContentEndedListener);if(this.player.ads.adTimeoutTimeout){clearTimeout(this.player.ads.adTimeoutTimeout)}var intervalsToClear=[this.updateTimeIntervalHandle,this.seekCheckIntervalHandle,this.adTrackingTimer,this.resizeCheckIntervalHandle];for(var index in intervalsToClear){var interval=intervalsToClear[index];if(interval){clearInterval(interval)}}if(this.adsManager){this.adsManager.destroy();this.adsManager=null}}.bind(this);this.settings=extend({},ima_defaults,options||{});if(!this.settings["id"]){window.console.log("Error: must provide id of video.js div");return}this.controlPrefix=this.settings.id+"_"||"";this.contentPlayer=document.getElementById(this.settings["id"]+"_html5_api");if(this.contentPlayer.hasAttribute("autoplay")){this.settings["adWillAutoPlay"]=this.settings["adWillAutoPlay"]||true}this.showCountdown=true;if(this.settings["showCountdown"]==false){this.showCountdown=false}this.autoPlayAdBreaks=true;if(this.settings["autoPlayAdBreaks"]==false){this.autoPlayAdBreaks=false}player.one("play",setUpPlayerIntervals_);player.on("ended",this.localContentEndedListener);player.on("dispose",this.playerDisposedListener);var contrib_ads_defaults={debug:this.settings.debug,timeout:this.settings.timeout,prerollTimeout:this.settings.prerollTimeout};var ads_plugin_settings=extend({},contrib_ads_defaults,options["contribAdsSettings"]||{});player.ads(ads_plugin_settings);this.adsRenderingSettings=new google.ima.AdsRenderingSettings;this.adsRenderingSettings.restoreCustomPlaybackStateOnAdBreakComplete=true;if(this.settings["adsRenderingSettings"]){for(var setting in this.settings["adsRenderingSettings"]){this.adsRenderingSettings[setting]=this.settings["adsRenderingSettings"][setting]}}if(this.settings["locale"]){google.ima.settings.setLocale(this.settings["locale"])}createAdContainer_();this.adsLoader=new google.ima.AdsLoader(this.adDisplayContainer);this.adsLoader.getSettings().setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED);if(this.settings.vpaidAllowed==false){this.adsLoader.getSettings().setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.DISABLED)}if(this.settings.vpaidMode){this.adsLoader.getSettings().setVpaidMode(this.settings.vpaidMode)}if(this.settings.locale){this.adsLoader.getSettings().setLocale(this.settings.locale)}if(this.settings.numRedirects){this.adsLoader.getSettings().setNumRedirects(this.settings.numRedirects)}this.adsLoader.getSettings().setPlayerType("videojs-ima");this.adsLoader.getSettings().setPlayerVersion(this.VERSION);this.adsLoader.getSettings().setAutoPlayAdBreaks(this.autoPlayAdBreaks);this.adsLoader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED,onAdsManagerLoaded_,false);this.adsLoader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR,onAdsLoaderError_,false);if(!readyCallback){readyCallback=this.startFromReadyCallback}player.on("readyforpreroll",readyCallback);player.ready(function(){player.on("fullscreenchange",onFullscreenChange_);player.on("volumechange",onVolumeChange_)})};videojs.plugin("ima",init)});