var defaults = {
PORTAL: 8471,
IS_ORMMA_SUPPORT: false,
IS_MRAID_SUPPORT: false,
CATEGORY: "",
KEYWORDS: "",
GPS_COORDINATES: "",
LOCATION: "",
IS_MOBILE_WEB: true,
IMEI_MD5: "",
IMEI_SHA1: "",
MAC_MD5: "",
MAC_SHA1: "",
UDID_MD5: "",
UDID_SHA1: "",
IMSI_MD5: "",
IMSI_SHA1: "",
ANDROID_ID_MD5: "",
ANDROID_ID_SHA1: "",
IDFA: "",
IDFV: "",
AGE: "",
GENDER: "",
DEVICE_WIDTH: "",
DEVICE_HEIGHT: "",
MOBILE_NETWORK_CODE: "",
MOBILE_COUNTRY_CODE: "",
NETWORK: "",
OPTIONAL_WIDTH: "",
OPTIONAL_HEIGHT: "",
REQUIRED_WIDTH: "",
REQUIRED_HEIGHT: "",
BG_COLOR: "black"
};
function Ad (opts) {
this._el = document.createElement("div");
this.frame = document.createElement("iframe");
this.frame.style.border = "0";
this.visible = true;
this.needsRefresh = false;
// add some defaults if not specified in options
for (var key in defaults) {
if (opts[key] === undefined) {
opts[key] = defaults[key];
}
}
if (!opts.DEVICE_WIDTH && !opts.DEVICE_HEIGHT) {
opts.DEVICE_WIDTH = window.innerWidth;
opts.DEVICE_HEIGHT = window.innerHeight;
}
if (opts.TYPE === "Interstitial") {
// if portrait
if (opts.DEVICE_WIDTH < opts.DEVICE_HEIGHT) {
opts.IS_INTERSTITIAL_AD = true;
} else {
// if landscape
opts.REQUIRED_WIDTH = 300;
opts.REQUIRED_HEIGHT = 250;
}
opts.FS = true;
} else if (opts.TYPE === "Rectangle") {
opts.REQUIRED_WIDTH = 300;
opts.REQUIRED_HEIGHT = 250;
}
var refreshRate = opts.REFRESH_RATE || 30;
if (refreshRate < 15) refreshRate = 15;
this.refreshRate = refreshRate;
var html = [
"
",
"",
"",
"",
"",
(opts.TYPE === "Interstitial" ? "" : ""),
(opts.TYPE === "Banner" ? "" : ""),
""
];
if (opts.FS) {
//fullscreen
this.setSize(opts.DEVICE_WIDTH, opts.DEVICE_HEIGHT);
var closeBtn = document.createElement("a");
closeBtn.textContent = "close";
closeBtn.style.cssText = "position: absolute; right: 3px; top: 3px; z-index: 1000; color: white" + (opts.CLOSE_STYLE || "");
closeBtn.onclick = function () {
this.remove();
}.bind(this);
this._el.appendChild(closeBtn);
this.closeBtn = closeBtn;
} else {
if (opts.REQUIRED_WIDTH && opts.REQUIRED_HEIGHT) {
this.setSize(opts.REQUIRED_WIDTH, opts.REQUIRED_HEIGHT);
} else {
if (opts.TYPE === "Banner") {
this.setSize(320, 50);
}
}
}
// set to a blank page
setTimeout(function () {
this.frame.src = "data:text/html;charset=utf-8," + html.join(" ");
}.bind(this), 0);
this.frame.style.overflow = "hidden";
this.frame.style.background = opts.BG_COLOR;
this.frame.setAttribute("scrolling", "no");
window.addEventListener("message", function (e) {
// clicked the ad, remove it
if (e.data === "click") {
// remove if interstital
if (opts.FS) this.remove();
// refresh if banner
else this.needsRefresh = true;
} else if (e.data.indexOf('resize:') === 0) {
var dims = e.data.substr(7).split(",");
this.setSize(+dims[0], +dims[1]);
}
}.bind(this), false);
this._el.appendChild(this.frame);
if (opts.TYPE === "Banner") {
this.placement("top", "center");
}
this.startTimer();
document.addEventListener("blur", function () {
this.visible = false;
this.stopTimer();
}.bind(this), false);
document.addEventListener("focus", function () {
this.visible = true;
this.startTimer();
if (this.needsRefresh) { this.refreshAd(); }
}.bind(this), false);
document.addEventListener("mozvisibilitychange", function () {
this.visible = !document.mozHidden;
if (this.needsRefresh && this.visible) { this.refreshAd(); }
if (this.visible) { this.startTimer(); }
else { this.stopTimer(); }
}.bind(this), false)
}
Ad.prototype = {
startTimer: function () {
if (this.interval != null) { return; }
// refresh rate checks if visible
this.interval = setInterval(function () {
if (this.visible) {
this.refreshAd();
}
}.bind(this), this.refreshRate * 1000);
},
stopTimer: function () {
if (typeof this.interval === "number") {
clearInterval(this.interval);
this.interval = null;
}
},
setSize: function (width, height) {
this.frame.width = width;
this.frame.height = height;
if (this.placeVertical || this.placeHorizontal) {
//re calculate the placement on size change
this.placement(
this.placeVertical,
this.placeHorizontal
);
}
return this;
},
placement: function (vertical, horizontal) {
this.frame.style.position = "fixed";
if (vertical) { this.placeVertical = vertical; }
if (horizontal) { this.placeHorizontal = horizontal; }
this.frame.style.top =
this.frame.style.left =
this.frame.style.bottom =
this.frame.style.right = "";
//position the vertical position
switch (vertical) {
case "bottom":
this.frame.style.bottom = "0px";
break;
case "top":
this.frame.style.top = "0px";
break;
case "center":
case "centre":
var pos = (window.innerHeight - this.frame.height) / 2;
this.frame.style.top = Math.floor(pos) + "px";
break;
}
switch (horizontal) {
case "left":
this.frame.style.left = "0px";
break;
case "right":
this.frame.style.right = "0px";
break;
case "center":
case "centre":
var pos = (window.innerWidth - this.frame.width) / 2;
this.frame.style.left = Math.floor(pos) + "px";
break;
}
return this;
},
addTo: function (parent) {
if (this._el.parentNode) {
this._el.parentNode.removeChild(this._el);
}
parent.appendChild(this._el);
return this;
},
refresh: function () {
this.placement(
this.placeVertical,
this.placeHorizontal
);
},
refreshAd: function () {
this.frame.contentWindow.postMessage("refresh", "*");
this.needsRefresh = false;
},
show: function () {
this.refreshAd();
this._el.style.display = "block";
this.visible = true;
},
hide: function () {
this._el.style.display = "none";
this.visible = false;
},
remove: function () {
if (this.interval) {
clearInterval(this.interval);
}
this._el.parentNode.removeChild(this._el);
}
};
var Inneractive = {
createAd: function (opts) {
return new Ad(opts);
}
}