/** * * Postmedia Inline Ad PLayer * * @description this loads and displays the Postmedia Slice Player * * @class SliceLoader * @namespace PmVids * @Player v. 03-20-2015 * */ var PmVids = PmVids || {}; PmVids.Loader = PmVids.Loader || {}; jQuery.noConflict(); if (window.SliceBootloaderCount === undefined) { window.SliceBootloaderCount = 0; } if (window.SliceBootloaderJSLoaded === undefined) { window.SliceBootloaderJSLoaded = false; } PmVids.Loader.SlicePlayer = (function ($) { var Config = { type: "PmSlice", name: "SlicePlayer", isProduction : "true", domain : "calgaryherald.com", adType: null, analytics : { streamSenseBaseUrl : "http://b.scorecardresearch.com/p?c1=2&c2=16433038", dfpCmsId : "1141" }, cat: { ck:"news", sck: "politics" }, assets : { "path": "http://app.canada.com/video/assets/", "core": [ "//wurfl.io/wurfl.js", "http://app.canada.com/video/assets/js/pmvids-utils.js?03-20-2015", "http://app.canada.com/video/assets/js/pmvids-adserver.js?03-20-2015" ], "scripts": [ "//imasdk.googleapis.com/js/sdkloader/ima3.js", "http://app.canada.com/video/assets/js/pmvids-sliceplayer.js?03-20-2015", "http://app.canada.com/video/assets/js/pmvids-slicepercent.js?03-20-2015" ], "flashScripts":[ "http://app.canada.com/video/assets/js/lib-swfobject.js", "http://app.canada.com/video/assets/js/pmvids-flash-sliceplayer.js?03-20-2015", "http://app.canada.com/video/assets/js/pmvids-slicepercent.js?03-20-2015" ] }, player:{ videoId:"", }, slice: { id: "", target: "SlicePlayer", insertNode: "#SlicePlayer", parentNode: ".entry-content", parentContainer: "SlicePlayerParentContainer", pCount:"5", container:"SlicePlayerContentElement", mainContainer:"SlicePlayerMainContainer", isFlash: false }, ad:{ url: null, params: null, tag: null, width: null, height: null, size: "321x241", loc: "slice", container: "SlicePlayerAdContainer" }, startTime: new Date() }; function PreLoad(){ BootLoader(Config.assets.core, function () { PreLoadCheck(); }); } function PreLoadCheck(){ SetLogging(); SetAdServer(); if (PlayAd() == true) { var insertNode = GetInsertDiv(".entry-content", 5); if (insertNode){ SetIMASDKType(); AddVideoPlayer(insertNode); Loader(); Config.slice.insertNode = insertNode; }else{ Log("PmSlice: No Suitable Target found on page."); } } } function AddVideoPlayer(node) { $(node).before('
'); Log("PmSlice: Video Construct on Page: " + PmVids.Utils.ReportTime("SlicePlayer")); SetPlayer(); } function SetIMASDKType(){ if(PmVids.Utils.IsNotIE()){ //Use HTML5 IMA SDK } else { //Use FLASH IMASDK Config.slice.isFlash = true; Log("PmSlice: IE Browser detected, using Flash version of IMA SDK"); } } function SetLogging(){ //Set Logging Level PmVids.Utils.SetIsProduction(true); } function SliceIt() { PmVids.SlicePlayer.Init("SlicePlayer"); ShowLogs(); } function PlayAd() { var playAd = false; //if($(".breadcrumb.sponsored").length == 0 && $("a.feature01").length == 0){ if(!WURFL.is_mobile){ if(PmVids.AdServer.configured != false){ if(PmVids.Utils.AreCookiesEnabled() === true){ if(!PmVids.Utils.GetCookie("slicePlayed")){ playAd = true; } else { Log("PmSlice: User Quota exceeded for day."); } }else{ Log("PmSlice: Cookies Diabled."); } } }else { Log("PmSlice: Mobile Device Detected."); } //}else{ // Log("PmSlice: Sponsored content detected."); //} return playAd; } function GetInsertDiv(parentNode, pMax){ var insertNode = null, defaultNode = $("#SlicePlayer"); if(defaultNode.length){ insertNode = defaultNode; Log("PmSlice: InsertNode found at ID #SlicePlayer" ); } else if(parentNode != "" && parentNode != null) { var pNode = $(parentNode); if(pNode.length){ var paraInsertPoint = $(pNode).find( 'p:eq(' + pMax + ')' ); if(paraInsertPoint.length){ insertNode = paraInsertPoint; Log("PmSlice: InsertNode found at paragraph " + pMax + " of .entry-content" ); } } } return insertNode; } function SetPlayer(){ //debugger; var vNode = $("#SlicePlayerMainContainer"); var aNode = $("#SlicePlayerAdContainer"); var w = vNode.parent().width(), h = Math.floor((w/16)*9); vNode.css( 'width', w ); vNode.css('height', h); aNode.css( 'width', w ); aNode.css('height', h); Config.ad.width = w; Config.ad.height = h; } function SetAdServer(){ var ad = PmVids.AdServer.GetVideoAd('SlicePlayer', Config); if(ad == undefined || ad == "" || ad == false || ad == null){ PmVids.AdServer.configured = false; } else { Config.ad.url = ad.url; Config.ad.params = ad.params; Config.ad.type = ad.type; Config.ad.tag = Config.ad.url + "&cust_params=" + Config.ad.params; } } function BootLoader(array, callback) { var loader = function ( url, callback ) { var head = document.getElementsByTagName("head")[0] || document.documentElement; var script = document.createElement("script"); script.src = url; // Handle Script loading var done = false; // Attach handlers for all browsers script.onload = script.onreadystatechange = function() { if ( !done && (!this.readyState || this.readyState === "loaded" || this.readyState === "complete") ) { done = true; if( typeof callback == 'function'){ callback(); } // Handle memory leak in IE script.onload = script.onreadystatechange = null; if ( head && script.parentNode ) { head.removeChild( script ); } } }; // Use insertBefore instead of appendChild to circumvent an IE6 bug. // This arises when a base node is used (#2709 and #4378). head.insertBefore( script, head.firstChild ); }; (function () { if (array.length != 0) { loader(array.shift(), arguments.callee); } else { callback && callback(); } })(); } function Loader() { window.SliceBootloaderCount++; //Check for IE - if true load flash player scripts var scripts = Config.assets.scripts; if(Config.slice.isFlash){ scripts = Config.assets.flashScripts; } if(window.SliceBootloaderCount == 1) { BootLoader(scripts, function () { window.SliceBootloaderJSLoaded = true; SliceIt(); }); } else { function LoopMe() { if(window.SliceBootloaderJSLoaded===false) { setTimeout(LoopMe, 10); //wait 10 milliseconds then recheck return; } //console.log("[[[[[[[ Bootloader Not Needed ]]]]]]]"); SliceIt(); } LoopMe(); } } function ShowLogs(){ PmVids.Utils.SetIsProduction(true); Log("PmSlice: PM Slice Files Loaded" + PmVids.Utils.ReportTime("SlicePlayer")); } function Log(msg, type) { PmVids.Utils.Log(msg, type); } PreLoad(); return { Config: Config } })(jQuery);