function madinadInit(device_type) { "use strict"; // Function that retrieves the campaigns available to be rendered function retrieveCampaigns() { var data_request = new XMLHttpRequest(); var request_url = window.madinadProps.website_ids.request_url + "&device=" + device_type + "&os=" + getMobileOperatingSystem() + "&caller=" + window.location.href; // callback data_request.onreadystatechange = function () { if (data_request.readyState == 4) { madinad_private_params.creatives = JSON.parse(data_request.responseText); if (madinad_private_params.creatives.length > 0) { selectCreatives(madinad_private_params.creatives, request_url); } } }; data_request.open("GET", request_url, true); data_request.send(); } function getMobileOperatingSystem() { var userAgent = navigator.userAgent || navigator.vendor || window.opera; if (/iPad|iPhone|iPod/.test(userAgent) && !window.MSStream) { return "ios"; } if (/android/i.test(userAgent)) { return "android"; } return "other"; } function setWebsiteIdsObj() { var sdk_src = document .getElementById("madinad-contextual-targeting") .src; var query_param_index; window.madinadProps.website_ids = {}; if (sdk_src.indexOf("adtag=") > -1) { var website_param_index = sdk_src.indexOf("a=") query_param_index = sdk_src.indexOf("adtag="); window.madinadProps.website_ids.type = "adtag"; window.madinadProps.website_ids.adtag_id = sdk_src.substring(query_param_index + 6, query_param_index + 42); window.madinadProps.website_ids.id = sdk_src.substring(website_param_index + 2, website_param_index + 38); window.madinadProps.website_ids.request_url = window.madinadProps.base_request_url + "ad-tag?adtag=" + window.madinadProps.website_ids.adtag_id + "&a=" + window.madinadProps.website_ids.id; } else if (sdk_src.indexOf("a=") > -1) { query_param_index = sdk_src.indexOf("a="); window.madinadProps.website_ids.type = "publisher"; window.madinadProps.website_ids.id = sdk_src.substring(query_param_index + 2, query_param_index + 38); window.madinadProps.website_ids.request_url = window.madinadProps.base_request_url + "discover?a=" + window.madinadProps.website_ids.id; } else if (sdk_src.indexOf("demo=") > -1) { query_param_index = sdk_src.indexOf("demo="); window.madinadProps.website_ids.type = "demo"; window.madinadProps.website_ids.id = sdk_src.substring(query_param_index + 5, query_param_index + 41); window.madinadProps.website_ids.request_url = window.madinadProps.base_request_url + "demo-campaigns?demo=" + window.madinadProps.website_ids.id; } } // Function that filters the non-viewed campaigns in in-article and // non-in-article function selectCreatives(creatives, requestUrl) { for (var index = 0; index < creatives.length; index++) { if (!isCampaignViewed(creatives[index]["campaign"])) { if (creatives[index]["ad_format"]["is_inarticle"]) { madinad_private_params .inArticleCampaigns .push(creatives[index]); } else { madinad_private_params .fullPageCampaigns .push(creatives[index]); } } } if (madinad_private_params.fullPageCampaigns.length >= 1) { for (var i = 0; i < madinad_private_params.fullPageCampaigns.length; i++) { var is_viewed = isCampaignViewed(madinad_private_params.fullPageCampaigns[i]["campaign"]), has_fc = madinad_private_params.fullPageCampaigns[i]["has_fc"]; if ((is_viewed && !has_fc) || !is_viewed || requestUrl.indexOf("adtag") > -1) { window.madinadProps.fullPageCampaign = madinad_private_params.fullPageCampaigns[i]; renderModal(madinad_private_params.fullPageCampaigns[i], requestUrl); break; } } } if (madinad_private_params.inArticleCampaigns.length >= 1) { for (var i = 0; i < madinad_private_params.inArticleCampaigns.length; i++) { var is_viewed = isCampaignViewed(madinad_private_params.inArticleCampaigns[i]["campaign"]), has_fc = madinad_private_params.inArticleCampaigns[i]["has_fc"]; if ((is_viewed && !has_fc) || !is_viewed) { window.madinadProps.inArticleCampaigns = madinad_private_params.fullPageCampaigns[i]; renderInArticle(madinad_private_params.inArticleCampaigns[i]); break; } } } } function setCookie(name, value) { var lifetime = parseInt(value); var expDate = new Date(); expDate.setDate(expDate.getDate() + lifetime); var cValue = encodeURI(value) + "; expires=" + expDate.toUTCString() + "; path=/"; document.cookie = name + "=" + cValue; } function renderModal(creative, requestUrl) { var modal = document.createElement("div"), page_body = document.body || document.getElementsByTagName("body")[0], page_head = document.head || document.getElementsByTagName("head")[0]; modal.id = "madinad_modal"; page_body.insertBefore(modal, page_body.firstChild); if (creative["ad_format"]["has_index"]) { renderIndexModal(modal, page_body, creative); setTrackingCodes(creative.impression_tracking_codes, "impression", document.getElementById("madinad_iframe"), false); } if (creative["has_fc"] && requestUrl.indexOf("demo-campaigns") < 0) { setViewedCampaign(creative["campaign"]); } } function renderInarticle(creative) { var modal = document.getElementById("madinad_advertisement"); if (creative["has_fc"]) { setViewedCampaign(creative["campaign"]); } } function createSourcePath(file_name, creative) { return ("" + madinad_private_params.assets_src + creative["campaign"] + "/" + creative["id"] + "/" + file_name); } function setTrackingCodes(tracking_codes, type, el, append) { var filtered_codes = tracking_codes.filter(function (code) { return code.tracking_type === type; }); for (var i = 0; i < filtered_codes.length; i++) { createTrackingScript(filtered_codes[i].tracking_url, el, append); } } function createTrackingScript(url, el, append) { var script = document.createElement("script"); script.setAttribute("src", url); if (append) { el.appendChild(script); } else { el.after(script); } script.remove(); } function renderInArticle(creative) { var inarticleNode = document.getElementById("madinad_advertisement"), modal = document.createElement("div"), page_head = document.head || document.getElementsByTagName("head")[0]; renderIndexlessModal(inarticleNode, page_head, creative); document .querySelector("#madinad_inarticle_destination_url") .addEventListener("click", function () { window .madinadFunctions .postAnalyticsEvent("click", creative, madinadProps.base_analytics_url); }); window.addEventListener("scroll", checkIfInarticleVisible); function checkIfInarticleVisible() { var e = document.getElementById("madinad_advertisement"); if (isScrolledIntoView(e)) { window .madinadFunctions .postAnalyticsEvent("impression", creative, madinadProps.base_analytics_url); window.removeEventListener("scroll", checkIfInarticleVisible); setTrackingCodes(creative.impression_tracking_codes, "impression", inarticleNode, false); } } function isScrolledIntoView(e) { var i = e .getBoundingClientRect() .top, n = e .getBoundingClientRect() .bottom, t = i >= 0 && n <= window.screen.height; return t; } if (campaign["has_fc"]) { setViewedCampaign(campaign["campaign"]); } } // Function that sets a campaign as viewed function setViewedCampaign(campaign) { setCookie("viewed_" + campaign, "1"); } function serializeCampaignPropsToQueryString(creative) { var obj = { creative_id: creative["id"], campaign_id: creative["campaign"], website_id: window.madinadProps.website_ids.id, auto_close_timeout: creative["auto_close_timeout"] }; return ("?" + Object.keys(obj).reduce(function (a, k) { a.push(k + "=" + encodeURIComponent(obj[k])); return a; }, []).join("&")); } function renderIndexModal(modal, head, creative) { var iframe_source = madinadProps.campaign_assets_src + creative["campaign"] + "/" + creative["id"] + "/index.html" + serializeCampaignPropsToQueryString(creative); modal.innerHTML = '
"; var modal_style = document.createElement("style"); /* Adds CSS Styling for ~IFRAME~ */ modal_style.type = "text/css"; if (creative["ad_format"]["custom_css"]) { modal_style.appendChild(document.createTextNode(creative["ad_format"]["custom_css"])); } head.appendChild(modal_style); loadScript(creative.ad_format.short_code, madinad_private_params.base_url); } function renderIndexlessModal(modal, head, creative) { /* Adds HTML Code to madinad_advertisement div */ var modal_style = document.createElement("style"); var campaign_el; if (creative["ad_format"]["is_inarticle"]) { campaign_el = modal; } else { campaign_el = modal.querySelector("#madinad_modal_advertisement"); } campaign_el.innerHTML = creative["ad_format"]["format_html"]; /* Adds CSS Styling for ad */ modal_style.type = "text/css"; if (creative["ad_format"]["custom_css"]) { modal_style.appendChild(document.createTextNode(creative["ad_format"]["custom_css"])); } head.appendChild(modal_style); loadScript(creative.ad_format.short_code, madinad_private_params.base_url); } // Function that checks if a campaign is viewed function isCampaignViewed(campaign) { var cookieName = "viewed_" + campaign + "="; return document .cookie .indexOf(cookieName) > -1; } function loadScript(name, base_url, callback) { var script = document.createElement("script"); var script_url = base_url + name + ".js"; script.src = script_url; if (callback !== undefined) { script.onload = callback; } document .getElementsByTagName("head")[0] .appendChild(script); } function setBaseURLs() { madinad_private_params.assets_src = window.madinadProps.assets_src; madinad_private_params.base_request_url = window.madinadProps.base_request_url; madinad_private_params.base_analytics_url = window.madinadProps.base_analytics_url; } var madinad_private_params = { base_url: "https://static.madinad.com/static/", inArticleCampaigns: [], fullPageCampaigns: [] }; loadScript("madinad_props", madinad_private_params.base_url, function () { setBaseURLs(); setWebsiteIdsObj(); if (window.madinadProps.website_ids.request_url) { retrieveCampaigns(); } } ); }; if ((/Android|webOS|iPhone|iPad|BlackBerry|Windows Phone|Opera Mini|IEMobile|Mobile/i.test(navigator.userAgent) && window.screen.height > window.screen.width)) { if (document.readyState === "complete") { window.madinadInit("mobile"); window.madinadInit = function () { return false; } console.log("readystate: complete | init sdk as: mobile"); } else { console.log("readystate: incomplete | init sdk as: mobile"); document.addEventListener("readystatechange", function () { window.madinadInit("mobile"); window.madinadInit = function () { return false; } }, false); } } else if(window.top.location.href.indexOf("/previewer/") > -1) { if (document.readyState === "complete") { madinadInit("mobile"); window.madinadInit = function () { return false; } console.log("readystate: complete | init sdk as: mobile"); } else { console.log("readystate: incomplete | init sdk as: mobile"); document.addEventListener("readystatechange", function () { window.madinadInit("mobile"); window.madinadInit = function () { return false; } }, false); } } else if(document.getElementById("madinad-contextual-targeting").src.indexOf("?demo=") > -1) { if (document.readyState === "complete") { madinadInit("desktop"); window.madinadInit = function () { return false; } console.log("readystate: complete | init sdk as: desktop"); } else { console.log("readystate: incomplete | init sdk as: desktop"); document.addEventListener("readystatechange", function () { window.madinadInit("desktop"); window.madinadInit = function () { return false; } }, false); } } else { if (document.readyState === "complete") { window.madinadInit("desktop"); window.madinadInit = function () { return false; } console.log("readystate: complete | init sdk as: desktop"); } else { console.log("readystate: incomplete | init sdk as: desktop"); document.addEventListener("readystatechange", function () { madinadInit("desktop"); window.madinadInit = function () { return false; } }, false); } }