var googletag = googletag || {}; googletag.cmd = googletag.cmd || []; var i_loaded_dfp = false; /** * Based on width. So we know when to refresh ads by checking the selected index. */ function ogden_ad_determine_size_branch(obj) { var mysizes = obj._initsizes; browser_width = jQuery(window).width(); var selected = 0, i; var maxselected = -1; for(i = 0; i < mysizes.length; i+=1) { //console.log(mysizes[i][0][0]+' < '+browser_width+' && '+maxselected+' < '+mysizes[i][0][0]); if(mysizes[i][0][0] <= browser_width && maxselected < mysizes[i][0][0]) { selected = i; maxselected = mysizes[i][0][0]; } } return selected; } function ogden_ads_derive_slider_targetting() { if(window['ogden_ads_settings']['default_slider_path'] == '') { window['ogden_ads_settings']['default_slider_path'] = 'Unknown/Unknown/Top_of_Stream'; } var mypath = window['ogden_ads_settings']['default_slider_path']; var pathfinal = mypath.replace(/.*\//, ''); var unitpath = jQuery('[data-unitpath]').attr('data-unitpath'); if(unitpath) { mypath = unitpath.replace(/\/[^\/]*?$/, '/'+pathfinal); } return mypath; } /** * Create a unit with the specified classes (as string) and unit path. It will be appended to the * target_location and will need to be activated with ogden_ready_ads after placement. */ function ogden_ads_create_unit(target_location, classes, path, size) { var ad_div = document.createElement('div'); ad_div.id = 'aduni'+(Math.floor(Math.random()*1000000))+'c'+(Math.floor(Math.random()*1000000)); ad_div.className = classes; ad_div.setAttribute('data-unitpath', path); ad_div.setAttribute('data-sizeset', size); jQuery(target_location).append(ad_div); } /** * function refresh ads in viewport. */ function ogden_ads_viewport_refresh(override_selector) { var selector = '.has-ogden-slot'; if(override_selector) { selector = override_selector; } var slots = []; jQuery(selector).each(function() { var offsetpos = jQuery(this).offset(); if( offsetpos && offsetpos.top ) { var top = offsetpos.top; var btm = jQuery(this).height() + offsetpos.top; var scrolltop = jQuery(window).scrollTop() + 50; var scrollbtm = jQuery(window).scrollTop() + jQuery(window).height() - 50; if(!(scrolltop > btm || scrollbtm < top)) { slots.push(this._slot); } } }); if(slots.length && window.googletag && window.googletag.pubadsReady) { googletag.pubads().refresh(slots); } } function ogden_ready_ads(selector) { //If there are no WP DFP spots, DFP isn't loaded, so we should load it if we have placements. if(jQuery.fn.dfp == undefined && jQuery(selector).length > 0 && i_loaded_dfp == false) { (function() { var gads = document.createElement("script"); gads.async = true; gads.type = "text/javascript"; var useSSL = "https:" == document.location.protocol; gads.src = (useSSL ? "https:" : "http:") + "//www.googletagservices.com/tag/js/gpt.js"; var node =document.getElementsByTagName("script")[0]; node.parentNode.insertBefore(gads, node); })(); i_loaded_dfp = true; } jQuery(selector).each(function() { //Only initialize once. if(this._already_adified != undefined) { return true; } // if(window['ogden_ads_settings'] == undefined) { if(window.console && window.console.log) { console.log("Ogden Ads: No ad settings."); } } if(window['ogden_ads_settings']['network_code'] == undefined) { if(window.console && window.console.log) { console.log("Ogden Ads: No ad network code set."); } } var network_code = window['ogden_ads_settings']['network_code']; this._last_size = [jQuery(this).width(),jQuery(window).height()]; if(window['ogden_ads_sizes'][this.getAttribute('data-sizeset')] == undefined) { if(window.console && window.console.log) { console.log("Ogden Ads: Placement requested, but no matching sizeset."); } } var myself = this; googletag.cmd.push(function() { var i; var sizes = window['ogden_ads_sizes'][myself.getAttribute('data-sizeset')]['sizes']; myself._customTargeting = {}; var custlists = myself.getAttribute('data-customtargeting'); if(custlists != false && custlists != undefined) { custlists = custlists.split('/===/').map(function(a) { return a.split('||'); }); for(i = 0; i < custlists.length; i+=1) { if(custlists[i].length > 1) { if(myself._customTargeting[custlists[i][0]] == undefined) { myself._customTargeting[custlists[i][0]] = [custlists[i][1]]; } else { myself._customTargeting[custlists[i][0]].push(custlists[i][1]); } } } } myself._initsizes = sizes; myself._mapping = googletag.sizeMapping(); for(i = 0; i < sizes.length; i+=1) { myself._mapping.addSize(sizes[i][0], sizes[i][1]); } myself._mappingarray = myself._mapping.build(); //console.log(myself._mappingarray); myself._slot = googletag.defineSlot("/"+network_code+"/"+myself.getAttribute('data-unitpath'), [[0, 0]], myself.id) .addService(googletag.pubads()) .defineSizeMapping(myself._mappingarray); jQuery(myself).addClass('has-ogden-slot'); for(i in myself._customTargeting) { myself._slot.setTargeting(i, myself._customTargeting[i]); } if(window._niche_targetting) { for(i in window._niche_targetting) { myself._slot.setTargeting(i, window._niche_targetting[i]); } } googletag.enableServices(); googletag.display(myself.id); myself._branch = ogden_ad_determine_size_branch(myself); jQuery(myself).on("refresh_ad", function() { googletag.pubads().refresh([myself._slot]); }); }); }); }; jQuery(document).ready(function() { jQuery('body').on("show_ad", function(e) { if(e && jQuery(e.target).hasClass('delay_ogden_ads_container')) { var target = e.target; jQuery(target).addClass('ogden_ads_container'); jQuery(target).removeClass('delay_ogden_ads_container'); jQuery(target).addClass('was_delayed'); ogden_ready_ads(target); } e.stopPropagation(); }); }); //delay_ogden_ads_container jQuery(document).ready(function() { ogden_ready_ads('.ogden_ads_container'); var timer = -1; function ogden_ads_resize_handler() { ogden_ready_ads_resize('.ogden_ads_container'); } jQuery(window).resize(function() { if(timer != -1) { clearTimeout(timer); } timer = setTimeout(ogden_ads_resize_handler, 300); }); }); function ogden_ready_ads_resize(selector) { jQuery(selector).each(function() { if(this._slot == undefined) { return true; } var current_branch = ogden_ad_determine_size_branch(this); if(current_branch != this._branch) { this._branch = current_branch; googletag.pubads().refresh([this._slot]); } }); }