var SNPlayerUtil = {};
var control_button_clicked = false;
var control_button_cancel = false;
var isIE11 = !!navigator.userAgent.match(/Trident.*rv\:11\./); // via http://stackoverflow.com/questions/20089145/how-to-detect-ie11-using-jquery
if (isIE11) {
// Slower JS engines in VMs needs slightly more time.
SNPlayerUtil.DEFAULT_PLAYER_DETECTION_TIMEOUT_DURATION = 400;
}
else {
SNPlayerUtil.DEFAULT_PLAYER_DETECTION_TIMEOUT_DURATION = 400;
}
SNPlayerUtil.NEW_PLAYER_CREATION_TIMEOUT_DURATION = 3500;
var SNPlayerUtilException = function (message) {
'use strict';
this.name = "SNPlayerUtilException";
this.message = message;
};
SNPlayerUtilException.prototype = Error.prototype;
SNPlayerUtil.load_brightcove_js = function () {
'use strict';
if (window.SNPlayerUtil.is_processing_new_players === true) {
setTimeout(SNPlayerUtil.load_brightcove_js, SNPlayerUtil.DEFAULT_PLAYER_DETECTION_TIMEOUT_DURATION); // try again later;
return;
}
var useFallbackScript = function(scriptSource) {
var fallbackScript = document.createElement('script');
fallbackScript.src = scriptSource;
document.body.appendChild(fallbackScript);
fallbackScript.onload = SNPlayerUtil.on_brightcove_js_onload();
};
var playerMetaHashTable = SNPlayerUtil.get_new_bc_player_meta();
var publisher_id;
var player_id;
for (publisher_id in playerMetaHashTable) {
for (var i = 0 ; i < playerMetaHashTable[publisher_id].length ; i++) {
player_id = playerMetaHashTable[publisher_id][i];
var fallbackSrc = "//players.brightcove.net/" + publisher_id + "/" + player_id + "_default/index.min.js";
console.debug("Loading Brightcove Script with BC publisher ID:" + publisher_id + " and BC Player ID: " + player_id);
if(publisher_id != 1704050871) {
useFallbackScript(fallbackSrc);
} else {
// execute another copy of the script. This includes all plugins and JS plugin options on the BC end. Nice.
var s = document.createElement('script');
s.src = window.location.protocol + "//" + window.location.host + "/wp-content/files/index.min.js?querystring";
s.playerInfo = {"fallbackSrc": fallbackSrc}
document.body.appendChild(s);
s.onload = SNPlayerUtil.on_brightcove_js_onload();
s.onerror = function() {
useFallbackScript(this.playerInfo.fallbackSrc);
}
}
}
}
};
SNPlayerUtil.get_new_bc_player_meta = function () {
'use strict';
var new_video_bc_player_ids = SNPlayerUtil.get_new_SNPlayer_ids();
var playerMetaHashTable = {};
for (var i = 0 ; i < new_video_bc_player_ids.length ; i++) {
var publisher_id = $("#" + new_video_bc_player_ids[i]).data("account");
var player_id = $("#" + new_video_bc_player_ids[i]).data("player");
if (typeof(publisher_id) === "undefined" || typeof(player_id) === "undefined") {
continue;
}
playerMetaHashTable[publisher_id] = playerMetaHashTable[publisher_id] || [];
if ($.inArray(player_id, playerMetaHashTable[publisher_id]) === -1) { // -1 because it does an indexOf() operation.
playerMetaHashTable[publisher_id].push(player_id);
}
}
return playerMetaHashTable;
};
SNPlayerUtil.on_finished_processing_new_players = function(e) {
console.debug("SNPlayerUtil.on_finished_processing_new_players - Handle Event: snet.video.event.finished_processing_new_players.");
window.SNPlayerUtil = window.SNPlayerUtil || {};
window.SNPlayerUtil.is_processing_new_players = false; // unblock.
if (window.SNPlayerUtil.is_waiting_to_process_new_players) {
window.SNPlayerUtil.is_waiting_to_process_new_players = false;
SNPlayerUtil._on_videojs_detection_timeout() // proceed immediately.
}
else {
console.debug("Trigger Event: snet.video.event.finished_processing_new_players.");
$(window).trigger("snet.video.event.all_clear_processing_new_players");
}
return;
}
SNPlayerUtil.on_brightcove_js_onload = function () {
console.debug("on_brightcove_js_onload");
'use strict';
// delay and keep checking until videojs becomes available.
setTimeout(SNPlayerUtil._on_videojs_detection_timeout, SNPlayerUtil.DEFAULT_PLAYER_DETECTION_TIMEOUT_DURATION);
};
SNPlayerUtil._on_videojs_detection_timeout = function () {
window.SNPlayerUtil = window.SNPlayerUtil || {};
console.debug("_on_video_js_detection_timeout");
'use strict';
if ( typeof(videojs) === "undefined") {
console.warn("on_videojs_detection_timeout: Videojs not loaded yet. Retrying.");
setTimeout(SNPlayerUtil._on_videojs_detection_timeout, SNPlayerUtil.DEFAULT_PLAYER_DETECTION_TIMEOUT_DURATION); // try again later.
return;
}
else if (window.SNPlayerUtil.is_processing_new_players === true) {
console.warn("Still Processing new players. Waiting for event..."); // block;
window.SNPlayerUtil.is_waiting_to_process_new_players = true;
setTimeout(function() {
if (window.SNPlayerUtil.is_processing_new_players === true && window.SNPlayerUtil.is_waiting_to_process_new_players === true) {
console.warn("on_videojs_detection_timeout: Still Processing new players after waiting for block to clear, forcing unblock.");
$(document).trigger("snet.video.event.finished_processing_new_players"); // force unblock;
}
}, SNPlayerUtil.NEW_PLAYER_CREATION_TIMEOUT_DURATION);
return;
} else {
window.SNPlayerUtil.is_processing_new_players = true; // blocks more than one process of this function.
var video_ids_to_carry_over = [];
if ( typeof(window.SNPlayerUtil.new_video_player_ids) === "undefined" || window.SNPlayerUtil.new_video_player_ids.length <= 0 ) {
window.SNPlayerUtil.new_video_player_ids = []; // might as well clear it.
window.SNPlayerUtil.is_processing_new_players = false;
return false;
}
// After the brightcove script is loaded and players are activated, we need to run a new
// functions post load.
for ( var i = 0 ; i < window.SNPlayerUtil.new_video_player_ids.length ; i++ ) {
if (typeof(window.SNPlayerUtil.new_video_player_ids[i]) === "undefined" || window.SNPlayerUtil.new_video_player_ids[i] === null || window.SNPlayerUtil.new_video_player_ids[i].length <= 0) {
continue; // skip. Nothing to do here on this blank ID.
}
var videoPlayerId = window.SNPlayerUtil.new_video_player_ids[i];
var videoPlayer;
try {
videoPlayer = videojs.getPlayers()[videoPlayerId]; // safer way to get the player while players are creating.
if (typeof(videoPlayer) === "undefined") {
console.warn("Not able to find video player: " + videoPlayerId + ". Likely not created yet. Will retry.");
video_ids_to_carry_over.push(videoPlayerId); // carry over video ID to be processed on the next run.
continue; // skip this and keep the current player id new.
}
}
catch (error) {
// videojs has not been completely created by brightcove js. So, schedule another run.
console.warn("Appears brightcove / videojs is not fully loaded, will retry for player: " + videoPlayerId + ". \r\n Due to: " + error.message);
video_ids_to_carry_over.push(videoPlayerId); // carry over video ID to be processed on the next run.
continue; // skip this and keep the current player id new.
}
console.debug("_on_video_js_detection_timeout: approaching videoPlayer.ready() for: " + videoPlayerId);
videoPlayer.ready(function() {
var playerId = this.id();
var $player_div = $("#" + playerId);
var $player_wrapper = SNPlayerUtil.find_player_wrapper_and_get_jquery_element($player_div);
var $player_container = SNPlayerUtil.find_player_container_and_get_jquery_element($player_div);
var playerInstance = $player_wrapper.data("SNPlayer");
var video_id = playerInstance.template.split('data-video-id="')[1].split('"')[0];
SNPlayerUtil.add_loaded_metadata_event_handlers_on_SNPlayers(this);
SNPlayerUtil.add_geo_filtering_error_handler_on_SNPlayers( this, playerId );
//SNPlayerUtil.add_autoplay_switch_on_SNPlayers( playerId, this, playerInstance );
SNPlayerUtil.add_auto_caption( this );
SNPlayerUtil.add_omniture_on_SNPlayers( playerId, this );
SNPlayerUtil.add_comscore_on_SNPlayers( this );
SNPlayerUtil.add_adserverurl_on_SNPlayers( this, playerInstance, video_id, playerId );
if ( playerInstance.options.is_has_continuous_play === "true" || playerInstance.options.is_has_continuous_play === true ) {
SNPlayerUtil.add_continuousplay_on_SNPlayers( this );
}
SNPlayerUtil.add_ads_event_handlers_on_SNPlayers(playerId, this);
SNPlayerUtil.add_internet_explorer_11_handers_on_SNPlayers(this);
SNPlayerUtil.add_player_control_event_handers_on_SNPlayers(this);
$player_container.removeClass("not-ready");
$player_container.addClass("ready");
console.debug("SN Player Handlers set complete on: " + this.id());
});
window.SNPlayerUtil.new_video_player_ids[i] = null; // done with the ID. no longer new.
}
window.SNPlayerUtil.new_video_player_ids = []; // TODO: May or may not be thread safe, but FYI.
if (video_ids_to_carry_over.length > 0) {
window.SNPlayerUtil.new_video_player_ids = window.SNPlayerUtil.new_video_player_ids.concat(video_ids_to_carry_over);
console.debug("SNPlayerUtil._on_videojs_detection_timeout: " + window.SNPlayerUtil.new_video_player_ids.length + " New Player ID(s) still exist to carry over. Setting timeout().");
setTimeout(SNPlayerUtil._on_videojs_detection_timeout, SNPlayerUtil.DEFAULT_PLAYER_DETECTION_TIMEOUT_DURATION); //
}
if (window.SNPlayerUtil.new_video_player_ids.length === 0) {
console.debug("SNPlayerUtil._on_videojs_detection_timeout: Event trigger: snet.video.event.finished_processing_new_players");
$(document).trigger("snet.video.event.finished_processing_new_players");
}
return true;
}
};
SNPlayerUtil.pinned_video = function (player_id) {
var w = $(window);
var top = $("#snplayer_container_" + player_id).offset().top;
var offset = Math.floor(top + $("#snplayer_container_" + player_id).outerHeight() / 2);
var el_offset = $(window).height() - ($("#snplayer_container_" + player_id).outerHeight() / 2);
var videoType = 'SN-HTML5';
var org_h = $("#snplayer_container_" + player_id).outerHeight();
var org_v = $("#snplayer_container_" + player_id).outerWidth();
var org_h_ie = $("#" + player_id + "_Flash_api").outerHeight();
var org_v_ie = $("#" + player_id + "_Flash_api").outerWidth();
w.on("resize", function() {
top = $("#snplayer_container_" + player_id).offset().top,
offset = Math.floor(top + $("#snplayer_container_" + player_id).outerHeight() / 2),
el_offset = $(window).height() - ($("#snplayer_container_" + player_id).outerHeight() / 2),
org_h = $("#snplayer_container_" + player_id).outerHeight(),
org_v = $("#snplayer_container_" + player_id).outerWidth()
}).on("scroll", function() {
$("#featured-video").toggleClass("is-sticky", ((w.scrollTop() > offset) || ((w.scrollTop() + el_offset) < top)))
if($("#featured-video").hasClass("is-sticky")){
$("#" + player_id + "_Flash_api").css({"width": PinnedVideoWidth, "height": PinnedVideoHeight});
$("#" + player_id).width("100%").height("100%");
$("#snplayer_container_" + player_id).parent().height(org_h);
if($("#pipclose").length == 0) { $("#featured-video").prepend('
Close
'); }
$('#pipclose').on('click', function() { //PIP close button
$("#pipclose").remove();
if ($("#" + player_id).hasClass("vjs-ad-playing") && typeof(videojs(player_id).ima3.adsManager) !== "undefined" && videojs(player_id).ima3.adsManager !== null) {
videojs(player_id).ima3.adsManager.pause();
}
else {
videojs(player_id).pause();
}
$('#'+ player_id).closest('.snplayer-curtain').removeAttr('id').removeClass('is-sticky');
});
} else {
$("#" + player_id + "_Flash_api").css({"width": org_v_ie, "height": org_h_ie});
$("#" + player_id).width(org_v).height(org_h);
$("#pipclose").remove();
}
})
}
SNPlayerUtil.add_player_control_event_handers_on_SNPlayers = function (videoPlayer) {
videoPlayer.on("play", function(event) {
var $player_div = $("#" + this.id());
var $player_wrapper = SNPlayerUtil.find_player_wrapper_and_get_jquery_element($player_div);
var active_video_wrapper_id = $player_wrapper.attr("id");
$(".snplayer-wrapper.single-snplayer-only-plays:not(#" + active_video_wrapper_id + ")").SNPlayer("pause");
// pip starts
if(typeof pip_enabled !== 'undefined' && pip_enabled === true){
$(".snplayer-wrapper.single-snplayer-only-plays:not(#" + active_video_wrapper_id + ")").find('#featured-video').removeClass("is-sticky").removeAttr('id');
$('#' + this.id()).closest('.snplayer-curtain').attr('id', 'featured-video');
if($("#featured-video").hasClass("is-sticky")){
$("#" + this.id()).width("100%").height("100%");
}
SNPlayerUtil.pinned_video(this.id());
}
// pip ends
// Start Iris Video Change
var galleryTitle = $( '#main-title' ).text().trim();
var vjsTitle = $( '.vjs-title-display' );
vjsTitle.children( '.now-playing' ).remove();
vjsTitle = vjsTitle.text().trim();
if ( galleryTitle === "" ) {
$( '#main-title' ).text( vjsTitle );
}
// End Iris Video Change
});
videoPlayer.one("loadedmetadata", function( event ) {
if ( load_iris_right_rail['iris_right_rail'] == true ) {
var $player_div = $("#" + this.id());
var $player_wrapper = SNPlayerUtil.find_player_wrapper_and_get_jquery_element($player_div);
var active_video_wrapper_id = $player_wrapper.attr("id");
var iris_playlist_loaded_check = setInterval( function() {
var currentPlaylist = sniris.getPlaylist();
if ( currentPlaylist.length > 1 ) {
clearInterval( iris_playlist_loaded_check );
var sniris_container_id = 'sniris-' + active_video_wrapper_id;
var sniris_msg_container_id = 'sniris-msg-' + active_video_wrapper_id;
var active_video_wrapper_div = $('#' + active_video_wrapper_id);
$( '#' + sniris_msg_container_id ).remove();
active_video_wrapper_div.after('Video recommendations will return after the ad.
');
}
}, 500 );
}
});
videoPlayer.on("loadedmetadata", function( event ) {
if ( load_iris_right_rail['iris_right_rail'] == true ) {
var $player_div = $("#" + this.id());
var $player_wrapper = SNPlayerUtil.find_player_wrapper_and_get_jquery_element($player_div);
var active_video_wrapper_id = $player_wrapper.attr("id");
var iris_playlist_loaded_check = setInterval( function() {
var currentPlaylist = sniris.getPlaylist();
if ( currentPlaylist.length > 1 ) {
clearInterval( iris_playlist_loaded_check );
var sniris_container_id = 'sniris-' + active_video_wrapper_id;
var sniris_msg_container_id = 'sniris-msg-' + active_video_wrapper_id;
var active_video_wrapper_div = $('#' + active_video_wrapper_id);
sniris.addCallback.watch( SNPlayerUtil.update_sn_right_rail(sniris_container_id, videoPlayer) );
sniris.addCallback.next( SNPlayerUtil.update_sn_right_rail(sniris_container_id, videoPlayer) );
}
}, 1000 );
}
});
videoPlayer.on("pause", function(event) {
// pip starts
if(typeof pip_enabled !== 'undefined' && pip_enabled === true){
if(!$('#featured-video').hasClass('is-sticky')){
$('#' + this.id()).closest('.snplayer-curtain').removeAttr('id').removeClass('is-sticky');
}
}
// pip ends
});
videoPlayer.on("adsready", function() {
this.ima3.adsManager.$SNPlayer_ad_player_container = $(this.ima3.el);
this.ima3.adsManager.addEventListener(google.ima.AdEvent.Type.RESUMED, SNPlayerUtil._on_ima_ad_resumed);
});
videoPlayer.on("ended", function() {
var $player_div = $("#" + this.id());
var $play_button_small_div = $player_div.find(".vjs-control-bar .vjs-play-control");
$play_button_small_div.removeClass("vjs-ended vjs-paused");
});
};
SNPlayerUtil.update_sn_right_rail = function ( sniris_container_id, videoPlayer ) {
$('#' + sniris_container_id).empty();
var currentPlaylist = sniris.getPlaylist().slice( sniris.getCurrentIndex() );
videoPlayer.on("ads-pod-started", function() {
$(".sniris-right-rail-container-message p").each(function() {
$( this ).removeClass("sniris-hide");
$( this ).hide().fadeIn( 1000 );
});
});
videoPlayer.on("ads-allpods-completed", function() {
$(".sniris-right-rail-container-message p").each(function() {
$( this ).addClass("sniris-hide");
});
});
for ( var i = 0; i < 3; i++ ) {
var asset = currentPlaylist[i + 1];
$('#' + sniris_container_id).append('');
var rightRailDivWrapper = document.getElementById( sniris_container_id );
var rightRailDiv = rightRailDivWrapper.getElementsByClassName("sniris-right-rail")[i];
rightRailDiv.getElementsByClassName("title")[0].innerHTML = asset.title;
rightRailDiv.getElementsByClassName("thumbnail")[0].innerHTML = "";
rightRailDiv.setAttribute("data-iris-index", i + 1);
rightRailDiv.addEventListener("click", function(){ sniris.skipToIndex(sniris.getCurrentIndex() + parseInt(this.attributes["data-iris-index"].value)) });
//sniris.forceNextRequest();
}
/*
videoPlayer.on("ads-allpods-completed", function() {
$('#' + sniris_container_id).hide().fadeIn( 2000 );
});
*/
};
SNPlayerUtil.find_player_container_and_get_jquery_element = function ($element_container) {
var $parent_element = $element_container.parent();
if ($element_container.hasClass("snplayer-container")) {
return $element_container;
}
else if ($.isEmptyObject($element_container) || $element_container.length <= 0) {
return false; // likely an invalid ID passed.
}
else {
return (SNPlayerUtil.find_player_container_and_get_jquery_element($parent_element));
}
};
SNPlayerUtil.find_player_wrapper_and_get_jquery_element = function ($element_wrapper) {
var $parent_wrapper = $element_wrapper.parent();
if ($element_wrapper.hasClass("snplayer-wrapper")) {
return $element_wrapper;
}
else if ($.isEmptyObject($element_wrapper) || $element_wrapper.length <= 0) {
return false; // likely an invalid ID or singleton clas passed.
}
else {
return (SNPlayerUtil.find_player_wrapper_and_get_jquery_element($parent_wrapper));
}
};
SNPlayerUtil.add_internet_explorer_11_handers_on_SNPlayers = function(videoPlayer) {
'use strict';
var isIE11 = !!navigator.userAgent.match(/Trident.*rv\:11\./); // via http://stackoverflow.com/questions/20089145/how-to-detect-ie11-using-jquery
// Resize issue appearing on Firefox as of 49.0.2 - Possibly a temporary issue
var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') > -1; // via http://stackoverflow.com/questions/7000190/detect-all-firefox-versions-in-js
// apply resize handler if there are any flash video players if any exist on resize.
// Mainly for IE11.
if (isIE11 || isFirefox) {
videoPlayer.on("ready", function() {
var player_id = this.id();
var $player = $("#" + player_id);
var $player_wrapper = SNPlayerUtil.find_player_wrapper_and_get_jquery_element($player);
var width = $player_wrapper.parent().width();
var height_aspect_ratio = 0.5625;
var height = Math.floor(width * height_aspect_ratio);
if ($("#" + player_id).hasClass("vjs-fullscreen")) {
$("#" + player_id).width("100%").height("100%");
}
else {
$("#" + player_id).width("100%").height(height);
}
});
var player_id = videoPlayer.id();
$(window).on("throttledresize", function(e) {
var $player = $("#" + player_id);
var $player_wrapper = SNPlayerUtil.find_player_wrapper_and_get_jquery_element($player);
if (!$player_wrapper) {
return;
}
var width = $player_wrapper.parent().width();
var height_aspect_ratio = 0.5625;
var height = Math.floor(width * height_aspect_ratio);
if ($("#" + player_id).hasClass("vjs-fullscreen")) {
$("#" + player_id + "_Flash_api").width("100%").height("100%");
$("#" + player_id).width("100%").height("100%");
}
else {
$("#" + player_id + "_Flash_api").width(width).height(height);
$("#" + player_id).width("100%").height(height);
}
}); // requires jquery.mobile.
// this is needed because videoplayer.ready won't activate without a height from a wrapper/container.
$(window).trigger("throttledresize");
}
};
SNPlayerUtil.get_new_SNPlayer_ids = function () {
'use strict';
// If a video tag has already been activated by brightcove, it will
// have the following pattern at the end. Make sure to watch for this
// after every player version update.
var already_init_bc_html5_player_id_pattern = /_html5_api$/;
var new_video_tag_ids = [];
var video_elements = document.getElementsByTagName("video");
for (var i = 0; i < video_elements.length ; i++) {
if ( typeof(video_elements[i].id) !== "undefined" && !video_elements[i].id.match(already_init_bc_html5_player_id_pattern)) {
if (!$("#" + video_elements[i].id).data("sn_video_is_pre_sensed")) { // to prevent it from being picked up again
new_video_tag_ids.push(video_elements[i].id);
$("#" + video_elements[i].id).data("sn_video_is_pre_sensed", true);
}
}
}
window.SNPlayerUtil = window.SNPlayerUtil || {};
if ($.isArray(window.SNPlayerUtil.new_video_player_ids)) {
window.SNPlayerUtil.new_video_player_ids = window.SNPlayerUtil.new_video_player_ids.concat(new_video_tag_ids);
}
else {
window.SNPlayerUtil.new_video_player_ids = new_video_tag_ids;
}
return window.SNPlayerUtil.new_video_player_ids;
};
SNPlayerUtil.add_loaded_metadata_event_handlers_on_SNPlayers = function(videoPlayer) {
videoPlayer.on("loadstart", SNPlayerUtil._on_player_loadstart);
videoPlayer.on("loadedmetadata", SNPlayerUtil._on_player_loadedmetadata);
};
SNPlayerUtil.add_player_custom_widgets = function (player) {
// Add the Auto Play Switch if the player is enabled for it.
if (player.options.is_has_autoplay_switch) {
template += player.get_autoplay_checkbox_template();
player.init_autoplay_switch()
}
};
SNPlayerUtil._on_player_loadstart = function() {
// This code was previously in SNPlayerUtil._on_player_loadedmetadata but due to a failure to fire loadedmetadata
// in certain scenarios per https://rogers.atlassian.net/browse/SPNETREBRAND-9813?focusedCommentId=506883&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-506883
// It fails to remove the logo animation. So we use loadstart instead for now.
console.debug("SNPlayerUtil._on_player_loadstart");
var $player = $("#" + this.id());
var $player_wrapper = SNPlayerUtil.find_player_wrapper_and_get_jquery_element($player);
var $player_container = SNPlayerUtil.find_player_container_and_get_jquery_element($player);
var is_has_autoplay_switch = $player_wrapper.data("SNPlayer").options.is_has_autoplay_switch;
var is_iOS_device = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;
var is_auto_play_local_storage = false;
if (is_has_autoplay_switch) {
is_auto_play_local_storage = window.parent.localStorage.getItem( 'videoAutoPlayOption' );
}
var is_attr_autoplay = $player.attr("autoplay");
var is_autoplay;
is_autoplay = typeof(is_attr_autoplay) !== "undefined";
if ( is_auto_play_local_storage !== null ) {
is_autoplay = is_auto_play_local_storage === "true" ? true : false;
}
var is_play_video_on_clip_change_request = $player_wrapper.data("video_play_on_clip_change_request");
console.debug("SNPlayerUtil._on_player_loadstart: Event trigger: snet.video.event.player_video_clip_changed");
$(document).trigger("snet.video.event.player_video_clip_changed", [this.mediainfo.id, $player_wrapper.attr("id")]);
console.debug("SNPlayerUtil._on_player_loadstart: NOW READY.");
$player_container.removeClass("not-ready");
$player_container.addClass("ready");
is_autoplay = false;
if ( (is_autoplay || is_play_video_on_clip_change_request) && !is_iOS_device) {
this.play();
}
}
SNPlayerUtil._on_player_loadedmetadata = function() {
console.debug("SNPlayerUtil._on_player_loadedmetadata (check to see if we're not in SNPlayerUtil._on_player_loadstart)");
var $player = $("#" + this.id());
var $player_container = SNPlayerUtil.find_player_container_and_get_jquery_element($player);
if ($player_container.hasClass("not-ready")) {
$player_container.removeClass("not-ready");
SNPlayerUtil._on_player_loadstart.call(this);
}
};
SNPlayerUtil.add_geo_filtering_error_handler_on_SNPlayers = function( v, vid ) {
v.one('bc-catalog-error', function(){
var myPlayer = this,
specificError;
myPlayer.errors({
'errors': {
'-3': {
'headline': 'The video you are trying to watch cannot be viewed from your current country or location.',
'type': 'CLIENT_GEO'
}
}
});
if (typeof(myPlayer.catalog.error) !== 'undefined') {
specificError = myPlayer.catalog.error.data[0];
if (specificError !== 'undefined' & specificError.error_subcode == "CLIENT_GEO") {
var template = '';
template += '
THIS CONTENT IS UNAVAILABLE IN YOUR REGION
';
template += '
';
$( "#snplayer_container_" + vid ).append( template );
$( "#snplayer_container_" + vid ).removeClass( "not-ready" );
};
};
});
v.ready(function(){
var myPlayer = this;
});
}
SNPlayerUtil.add_auto_caption = function(v) {
var cc_storage = 'cc_enabled';
var exec = function () {
// turn CC on if enabled
if(window.localStorage.getItem(cc_storage) === 'true') {
var tracks = v.textTracks();
for(var i =0; i < tracks.length; i++){
if(tracks[i].language === 'en'){ v.textTracks()[i].mode = "showing"; }
}
$('#' + v.id() + ' div.vjs-subs-caps-button .vjs-menu-content .vjs-menu-item.vjs-captions-menu-item').trigger('click');
}
// set storage
var $cc_menu_items = $("#" + v.id() + ' div.vjs-subs-caps-button .vjs-menu-content .vjs-menu-item:not(.vjs-texttrack-settings)');
$cc_menu_items.on('click touchend', function(el){
if($(this).hasClass('vjs-subtitles-menu-item') || $(this).hasClass('vjs-captions-menu-item')) {
window.localStorage.setItem(cc_storage, true);
} else {
window.localStorage.setItem(cc_storage, false);
}
});
}
v.on('loadeddata', exec);
v.on("ads-allpods-completed", exec);
};
SNPlayerUtil.add_autoplay_switch_on_SNPlayers = function( vid, v, pinstance ) {
'use strict';
if (pinstance.options.is_has_autoplay_switch) {
var is_auto_play_local_storage = window.parent.localStorage.getItem( 'videoAutoPlayOption' );
if ( is_auto_play_local_storage !== null ) {
if (is_auto_play_local_storage === "true") {
$("#" + vid).prop('autoplay', is_auto_play_local_storage);
}
}
v.ready( function() {
var $player_div = $("#" + this.id());
var $player_wrapper = SNPlayerUtil.find_player_wrapper_and_get_jquery_element($player_div);
var pinstance = $player_wrapper.data("SNPlayer");
var autoplay_switch_template = pinstance.get_autoplay_checkbox_template();
var $player_control_bar = $player_div.find(".vjs-control-bar");
// $player_control_bar.find(".vjs-volume-menu-button").after(autoplay_switch_template);
$player_control_bar.find(".vjs-volume-panel").after(autoplay_switch_template);
var $autoplay_switch_box = $player_control_bar.find(".vjs-sn-autoplay-switch");
var videoAutoPlayCheckBox = $autoplay_switch_box.find('#videoAutoPlayCheckBoxToggle')[0];
// Set autoplay switch to true by default (if no localstorage value is set)
if ( window.parent.localStorage.getItem( videoAutoPlayCheckBox.getAttribute( "store" ) ) === null ) {
window.parent.localStorage.setItem( videoAutoPlayCheckBox.getAttribute( "store" ), true );
}
videoAutoPlayStorage(videoAutoPlayCheckBox);
function videoAutoPlayStorage(box) {
var storageId = box.getAttribute("store");
var oldVal = window.parent.localStorage.getItem(storageId);
box.checked = oldVal === "true" ? true : false;
box.addEventListener("change", function() {
window.parent.localStorage.setItem(storageId, this.checked);
// Analytics object check.
if ( window.parent.SN_ANALYTICS_IS_GAQ ) {
window.parent.sn_analytics_video_autoplay_tracking_click(this.checked);
}
});
}
});
}
};
SNPlayerUtil.add_omniture_on_SNPlayers = function (vid, v) {
v.ready(function() {
try {
DtmVideoAnalytics.run( vid );
} catch (e) {
console.log(e);
}
});
};
SNPlayerUtil.add_comscore_on_SNPlayers = function (v) {
'use strict';
var sn_video_comscore = v;
// On Ad Start
sn_video_comscore.on('adend', function() {
clearTimeout(COMSCORE.legacyTimeout);
COMSCORE.legacyTimeout = setTimeout(function(){
if (COMSCORE.firstStart === undefined || COMSCORE.firstStart == 0) {
COMSCORE.firstStart=1;
(self.COMSCORE && COMSCORE.beacon({c1: "1", c2: "3005682", c3: "", c4: "9554391", c5: "060612", c6: ""}));
}
}, 3000);
});
sn_video_comscore.on('adstart', function() {
clearTimeout(COMSCORE.legacyTimeout);
COMSCORE.firstStart = 0;
COMSCORE.adLoaded = 1;
(self.COMSCORE && COMSCORE.beacon({c1: "1", c2: "3005682", c3: "", c4: "9554391", c5: "010100", c6: ""}));
});
// On Start and Resume
sn_video_comscore.on('play', function() {
clearTimeout(COMSCORE.legacyTimeout);
COMSCORE.legacyTimeout = setTimeout(function(){
if ( (COMSCORE.adLoaded === undefined || COMSCORE.adLoaded == 0) && (COMSCORE.firstStart === undefined || COMSCORE.firstStart == 0) ) {
COMSCORE.firstStart=1;
(self.COMSCORE && COMSCORE.beacon({c1: "1", c2: "3005682", c3: "", c4: "9554391", c5: "060612", c6: ""}));
}
}, 3000);
});
sn_video_comscore.on('ended', function() {
COMSCORE.adLoaded = 0;
COMSCORE.firstStart = 0;
COMSCORE.legacyTimout = 0;
});
};
SNPlayerUtil.add_adserverurl_on_SNPlayers = function ( v, pinstance, video_id, playerId ) {
v.ready( function() {
var updated_ad_server_url = "";
var ad_server_url_vid_id_pattern = /\&vid=[0-9]+\&/i;
let adserverurl_modify = pinstance.options.adserverurl;
adserverurl_modify = adserverurl_modify.replace( '{999}', v.mediainfo.duration );
if ( window.getIndexAds ) {
v.ima3.settings.serverUrlOriginal = pinstance.options.adserverurl;
var so = {preroll:{1:{1:{siteID:191888},2:{siteID:191889}}}};
updated_ad_server_url = window.getIndexAds( adserverurl_modify.replace( ad_server_url_vid_id_pattern, "&vid=" + video_id + "&" ), so);
} else {
updated_ad_server_url = adserverurl_modify.replace( ad_server_url_vid_id_pattern, "&vid=" + video_id + "&" );
}
v.ima3.settings.serverUrl = updated_ad_server_url;
console.debug( "SNPlayer: " + playerId + ": New A.S.Url = " + v.ima3.settings.serverUrl );
});
};
SNPlayerUtil.add_continuousplay_on_SNPlayers = function ( v ) {
//v.off( 'ended', SNPlayerUtil._on_videoplayer_ended );
//v.on( 'ended', SNPlayerUtil._on_videoplayer_ended );
v.on("pause", function(event) {
var video_duration = v.duration();
var video_current_time = v.currentTime();
console.debug('Current time: '+video_duration);
console.debug('Total Duration: '+video_current_time);
if ( 0 === video_duration ) {
return;
}
if ( video_current_time >= video_duration ) {
console.debug('TRANSITIONING TO NEXT VIDEO');
SNPlayerUtil._on_videoplayer_ended();
}
});
}
SNPlayerUtil._on_videoplayer_ended = function () {
if ( $( "*[id*=SNPlayer_]" ).hasClass('vjs-fullscreen') ) {
if ( document.exitFullscreen ) {
document.exitFullscreen();
} else if ( document.webkitExitFullscreen ) {
document.webkitExitFullscreen();
} else if ( document.mozCancelFullScreen ) {
document.mozCancelFullScreen();
} else if ( document.msExitFullscreen ) {
document.msExitFullscreen();
} else {
document.exitFullscreen();
document.webkitExitFullscreen();
document.mozCancelFullScreen();
document.msExitFullscreen();
}
}
// SNPlayerUtil.video_out();
// SNPlayerUtil.next_video_counter_in();
// $( "#nextvid-in-thumbnail" ).html('');
// $( ".nextvid-in-title" ).html( $('.next-up[data-video_title]').attr('data-video_title') );
// $( ".nextvid-in-date" ).html( $('.next-up[data-video_date]').attr('data-video_date') );
// SNPlayerUtil.continuous_play_button_play();
// SNPlayerUtil.continuous_play_button_cancel();
// SNPlayerUtil.continuous_play_button_replay();
// SNPlayerUtil.start_continuous_play( $( "#nextvid-in-counter" ), 5 );
}
SNPlayerUtil._on_ima_ad_resumed = function(e) {
// "this" in this context is the google.ima.AdsManager object.
var $player_div = this.$SNPlayer_ad_player_container; // This should be the div of the ad container.
var $player_wrapper = SNPlayerUtil.find_player_wrapper_and_get_jquery_element($player_div);
var active_video_wrapper_id = $player_wrapper.attr("id"); // Hopefully this gives us a reliable way of referencing the wrapper ID.
$(".snplayer-wrapper.single-snplayer-only-plays:not(#" + active_video_wrapper_id + ")").SNPlayer("pause");
// pip starts
if(typeof pip_enabled !== 'undefined' && pip_enabled === true){
$(".snplayer-wrapper.single-snplayer-only-plays:not(#" + active_video_wrapper_id + ")").find('#featured-video').removeClass("is-sticky").removeAttr('id');
$player_div.closest('.snplayer-curtain').attr('id', 'featured-video');
SNPlayerUtil.pinned_video($player_div.parent().attr('id'));
}
// pip ends
}
SNPlayerUtil.start_continuous_play = function ( $element, num ) {
control_button_clicked = false;
control_button_cancel = false;
(function loop() {
$element.html( num );
if ( control_button_cancel === false && num-- ) {
setTimeout( loop, 1000 );
}
if ( control_button_clicked === false && num === -1 ) {
/*
if ( typeof _gaq !== 'undefined' ) { // Update Google Analytics continuous play event
_gaq.push( ["_trackEvent", "Continuous Play - Video", up_next.getAttribute( "data-title" ), up_next.getAttribute( "data-thumb-unique" )] );
}
*/
SNPlayerUtil.next_video_counter_out(); // cleanup styles
SNPlayerUtil.play_next_video();
SNPlayerUtil.video_in();
}
if ( control_button_clicked === true && num === -1 ) {
control_button_clicked = false;
}
})();
}
SNPlayerUtil.play_next_video = function () {
// Check to see if the clip currently playing is the same one. If it is, do not trigger.
var current_video_strip_id = window.SNVideoStripGroup.current_video_strip_term_id;
$(document).trigger("snet.video.event.clip_change_request", [$('a.next-up[data-video_strip_term_id=' + current_video_strip_id + ']').data('bc_video_id'), $(".gallery_player").attr("id"), true]);
var stateData = {};
stateData.bc_video_id = $( '.next-up[data-bc_video_id]' ).attr( 'data-bc_video_id' ).toString();
stateData.video_strip_term_id = $( '.next-up[data-video_strip_term_id]' ).attr( 'data-video_strip_term_id' ).toString();
history.pushState( stateData, $( '.next-up[data-video_title]' ).attr('data-video_title') + " - Sportsnet.ca", $( '.next-up[data-video_title]' ).attr('href') );
//SNPlayerUtil.continous_play_loading_logo();
};
SNPlayerUtil.continous_play_loading_logo = function() {
$( ".video-loader" ).addClass( "video-simpleload" ).css( { "display": "block" } );
$( "*[id*=video_container]" ).css( { "visibility": "hidden" } );
setTimeout( function() {
$( ".video-loader" ).removeClass( "video-simpleload" ).css( { "display": "none" } );
$( "*[id*=video_container]" ).addClass( "video-fadein" );
$( "*[id*=video_container]" ).find( "video" ).addClass( "video-fadein" );
$( "*[id*=video_container]" ).css( { "visibility": "visible" } );
}, 3000);
}
// This attaches an event for the play button that appears on the continuous play screen
SNPlayerUtil.continuous_play_button_play = function () {
$( ".nextvid-in-play-button" ).on("click", function() {
control_button_clicked = true;
/*
if ( typeof _gaq !== 'undefined' ) { // Update Google Analytics continuous play event
_gaq.push( ["_trackEvent", "Continuous Play - Video", up_next.getAttribute( "data-title" ), up_next.getAttribute( "data-thumb-unique" )] );
}
*/
SNPlayerUtil.next_video_counter_out();
SNPlayerUtil.video_in();
SNPlayerUtil.play_next_video();
});
};
// This attaches an event for the cancel button that appears on the continuous play screen
SNPlayerUtil.continuous_play_button_cancel = function () {
$( ".nextvid-in-cancel-button" ).on("click", function() {
control_button_clicked = true;
control_button_cancel = true;
});
};
// This attaches an event for the replay button that appears on the continuous play screen
SNPlayerUtil.continuous_play_button_replay = function () {
$( ".nextvid-in-replay-button" ).on("click", function() {
control_button_clicked = true;
SNPlayerUtil.next_video_counter_out();
SNPlayerUtil.video_in();
$( ".vjs-big-play-button" ).click();
});
};
SNPlayerUtil.video_in = function () {
$( ".snplayer-wrapper" ).removeClass( "video-fadeout" ).addClass( "video-fadein" );
setTimeout( function () {
$( ".snplayer-wrapper" ).removeClass( "video-fadein" );
}, 2000 ); // must remove class completely from div - conflict with BC video player on fullscreen
}
SNPlayerUtil.video_out = function () {
$( ".snplayer-wrapper" ).removeClass( "video-fadein" ).addClass( "video-fadeout" );
}
SNPlayerUtil.next_video_counter_in = function () {
$( ".nextvid-in" ).css( { "display": "inline-block" } );
$( "#nextvid-in-counter" ).css( { "display": "inline-block" } );
$( "#nextvid-in-thumbnail" ).css( { "display": "block" } );
$( ".nextvid-in-title" ).css( { "display": "block" } );
$( ".nextvid-in-date" ).css( { "display": "block" } );
$( ".nextvid-in-play-button" ).css( { "display": "inline-block" } );
$( ".nextvid-in-cancel-button" ).css( { "display": "inline-block" } );
$( ".nextvid-in-replay-button" ).css( { "display": "block" } );
$( ".nextvid-in" ).removeClass( "video-fadeout" ).addClass( "video-fadein" );
$( "#nextvid-in-counter" ).removeClass( "video-fadeout" ).addClass( "video-fadein" );
$( "#nextvid-in-thumbnail" ).removeClass( "video-fadeout" ).addClass( "video-fadein" );
$( ".nextvid-in-title" ).removeClass( "video-fadeout" ).addClass( "video-fadein" );
$( ".nextvid-in-date" ).removeClass( "video-fadeout" ).addClass( "video-fadein" );
$( ".nextvid-in-play-button" ).removeClass( "video-fadeout" ).addClass( "video-fadein" );
$( ".nextvid-in-cancel-button" ).removeClass( "video-fadeout" ).addClass( "video-fadein" );
$( ".nextvid-in-replay-button" ).removeClass( "video-fadeout" ).addClass( "video-fadein" );
};
SNPlayerUtil.next_video_counter_out = function () {
$( ".nextvid-in" ).removeClass( "video-fadein" ).addClass( "video-fadeout" );
$( "#nextvid-in-counter" ).removeClass( "video-fadein" ).addClass( "video-fadeout" );
$( "#nextvid-in-thumbnail" ).removeClass( "video-fadein" ).addClass( "video-fadeout" );
$( ".nextvid-in-title" ).removeClass( "video-fadein" ).addClass( "video-fadeout" );
$( ".nextvid-in-date" ).removeClass( "video-fadein" ).addClass( "video-fadeout" );
$( ".nextvid-in-play-button" ).removeClass( "video-fadein" ).addClass( "video-fadeout" );
$( ".nextvid-in-cancel-button" ).removeClass( "video-fadein" ).addClass( "video-fadeout" );
$( ".nextvid-in-replay-button" ).removeClass( "video-fadein" ).addClass( "video-fadeout" );
setTimeout( function () {
$( ".nextvid-in" ).css( { "display": "none" } );
$( "#nextvid-in-counter" ).css( { "display": "none" } );
$( "#nextvid-in-thumbnail" ).css( { "display": "none" } );
$( ".nextvid-in-title" ).css( { "display": "none" } );
$( ".nextvid-in-date" ).css( { "display": "none" } );
$( ".nextvid-in-play-button" ).css( { "display": "none" } );
$( ".nextvid-in-cancel-button" ).css( { "display": "none" } );
$( ".nextvid-in-replay-button" ).css( { "display": "none" } );
}, 500 ); // set back to none incase browsers do not have animation capability
};
SNPlayerUtil.add_ads_event_handlers_on_SNPlayers = function(videoId, videoPlayer) {
'use strict';
$("#" + videoId).data("is_playing_ads", false);
videoPlayer.on("ads-pod-started", function() {
$("#" + this.id()).data("is_playing_ads", true);
});
videoPlayer.on("ads-allpods-completed", function() {
$("#" + this.id()).data("is_playing_ads", false);
});
};
SNPlayerUtil.init_event_handlers_on_dom = function () {
'use strict';
// listen for requests to change clips.
$(document).on("snet.video.event.clip_change_request", SNPlayerUtil._on_clip_change_request);
$(window).on("snet.video.event.finished_processing_new_players", SNPlayerUtil.on_finished_processing_new_players);
};
SNPlayerUtil._on_clip_change_request = function (event, bc_video_id, player_id, force_play) {
console.debug("SNPlayerUtil._on_clip_change_request: NOW READY.");
// Commented out to keep the video player ready status on clip change as per: SPNETREBRAND-11248
// $("#" + player_id).find(".snplayer-container").removeClass("ready");
// $("#" + player_id).find(".snplayer-container").addClass("not-ready");
try {
$("#" + player_id).SNPlayer("load", bc_video_id, force_play);
}
catch (e) {
console.warn("Was unable to play new clip on SNPlayer ID: " + player_id + ".\nReason: " + e.message);
}
}
$(document).ready(function() {
'use strict';
SNPlayerUtil.init_event_handlers_on_dom();
});
if(!String.prototype.trim) {
String.prototype.trim = function () {
return this.replace(/^\s+|\s+$/g,'');
};
}