Section 1
//AdView (cpmstar.AdView)
package cpmstar {
import flash.events.*;
import flash.display.*;
import flash.net.*;
import flash.system.*;
import flash.text.*;
import flash.external.*;
import flash.utils.*;
import flash.filters.*;
import flash.media.*;
public class AdView extends Sprite {
const serverUrl:String = "http://server.cpmstar.com/";
const progressBarOutlineColor:Number = 0xFFFFFF;
const progressBarBackgroundColor:Number = 0x400040;
const progressBarForegroundColor:Number = 9474303;
const progressBarDurationColor:Number = 12632319;
const HEADER_HEIGHT:Number = 25;
const FOOTER_HEIGHT:Number = 35;
var urlLoader:URLLoader;
var ad_mc_parent:Sprite;
var leaveBehindFlashUrl:String;
var swfLoader:Loader;
var pixelLoader:Loader;
var completed:Boolean;
var added:Boolean;
var cpmstarGameDesiredFrameRate:int;
var cpmstarGameDesiredQuality:String;
var cpmstarStage:Stage;
var muteLeaveBehind:Boolean;
var skipSeconds:Number;// = 100
var skipFraction:Number;// = 0.25
var lcName:String;
var lc:LocalConnection;
var overlay:Sprite;
var progressBar:Sprite;
var progressBarForeground:Sprite;
var overlay_ad_mc_parent:Sprite;
var overlayLoader:Loader;
var overlayRemoved:Boolean;// = false
var skipButton:Sprite;
var overlayShown:Boolean;
var blockChildAds:Boolean;// = true
var childAdUrl:String;// = "http://cdn3.cpmstar.com/cached/swf/watermark10.swf"
var childAd:Sprite;
var childAdLoader:Loader;
var startVolume:Number;
var adDuration:int;// = 0
var coverStartTime:int;
var progressBarStartTime:int;
var progressBarEnterFrameHandler:Function;
var overlayStartTime:int;
var skipButtonStartTime:int;
var layout:String;
var companionHtml:String;
var containerWidth:Number;
var containerHeight:Number;
var srcUrl:String;// = "undefined"
var cpmstar_url:String;
var campaignID:int;// = 0
var AdEvent:Class;
var skipped:Boolean;
var hasLeaveBehind:Boolean;
var interstitial:int;// = 0
var clickAction:String;
var macros:Object;
var top:DisplayObject;
var parameters:Object;
private var scaleFactor:Number;
private var videoWidth:Number;
private var videoHeight:Number;
private var totalWidth:Number;
private var totalHeight:Number;
public function AdView():void{
urlLoader = new URLLoader();
pixelLoader = new Loader();
super();
Security.allowDomain("cdn.cpmstar.com");
if (stage){
addEventListener(Event.ENTER_FRAME, init);
} else {
addEventListener(Event.ADDED_TO_STAGE, preinit);
};
}
private function preinit(_arg1:Event=null):void{
removeEventListener(Event.ADDED_TO_STAGE, preinit);
addEventListener(Event.ENTER_FRAME, init);
}
private function init(_arg1:Event=null):void{
var scaleMode:String;
var testVar:int;
var allowOverlay:Boolean;
var overlayTime:int;
var allowBuggyAs3Ads:Boolean;
var spaceIndex:int;
var versionParts:Array;
var e = _arg1;
removeEventListener(Event.ENTER_FRAME, init);
try {
AdEvent = (parent.loaderInfo.applicationDomain.getDefinition("cpmstar.AdEvent") as Class);
} catch(e:Error) {
};
if (AdEvent){
sendEventToContainer(new AdEvent(AdEvent.INIT, hasEventListener));
};
top = this;
try {
while (top.parent != null) {
if (((!((top.root == null))) && ((top.root is Stage)))){
break;
};
if ((top.parent is Stage)){
break;
};
if (top.parent.root == top){
break;
};
top = top.parent;
};
} catch(e:Error) {
};
try {
scaleMode = stage.scaleMode;
} catch(e:Error) {
};
if (scaleMode == StageScaleMode.NO_SCALE){
try {
containerWidth = int(stage.stageWidth);
containerHeight = int(stage.stageHeight);
} catch(e:Error) {
};
} else {
try {
containerWidth = top.loaderInfo.width;
containerHeight = top.loaderInfo.height;
} catch(e:Error) {
try {
containerWidth = int(Math.min(stage.width, stage.stageWidth));
containerHeight = int(Math.min(stage.height, stage.stageHeight));
} catch(e:Error) {
try {
containerWidth = int(stage.stageWidth);
containerHeight = int(stage.stageHeight);
} catch(e:Error) {
containerWidth = 0;
containerHeight = 0;
};
};
};
};
if (containerWidth <= 0){
containerWidth = 550;
};
if (containerHeight <= 0){
containerHeight = 440;
};
startVolume = SoundMixer.soundTransform.volume;
urlLoader.addEventListener(Event.COMPLETE, completeHandler);
urlLoader.addEventListener(IOErrorEvent.IO_ERROR, errorHandler);
parameters = loaderInfo.parameters;
if (((clickAction) && ((macros is Object)))){
loadAd();
} else {
if (((((parameters.contentspotid) || (parameters.poolid))) || (parameters["amp;poolid"]))){
allowOverlay = true;
overlayTime = 0;
try {
testVar = stage.width;
srcUrl = stage.loaderInfo.url;
} catch(e:Error) {
allowOverlay = false;
blockChildAds = true;
};
if (parameters.contentspotid != null){
cpmstar_url = ((((((((serverUrl + "viewcontent.aspx?xml=1&contentspotid=") + parameters.contentspotid) + "&maxwidth=") + int(containerWidth)) + "&maxheight=") + ((int(containerHeight) - HEADER_HEIGHT) - FOOTER_HEIGHT)) + "&srcurl=") + encodeURIComponent(srcUrl));
} else {
if (parameters["amp;poolid"] != null){
parameters.poolid = parameters["amp;poolid"];
};
if (parameters["amp;subpoolid"] != null){
parameters.subpoolid = parameters["amp;subpoolid"];
};
if ((((parameters.poolid == null)) || ((parameters.subpoolid == null)))){
return;
};
cpmstar_url = ((((((((((serverUrl + "view.aspx?xml=1&poolid=") + parameters.poolid) + "&subpoolid=") + parameters.subpoolid) + "&maxwidth=") + int(containerWidth)) + "&maxheight=") + ((int(containerHeight) - HEADER_HEIGHT) - FOOTER_HEIGHT)) + "&srcurl=") + encodeURIComponent(srcUrl));
if (parameters["amp;blockoverlays"] != null){
parameters.blockoverlays = parameters["amp;blockoverlays"];
};
if (parameters.blockoverlays == "1"){
cpmstar_url = (cpmstar_url + "&blockoverlays=1");
};
if (parameters["amp;blockchildads"] != null){
parameters.blockchildads = parameters["amp;blockchildads"];
};
if (parameters.blockchildads == "1"){
cpmstar_url = (cpmstar_url + "&blockchildads=1");
};
};
try {
if (top["_cpmstar_lastshown"] != null){
interstitial = (1 + int(((new Date().time / 1000) - top["_cpmstar_lastshown"])));
};
} catch(e:Error) {
};
try {
if (top["_cpmstar_lastoverlay"] != null){
overlayTime = (1 + int(((new Date().time / 1000) - top["_cpmstar_lastoverlay"])));
};
} catch(e:Error) {
};
if (!allowOverlay){
cpmstar_url = (cpmstar_url + "&adtypeid=14");
};
cpmstar_url = (cpmstar_url + "&noadtypeid=24");
if (interstitial != 0){
overlayTime = 1;
};
cpmstar_url = (cpmstar_url + ((("&interstitial=" + interstitial) + "&overlaytime=") + overlayTime));
allowBuggyAs3Ads = false;
try {
if (!Capabilities.isDebugger){
allowBuggyAs3Ads = true;
} else {
spaceIndex = Capabilities.version.indexOf(" ");
if (spaceIndex != -1){
versionParts = Capabilities.version.substr(spaceIndex).split(",");
if ((((versionParts.length >= 2)) && ((((Number(versionParts[0]) > 10)) || ((((Number(versionParts[0]) == 10)) && ((Number(versionParts[1]) >= 1)))))))){
if (top.loaderInfo.swfVersion >= 10){
allowBuggyAs3Ads = true;
if (loaderInfo.hasOwnProperty("uncaughtErrorEvents")){
loaderInfo["uncaughtErrorEvents"].addEventListener("uncaughtError", function (_arg1:Event):void{
_arg1.preventDefault();
});
};
};
};
};
};
} catch(e:Error) {
};
if (allowBuggyAs3Ads){
cpmstar_url = (cpmstar_url + "&trapserrors=1");
};
urlLoader.load(new URLRequest(cpmstar_url));
} else {
if (AdEvent){
sendEventToContainer(new AdEvent(AdEvent.NO_AD, hasLeaveBehind));
};
};
};
addEventListener(Event.REMOVED_FROM_STAGE, swfRemovedHandler);
try {
top["_cpmstar_lastshown"] = (new Date().time / 1000);
} catch(e:Error) {
};
log("init completed");
}
public function configure(_arg1:String, _arg2:Object):void{
this.clickAction = _arg1;
this.macros = _arg2;
}
public function configureXml(_arg1:XML):void{
var _local2:XML;
clickAction = null;
macros = null;
if ((((_arg1 == null)) || ((_arg1.creative[0] == null)))){
if (AdEvent){
sendEventToContainer(new AdEvent(AdEvent.NO_AD, hasLeaveBehind));
};
return;
};
clickAction = _arg1.creative[0].click[0];
macros = {};
for each (_local2 in _arg1.creative[0].macros[0].macro) {
macros[String(_local2.@name[0]).toLowerCase()] = _local2.@value[0];
};
}
private function completeHandler(_arg1:Event):void{
var _local2:URLLoader = URLLoader(_arg1.target);
configureXml(new XML(_local2.data));
loadAd();
}
private function loadAd():void{
var flashUrl:String;
var videoUrl:String;
var flashVars:String;
var referrer:String;
var as3FlashUrl:String;
var overlayUrl:String;
var overlayVars:String;
var i:String;
var campaignIDIdentifier:String;
var campaignIDIndex:Number;
var campaignIDEndIndex:Number;
var pixelUrl:String;
var loader:Loader;
var lcClient:Object;
if (((!(clickAction)) || (!(macros)))){
if (AdEvent){
sendEventToContainer(new AdEvent(AdEvent.NO_AD, hasLeaveBehind));
};
return;
};
var pixelUrls:Array = new Array();
if (clickAction != null){
campaignIDIdentifier = "campaignid=";
campaignIDIndex = clickAction.indexOf(campaignIDIdentifier);
if (campaignIDIndex >= 0){
campaignIDEndIndex = clickAction.indexOf("&", campaignIDIndex);
if (campaignIDEndIndex < 0){
campaignIDEndIndex = clickAction.length;
};
campaignID = Number(clickAction.substring((campaignIDIndex + campaignIDIdentifier.length), campaignIDEndIndex));
};
};
var tmpBlockChildAdsMacroVisted:Boolean;
for (i in macros) {
switch (i){
case "flashurl":
flashUrl = macros[i];
break;
case "videourl":
videoUrl = macros[i];
break;
case "flashvars":
flashVars = macros[i];
break;
case "referrer":
referrer = macros[i];
break;
case "as3flashurl":
as3FlashUrl = macros[i];
break;
case "blockchildads":
blockChildAds = Boolean(macros[i]);
tmpBlockChildAdsMacroVisted = true;
break;
case "overlayurl":
overlayUrl = macros[i];
break;
case "layout":
layout = macros[i];
break;
case "muteleavebehind":
muteLeaveBehind = (macros[i] == "true");
break;
case "ov_skipseconds":
skipSeconds = Number(macros[i]);
break;
case "ov_skipfraction":
skipFraction = Number(macros[i]);
break;
default:
if (i.indexOf("pixelurl") == 0){
pixelUrls.push(macros[i]);
};
if (i.indexOf("ov_") == 0){
if (overlayVars == null){
overlayVars = ((i + "=") + encodeURIComponent(macros[i]));
} else {
overlayVars = (overlayVars + ((("&" + i) + "=") + encodeURIComponent(macros[i])));
};
};
break;
};
};
log("done setting up macros");
if (!tmpBlockChildAdsMacroVisted){
blockChildAds = false;
log("set block child ads to false");
};
if (ad_mc_parent == null){
ad_mc_parent = new Sprite();
addChild(ad_mc_parent);
};
leaveBehindFlashUrl = flashUrl;
if (as3FlashUrl != null){
leaveBehindFlashUrl = as3FlashUrl;
};
if (leaveBehindFlashUrl != null){
if (clickAction != null){
leaveBehindFlashUrl = (leaveBehindFlashUrl + ((leaveBehindFlashUrl.indexOf("?"))==-1) ? "?" : "&");
leaveBehindFlashUrl = (leaveBehindFlashUrl + ("clickTAG=" + encodeURIComponent(clickAction)));
};
if (videoUrl != null){
leaveBehindFlashUrl = (leaveBehindFlashUrl + ((leaveBehindFlashUrl.indexOf("?"))==-1) ? "?" : "&");
leaveBehindFlashUrl = (leaveBehindFlashUrl + ("videourl=" + encodeURIComponent(videoUrl)));
};
if (flashVars != null){
leaveBehindFlashUrl = (leaveBehindFlashUrl + ((leaveBehindFlashUrl.indexOf("?"))==-1) ? "?" : "&");
leaveBehindFlashUrl = (leaveBehindFlashUrl + flashVars);
};
if (referrer != null){
leaveBehindFlashUrl = (leaveBehindFlashUrl + ((leaveBehindFlashUrl.indexOf("?"))==-1) ? "?" : "&");
leaveBehindFlashUrl = (leaveBehindFlashUrl + ((referrer + "=") + getReferrer()));
};
hasLeaveBehind = true;
if (overlayUrl == null){
showLeaveBehindFlashUrl();
};
};
var pixelNumber:int;
while (pixelNumber < pixelUrls.length) {
pixelUrl = pixelUrls[pixelNumber];
loader = new Loader();
loader.load(new URLRequest(((serverUrl + "redirect.aspx?url=") + encodeURIComponent(pixelUrl))));
pixelNumber = (pixelNumber + 1);
};
if (overlayUrl != null){
if (clickAction != null){
overlayUrl = (overlayUrl + ((overlayUrl.indexOf("?"))==-1) ? "?" : "&");
overlayUrl = (overlayUrl + ("clickTAG=" + encodeURIComponent(clickAction)));
};
if (overlayVars != null){
overlayUrl = (overlayUrl + ((overlayUrl.indexOf("?"))==-1) ? "?" : "&");
overlayUrl = (overlayUrl + overlayVars);
};
if (referrer != null){
overlayUrl = (overlayUrl + ((overlayUrl.indexOf("?"))==-1) ? "?" : "&");
overlayUrl = (overlayUrl + ((referrer + "=") + getReferrer()));
};
lcName = ("_cpmstar_" + int((Math.random() * 100000)));
overlayUrl = (overlayUrl + ((overlayUrl.indexOf("?"))==-1) ? "?" : "&");
overlayUrl = (overlayUrl + ((((("lcname=" + lcName) + "&width=") + int(containerWidth)) + "&height=") + ((int(containerHeight) - HEADER_HEIGHT) - FOOTER_HEIGHT)));
lc = new LocalConnection();
lc.allowDomain("*");
lc.allowInsecureDomain("*");
lc.connect(lcName);
lc.addEventListener(StatusEvent.STATUS, function (_arg1:StatusEvent):void{
});
lcClient = new Object();
lcClient.removeOverlay = removeOverlay;
lcClient.showOverlayAd = showOverlayAd;
lc.client = lcClient;
addOverlay();
overlay_ad_mc_parent = new Sprite();
overlay.addChild(overlay_ad_mc_parent);
overlay_ad_mc_parent.visible = false;
overlayLoader = new Loader();
overlay_ad_mc_parent.addChild(overlayLoader);
overlayLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, function (_arg1:Event):void{
removeOverlay();
if (AdEvent){
sendEventToContainer(new AdEvent(AdEvent.ERROR, hasLeaveBehind));
};
});
overlayLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, overlayLoadComplete);
overlayLoader.load(new URLRequest(overlayUrl));
try {
top["_cpmstar_lastoverlay"] = (new Date().time / 1000);
} catch(e:Error) {
};
};
if (((((!(leaveBehindFlashUrl)) && (!(overlayUrl)))) && (AdEvent))){
sendEventToContainer(new AdEvent(AdEvent.NO_AD, hasLeaveBehind));
};
}
private function overlayLoadComplete(_arg1:Event):void{
try {
lc.send((lcName + "_"), "srcUrl", srcUrl);
} catch(e:Error) {
};
}
private function addChildAd():void{
var _local1:String;
if (childAd != null){
return;
};
if (blockChildAds){
return;
};
if (containerHeight < 140){
return;
};
if (interstitial > 0){
return;
};
if (parameters.contentspotid != null){
_local1 = ((childAdUrl + "?contentspotid=") + parameters.contentspotid);
} else {
if (((!((parameters.poolid == null))) && (!((parameters.subpoolid == null))))){
_local1 = ((((childAdUrl + "?poolid=") + parameters.poolid) + "&subpoolid=") + parameters.subpoolid);
} else {
return;
};
};
childAd = new Sprite();
childAd.x = 0;
childAd.y = (containerHeight - 388);
childAd.addEventListener(Event.ENTER_FRAME, childAdEnterFrameHandler);
stage.addChild(childAd);
childAdLoader = new Loader();
childAdLoader.load(new URLRequest(_local1));
childAd.addChild(childAdLoader);
}
private function childAdEnterFrameHandler(_arg1:Event):void{
if ((((childAd == null)) || ((childAd.parent == null)))){
return;
};
var _local2:DisplayObjectContainer = childAd.parent;
if (_local2.getChildIndex(childAd) < (_local2.numChildren - 1)){
_local2.addChildAt(childAd, _local2.numChildren);
};
}
private function addOverlay():void{
overlay = new Sprite();
stage.addChild(overlay);
var _local1:Sprite = new Sprite();
overlay.addChild(_local1);
_local1.graphics.beginFill(0, 0.9);
_local1.graphics.drawRect(0, 0, (2 * containerWidth), (2 * containerHeight));
_local1.graphics.endFill();
coverStartTime = getTimer();
overlay.addEventListener(Event.ENTER_FRAME, overlayEnterFrameHandlerFadeOn);
var _local2:Number = (containerWidth - 20);
var _local3:Number = 10;
progressBar = new Sprite();
overlay.addChild(progressBar);
progressBar.x = ((containerWidth - _local2) / 2);
progressBar.y = ((containerHeight - _local3) - (_local3 / 2));
progressBar.graphics.beginFill(progressBarBackgroundColor);
progressBar.graphics.drawRect(0, 0, _local2, _local3);
progressBar.graphics.endFill();
progressBar.graphics.lineStyle(0, progressBarOutlineColor);
progressBar.graphics.drawRect(0, 0, _local2, _local3);
progressBarForeground = new Sprite();
progressBar.addChild(progressBarForeground);
progressBarForeground.graphics.beginFill(progressBarForegroundColor);
progressBarForeground.graphics.drawRect(1, 1, (_local2 - 1), (_local3 - 1));
progressBarForeground.graphics.endFill();
progressBarStartTime = getTimer();
progressBar.addEventListener(Event.ENTER_FRAME, progressBarEnterFrameHandler1);
}
private function showOverlayAd(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:String):void{
var videoWidth = _arg1;
var videoHeight = _arg2;
var duration = _arg3;
var companionHtml = _arg4;
overlayShown = true;
hasLeaveBehind = ((hasLeaveBehind) || (((companionHtml) && (!((layout == "rightsidecompanion"))))));
totalWidth = videoWidth;
totalHeight = videoHeight;
if (layout == "rightsidecompanion"){
totalWidth = (totalWidth + 306);
totalHeight = Math.max(totalHeight, 250);
};
var originalTotalWidth:Number = totalWidth;
var originalTotalHeight:Number = totalHeight;
if (totalWidth > containerWidth){
totalHeight = ((totalHeight * containerWidth) / totalWidth);
totalWidth = containerWidth;
};
if (totalHeight > ((containerHeight - FOOTER_HEIGHT) - HEADER_HEIGHT)){
totalWidth = ((totalWidth * ((containerHeight - FOOTER_HEIGHT) - HEADER_HEIGHT)) / totalHeight);
totalHeight = ((containerHeight - FOOTER_HEIGHT) - HEADER_HEIGHT);
};
scaleFactor = (totalWidth / originalTotalWidth);
var _local6 = (videoWidth * scaleFactor);
videoWidth = _local6;
this.videoWidth = _local6;
_local6 = (videoHeight * scaleFactor);
videoHeight = _local6;
this.videoHeight = _local6;
overlayLoader.scaleX = scaleFactor;
overlayLoader.scaleY = scaleFactor;
overlay_ad_mc_parent.x = Math.round(((containerWidth - totalWidth) / 2));
overlay_ad_mc_parent.y = Math.round((HEADER_HEIGHT + ((((containerHeight - HEADER_HEIGHT) - FOOTER_HEIGHT) - totalHeight) / 2)));
overlay_ad_mc_parent.visible = true;
var skipButtonParent:Sprite = overlay_ad_mc_parent;
skipButtonParent.graphics.beginFill(0x606060);
skipButtonParent.graphics.drawRect(-3, -3, (totalWidth + 6), (totalHeight + 6));
skipButtonParent.graphics.endFill();
skipButtonParent.graphics.lineStyle(2, 0xD0D0D0, 1, true, "normal", "round", "round");
skipButtonParent.graphics.drawRect(-3, -3, (totalWidth + 6), (totalHeight + 6));
var tf:TextField = new TextField();
skipButtonParent.addChild(tf);
tf.x = ((totalWidth - 200) / 2);
tf.y = -25;
tf.width = 200;
tf.autoSize = TextFieldAutoSize.CENTER;
tf.selectable = false;
tf.setTextFormat(new TextFormat("_sans", 11, 0xFFFFFF, null, null, null, null, null, TextFormatAlign.CENTER));
tf.textColor = 0xFFFFFF;
tf.text = "Brought to you by...";
tf.filters = [new GlowFilter(0x404040, 100, 2, 2, 400, 1)];
skipButton = new Sprite();
skipButtonParent.addChild(skipButton);
skipButton.buttonMode = true;
skipButton.useHandCursor = true;
skipButton.visible = false;
skipButton.alpha = 0;
var skipText:TextField = new TextField();
skipButton.addChild(skipText);
skipText.setTextFormat(new TextFormat("_sans", 11, 13684991, null, null, true, null, null, TextFormatAlign.RIGHT));
skipText.textColor = 13684991;
skipText.text = "Skip Ad";
skipText.selectable = false;
skipText.filters = [new GlowFilter(0x404040, 100, 2, 2, 400, 1)];
skipButton.x = Math.round(((totalWidth + 3) - skipText.width));
skipButton.y = Math.round((totalHeight + 5));
skipButton.addEventListener(MouseEvent.CLICK, function (_arg1:Event):void{
try {
lc.send((lcName + "_"), "skip");
} catch(e:Error) {
};
skipped = true;
removeOverlay();
if (AdEvent){
sendEventToContainer(new AdEvent(AdEvent.SKIPPED, hasLeaveBehind));
};
});
adDuration = (duration * 1000);
var barWidth:Number = (containerWidth - 20);
var barHeight:Number = 10;
progressBar.graphics.beginFill(progressBarForegroundColor);
progressBar.graphics.drawRect(0, 0, barWidth, barHeight);
progressBar.graphics.endFill();
progressBar.graphics.lineStyle(0, progressBarOutlineColor);
progressBar.graphics.drawRect(0, 0, barWidth, barHeight);
progressBarForeground.graphics.beginFill(progressBarDurationColor);
progressBarForeground.graphics.drawRect(1, 1, (barWidth - 1), (barHeight - 1));
progressBarForeground.graphics.endFill();
progressBarForeground.scaleX = 0;
progressBarStartTime = getTimer();
progressBar.removeEventListener(Event.ENTER_FRAME, progressBarEnterFrameHandler1);
progressBar.addEventListener(Event.ENTER_FRAME, progressBarEnterFrameHandler2);
this.companionHtml = companionHtml;
if (layout == "rightsidecompanion"){
showCompanion();
};
if (AdEvent){
sendEventToContainer(new AdEvent(AdEvent.OVERLAY_STARTED, hasLeaveBehind));
};
}
private function showCompanion():void{
var _local2:Sprite;
var _local3:Sprite;
var _local4:Sprite;
if (companionHtml == null){
return;
};
var _local1:Object = HTMLCompanion.parseHTML(companionHtml, new Object());
if (layout == "rightsidecompanion"){
_local2 = new Sprite();
_local2.graphics.beginFill(0);
_local2.graphics.drawRect(-2, -2, 304, 254);
_local2.graphics.endFill();
_local2.scaleX = scaleFactor;
_local2.scaleY = scaleFactor;
_local3 = new Sprite();
_local2.addChild(_local3);
_local4 = new Sprite();
_local4.graphics.beginFill(0);
_local4.graphics.drawRect(0, 0, 300, 250);
_local4.graphics.endFill();
_local4.visible = false;
_local3.addChild(_local4);
_local3.mask = _local4;
overlay_ad_mc_parent.addChild(_local2);
HTMLCompanion.parseCompanionNodes(_local3, _local1);
_local3.soundTransform = new SoundTransform(0);
_local2.x = ((overlayLoader.x + videoWidth) + 4);
_local2.y = ((totalHeight - (250 * scaleFactor)) / 2);
} else {
HTMLCompanion.parseCompanionNodes(ad_mc_parent, _local1);
if (AdEvent){
sendEventToContainer(new AdEvent(AdEvent.LEAVE_BEHIND, hasLeaveBehind));
};
};
companionHtml = null;
}
private function showLeaveBehindFlashUrl():void{
if (leaveBehindFlashUrl != null){
swfLoader = new Loader();
swfLoader.contentLoaderInfo.addEventListener(Event.INIT, swfInitHandler);
swfLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, swfCompleteHandler);
swfLoader.addEventListener(Event.ADDED_TO_STAGE, swfAddedHandler);
swfLoader.load(new URLRequest(leaveBehindFlashUrl));
swfLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, errorHandler);
swfLoader.visible = false;
addChild(swfLoader);
if (muteLeaveBehind){
SoundMixer.soundTransform = new SoundTransform(0);
};
};
}
private function progressBarEnterFrameHandler1(_arg1:Event):void{
var _local3:Number = Math.min(1, ((getTimer() - progressBarStartTime) / 10000));
progressBarForeground.scaleX = _local3;
if (_local3 >= 1){
_arg1.currentTarget.removeEventListener(Event.ENTER_FRAME, arguments.callee);
if (lc != null){
try {
lc.send((lcName + "_"), "skip");
} catch(e:Error) {
};
};
removeOverlay();
};
}
private function progressBarEnterFrameHandler2(_arg1:Event):void{
var _local3:Number = ((getTimer() - progressBarStartTime) / 1000);
var _local4:Number = Math.min(1, ((getTimer() - progressBarStartTime) / adDuration));
progressBarForeground.scaleX = _local4;
if ((((((_local4 >= skipFraction)) || ((_local3 > skipSeconds)))) && ((skipButton.visible == false)))){
showSkipButton();
};
if (_local4 >= 1){
_arg1.currentTarget.removeEventListener(Event.ENTER_FRAME, arguments.callee);
};
}
private function showSkipButton():void{
if ((((skipButton == null)) || (skipButton.visible))){
return;
};
skipButton.visible = true;
skipButtonStartTime = getTimer();
skipButton.addEventListener(Event.ENTER_FRAME, function (_arg1:Event):void{
var _local3:Number = Math.min(1, ((getTimer() - skipButtonStartTime) / 1000));
skipButton.alpha = _local3;
if (_local3 == 1){
_arg1.currentTarget.removeEventListener(Event.ENTER_FRAME, arguments.callee);
};
});
if (AdEvent){
sendEventToContainer(new AdEvent(AdEvent.SKIP_ALLOWED, hasLeaveBehind));
};
}
private function overlayEnterFrameHandlerFadeOn(_arg1:Event):void{
if (overlay == null){
return;
};
var _local3:Number = Math.min(1, ((getTimer() - coverStartTime) / 500));
overlay.alpha = _local3;
if (_local3 == 1){
_arg1.currentTarget.removeEventListener(Event.ENTER_FRAME, arguments.callee);
};
}
private function overlayEnterFrameHandlerFadeOff(_arg1:Event):void{
if (overlay == null){
return;
};
var _local3:Number = Math.max(0, (1 - ((getTimer() - overlayStartTime) / 500)));
overlay.alpha = _local3;
if (_local3 == 0){
_arg1.currentTarget.removeEventListener(Event.ENTER_FRAME, arguments.callee);
overlay.parent.removeChild(overlay);
};
}
private function removeOverlay():void{
if (swfLoader != null){
swfLoader.visible = true;
};
if (((!((overlay == null))) && (!(overlayRemoved)))){
overlayRemoved = true;
if (skipButton != null){
skipButton.visible = false;
};
progressBar.removeEventListener(Event.ENTER_FRAME, progressBarEnterFrameHandler2);
overlayStartTime = getTimer();
overlay.addEventListener(Event.ENTER_FRAME, overlayEnterFrameHandlerFadeOff);
if (overlayShown){
if (layout != "rightsidecompanion"){
showCompanion();
};
if (((!(skipped)) && (AdEvent))){
sendEventToContainer(new AdEvent(AdEvent.OVERLAY_COMPLETE, hasLeaveBehind));
};
showLeaveBehindFlashUrl();
} else {
cpmstar_url = (cpmstar_url + "&adtypeid=14");
if (campaignID != 0){
cpmstar_url = (cpmstar_url + ("&defaultcampaignid=" + campaignID));
};
urlLoader.load(new URLRequest(cpmstar_url));
};
if (lc != null){
try {
lc.close();
} catch(e:Error) {
};
lc = null;
};
if (overlay_ad_mc_parent != null){
overlay_ad_mc_parent.soundTransform = new SoundTransform(0, 0);
};
};
}
private function swfInitHandler(_arg1:Event):void{
var _local2:Sprite = new Sprite();
_local2.graphics.beginFill(0);
_local2.graphics.drawRect(0, 0, 300, 250);
_local2.graphics.endFill();
addChild(_local2);
swfLoader.mask = _local2;
swfLoader.visible = true;
}
private function swfCompleteHandler(_arg1:Event):void{
var _local2:LoaderInfo = Loader(_arg1.target.loader).contentLoaderInfo;
completed = true;
tryToSetFramerate(_arg1.target.loader);
if (AdEvent){
sendEventToContainer(new AdEvent(AdEvent.LEAVE_BEHIND, hasLeaveBehind));
};
}
private function swfAddedHandler(_arg1:Event):void{
added = true;
tryToSetFramerate(DisplayObject(_arg1.target));
}
private function tryToSetFramerate(_arg1:DisplayObject):void{
if (((!(completed)) || (!(added)))){
return;
};
}
private function errorHandler(_arg1:Event):void{
swfRemovedHandler(_arg1);
if (AdEvent){
sendEventToContainer(new AdEvent(AdEvent.ERROR, hasLeaveBehind));
};
}
private function sendEventToContainer(_arg1:Event):void{
try {
parent.parent.dispatchEvent(_arg1);
} catch(e:Error) {
};
}
private function swfRemovedHandler(_arg1:Event):void{
var event = _arg1;
if (event.currentTarget == this){
removeEventListener(Event.REMOVED_FROM_STAGE, swfRemovedHandler);
try {
addChildAd();
if (swfLoader != null){
swfLoader.unload();
if (swfLoader.parent != null){
swfLoader.parent.removeChild(swfLoader);
};
swfLoader = null;
if (pixelLoader != null){
pixelLoader.unload();
pixelLoader = null;
};
};
if (ad_mc_parent != null){
ad_mc_parent.parent.removeChild(ad_mc_parent);
ad_mc_parent = null;
};
if (overlay != null){
if (overlayLoader != null){
try {
var _local3 = overlayLoader;
_local3["unloadAndStop"]();
} catch(e:Error) {
overlayLoader.unload();
};
};
overlay.parent.removeChild(overlay);
overlay = null;
};
if (lc != null){
lc.close();
lc = null;
};
HTMLCompanion.cleanup();
SoundMixer.soundTransform = new SoundTransform(startVolume);
} catch(e:Error) {
};
};
}
private function getReferrer():String{
var _local1:String = String(ExternalInterface.call("function(){return location.href;}"));
if (_local1 == null){
_local1 = parent.root.loaderInfo.loaderURL;
};
return (_local1);
}
private static function log(_arg1:String):void{
}
}
}//package cpmstar
Section 2
//HTMLCompanion (cpmstar.HTMLCompanion)
package cpmstar {
import flash.events.*;
import flash.display.*;
import flash.net.*;
import flash.utils.*;
public class HTMLCompanion {
private static const ws:Array = [" ", "\t", "\r", "\n"];
private static const wse:Array = [" ", "\t", "\r", "\n", "="];
private static var loaders:Array = [];
private static var hrefUrl:String = null;
private static var realRoot:DisplayObjectContainer;
private static var parseFns:Object = {a:parseAnchor, img:parseImg, iframe:parseIFrame, html:parseHtmlTag, body:parseRecurse, noscript:parseRecurse, span:parseRecurse, div:parseRecurse, table:parseRecurse, tr:parseRecurse, td:parseRecurse, object:parseObject};
public static function indexOfAny(_arg1:String, _arg2:Array, _arg3:Number):Number{
var _local6:Number;
var _local7:String;
var _local8:String;
var _local4:Number = _arg1.length;
var _local5:Number = _arg2.length;
while (_arg3 < _local4) {
_local6 = 0;
while (_local6 < _local5) {
_local7 = _arg1.charAt(_arg3);
_local8 = _arg2[_local6];
if (_local7 == _local8){
break;
};
_local6++;
};
if (_local6 < _local5){
break;
};
_arg3++;
};
if (_arg3 == _local4){
_arg3 = -1;
};
return (_arg3);
}
public static function lastIndexOfAny(_arg1:String, _arg2:Array, _arg3:Number):Number{
var _local5:Number;
var _local6:String;
var _local7:String;
var _local4:Number = _arg2.length;
while (_arg3 >= 0) {
_local5 = 0;
while (_local5 < _local4) {
_local6 = _arg1.charAt(_arg3);
_local7 = _arg2[_local5];
if (_local6 == _local7){
break;
};
_local5++;
};
if (_local5 < _local4){
break;
};
_arg3--;
};
return (_arg3);
}
public static function indexOfNotAny(_arg1:String, _arg2:Array, _arg3:Number):Number{
var _local6:Number;
var _local7:String;
var _local8:String;
var _local4:Number = _arg1.length;
var _local5:Number = _arg2.length;
while (_arg3 < _local4) {
_local6 = 0;
while (_local6 < _local5) {
_local7 = _arg1.charAt(_arg3);
_local8 = _arg2[_local6];
if (_local7 == _local8){
break;
};
_local6++;
};
if (_local6 == _local5){
break;
};
_arg3++;
};
if (_arg3 == _local4){
_arg3 = -1;
};
return (_arg3);
}
public static function lastIndexOfNotAny(_arg1:String, _arg2:Array, _arg3:Number):Number{
var _local5:Number;
var _local6:String;
var _local7:String;
var _local4:Number = _arg2.length;
while (_arg3 >= 0) {
_local5 = 0;
while (_local5 < _local4) {
_local6 = _arg1.charAt(_arg3);
_local7 = _arg2[_local5];
if (_local6 == _local7){
break;
};
_local5++;
};
if (_local5 == _local4){
break;
};
_arg3--;
};
return (_arg3);
}
public static function parseHTML(_arg1:String, _arg2:Object):Object{
var _local4:Number;
var _local5:Number;
var _local6:String;
var _local7:Number;
var _local8:Number;
var _local9:Boolean;
var _local10:Array;
var _local11:Object;
var _local12:String;
var _local13:Number;
var _local14:Number;
var _local15:Number;
var _local16:Number;
var _local17:Number;
var _local18:Number;
var _local19:String;
var _local20:Number;
var _local3:Number = 0;
while ((((_local3 < _arg1.length)) && (!((_arg1.indexOf("<", _local3) == -1))))) {
if (_arg1.substr(_local3, 4) == "<!--"){
_local4 = _arg1.indexOf("-->", (_local3 + 1));
if (_local4 == -1){
break;
};
_local3 = (_local4 + 1);
} else {
_local4 = _arg1.indexOf(">", (_local3 + 1));
if (_local4 == -1){
break;
};
_local5 = indexOfAny(_arg1, ws, (_local3 + 1));
if (_local5 == (_local3 + 1)){
break;
};
if ((((_local5 == -1)) || ((_local5 > _local4)))){
_local5 = _local4;
if (_arg1.charAt((_local4 - 1)) == "/"){
_local5 = (_local4 - 1);
};
};
_local6 = _arg1.substring((_local3 + 1), _local5).toLowerCase();
_local7 = _local3;
_local8 = _local4;
_local9 = (_arg1.charAt((_local4 - 1)) == "/");
if (!_local9){
_local7 = _arg1.toLowerCase().indexOf((("</" + _local6) + ">"), (_local4 + 1));
if (_local7 == -1){
_local8 = _local4;
} else {
_local8 = ((_local7 + (("</" + _local6) + ">").length) - 1);
};
};
_local10 = _arg2[_local6];
if (_local10 == null){
_local10 = (_arg2[_local6] = new Array());
};
_local11 = new Object();
_local10.push(_local11);
_local12 = _arg1.substring(_local5, (_local9) ? (_local4 - 1) : _local4);
_local13 = 0;
do {
_local14 = indexOfNotAny(_local12, ws, _local13);
} while (_local14 != -1);
if (_local8 != _local4){
_local11["nodeContents"] = _arg1.substring((_local4 + 1), _local7);
parseHTML(_arg1.substring((_local4 + 1), _local7), _local11);
};
_local3 = (_local8 + 1);
};
};
return (_arg2);
}
public static function parseCompanionNodes(_arg1:DisplayObjectContainer, _arg2:Object):void{
HTMLCompanion.realRoot = _arg1;
delete parseFns["script"];
parseFns["noscript"] = parseRecurse;
parseRecurse(_arg2, null);
}
public static function parseRecurse(_arg1:Object, _arg2:String):void{
var _local3:String;
var _local4:Function;
var _local5:Number;
for (_local3 in _arg1) {
_local4 = parseFns[_local3];
if (_local4 != null){
_local5 = 0;
while (_local5 < _arg1[_local3].length) {
_local4(_arg1[_local3][_local5], _arg2);
_local5++;
};
};
};
}
public static function parseHtmlTag(_arg1:Object, _arg2:String):void{
if (_arg1["@clickthrough"] != null){
HTMLCompanion.hrefUrl = _arg1["@clickthrough"];
};
if (_arg1["@parsescripts"] != null){
parseFns["script"] = parseScript;
delete parseFns["noscript"];
};
parseRecurse(_arg1, _arg2);
}
public static function parseScript(_arg1:Object, _arg2:String):void{
var loader:URLLoader;
var xml = _arg1;
var href = _arg2;
if (xml["@src"] != null){
loader = new URLLoader();
loaders.push(loader);
loader.addEventListener(Event.COMPLETE, onLoadScript);
loader.addEventListener(IOErrorEvent.IO_ERROR, function (_arg1:Event):void{
});
loader.load(new URLRequest(xml["@src"]));
} else {
renderJavascript(xml["nodeContents"]);
};
}
public static function onLoadScript(_arg1:Event):void{
var _local2:URLLoader = URLLoader(_arg1.target);
var _local3:String = _local2.data;
renderJavascript(_local3);
}
public static function renderJavascript(_arg1:String):void{
var _local3:Number;
var _local4:Number;
var _local5:String;
var _local2:Number = _arg1.toLowerCase().indexOf(".swf");
if (_local2 != -1){
_local3 = Math.max(_arg1.lastIndexOf("'", _local2), _arg1.lastIndexOf("\"", _local2));
if (_local3 != -1){
_local4 = _arg1.indexOf(_arg1.charAt(_local3), _local2);
if (_local4 != -1){
if (_arg1.substr((_local3 - 2), 2).indexOf("+") == -1){
if (_arg1.substr((_local4 + 1), 2).indexOf("+") == -1){
_local5 = _arg1.substring((_local3 + 1), _local4);
addCompanion(_local5, hrefUrl);
};
};
};
};
};
}
public static function parseObject(_arg1:Object, _arg2:String):void{
if (_arg1["@data"] != null){
if (((!((_arg1["@data"].toLowerCase().indexOf(".swf") == -1))) || (((!((_arg1["@type"] == null))) && ((_arg1["@type"].toLowerCase() == "application/x-shockwave-flash")))))){
addCompanion(_arg1["@data"], hrefUrl);
};
};
}
public static function parseIFrame(_arg1:Object, _arg2:String):void{
var xml = _arg1;
var href = _arg2;
if (String(xml["@src"]).toLowerCase().indexOf("about:") == 0){
return;
};
var loader:URLLoader = new URLLoader();
loaders.push(loader);
loader.addEventListener(Event.COMPLETE, onLoadIFrame);
loader.addEventListener(IOErrorEvent.IO_ERROR, function (_arg1:Event):void{
});
loader.load(new URLRequest(xml["@src"]));
}
public static function onLoadIFrame(_arg1:Event):void{
var _local2:URLLoader = URLLoader(_arg1.target);
var _local3:String = _local2.data;
var _local4:Object = parseHTML(_local3, new Object());
parseRecurse(_local4, null);
}
public static function parseAnchor(_arg1:Object, _arg2:String):void{
_arg2 = _arg1["@href"];
parseRecurse(_arg1, _arg2);
}
public static function parseImg(_arg1:Object, _arg2:String):void{
var _local3:Number = int(_arg1["@width"]);
var _local4:Number = int(_arg1["@height"]);
var _local5:String = String(_arg1["@src"]);
var _local6:String = String(_arg1["@style"]);
if (((!((_local6.toLowerCase().indexOf("display:none") == -1))) || (((((((!((_arg1["@width"] == null))) && ((_local3 <= 1)))) && (!((_arg1["@height"] == null))))) && ((_local4 <= 1)))))){
hitPixel(_local5);
} else {
addCompanion(_local5, _arg2);
};
}
private static function addCompanion(_arg1:String, _arg2:String):void{
var src = _arg1;
var href = _arg2;
var companionAdParent:Sprite = new Sprite();
realRoot.addChild(companionAdParent);
var companionAd:Loader = new Loader();
loaders.push(companionAd);
companionAdParent.addChild(companionAd);
companionAd.load(new URLRequest(src));
companionAd.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, function (_arg1:Event):void{
_arg1.currentTarget.removeEventListener(IOErrorEvent.IO_ERROR, arguments.callee);
});
if (href != null){
HTMLCompanion.hrefUrl = href;
companionAdParent.buttonMode = true;
companionAdParent.useHandCursor = true;
companionAdParent.mouseChildren = false;
companionAdParent.mouseEnabled = true;
companionAdParent.addEventListener(MouseEvent.CLICK, function (_arg1:Event):void{
navigateToURL(new URLRequest(HTMLCompanion.hrefUrl), "_blank");
});
};
}
private static function hitPixel(_arg1:String):void{
var _local2:Loader;
if (((!((_arg1 == null))) && (!((_arg1 == ""))))){
_local2 = new Loader();
_local2.load(new URLRequest(_arg1));
loaders.push(_local2);
};
}
public static function cleanup():void{
var _local1:*;
for each (_local1 in loaders) {
if ((_local1 is Loader)){
Loader(_local1).unload();
};
};
loaders = null;
}
}
}//package cpmstar