var Mediasite=window.Mediasite||{};Mediasite.Player=Mediasite.Player||{},Mediasite.Player.CurrentViewTracking=function(){function scheduleHeartbeat(){window.clearTimeout(h),h=window.setTimeout(onHeartbeat,b)}function onHeartbeat(){try{n.endSegment(),reportSegmentsSinceLastReport()}catch(i){t.Debug("Error in Playback Reporting onHeartbeat")}scheduleHeartbeat()}function reportSegmentsSinceLastReport(n){var t=f.getAllSegments();f.reset(),reportPlayed(t,n)}function handleSegmentStart(n){clearTimeout(i),u.fire(s.Start,n)}function handleSegmentEnd(n,t){f.addSegment(n,t),u.fire(s.End,n,t),clearTimeout(i)}function onPlaybackRateChanged(t){n.handlePlaybackRateChange(t)}function onPositionChanged(t){clearTimeout(i),i=setTimeout(function(){n.endSegment()},p),n.handlePositionChange(t)}function reportPlayed(n,i){var f=i!==!0,s,r,u;e&&o&&((u=calcBookmarkPosition(n,a()),r=toServiceSegments(n),r.length<1)||(e.ReportMediaView(JSON.stringify({playbackTicket:o,segments:r,bookmarkPosition:u}),f),l+=1,t.Debug("ReportMediaView "+makeReportMediaViewDescription(r,u)),t.Debug("ReportMediaView has been called "+l+" times.")))}function toServiceSegments(n){for(var r,u,e,o,t=[],f=function(){return t.length<1?null:t[t.length-1]},c=function(){var n=f();return n?n.StartTime+n.Duration:NaN},l=function(n,t){var i,u,r;u=n+t,i=f(),r=u-i.StartTime,i.Duration=r},s=function(n,i){t.push({StartTime:n,Duration:i})},h=function(n,t){t<=0||(Math.abs(n-c())<=y?l(n,t):s(n,t))},i=0;i0&&(i=Math.floor(n[n.length-1].end),isInNoBookmarkZone(i)&&(i=0)),i}function isInNoBookmarkZone(n){var t=c()-n;return t>0&&t<=w}var u,s;if(!(this instanceof Mediasite.Player.CurrentViewTracking))return new Mediasite.Player.CurrentViewTracking;var r=this,t=Mediasite.Logging&&Mediasite.Logging.LoggerFactory("Playback Reporting")||{Debug:function(){console.log(arguments)}},v=.5,p=2e3,b=3e4,y=1,w=3,a=function(){return!1},c=function(){return 0},l=0,i,h,e,o,f=new Mediasite.Player.WatchedSegmentsMemory,n=new Mediasite.Player.HeuristicPlayDetector;n.tolerance=v,n.segmentStartAction=handleSegmentStart,n.segmentEndAction=handleSegmentEnd,r.onPositionChanged=onPositionChanged,r.onPlaybackRateChanged=onPlaybackRateChanged,u=new Mediasite.Player.EventBundle,s=Mediasite.Player.CurrentViewTracking.Event,this.addHandler=function(n,t){u.addHandler(n,t)},r.trackPresentation=function(i){if(!i){t.Debug("Reporting cannot track presentation: no player API to attach to");return}var r=this;a=function(){return i.getPlayerState().isLive},c=function(){return Math.floor(i.getDuration())},i.addHandler("currenttimechanged",function(n){r.onPositionChanged(n.currentTime)}),i.addHandler("playbackratechanged",function(n){r.onPlaybackRateChanged(n.currentRate)});$(window).on("beforeunload",function(){n.endSegment(),reportSegmentsSinceLastReport(!0)});scheduleHeartbeat()},r.reportToDataProvider=function(n,i){if(!n||!i){t.Debug("Reporting cannot report to data provider: no playback ticket or data provider");return}o=n,e=i}},Mediasite.Player.HeuristicPlayDetector=function(){function startSegment(){i=t,n.segmentStartAction(i.position)}function createLogger(){return Mediasite.Logging&&Mediasite.Logging.LoggerFactory("Playback Reporting")||{Debug:function(){console.log(arguments)}}}var n=this,t=null,i=null;this.tolerance=.5,this.playbackRate=1,this.playingCalculator=Mediasite.Player.HeuristicPlayDetector.isProbablyPlaying,this.timeProvider=new Mediasite.Player.HeuristicPlayDetector.StandardTimeProvider,this.logger=createLogger(),this.segmentStartAction=function(){},this.segmentEndAction=function(){},this.handlePlaybackRateChange=function(n){this.playbackRate=n},this.handlePositionChange=function(r){var f,e=n.timeProvider.getCurrentTime()/1e3,u={time:e,position:r};if(t){try{f=n.playingCalculator(t.time,t.position,u.time,u.position,n.playbackRate,n.tolerance)}catch(o){(o.name=Mediasite.Player.HeuristicPlayDetector.ErrorNames.timeAnomaly)&&n.logger.Debug("Times provided by timeProvider were out of order."),f=!1}f?i||startSegment():n.endSegment()}t=u},this.endSegment=function(r){r=r||!1,i&&t&&n.segmentEndAction(i.position,t.position,r),i=null}},Mediasite.Player.HeuristicPlayDetector.isProbablyPlaying=function(n,t,i,r,u,f){var h,s,o,e=function(n){return typeof n!="number"&&(n=0),Math.max(0,n)};if(n=e(n),t=e(t),i=e(i),r=e(r),u=e(u),f=e(f),n>i)throw{name:"Argument Error",message:"time2 must be greater than time1."};return t>r?!1:(h=i-n,s=r-t,o=h*u,Math.abs(o-s)<=o*f)},Mediasite.Player.HeuristicPlayDetector.ErrorNames={timeAnomaly:"Time Anomaly"},Mediasite.Player.HeuristicPlayDetector.StandardTimeProvider=function(){var n=window.performance&&typeof window.performance.now=="function";this.getCurrentTime=function(){return n?window.performance.now():+new Date}},Mediasite.Player.CurrentViewTracking.Event={Start:"start",End:"end"},Mediasite.Player.StateReporting=function(){function getContainerUrl(){if(window.self!=window.top)try{var n=window.parent.document.location.href;return n?n:void 0}catch(t){}}if(!(this instanceof Mediasite.Player.StateReporting))return new Mediasite.Player.StateReporting;var n=this,u=Mediasite.Logging&&Mediasite.Logging.LoggerFactory("Playback Reporting")||{Debug:function(){console.log(arguments)}},f,t,r,i=!1;n.reportMediaOpened=function(){if(t&&!i){i=!0;var n={playbackTicket:f,playerType:"Javascript",mediaPlayerType:Mediasite.Player.MediaPlayerType.GetDisplayName(r),embeddedPlayer:window.self!=window.top,url:document.location.href},e=getContainerUrl();e&&(n.container=e),t.ReportMediaOpen(JSON.stringify(n)),u.Debug("Reporting media opened","\n mediaPlayerType="+n.mediaPlayerType,"\n url="+n.url,"\n embedded="+n.embeddedPlayer)}},n.setMediaPlayerType=function(n){r=n},n.watchPlayer=function(t){t.addHandler({playstatechanged:function(){n.reportMediaOpened()}})},n.reportToDataProvider=function(n,i){if(!n||!i){u.Debug("Reporting cannot report to data provider: no playback ticket or data provider");return}f=n,t=i}},Mediasite.Player.TimelineSegment=function(n,t){this.start=n,this.end=t},Mediasite.Player.TimelineSegment.prototype={clone:function(){return new Mediasite.Player.TimelineSegment(this.start,this.end)}},Mediasite.Player.WatchedSegmentsMemory=function(){var n=[];this.addSegment=function(t,i){n.push(new Mediasite.Player.TimelineSegment(t,i))},this.getAllSegments=function(){for(var i=[],t=0;t