<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: MochiAds code</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Fri, 29 Aug 2008 22:45:17 GMT</pubDate>
    <description>DZone Snippets: MochiAds code</description>
    <item>
      <title>haXe MochiAds</title>
      <link>http://snippets.dzone.com/posts/show/4739</link>
      <description>&lt;code&gt;&lt;br /&gt;test&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Tue, 06 Nov 2007 22:08:26 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/4739</guid>
      <author>Zealot (Zealot Aaa)</author>
    </item>
    <item>
      <title>haXe MochiAds</title>
      <link>http://snippets.dzone.com/posts/show/4738</link>
      <description>&lt;code&gt;&lt;br /&gt;/*&lt;br /&gt;   Mochiads.com ActionScript 3 code, version 1.5&lt;br /&gt;&lt;br /&gt;   Flash movies should be published for Flash 9 or later.&lt;br /&gt;&lt;br /&gt;   Copyright(C) 2006-2007 Mochi Media, Inc. All rights reserved.&lt;br /&gt; */&lt;br /&gt;&lt;br /&gt;import flash.system.Security;&lt;br /&gt;import flash.display.MovieClip;&lt;br /&gt;import flash.display.Loader;&lt;br /&gt;import flash.events.Event;&lt;br /&gt;import flash.events.IOErrorEvent;&lt;br /&gt;import flash.net.URLRequest;&lt;br /&gt;import flash.net.URLRequestMethod;&lt;br /&gt;import flash.net.URLVariables;&lt;br /&gt;import flash.net.LocalConnection;&lt;br /&gt;import flash.Lib;&lt;br /&gt;import Type;&lt;br /&gt;import StringTools;&lt;br /&gt;&lt;br /&gt;class Mochiad{&lt;br /&gt;&lt;br /&gt;	public static function getVersion(): String{&lt;br /&gt;		return "1.5";&lt;br /&gt;	}&lt;br /&gt;&lt;br /&gt;	public static function doOnEnterFrame(mc: Dynamic) {&lt;br /&gt;		var f: Dynamic;&lt;br /&gt;		f = function(ev: Dynamic) {&lt;br /&gt;			if(mc.onEnterFrame != null){&lt;br /&gt;				mc.onEnterFrame();&lt;br /&gt;			} else{&lt;br /&gt;				mc.removeEventListener(Event.ENTER_FRAME, f);&lt;br /&gt;			}&lt;br /&gt;&lt;br /&gt;		}&lt;br /&gt;		mc.addEventListener(Event.ENTER_FRAME, f);&lt;br /&gt;	}&lt;br /&gt;&lt;br /&gt;	public static function createEmptyMovieClip(parent: Dynamic, name: String, depth: Float): MovieClip{&lt;br /&gt;		var mc: MovieClip = new MovieClip();&lt;br /&gt;		if(false){ //&amp;&amp; depth)  //////////// what does "false &amp;&amp; depth" mean?&lt;br /&gt;			parent.addChildAt(mc, depth);&lt;br /&gt;		} else{&lt;br /&gt;			parent.addChild(mc);&lt;br /&gt;		}&lt;br /&gt;		Reflect.setField(parent, name, mc);&lt;br /&gt;		Reflect.setField(mc, "_name", name);&lt;br /&gt;		return mc;&lt;br /&gt;	}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;	public static function showPreloaderAd(options: Dynamic){&lt;br /&gt;		/*&lt;br /&gt;		   This function will stop the clip, load the Mochiad in a&lt;br /&gt;		   centered position on the clip, and then resume the clip&lt;br /&gt;		   after a timeout or when this movie is loaded, whichever&lt;br /&gt;		   comes first.&lt;br /&gt;&lt;br /&gt;options: &lt;br /&gt;An Dynamic with keys and values to pass to the server.&lt;br /&gt;These options will be passed to Mochiad.load, but the&lt;br /&gt;following options are unique to showPreloaderAd.&lt;br /&gt;&lt;br /&gt;clip is a MovieClip reference to place the ad in.&lt;br /&gt;clip must be dynamic.&lt;br /&gt;&lt;br /&gt;ad_timeout is the Float of milliseconds to wait&lt;br /&gt;for the ad to start loading(default:  2000).&lt;br /&gt;&lt;br /&gt;color is the color of the preloader bar&lt;br /&gt;as a Float(default:  0xFF8A00)&lt;br /&gt;&lt;br /&gt;background is the inside color of the preloader&lt;br /&gt;bar as a Float(default:  0xFFFFC9)&lt;br /&gt;&lt;br /&gt;outline is the outline color of the preloader&lt;br /&gt;bar as a Float(default:  0xD58B3C)&lt;br /&gt;&lt;br /&gt;fadeout_time is the Float of milliseconds to&lt;br /&gt;fade out the ad upon completion(default:  250).&lt;br /&gt;&lt;br /&gt;ad_started is the function to call when the ad&lt;br /&gt;has started(may not get called if network down)&lt;br /&gt;(default:  function(){ this.clip.stop() }).&lt;br /&gt;&lt;br /&gt;ad_finished is the function to call when the ad&lt;br /&gt;has finished or could not load&lt;br /&gt;(default:  function(){ this.clip.play() }).&lt;br /&gt;		 */&lt;br /&gt;		var DEFAULTS: Dynamic = {&lt;br /&gt;			clip:  Lib.current,&lt;br /&gt;			ad_timeout:  3000,&lt;br /&gt;			fadeout_time:  250,&lt;br /&gt;			regpt:  "o",&lt;br /&gt;			method:  "showPreloaderAd",&lt;br /&gt;			color:  0xFF8A00,&lt;br /&gt;			background:  0xFFFFC9,&lt;br /&gt;			outline:  0xD58B3C,&lt;br /&gt;			ad_started:  function(){Lib.current.stop();},&lt;br /&gt;			ad_finished:  function(){Lib.current.play();}&lt;br /&gt;		};&lt;br /&gt;&lt;br /&gt;		options = Mochiad.parseOptions(options, DEFAULTS);&lt;br /&gt;&lt;br /&gt;		var clip: Dynamic = options.clip;&lt;br /&gt;		var ad_msec: Float = 11000;&lt;br /&gt;		var ad_timeout: Float = options.ad_timeout;&lt;br /&gt;		options.ad_timeout = null;&lt;br /&gt;		var fadeout_time: Float = options.fadeout_time;&lt;br /&gt;		options.fadeout_time = null;&lt;br /&gt;&lt;br /&gt;		if(Mochiad.load(options) == null){&lt;br /&gt;			options.ad_finished();&lt;br /&gt;			return;&lt;br /&gt;		}&lt;br /&gt;&lt;br /&gt;		options.ad_started();&lt;br /&gt;&lt;br /&gt;		var mc: Dynamic = clip._mochiad;&lt;br /&gt;		mc.onUnload = function(){&lt;br /&gt;			options.ad_finished();&lt;br /&gt;		}&lt;br /&gt;&lt;br /&gt;		/* Center the clip */&lt;br /&gt;&lt;br /&gt;		var wh: Array&lt;Dynamic&gt; = Mochiad.getRes(options, clip);&lt;br /&gt;&lt;br /&gt;		var w: Float = wh[0];&lt;br /&gt;		var h: Float = wh[1];&lt;br /&gt;		mc.x = w * 0.5;&lt;br /&gt;		mc.y = h * 0.5;&lt;br /&gt;&lt;br /&gt;		var chk: Dynamic = createEmptyMovieClip(mc, "_mochiad_wait", 3);&lt;br /&gt;		chk.x = w * -0.5;&lt;br /&gt;		chk.y = h * -0.5;&lt;br /&gt;&lt;br /&gt;		var bar: MovieClip = createEmptyMovieClip(chk, "_mochiad_bar", 4);&lt;br /&gt;		bar.x = 10;&lt;br /&gt;		bar.y = h - 20;&lt;br /&gt;&lt;br /&gt;		var bar_color: Float = options.color;&lt;br /&gt;		options.color = null;&lt;br /&gt;		var bar_background: Float = options.background;&lt;br /&gt;		options.background = null;&lt;br /&gt;		var bar_outline: Float = options.outline;&lt;br /&gt;		options.outline = null;&lt;br /&gt;&lt;br /&gt;		var backing_mc: MovieClip = createEmptyMovieClip(bar, "_outline", 1);&lt;br /&gt;		var backing: Dynamic = backing_mc.graphics;&lt;br /&gt;&lt;br /&gt;		backing.beginFill(bar_background);&lt;br /&gt;		backing.moveTo(0, 0);&lt;br /&gt;		backing.lineTo(w - 20, 0);&lt;br /&gt;		backing.lineTo(w - 20, 10);&lt;br /&gt;		backing.lineTo(0, 10);&lt;br /&gt;		backing.lineTo(0, 0);&lt;br /&gt;		backing.endFill();&lt;br /&gt;&lt;br /&gt;		var inside_mc: MovieClip = createEmptyMovieClip(bar, "_inside", 2);&lt;br /&gt;		var inside: Dynamic = inside_mc.graphics;&lt;br /&gt;		inside.beginFill(bar_color);&lt;br /&gt;		inside.moveTo(0, 0);&lt;br /&gt;		inside.lineTo(w - 20, 0);&lt;br /&gt;		inside.lineTo(w - 20, 10);&lt;br /&gt;		inside.lineTo(0, 10);&lt;br /&gt;		inside.lineTo(0, 0);&lt;br /&gt;		inside.endFill();&lt;br /&gt;		inside_mc.scaleX = 0;&lt;br /&gt;&lt;br /&gt;		var outline_mc: MovieClip = createEmptyMovieClip(bar, "_outline", 3);&lt;br /&gt;		var outline: Dynamic = outline_mc.graphics;&lt;br /&gt;		outline.lineStyle(0, bar_outline, 100);&lt;br /&gt;		outline.moveTo(0, 0);&lt;br /&gt;		outline.lineTo(w - 20, 0);&lt;br /&gt;		outline.lineTo(w - 20, 10);&lt;br /&gt;		outline.lineTo(0, 10);&lt;br /&gt;		outline.lineTo(0, 0);&lt;br /&gt;&lt;br /&gt;		chk.ad_msec = ad_msec;&lt;br /&gt;		chk.ad_timeout = ad_timeout;&lt;br /&gt;		chk.started = Lib.getTimer();&lt;br /&gt;		chk.showing = false;&lt;br /&gt;		chk.last_pcnt = 0.0;&lt;br /&gt;		chk.fadeout_time = fadeout_time;&lt;br /&gt;&lt;br /&gt;		chk.fadeFunction = function(){&lt;br /&gt;			var p: Float = 100 *(1 - ((Lib.getTimer() - chk.fadeout_start) / chk.fadeout_time));&lt;br /&gt;&lt;br /&gt;			if(p &gt; 0){&lt;br /&gt;				chk.parent.alpha = p * 0.01;&lt;br /&gt;			} else{&lt;br /&gt;				var _clip: MovieClip = chk.parent.parent;&lt;br /&gt;				Mochiad.unload(_clip);&lt;br /&gt;				chk.onEnterFrame = null;&lt;br /&gt;			}&lt;br /&gt;		};&lt;br /&gt;&lt;br /&gt;		mc.unloadAd = function(){&lt;br /&gt;			Mochiad.unload(clip);&lt;br /&gt;		}&lt;br /&gt;&lt;br /&gt;		mc.adjustProgress = function(msec: Float){&lt;br /&gt;			var _chk: Dynamic = mc._mochiad_wait;&lt;br /&gt;			_chk.server_control = true;&lt;br /&gt;			_chk.started = Lib.getTimer();&lt;br /&gt;			_chk.ad_msec = msec;&lt;br /&gt;		};&lt;br /&gt;&lt;br /&gt;		chk.onEnterFrame = function(){&lt;br /&gt;			var _clip: Dynamic = chk.parent.parent.root;&lt;br /&gt;			if(!_clip){&lt;br /&gt;				chk.onEnterFrame = null;&lt;br /&gt;				return;&lt;br /&gt;			}&lt;br /&gt;			var ad_clip: Dynamic = chk.parent._mochiad_ctr;&lt;br /&gt;			var elapsed: Float = Lib.getTimer() - chk.started;&lt;br /&gt;			var finished: Bool = false;&lt;br /&gt;			var clip_total: Float = _clip.loaderInfo.bytesTotal;&lt;br /&gt;			var clip_loaded: Float = _clip.loaderInfo.bytesLoaded;&lt;br /&gt;			var clip_pcnt: Float = (100.0 * clip_loaded) / clip_total;&lt;br /&gt;			var ad_pcnt: Float = (100.0 * elapsed) / chk.ad_msec;&lt;br /&gt;			var _inside: Dynamic = chk._mochiad_bar._inside;&lt;br /&gt;			//var pcnt: Float = Math.min(100.0, Math.min((clip_pcnt || 0.0), ad_pcnt)); // what is "clip_pcnt || 0.0"?&lt;br /&gt;			var pcnt: Float = Math.min(100.0, Math.min((clip_pcnt), ad_pcnt));&lt;br /&gt;			pcnt = Math.max(chk.last_pcnt, pcnt);&lt;br /&gt;			chk.last_pcnt = pcnt;&lt;br /&gt;			_inside.scaleX = pcnt * 0.01;&lt;br /&gt;&lt;br /&gt;			if(!chk.showing){&lt;br /&gt;				var total: Float = ad_clip.loaderInfo.bytesTotal;&lt;br /&gt;				if(total &gt; 0 || Type.typeof(total) == ValueType.TUnknown){&lt;br /&gt;					chk.showing = true;&lt;br /&gt;					chk.started = Lib.getTimer();&lt;br /&gt;				}else if(elapsed &gt; chk.ad_timeout){&lt;br /&gt;					finished = true;&lt;br /&gt;				}&lt;br /&gt;			}&lt;br /&gt;&lt;br /&gt;			if(elapsed &gt; chk.ad_msec || chk.parent._mochiad_ctr_failed){&lt;br /&gt;				finished = true;&lt;br /&gt;			}&lt;br /&gt;&lt;br /&gt;			if(clip_total &gt; 0 &amp;&amp; clip_loaded &gt;= clip_total &amp;&amp; finished){&lt;br /&gt;				if(chk.server_control){&lt;br /&gt;					chk.onEnterFrame = null;&lt;br /&gt;				}else{&lt;br /&gt;					chk.fadeout_start = Lib.getTimer();&lt;br /&gt;					chk.onEnterFrame = chk.fadeFunction;&lt;br /&gt;				}&lt;br /&gt;			}&lt;br /&gt;		};&lt;br /&gt;		doOnEnterFrame(chk);&lt;br /&gt;	}&lt;br /&gt;&lt;br /&gt;	public static function load(options: Dynamic): MovieClip{&lt;br /&gt;		/*&lt;br /&gt;		   Load a Mochiad into the given MovieClip&lt;br /&gt;				options: &lt;br /&gt;				An Dynamic with keys and values to pass to the server.&lt;br /&gt;&lt;br /&gt;				clip is a MovieClip reference to place the ad in.&lt;br /&gt;&lt;br /&gt;				id should be the unique identifier for this Mochiad.&lt;br /&gt;&lt;br /&gt;				server is the base URL to the Mochiad server.&lt;br /&gt;&lt;br /&gt;				res is the resolution of the container clip or movie&lt;br /&gt;				as a string, e.g. "500x500"&lt;br /&gt;&lt;br /&gt;				no_page disables page detection.&lt;br /&gt;		 */&lt;br /&gt;		var DEFAULTS: Dynamic = {&lt;br /&gt;			server: "http://x.mochiads.com/srv/1/",&lt;br /&gt;			method: "load",&lt;br /&gt;			depth: 10333,&lt;br /&gt;			id: "_UNKNOWN_"&lt;br /&gt;		};&lt;br /&gt;		options = Mochiad.parseOptions(options, DEFAULTS);&lt;br /&gt;		// This isn't accessible yet for some reason: &lt;br /&gt;		// options.clip.loaderInfo.swfVersion;&lt;br /&gt;		options.swfv = 9;&lt;br /&gt;		options.mav = Mochiad.getVersion();&lt;br /&gt;&lt;br /&gt;		var clip: Dynamic = options.clip;&lt;br /&gt;&lt;br /&gt;		if(!(Security.sandboxType != "localWithFile")){&lt;br /&gt;			return null;&lt;br /&gt;		}&lt;br /&gt;&lt;br /&gt;		if(clip._mochiad_loaded != null &amp;&amp; clip._mochiad_loaded){&lt;br /&gt;			return null;&lt;br /&gt;		}&lt;br /&gt;&lt;br /&gt;		var depth: Float = options.depth;&lt;br /&gt;		options.depth = null;&lt;br /&gt;		var mc: Dynamic = createEmptyMovieClip(clip, "_mochiad", depth);&lt;br /&gt;&lt;br /&gt;		var wh: Array&lt;Int&gt; = Mochiad.getRes(options, clip);&lt;br /&gt;		options.res = wh[0] + "x" + wh[1];&lt;br /&gt;&lt;br /&gt;		options.server += options.id;&lt;br /&gt;		options.id = null;&lt;br /&gt;&lt;br /&gt;		clip._mochiad_loaded = true;&lt;br /&gt;&lt;br /&gt;		var lv: Dynamic = new URLVariables();&lt;br /&gt;		for(k in Reflect.fields(options)){&lt;br /&gt;			var v: Dynamic = Reflect.field(options,k);&lt;br /&gt;			if(!(Reflect.isFunction(v))){&lt;br /&gt;				Reflect.setField(lv,k,v);&lt;br /&gt;			}&lt;br /&gt;		}&lt;br /&gt;&lt;br /&gt;		if(clip.loaderInfo.loaderURL.indexOf("http") != 0){&lt;br /&gt;			options.no_page = true;&lt;br /&gt;		}&lt;br /&gt;&lt;br /&gt;		var server: String = lv.server;&lt;br /&gt;		lv.server = null;&lt;br /&gt;		var hostname: String = allowDomains(server);&lt;br /&gt;&lt;br /&gt;		mc.onEnterFrame = function(){&lt;br /&gt;			if(!mc._mochiad_ctr){&lt;br /&gt;				mc.onEnterFrame = null;&lt;br /&gt;				Mochiad.unload(mc.parent);&lt;br /&gt;			};&lt;br /&gt;		};&lt;br /&gt;		doOnEnterFrame(mc);&lt;br /&gt;&lt;br /&gt;		var lc: LocalConnection = new LocalConnection();&lt;br /&gt;		lc.client = mc;&lt;br /&gt;		var name: String = [&lt;br /&gt;			"", Math.floor((Date.now()).getTime()), Math.floor(Math.random() * 999999)&lt;br /&gt;			].join("_");&lt;br /&gt;		lc.allowDomain("*", "localhost");&lt;br /&gt;		lc.allowInsecureDomain("*", "localhost");&lt;br /&gt;		lc.connect(name);&lt;br /&gt;		mc.lc = lc;&lt;br /&gt;		lv.lc = name;&lt;br /&gt;&lt;br /&gt;		lv.st = Lib.getTimer();&lt;br /&gt;		var loader: Loader = new Loader();&lt;br /&gt;&lt;br /&gt;		var f: Dynamic = function(ev: Dynamic){&lt;br /&gt;			mc._mochiad_ctr_failed = true;&lt;br /&gt;		}&lt;br /&gt;		loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, f);&lt;br /&gt;&lt;br /&gt;		var req: URLRequest = new URLRequest(server + ".swf");&lt;br /&gt;		req.contentType = "application/x-www-form-urlencoded";&lt;br /&gt;		req.method = URLRequestMethod.POST;&lt;br /&gt;		req.data = lv;&lt;br /&gt;		var context = new flash.system.LoaderContext(true);&lt;br /&gt;		loader.load(req, context);&lt;br /&gt;		mc.addChild(loader);&lt;br /&gt;		mc._mochiad_ctr = loader;&lt;br /&gt;&lt;br /&gt;		return mc;&lt;br /&gt;	}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;	public static function unload(clip: Dynamic): Bool{&lt;br /&gt;		/*&lt;br /&gt;		   Unload a Mochiad from the given MovieClip&lt;br /&gt;&lt;br /&gt;clip: &lt;br /&gt;a MovieClip reference(e.g. this.stage)&lt;br /&gt;		 */&lt;br /&gt;		if(clip.clip &amp;&amp; clip.clip._mochiad){&lt;br /&gt;			clip = clip.clip;&lt;br /&gt;		}&lt;br /&gt;		if(!clip._mochiad){&lt;br /&gt;			return false;&lt;br /&gt;		}&lt;br /&gt;		if(clip._mochiad.onUnload){&lt;br /&gt;			clip._mochiad.onUnload();&lt;br /&gt;		}&lt;br /&gt;		clip.removeChild(clip._mochiad);&lt;br /&gt;		clip._mochiad_loaded = null;&lt;br /&gt;		clip._mochiad = null;&lt;br /&gt;		return true;&lt;br /&gt;	}&lt;br /&gt;&lt;br /&gt;	private static function allowDomains(server: String): String{ &lt;br /&gt;		// I believe this whole function is unnecessary, but am keeping it around anyway.&lt;br /&gt;		var hostname: String = server.split("/")[2].split(": ")[0];&lt;br /&gt;		flash.system.Security.allowDomain("*");&lt;br /&gt;		flash.system.Security.allowDomain(hostname);&lt;br /&gt;		flash.system.Security.allowInsecureDomain("*");&lt;br /&gt;		flash.system.Security.allowInsecureDomain(hostname);&lt;br /&gt;		return hostname;&lt;br /&gt;	}&lt;br /&gt;&lt;br /&gt;	private static function getRes(options: Dynamic, clip: Dynamic): Array&lt;Int&gt;{&lt;br /&gt;		var b: Dynamic = clip.getBounds(clip.root);&lt;br /&gt;		var w: Int = 0;&lt;br /&gt;		var h: Int = 0;&lt;br /&gt;		if(Type.typeof(options.res) != ValueType.TUnknown){&lt;br /&gt;			var xy: Array&lt;Dynamic&gt; = options.res.split("x");&lt;br /&gt;			w = Std.parseInt(xy[0]);&lt;br /&gt;			h = Std.parseInt(xy[1]);&lt;br /&gt;		} else{&lt;br /&gt;			w = b.xMax - b.xMin;&lt;br /&gt;			h = b.yMax - b.yMin;&lt;br /&gt;		}&lt;br /&gt;		if(w == 0 || h == 0){&lt;br /&gt;			w = clip.stage.stageWidth;&lt;br /&gt;			h = clip.stage.stageHeight;&lt;br /&gt;		}&lt;br /&gt;&lt;br /&gt;		return [w, h];&lt;br /&gt;	}&lt;br /&gt;&lt;br /&gt;	public static function parseOptions(options: Dynamic, defaults: Dynamic): Dynamic{&lt;br /&gt;		var optcopy = Reflect.empty();&lt;br /&gt;		var k: String;&lt;br /&gt;		for(k in Reflect.fields(defaults)){&lt;br /&gt;			Reflect.setField(optcopy,k,Reflect.field(defaults,k));&lt;br /&gt;		}&lt;br /&gt;		if(options){&lt;br /&gt;			for(k in Reflect.fields(options)){&lt;br /&gt;				Reflect.setField(optcopy,k,Reflect.field(options,k));&lt;br /&gt;			}&lt;br /&gt;		}&lt;br /&gt;		options = Reflect.field(optcopy,"clip.loaderInfo.parameters.mochiad_options");&lt;br /&gt;		if(options){&lt;br /&gt;			var pairs: Array&lt;String&gt; = options.split("&amp;");&lt;br /&gt;			for(i in 0...pairs.length){&lt;br /&gt;				var kv: Array&lt;String&gt; = pairs[i].split("=");&lt;br /&gt;				Reflect.setField(optcopy,StringTools.htmlUnescape(kv[0]),StringTools.htmlUnescape(kv[1]));&lt;br /&gt;			}&lt;br /&gt;		}&lt;br /&gt;		return optcopy;&lt;br /&gt;	}&lt;br /&gt;&lt;br /&gt;	public static function showTimedAd(options: Dynamic){&lt;br /&gt;		/*&lt;br /&gt;		   This function will stop the clip, load the Mochiad in a&lt;br /&gt;		   centered position on the clip, and then resume the clip&lt;br /&gt;		   after a timeout.&lt;br /&gt;&lt;br /&gt;options: &lt;br /&gt;An object with keys and values to pass to the server.&lt;br /&gt;These options will be passed to Mochiad.load, but the&lt;br /&gt;following options are unique to showTimedAd.&lt;br /&gt;&lt;br /&gt;clip is a MovieClip reference to place the ad in.&lt;br /&gt;&lt;br /&gt;ad_timeout is the number of milliseconds to wait&lt;br /&gt;for the ad to start loading(default:  2000).&lt;br /&gt;&lt;br /&gt;fadeout_time is the number of milliseconds to&lt;br /&gt;fade out the ad upon completion(default:  250).&lt;br /&gt;		 */&lt;br /&gt;		var DEFAULTS ={&lt;br /&gt;ad_timeout:  2000,&lt;br /&gt;			fadeout_time:  250,&lt;br /&gt;			regpt:  "o",&lt;br /&gt;			method:  "showTimedAd",&lt;br /&gt;			ad_started:  function(){untyped{this.clip.stop();} },&lt;br /&gt;			ad_finished:  function(){untyped{this.clip.play();} }&lt;br /&gt;		};&lt;br /&gt;&lt;br /&gt;		options = Mochiad.parseOptions(options, DEFAULTS);&lt;br /&gt;&lt;br /&gt;		var clip = options.clip;&lt;br /&gt;		var ad_msec = 11000;&lt;br /&gt;		var ad_timeout = options.ad_timeout;&lt;br /&gt;		Reflect.deleteField(options,"ad_timeout");&lt;br /&gt;		var fadeout_time = options.fadeout_time;&lt;br /&gt;		Reflect.deleteField(options,"fadeout_time");&lt;br /&gt;&lt;br /&gt;		if(Mochiad.load(options)==null){&lt;br /&gt;			options.ad_finished();&lt;br /&gt;			return;&lt;br /&gt;		}&lt;br /&gt;&lt;br /&gt;		options.ad_started();&lt;br /&gt;&lt;br /&gt;		var mc = clip._mochiad;&lt;br /&gt;		Reflect.setField(mc,"onUnload", function(){&lt;br /&gt;				options.ad_finished();&lt;br /&gt;				});&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;		/* Center the clip */&lt;br /&gt;		var wh = Mochiad.getRes(options, clip);&lt;br /&gt;		var w = wh[0];&lt;br /&gt;		var h = wh[1];&lt;br /&gt;		mc.x = w * 0.5;&lt;br /&gt;		mc.y = h * 0.5;&lt;br /&gt;&lt;br /&gt;		var chk = createEmptyMovieClip(mc, "_mochiad_wait", 3);&lt;br /&gt;&lt;br /&gt;		untyped{&lt;br /&gt;			chk.ad_msec = ad_msec;&lt;br /&gt;			chk.ad_timeout = ad_timeout;&lt;br /&gt;			chk.started = Lib.getTimer();&lt;br /&gt;			chk.showing = false;&lt;br /&gt;			chk.fadeout_time = fadeout_time;&lt;br /&gt;			chk.fadeFunction = function(){&lt;br /&gt;				var p = 100 *(1 - &lt;br /&gt;						((Lib.getTimer() - this.fadeout_start) / this.fadeout_time));&lt;br /&gt;				if(p &gt; 0){&lt;br /&gt;					this.parent.alpha = p * 0.01;&lt;br /&gt;				} else{&lt;br /&gt;					var _clip = this.parent.parent;&lt;br /&gt;					Mochiad.unload(_clip);&lt;br /&gt;					Reflect.deleteField(this,"onEnterFrame");&lt;br /&gt;				}&lt;br /&gt;			};&lt;br /&gt;		}&lt;br /&gt;&lt;br /&gt;		mc.unloadAd = function(){&lt;br /&gt;			Mochiad.unload(clip);&lt;br /&gt;		}&lt;br /&gt;&lt;br /&gt;		mc.adjustProgress = function(msec: Float){&lt;br /&gt;			var _chk = mc._mochiad_wait;&lt;br /&gt;			_chk.server_control = true;&lt;br /&gt;			_chk.started = Lib.getTimer();&lt;br /&gt;			_chk.ad_msec = msec - 250;&lt;br /&gt;		};&lt;br /&gt;&lt;br /&gt;		untyped{&lt;br /&gt;			Reflect.setField(chk,"onEnterFrame", function(){&lt;br /&gt;					var ad_clip = this.parent._mochiad_ctr;&lt;br /&gt;					var elapsed = Lib.getTimer() - this.started;&lt;br /&gt;					var finished = false;&lt;br /&gt;					if(!chk.showing){&lt;br /&gt;						var total = ad_clip.loaderInfo.bytesTotal;&lt;br /&gt;						if(total &gt; 0 || Type.typeof(total) == ValueType.TUnknown){&lt;br /&gt;							chk.showing = true;&lt;br /&gt;							chk.started = Lib.getTimer();&lt;br /&gt;						}else if(elapsed &gt; chk.ad_timeout){&lt;br /&gt;							finished = true;&lt;br /&gt;						}&lt;br /&gt;					}&lt;br /&gt;					if(elapsed &gt; chk.ad_msec || this.parent._mochiad_ctr_failed){&lt;br /&gt;						finished = true;&lt;br /&gt;					}&lt;br /&gt;					if(finished){&lt;br /&gt;					if(this.server_control){&lt;br /&gt;					Reflect.deleteField(this,"onEnterFrame");&lt;br /&gt;					} else{&lt;br /&gt;					this.fadeout_start = Lib.getTimer();&lt;br /&gt;					this.onEnterFrame = this.fadeFunction;&lt;br /&gt;					}&lt;br /&gt;					}&lt;br /&gt;			});&lt;br /&gt;		}&lt;br /&gt;		doOnEnterFrame(chk);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;	}&lt;br /&gt;&lt;br /&gt;	//public static function fetchHighScores(options: Dynamic, callbackObj: Dynamic, ?callbackMethod: Dynamic): Bool{&lt;br /&gt;	/*&lt;br /&gt;	   Fetch the high scores from Mochiads. Returns false if a connection&lt;br /&gt;	   to Mochiads can not be established due to the security sandbox.&lt;br /&gt;&lt;br /&gt;options: &lt;br /&gt;An object with keys and and values to pass to the&lt;br /&gt;server.&lt;br /&gt;&lt;br /&gt;clip is a MovieClip reference to place the(invisible)&lt;br /&gt;communicator in.&lt;br /&gt;&lt;br /&gt;id should be the unique identifier for this Mochiad.&lt;br /&gt;&lt;br /&gt;callback(scores): &lt;br /&gt;&lt;br /&gt;scores is an array of at most 50 high scores, highest score&lt;br /&gt;first, with a millisecond epoch timestamp(for the Date&lt;br /&gt;constructor).  [[name, score, timestamp], ...]&lt;br /&gt;	 */&lt;br /&gt;	/*    var lc: Dynamic = Mochiad._loadCommunicator({clip:  options.clip, id:  options.id});&lt;br /&gt;		  if(!lc){&lt;br /&gt;		  return false;&lt;br /&gt;		  }&lt;br /&gt;&lt;br /&gt;		  lc.doSend(['fetchHighScores', options], callbackObj, callbackMethod);&lt;br /&gt;		  return true;&lt;br /&gt;		  }*/&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;	//public static function sendHighScore(options: Dynamic, callbackObj: Dynamic, ?callbackMethod: Dynamic): Bool{&lt;br /&gt;	/*&lt;br /&gt;	   Send a high score to Mochiads. Returns false if a connection&lt;br /&gt;	   to Mochiads can not be established due to the security sandbox.&lt;br /&gt;&lt;br /&gt;options: &lt;br /&gt;An object with keys and and values to pass to the&lt;br /&gt;server.&lt;br /&gt;&lt;br /&gt;clip is a MovieClip reference to place the(invisible)&lt;br /&gt;communicator in.&lt;br /&gt;&lt;br /&gt;id should be the unique identifier for this Mochiad.&lt;br /&gt;&lt;br /&gt;name is the name to be associated with the high score, e.g.&lt;br /&gt;"Player Name"&lt;br /&gt;&lt;br /&gt;score is the value of the high score, e.g. 100000.&lt;br /&gt;&lt;br /&gt;callback(scores, index): &lt;br /&gt;&lt;br /&gt;scores is an array of at most 50 high scores, highest score&lt;br /&gt;first, with a millisecond epoch timestamp(for the Date&lt;br /&gt;constructor).  [[name, score, timestamp], ...]&lt;br /&gt;&lt;br /&gt;index is the array index of the submitted high score in&lt;br /&gt;scores, or -1 if the submitted score did not rank top 50.&lt;br /&gt;	 */&lt;br /&gt;	/*var lc: Dynamic = Mochiad._loadCommunicator({clip:  options.clip, id:  options.id});&lt;br /&gt;	  if(!lc){&lt;br /&gt;	  return false;&lt;br /&gt;	  }&lt;br /&gt;&lt;br /&gt;	  lc.doSend(['sendHighScore', options], callbackObj, callbackMethod);&lt;br /&gt;	  return true;&lt;br /&gt;	  }*/        &lt;br /&gt;&lt;br /&gt;	/*public static function _loadCommunicator(options: Dynamic): Dynamic{&lt;br /&gt;	  var DEFAULTS ={&lt;br /&gt;com_server:  "http://x.mochiads.com/com/1/",&lt;br /&gt;method:  "loadCommunicator",&lt;br /&gt;depth:  10337,&lt;br /&gt;id:  "_UNKNOWN_"&lt;br /&gt;};&lt;br /&gt;options = Mochiad.parseOptions(options, DEFAULTS);&lt;br /&gt;options.swfv = 9;&lt;br /&gt;options.mav = Mochiad.getVersion();&lt;br /&gt;&lt;br /&gt;var clip = options.clip;&lt;br /&gt;var clipname: String = '_mochiad_com_' + options.id;&lt;br /&gt;&lt;br /&gt;if(!(Security.sandboxType != "localWithFile")){&lt;br /&gt;return null;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;if(Reflect.hasField(clip,clipname)){&lt;br /&gt;return clip.clipname;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;var server: String = options.com_server + options.id;&lt;br /&gt;Mochiad.allowDomains(server);&lt;br /&gt;Reflect.deleteField(options,"id");&lt;br /&gt;Reflect.deleteField(options,"com_server");&lt;br /&gt;&lt;br /&gt;var depth = options.depth;&lt;br /&gt;Reflect.deleteField(options,"depth");&lt;br /&gt;var mc: MovieClip = createEmptyMovieClip(clip, clipname, depth);&lt;br /&gt;var lv: URLVariables = new URLVariables();&lt;br /&gt;for(k in Reflect.fields(options)){&lt;br /&gt;Reflect.setField(lv,k, Reflect.field(options,k));&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;var lc: LocalConnection = new LocalConnection();&lt;br /&gt;lc.client = mc;&lt;br /&gt;var name: String = [&lt;br /&gt;"", Math.floor((Date.now()).getTime()), Math.floor(Math.random() * 999999)&lt;br /&gt;].join("_");&lt;br /&gt;lc.allowDomain("*", "localhost");&lt;br /&gt;lc.allowInsecureDomain("*", "localhost");&lt;br /&gt;lc.connect(name);&lt;br /&gt;&lt;br /&gt;#if flash9&lt;br /&gt;&lt;br /&gt;untyped&lt;br /&gt;{&lt;br /&gt;mc.name = name;&lt;br /&gt;mc.lc = lc;&lt;br /&gt;lv.lc = name;&lt;br /&gt;mc._id = 0;&lt;br /&gt;mc._queue = [];&lt;br /&gt;mc.rpcResult = function(cb: Dynamic){&lt;br /&gt;&lt;br /&gt;	// __arguments__ is "magic" and may change in later versions of haxe&lt;br /&gt;	// __typeof__ is also "magic"&lt;br /&gt;	untyped&lt;br /&gt;	{&lt;br /&gt;	cb = Std.parseInt(cb.toString());&lt;br /&gt;	var cblst: Array&lt;Dynamic&gt; = mc._callbacks[cb];&lt;br /&gt;	if(__typeof__(cblst) == "undefined"){&lt;br /&gt;	return;&lt;br /&gt;	}&lt;br /&gt;	Reflect.deleteField(mc._callbacks,cb);&lt;br /&gt;	var args: Array&lt;Dynamic&gt; = [];&lt;br /&gt;	for(i in 2...cblst.length){&lt;br /&gt;	args.push(cblst[i]);&lt;br /&gt;	}&lt;br /&gt;	for(i in 1...__arguments__.length){&lt;br /&gt;	args.push(__arguments__[i]);&lt;br /&gt;}&lt;br /&gt;var method : Dynamic = cblst[1];&lt;br /&gt;var obj : Dynamic = cblst[0];&lt;br /&gt;if(obj &amp;&amp; __typeof__(method) == "string"){&lt;br /&gt;	method = obj[method];&lt;br /&gt;}&lt;br /&gt;if(__typeof__(method) == "function"){&lt;br /&gt;	method.apply(obj, args);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;mc._didConnect = function(endpoint: String){&lt;br /&gt;	Lib.eval("&lt;br /&gt;			mc._endpoint = endpoint;&lt;br /&gt;			var q: Array = mc._queue;&lt;br /&gt;			delete mc._queue;&lt;br /&gt;			var ds: Function = mc.doSend;&lt;br /&gt;			for(var i: Number = 0; i &lt; q.length; i++){&lt;br /&gt;			var item: Array = q[i];&lt;br /&gt;			ds.apply(this, item);&lt;br /&gt;			}&lt;br /&gt;			");&lt;br /&gt;}&lt;br /&gt;mc.doSend = function(args: Array&lt;Dynamic&gt;, cbobj: Dynamic, cbfn: Dynamic){&lt;br /&gt;	Lib.eval("&lt;br /&gt;			if(mc._endpoint == null){&lt;br /&gt;			var qargs: Array = [];&lt;br /&gt;			for(var i: Number = 0; i &lt; arguments.length; i++){&lt;br /&gt;			qargs.push(arguments[i]);&lt;br /&gt;			}&lt;br /&gt;			mc._queue.push(qargs);&lt;br /&gt;			return;&lt;br /&gt;			}&lt;br /&gt;			mc._id += 1;&lt;br /&gt;			var id: Number = mc._id;&lt;br /&gt;			mc._callbacks[id] = [cbobj, cbfn || cbobj];&lt;br /&gt;			var slc: LocalConnection = new LocalConnection();&lt;br /&gt;			slc.send(mc._endpoint, 'rpc', id, args);&lt;br /&gt;			");&lt;br /&gt;}&lt;br /&gt;#end&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;untyped&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;	mc._callbacks = Reflect.empty();&lt;br /&gt;	mc._callbacks[0] = [mc, '_didConnect'];&lt;br /&gt;&lt;br /&gt;	lv.st = Lib.getTimer();&lt;br /&gt;	var req: URLRequest = new URLRequest(server + ".swf");&lt;br /&gt;	req.contentType = "application/x-www-form-urlencoded";&lt;br /&gt;	req.method = URLRequestMethod.POST;&lt;br /&gt;	req.data = lv;&lt;br /&gt;	var loader: Loader = new Loader();&lt;br /&gt;	loader.load(req);&lt;br /&gt;	mc.addChild(loader);&lt;br /&gt;	mc._mochiad_com = loader;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;return mc;&lt;br /&gt;&lt;br /&gt;}*/&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Tue, 06 Nov 2007 22:08:09 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/4738</guid>
      <author>Zealot (Zealot Aaa)</author>
    </item>
  </channel>
</rss>
