diff --git a/dist/prebid.js b/dist/prebid.js index fb95f02e23a..a8a569b2e36 100644 --- a/dist/prebid.js +++ b/dist/prebid.js @@ -1,10 +1,11 @@ /* Prebid.js v0.4.1 -Updated : 2015-11-16 */ +Updated : 2015-11-23 */ (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;on;n++){var s=t[n],c=i.getUniqueIdentifierStr();a.loadScript(d(s,c)),o.pbCallbackMap[c]=s}}function r(e,t,r){if(e&&t){var n=t-e,o=!1,s="";for(var d in c)if(d>=n){o=!0,s=c[d],a.trackPixel(s);break}o||(s=l,a.trackPixel(s)),i.logMessage("latency for placement code : "+r+" : "+n+" ms. Tracking URL Fired : "+s)}}function d(e,t){var r=i.getBidIdParamater("placementId",e.params),n=i.getBidIdParamater("memberId",e.params),a=i.getBidIdParamater("invCode",e.params),o=i.getBidIdParamater("query",e.params),s=i.getBidIdParamater("referrer",e.params),d=i.getBidIdParamater("alt_referrer",e.params),c="http"+("https:"===document.location.protocol?"s://secure.adnxs.com/jpt?":"://ib.adnxs.com/jpt?");c=i.tryAppendQueryString(c,"callback","pbjs.handleCB"),c=i.tryAppendQueryString(c,"callback_uid",t),c=i.tryAppendQueryString(c,"psa","0"),c=i.tryAppendQueryString(c,"id",r),c=i.tryAppendQueryString(c,"member_id",n),c=i.tryAppendQueryString(c,"code",a);var l=i.parseSizesInput(e.sizes);l&&(c+=l+"&");var u=i.parseQueryStringParameters(o);return u&&(c+=u),""===s&&(s=i.getTopWindowUrl()),c=i.tryAppendQueryString(c,"referrer",s),c=i.tryAppendQueryString(c,"alt_referrer",d),c.lastIndexOf("&")===c.length-1&&(c=c.substring(0,c.length-1)),i.logMessage("jpt request built: "+c),e.startTime=(new Date).getTime(),c}var c=[];c[100]=e(21139),c[200]=e(21140),c[300]=e(21141),c[400]=e(21142),c[500]=e(21143),c[600]=e(21144),c[700]=e(21145),c[800]=e(21146),c[1e3]=e(21147),c[1300]=e(21148),c[1600]=e(21149),c[2e3]=e(21150),c[5e3]=e(21151),c[1e4]=e(21152);{var l=e(21154);e(21153)}return pbjs.handleCB=function(e){if(e&&e.callback_uid){var t,a=e.callback_uid,d="",c=o.getPlacementIdByCBIdentifer(a);if(c){d=c.placementCode,c.status=n.STATUS.GOOD;try{r(c.startTime,(new Date).getTime(),d)}catch(l){}}i.logMessage("JSONP callback function called for ad ID: "+a);var u=[];if(e.result&&e.result.cpm&&0!==e.result.cpm){t=parseInt(e.result.cpm,10),t/=1e4;var p=(e.result.ad,e.result.creative_id);u=s.createBid(1),u.creative_id=p,u.bidderCode="appnexus",u.cpm=t,u.adUrl=e.result.ad,u.width=e.result.width,u.height=e.result.height,u.dealId=e.result.deal_id,o.addBidResponse(d,u)}else i.logMessage("No prebid response from AppNexus for placement code "+d),u=s.createBid(2),u.bidderCode="appnexus",o.addBidResponse(d,u)}else i.logMessage("No prebid response for placement %%PLACEMENT%%")},{callBids:t}};t.exports=d},{"../adloader.js":10,"../bidfactory.js":11,"../bidmanager.js":12,"../constants.json":13,"../utils.js":17}],3:[function(e,t,r){var n=(e("../constants.json"),e("../utils.js"),e("../bidfactory.js")),i=e("../bidmanager.js"),a=e("../adloader"),o=function(){function e(e){o=e.bids||[],t(o).forEach(r)}function t(e){var t,r={},n=[];e.forEach(function(e){r[e.params.nid]=e});for(t in r)r.hasOwnProperty(t)&&n.push(r[t]);return n}function r(e){var t="crtg_varname_"+e.params.nid,r="//rtax.criteo.com/delivery/rta/rta.js?netId="+encodeURI(e.params.nid)+"&cookieName="+encodeURI(e.params.cookiename)+"&rnd="+Math.floor(99999999999*Math.random())+"&varName="+encodeURI(t);a.loadScript(r,function(r){var a,s=window[t];o.forEach(function(t){t.params.nid===e.params.nid&&(s?(a=n.createBid(1),a.bidderCode="criteo",a.keys=s.split(";")):(a=n.createBid(2),a.bidderCode="criteo"),i.addBidResponse(t.placementCode,a))})})}var o;return{callBids:e}};t.exports=o},{"../adloader":10,"../bidfactory.js":11,"../bidmanager.js":12,"../constants.json":13,"../utils.js":17}],4:[function(e,t,r){var n=(e("../constants.json"),e("../utils.js")),i=e("../bidfactory.js"),a=e("../bidmanager.js"),o="INDEXEXCHANGE",s="indexExchange",d=function(){function e(e){var f=e.bids;if(n.hasValidBidRequest(f[0].params,u,o)){for(var g=0;g',t+=""}var l={},u=["slotId","indexUrl"],p="";return{callBids:e}};t.exports=d},{"../bidfactory.js":11,"../bidmanager.js":12,"../constants.json":13,"../utils.js":17}],5:[function(e,t,r){var n=(e("../constants.json"),e("../utils.js"),e("../bidfactory.js")),i=e("../bidmanager.js"),a=e("../adloader"),o=function(e){function t(e){s=e.bids||[];for(var t=0;t',e+="",e+="",e=n.replaceTokenInString(e,t,"%%")}var o,s,d=[];return pbjs.handlePubmaticCallback=function(e){var t,r,n,s,d,c=e&&e.bidDetailsMap||{},l=e&&e.progKeyValueMap||{};for(t=0;t",a+='',a+="",a=i.replaceTokenInString(a,o,"%%")}var d={};return window.pbjs=window.pbjs||{que:[]},window.pbjs.handleRubiconCallback=function(e){var r="",s={};if(e&&"ok"===e.status)try{var c="",l=o.getPlacementIdByCBIdentifer(t(e));if(l&&(r=l.placementCode,l.status=n.STATUS.GOOD,c=l.iframeId),s=a.createBid(1),e.ads&&e.ads[0]){var u=e.ads[0],p=d[u.size_id],f=0,g=0,m=window.frames[c],b=m.contentWindow.RubiconAdServing;if(b&&b.AdSizes){p=b.AdSizes[u.size_id];var h=p.dim.split("x");f=h[0],g=h[1]}s.cpm=u.cpm,s.ad="",s.ad_id=u.ad_id,s.bidderCode="rubicon",s.sizeId=u.size_id,s.width=f,s.height=g}}catch(v){i.logError("Error parsing rubicon response bid: "+v.message)}else{s=a.createBid(2),s.bidderCode="rubicon";var l=o.getPlacementIdByCBIdentifer(t(e));l&&(r=l.placementCode)}o.addBidResponse(r,s)},{callBids:e}};t.exports=s},{"../bidfactory.js":11,"../bidmanager.js":12,"../constants.json":13,"../utils.js":17}],8:[function(e,t,r){var n=e("../constants.json"),i=e("../utils.js"),a=e("../bidfactory.js"),o=e("../bidmanager.js"),s=e("../adloader"),d="",c=function(){function e(e){var n=e.bids||[];r(t(n))}function t(e){var t,r={},n=[];e.forEach(function(e){r[i.getBidIdParamater("tagid",e.params)]=e});for(t in r)r.hasOwnProperty(t)&&n.push(r[t]);return n}function r(e){var t=window.location.host,r=window.location.pathname+location.search+location.hash,n=[];d=e[0].placementCode,i._each(e,function(e){var t=i.getBidIdParamater("tagid",e.params),r=i.getBidIdParamater("bidfloor",e.params),a=0,s=0,d=e.sizes.length;2===d&&"number"==typeof e.sizes[0]&&"number"==typeof e.sizes[1]?(a=e.sizes[0],s=e.sizes[1]):(a=e.sizes[0][0],s=e.sizes[0][1]),imp={id:i.getUniqueIdentifierStr(),banner:{w:a,h:s},tagid:t,bidfloor:r},n.push(imp),o.pbCallbackMap[imp.id]=e});var a={id:i.getUniqueIdentifierStr(),imp:n,site:{domain:t,page:r}},l="//"+c+"?callback=window.pbjs.sovrnResponse&br="+encodeURIComponent(JSON.stringify(a));s.loadScript(l,null)}var c="ap.lijit.com/rtb/bid";return pbjs.sovrnResponse=function(e){var t={};e&&e.id&&e.seatbid&&0!==e.seatbid.length&&e.seatbid[0].bid&&0!==e.seatbid[0].bid.length?e.seatbid[0].bid.forEach(function(e){var r,i="",s=e.impid,d=o.getPlacementIdByCBIdentifer(s);if(d)if(i=d.placementCode,d.status=n.STATUS.GOOD,r=parseFloat(e.price),0!==r){e.placementCode=i,e.size=d.sizes;var c=e.adm,l='';t=a.createBid(1),t.creative_id=e.Id,t.bidderCode="sovrn",t.cpm=r,t.ad=decodeURIComponent(c+l),t.width=d.sizes[0][0],t.height=d.sizes[0][1],o.addBidResponse(i,t)}else t=a.createBid(2),t.bidderCode="sovrn",o.addBidResponse(i,t);else t=a.createBid(2),t.bidderCode="sovrn",o.addBidResponse(i,t)}):(t=a.createBid(2),t.bidderCode="sovrn",o.addBidResponse(d,t))},{callBids:e}};t.exports=c},{"../adloader":10,"../bidfactory.js":11,"../bidmanager.js":12,"../constants.json":13,"../utils.js":17}],9:[function(e,t,r){var n=e("../adloader"),i=e("../bidfactory"),a=e("../bidmanager"),o=e("../utils"),s=function(){window.ybotq=window.ybotq||[];var e={BID_STATUS:{PENDING:0,AVAILABLE:1,EMPTY:2},definedSlots:[],pageLevelOption:!1,buildCreative:function(e,t){return'"},buildBid:function(t){var r={};if(t&&t.ybot_ad&&"n"!==t.ybot_ad){r=i.createBid(e.BID_STATUS.AVAILABLE),r.cpm=parseInt(t.ybot_cpm)/100||0;var n=t.ybot_size?t.ybot_size.split("x"):[0,0],a=t.ybot_slot||"",o=t.ybot_size||"";r.width=n[0]||0,r.height=n[1]||0,r.ad=e.buildCreative(a,o);for(var s in t)r[s]=t[s]}else r=i.createBid(e.BID_STATUS.EMPTY);return r.bidderCode="yieldbot",r},callBids:function(t){var r=t.bids||[],i=window.ybotq||[];e.pageLevelOption=!1,i.push(function(){var t=window.yieldbot;o._each(r,function(r){var n=r,i=n.params&&n.params.psn||"ERROR_DEFINE_YB_PSN",s=n.params&&n.params.slot||"ERROR_DEFINE_YB_SLOT";t.pub(i),t.defineSlot(s,{sizes:n.sizes||[]});var d=o.getUniqueIdentifierStr();a.pbCallbackMap[d]=n,e.definedSlots.push(d)}),t.enableAsync(),t.go()}),i.push(function(){e.handleUpdateState()}),n.loadScript("//cdn.yldbt.com/js/yieldbot.intent.js")},handleUpdateState:function(){var t=window.yieldbot;o._each(e.definedSlots,function(r){var n,i,o,s;s=a.getPlacementIdByCBIdentifer(r)||{},n=s.params.slot||"",i=t.getSlotCriteria(n),o=s.placementCode||"ERROR_YB_NO_PLACEMENT";var d=e.buildBid(i);a.addBidResponse(o,d)})}};return{callBids:e.callBids}};t.exports=s},{"../adloader":10,"../bidfactory":11,"../bidmanager":12,"../utils":17}],10:[function(e,t,r){r.loadScript=function(e,t){var r=document.createElement("script");r.type="text/javascript",r.async=!0,t&&"function"==typeof t&&(r.readyState?r.onreadystatechange=function(){("loaded"==r.readyState||"complete"==r.readyState)&&(r.onreadystatechange=null,t())}:r.onload=function(){t()}),r.src=e;var n=document.getElementsByTagName("head");n=n.length?n:document.getElementsByTagName("body"),n.length&&(n=n[0],n.insertBefore(r,n.firstChild))},r.trackPixel=function(e){try{if(e+="&rnd="+Math.random()){var t=document.createElement("img");t.src=e}}catch(r){}}},{}],11:[function(e,t,r){function n(e){function t(){switch(n){case 0:return"Pending";case 1:return"Bid available";case 2:return"Bid returned empty or error response";case 3:return"Bid timed out"}}var r=i.getUniqueIdentifierStr(),n=e||0;this.bidderCode="",this.width=0,this.height=0,this.statusMessage=t(),this.adId=r,this.getStatusCode=function(){return n},this.getSize=function(){return this.width+"x"+this.height}}var i=e("./utils.js");r.createBid=function(e){return new n(e)}},{"./utils.js":17}],12:[function(e,t,r){function n(){R={};for(var e=0;et)&&(e=!1)}else 1>t&&(e=!1)}),e}var g=e("./constants.json"),m=e("./utils.js"),b=(e("./adaptermanager"),e("./events")),h="function",v="undefined",y=[],B=[],_=null,w={},E={};r.pbCallbackMap=E;var I={};r.pbBidResponseByPlacement=I;var T={};r._adResponsesByBidderId=T;var R={};r.bidResponseReceivedCount=R;var C={},A=!1,S=!1,j={},P={};r.getPlacementIdByCBIdentifer=function(e){return E[e]},r.getBidResponseByAdUnit=function(e){return I},r.clearAllBidResponses=function(e){A=!1,S=!1,n(),a(),B.called=!1;for(var t in this.pbBidResponseByPlacement)delete this.pbBidResponseByPlacement[t]},r.getTimedOutBidders=function(){var e=[];return m._each(R,function(t,r){0===t&&e.push(r)}),e},r.increaseBidResponseReceivedCount=function(e){i(e)},r.setExpectedBidsCount=function(e,t){C[e]=t},r.addBidResponse=function(e,t){var r={};if(t){t.requestTimestamp=P[t.bidderCode],t.responseTimestamp=(new Date).getTime(),t.timeToRespond=t.responseTimestamp-t.requestTimestamp,i(t.bidderCode),2===t.getStatusCode()&&(t.cpm=0);var n=m.getPriceBucketString(t.cpm,t.height,t.width);t.pbLg=n.low,t.pbMg=n.med,t.pbHg=n.high,t.adUnitCode=e,t.bidder=t.bidderCode;var a={};t.bidderCode&&0!==t.cpm&&(a=s(t.bidderCode,t),t.adserverTargeting=a),t.adId&&(T[t.adId]=t),e&&I[e]?(r=I[e],r.bids.push(t),r.bidsReceivedCount++):m.logError("Internal error in bidmanager.addBidResponse. Params: "+e+" & "+t),b.emit("bidResponse",e,t)}else r=this.createEmptyBidResponseObj();I[e]=r,this.checkIfAllBidsAreIn(e)},r.createEmptyBidResponseObj=function(){return{bids:[],allBidsAvailable:!1,bidsReceivedCount:0}},r.registerDefaultBidderSetting=function(e,t){j[e]=t},r.registerBidRequestTime=function(e,t){P[e]=t},r.executeCallback=function(){if(typeof pbjs.registerBidCallbackHandler===h&&!S)try{pbjs.registerBidCallbackHandler(),S=!0}catch(e){S=!0,m.logError("Exception trying to execute callback handler registered : "+e.message)}if(B.called!==!0){var t=[];l(B,t),B.called=!0}if(_){var t=[],r=pbjs.getBidResponses();t.push(r),l(_,t),_=null}},r.allBidsBack=function(){return A},r.setBidderMap=function(e){w=e},r.checkIfAllBidsAreIn=function(e){A=f(),p(e),A&&this.executeCallback()},r.addOneTimeCallback=function(e){_=e},r.addCallback=function(e,t,r){t.id=e,g.CB.TYPE.ALL_BIDS_BACK===r?B.push(t):g.CB.TYPE.AD_UNIT_BIDS_BACK===r&&y.push(t)}},{"./adaptermanager":1,"./constants.json":13,"./events":14,"./utils.js":17}],13:[function(e,t,r){t.exports={JSON_MAPPING:{PL_CODE:"code",PL_SIZE:"sizes",PL_BIDS:"bids",BD_BIDDER:"bidder",BD_ID:"paramsd",BD_PL_ID:"placementId",ADSERVER_TARGETING:"adserverTargeting",BD_SETTING_STANDARD:"standard"},DEBUG_MODE:"pbjs_debug",STATUS:{GOOD:"good",TIMEOUT:"timed out"},CB:{TYPE:{ALL_BIDS_BACK:"allRequestedBidsBack",AD_UNIT_BIDS_BACK:"adUnitBidsBack"}},objectType_function:"function",objectType_undefined:"undefined",objectType_object:"object",objectType_string:"string",objectType_number:"number",EVENTS:{BID_TIMEOUT:"bidTimeout",BID_REQUESTED:"bidRequested",BID_RESPONSE:"bidResponse",BID_WON:"bidWon"}}},{}],14:[function(e,t,r){var n=e("./utils"),i=e("./constants"),a=Array.prototype.slice,o=n._map(i.EVENTS,function(e){return e}),s=[];t.exports=function(){function e(e,t){n.logMessage("Emitting event for: "+e),s.push({eventType:e,args:t}),n._each(r[e],function(e){if(e)try{e.apply(null,t)}catch(r){n.logError("Error executing handler:","events.js",r)}})}function t(e){return n.contains(o,e)}var r={},i={};return i.on=function(e,i){t(e)?(r[e]=r[e]||[],r[e].push(i)):n.logError("Wrong event name : "+e+" Valid event names :"+o)},i.emit=function(t){var r=a.call(arguments,1);e(t,r)},i.off=function(e,t,i){n.isEmpty(r[e])||n._each(r[e],function(e){null!==e[t]&&void 0!==e[t]&&("undefined"==typeof i||e[t]===i)&&(e[t]=null)})},i.get=function(){return r},i.getEvents=function(){var e=[];return n._each(s,function(t){var r=n.extend({},t);e.push(r)}),e},i}()},{"./constants":13,"./utils":17}],15:[function(e,t,r){function n(){for(var e=0;e0&&n.push({cpm:o.cpm,bid:o}),t.push(i)}}if(r&&0!==n.length){var s=c(n),d=s.adserverTargeting;O[r]=y.extend(O[r],d)}return t}function f(e){var t={};if(e){var r=JSON.stringify(e);t=JSON.parse(r),delete t.pbLg,delete t.pbMg,delete t.pbHg}return t}function g(){B.clearAllBidResponses(),N={},D=[],O={}}function m(e){var t=e;g(),i(t)}function b(e){var t=null;return e&&(t=h.getAdserverTargetingForAdUnitCode(e.getSlotElementId()),t||(t=h.getAdserverTargetingForAdUnitCode(e.getAdUnitPath()))),t}window.pbjs=window.pbjs||{},window.pbjs.que=window.pbjs.que||[];var h=window.pbjs,v=e("./constants.json"),y=e("./utils.js"),B=e("./bidmanager.js"),_=e("./adaptermanager"),w=e("./bidfactory"),E=e("./adloader"),I=e("./ga"),T=e("./events"),R="function",C="undefined",A="object",S="string",j=v.EVENTS.BID_WON,P=v.EVENTS.BID_TIMEOUT,U=[],D=[],N={},O={},x={};h.bidderTimeout=h.bidderTimeout||3e3,h.logging=h.logging||!1,h.libLoaded=!0,h.adUnits=h.adUnits||[],h.que.push=function(e){if(typeof e===R)try{e.call()}catch(t){y.logError("Error processing command :"+t.message)}else y.logError("Commands written into pbjs.que.push must wrapped in a function")},h.getAdserverTargetingForAdUnitCodeStr=function(e){if(e){var t=h.getAdserverTargetingForAdUnitCode(e);return y.transformAdServerTargetingObj(t)}y.logMessage("Need to call getAdserverTargetingForAdUnitCodeStr with adunitCode")},h.getAdserverTargetingForAdUnitCode=function(e){return h.getBidResponses(e),e?O[e]:O},h.getAdserverTargeting=function(){return h.getAdserverTargetingForAdUnitCode()},h.getBidResponses=function(e){var t={},r=[],n={};if(e)t=u(e),r=[],t&&t.bids&&(r=p(t.bids)),n={bids:r};else{t=u();for(var i in t)t.hasOwnProperty(i)&&(t&&t[i]&&t[i].bids&&(r=p(t[i].bids)),n[i]={bids:r})}return n},h.getBidResponsesForAdUnitCode=function(e){return h.getBidResponses(e)},h.setTargetingForAdUnitsGPTAsync=function(e){if(!window.googletag||!y.isFn(window.googletag.pubads)||!y.isFn(window.googletag.pubads().getSlots))return void y.logError("window.googletag is not defined on the page");var t=B.getTimedOutBidders();T.emit(P,t);var r=e;typeof e===S?r=[e]:typeof e===A&&(r=e);var n={},i=0;if(r)for(i=0;i'),e.close(),e.defaultView&&e.defaultView.frameElement&&(e.defaultView.frameElement.width=i,e.defaultView.frameElement.height=n)):y.logError("Error trying to write ad. No ad for bid response id: "+t)}else y.logError("Error trying to write ad. Cannot find ad by given id : "+t)}catch(s){y.logError("Error trying to write ad Id :"+t+" to the page:"+s.message)}else y.logError("Error trying to write ad Id :"+t+" to the page. Missing document or adId")},h.requestBidsForAdUnit=function(e){g(),i(e)},h.requestBidsForAdUnits=function(e){if(!e||e.constructor!==Array)return void y.logError("requestBidsForAdUnits must pass an array of adUnits");g();var t=h.adUnits.slice(0);h.adUnits=e,i(),h.adUnits=t},h.removeAdUnit=function(e){if(e)for(var t=0;t=0&&200>e?t="0-200ms":e>=200&&300>e?t="200-300ms":e>=300&&400>e?t="300-400ms":e>=400&&500>e?t="400-500ms":e>=500&&600>e?t="500-600ms":e>=600&&800>e?t="600-800ms":e>=800&&1e3>e?t="800-1000ms":e>=1e3&&1200>e?t="1000-1200ms":e>=1200&&1500>e?t="1200-1500ms":e>=1500&&2e3>e?t="1500-2000ms":e>=2e3&&(t="2000ms above"),t}function o(e){var t;return e>=0&&.5>e?t="$0-0.5":e>=.5&&1>e?t="$0.5-1":e>=1&&1.5>e?t="$1-1.5":e>=1.5&&2>e?t="$1.5-2":e>=2&&2.5>e?t="$2-2.5":e>=2.5&&3>e?t="$2.5-3":e>=3&&4>e?t="$3-4":e>=4&&6>e?t="$4-6":e>=6&&8>e?t="$6-8":e>=8&&(t="$8 above"),t}function s(e){e&&e.bidderCode&&y.push(function(){E++,window[B]("send","event",w,"Requests",e.bidderCode,1,v)}),n()}function d(e){e&&e.bidder&&y.push(function(){var t=i(e.cpm),r=e.bidder;if("undefined"!=typeof e.timeToRespond&&I){ -E++;var n=a(e.timeToRespond);window[B]("send","event","Prebid.js Load Time Distribution",n,r,1,v)}if(e.cpm>0){E+=2;var s=o(e.cpm);I&&(E++,window[B]("send","event","Prebid.js CPM Distribution",s,r,1,v)),window[B]("send","event",w,"Bids",r,t,v),window[B]("send","event",w,"Bid Load Time",r,e.timeToRespond,v)}}),n()}function c(e){p._each(e,function(e){y.push(function(){E++,window[B]("send","event",w,"Timeouts",e,1,v)})}),n()}function l(e){var t=i(e.cpm);y.push(function(){E++,window[B]("send","event",w,"Wins",e.bidderCode,t,v)}),n()}var u=e("./events"),p=e("./utils"),f=e("./constants.json"),g=f.EVENTS.BID_REQUESTED,m=f.EVENTS.BID_TIMEOUT,b=f.EVENTS.BID_RESPONSE,h=f.EVENTS.BID_WON,v={nonInteraction:!0},y=[],B=null,_=!0,w="Prebid.js Bids",E=0,I=!1;r.enableAnalytics=function(e){B="undefined"!=typeof e.global?e.global:"ga","undefined"!=typeof e.enableDistribution&&(I=e.enableDistribution);var t=null,r=u.getEvents();p._each(r,function(e){var r=e.args;if(e)if(e.eventType===g)t=r[0],s(t);else if(e.eventType===b)t=r[1],d(t);else if(e.eventType===m){var n=r[0];c(n)}else e.eventType===h&&(t=r[0],l(t))}),u.on(g,function(e){s(e)}),u.on(b,function(e,t){d(t)}),u.on(m,function(e){c(e)}),u.on(h,function(e){l(e)})}},{"./constants.json":13,"./events":14,"./utils":17}],17:[function(e,t,r){function n(){return v()+Math.random().toString(16).substr(2)}function i(){return window.console&&window.console.log}{var a=e("./constants.json"),o="object",s="string",d="number",c=!1,l=5,u=20,p=20,f="Array",g="String",m="Function",b=Object.prototype.toString,h=Object.prototype.hasOwnProperty;Array.prototype.slice}r.replaceTokenInString=function(e,t,r){return this._each(t,function(t,n){t=void 0===t?"":t;var i=r+n.toUpperCase()+r,a=new RegExp(i,"g");e=e.replace(a,t)}),e};var v=function(){var e=0;return function(){return e++,e}}();r.getUniqueIdentifierStr=n,r.getBidIdParamater=function(e,t){return t&&t[e]?t[e]:""},r.tryAppendQueryString=function(e,t,r){return r?e+=t+"="+encodeURIComponent(r)+"&":e},r.parseQueryStringParameters=function(e){var t="";for(var r in e)e.hasOwnProperty(r)&&(t+=r+"="+encodeURIComponent(e[r])+"&");return t},r.transformAdServerTargetingObj=function(e){var t="";if(!e)return"";for(var r in e)e.hasOwnProperty(r)&&(t+=r+"="+encodeURIComponent(e[r])+"&");return t},r.extend=function(e,t){return e=e||{},this._each(t,function(r,n){e[n]=typeof t[n]===o?this.extend(e[n],t[n]):t[n]}),e},r.parseSizesInput=function(e){var t,r=[];if(typeof e===s){var n=e.split(","),i=/^(\d)+x(\d)+$/i;if(n)for(var a in n)hasOwn(n,a)&&n[a].match(i)&&r.push(n[a])}else if(typeof e===o){var c=e.length;if(c>0)if(2===c&&typeof e[0]===d&&typeof e[1]===d)r.push(this.parseGPTSingleSizeArray(e));else for(var l=0;c>l;l++)r.push(this.parseGPTSingleSizeArray(e[l]))}var u=r.length;if(u>0&&(t="size="+r[0],u>1)){t+="&promo_sizes=";for(var p=1;u>p;p++)t+=r[p]+=",";t&&","===t.charAt(t.length-1)&&(t=t.slice(0,t.length-1))}return t},r.parseGPTSingleSizeArray=function(e){return!this.isArray(e)||2!==e.length||isNaN(e[0])||isNaN(e[1])?void 0:e[0]+"x"+e[1]},r.getTopWindowUrl=function(){try{return window.top.location.href}catch(e){return window.location.href}},r.logMessage=function(e){B()&&i()&&console.log("MESSAGE: "+e)},r.hasConsoleLogger=i;var y=function(e){return e?window.console.error?"error":"log":""}(i()),B=function(){return pbjs.logging===!1&&c===!1&&(pbjs.logging="TRUE"===_(a.DEBUG_MODE).toUpperCase(),c=!0),pbjs.logging?!0:!1};r.debugTurnedOn=B,r.logError=function(e,t,r){var n=t||"ERROR";B()&&i()&&console[y].call(console,n+": "+e,r||"")},r.createInvisibleIframe=function(){var e=document.createElement("iframe");return e.id=n(),e.height=0,e.width=0,e.border="0px",e.hspace="0",e.vspace="0",e.marginWidth="0",e.marginHeight="0",e.style.border="0",e.scrolling="no",e.frameBorder="0",e.src="about:self",e.style="display:none",e};var _=function(e){var t="[\\?&]"+e+"=([^&#]*)",r=new RegExp(t),n=r.exec(window.location.search);return null===n?"":decodeURIComponent(n[1].replace(/\+/g," "))};r.getPriceBucketString=function(e){var t="",r="",n="",i=0,a={low:t,med:r,high:n};try{i=parseFloat(e),i&&(a.low=i>l?l.toFixed(2):(Math.floor(2*e)/2).toFixed(2),a.med=i>u?u.toFixed(2):(Math.floor(10*e)/10).toFixed(2),a.high=i>p?p.toFixed(2):(Math.floor(100*e)/100).toFixed(2))}catch(o){this.logError("Exception parsing CPM :"+o.message)}return a},r.hasValidBidRequest=function(e,t,r){for(var n=0;n0);for(var t in e)if(h.call(e,t))return!1;return!0},r._each=function(e,t){if(!this.isEmpty(e)){if(this.isFn(e.forEach))return e.forEach(t,this);var r=0,n=e.length;if(n>0)for(;n>r;r++)t(e[r],r,e);else for(r in e)h.call(e,r)&&t.call(this,e[r],r)}},r.contains=function(e,t){if(this.isEmpty(e))return!1;if(this.isFn(e.indexOf))return-1!==e.indexOf(t);for(var r=e.length;r--;)if(e[r]===t)return!0;return!1},r._map=function(e,t){if(this.isEmpty(e))return[];if(this.isFn(e.map))return e.map(t);var r=[];return this._each(e,function(n,i){r.push(t(n,i,e))}),r}},{"./constants.json":13}]},{},[15]); \ No newline at end of file +Updated : 2015-11-23 */ +!function e(t,r,n){function i(o,d){if(!r[o]){if(!t[o]){var s="function"==typeof require&&require;if(!d&&s)return s(o,!0);if(a)return a(o,!0);throw new Error("Cannot find module '"+o+"'")}var c=r[o]={exports:{}};t[o][0].call(c.exports,function(e){var r=t[o][1][e];return i(r?r:e)},c,c.exports,e,t,r,n)}return r[o].exports}for(var a="function"==typeof require&&require,o=0;on;n++){var d=t[n],c=i.getUniqueIdentifierStr();a.loadScript(s(d,c)),o.pbCallbackMap[c]=d}}function r(e,t,r){if(e&&t){var n=t-e,o=!1,d="";for(var s in c)if(s>=n){o=!0,d=c[s],a.trackPixel(d);break}o||(d=l,a.trackPixel(d)),i.logMessage("latency for placement code : "+r+" : "+n+" ms. Tracking URL Fired : "+d)}}function s(e,t){var r=i.getBidIdParamater("placementId",e.params),n=i.getBidIdParamater("memberId",e.params),a=i.getBidIdParamater("invCode",e.params),o=i.getBidIdParamater("query",e.params),d=i.getBidIdParamater("referrer",e.params),s=i.getBidIdParamater("alt_referrer",e.params),c="http"+("https:"===document.location.protocol?"s://secure.adnxs.com/jpt?":"://ib.adnxs.com/jpt?");c=i.tryAppendQueryString(c,"callback","pbjs.handleCB"),c=i.tryAppendQueryString(c,"callback_uid",t),c=i.tryAppendQueryString(c,"psa","0"),c=i.tryAppendQueryString(c,"id",r),c=i.tryAppendQueryString(c,"member_id",n),c=i.tryAppendQueryString(c,"code",a);var l=i.parseSizesInput(e.sizes);l&&(c+=l+"&");var u=i.parseQueryStringParameters(o);return u&&(c+=u),""===d&&(d=i.getTopWindowUrl()),c=i.tryAppendQueryString(c,"referrer",d),c=i.tryAppendQueryString(c,"alt_referrer",s),c.lastIndexOf("&")===c.length-1&&(c=c.substring(0,c.length-1)),i.logMessage("jpt request built: "+c),e.startTime=(new Date).getTime(),c}var c=[];c[100]=e(21139),c[200]=e(21140),c[300]=e(21141),c[400]=e(21142),c[500]=e(21143),c[600]=e(21144),c[700]=e(21145),c[800]=e(21146),c[1e3]=e(21147),c[1300]=e(21148),c[1600]=e(21149),c[2e3]=e(21150),c[5e3]=e(21151),c[1e4]=e(21152);{var l=e(21154);e(21153)}return pbjs.handleCB=function(e){if(e&&e.callback_uid){var t,a=e.callback_uid,s="",c=o.getPlacementIdByCBIdentifer(a);if(c){s=c.placementCode,c.status=n.STATUS.GOOD;try{r(c.startTime,(new Date).getTime(),s)}catch(l){}}i.logMessage("JSONP callback function called for ad ID: "+a);var u=[];if(e.result&&e.result.cpm&&0!==e.result.cpm){t=parseInt(e.result.cpm,10),t/=1e4;var p=(e.result.ad,e.result.creative_id);u=d.createBid(1),u.creative_id=p,u.bidderCode="appnexus",u.cpm=t,u.adUrl=e.result.ad,u.width=e.result.width,u.height=e.result.height,u.dealId=e.result.deal_id,o.addBidResponse(s,u)}else i.logMessage("No prebid response from AppNexus for placement code "+s),u=d.createBid(2),u.bidderCode="appnexus",o.addBidResponse(s,u)}else i.logMessage("No prebid response for placement %%PLACEMENT%%")},{callBids:t}};t.exports=s},{"../adloader.js":11,"../bidfactory.js":12,"../bidmanager.js":13,"../constants.json":14,"../utils.js":18}],4:[function(e,t,r){var n=(e("../constants.json"),e("../utils.js"),e("../bidfactory.js")),i=e("../bidmanager.js"),a=e("../adloader"),o=function(){function e(e){o=e.bids||[],t(o).forEach(r)}function t(e){var t,r={},n=[];e.forEach(function(e){r[e.params.nid]=e});for(t in r)r.hasOwnProperty(t)&&n.push(r[t]);return n}function r(e){var t="crtg_varname_"+e.params.nid,r="//rtax.criteo.com/delivery/rta/rta.js?netId="+encodeURI(e.params.nid)+"&cookieName="+encodeURI(e.params.cookiename)+"&rnd="+Math.floor(99999999999*Math.random())+"&varName="+encodeURI(t);a.loadScript(r,function(r){var a,d=window[t];o.forEach(function(t){t.params.nid===e.params.nid&&(d?(a=n.createBid(1),a.bidderCode="criteo",a.keys=d.split(";")):(a=n.createBid(2),a.bidderCode="criteo"),i.addBidResponse(t.placementCode,a))})})}var o;return{callBids:e}};t.exports=o},{"../adloader":11,"../bidfactory.js":12,"../bidmanager.js":13,"../constants.json":14,"../utils.js":18}],5:[function(e,t,r){var n=(e("../constants.json"),e("../utils.js")),i=e("../bidfactory.js"),a=e("../bidmanager.js"),o="INDEXEXCHANGE",d="indexExchange",s=function(){function e(e){var f=e.bids;if(n.hasValidBidRequest(f[0].params,u,o)){for(var g=0;g',t+=""}var l={},u=["slotId","indexUrl"],p="";return{callBids:e}};t.exports=s},{"../bidfactory.js":12,"../bidmanager.js":13,"../constants.json":14,"../utils.js":18}],6:[function(e,t,r){var n=(e("../constants.json"),e("../utils.js"),e("../bidfactory.js")),i=e("../bidmanager.js"),a=e("../adloader"),o=function(e){function t(e){d=e.bids||[];for(var t=0;t',e+="",e+="",e=n.replaceTokenInString(e,t,"%%")}var o,d,s=[];return pbjs.handlePubmaticCallback=function(e){var t,r,n,d,s,c=e&&e.bidDetailsMap||{},l=e&&e.progKeyValueMap||{};for(t=0;t",a+='',a+="",a=i.replaceTokenInString(a,o,"%%")}var s={};return window.pbjs=window.pbjs||{que:[]},window.pbjs.handleRubiconCallback=function(e){var r="",d={};if(e&&"ok"===e.status)try{var c="",l=o.getPlacementIdByCBIdentifer(t(e));if(l&&(r=l.placementCode,l.status=n.STATUS.GOOD,c=l.iframeId),d=a.createBid(1),e.ads&&e.ads[0]){var u=e.ads[0],p=s[u.size_id],f=0,g=0,m=window.frames[c],b=m.contentWindow.RubiconAdServing;if(b&&b.AdSizes){p=b.AdSizes[u.size_id];var h=p.dim.split("x");f=h[0],g=h[1]}d.cpm=u.cpm,d.ad="",d.ad_id=u.ad_id,d.bidderCode="rubicon",d.sizeId=u.size_id,d.width=f,d.height=g}}catch(v){i.logError("Error parsing rubicon response bid: "+v.message)}else{d=a.createBid(2),d.bidderCode="rubicon";var l=o.getPlacementIdByCBIdentifer(t(e));l&&(r=l.placementCode)}o.addBidResponse(r,d)},{callBids:e}};t.exports=d},{"../bidfactory.js":12,"../bidmanager.js":13,"../constants.json":14,"../utils.js":18}],9:[function(e,t,r){var n=e("../constants.json"),i=e("../utils.js"),a=e("../bidfactory.js"),o=e("../bidmanager.js"),d=e("../adloader"),s="",c=function(){function e(e){var n=e.bids||[];r(t(n))}function t(e){var t,r={},n=[];e.forEach(function(e){r[i.getBidIdParamater("tagid",e.params)]=e});for(t in r)r.hasOwnProperty(t)&&n.push(r[t]);return n}function r(e){var t=window.location.host,r=window.location.pathname+location.search+location.hash,n=[];s=e[0].placementCode,i._each(e,function(e){var t=i.getBidIdParamater("tagid",e.params),r=i.getBidIdParamater("bidfloor",e.params),a=0,d=0,s=e.sizes.length;2===s&&"number"==typeof e.sizes[0]&&"number"==typeof e.sizes[1]?(a=e.sizes[0],d=e.sizes[1]):(a=e.sizes[0][0],d=e.sizes[0][1]),imp={id:i.getUniqueIdentifierStr(),banner:{w:a,h:d},tagid:t,bidfloor:r},n.push(imp),o.pbCallbackMap[imp.id]=e});var a={id:i.getUniqueIdentifierStr(),imp:n,site:{domain:t,page:r}},l="//"+c+"?callback=window.pbjs.sovrnResponse&br="+encodeURIComponent(JSON.stringify(a));d.loadScript(l,null)}var c="ap.lijit.com/rtb/bid";return pbjs.sovrnResponse=function(e){var t={};e&&e.id&&e.seatbid&&0!==e.seatbid.length&&e.seatbid[0].bid&&0!==e.seatbid[0].bid.length?e.seatbid[0].bid.forEach(function(e){var r,i="",d=e.impid,s=o.getPlacementIdByCBIdentifer(d);if(s)if(i=s.placementCode,s.status=n.STATUS.GOOD,r=parseFloat(e.price),0!==r){e.placementCode=i,e.size=s.sizes;var c=e.adm,l='';t=a.createBid(1),t.creative_id=e.Id,t.bidderCode="sovrn",t.cpm=r,t.ad=decodeURIComponent(c+l),t.width=s.sizes[0][0],t.height=s.sizes[0][1],o.addBidResponse(i,t)}else t=a.createBid(2),t.bidderCode="sovrn",o.addBidResponse(i,t);else t=a.createBid(2),t.bidderCode="sovrn",o.addBidResponse(i,t)}):(t=a.createBid(2),t.bidderCode="sovrn",o.addBidResponse(s,t))},{callBids:e}};t.exports=c},{"../adloader":11,"../bidfactory.js":12,"../bidmanager.js":13,"../constants.json":14,"../utils.js":18}],10:[function(e,t,r){var n=e("../adloader"),i=e("../bidfactory"),a=e("../bidmanager"),o=e("../utils"),d=function(){window.ybotq=window.ybotq||[];var e={BID_STATUS:{PENDING:0,AVAILABLE:1,EMPTY:2},definedSlots:[],pageLevelOption:!1,buildCreative:function(e,t){return'"},buildBid:function(t){var r={};if(t&&t.ybot_ad&&"n"!==t.ybot_ad){r=i.createBid(e.BID_STATUS.AVAILABLE),r.cpm=parseInt(t.ybot_cpm)/100||0;var n=t.ybot_size?t.ybot_size.split("x"):[0,0],a=t.ybot_slot||"",o=t.ybot_size||"";r.width=n[0]||0,r.height=n[1]||0,r.ad=e.buildCreative(a,o);for(var d in t)r[d]=t[d]}else r=i.createBid(e.BID_STATUS.EMPTY);return r.bidderCode="yieldbot",r},callBids:function(t){var r=t.bids||[],i=window.ybotq||[];e.pageLevelOption=!1,i.push(function(){var t=window.yieldbot;o._each(r,function(r){var n=r,i=n.params&&n.params.psn||"ERROR_DEFINE_YB_PSN",d=n.params&&n.params.slot||"ERROR_DEFINE_YB_SLOT";t.pub(i),t.defineSlot(d,{sizes:n.sizes||[]});var s=o.getUniqueIdentifierStr();a.pbCallbackMap[s]=n,e.definedSlots.push(s)}),t.enableAsync(),t.go()}),i.push(function(){e.handleUpdateState()}),n.loadScript("//cdn.yldbt.com/js/yieldbot.intent.js")},handleUpdateState:function(){var t=window.yieldbot;o._each(e.definedSlots,function(r){var n,i,o,d;d=a.getPlacementIdByCBIdentifer(r)||{},n=d.params.slot||"",i=t.getSlotCriteria(n),o=d.placementCode||"ERROR_YB_NO_PLACEMENT";var s=e.buildBid(i);a.addBidResponse(o,s)})}};return{callBids:e.callBids}};t.exports=d},{"../adloader":11,"../bidfactory":12,"../bidmanager":13,"../utils":18}],11:[function(e,t,r){r.loadScript=function(e,t){var r=document.createElement("script");r.type="text/javascript",r.async=!0,t&&"function"==typeof t&&(r.readyState?r.onreadystatechange=function(){("loaded"==r.readyState||"complete"==r.readyState)&&(r.onreadystatechange=null,t())}:r.onload=function(){t()}),r.src=e;var n=document.getElementsByTagName("head");n=n.length?n:document.getElementsByTagName("body"),n.length&&(n=n[0],n.insertBefore(r,n.firstChild))},r.trackPixel=function(e){try{if(e+="&rnd="+Math.random()){var t=document.createElement("img");t.src=e}}catch(r){}}},{}],12:[function(e,t,r){function n(e){function t(){switch(n){case 0:return"Pending";case 1:return"Bid available";case 2:return"Bid returned empty or error response";case 3:return"Bid timed out"}}var r=i.getUniqueIdentifierStr(),n=e||0;this.bidderCode="",this.width=0,this.height=0,this.statusMessage=t(),this.adId=r,this.getStatusCode=function(){return n},this.getSize=function(){return this.width+"x"+this.height}}var i=e("./utils.js");r.createBid=function(e){return new n(e)}},{"./utils.js":18}],13:[function(e,t,r){function n(){T={};for(var e=0;et)&&(e=!1)}else 1>t&&(e=!1)}),e}var g=e("./constants.json"),m=e("./utils.js"),b=(e("./adaptermanager"),e("./events")),h="function",v="undefined",y=[],B=[],w=null,_={},E={};r.pbCallbackMap=E;var I={};r.pbBidResponseByPlacement=I;var C={};r._adResponsesByBidderId=C;var T={};r.bidResponseReceivedCount=T;var A={},R=!1,j=!1,S={},P={};r.getPlacementIdByCBIdentifer=function(e){return E[e]},r.getBidResponseByAdUnit=function(e){return I},r.clearAllBidResponses=function(e){R=!1,j=!1,n(),a(),B.called=!1;for(var t in this.pbBidResponseByPlacement)delete this.pbBidResponseByPlacement[t]},r.getTimedOutBidders=function(){var e=[];return m._each(T,function(t,r){0===t&&e.push(r)}),e},r.increaseBidResponseReceivedCount=function(e){i(e)},r.setExpectedBidsCount=function(e,t){A[e]=t},r.addBidResponse=function(e,t){var r={};if(t){t.requestTimestamp=P[t.bidderCode],t.responseTimestamp=(new Date).getTime(),t.timeToRespond=t.responseTimestamp-t.requestTimestamp,i(t.bidderCode),2===t.getStatusCode()&&(t.cpm=0);var n=m.getPriceBucketString(t.cpm,t.height,t.width);t.pbLg=n.low,t.pbMg=n.med,t.pbHg=n.high,t.adUnitCode=e,t.bidder=t.bidderCode;var a={};t.bidderCode&&0!==t.cpm&&(a=d(t.bidderCode,t),t.adserverTargeting=a),t.adId&&(C[t.adId]=t),e&&I[e]?(r=I[e],r.bids.push(t),r.bidsReceivedCount++):m.logError("Internal error in bidmanager.addBidResponse. Params: "+e+" & "+t),b.emit("bidResponse",e,t)}else r=this.createEmptyBidResponseObj();I[e]=r,this.checkIfAllBidsAreIn(e)},r.createEmptyBidResponseObj=function(){return{bids:[],allBidsAvailable:!1,bidsReceivedCount:0}},r.registerDefaultBidderSetting=function(e,t){S[e]=t},r.registerBidRequestTime=function(e,t){P[e]=t},r.executeCallback=function(){if(typeof pbjs.registerBidCallbackHandler===h&&!j)try{pbjs.registerBidCallbackHandler(),j=!0}catch(e){j=!0,m.logError("Exception trying to execute callback handler registered : "+e.message)}if(B.called!==!0){var t=[];l(B,t),B.called=!0}if(w){var t=[],r=pbjs.getBidResponses();t.push(r),l(w,t),w=null}},r.allBidsBack=function(){return R},r.setBidderMap=function(e){_=e},r.checkIfAllBidsAreIn=function(e){R=f(),p(e),R&&this.executeCallback()},r.addOneTimeCallback=function(e){w=e},r.addCallback=function(e,t,r){t.id=e,g.CB.TYPE.ALL_BIDS_BACK===r?B.push(t):g.CB.TYPE.AD_UNIT_BIDS_BACK===r&&y.push(t)}},{"./adaptermanager":1,"./constants.json":14,"./events":15,"./utils.js":18}],14:[function(e,t,r){t.exports={JSON_MAPPING:{PL_CODE:"code",PL_SIZE:"sizes",PL_BIDS:"bids",BD_BIDDER:"bidder",BD_ID:"paramsd",BD_PL_ID:"placementId",ADSERVER_TARGETING:"adserverTargeting",BD_SETTING_STANDARD:"standard"},DEBUG_MODE:"pbjs_debug",STATUS:{GOOD:"good",TIMEOUT:"timed out"},CB:{TYPE:{ALL_BIDS_BACK:"allRequestedBidsBack",AD_UNIT_BIDS_BACK:"adUnitBidsBack"}},objectType_function:"function",objectType_undefined:"undefined",objectType_object:"object",objectType_string:"string",objectType_number:"number",EVENTS:{BID_TIMEOUT:"bidTimeout",BID_REQUESTED:"bidRequested",BID_RESPONSE:"bidResponse",BID_WON:"bidWon"}}},{}],15:[function(e,t,r){var n=e("./utils"),i=e("./constants"),a=Array.prototype.slice,o=n._map(i.EVENTS,function(e){return e}),d=[];t.exports=function(){function e(e,t){n.logMessage("Emitting event for: "+e),d.push({eventType:e,args:t}),n._each(r[e],function(e){if(e)try{e.apply(null,t)}catch(r){n.logError("Error executing handler:","events.js",r)}})}function t(e){return n.contains(o,e)}var r={},i={};return i.on=function(e,i){t(e)?(r[e]=r[e]||[],r[e].push(i)):n.logError("Wrong event name : "+e+" Valid event names :"+o)},i.emit=function(t){var r=a.call(arguments,1);e(t,r)},i.off=function(e,t,i){n.isEmpty(r[e])||n._each(r[e],function(e){null!==e[t]&&void 0!==e[t]&&("undefined"==typeof i||e[t]===i)&&(e[t]=null)})},i.get=function(){return r},i.getEvents=function(){var e=[];return n._each(d,function(t){var r=n.extend({},t);e.push(r)}),e},i}()},{"./constants":14,"./utils":18}],16:[function(e,t,r){function n(){for(var e=0;e0&&n.push({cpm:o.cpm,bid:o}),t.push(i)}}if(r&&0!==n.length){var d=l(n),s=d.adserverTargeting;x[r]=B.extend(x[r],s)}return t}function g(e){var t={};if(e){var r=JSON.stringify(e);t=JSON.parse(r),delete t.pbLg,delete t.pbMg,delete t.pbHg}return t}function m(){w.clearAllBidResponses(),O={},N=[],x={},k=!1}function b(e){var t=e;m(),i(t)}function h(e){var t=null;return e&&(t=v.getAdserverTargetingForAdUnitCode(e.getSlotElementId()),t||(t=v.getAdserverTargetingForAdUnitCode(e.getAdUnitPath()))),t}window.pbjs=window.pbjs||{},window.pbjs.que=window.pbjs.que||[];var v=window.pbjs,y=e("./constants.json"),B=e("./utils.js"),w=e("./bidmanager.js"),_=e("./adaptermanager"),E=e("./bidfactory"),I=e("./adloader"),C=e("./ga"),T=e("./events"),A="function",R="undefined",j="object",S="string",P=y.EVENTS.BID_WON,U=y.EVENTS.BID_TIMEOUT,D=[],N=[],O={},x={},M={},k=!1;v.bidderTimeout=v.bidderTimeout||3e3,v.logging=v.logging||!1,v.libLoaded=!0,v.adUnits=v.adUnits||[],v.que.push=function(e){if(typeof e===A)try{e.call()}catch(t){B.logError("Error processing command :"+t.message)}else B.logError("Commands written into pbjs.que.push must wrapped in a function")},v.getAdserverTargetingForAdUnitCodeStr=function(e){if(e){var t=v.getAdserverTargetingForAdUnitCode(e);return B.transformAdServerTargetingObj(t)}B.logMessage("Need to call getAdserverTargetingForAdUnitCodeStr with adunitCode")},v.getAdserverTargetingForAdUnitCode=function(e){return v.getBidResponses(e),e?x[e]:x},v.getAdserverTargeting=function(){return v.getAdserverTargetingForAdUnitCode()},v.getBidResponses=function(e){var t={},r=[],n={};if(e)t=p(e),r=[],t&&t.bids&&(r=f(t.bids)),n={bids:r};else{t=p();for(var i in t)t.hasOwnProperty(i)&&(t&&t[i]&&t[i].bids&&(r=f(t[i].bids)),n[i]={bids:r})}return n},v.getBidResponsesForAdUnitCode=function(e){return v.getBidResponses(e)},v.setTargetingForAdUnitsGPTAsync=function(e){if(!window.googletag||!B.isFn(window.googletag.pubads)||!B.isFn(window.googletag.pubads().getSlots))return void B.logError("window.googletag is not defined on the page");o();var t=e;typeof e===S?t=[e]:typeof e===j&&(t=e);var r={},n=0;if(t)for(n=0;n'),e.close(),e.defaultView&&e.defaultView.frameElement&&(e.defaultView.frameElement.width=i,e.defaultView.frameElement.height=n)):B.logError("Error trying to write ad. No ad for bid response id: "+t)}else B.logError("Error trying to write ad. Cannot find ad by given id : "+t)}catch(d){B.logError("Error trying to write ad Id :"+t+" to the page:"+d.message)}else B.logError("Error trying to write ad Id :"+t+" to the page. Missing document or adId")},v.requestBidsForAdUnit=function(e){m(),i(e)},v.requestBidsForAdUnits=function(e){if(!e||e.constructor!==Array)return void B.logError("requestBidsForAdUnits must pass an array of adUnits");m();var t=v.adUnits.slice(0);v.adUnits=e,i(),v.adUnits=t},v.removeAdUnit=function(e){if(e)for(var t=0;t=0&&200>e?t="0-200ms":e>=200&&300>e?t="200-300ms":e>=300&&400>e?t="300-400ms":e>=400&&500>e?t="400-500ms":e>=500&&600>e?t="500-600ms":e>=600&&800>e?t="600-800ms":e>=800&&1e3>e?t="800-1000ms":e>=1e3&&1200>e?t="1000-1200ms":e>=1200&&1500>e?t="1200-1500ms":e>=1500&&2e3>e?t="1500-2000ms":e>=2e3&&(t="2000ms above"),t}function o(e){var t;return e>=0&&.5>e?t="$0-0.5":e>=.5&&1>e?t="$0.5-1":e>=1&&1.5>e?t="$1-1.5":e>=1.5&&2>e?t="$1.5-2":e>=2&&2.5>e?t="$2-2.5":e>=2.5&&3>e?t="$2.5-3":e>=3&&4>e?t="$3-4":e>=4&&6>e?t="$4-6":e>=6&&8>e?t="$6-8":e>=8&&(t="$8 above"),t}function d(e){e&&e.bidderCode&&y.push(function(){E++,window[B]("send","event",_,"Requests",e.bidderCode,1,v)}),n()}function s(e){e&&e.bidder&&y.push(function(){var t=i(e.cpm),r=e.bidder;if("undefined"!=typeof e.timeToRespond&&I){E++;var n=a(e.timeToRespond);window[B]("send","event","Prebid.js Load Time Distribution",n,r,1,v)}if(e.cpm>0){E+=2;var d=o(e.cpm);I&&(E++,window[B]("send","event","Prebid.js CPM Distribution",d,r,1,v)),window[B]("send","event",_,"Bids",r,t,v),window[B]("send","event",_,"Bid Load Time",r,e.timeToRespond,v)}}),n()}function c(e){p._each(e,function(e){y.push(function(){E++,window[B]("send","event",_,"Timeouts",e,1,v)})}),n()}function l(e){var t=i(e.cpm);y.push(function(){E++,window[B]("send","event",_,"Wins",e.bidderCode,t,v)}),n()}var u=e("./events"),p=e("./utils"),f=e("./constants.json"),g=f.EVENTS.BID_REQUESTED,m=f.EVENTS.BID_TIMEOUT,b=f.EVENTS.BID_RESPONSE,h=f.EVENTS.BID_WON,v={nonInteraction:!0},y=[],B=null,w=!0,_="Prebid.js Bids",E=0,I=!1;r.enableAnalytics=function(e){B="undefined"!=typeof e.global?e.global:"ga","undefined"!=typeof e.enableDistribution&&(I=e.enableDistribution);var t=null,r=u.getEvents();p._each(r,function(e){var r=e.args;if(e)if(e.eventType===g)t=r[0],d(t);else if(e.eventType===b)t=r[1],s(t);else if(e.eventType===m){var n=r[0];c(n)}else e.eventType===h&&(t=r[0],l(t))}),u.on(g,function(e){d(e)}),u.on(b,function(e,t){s(t)}),u.on(m,function(e){c(e)}),u.on(h,function(e){l(e)})}},{"./constants.json":14,"./events":15,"./utils":18}],18:[function(e,t,r){function n(){return v()+Math.random().toString(16).substr(2)}function i(){return window.console&&window.console.log}{var a=e("./constants.json"),o="object",d="string",s="number",c=!1,l=5,u=20,p=20,f="Array",g="String",m="Function",b=Object.prototype.toString,h=Object.prototype.hasOwnProperty;Array.prototype.slice}r.replaceTokenInString=function(e,t,r){return this._each(t,function(t,n){t=void 0===t?"":t;var i=r+n.toUpperCase()+r,a=new RegExp(i,"g");e=e.replace(a,t)}),e};var v=function(){var e=0;return function(){return e++,e}}();r.getUniqueIdentifierStr=n,r.getBidIdParamater=function(e,t){return t&&t[e]?t[e]:""},r.tryAppendQueryString=function(e,t,r){return r?e+=t+"="+encodeURIComponent(r)+"&":e},r.parseQueryStringParameters=function(e){var t="";for(var r in e)e.hasOwnProperty(r)&&(t+=r+"="+encodeURIComponent(e[r])+"&");return t},r.transformAdServerTargetingObj=function(e){var t="";if(!e)return"";for(var r in e)e.hasOwnProperty(r)&&(t+=r+"="+encodeURIComponent(e[r])+"&");return t},r.extend=function(e,t){return e=e||{},this._each(t,function(r,n){e[n]=typeof t[n]===o?this.extend(e[n],t[n]):t[n]}),e},r.parseSizesInput=function(e){var t,r=[];if(typeof e===d){var n=e.split(","),i=/^(\d)+x(\d)+$/i;if(n)for(var a in n)hasOwn(n,a)&&n[a].match(i)&&r.push(n[a])}else if(typeof e===o){var c=e.length;if(c>0)if(2===c&&typeof e[0]===s&&typeof e[1]===s)r.push(this.parseGPTSingleSizeArray(e));else for(var l=0;c>l;l++)r.push(this.parseGPTSingleSizeArray(e[l]))}var u=r.length;if(u>0&&(t="size="+r[0],u>1)){t+="&promo_sizes=";for(var p=1;u>p;p++)t+=r[p]+=",";t&&","===t.charAt(t.length-1)&&(t=t.slice(0,t.length-1))}return t},r.parseGPTSingleSizeArray=function(e){return!this.isArray(e)||2!==e.length||isNaN(e[0])||isNaN(e[1])?void 0:e[0]+"x"+e[1]},r.getTopWindowUrl=function(){try{return window.top.location.href}catch(e){return window.location.href}},r.logMessage=function(e){B()&&i()&&console.log("MESSAGE: "+e)},r.hasConsoleLogger=i;var y=function(e){return e?window.console.error?"error":"log":""}(i()),B=function(){return pbjs.logging===!1&&c===!1&&(pbjs.logging="TRUE"===w(a.DEBUG_MODE).toUpperCase(),c=!0),pbjs.logging?!0:!1};r.debugTurnedOn=B,r.logError=function(e,t,r){var n=t||"ERROR";B()&&i()&&console[y].call(console,n+": "+e,r||"")},r.createInvisibleIframe=function(){var e=document.createElement("iframe");return e.id=n(),e.height=0,e.width=0,e.border="0px",e.hspace="0",e.vspace="0",e.marginWidth="0",e.marginHeight="0",e.style.border="0",e.scrolling="no",e.frameBorder="0",e.src="about:self",e.style="display:none",e};var w=function(e){var t="[\\?&]"+e+"=([^&#]*)",r=new RegExp(t),n=r.exec(window.location.search);return null===n?"":decodeURIComponent(n[1].replace(/\+/g," "))};r.getPriceBucketString=function(e){var t="",r="",n="",i=0,a={low:t,med:r,high:n};try{i=parseFloat(e),i&&(a.low=i>l?l.toFixed(2):(Math.floor(2*e)/2).toFixed(2),a.med=i>u?u.toFixed(2):(Math.floor(10*e)/10).toFixed(2),a.high=i>p?p.toFixed(2):(Math.floor(100*e)/100).toFixed(2))}catch(o){this.logError("Exception parsing CPM :"+o.message)}return a},r.hasValidBidRequest=function(e,t,r){for(var n=0;n0);for(var t in e)if(h.call(e,t))return!1;return!0},r._each=function(e,t){if(!this.isEmpty(e)){if(this.isFn(e.forEach))return e.forEach(t,this);var r=0,n=e.length;if(n>0)for(;n>r;r++)t(e[r],r,e);else for(r in e)h.call(e,r)&&t.call(this,e[r],r)}},r.contains=function(e,t){if(this.isEmpty(e))return!1;if(this.isFn(e.indexOf))return-1!==e.indexOf(t);for(var r=e.length;r--;)if(e[r]===t)return!0;return!1},r._map=function(e,t){if(this.isEmpty(e))return[];if(this.isFn(e.map))return e.map(t);var r=[];return this._each(e,function(n,i){r.push(t(n,i,e))}),r}},{"./constants.json":14}]},{},[16]); \ No newline at end of file diff --git a/integrationExamples/gpt/pbjs_example_gpt.html b/integrationExamples/gpt/pbjs_example_gpt.html index b515ec18dc5..e04c165e53d 100644 --- a/integrationExamples/gpt/pbjs_example_gpt.html +++ b/integrationExamples/gpt/pbjs_example_gpt.html @@ -115,6 +115,12 @@ unit: 'TO ADD', jstag_url : 'TO ADD' } + },{ + bidder: 'aol', + params: { + placement: 'TO ADD', + network: 'TO ADD' + } },{ bidder: 'rubicon', params: { diff --git a/src/adaptermanager.js b/src/adaptermanager.js index 77a3d8f38ee..c18c9c4d84a 100644 --- a/src/adaptermanager.js +++ b/src/adaptermanager.js @@ -2,6 +2,7 @@ var RubiconAdapter = require('./adapters/rubicon.js'); var AppNexusAdapter = require('./adapters/appnexus.js'); +var AolAdapter = require('./adapters/aol'); var OpenxAdapter = require('./adapters/openx'); var PubmaticAdapter = require('./adapters/pubmatic.js'); var CriteoAdapter = require('./adapters/criteo'); @@ -59,3 +60,4 @@ this.registerBidAdapter(CriteoAdapter(), 'criteo'); this.registerBidAdapter(YieldbotAdapter(), 'yieldbot'); this.registerBidAdapter(IndexExchange(), 'indexExchange'); this.registerBidAdapter(Sovrn(),'sovrn'); +this.registerBidAdapter(AolAdapter(), 'aol'); diff --git a/src/adapters/aol.js b/src/adapters/aol.js new file mode 100644 index 00000000000..716ef1a7eab --- /dev/null +++ b/src/adapters/aol.js @@ -0,0 +1,178 @@ +var utils = require('../utils.js'), + bidfactory = require('../bidfactory.js'), + bidmanager = require('../bidmanager.js'), + adloader = require('../adloader'); + +var AolAdapter = function AolAdapter() { + + // constants + var ADTECH_PLACEMENT_RXP = /\W/g, + ADTECH_URI = (window.location.protocol) + '//aka-cdn.adtechus.com/dt/common/DAC.js', + ADTECH_BIDDER_NAME = 'aol', + ADTECH_PUBAPI_CONFIG = { + pixelsDivId: 'pixelsDiv', + defaultKey: 'aolBid', + roundingConfig: [ + {from: 0, to: 999, roundFunction: 'tenCentsRound'}, + {from: 1000, to: -1, roundValue: 1000} + ], + pubApiOK: _addBid, + pubApiER: _addErrorBid + }; + + var bids, + bidsMap = {}, + d = window.document, + h = d.getElementsByTagName('HEAD')[0], + aliasCount = 0, + dummyUnitIdCount = 0; + + /** + * @private Given a placementCode slot path/div id + * for a unit, return a unique alias + * @param {String} placementCode + * @return {String} alias + */ + function _generateAlias(placementCode) { + return (placementCode || 'alias').replace(ADTECH_PLACEMENT_RXP, '') + (++aliasCount); + } + + /** + * @private create a div that we'll use as the + * location for the AOL unit; AOL will document.write + * if the div is not present in the document. + * @param {String} id to identify the div + * @return {String} the id used with the div + */ + function _dummyUnit(id) { + var div = d.createElement('DIV'); + + if (!id || !id.length) { + id = 'ad-placeholder-' + (++dummyUnitIdCount); + } + + div.id = id + '-head-unit'; + h.appendChild(div); + return div.id; + } + + /** + * @private Add a succesful bid response for aol + * @param {ADTECHResponse} response the response for the bid + * @param {ADTECHContext} context the context passed from aol + */ + function _addBid(response, context) { + var bid = bidsMap[context.placement], cpm; + + if (!bid) { + utils.logError('mismatched bid: ' + context.placement, ADTECH_BIDDER_NAME, context); + return; + } + + cpm = response.getCPM(); + if (cpm == null) { + return _addErrorBid(response, context); + } + + var bidResponse = bidfactory.createBid(1); + bidResponse.bidderCode = ADTECH_BIDDER_NAME; + bidResponse.ad = response.getCreative() + response.getPixels(); + bidResponse.cpm = cpm; + bidResponse.width = response.getAdWidth(); + bidResponse.height = response.getAdHeight(); + bidResponse.creativeId = response.getCreativeId(); + + // add it to the bid manager + bidmanager.addBidResponse(bid.placementCode, bidResponse); + } + + /** + * @private Add an error bid response for aol + * @param {ADTECHResponse} response the response for the bid + * @param {ADTECHContext} context the context passed from aol + */ + function _addErrorBid(response, context) { + var bid = bidsMap[context.alias || context.placement]; + + if (!bid) { + utils.logError('mismatched bid: ' + context.placement, ADTECH_BIDDER_NAME, context); + return; + } + + var bidResponse = bidfactory.createBid(2); + bidResponse.bidderCode = ADTECH_BIDDER_NAME; + bidResponse.reason = response.getNbr(); + bidResponse.raw = response.getResponse(); + bidmanager.addBidResponse(bid.placementCode, bidResponse); + } + + + /** + * @private map a prebid bidrequest to an ADTECH/aol bid request + * @param {Bid} bid the bid request + * @return {Object} the bid request, formatted for the ADTECH/DAC api + */ + function _mapUnit(bid) { + // save the bid + bidsMap[bid.params.placement] = bid; + + return { + adContainerId: _dummyUnit(bid.params.adContainerId), + server: bid.params.server, // By default, DAC.js will use the US region endpoint (adserver.adtechus.com) + sizeid: bid.params.sizeId || 0, + pageid: bid.params.pageId, + secure: false, + serviceType: 'pubapi', + performScreenDetection: false, + alias: bid.params.alias || _generateAlias(bid.placementCode), + network: bid.params.network, + placement: parseInt(bid.params.placement), + gpt: { + adUnitPath: bid.params.adUnitPath || bid.placementCode, + size: bid.params.size || (bid.sizes || [])[0] + }, + params: { + cors: 'yes', + cmd: 'bid' + }, + pubApiConfig: ADTECH_PUBAPI_CONFIG, + placementCode: bid.placementCode + }; + } + + /** + * @private once ADTECH is loaded, request bids by + * calling ADTECH.loadAd + */ + function _reqBids() { + if (!window.ADTECH) { + utils.logError('window.ADTECH is not present!', ADTECH_BIDDER_NAME); + return; + } + + // get the bids + utils._each(bids, function (bid) { + var bidreq = _mapUnit(bid); + window.ADTECH.loadAd(bidreq); + }); + } + + /** + * @public call the bids + * this requests the specified bids + * from aol marketplace + * @param {Object} params + * @param {Array} params.bids the bids to be requested + */ + function _callBids(params) { + bids = params.bids; + if (!bids || !bids.length) return; + adloader.loadScript(ADTECH_URI, _reqBids); + } + + return { + callBids: _callBids + }; +}; + +module.exports = AolAdapter;