Section 1
//AbstractView (com.jeroenwijering.events.AbstractView)
package com.jeroenwijering.events {
import flash.display.*;
import flash.events.*;
public class AbstractView extends EventDispatcher {
public function get config():Object{
return (new Object());
}
public function getPluginConfig(_arg1:Object):Object{
return ({});
}
public function get playlist():Array{
return (new Array());
}
public function removeControllerListener(_arg1:String, _arg2:Function):void{
}
public function removeModelListener(_arg1:String, _arg2:Function):void{
}
public function addModelListener(_arg1:String, _arg2:Function):void{
}
public function removeViewListener(_arg1:String, _arg2:Function):void{
}
public function getPlugin(_arg1:String):Object{
return ({});
}
public function addControllerListener(_arg1:String, _arg2:Function):void{
}
public function sendEvent(_arg1:String, _arg2:Object=undefined):void{
}
public function loadPlugin(_arg1:String, _arg2:String=null):Boolean{
return (true);
}
public function addViewListener(_arg1:String, _arg2:Function):void{
}
public function get skin():MovieClip{
return (new MovieClip());
}
}
}//package com.jeroenwijering.events
Section 2
//ControllerEvent (com.jeroenwijering.events.ControllerEvent)
package com.jeroenwijering.events {
import flash.events.*;
public class ControllerEvent extends Event {
private var _data:Object;
public static var PLAYLIST:String = "PLAYLIST";
public static var ERROR:String = "ERROR";
public static var STOP:String = "STOP";
public static var ITEM:String = "ITEM";
public static var PLAY:String = "PLAY";
public static var SEEK:String = "SEEK";
public static var MUTE:String = "MUTE";
public static var VOLUME:String = "VOLUME";
public static var RESIZE:String = "RESIZE";
public function ControllerEvent(_arg1:String, _arg2:Object=undefined, _arg3:Boolean=false, _arg4:Boolean=false):void{
super(_arg1, _arg3, _arg4);
_data = _arg2;
}
public function get data():Object{
return (_data);
}
}
}//package com.jeroenwijering.events
Section 3
//ModelEvent (com.jeroenwijering.events.ModelEvent)
package com.jeroenwijering.events {
import flash.events.*;
public class ModelEvent extends Event {
private var _data:Object;
public static var BUFFER:String = "BUFFER";
public static var LOADED:String = "LOADED";
public static var ERROR:String = "ERROR";
public static var META:String = "META";
public static var TIME:String = "TIME";
public static var STATE:String = "STATE";
public function ModelEvent(_arg1:String, _arg2:Object=undefined, _arg3:Boolean=false, _arg4:Boolean=false):void{
super(_arg1, _arg3, _arg4);
_data = _arg2;
}
public function get data():Object{
return (_data);
}
}
}//package com.jeroenwijering.events
Section 4
//ModelStates (com.jeroenwijering.events.ModelStates)
package com.jeroenwijering.events {
public class ModelStates {
public static var BUFFERING:String = "BUFFERING";
public static var PAUSED:String = "PAUSED";
public static var COMPLETED:String = "COMPLETED";
public static var IDLE:String = "IDLE";
public static var PLAYING:String = "PLAYING";
}
}//package com.jeroenwijering.events
Section 5
//PlayerEvent (com.jeroenwijering.events.PlayerEvent)
package com.jeroenwijering.events {
import flash.events.*;
public class PlayerEvent extends Event {
public static var READY:String = "READY";
public function PlayerEvent(_arg1:String, _arg2:Boolean=false, _arg3:Boolean=false):void{
super(_arg1, _arg2, _arg3);
}
}
}//package com.jeroenwijering.events
Section 6
//PluginInterface (com.jeroenwijering.events.PluginInterface)
package com.jeroenwijering.events {
public interface PluginInterface {
function initializePlugin(_arg1:AbstractView):void;
}
}//package com.jeroenwijering.events
Section 7
//SPLoaderEvent (com.jeroenwijering.events.SPLoaderEvent)
package com.jeroenwijering.events {
import flash.events.*;
public class SPLoaderEvent extends Event {
public static var PLUGINS:String = "PLUGINS";
public static var SKIN:String = "SKIN";
public function SPLoaderEvent(_arg1:String, _arg2:Boolean=false, _arg3:Boolean=false):void{
super(_arg1, _arg2, _arg3);
}
}
}//package com.jeroenwijering.events
Section 8
//ViewEvent (com.jeroenwijering.events.ViewEvent)
package com.jeroenwijering.events {
import flash.events.*;
public class ViewEvent extends Event {
private var _data:Object;
public static var STOP:String = "STOP";
public static var NEXT:String = "NEXT";
public static var ITEM:String = "ITEM";
public static var MUTE:String = "MUTE";
public static var VOLUME:String = "VOLUME";
public static var FULLSCREEN:String = "FULLSCREEN";
public static var TRACE:String = "TRACE";
public static var LOAD:String = "LOAD";
public static var PREV:String = "PREV";
public static var PLAY:String = "PLAY";
public static var REDRAW:String = "REDRAW";
public static var SEEK:String = "SEEK";
public static var LINK:String = "LINK";
public function ViewEvent(_arg1:String, _arg2:Object=undefined, _arg3:Boolean=false, _arg4:Boolean=false):void{
super(_arg1, _arg3, _arg4);
_data = _arg2;
}
public function get data():Object{
return (_data);
}
}
}//package com.jeroenwijering.events
Section 9
//AbstractModel (com.jeroenwijering.models.AbstractModel)
package com.jeroenwijering.models {
import com.jeroenwijering.player.*;
public class AbstractModel {
protected var position:Number;
protected var model:Model;
protected var item:Object;
public function AbstractModel(_arg1:Model):void{
model = _arg1;
}
public function stop():void{
}
public function load(_arg1:Object):void{
item = _arg1;
position = 0;
}
public function play():void{
}
public function pause():void{
}
public function seek(_arg1:Number):void{
position = _arg1;
}
public function volume(_arg1:Number):void{
}
}
}//package com.jeroenwijering.models
Section 10
//BitgravityModel (com.jeroenwijering.models.BitgravityModel)
package com.jeroenwijering.models {
import com.jeroenwijering.player.*;
public class BitgravityModel extends HTTPModel {
public function BitgravityModel(_arg1:Model):void{
super(_arg1);
}
override protected function getURL():String{
var _local1:String;
_local1 = item["file"];
if (timeoffset > 0){
if (_local1.indexOf("?") > 0){
_local1 = (_local1 + ("&starttime=" + timeoffset));
} else {
_local1 = (_local1 + ("?starttime=" + timeoffset));
};
};
return (_local1);
}
}
}//package com.jeroenwijering.models
Section 11
//CameraModel (com.jeroenwijering.models.CameraModel)
package com.jeroenwijering.models {
import com.jeroenwijering.events.*;
import com.jeroenwijering.player.*;
import flash.events.*;
import com.jeroenwijering.utils.*;
import flash.net.*;
import flash.media.*;
import flash.utils.*;
public class CameraModel extends AbstractModel {
protected var stream:NetStream;
private var interval:Number;
protected var connection:NetConnection;
private var camera:Camera;
private var microphone:Microphone;
private var video:Video;
public function CameraModel(_arg1:Model):void{
var mod = _arg1;
super(mod);
try {
camera = Camera.getCamera();
camera.setMode(320, 240, 10);
microphone = Microphone.getMicrophone();
video = new Video(320, 240);
video.smoothing = model.config["smoothing"];
} catch(err:Error) {
};
}
override public function stop():void{
video.attachCamera(null);
if (item["streamer"]){
stream.close();
connection.close();
};
clearInterval(interval);
position = 0;
model.sendEvent(ModelEvent.STATE, {newstate:ModelStates.IDLE});
}
protected function positionInterval():void{
position = (Math.round(((position * 10) + 1)) / 10);
if (position < item["duration"]){
model.sendEvent(ModelEvent.TIME, {position:position, duration:item["duration"]});
} else {
if ((((item["duration"] > 0)) && (model.config["respectduration"]))){
pause();
model.sendEvent(ModelEvent.STATE, {newstate:ModelStates.COMPLETED});
};
};
}
override public function load(_arg1:Object):void{
item = _arg1;
position = 0;
if (camera){
model.mediaHandler(video);
model.sendEvent(ModelEvent.META, {framerate:10, height:320, width:240});
play();
if (item["streamer"]){
connection = new NetConnection();
connection.addEventListener(NetStatusEvent.NET_STATUS, statusHandler);
connection.objectEncoding = ObjectEncoding.AMF0;
connection.client = new NetClient(this);
connection.connect(item["streamer"]);
camera.setLoopback(true);
};
} else {
stop();
model.sendEvent(ModelEvent.ERROR, {message:"No webcam found on this computer."});
};
}
override public function play():void{
video.attachCamera(camera);
model.sendEvent(ModelEvent.STATE, {newstate:ModelStates.PLAYING});
interval = setInterval(positionInterval, 100);
}
override public function pause():void{
video.attachCamera(null);
clearInterval(interval);
model.sendEvent(ModelEvent.STATE, {newstate:ModelStates.PAUSED});
}
override public function seek(_arg1:Number):void{
clearInterval(interval);
position = _arg1;
play();
}
protected function statusHandler(_arg1:NetStatusEvent):void{
switch (_arg1.info.code){
case "NetConnection.Connect.Success":
stream = new NetStream(connection);
stream.client = new NetClient(this);
stream.addEventListener(NetStatusEvent.NET_STATUS, statusHandler);
stream.attachCamera(camera);
stream.publish(item["file"], "record");
break;
};
model.sendEvent(ModelEvent.META, {info:_arg1.info.code});
}
}
}//package com.jeroenwijering.models
Section 12
//FCSubscribeModel (com.jeroenwijering.models.FCSubscribeModel)
package com.jeroenwijering.models {
import com.jeroenwijering.events.*;
import com.jeroenwijering.player.*;
import flash.events.*;
import flash.utils.*;
public class FCSubscribeModel extends RTMPModel {
private var subscribe:Number;
public function FCSubscribeModel(_arg1:Model):void{
super(_arg1);
}
private function doSubscribe(_arg1:String):void{
connection.call("FCSubscribe", null, _arg1);
}
override protected function statusHandler(_arg1:NetStatusEvent):void{
if (_arg1.info.code == "NetConnection.Connect.Success"){
model.sendEvent(ModelEvent.META, {info:_arg1.info.code});
subscribe = setInterval(doSubscribe, 3000, getID(item["file"]));
} else {
super.statusHandler(_arg1);
};
}
override public function onData(_arg1:Object):void{
if (_arg1.type == "fcsubscribe"){
if (_arg1.code == "NetStream.Play.StreamNotFound"){
model.sendEvent(ModelEvent.ERROR, {message:("Subscription failed: " + item["file"])});
} else {
if (_arg1.code == "NetStream.Play.Start"){
setStream();
};
};
clearInterval(subscribe);
};
super.onData(_arg1);
}
}
}//package com.jeroenwijering.models
Section 13
//FLVSeekModel (com.jeroenwijering.models.FLVSeekModel)
package com.jeroenwijering.models {
import com.jeroenwijering.player.*;
public class FLVSeekModel extends HTTPModel {
public function FLVSeekModel(_arg1:Model):void{
super(_arg1);
}
override protected function getURL():String{
var _local1:String;
_local1 = item["file"];
if (_local1.indexOf("?") > -1){
_local1 = (_local1 + ("&fs=" + byteoffset));
} else {
_local1 = (_local1 + ("?fs=" + byteoffset));
};
return (_local1);
}
}
}//package com.jeroenwijering.models
Section 14
//HighwindsModel (com.jeroenwijering.models.HighwindsModel)
package com.jeroenwijering.models {
import com.jeroenwijering.events.*;
import com.jeroenwijering.player.*;
import flash.events.*;
import flash.net.*;
public class HighwindsModel extends RTMPModel {
private var smil:String;
private var loader:URLLoader;
public function HighwindsModel(_arg1:Model):void{
super(_arg1);
loader = new URLLoader();
loader.addEventListener(Event.COMPLETE, loaderHandler);
loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, errorHandler);
loader.addEventListener(IOErrorEvent.IO_ERROR, errorHandler);
}
override public function stop():void{
super.stop();
if (smil){
item["file"] = smil;
};
}
override public function load(_arg1:Object):void{
item = _arg1;
position = item["start"];
model.sendEvent(ModelEvent.STATE, {newstate:ModelStates.BUFFERING});
model.sendEvent(ModelEvent.BUFFER, {percentage:0});
smil = item["file"];
loader.load(new URLRequest(smil));
}
private function loaderHandler(_arg1:Event){
var _local2:XML;
_local2 = XML(_arg1.currentTarget.data);
item["streamer"] = _local2.children()[0].children()[0].@base.toString();
item["file"] = _local2.children()[1].children()[0].@src.toString();
model.mediaHandler(video);
connection.connect(item["streamer"]);
}
}
}//package com.jeroenwijering.models
Section 15
//HTTPModel (com.jeroenwijering.models.HTTPModel)
package com.jeroenwijering.models {
import com.jeroenwijering.events.*;
import com.jeroenwijering.player.*;
import flash.events.*;
import com.jeroenwijering.utils.*;
import flash.net.*;
import flash.media.*;
import flash.utils.*;
public class HTTPModel extends AbstractModel {
protected var stream:NetStream;
protected var meta:Boolean;
protected var byteoffset:Number;
protected var loadtimer:Number;
protected var timeoffset:Number;
protected var loadinterval:Number;
protected var interval:Number;
protected var keyframes:Object;
protected var connection:NetConnection;
protected var transform:SoundTransform;
protected var iterator:Number;
protected var mp4:Boolean;
protected var video:Video;
public function HTTPModel(_arg1:Model):void{
super(_arg1);
connection = new NetConnection();
connection.connect(null);
stream = new NetStream(connection);
stream.addEventListener(NetStatusEvent.NET_STATUS, statusHandler);
stream.addEventListener(IOErrorEvent.IO_ERROR, errorHandler);
stream.addEventListener(AsyncErrorEvent.ASYNC_ERROR, errorHandler);
stream.bufferTime = model.config["bufferlength"];
stream.checkPolicyFile = true;
stream.client = new NetClient(this);
video = new Video(320, 240);
video.smoothing = model.config["smoothing"];
video.attachNetStream(stream);
transform = new SoundTransform();
byteoffset = (timeoffset = 0);
}
override public function stop():void{
if ((stream.bytesLoaded + byteoffset) < stream.bytesTotal){
stream.close();
} else {
stream.pause();
};
clearInterval(interval);
clearInterval(loadinterval);
byteoffset = (timeoffset = (position = 0));
keyframes = undefined;
meta = false;
model.sendEvent(ModelEvent.STATE, {newstate:ModelStates.IDLE});
}
protected function loadHandler():void{
var _local1:Number;
var _local2:Number;
var _local3:Number;
_local1 = stream.bytesLoaded;
_local2 = (stream.bytesTotal + byteoffset);
_local3 = byteoffset;
model.sendEvent(ModelEvent.LOADED, {loaded:_local1, total:_local2, offset:_local3});
if (((((_local1 + _local3) >= _local2)) && ((_local1 > 0)))){
clearInterval(loadinterval);
};
if (!loadtimer){
loadtimer = setTimeout(loadTimeout, 3000);
};
}
protected function getOffset(_arg1:Number, _arg2:Boolean=false):Number{
var _local3:Number;
if (!keyframes){
return (0);
};
_local3 = 0;
while (_local3 < (keyframes.times.length - 1)) {
if ((((keyframes.times[_local3] <= _arg1)) && ((keyframes.times[(_local3 + 1)] >= _arg1)))){
break;
};
_local3++;
};
if (_arg2 == true){
return (keyframes.times[_local3]);
};
return (keyframes.filepositions[_local3]);
}
protected function positionInterval():void{
var _local1:Number;
iterator++;
if (iterator > 10){
position = (Math.round((stream.time * 10)) / 10);
if (mp4){
position = (position + timeoffset);
};
};
_local1 = Math.round(((stream.bufferLength / stream.bufferTime) * 100));
if ((((_local1 < 95)) && ((position < Math.abs(((item["duration"] - stream.bufferTime) - 1)))))){
model.sendEvent(ModelEvent.BUFFER, {percentage:_local1});
if (((!((model.config["state"] == ModelStates.BUFFERING))) && ((_local1 < 25)))){
model.sendEvent(ModelEvent.STATE, {newstate:ModelStates.BUFFERING});
};
} else {
if ((((_local1 > 95)) && (!((model.config["state"] == ModelStates.PLAYING))))){
model.sendEvent(ModelEvent.STATE, {newstate:ModelStates.PLAYING});
};
};
if (position < item["duration"]){
model.sendEvent(ModelEvent.TIME, {position:position, duration:item["duration"]});
} else {
if ((((item["duration"] > 0)) && (model.config["respectduration"]))){
pause();
model.sendEvent(ModelEvent.STATE, {newstate:ModelStates.COMPLETED});
};
};
}
override public function volume(_arg1:Number):void{
transform.volume = (_arg1 / 100);
stream.soundTransform = transform;
}
protected function errorHandler(_arg1:ErrorEvent):void{
stop();
model.sendEvent(ModelEvent.ERROR, {message:_arg1.text});
}
protected function loadTimeout():void{
var _local1:Object;
_local1 = new Object();
_local1["bandwidth"] = Math.round((((stream.bytesLoaded / 0x0400) / 3) * 8));
if (item["duration"]){
_local1["bitrate"] = Math.round((((stream.bytesTotal / 0x0400) * 8) / item["duration"]));
};
model.sendEvent("META", _local1);
}
public function onData(_arg1:Object):void{
if (_arg1.width){
video.width = _arg1.width;
video.height = _arg1.height;
};
if ((((_arg1["type"] == "metadata")) && (!(meta)))){
meta = true;
if (_arg1.seekpoints){
mp4 = true;
keyframes = convertSeekpoints(_arg1.seekpoints);
} else {
mp4 = false;
keyframes = _arg1.keyframes;
};
if (item["start"] > 0){
seek(item["start"]);
};
};
model.sendEvent(ModelEvent.META, _arg1);
}
override public function play():void{
stream.resume();
interval = setInterval(positionInterval, 100);
model.sendEvent(ModelEvent.STATE, {newstate:ModelStates.PLAYING});
}
protected function getURL():String{
var _local1:String;
var _local2:Number;
_local1 = item["streamer"];
_local2 = byteoffset;
if (mp4){
_local2 = timeoffset;
};
if (_local1.indexOf("?") > -1){
_local1 = (_local1 + ((("&file=" + item["file"]) + "&start=") + _local2));
} else {
_local1 = (_local1 + ((("?file=" + item["file"]) + "&start=") + _local2));
};
if (model.config["token"]){
_local1 = (_local1 + ("&token=" + model.config["token"]));
};
return (_local1);
}
override public function load(_arg1:Object):void{
item = _arg1;
position = timeoffset;
if ((stream.bytesLoaded + byteoffset) < stream.bytesTotal){
stream.close();
};
model.mediaHandler(video);
stream.play(getURL());
iterator = 0;
clearInterval(interval);
interval = setInterval(positionInterval, 100);
clearInterval(loadinterval);
loadinterval = setInterval(loadHandler, 200);
if ((model.config["mute"] == true)){
volume(0);
} else {
volume(model.config["volume"]);
};
model.sendEvent(ModelEvent.BUFFER, {percentage:0});
model.sendEvent(ModelEvent.STATE, {newstate:ModelStates.BUFFERING});
}
protected function convertSeekpoints(_arg1:Object):Object{
var _local2:Object;
var _local3:*;
_local2 = new Object();
_local2.times = new Array();
_local2.filepositions = new Array();
for (_local3 in _arg1) {
_local2.times[_local3] = Number(_arg1[_local3]["time"]);
_local2.filepositions[_local3] = Number(_arg1[_local3]["offset"]);
};
return (_local2);
}
override public function pause():void{
stream.pause();
clearInterval(interval);
model.sendEvent(ModelEvent.STATE, {newstate:ModelStates.PAUSED});
}
override public function seek(_arg1:Number):void{
var _local2:Number;
_local2 = getOffset(_arg1);
clearInterval(interval);
if ((((_local2 < byteoffset)) || ((_local2 >= (byteoffset + stream.bytesLoaded))))){
timeoffset = (position = getOffset(_arg1, true));
byteoffset = _local2;
load(item);
} else {
position = _arg1;
if (mp4){
stream.seek(getOffset((position - timeoffset), true));
} else {
stream.seek(getOffset(position, true));
};
interval = setInterval(positionInterval, 100);
model.sendEvent(ModelEvent.STATE, {newstate:ModelStates.PLAYING});
};
}
protected function statusHandler(_arg1:NetStatusEvent):void{
switch (_arg1.info.code){
case "NetStream.Play.Stop":
if (model.config["state"] != ModelStates.COMPLETED){
clearInterval(interval);
model.sendEvent(ModelEvent.STATE, {newstate:ModelStates.COMPLETED});
};
break;
case "NetStream.Play.StreamNotFound":
stop();
model.sendEvent(ModelEvent.ERROR, {message:("Video not found: " + item["file"])});
break;
};
model.sendEvent(ModelEvent.META, {info:_arg1.info.code});
}
}
}//package com.jeroenwijering.models
Section 16
//ImageModel (com.jeroenwijering.models.ImageModel)
package com.jeroenwijering.models {
import com.jeroenwijering.events.*;
import com.jeroenwijering.player.*;
import flash.display.*;
import flash.events.*;
import flash.net.*;
import flash.utils.*;
import flash.system.*;
public class ImageModel extends AbstractModel {
private var interval:Number;
private var loader:Loader;
public function ImageModel(_arg1:Model):void{
super(_arg1);
loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loaderHandler);
loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, progressHandler);
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, errorHandler);
}
override public function stop():void{
if (loader.contentLoaderInfo.bytesLoaded != loader.contentLoaderInfo.bytesTotal){
loader.close();
} else {
loader.unload();
};
clearInterval(interval);
position = 0;
model.sendEvent(ModelEvent.STATE, {newstate:ModelStates.IDLE});
}
override public function load(_arg1:Object):void{
item = _arg1;
position = 0;
loader.load(new URLRequest(item["file"]), new LoaderContext(true));
model.sendEvent(ModelEvent.STATE, {newstate:ModelStates.BUFFERING});
model.sendEvent(ModelEvent.BUFFER, {percentage:0});
}
protected function positionInterval():void{
position = (Math.round(((position * 10) + 1)) / 10);
if (position < item["duration"]){
model.sendEvent(ModelEvent.TIME, {position:position, duration:item["duration"]});
} else {
if (item["duration"] > 0){
pause();
model.sendEvent(ModelEvent.STATE, {newstate:ModelStates.COMPLETED});
};
};
}
private function errorHandler(_arg1:ErrorEvent):void{
stop();
model.sendEvent(ModelEvent.ERROR, {message:_arg1.text});
}
override public function play():void{
model.sendEvent(ModelEvent.STATE, {newstate:ModelStates.PLAYING});
interval = setInterval(positionInterval, 100);
}
override public function pause():void{
clearInterval(interval);
model.sendEvent(ModelEvent.STATE, {newstate:ModelStates.PAUSED});
}
private function loaderHandler(_arg1:Event):void{
var evt = _arg1;
model.mediaHandler(loader);
try {
Bitmap(loader.content).smoothing = true;
} catch(err:Error) {
};
model.sendEvent(ModelEvent.META, {height:evt.target.height, width:evt.target.width});
play();
}
override public function seek(_arg1:Number):void{
clearInterval(interval);
position = _arg1;
play();
}
private function progressHandler(_arg1:ProgressEvent):void{
var _local2:*;
_local2 = Math.round(((_arg1.bytesLoaded / _arg1.bytesTotal) * 100));
model.sendEvent(ModelEvent.BUFFER, {percentage:_local2});
}
}
}//package com.jeroenwijering.models
Section 17
//LighttpdModel (com.jeroenwijering.models.LighttpdModel)
package com.jeroenwijering.models {
import com.jeroenwijering.player.*;
public class LighttpdModel extends HTTPModel {
public function LighttpdModel(_arg1:Model):void{
super(_arg1);
}
override protected function getURL():String{
var _local1:String;
var _local2:Number;
_local1 = item["file"];
_local2 = byteoffset;
if (mp4){
_local2 = timeoffset;
};
if (_local1.indexOf("?") > -1){
_local1 = (_local1 + ("&start=" + _local2));
} else {
_local1 = (_local1 + ("?start=" + _local2));
};
if (model.config["token"]){
_local1 = (_local1 + ("&token=" + model.config["token"]));
};
_local1 = (_local1 + ("&id=" + model.config["id"]));
_local1 = (_local1 + ("&client=" + encodeURI(model.config["client"])));
_local1 = (_local1 + ("&version=" + encodeURI(model.config["version"])));
_local1 = (_local1 + ("&width=" + model.config["width"]));
return (_local1);
}
}
}//package com.jeroenwijering.models
Section 18
//NginxModel (com.jeroenwijering.models.NginxModel)
package com.jeroenwijering.models {
import com.jeroenwijering.player.*;
public class NginxModel extends HTTPModel {
public function NginxModel(_arg1:Model):void{
super(_arg1);
}
override protected function getURL():String{
var _local1:String;
var _local2:Number;
_local1 = item["file"];
_local2 = byteoffset;
if (mp4){
_local2 = timeoffset;
};
if (_local1.indexOf("?") > -1){
_local1 = (_local1 + ("&start=" + _local2));
} else {
_local1 = (_local1 + ("?start=" + _local2));
};
return (_local1);
}
}
}//package com.jeroenwijering.models
Section 19
//RTMPModel (com.jeroenwijering.models.RTMPModel)
package com.jeroenwijering.models {
import com.jeroenwijering.events.*;
import com.jeroenwijering.player.*;
import flash.events.*;
import com.jeroenwijering.utils.*;
import flash.net.*;
import flash.media.*;
import flash.utils.*;
public class RTMPModel extends AbstractModel {
protected var stream:NetStream;
protected var interval:Number;
protected var started:Boolean;
protected var connection:NetConnection;
protected var transform:SoundTransform;
protected var video:Video;
public function RTMPModel(_arg1:Model):void{
super(_arg1);
connection = new NetConnection();
connection.addEventListener(NetStatusEvent.NET_STATUS, statusHandler);
connection.addEventListener(SecurityErrorEvent.SECURITY_ERROR, errorHandler);
connection.addEventListener(IOErrorEvent.IO_ERROR, errorHandler);
connection.addEventListener(AsyncErrorEvent.ASYNC_ERROR, errorHandler);
connection.objectEncoding = ObjectEncoding.AMF0;
connection.client = new NetClient(this);
video = new Video(320, 240);
video.smoothing = model.config["smoothing"];
transform = new SoundTransform();
}
override public function stop():void{
if (stream){
stream.close();
};
connection.close();
started = false;
clearInterval(interval);
position = 0;
model.sendEvent(ModelEvent.STATE, {newstate:ModelStates.IDLE});
}
private function streamlengthHandler(_arg1:Number):void{
if (_arg1 > 0){
onData({type:"streamlength", duration:_arg1});
};
}
public function onData(_arg1:Object):void{
if (_arg1.width){
video.width = _arg1.width;
video.height = _arg1.height;
};
if (_arg1.type == "complete"){
clearInterval(interval);
model.sendEvent(ModelEvent.STATE, {newstate:ModelStates.COMPLETED});
} else {
if (_arg1.type == "close"){
stop();
};
};
if (model.config["ignoremeta"] != true){
model.sendEvent(ModelEvent.META, _arg1);
};
}
protected function setStream(){
stream = new NetStream(connection);
stream.checkPolicyFile = true;
stream.addEventListener(NetStatusEvent.NET_STATUS, statusHandler);
stream.addEventListener(IOErrorEvent.IO_ERROR, errorHandler);
stream.addEventListener(AsyncErrorEvent.ASYNC_ERROR, errorHandler);
stream.bufferTime = model.config["bufferlength"];
stream.client = new NetClient(this);
video.attachNetStream(stream);
if ((model.config["mute"] == true)){
volume(0);
} else {
volume(model.config["volume"]);
};
interval = setInterval(positionInterval, 100);
stream.play(getID(item["file"]));
}
protected function positionInterval():void{
var _local1:Number;
position = (Math.round((stream.time * 10)) / 10);
_local1 = Math.round(((stream.bufferLength / stream.bufferTime) * 100));
if ((((_local1 < 95)) && ((position < Math.abs(((item["duration"] - stream.bufferTime) - 1)))))){
model.sendEvent(ModelEvent.BUFFER, {percentage:_local1});
if (((!((model.config["state"] == ModelStates.BUFFERING))) && ((_local1 < 25)))){
model.sendEvent(ModelEvent.STATE, {newstate:ModelStates.BUFFERING});
};
} else {
if ((((_local1 > 95)) && (!((model.config["state"] == ModelStates.PLAYING))))){
model.sendEvent(ModelEvent.STATE, {newstate:ModelStates.PLAYING});
};
};
if (position < item["duration"]){
model.sendEvent(ModelEvent.TIME, {position:position, duration:item["duration"]});
} else {
if ((((item["duration"] > 0)) && (model.config["respectduration"]))){
pause();
model.sendEvent(ModelEvent.STATE, {newstate:ModelStates.COMPLETED});
};
};
}
override public function volume(_arg1:Number):void{
transform.volume = (_arg1 / 100);
if (stream){
stream.soundTransform = transform;
};
}
protected function errorHandler(_arg1:ErrorEvent):void{
stop();
model.sendEvent(ModelEvent.ERROR, {message:_arg1.text});
}
override public function load(_arg1:Object):void{
item = _arg1;
position = 0;
model.mediaHandler(video);
connection.connect(item["streamer"]);
model.sendEvent(ModelEvent.BUFFER, {percentage:0});
model.sendEvent(ModelEvent.STATE, {newstate:ModelStates.BUFFERING});
}
protected function getID(_arg1:String):String{
var _local2:String;
_local2 = _arg1.substr(-4);
if (_local2 == ".mp3"){
return (("mp3:" + _arg1.substr(0, (_arg1.length - 4))));
};
if ((((((((_local2 == ".mp4")) || ((_local2 == ".mov")))) || ((_local2 == ".aac")))) || ((_local2 == ".m4a")))){
return (("mp4:" + _arg1));
};
if (_local2 == ".flv"){
return (_arg1.substr(0, (_arg1.length - 4)));
};
return (_arg1);
}
override public function play():void{
stream.resume();
interval = setInterval(positionInterval, 100);
model.sendEvent(ModelEvent.STATE, {newstate:ModelStates.PLAYING});
}
override public function pause():void{
stream.pause();
clearInterval(interval);
model.sendEvent(ModelEvent.STATE, {newstate:ModelStates.PAUSED});
if (((started) && ((item["duration"] == 0)))){
stop();
};
}
override public function seek(_arg1:Number):void{
position = _arg1;
clearInterval(interval);
if (model.config["state"] == ModelStates.PAUSED){
stream.resume();
};
interval = setInterval(positionInterval, 100);
model.sendEvent(ModelEvent.STATE, {newstate:ModelStates.PLAYING});
stream.seek(position);
}
protected function statusHandler(_arg1:NetStatusEvent):void{
var _local2:Responder;
switch (_arg1.info.code){
case "NetConnection.Connect.Success":
if (_arg1.info.secureToken != undefined){
connection.call("secureTokenResponse", null, TEA.decrypt(_arg1.info.secureToken, model.config["token"]));
};
setStream();
_local2 = new Responder(streamlengthHandler);
connection.call("getStreamLength", _local2, getID(item["file"]));
connection.call("checkBandwidth", null);
break;
case "NetStream.Play.Start":
if ((((item["start"] > 0)) && (!(started)))){
seek(item["start"]);
};
started = true;
break;
case "NetStream.Seek.Notify":
clearInterval(interval);
interval = setInterval(positionInterval, 100);
break;
case "NetConnection.Connect.Rejected":
if (_arg1.info.ex.code == 302){
item["streamer"] = _arg1.info.ex.redirect;
connection.connect(item["streamer"]);
};
break;
case "NetStream.Failed":
case "NetStream.Play.StreamNotFound":
stop();
model.sendEvent(ModelEvent.ERROR, {message:("Stream not found: " + item["file"])});
break;
case "NetConnection.Connect.Failed":
stop();
model.sendEvent(ModelEvent.ERROR, {message:("Server not found: " + item["streamer"])});
break;
};
model.sendEvent(ModelEvent.META, {info:_arg1.info.code});
}
}
}//package com.jeroenwijering.models
Section 20
//SoundModel (com.jeroenwijering.models.SoundModel)
package com.jeroenwijering.models {
import com.jeroenwijering.events.*;
import com.jeroenwijering.player.*;
import flash.events.*;
import flash.net.*;
import flash.media.*;
import flash.utils.*;
public class SoundModel extends AbstractModel {
private var channel:SoundChannel;
protected var interval:Number;
private var sound:Sound;
private var loadinterval;
private var transform:SoundTransform;
private var context:SoundLoaderContext;
public function SoundModel(_arg1:Model):void{
super(_arg1);
transform = new SoundTransform();
context = new SoundLoaderContext((model.config["bufferlength"] * 1000), true);
}
override public function stop():void{
if (channel){
channel.stop();
};
try {
sound.close();
} catch(err:Error) {
};
clearInterval(loadinterval);
clearInterval(interval);
position = 0;
model.sendEvent(ModelEvent.STATE, {newstate:ModelStates.IDLE});
}
private function loadHandler():void{
var _local1:*;
var _local2:*;
_local1 = sound.bytesLoaded;
_local2 = sound.bytesTotal;
model.sendEvent(ModelEvent.LOADED, {loaded:_local1, total:_local2});
if (((((_local1 / _local2) > 0.1)) && ((item["duration"] == 0)))){
model.sendEvent(ModelEvent.META, {duration:(((sound.length / 1000) / _local1) * _local2)});
};
if ((((_local1 == _local2)) && ((_local1 > 0)))){
clearInterval(loadinterval);
};
}
protected function positionInterval():void{
var _local1:Number;
position = (Math.round((channel.position / 100)) / 10);
if ((((sound.isBuffering == true)) && ((sound.bytesTotal > sound.bytesLoaded)))){
if (model.config["state"] != ModelStates.BUFFERING){
model.sendEvent(ModelEvent.STATE, {newstate:ModelStates.BUFFERING});
} else {
_local1 = Math.floor(((sound.length / (channel.position + (model.config["bufferlength"] * 1000))) * 100));
model.sendEvent(ModelEvent.BUFFER, {percentage:_local1});
};
} else {
if ((((model.config["state"] == ModelStates.BUFFERING)) && ((sound.isBuffering == false)))){
model.sendEvent(ModelEvent.STATE, {newstate:ModelStates.PLAYING});
};
};
if (position < item["duration"]){
model.sendEvent(ModelEvent.TIME, {position:position, duration:item["duration"]});
} else {
if ((((item["duration"] > 0)) && (model.config["respectduration"]))){
pause();
model.sendEvent(ModelEvent.STATE, {newstate:ModelStates.COMPLETED});
};
};
}
private function completeHandler(_arg1:Event):void{
clearInterval(interval);
model.sendEvent(ModelEvent.STATE, {newstate:ModelStates.COMPLETED});
}
override public function volume(_arg1:Number):void{
transform.volume = (_arg1 / 100);
if (channel){
channel.soundTransform = transform;
};
}
private function errorHandler(_arg1:ErrorEvent):void{
stop();
model.sendEvent(ModelEvent.ERROR, {message:_arg1.text});
}
override public function load(_arg1:Object):void{
item = _arg1;
position = 0;
sound = new Sound();
sound.addEventListener(IOErrorEvent.IO_ERROR, errorHandler);
sound.addEventListener(Event.ID3, id3Handler);
sound.load(new URLRequest(item["file"]), context);
play();
if (item["start"] > 0){
seek(item["start"]);
};
loadinterval = setInterval(loadHandler, 200);
if ((model.config["mute"] == true)){
volume(0);
} else {
volume(model.config["volume"]);
};
model.sendEvent(ModelEvent.STATE, {newstate:ModelStates.BUFFERING});
model.sendEvent(ModelEvent.BUFFER, {percentage:0});
}
private function id3Handler(_arg1:Event):void{
var id3:ID3Info;
var obj:Object;
var evt = _arg1;
try {
id3 = sound.id3;
obj = {type:"id3", album:id3.album, artist:id3.artist, comment:id3.comment, genre:id3.genre, name:id3.songName, track:id3.track, year:id3.year};
model.sendEvent(ModelEvent.META, obj);
} catch(err:Error) {
};
}
override public function play():void{
channel = sound.play((position * 1000), 0, transform);
channel.addEventListener(Event.SOUND_COMPLETE, completeHandler);
interval = setInterval(positionInterval, 100);
model.sendEvent(ModelEvent.STATE, {newstate:ModelStates.PLAYING});
}
override public function pause():void{
channel.stop();
clearInterval(interval);
model.sendEvent(ModelEvent.STATE, {newstate:ModelStates.PAUSED});
}
override public function seek(_arg1:Number):void{
position = _arg1;
clearInterval(interval);
channel.stop();
play();
}
}
}//package com.jeroenwijering.models
Section 21
//VideoModel (com.jeroenwijering.models.VideoModel)
package com.jeroenwijering.models {
import com.jeroenwijering.events.*;
import com.jeroenwijering.player.*;
import flash.events.*;
import com.jeroenwijering.utils.*;
import flash.net.*;
import flash.media.*;
import flash.utils.*;
public class VideoModel extends AbstractModel {
protected var stream:NetStream;
protected var interval:Number;
protected var connection:NetConnection;
protected var loadtimer:Number;
protected var loadinterval:Number;
protected var transform:SoundTransform;
protected var video:Video;
public function VideoModel(_arg1:Model):void{
super(_arg1);
connection = new NetConnection();
connection.connect(null);
stream = new NetStream(connection);
stream.checkPolicyFile = true;
stream.addEventListener(NetStatusEvent.NET_STATUS, statusHandler);
stream.addEventListener(IOErrorEvent.IO_ERROR, errorHandler);
stream.addEventListener(AsyncErrorEvent.ASYNC_ERROR, errorHandler);
stream.bufferTime = model.config["bufferlength"];
stream.client = new NetClient(this);
video = new Video(320, 240);
video.smoothing = model.config["smoothing"];
video.attachNetStream(stream);
transform = new SoundTransform();
}
override public function stop():void{
if (stream.bytesLoaded < stream.bytesTotal){
stream.close();
} else {
stream.pause();
};
loadtimer = undefined;
clearInterval(loadinterval);
clearInterval(interval);
position = 0;
model.sendEvent(ModelEvent.STATE, {newstate:ModelStates.IDLE});
}
protected function loadHandler():void{
var _local1:Number;
var _local2:Number;
_local1 = stream.bytesLoaded;
_local2 = stream.bytesTotal;
model.sendEvent(ModelEvent.LOADED, {loaded:_local1, total:_local2});
if ((((_local1 == _local2)) && ((_local1 > 0)))){
clearInterval(loadinterval);
};
if (!loadtimer){
loadtimer = setTimeout(loadTimeout, 3000);
};
}
public function onData(_arg1:Object):void{
if (_arg1.width){
video.width = _arg1.width;
video.height = _arg1.height;
};
model.sendEvent(ModelEvent.META, _arg1);
}
protected function positionInterval():void{
var _local1:Number;
position = (Math.round((stream.time * 10)) / 10);
_local1 = Math.round(((stream.bufferLength / stream.bufferTime) * 100));
if ((((_local1 < 95)) && ((position < Math.abs(((item["duration"] - stream.bufferTime) - 1)))))){
model.sendEvent(ModelEvent.BUFFER, {percentage:_local1});
if (((!((model.config["state"] == ModelStates.BUFFERING))) && ((_local1 < 25)))){
model.sendEvent(ModelEvent.STATE, {newstate:ModelStates.BUFFERING});
};
} else {
if ((((_local1 > 95)) && (!((model.config["state"] == ModelStates.PLAYING))))){
model.sendEvent(ModelEvent.STATE, {newstate:ModelStates.PLAYING});
};
};
if (position < item["duration"]){
model.sendEvent(ModelEvent.TIME, {position:position, duration:item["duration"]});
} else {
if ((((item["duration"] > 0)) && (model.config["respectduration"]))){
pause();
model.sendEvent(ModelEvent.STATE, {newstate:ModelStates.COMPLETED});
};
};
}
override public function volume(_arg1:Number):void{
transform.volume = (_arg1 / 100);
stream.soundTransform = transform;
}
protected function loadTimeout():void{
var _local1:Object;
_local1 = new Object();
_local1["bandwidth"] = Math.round((((stream.bytesLoaded / 0x0400) / 3) * 8));
if (item["duration"]){
_local1["bitrate"] = Math.round((((stream.bytesTotal / 0x0400) * 8) / item["duration"]));
};
model.sendEvent("META", _local1);
}
protected function errorHandler(_arg1:ErrorEvent):void{
stop();
model.sendEvent(ModelEvent.ERROR, {message:_arg1.text});
}
override public function load(_arg1:Object):void{
item = _arg1;
position = 0;
model.mediaHandler(video);
stream.play(item["file"]);
interval = setInterval(positionInterval, 100);
loadinterval = setInterval(loadHandler, 200);
if ((model.config["mute"] == true)){
volume(0);
} else {
volume(model.config["volume"]);
};
model.sendEvent(ModelEvent.BUFFER, {percentage:0});
model.sendEvent(ModelEvent.STATE, {newstate:ModelStates.BUFFERING});
}
override public function play():void{
stream.resume();
interval = setInterval(positionInterval, 100);
model.sendEvent(ModelEvent.STATE, {newstate:ModelStates.PLAYING});
}
override public function pause():void{
stream.pause();
clearInterval(interval);
model.sendEvent(ModelEvent.STATE, {newstate:ModelStates.PAUSED});
}
override public function seek(_arg1:Number):void{
position = _arg1;
clearInterval(interval);
stream.seek(position);
play();
}
protected function statusHandler(_arg1:NetStatusEvent):void{
switch (_arg1.info.code){
case "NetStream.Play.Stop":
clearInterval(interval);
model.sendEvent(ModelEvent.STATE, {newstate:ModelStates.COMPLETED});
break;
case "NetStream.Play.StreamNotFound":
stop();
model.sendEvent(ModelEvent.ERROR, {message:("Video not found: " + item["file"])});
break;
default:
model.sendEvent(ModelEvent.META, {info:_arg1.info.code});
break;
};
}
}
}//package com.jeroenwijering.models
Section 22
//YoutubeModel (com.jeroenwijering.models.YoutubeModel)
package com.jeroenwijering.models {
import com.jeroenwijering.events.*;
import com.jeroenwijering.player.*;
import flash.display.*;
import flash.events.*;
import flash.net.*;
import flash.system.*;
public class YoutubeModel extends AbstractModel {
private var location:String;
private var connected:Boolean;
private var unique:String;
private var loader:Loader;
private var metasent:Boolean;
private var outgoing:LocalConnection;
private var inbound:LocalConnection;
private var loading:Boolean;
public function YoutubeModel(_arg1:Model):void{
var _local2:String;
var _local3:String;
super(_arg1);
Security.allowDomain("*");
_local2 = model.display.loaderInfo.url;
if (_local2.indexOf("http://") == 0){
unique = Math.random().toString().substr(2);
_local3 = _local2.substr(0, _local2.indexOf(".swf"));
location = ((_local3.substr(0, (_local3.lastIndexOf("/") + 1)) + "yt.swf?unique=") + unique);
} else {
unique = "1";
location = "yt.swf";
};
outgoing = new LocalConnection();
outgoing.allowDomain("*");
outgoing.allowInsecureDomain("*");
outgoing.addEventListener(StatusEvent.STATUS, onLocalConnectionStatusChange);
inbound = new LocalConnection();
inbound.allowDomain("*");
inbound.allowInsecureDomain("*");
inbound.addEventListener(StatusEvent.STATUS, onLocalConnectionStatusChange);
inbound.client = this;
loader = new Loader();
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, errorHandler);
}
private function getID(_arg1:String):String{
var _local2:*;
var _local3:*;
var _local4:*;
_local2 = _arg1.split("?");
_local3 = "";
for (_local4 in _local2) {
if (_local2[_local4].substr(0, 2) == "v="){
_local3 = _local2[_local4].substr(2);
};
};
if (_local3 == ""){
_local3 = _arg1.substr((_arg1.indexOf("/v/") + 3));
};
if (_local3.indexOf("&") > -1){
_local3 = _local3.substr(0, _local3.indexOf("&"));
};
return (_local3);
}
override public function stop():void{
metasent = false;
outgoing.send(("AS3_" + unique), "stopVideo");
position = 0;
model.sendEvent(ModelEvent.STATE, {newstate:ModelStates.IDLE});
}
public function resize(_arg1:Number, _arg2:Number){
outgoing.send(("AS3_" + unique), "setSize", _arg1, _arg2);
}
public function onError(_arg1:String):void{
model.sendEvent(ModelEvent.ERROR, {message:("YouTube error (video not found?):\n" + item["file"])});
stop();
}
public function onLoadChange(_arg1:Number, _arg2:Number, _arg3:Number):void{
model.sendEvent(ModelEvent.LOADED, {loaded:_arg1, total:_arg2, offset:_arg3});
}
private function errorHandler(_arg1:ErrorEvent):void{
stop();
model.sendEvent(ModelEvent.ERROR, {message:_arg1.text});
}
public function onTimeChange(_arg1:Number, _arg2:Number):void{
model.sendEvent(ModelEvent.TIME, {position:_arg1, duration:_arg2});
if (!metasent){
model.sendEvent(ModelEvent.META, {width:320, height:240, duration:_arg2});
metasent = true;
};
}
override public function volume(_arg1:Number):void{
outgoing.send(("AS3_" + unique), "setVolume", _arg1);
}
public function onSwfLoadComplete():void{
if ((model.config["mute"] == true)){
volume(0);
} else {
volume(model.config["volume"]);
};
connected = true;
if (loading){
load(item);
};
}
override public function load(_arg1:Object):void{
var _local2:*;
item = _arg1;
position = 0;
loading = true;
if (connected){
if (outgoing){
_local2 = getID(item["file"]);
resize(model.config["width"], ((model.config["width"] / 4) * 3));
outgoing.send(("AS3_" + unique), "loadVideoById", _local2, item["start"]);
model.mediaHandler(loader);
};
} else {
inbound.connect(("AS2_" + unique));
loader.load(new URLRequest(location));
};
model.sendEvent(ModelEvent.BUFFER, {percentage:0});
model.sendEvent(ModelEvent.STATE, {newstate:ModelStates.BUFFERING});
}
public function onStateChange(_arg1:Number):void{
switch (Number(_arg1)){
case -1:
break;
case 0:
if (((!((model.config["state"] == ModelStates.BUFFERING))) && (!((model.config["state"] == ModelStates.IDLE))))){
model.sendEvent(ModelEvent.STATE, {newstate:ModelStates.COMPLETED});
};
break;
case 1:
model.sendEvent(ModelEvent.STATE, {newstate:ModelStates.PLAYING});
break;
case 2:
model.sendEvent(ModelEvent.STATE, {newstate:ModelStates.PAUSED});
break;
case 3:
model.sendEvent(ModelEvent.STATE, {newstate:ModelStates.BUFFERING});
model.sendEvent(ModelEvent.BUFFER, {percentage:0});
break;
};
}
override public function play():void{
outgoing.send(("AS3_" + unique), "playVideo");
model.sendEvent(ModelEvent.STATE, {newstate:ModelStates.PLAYING});
}
override public function pause():void{
outgoing.send(("AS3_" + unique), "pauseVideo");
model.sendEvent(ModelEvent.STATE, {newstate:ModelStates.PAUSED});
}
override public function seek(_arg1:Number):void{
outgoing.send(("AS3_" + unique), "seekTo", _arg1);
play();
}
public function onLocalConnectionStatusChange(_arg1:StatusEvent):void{
}
}
}//package com.jeroenwijering.models
Section 23
//ASXParser (com.jeroenwijering.parsers.ASXParser)
package com.jeroenwijering.parsers {
import com.jeroenwijering.utils.*;
public class ASXParser {
public static function parse(_arg1:XML):Array{
var _local2:Array;
var _local3:XML;
_local2 = new Array();
for each (_local3 in _arg1.children()) {
if (_local3.localName() == "entry"){
_local2.push(ASXParser.parseItem(_local3));
};
};
return (_local2);
}
public static function parseItem(_arg1:XML):Object{
var _local2:Object;
var _local3:XML;
_local2 = new Object();
for each (_local3 in _arg1.children()) {
if (!_local3.localName()){
break;
};
switch (_local3.localName().toLowerCase()){
case "ref":
_local2["file"] = _local3.@href.toString();
break;
case "title":
_local2["title"] = _local3.text().toString();
break;
case "moreinfo":
_local2["link"] = _local3.@href.toString();
break;
case "abstract":
_local2["description"] = _local3.text().toString();
break;
case "author":
_local2["author"] = _local3.text().toString();
break;
case "duration":
_local2["duration"] = Strings.seconds(_local3.@value.toString());
break;
case "starttime":
_local2["start"] = Strings.seconds(_local3.@value.toString());
break;
case "param":
_local2[_local3.@name] = _local3.@value.toString();
break;
};
};
_local2 = JWParser.parseEntry(_arg1, _local2);
return (_local2);
}
}
}//package com.jeroenwijering.parsers
Section 24
//ATOMParser (com.jeroenwijering.parsers.ATOMParser)
package com.jeroenwijering.parsers {
public class ATOMParser {
public static function parse(_arg1:XML):Array{
var _local2:Array;
var _local3:XML;
_local2 = new Array();
for each (_local3 in _arg1.children()) {
if (_local3.localName() == "entry"){
_local2.push(ATOMParser.parseItem(_local3));
};
};
return (_local2);
}
public static function parseItem(_arg1:XML):Object{
var _local2:*;
var _local3:XML;
_local2 = new Object();
for each (_local3 in _arg1.children()) {
switch (_local3.localName().toLowerCase()){
case "author":
_local2["author"] = _local3.children()[0].text().toString();
break;
case "title":
_local2["title"] = _local3.text().toString();
break;
case "summary":
_local2["description"] = _local3.text().toString();
break;
case "link":
if (_local3.@rel == "alternate"){
_local2["link"] = _local3.@href.toString();
} else {
if (_local3.@rel == "enclosure"){
_local2["file"] = _local3.@href.toString();
};
};
break;
case "published":
_local2["date"] = _local3.text().toString();
break;
};
};
_local2 = MediaParser.parseGroup(_arg1, _local2);
_local2 = JWParser.parseEntry(_arg1, _local2);
return (_local2);
}
}
}//package com.jeroenwijering.parsers
Section 25
//ItunesParser (com.jeroenwijering.parsers.ItunesParser)
package com.jeroenwijering.parsers {
import com.jeroenwijering.utils.*;
public class ItunesParser {
private static var PREFIX = "itunes";
public static function parseEntry(_arg1:XML, _arg2:Object):Object{
var _local3:XML;
for each (_local3 in _arg1.children()) {
if (_local3.namespace().prefix == ItunesParser.PREFIX){
switch (_local3.localName().toLowerCase()){
case "author":
_arg2["author"] = _local3.text().toString();
break;
case "duration":
_arg2["duration"] = Strings.seconds(_local3.text().toString());
break;
case "summary":
_arg2["description"] = _local3.text().toString();
break;
case "keywords":
_arg2["tags"] = _local3.text().toString();
break;
};
};
};
return (_arg2);
}
}
}//package com.jeroenwijering.parsers
Section 26
//JWParser (com.jeroenwijering.parsers.JWParser)
package com.jeroenwijering.parsers {
import com.jeroenwijering.utils.*;
public class JWParser {
private static var PREFIX = "jwplayer";
public static function parseEntry(_arg1:XML, _arg2:Object):Object{
var _local3:XML;
for each (_local3 in _arg1.children()) {
if (_local3.namespace().prefix == JWParser.PREFIX){
_arg2[_local3.localName()] = Strings.serialize(_local3.text().toString());
};
};
return (_arg2);
}
}
}//package com.jeroenwijering.parsers
Section 27
//MediaParser (com.jeroenwijering.parsers.MediaParser)
package com.jeroenwijering.parsers {
import com.jeroenwijering.utils.*;
public class MediaParser {
private static var PREFIX = "media";
public static function parseGroup(_arg1:XML, _arg2:Object):Object{
var _local3:XML;
var _local4:Boolean;
for each (_local3 in _arg1.children()) {
if (_local3.namespace().prefix == MediaParser.PREFIX){
switch (_local3.localName().toLowerCase()){
case "content":
if (!_local4){
_arg2["file"] = _local3.@url.toString();
};
if (_local3.@duration){
_arg2["duration"] = Strings.seconds(_local3.@duration.toString());
};
if (_local3.@start){
_arg2["start"] = Strings.seconds(_local3.@start.toString());
};
if (_local3.children().length() > 0){
_arg2 = MediaParser.parseGroup(_local3, _arg2);
};
break;
case "title":
_arg2["title"] = _local3.text().toString();
break;
case "description":
_arg2["description"] = _local3.text().toString();
break;
case "keywords":
_arg2["tags"] = _local3.text().toString();
break;
case "thumbnail":
_arg2["image"] = _local3.@url.toString();
break;
case "credit":
_arg2["author"] = _local3.text().toString();
break;
case "player":
if (_local3.@url.indexOf("youtube.com") > 0){
_local4 = true;
_arg2["file"] = _local3.@url.toString();
};
break;
case "group":
_arg2 = MediaParser.parseGroup(_local3, _arg2);
break;
};
};
};
return (_arg2);
}
}
}//package com.jeroenwijering.parsers
Section 28
//RSSParser (com.jeroenwijering.parsers.RSSParser)
package com.jeroenwijering.parsers {
public class RSSParser {
public static function parse(_arg1:XML):Array{
var _local2:Array;
var _local3:XML;
var _local4:XML;
_local2 = new Array();
for each (_local3 in _arg1.children()) {
if (_local3.localName() == "channel"){
for each (_local4 in _local3.children()) {
if (_local4.name() == "item"){
_local2.push(RSSParser.parseItem(_local4));
};
};
};
};
return (_local2);
}
public static function parseItem(_arg1:XML):Object{
var _local2:Object;
var _local3:XML;
_local2 = new Object();
for each (_local3 in _arg1.children()) {
switch (_local3.localName().toLowerCase()){
case "enclosure":
_local2["file"] = _local3.@url.toString();
break;
case "title":
_local2["title"] = _local3.text().toString();
break;
case "pubDate":
_local2["date"] = _local3.text().toString();
break;
case "description":
_local2["description"] = _local3.text().toString();
break;
case "link":
_local2["link"] = _local3.text().toString();
break;
case "category":
if (_local2["tags"]){
_local2["tags"] = (_local2["tags"] + _local3.text().toString());
} else {
_local2["tags"] = _local3.text().toString();
};
break;
};
};
_local2 = ItunesParser.parseEntry(_arg1, _local2);
_local2 = MediaParser.parseGroup(_arg1, _local2);
_local2 = JWParser.parseEntry(_arg1, _local2);
return (_local2);
}
}
}//package com.jeroenwijering.parsers
Section 29
//SMILParser (com.jeroenwijering.parsers.SMILParser)
package com.jeroenwijering.parsers {
import com.jeroenwijering.utils.*;
public class SMILParser {
public static function parseAttributes(_arg1:Object, _arg2:Object):Object{
var _local3:Number;
var _local4:String;
_local3 = 0;
while (_local3 < _arg1.attributes().length()) {
_local4 = _arg1.attributes()[_local3].name().toString();
switch (_local4){
case "begin":
_arg2["start"] = Strings.seconds(_arg1.@begin.toString());
break;
case "src":
_arg2["file"] = _arg1.@src.toString();
break;
case "dur":
_arg2["duration"] = Strings.seconds(_arg1.@dur.toString());
break;
case "alt":
_arg2["description"] = _arg1.@alt.toString();
break;
default:
_arg2[_local4] = _arg1.attributes()[_local3].toString();
break;
};
_local3++;
};
return (_arg2);
}
public static function parse(_arg1:XML):Array{
var _local2:Array;
var _local3:XML;
var _local4:XML;
_local2 = new Array();
_local3 = _arg1.children()[1].children()[0];
if (_local3.localName().toLowerCase() == "seq"){
for each (_local4 in _local3.children()) {
_local2.push(SMILParser.parseSeq(_local4));
};
} else {
_local2.push(SMILParser.parsePar(_local3));
};
return (_local2);
}
public static function parseSeq(_arg1:XML):Object{
var _local2:Object;
_local2 = new Object();
switch (_arg1.localName().toLowerCase()){
case "par":
_local2 = SMILParser.parsePar(_arg1);
break;
case "img":
case "video":
case "audio":
_local2 = SMILParser.parseAttributes(_arg1, _local2);
break;
default:
break;
};
return (_local2);
}
public static function parsePar(_arg1:XML):Object{
var _local2:Object;
var _local3:XML;
_local2 = new Object();
for each (_local3 in _arg1.children()) {
switch (_local3.localName().toLowerCase()){
case "anchor":
_local2["link"] = _local3.@href.toString();
break;
case "img":
if (_local2["file"]){
_local2["image"] = _local3.@src.toString();
break;
} else {
_local2 = SMILParser.parseAttributes(_local3, _local2);
};
break;
case "video":
case "audio":
_local2 = SMILParser.parseAttributes(_local3, _local2);
break;
default:
break;
};
};
_local2 = JWParser.parseEntry(_arg1, _local2);
return (_local2);
}
}
}//package com.jeroenwijering.parsers
Section 30
//XSPFParser (com.jeroenwijering.parsers.XSPFParser)
package com.jeroenwijering.parsers {
import com.jeroenwijering.utils.*;
public class XSPFParser {
public static function parse(_arg1:XML):Array{
var _local2:Array;
var _local3:XML;
var _local4:XML;
_local2 = new Array();
for each (_local3 in _arg1.children()) {
if (_local3.localName().toLowerCase() == "tracklist"){
for each (_local4 in _local3.children()) {
_local2.push(XSPFParser.parseItem(_local4));
};
};
};
return (_local2);
}
public static function parseItem(_arg1:XML):Object{
var _local2:Object;
var _local3:XML;
_local2 = new Object();
for each (_local3 in _arg1.children()) {
if (!_local3.localName()){
break;
};
switch (_local3.localName().toLowerCase()){
case "location":
_local2["file"] = _local3.text().toString();
break;
case "title":
_local2["title"] = _local3.text().toString();
break;
case "annotation":
_local2["description"] = _local3.text().toString();
break;
case "info":
_local2["link"] = _local3.text().toString();
break;
case "image":
_local2["image"] = _local3.text().toString();
break;
case "creator":
_local2["author"] = _local3.text().toString();
break;
case "duration":
_local2["duration"] = Strings.seconds(_local3.text());
break;
case "meta":
_local2[_local3.@rel] = _local3.text().toString();
break;
};
};
_local2 = JWParser.parseEntry(_arg1, _local2);
return (_local2);
}
}
}//package com.jeroenwijering.parsers
Section 31
//Controller (com.jeroenwijering.player.Controller)
package com.jeroenwijering.player {
import com.jeroenwijering.events.*;
import flash.display.*;
import flash.events.*;
import com.jeroenwijering.utils.*;
import com.jeroenwijering.parsers.*;
import flash.geom.*;
import flash.net.*;
import flash.system.*;
public class Controller extends EventDispatcher {
private var loader:URLLoader;
private var EXTENSIONS:Object;
private var view:View;
private var model:Model;
private var sploader:SPLoader;
private var config:Object;
public var playlist:Array;
private var randomizer:Randomizer;
private var ELEMENTS:Object;
private var skin:MovieClip;
public function Controller(_arg1:Object, _arg2:MovieClip, _arg3:SPLoader):void{
EXTENSIONS = {3g2:"video", 3gp:"video", aac:"video", f4b:"video", f4p:"video", f4v:"video", flv:"video", gif:"image", jpg:"image", m4a:"video", m4v:"video", mov:"video", mp3:"sound", mp4:"video", png:"image", rbs:"sound", sdp:"video", swf:"image", vp6:"video"};
ELEMENTS = {author:undefined, date:undefined, description:undefined, duration:0, file:undefined, image:undefined, link:undefined, start:0, streamer:undefined, tags:undefined, title:undefined, type:undefined};
super();
config = _arg1;
skin = _arg2;
sploader = _arg3;
loader = new URLLoader();
loader.addEventListener(Event.COMPLETE, loaderHandler);
loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, errorHandler);
loader.addEventListener(IOErrorEvent.IO_ERROR, errorHandler);
}
private function metaHandler(_arg1:ModelEvent):void{
if (((_arg1.data.duration) && ((playlist[config["item"]]["duration"] == 0)))){
playlist[config["item"]]["duration"] = _arg1.data.duration;
};
if (_arg1.data.width){
playlist[config["item"]]["width"] = _arg1.data.width;
playlist[config["item"]]["height"] = _arg1.data.height;
};
}
private function loadHandler(_arg1:ViewEvent):void{
var _local2:Object;
var _local3:String;
var _local4:Array;
var _local5:Object;
if (config["state"] != "IDLE"){
stopHandler();
};
_local2 = new Object();
if (typeof(_arg1.data.object) == "array"){
playlistHandler(_arg1.data.object);
} else {
if (typeof(_arg1.data.object) == "string"){
_local2["file"] = _arg1.data.object;
} else {
if (_arg1.data.object["file"]){
for (_local3 in ELEMENTS) {
if (_arg1.data.object[_local3]){
_local2[_local3] = Strings.serialize(_arg1.data.object[_local3]);
};
};
};
};
};
if (_local2["file"]){
if (getModelType(_local2, false) == null){
loader.load(new URLRequest(_local2["file"]));
return;
};
playlistHandler(new Array(_local2));
} else {
_local4 = new Array();
for each (_local5 in _arg1.data.object) {
_local4.push(_local5);
};
playlistHandler(_local4);
};
}
private function fullscreenHandler(_arg1:ViewEvent):void{
var evt = _arg1;
if (skin.stage["displayState"] == "fullScreen"){
skin.stage["displayState"] = "normal";
} else {
try {
fullscreenrect();
} catch(err:Error) {
};
skin.stage["displayState"] = "fullScreen";
};
}
private function prevHandler(_arg1:ViewEvent):void{
if (config["item"] == 0){
playItem((playlist.length - 1));
} else {
playItem((config["item"] - 1));
};
}
private function playlistHandler(_arg1:Array):void{
var _local2:Number;
var _local3:Array;
_local2 = (_arg1.length - 1);
while (_local2 > -1) {
if (!_arg1[_local2]["duration"]){
_arg1[_local2]["duration"] = 0;
};
if (!_arg1[_local2]["start"]){
_arg1[_local2]["start"] = 0;
};
if (((!(_arg1[_local2]["streamer"])) && (config["streamer"]))){
_arg1[_local2]["streamer"] = config["streamer"];
};
if (config["replace"]){
_local3 = config["replace"].split("|");
_arg1[_local2]["file"] = _arg1[_local2]["file"].replace(RegExp(_local3[0]), _local3[1]);
};
_arg1[_local2]["type"] = getModelType(_arg1[_local2], true);
if (!_arg1[_local2]["type"]){
_arg1.splice(_local2, 1);
};
_local2--;
};
if (_arg1.length > 0){
playlist = _arg1;
} else {
dispatchEvent(new ControllerEvent(ControllerEvent.ERROR, {message:"No valid filetypes found in this playlist"}));
return;
};
if (config["shuffle"] == true){
randomizer = new Randomizer(playlist.length);
config["item"] = randomizer.pick();
} else {
if (config["item"] >= playlist.length){
config["item"] = (playlist.length - 1);
};
};
dispatchEvent(new ControllerEvent(ControllerEvent.PLAYLIST, {playlist:playlist}));
if (config["autostart"] == true){
playItem();
};
}
private function fullscreenrect():void{
var srx:Number;
var asr:Number;
var pnt:Point;
var wid:Number;
srx = Capabilities.screenResolutionX;
asr = (srx / Capabilities.screenResolutionY);
pnt = skin.parent.localToGlobal(new Point(skin.x, skin.y));
try {
wid = playlist[config["item"]]["width"];
} catch(err:Error) {
};
if (((wid) && ((wid > srx)))){
skin.stage["fullScreenSourceRect"] = new Rectangle(pnt.x, pnt.y, srx, Capabilities.screenResolutionY);
} else {
if (((wid) && ((wid > (srx / 2))))){
skin.stage["fullScreenSourceRect"] = new Rectangle(pnt.x, pnt.y, wid, Math.round((wid / asr)));
} else {
skin.stage["fullScreenSourceRect"] = new Rectangle(pnt.x, pnt.y, (srx / 2), (Capabilities.screenResolutionY / 2));
};
};
}
private function errorHandler(_arg1:ErrorEvent):void{
dispatchEvent(new ControllerEvent(ControllerEvent.ERROR, {message:_arg1.text}));
}
private function seekHandler(_arg1:ViewEvent):void{
var _local2:Number;
if (((!((config["state"] == ModelStates.IDLE))) && ((playlist[config["item"]]["duration"] > 0)))){
_local2 = _arg1.data.position;
if (_local2 < 1){
_local2 = 0;
} else {
if (_local2 > (playlist[config["item"]]["duration"] - 1)){
_local2 = (playlist[config["item"]]["duration"] - 1);
};
};
dispatchEvent(new ControllerEvent(ControllerEvent.SEEK, {position:_local2}));
};
}
private function loaderHandler(_arg1:Event):void{
var dat:XML;
var fmt:String;
var evt = _arg1;
try {
dat = XML(evt.target.data);
fmt = dat.localName().toLowerCase();
} catch(err:Error) {
dispatchEvent(new ControllerEvent(ControllerEvent.ERROR, {message:"This playlist is not a valid XML file."}));
return;
};
switch (fmt){
case "rss":
playlistHandler(RSSParser.parse(dat));
break;
case "playlist":
playlistHandler(XSPFParser.parse(dat));
break;
case "asx":
playlistHandler(ASXParser.parse(dat));
break;
case "smil":
playlistHandler(SMILParser.parse(dat));
break;
case "feed":
playlistHandler(ATOMParser.parse(dat));
break;
default:
dispatchEvent(new ControllerEvent(ControllerEvent.ERROR, {message:("Unknown playlist format: " + fmt)}));
return;
};
}
private function itemHandler(_arg1:ViewEvent):void{
var _local2:Number;
_local2 = _arg1.data.index;
if (_local2 < 0){
playItem(0);
} else {
if (_local2 > (playlist.length - 1)){
playItem((playlist.length - 1));
} else {
if (!isNaN(_local2)){
playItem(_local2);
};
};
};
}
private function volumeHandler(_arg1:ViewEvent):void{
var _local2:Number;
_local2 = _arg1.data.percentage;
if (_local2 < 1){
muteHandler(new ViewEvent(ViewEvent.MUTE, {state:true}));
} else {
if (((!(isNaN(_local2))) && ((_local2 < 101)))){
if (config["mute"] == true){
muteHandler(new ViewEvent(ViewEvent.MUTE, {state:false}));
};
config["volume"] = _local2;
Configger.saveCookie("volume", config["volume"]);
dispatchEvent(new ControllerEvent(ControllerEvent.VOLUME, {percentage:_local2}));
};
};
}
private function redrawHandler(_arg1:ViewEvent=null):void{
var dps:String;
var evt = _arg1;
try {
dps = skin.stage["displayState"];
} catch(err:Error) {
};
if ((((dps == "fullScreen")) && (config["resizing"]))){
config["fullscreen"] = true;
sploader.layoutFullscreen();
} else {
if (config["resizing"]){
config["width"] = skin.stage.stageWidth;
config["height"] = skin.stage.stageHeight;
};
config["fullscreen"] = false;
sploader.layoutNormal();
};
dispatchEvent(new ControllerEvent(ControllerEvent.RESIZE, {fullscreen:config["fullscreen"], width:config["width"], height:config["height"]}));
}
private function nextHandler(_arg1:ViewEvent=null):void{
if (((playlist) && ((config["shuffle"] == true)))){
playItem(randomizer.pick());
} else {
if (((playlist) && ((config["item"] == (playlist.length - 1))))){
playItem(0);
} else {
if (playlist){
playItem((config["item"] + 1));
};
};
};
}
public function closeMVC(_arg1:Model, _arg2:View):void{
model = _arg1;
model.addEventListener(ModelEvent.META, metaHandler);
model.addEventListener(ModelEvent.STATE, stateHandler);
view = _arg2;
view.addEventListener(ViewEvent.FULLSCREEN, fullscreenHandler);
view.addEventListener(ViewEvent.ITEM, itemHandler);
view.addEventListener(ViewEvent.LINK, linkHandler);
view.addEventListener(ViewEvent.LOAD, loadHandler);
view.addEventListener(ViewEvent.MUTE, muteHandler);
view.addEventListener(ViewEvent.NEXT, nextHandler);
view.addEventListener(ViewEvent.PLAY, playHandler);
view.addEventListener(ViewEvent.PREV, prevHandler);
view.addEventListener(ViewEvent.REDRAW, redrawHandler);
view.addEventListener(ViewEvent.SEEK, seekHandler);
view.addEventListener(ViewEvent.STOP, stopHandler);
view.addEventListener(ViewEvent.VOLUME, volumeHandler);
}
private function getModelType(_arg1:Object, _arg2:Boolean):String{
if (!_arg1["file"]){
return (null);
};
if (_arg1["type"]){
return (_arg1["type"]);
};
if (((_arg1["streamer"]) && (_arg2))){
if (_arg1["streamer"].substr(0, 4) == "rtmp"){
return ("rtmp");
};
if (_arg1["streamer"].indexOf("/") != -1){
return ("http");
};
return (_arg1["streamer"]);
//unresolved jump
};
if ((((_arg1["file"].indexOf("youtube.com/w") > -1)) || ((_arg1["file"].indexOf("youtube.com/v") > -1)))){
return ("youtube");
};
return (EXTENSIONS[_arg1["file"].substr(-3).toLowerCase()]);
}
private function playItem(_arg1:Number=undefined):void{
if (!isNaN(_arg1)){
config["item"] = _arg1;
};
dispatchEvent(new ControllerEvent(ControllerEvent.ITEM, {index:config["item"]}));
}
private function stopHandler(_arg1:ViewEvent=undefined):void{
dispatchEvent(new ControllerEvent(ControllerEvent.STOP));
}
private function linkHandler(_arg1:ViewEvent):void{
var _local2:Number;
var _local3:String;
_local2 = config["item"];
if (_arg1.data.index){
_local2 = _arg1.data.index;
};
_local3 = playlist[_local2]["link"];
if (_local3 != null){
navigateToURL(new URLRequest(_local3), config["linktarget"]);
};
playHandler(new ViewEvent(ViewEvent.PLAY, {state:false}));
}
private function muteHandler(_arg1:ViewEvent):void{
if ((((_arg1.data.state == true)) || ((_arg1.data.state == false)))){
if (_arg1.data.state == config["mute"]){
return;
};
config["mute"] = _arg1.data.state;
} else {
config["mute"] = !(config["mute"]);
};
Configger.saveCookie("mute", config["mute"]);
dispatchEvent(new ControllerEvent(ControllerEvent.MUTE, {state:config["mute"]}));
}
private function playHandler(_arg1:ViewEvent):void{
if (playlist){
if (((!((_arg1.data.state == false))) && ((config["state"] == ModelStates.PAUSED)))){
dispatchEvent(new ControllerEvent(ControllerEvent.PLAY, {state:true}));
} else {
if (((!((_arg1.data.state == false))) && ((config["state"] == ModelStates.COMPLETED)))){
dispatchEvent(new ControllerEvent(ControllerEvent.SEEK, {position:0}));
} else {
if (((!((_arg1.data.state == false))) && ((config["state"] == ModelStates.IDLE)))){
playItem();
} else {
if (((!((_arg1.data.state == true))) && ((((config["state"] == ModelStates.PLAYING)) || ((config["state"] == ModelStates.BUFFERING)))))){
dispatchEvent(new ControllerEvent(ControllerEvent.PLAY, {state:false}));
};
};
};
};
};
}
private function stateHandler(_arg1:ModelEvent):void{
if (_arg1.data.newstate == ModelStates.COMPLETED){
switch (config["repeat"]){
case "single":
playHandler(new ViewEvent(ViewEvent.PLAY, {state:true}));
break;
case "always":
if (playlist.length == 1){
playHandler(new ViewEvent(ViewEvent.PLAY, {state:true}));
} else {
nextHandler();
};
break;
case "list":
if ((((((config["shuffle"] == true)) && ((randomizer.length > 0)))) || ((((config["shuffle"] == false)) && ((config["item"] < (playlist.length - 1))))))){
nextHandler();
};
break;
};
};
}
}
}//package com.jeroenwijering.player
Section 32
//Model (com.jeroenwijering.player.Model)
package com.jeroenwijering.player {
import com.jeroenwijering.events.*;
import flash.display.*;
import flash.events.*;
import com.jeroenwijering.models.*;
import com.jeroenwijering.utils.*;
import flash.net.*;
import flash.system.*;
public class Model extends EventDispatcher {
public var config:Object;
public var display:MovieClip;
private var item:Object;
private var thumb:Loader;
private var image:String;
private var controller:Controller;
private var models:Object;
private var sploader:SPLoader;
public function Model(_arg1:Object, _arg2:MovieClip, _arg3:SPLoader, _arg4:Controller):void{
config = _arg1;
display = MovieClip(_arg2.getChildByName("display"));
sploader = _arg3;
controller = _arg4;
controller.addEventListener(ControllerEvent.ITEM, itemHandler);
controller.addEventListener(ControllerEvent.MUTE, muteHandler);
controller.addEventListener(ControllerEvent.PLAY, playHandler);
controller.addEventListener(ControllerEvent.PLAYLIST, playlistHandler);
controller.addEventListener(ControllerEvent.RESIZE, resizeHandler);
controller.addEventListener(ControllerEvent.SEEK, seekHandler);
controller.addEventListener(ControllerEvent.STOP, stopHandler);
controller.addEventListener(ControllerEvent.VOLUME, volumeHandler);
thumb = new Loader();
thumb.contentLoaderInfo.addEventListener(Event.COMPLETE, thumbHandler);
thumb.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, thumbHandler);
Draw.clear(display.media);
display.addChildAt(thumb, (display.getChildIndex(display.media) + 1));
display.media.visible = false;
models = new Object();
}
private function resizeHandler(_arg1:Event=null):void{
var _local2:Number;
var _local3:Number;
_local2 = sploader.getPlugin("display").config["width"];
_local3 = sploader.getPlugin("display").config["height"];
Stretcher.stretch(display.media, _local2, _local3, config["stretching"]);
if (thumb.width > 10){
Stretcher.stretch(thumb, _local2, _local3, config["stretching"]);
};
}
public function addModel(_arg1:AbstractModel, _arg2:String):void{
models[_arg2] = _arg1;
}
private function volumeHandler(_arg1:ControllerEvent):void{
if (item){
models[item["type"]].volume(_arg1.data.percentage);
};
}
public function mediaHandler(_arg1:DisplayObject=undefined):void{
Draw.clear(display.media);
display.media.addChild(_arg1);
resizeHandler();
}
private function playlistHandler(_arg1:ControllerEvent):void{
var _local2:String;
_local2 = controller.playlist[config["item"]]["image"];
if (((_local2) && (!((_local2 == image))))){
image = _local2;
thumb.load(new URLRequest(_local2), new LoaderContext(true));
};
}
private function thumbHandler(_arg1:Event){
var evt = _arg1;
try {
Bitmap(thumb.content).smoothing = true;
} catch(err:Error) {
};
resizeHandler();
}
private function stopHandler(_arg1:ControllerEvent=undefined):void{
if (item){
models[item["type"]].stop();
};
}
private function muteHandler(_arg1:ControllerEvent):void{
if (item){
if (_arg1.data.state == true){
models[item["type"]].volume(0);
} else {
models[item["type"]].volume(config["volume"]);
};
};
}
private function seekHandler(_arg1:ControllerEvent):void{
if (item){
models[item["type"]].seek(_arg1.data.position);
};
}
private function itemHandler(_arg1:ControllerEvent):void{
if (item){
models[item["type"]].stop();
};
item = controller.playlist[config["item"]];
if (models[item["type"]]){
models[item["type"]].load(item);
} else {
sendEvent(ModelEvent.ERROR, {message:"No suiteable model found for playback of this file."});
};
if (item["image"]){
if (item["image"] != image){
image = item["image"];
thumb.load(new URLRequest(item["image"]), new LoaderContext(true));
};
} else {
if (image){
image = undefined;
thumb.unload();
};
};
}
public function sendEvent(_arg1:String, _arg2:Object):void{
switch (_arg1){
case ModelEvent.STATE:
_arg2["oldstate"] = config["state"];
config["state"] = _arg2.newstate;
switch (_arg2["newstate"]){
case ModelStates.IDLE:
sendEvent(ModelEvent.LOADED, {loaded:0, offset:0, total:0});
case ModelStates.COMPLETED:
thumb.visible = true;
display.media.visible = false;
sendEvent(ModelEvent.TIME, {position:0, duration:item["duration"]});
break;
case ModelStates.PLAYING:
if ((((((item["file"].indexOf("m4a") == -1)) && ((item["file"].indexOf("mp3") == -1)))) && ((item["file"].indexOf("aac") == -1)))){
thumb.visible = false;
display.media.visible = true;
} else {
thumb.visible = true;
display.media.visible = false;
};
break;
};
dispatchEvent(new ModelEvent(_arg1, _arg2));
break;
case ModelEvent.META:
if (_arg2.width){
resizeHandler();
};
default:
dispatchEvent(new ModelEvent(_arg1, _arg2));
break;
};
}
private function playHandler(_arg1:ControllerEvent):void{
if (item){
if (_arg1.data.state == true){
models[item["type"]].play();
} else {
models[item["type"]].pause();
};
};
}
}
}//package com.jeroenwijering.player
Section 33
//Player (com.jeroenwijering.player.Player)
package com.jeroenwijering.player {
import com.jeroenwijering.events.*;
import flash.display.*;
import flash.events.*;
import com.jeroenwijering.models.*;
import com.jeroenwijering.utils.*;
import com.jeroenwijering.plugins.*;
public class Player extends MovieClip {
protected var model:Model;
public var config:Object;
public var skin:MovieClip;
public var view:View;
protected var sploader:SPLoader;
protected var controller:Controller;
protected var configger:Configger;
public var player:MovieClip;
public function Player():void{
var i:Number;
config = {author:undefined, date:undefined, description:undefined, duration:0, file:undefined, image:undefined, link:undefined, start:0, streamer:undefined, tags:undefined, title:undefined, type:undefined, backcolor:undefined, frontcolor:undefined, lightcolor:undefined, screencolor:undefined, controlbar:"bottom", height:300, playlist:"none", playlistsize:180, skin:undefined, width:400, autostart:false, bufferlength:1, displayclick:"play", fullscreen:false, icons:true, item:0, logo:undefined, mute:false, replace:undefined, repeat:"none", resizing:true, respectduration:false, shuffle:false, smoothing:true, state:"IDLE", stretching:"uniform", volume:90, abouttext:undefined, aboutlink:"http://www.longtailvideo.com/players/jw-flv-player/", client:undefined, id:undefined, linktarget:"_blank", plugins:undefined, token:undefined, tracecall:undefined, version:"4.4.198"};
super();
skin = this["player"];
i = 0;
while (i < skin.numChildren) {
skin.getChildAt(i).visible = false;
i = (i + 1);
};
try {
addEventListener(Event.ADDED_TO_STAGE, loadConfig);
} catch(err:Error) {
loadConfig();
};
}
protected function startPlayer(_arg1:SPLoaderEvent=null){
view.sendEvent(ViewEvent.REDRAW);
dispatchEvent(new PlayerEvent(PlayerEvent.READY));
view.playerReady();
if (config["file"]){
view.sendEvent(ViewEvent.LOAD, config);
};
}
protected function loadMVC(_arg1:SPLoaderEvent=null):void{
controller = new Controller(config, skin, sploader);
model = new Model(config, skin, sploader, controller);
view = new View(config, skin, sploader, controller, model);
controller.closeMVC(model, view);
addModels();
addPlugins();
sploader.addEventListener(SPLoaderEvent.PLUGINS, startPlayer);
sploader.loadPlugins();
}
protected function addModels():void{
model.addModel(new HTTPModel(model), "http");
model.addModel(new ImageModel(model), "image");
model.addModel(new RTMPModel(model), "rtmp");
model.addModel(new SoundModel(model), "sound");
model.addModel(new VideoModel(model), "video");
model.addModel(new YoutubeModel(model), "youtube");
model.addModel(new CameraModel(model), "camera");
model.addModel(new LighttpdModel(model), "lighttpd");
model.addModel(new NginxModel(model), "nginx");
model.addModel(new BitgravityModel(model), "bitgravity");
model.addModel(new HighwindsModel(model), "highwinds");
model.addModel(new FLVSeekModel(model), "flvseek");
model.addModel(new FCSubscribeModel(model), "fcsubscribe");
}
protected function loadSkin(_arg1:Event=null):void{
sploader = new SPLoader(this);
sploader.addEventListener(SPLoaderEvent.SKIN, loadMVC);
sploader.loadSkin();
}
protected function addPlugins():void{
sploader.addPlugin(new Display(), "display");
sploader.addPlugin(new Rightclick(), "rightclick");
sploader.addPlugin(new Controlbar(), "controlbar");
sploader.addPlugin(new Playlist(), "playlist");
}
protected function loadConfig(_arg1:Event=null):void{
var evt = _arg1;
try {
removeEventListener(Event.ADDED_TO_STAGE, loadConfig);
} catch(err:Error) {
loadConfig();
};
configger = new Configger(this);
configger.addEventListener(Event.COMPLETE, loadSkin);
configger.load(config);
}
}
}//package com.jeroenwijering.player
Section 34
//SPLoader (com.jeroenwijering.player.SPLoader)
package com.jeroenwijering.player {
import com.jeroenwijering.events.*;
import flash.display.*;
import flash.events.*;
import com.jeroenwijering.utils.*;
import flash.net.*;
import flash.system.*;
public class SPLoader extends EventDispatcher {
private var config:Object;
private var loader:Loader;
private var done:Number;// = 0
private var basedir:String;// = "http://plugins.longtailvideo.com/"
private var plugins:Array;
private var player:Player;
private var skin:MovieClip;
public function SPLoader(_arg1:Player):void{
done = 0;
basedir = "http://plugins.longtailvideo.com/";
super();
config = _arg1.config;
skin = _arg1.skin;
player = _arg1;
plugins = new Array();
}
public function addPlugin(_arg1:Object, _arg2:String, _arg3:Boolean=false):void{
var obj:Object;
var cbr:DisplayObject;
var str:String;
var clp:DisplayObject;
var org:String;
var pgi = _arg1;
var nam = _arg2;
var ext = _arg3;
obj = {reference:pgi, name:nam, x:0, y:0, width:400, height:300};
cbr = skin.getChildByName("controlbar");
if (nam == "controlbar"){
config["controlbar.position"] = config["controlbar"];
config["controlbar.size"] = cbr.height;
config["controlbar.margin"] = cbr.x;
} else {
if (nam == "playlist"){
config["playlist.position"] = config["playlist"];
config["playlist.size"] = config["playlistsize"];
};
};
try {
for (org in pgi.config) {
obj[org] = pgi.config[org];
};
} catch(err:Error) {
};
for (str in config) {
if (str.indexOf((nam + ".")) == 0){
obj[str.substring((nam.length + 1))] = config[str];
};
};
if (ext == true){
clp = DisplayObject(pgi);
skin.addChild(clp);
} else {
if (skin.getChildByName(nam)){
clp = skin.getChildByName(nam);
} else {
clp = new MovieClip();
clp.name = nam;
skin.addChildAt(clp, 1);
};
};
plugins.push(obj);
try {
pgi.config = obj;
pgi.clip = clp;
} catch(err:Error) {
};
skin.setChildIndex(cbr, (skin.numChildren - 1));
pgi.initializePlugin(player.view);
}
public function layoutFullscreen(){
var _local1:Number;
_local1 = 0;
while (_local1 < plugins.length) {
if ((((((plugins[_local1]["position"] == "over")) || ((plugins[_local1]["position"] == undefined)))) || ((((plugins[_local1]["name"] == "controlbar")) && (!((plugins[_local1]["position"] == "none"))))))){
plugins[_local1]["x"] = 0;
plugins[_local1]["y"] = 0;
plugins[_local1]["width"] = skin.stage.stageWidth;
plugins[_local1]["height"] = skin.stage.stageHeight;
plugins[_local1]["visible"] = true;
} else {
plugins[_local1]["visible"] = false;
};
_local1++;
};
if (config["resizing"]){
config["width"] = skin.stage.stageWidth;
config["height"] = skin.stage.stageHeight;
};
}
public function getPluginConfig(_arg1:Object):Object{
var _local2:Number;
_local2 = 0;
while (_local2 < plugins.length) {
if (plugins[_local2]["reference"] == _arg1){
return (plugins[_local2]);
};
_local2++;
};
return (null);
}
private function pluginHandler(_arg1:Event):void{
var idx:Number;
var end:Number;
var nam:String;
var evt = _arg1;
try {
idx = evt.target.url.lastIndexOf("/");
end = (evt.target.url.length - 4);
if (evt.target.url.indexOf("-", (end - 5)) > -1){
end = evt.target.url.indexOf("-", (end - 5));
};
nam = evt.target.url.substring((idx + 1), end).toLowerCase();
addPlugin(evt.target.content, nam, true);
evt.target.loader.visible = true;
} catch(err:Error) {
};
done--;
if (done == 0){
dispatchEvent(new SPLoaderEvent(SPLoaderEvent.PLUGINS));
} else {
if (done < 0){
player.view.sendEvent("REDRAW");
};
};
}
public function loadSkin():void{
if (config["skin"]){
loadSWF(config["skin"], true);
} else {
dispatchEvent(new SPLoaderEvent(SPLoaderEvent.SKIN));
};
}
private function skinError(_arg1:IOErrorEvent=null):void{
dispatchEvent(new SPLoaderEvent(SPLoaderEvent.SKIN));
}
private function pluginError(_arg1:IOErrorEvent):void{
done--;
if (done == 0){
dispatchEvent(new SPLoaderEvent(SPLoaderEvent.PLUGINS));
};
}
private function skinHandler(_arg1:Event):void{
var skn:MovieClip;
var chd:DisplayObject;
var idx:Number;
var evt = _arg1;
try {
skn = evt.target.content["player"];
while (skn.numChildren > 0) {
chd = skin.getChildByName(skn.getChildAt(0).name);
if (chd){
idx = skin.getChildIndex(chd);
skin.removeChild(chd);
skin.addChildAt(skn.getChildAt(0), idx);
skin.getChildByName(chd.name).visible = false;
} else {
skin.addChild(skn.getChildAt(0));
};
};
dispatchEvent(new SPLoaderEvent(SPLoaderEvent.SKIN));
} catch(err:Error) {
};
}
public function getPlugin(_arg1:String):Object{
var _local2:Number;
_local2 = 0;
while (_local2 < plugins.length) {
if (plugins[_local2]["name"] == _arg1){
return (plugins[_local2]["reference"]);
};
_local2++;
};
return (null);
}
public function layoutNormal():void{
var _local1:Object;
var _local2:Array;
var _local3:Number;
var _local4:Number;
_local1 = {x:0, y:0, width:config["width"], height:config["height"]};
_local2 = new Array();
_local3 = (plugins.length - 1);
while (_local3 >= 0) {
switch (plugins[_local3]["position"]){
case "left":
plugins[_local3]["x"] = _local1.x;
plugins[_local3]["y"] = _local1.y;
plugins[_local3]["width"] = plugins[_local3]["size"];
plugins[_local3]["height"] = _local1.height;
plugins[_local3]["visible"] = true;
_local1.x = (_local1.x + plugins[_local3]["size"]);
_local1.width = (_local1.width - plugins[_local3]["size"]);
break;
case "top":
plugins[_local3]["x"] = _local1.x;
plugins[_local3]["y"] = _local1.y;
plugins[_local3]["width"] = _local1.width;
plugins[_local3]["height"] = plugins[_local3]["size"];
plugins[_local3]["visible"] = true;
_local1.y = (_local1.y + plugins[_local3]["size"]);
_local1.height = (_local1.height - plugins[_local3]["size"]);
break;
case "right":
plugins[_local3]["x"] = ((_local1.x + _local1.width) - plugins[_local3]["size"]);
plugins[_local3]["y"] = _local1.y;
plugins[_local3]["width"] = plugins[_local3]["size"];
plugins[_local3]["height"] = _local1.height;
plugins[_local3]["visible"] = true;
_local1.width = (_local1.width - plugins[_local3]["size"]);
break;
case "bottom":
plugins[_local3]["x"] = _local1.x;
plugins[_local3]["y"] = ((_local1.y + _local1.height) - plugins[_local3]["size"]);
plugins[_local3]["width"] = _local1.width;
plugins[_local3]["height"] = plugins[_local3]["size"];
plugins[_local3]["visible"] = true;
_local1.height = (_local1.height - plugins[_local3]["size"]);
break;
case "none":
plugins[_local3]["visible"] = false;
break;
default:
_local2.push(_local3);
break;
};
_local3--;
};
_local4 = 0;
while (_local4 < _local2.length) {
plugins[_local2[_local4]]["x"] = _local1.x;
plugins[_local2[_local4]]["y"] = _local1.y;
plugins[_local2[_local4]]["width"] = _local1.width;
plugins[_local2[_local4]]["height"] = _local1.height;
plugins[_local2[_local4]]["visible"] = true;
_local4++;
};
if (config["resizing"]){
config["width"] = _local1.width;
config["height"] = _local1.height;
};
}
public function loadPlugins():void{
var _local1:Array;
var _local2:Number;
if (config["plugins"]){
_local1 = config["plugins"].split(",");
done = _local1.length;
_local2 = 0;
while (_local2 < _local1.length) {
loadSWF(_local1[_local2], false);
_local2++;
};
} else {
dispatchEvent(new SPLoaderEvent(SPLoaderEvent.PLUGINS));
};
}
public function loadPlugin(_arg1:String, _arg2:String=null){
var _local3:Array;
var _local4:String;
var _local5:Array;
if (((!((_arg2 == null))) && (!((_arg2 == ""))))){
_local3 = _arg2.split("&");
for (_local4 in _local3) {
_local5 = _local3[_local4].split("=");
config[_local5[0]] = Strings.serialize(_local5[1]);
};
};
loadSWF(_arg1, false);
}
private function loadSWF(_arg1:String, _arg2:Boolean):void{
var _local3:Loader;
var _local4:LoaderContext;
if (_arg1.substr(-4) == ".swf"){
_arg1 = _arg1.substr(0, (_arg1.length - 4));
};
_local3 = new Loader();
if (_arg2){
_local3.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, skinError);
_local3.contentLoaderInfo.addEventListener(Event.COMPLETE, skinHandler);
} else {
_local3.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, pluginError);
_local3.contentLoaderInfo.addEventListener(Event.COMPLETE, pluginHandler);
};
_arg1 = (_arg1 + ".swf");
if (skin.loaderInfo.url.indexOf("http") == 0){
_local4 = new LoaderContext(true, ApplicationDomain.currentDomain, SecurityDomain.currentDomain);
if (_arg2){
_local3.load(new URLRequest(_arg1), _local4);
} else {
_local3.load(new URLRequest((basedir + _arg1)), _local4);
};
} else {
_local3.load(new URLRequest(_arg1));
};
}
}
}//package com.jeroenwijering.player
Section 35
//View (com.jeroenwijering.player.View)
package com.jeroenwijering.player {
import com.jeroenwijering.events.*;
import flash.display.*;
import flash.events.*;
import flash.ui.*;
import com.jeroenwijering.utils.*;
import flash.utils.*;
import flash.system.*;
import flash.external.*;
public class View extends AbstractView {
private var controller:Controller;
private var ready:Boolean;
private var model:Model;
private var context:ContextMenu;
private var sploader:SPLoader;
private var listeners:Array;
private var _config:Object;
private var _skin:MovieClip;
public function View(_arg1:Object, _arg2:MovieClip, _arg3:SPLoader, _arg4:Controller, _arg5:Model):void{
Security.allowDomain("*");
_config = _arg1;
_config["client"] = ("FLASH " + Capabilities.version);
_skin = _arg2;
if (_config["resizing"]){
_skin.stage.scaleMode = "noScale";
_skin.stage.align = "TL";
_skin.stage.addEventListener(Event.RESIZE, resizeHandler);
} else {
_skin.stage.addEventListener(FullScreenEvent.FULL_SCREEN, resizeHandler);
};
sploader = _arg3;
controller = _arg4;
model = _arg5;
setListening();
listeners = new Array();
}
override public function removeControllerListener(_arg1:String, _arg2:Function):void{
controller.removeEventListener(_arg1.toUpperCase(), _arg2);
}
public function getJSPluginConfig(_arg1:String):Object{
var obj:Object;
var s:String;
var plg:*;
var cfg:Object;
var nam = _arg1;
try {
plg = getPlugin(nam);
cfg = getPluginConfig(plg);
} catch(err:Error) {
return ({error:"plugin not loaded"});
};
obj = new Object();
for (s in cfg) {
if ((((((cfg[s] is String)) || ((cfg[s] is Boolean)))) || ((cfg[s] is Number)))){
obj[s] = cfg[s];
};
};
return (obj);
}
override public function removeViewListener(_arg1:String, _arg2:Function):void{
this.removeEventListener(_arg1.toUpperCase(), _arg2);
}
private function setController(_arg1:ControllerEvent):void{
forward("CONTROLLER", _arg1.type, _arg1.data);
}
private function removeJSListener(_arg1:String, _arg2:String, _arg3:String):void{
var _local4:Number;
_local4 = 0;
while (_local4 < listeners.length) {
if ((((((listeners[_local4]["target"] == _arg1)) && ((listeners[_local4]["type"] == _arg2)))) && ((listeners[_local4]["callee"] == _arg3)))){
listeners.splice(_local4, 1);
return;
};
_local4++;
};
}
private function removeJSControllerListener(_arg1:String, _arg2:String):Boolean{
removeJSListener("CONTROLLER", _arg1.toUpperCase(), _arg2);
return (true);
}
private function setView(_arg1:ViewEvent):void{
forward("VIEW", _arg1.type, _arg1.data);
}
override public function getPlugin(_arg1:String):Object{
return (sploader.getPlugin(_arg1));
}
private function getConfig():Object{
var _local1:Object;
var _local2:String;
_local1 = new Object();
for (_local2 in _config) {
if ((((_local2.indexOf(".") == -1)) && (!((_config[_local2] == undefined))))){
_local1[_local2] = _config[_local2];
};
};
return (_local1);
}
override public function loadPlugin(_arg1:String, _arg2:String=null):Boolean{
sploader.loadPlugin(_arg1, _arg2);
return (true);
}
private function addJSControllerListener(_arg1:String, _arg2:String):Boolean{
listeners.push({target:"CONTROLLER", type:_arg1.toUpperCase(), callee:_arg2});
return (true);
}
override public function addViewListener(_arg1:String, _arg2:Function):void{
this.addEventListener(_arg1.toUpperCase(), _arg2);
}
override public function get config():Object{
return (_config);
}
private function addJSViewListener(_arg1:String, _arg2:String):Boolean{
listeners.push({target:"VIEW", type:_arg1.toUpperCase(), callee:_arg2});
return (true);
}
private function forward(_arg1:String, _arg2:String, _arg3:Object):void{
var _local4:String;
var _local5:String;
var _local6:String;
var _local7:Object;
_local4 = "";
for (_local5 in _arg3) {
_local4 = (_local4 + (((_local5 + ":") + _arg3[_local5]) + ","));
};
if (_local4.length > 0){
_local4 = (("(" + _local4.substr(0, (_local4.length - 1))) + ")");
};
if (config["tracecall"] == "arthropod"){
_local7 = {CONTROLLER:"0xFF6666", VIEW:"0x66FF66", MODEL:"0x6666FF"};
Debug.log(((_arg2 + " ") + _local4), _local7[_arg1]);
} else {
if (config["tracecall"] == "flash"){
trace(((((_arg1 + ": ") + _arg2) + " ") + _local4));
} else {
if (((config["tracecall"]) && (ready))){
ExternalInterface.call(config["tracecall"], ((((_arg1 + ": ") + _arg2) + " ") + _local4));
};
};
};
if (!_arg3){
_arg3 = new Object();
};
_arg3.id = config["id"];
_arg3.client = config["client"];
_arg3.version = config["version"];
for (_local6 in listeners) {
if ((((listeners[_local6]["target"] == _arg1)) && ((listeners[_local6]["type"] == _arg2)))){
ExternalInterface.call(listeners[_local6]["callee"], _arg3);
};
};
}
private function getPlaylist():Array{
var _local1:Array;
var _local2:Object;
var _local3:Number;
var _local4:String;
_local1 = new Array();
_local2 = new Object();
_local3 = 0;
while (_local3 < controller.playlist.length) {
_local2 = new Object();
for (_local4 in controller.playlist[_local3]) {
if (_local4.indexOf(".") == -1){
_local2[_local4] = controller.playlist[_local3][_local4];
};
};
_local1.push(_local2);
_local3++;
};
return (_local1);
}
override public function getPluginConfig(_arg1:Object):Object{
return (sploader.getPluginConfig(_arg1));
}
override public function get playlist():Array{
return (controller.playlist);
}
override public function removeModelListener(_arg1:String, _arg2:Function):void{
model.removeEventListener(_arg1.toUpperCase(), _arg2);
}
private function playerReadyPing(){
try {
if (((ExternalInterface.objectID) && (!(_config["id"])))){
_config["id"] = ExternalInterface.objectID;
};
if (_config["id"]){
ExternalInterface.addCallback("addControllerListener", addJSControllerListener);
ExternalInterface.addCallback("addModelListener", addJSModelListener);
ExternalInterface.addCallback("addViewListener", addJSViewListener);
ExternalInterface.addCallback("removeControllerListener", removeJSControllerListener);
ExternalInterface.addCallback("removeModelListener", removeJSModelListener);
ExternalInterface.addCallback("removeViewListener", removeJSViewListener);
ExternalInterface.addCallback("getConfig", getConfig);
ExternalInterface.addCallback("getPlaylist", getPlaylist);
ExternalInterface.addCallback("getPluginConfig", getJSPluginConfig);
ExternalInterface.addCallback("loadPlugin", loadPlugin);
ExternalInterface.addCallback("sendEvent", sendEvent);
ExternalInterface.call("playerReady", {id:config["id"], client:config["client"], version:config["version"]});
};
} catch(err:Error) {
};
}
override public function addModelListener(_arg1:String, _arg2:Function):void{
model.addEventListener(_arg1.toUpperCase(), _arg2);
}
private function removeJSModelListener(_arg1:String, _arg2:String):Boolean{
removeJSListener("MODEL", _arg1.toUpperCase(), _arg2);
return (true);
}
public function playerReady(){
if (((((ExternalInterface.available) && ((_skin.loaderInfo.url.indexOf("http") == 0)))) && (!((ready == true))))){
ready = true;
setTimeout(playerReadyPing, 50);
};
}
private function removeJSViewListener(_arg1:String, _arg2:String):Boolean{
removeJSListener("VIEW", _arg1.toUpperCase(), _arg2);
return (true);
}
private function setModel(_arg1:ModelEvent):void{
forward("MODEL", _arg1.type, _arg1.data);
}
override public function addControllerListener(_arg1:String, _arg2:Function):void{
controller.addEventListener(_arg1.toUpperCase(), _arg2);
}
override public function sendEvent(_arg1:String, _arg2:Object=undefined):void{
var _local3:Object;
_arg1 = _arg1.toUpperCase();
_local3 = new Object();
switch (_arg1){
case "ITEM":
_local3["index"] = _arg2;
break;
case "LINK":
_local3["index"] = _arg2;
break;
case "LOAD":
_local3["object"] = _arg2;
break;
case "SEEK":
_local3["position"] = _arg2;
break;
case "VOLUME":
_local3["percentage"] = _arg2;
break;
default:
if ((((_arg2 == true)) || ((_arg2 == "true")))){
_local3["state"] = true;
} else {
if ((((_arg2 == false)) || ((_arg2 == "false")))){
_local3["state"] = false;
};
};
break;
};
dispatchEvent(new ViewEvent(_arg1, _local3));
}
private function addJSModelListener(_arg1:String, _arg2:String):Boolean{
listeners.push({target:"MODEL", type:_arg1.toUpperCase(), callee:_arg2});
return (true);
}
private function resizeHandler(_arg1:Event=undefined):void{
dispatchEvent(new ViewEvent(ViewEvent.REDRAW));
}
private function setListening():void{
if (config["tracecall"] == "arthropod"){
Debug.clear();
};
addControllerListener(ControllerEvent.ERROR, setController);
addControllerListener(ControllerEvent.ITEM, setController);
addControllerListener(ControllerEvent.MUTE, setController);
addControllerListener(ControllerEvent.PLAY, setController);
addControllerListener(ControllerEvent.PLAYLIST, setController);
addControllerListener(ControllerEvent.RESIZE, setController);
addControllerListener(ControllerEvent.SEEK, setController);
addControllerListener(ControllerEvent.STOP, setController);
addControllerListener(ControllerEvent.VOLUME, setController);
addModelListener(ModelEvent.BUFFER, setModel);
addModelListener(ModelEvent.ERROR, setModel);
addModelListener(ModelEvent.LOADED, setModel);
addModelListener(ModelEvent.META, setModel);
addModelListener(ModelEvent.STATE, setModel);
addModelListener(ModelEvent.TIME, setModel);
addViewListener(ViewEvent.FULLSCREEN, setView);
addViewListener(ViewEvent.ITEM, setView);
addViewListener(ViewEvent.LINK, setView);
addViewListener(ViewEvent.LOAD, setView);
addViewListener(ViewEvent.MUTE, setView);
addViewListener(ViewEvent.NEXT, setView);
addViewListener(ViewEvent.PLAY, setView);
addViewListener(ViewEvent.PREV, setView);
addViewListener(ViewEvent.REDRAW, setView);
addViewListener(ViewEvent.SEEK, setView);
addViewListener(ViewEvent.STOP, setView);
addViewListener(ViewEvent.TRACE, setView);
addViewListener(ViewEvent.VOLUME, setView);
}
override public function get skin():MovieClip{
return (_skin);
}
}
}//package com.jeroenwijering.player
Section 36
//Controlbar (com.jeroenwijering.plugins.Controlbar)
package com.jeroenwijering.plugins {
import com.jeroenwijering.events.*;
import flash.display.*;
import flash.events.*;
import flash.ui.*;
import com.jeroenwijering.utils.*;
import flash.geom.*;
import flash.utils.*;
import flash.accessibility.*;
public class Controlbar implements PluginInterface {
public var config:Object;
public var clip:MovieClip;
private var light:ColorTransform;
private var scrubber:MovieClip;
private var SLIDERS;
private var BUTTONS;
private var view:AbstractView;
private var clonee:MovieClip;
private var front:ColorTransform;
private var stacker:Stacker;
private var blocking:Boolean;
private var hiding:Number;
public function Controlbar():void{
config = {};
BUTTONS = {playButton:"PLAY", pauseButton:"PLAY", stopButton:"STOP", prevButton:"PREV", nextButton:"NEXT", linkButton:"LINK", fullscreenButton:"FULLSCREEN", normalscreenButton:"FULLSCREEN", muteButton:"MUTE", unmuteButton:"MUTE"};
SLIDERS = {timeSlider:"SEEK", volumeSlider:"VOLUME"};
super();
}
private function volumeHandler(_arg1:ControllerEvent=null):void{
var vsl:MovieClip;
var evt = _arg1;
try {
vsl = clip.volumeSlider;
vsl.mark.width = ((view.config["volume"] * (vsl.rail.width - (vsl.icon.width / 2))) / 100);
vsl.icon.x = (vsl.mark.x + ((view.config["volume"] * (vsl.rail.width - vsl.icon.width)) / 100));
} catch(err:Error) {
};
}
private function loadedHandler(_arg1:ModelEvent=null):void{
var pc1:Number;
var pc2:Number;
var wid:Number;
var icw:Number;
var evt = _arg1;
pc1 = 0;
if (((evt) && ((evt.data.total > 0)))){
pc1 = (evt.data.loaded / evt.data.total);
};
pc2 = 0;
if (((evt) && (evt.data.offset))){
pc2 = (evt.data.offset / evt.data.total);
};
try {
wid = clip.timeSlider.rail.width;
clip.timeSlider.mark.x = (pc2 * wid);
clip.timeSlider.mark.width = (pc1 * wid);
icw = (clip.timeSlider.icon.x + clip.timeSlider.icon.width);
} catch(err:Error) {
};
}
private function setButtons():void{
var _local1:String;
var _local2:String;
for (_local1 in BUTTONS) {
if (clip[_local1]){
clip[_local1].mouseChildren = false;
clip[_local1].buttonMode = true;
clip[_local1].addEventListener(MouseEvent.CLICK, clickHandler);
clip[_local1].addEventListener(MouseEvent.MOUSE_OVER, overHandler);
clip[_local1].addEventListener(MouseEvent.MOUSE_OUT, outHandler);
};
};
for (_local2 in SLIDERS) {
if (clip[_local2]){
clip[_local2].mouseChildren = false;
clip[_local2].buttonMode = true;
clip[_local2].addEventListener(MouseEvent.MOUSE_DOWN, downHandler);
clip[_local2].addEventListener(MouseEvent.MOUSE_OVER, overHandler);
clip[_local2].addEventListener(MouseEvent.MOUSE_OUT, outHandler);
};
};
}
private function downHandler(_arg1:MouseEvent):void{
var _local2:Rectangle;
scrubber = MovieClip(_arg1.target);
if (((!((blocking == true))) || ((scrubber.name == "volumeSlider")))){
_local2 = new Rectangle(scrubber.rail.x, scrubber.icon.y, (scrubber.rail.width - scrubber.icon.width), 0);
scrubber.icon.startDrag(true, _local2);
clip.stage.addEventListener(MouseEvent.MOUSE_UP, upHandler);
} else {
scrubber = undefined;
};
}
public function block(_arg1:Boolean):void{
blocking = _arg1;
timeHandler();
}
private function fixTime():void{
var scp:Number;
try {
scp = clip.timeSlider.scaleX;
clip.timeSlider.scaleX = 1;
clip.timeSlider.icon.x = (scp * clip.timeSlider.icon.x);
clip.timeSlider.mark.x = (scp * clip.timeSlider.mark.x);
clip.timeSlider.mark.width = (scp * clip.timeSlider.mark.width);
clip.timeSlider.rail.width = (scp * clip.timeSlider.rail.width);
clip.timeSlider.done.x = (scp * clip.timeSlider.done.x);
clip.timeSlider.done.width = (scp * clip.timeSlider.done.width);
} catch(err:Error) {
};
}
private function setColors():void{
var clr:ColorTransform;
var btn:String;
var sld:String;
if (((view.config["backcolor"]) && (clip["playButton"].icon))){
clr = new ColorTransform();
clr.color = uint(("0x" + view.config["backcolor"].substr(-6)));
clip.back.transform.colorTransform = clr;
};
if (view.config["frontcolor"]){
try {
front = new ColorTransform();
front.color = uint(("0x" + view.config["frontcolor"].substr(-6)));
for (btn in BUTTONS) {
if (clip[btn]){
clip[btn]["icon"].transform.colorTransform = front;
};
};
for (sld in SLIDERS) {
if (clip[sld]){
clip[sld]["icon"].transform.colorTransform = front;
clip[sld]["mark"].transform.colorTransform = front;
clip[sld]["rail"].transform.colorTransform = front;
};
};
clip.elapsedText.textColor = front.color;
clip.totalText.textColor = front.color;
} catch(err:Error) {
};
};
if (view.config["lightcolor"]){
light = new ColorTransform();
light.color = uint(("0x" + view.config["lightcolor"].substr(-6)));
} else {
light = front;
};
if (light){
try {
clip["timeSlider"]["done"].transform.colorTransform = light;
clip["volumeSlider"]["mark"].transform.colorTransform = light;
} catch(err:Error) {
};
};
}
private function stateHandler(_arg1:ModelEvent=undefined):void{
var dps:String;
var evt = _arg1;
clearTimeout(hiding);
view.skin.removeEventListener(MouseEvent.MOUSE_MOVE, moveHandler);
try {
dps = clip.stage["displayState"];
} catch(err:Error) {
};
switch (view.config["state"]){
case ModelStates.PLAYING:
case ModelStates.BUFFERING:
try {
clip.playButton.visible = false;
clip.pauseButton.visible = true;
} catch(err:Error) {
};
if ((((config["position"] == "over")) || ((dps == "fullScreen")))){
hiding = setTimeout(moveTimeout, 1000);
view.skin.addEventListener(MouseEvent.MOUSE_MOVE, moveHandler);
} else {
Animations.fade(clip, 1);
};
break;
default:
try {
clip.playButton.visible = true;
clip.pauseButton.visible = false;
} catch(err:Error) {
};
if ((((config["position"] == "over")) || ((dps == "fullScreen")))){
Mouse.show();
Animations.fade(clip, 1);
};
};
}
private function outHandler(_arg1:MouseEvent):void{
if (((front) && (_arg1.target["icon"]))){
_arg1.target["icon"].transform.colorTransform = front;
} else {
_arg1.target.gotoAndPlay("out");
};
}
private function overHandler(_arg1:MouseEvent):void{
if (((front) && (_arg1.target["icon"]))){
_arg1.target["icon"].transform.colorTransform = light;
} else {
_arg1.target.gotoAndPlay("over");
};
}
private function moveTimeout():void{
if ((((((clip.mouseY < 3)) || ((clip.mouseY > (clip.height - 5))))) && ((clip.alpha == 1)))){
Animations.fade(clip, 0);
Mouse.hide();
};
}
private function clickHandler(_arg1:MouseEvent):void{
var _local2:String;
_local2 = BUTTONS[_arg1.target.name];
if (((((!((blocking == true))) || ((_local2 == "FULLSCREEN")))) || ((_local2 == "MUTE")))){
view.sendEvent(_local2);
};
}
public function initializePlugin(_arg1:AbstractView):void{
view = _arg1;
view.addControllerListener(ControllerEvent.RESIZE, resizeHandler);
view.addModelListener(ModelEvent.LOADED, loadedHandler);
view.addModelListener(ModelEvent.STATE, stateHandler);
view.addModelListener(ModelEvent.TIME, timeHandler);
view.addControllerListener(ControllerEvent.PLAYLIST, itemHandler);
view.addControllerListener(ControllerEvent.ITEM, itemHandler);
view.addControllerListener(ControllerEvent.MUTE, muteHandler);
view.addControllerListener(ControllerEvent.VOLUME, volumeHandler);
stacker = new Stacker(clip);
setButtons();
setColors();
itemHandler();
loadedHandler();
muteHandler();
stateHandler();
timeHandler();
volumeHandler();
}
private function upHandler(_arg1:MouseEvent):void{
var _local2:Number;
var _local3:Number;
_local2 = 0;
clip.stage.removeEventListener(MouseEvent.MOUSE_UP, upHandler);
scrubber.icon.stopDrag();
if ((((scrubber.name == "timeSlider")) && (view.playlist))){
_local2 = view.playlist[view.config["item"]]["duration"];
} else {
if (scrubber.name == "volumeSlider"){
_local2 = 100;
};
};
_local3 = (((scrubber.icon.x - scrubber.rail.x) / (scrubber.rail.width - scrubber.icon.width)) * _local2);
view.sendEvent(SLIDERS[scrubber.name], Math.round(_local3));
scrubber = undefined;
}
private function resizeHandler(_arg1:ControllerEvent=null):void{
var wid:Number;
var evt = _arg1;
wid = config["width"];
clip.x = config["x"];
clip.y = config["y"];
clip.visible = config["visible"];
if ((((config["position"] == "over")) || ((view.config["fullscreen"] == true)))){
clip.x = (config["x"] + config["margin"]);
clip.y = (((config["y"] + config["height"]) - config["margin"]) - config["size"]);
wid = (config["width"] - (2 * config["margin"]));
clip.back.alpha = 0.75;
} else {
if (config["position"] != "none"){
clip.back.alpha = 1;
};
};
try {
clip.fullscreenButton.visible = false;
clip.normalscreenButton.visible = false;
if (((clip.stage["displayState"]) && ((view.config["height"] > 40)))){
if (view.config["fullscreen"]){
clip.fullscreenButton.visible = false;
clip.normalscreenButton.visible = true;
} else {
clip.fullscreenButton.visible = true;
clip.normalscreenButton.visible = false;
};
};
} catch(err:Error) {
};
stacker.rearrange(wid);
stateHandler();
fixTime();
Mouse.show();
}
private function itemHandler(_arg1:ControllerEvent=null):void{
var evt = _arg1;
try {
if (((view.playlist) && ((view.playlist.length > 1)))){
clip.prevButton.visible = (clip.nextButton.visible = true);
} else {
clip.prevButton.visible = (clip.nextButton.visible = false);
};
} catch(err:Error) {
};
try {
if (((view.playlist) && (view.playlist[view.config["item"]]["link"]))){
clip.linkButton.visible = true;
} else {
clip.linkButton.visible = false;
};
} catch(err:Error) {
};
timeHandler();
stacker.rearrange();
fixTime();
loadedHandler(new ModelEvent(ModelEvent.LOADED, {loaded:0, total:0}));
}
private function muteHandler(_arg1:ControllerEvent=null):void{
var evt = _arg1;
if (view.config["mute"] == true){
try {
clip.muteButton.visible = false;
clip.unmuteButton.visible = true;
} catch(err:Error) {
};
try {
clip.volumeSlider.mark.visible = false;
clip.volumeSlider.icon.x = clip.volumeSlider.rail.x;
} catch(err:Error) {
};
} else {
try {
clip.muteButton.visible = true;
clip.unmuteButton.visible = false;
} catch(err:Error) {
};
try {
clip.volumeSlider.mark.visible = true;
volumeHandler();
} catch(err:Error) {
};
};
}
private function moveHandler(_arg1:MouseEvent=null):void{
if (clip.alpha == 0){
Animations.fade(clip, 1);
};
clearTimeout(hiding);
hiding = setTimeout(moveTimeout, 1000);
Mouse.show();
}
public function addButton(_arg1:DisplayObject, _arg2:String, _arg3:Function):void{
var _local4:*;
var _local5:AccessibilityProperties;
var _local6:Number;
if (clip["linkButton"].back){
_local4 = Draw.clone(clip["linkButton"]);
_local4.name = (_arg2 + "Button");
_local4.visible = true;
_local4.tabEnabled = true;
_local4.tabIndex = 6;
_local5 = new AccessibilityProperties();
_local5.name = (_arg2 + "Button");
_local4.accessibilityProperties = _local5;
clip.addChild(_local4);
_local6 = Math.round(((_local4.height - _arg1.height) / 2));
Draw.clear(_local4.icon);
_local4.icon.addChild(_arg1);
_arg1.x = (_arg1.y = 0);
_local4.icon.x = (_local4.icon.y = _local6);
_local4.back.width = (_arg1.width + (2 * _local6));
_local4.buttonMode = true;
_local4.mouseChildren = false;
_local4.addEventListener(MouseEvent.CLICK, _arg3);
if (front){
_local4.icon.transform.colorTransform = front;
_local4.addEventListener(MouseEvent.MOUSE_OVER, overHandler);
_local4.addEventListener(MouseEvent.MOUSE_OUT, outHandler);
};
stacker.insert(_local4, clip["linkButton"]);
};
}
private function timeHandler(_arg1:ModelEvent=null):void{
var dur:Number;
var pos:Number;
var pct:Number;
var tsl:MovieClip;
var xps:Number;
var evt = _arg1;
dur = 0;
pos = 0;
if (evt){
dur = evt.data.duration;
pos = evt.data.position;
} else {
if (view.playlist){
dur = view.playlist[view.config["item"]]["duration"];
pos = 0;
};
};
pct = (pos / dur);
if (isNaN(pct)){
pct = 1;
};
try {
clip.elapsedText.text = Strings.digits(pos);
clip.totalText.text = Strings.digits(dur);
} catch(err:Error) {
};
try {
tsl = clip.timeSlider;
xps = Math.round((pct * (tsl.rail.width - tsl.icon.width)));
if (dur > 0){
clip.timeSlider.icon.visible = true;
clip.timeSlider.mark.visible = true;
if (!scrubber){
clip.timeSlider.icon.x = xps;
clip.timeSlider.done.width = xps;
};
clip.timeSlider.done.visible = true;
} else {
clip.timeSlider.icon.visible = false;
clip.timeSlider.mark.visible = false;
clip.timeSlider.done.visible = false;
};
} catch(err:Error) {
};
}
}
}//package com.jeroenwijering.plugins
Section 37
//Display (com.jeroenwijering.plugins.Display)
package com.jeroenwijering.plugins {
import com.jeroenwijering.events.*;
import flash.display.*;
import flash.events.*;
import com.jeroenwijering.utils.*;
import flash.geom.*;
import flash.net.*;
import flash.utils.*;
public class Display implements PluginInterface {
public var config:Object;
private var margins:Array;
public var clip:MovieClip;
private var loader:Loader;
private var state:String;
private var timeout:Number;
private var view:AbstractView;
private var ICONS:Array;
public function Display():void{
config = {};
ICONS = new Array("playIcon", "errorIcon", "bufferIcon", "linkIcon", "muteIcon", "fullscreenIcon", "nextIcon");
super();
}
private function stateHandler(_arg1:Event=null):void{
switch (view.config["state"]){
case ModelStates.PLAYING:
if (view.config["mute"] == true){
setIcon("muteIcon");
} else {
setIcon();
};
break;
case ModelStates.BUFFERING:
if (((_arg1) && ((_arg1["data"].oldstate == ModelStates.PLAYING)))){
timeout = setTimeout(setIcon, 1500, "bufferIcon");
} else {
setIcon("bufferIcon");
};
break;
case ModelStates.IDLE:
if ((((view.config.displayclick == "none")) || (!(view.playlist)))){
setIcon();
} else {
setIcon("playIcon");
};
break;
default:
setIcon((view.config.displayclick + "Icon"));
break;
};
}
private function logoSetter():void{
margins = new Array(clip.logo.x, clip.logo.y, ((clip.back.width - clip.logo.x) - clip.logo.width), ((clip.back.height - clip.logo.y) - clip.logo.height));
if (clip.logo.width == 10){
Draw.clear(clip.logo);
};
if (view.config["logo"]){
Draw.clear(clip.logo);
loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loaderHandler);
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, loaderHandler);
clip.logo.addChild(loader);
loader.load(new URLRequest(view.config["logo"]));
};
}
public function initializePlugin(_arg1:AbstractView):void{
var _local2:ColorTransform;
view = _arg1;
view.addControllerListener(ControllerEvent.ERROR, errorHandler);
view.addControllerListener(ControllerEvent.MUTE, stateHandler);
view.addControllerListener(ControllerEvent.PLAYLIST, stateHandler);
view.addControllerListener(ControllerEvent.RESIZE, resizeHandler);
view.addModelListener(ModelEvent.BUFFER, bufferHandler);
view.addModelListener(ModelEvent.ERROR, errorHandler);
view.addModelListener(ModelEvent.STATE, stateHandler);
clip.media.mask = clip.masker;
if (view.config["screencolor"]){
_local2 = new ColorTransform();
_local2.color = uint(("0x" + view.config["screencolor"].substr(-6)));
clip.back.transform.colorTransform = _local2;
};
if (view.config["displayclick"] != "none"){
clip.addEventListener(MouseEvent.CLICK, clickHandler);
clip.buttonMode = true;
clip.mouseChildren = false;
};
if (clip.logo){
logoSetter();
};
stateHandler();
}
private function errorHandler(_arg1:Object):void{
if (view.config["icons"] == true){
setIcon("errorIcon");
Draw.set(clip.errorIcon.txt, "text", _arg1.data.message);
};
}
private function clickHandler(_arg1:MouseEvent):void{
if (view.config["state"] == ModelStates.IDLE){
view.sendEvent("PLAY");
} else {
if ((((view.config["state"] == ModelStates.PLAYING)) && ((view.config["mute"] == true)))){
view.sendEvent("MUTE");
} else {
view.sendEvent(view.config["displayclick"]);
};
};
}
private function resizeHandler(_arg1:ControllerEvent):void{
var _local2:String;
if (config["height"] > 0){
clip.visible = true;
} else {
clip.visible = false;
};
Draw.pos(clip, config["x"], config["y"]);
Draw.size(clip.back, config["width"], config["height"]);
Draw.size(clip.masker, config["width"], config["height"]);
for (_local2 in ICONS) {
Draw.pos(clip[ICONS[_local2]], (config["width"] / 2), (config["height"] / 2));
};
if (clip.logo){
loaderHandler();
};
}
private function loaderHandler(_arg1:Event=null):void{
if (margins[0] > margins[2]){
clip.logo.x = ((clip.back.width - margins[2]) - clip.logo.width);
} else {
clip.logo.x = margins[0];
};
if (margins[1] > margins[3]){
clip.logo.y = ((clip.back.height - margins[3]) - clip.logo.height);
} else {
clip.logo.y = margins[1];
};
}
private function bufferHandler(_arg1:ModelEvent):void{
if (_arg1.data.percentage > 0){
Draw.set(clip.bufferIcon.txt, "text", Strings.zero(_arg1.data.percentage));
} else {
Draw.set(clip.bufferIcon.txt, "text", "");
};
}
private function setIcon(_arg1:String=undefined):void{
var _local2:String;
clearTimeout(timeout);
for (_local2 in ICONS) {
if (clip[ICONS[_local2]]){
if ((((_arg1 == ICONS[_local2])) && ((view.config["icons"] == true)))){
clip[ICONS[_local2]].visible = true;
} else {
clip[ICONS[_local2]].visible = false;
};
};
};
}
}
}//package com.jeroenwijering.plugins
Section 38
//Playlist (com.jeroenwijering.plugins.Playlist)
package com.jeroenwijering.plugins {
import com.jeroenwijering.events.*;
import flash.display.*;
import flash.events.*;
import com.jeroenwijering.utils.*;
import flash.geom.*;
import flash.net.*;
import flash.utils.*;
public class Playlist implements PluginInterface {
public var config:Object;
private var active:Number;
private var buttons:Array;
public var clip:MovieClip;
private var light:ColorTransform;
private var buttonheight:Number;
private var proportion:Number;
private var image:Array;
private var view:AbstractView;
private var back:ColorTransform;
private var front:ColorTransform;
private var scrollInterval:Number;
public function Playlist():void{
config = {};
super();
}
private function stateHandler(_arg1:ModelEvent=null):void{
if (config["position"] == "over"){
if ((((((view.config["state"] == ModelStates.PLAYING)) || ((view.config["state"] == ModelStates.PAUSED)))) || ((view.config["state"] == ModelStates.BUFFERING)))){
clip.visible = false;
} else {
clip.visible = true;
};
};
}
private function soverHandler(_arg1:MouseEvent):void{
if (front){
clip.slider.icon.transform.colorTransform = light;
} else {
clip.slider.icon.gotoAndStop("over");
};
}
private function scrollEase(_arg1:Number=-1, _arg2:Number=-1):void{
var _local3:MovieClip;
_local3 = clip.slider;
if (_arg1 != -1){
_local3.icon.y = Math.round((_arg1 - ((_arg1 - _local3.icon.y) / 1.5)));
clip.list.y = Math.round((_arg2 - ((_arg2 - clip.list.y) / 1.5)));
};
if ((((clip.list.y > 0)) || ((_local3.icon.y < _local3.rail.y)))){
clip.list.y = clip.masker.y;
_local3.icon.y = _local3.rail.y;
} else {
if ((((clip.list.y < (clip.masker.height - clip.list.height))) || ((_local3.icon.y > ((_local3.rail.y + _local3.rail.height) - _local3.icon.height))))){
_local3.icon.y = ((_local3.rail.y + _local3.rail.height) - _local3.icon.height);
clip.list.y = ((clip.masker.y + clip.masker.height) - clip.list.height);
};
};
}
private function scrollHandler():void{
var _local1:MovieClip;
var _local2:Number;
var _local3:Number;
var _local4:Number;
_local1 = clip.slider;
_local2 = (_local1.mouseY - _local1.rail.y);
_local3 = (_local2 - (_local1.icon.height / 2));
_local4 = ((clip.masker.y + (clip.masker.height / 2)) - (proportion * _local2));
scrollEase(_local3, _local4);
}
private function playlistHandler(_arg1:ControllerEvent=null):void{
active = undefined;
buildList(true);
resizeHandler();
}
private function outHandler(_arg1:MouseEvent):void{
var _local2:Number;
var _local3:String;
_local2 = Number(_arg1.target.name);
if (((front) && (back))){
for (_local3 in view.playlist[_local2]) {
if (((buttons[_local2].c[_local3]) && ((typeof(buttons[_local2].c[_local3]) == "object")))){
if (_local2 == active){
buttons[_local2].c[_local3].textColor = light.color;
} else {
buttons[_local2].c[_local3].textColor = front.color;
};
};
};
buttons[_local2].c["back"].transform.colorTransform = back;
};
if (_local2 == active){
buttons[_local2].c.gotoAndStop("active");
} else {
buttons[_local2].c.gotoAndStop("out");
};
}
private function overHandler(_arg1:MouseEvent):void{
var _local2:Number;
var _local3:String;
_local2 = Number(_arg1.target.name);
if (((front) && (back))){
for (_local3 in view.playlist[_local2]) {
if (((buttons[_local2].c[_local3]) && ((typeof(buttons[_local2].c[_local3]) == "object")))){
buttons[_local2].c[_local3].textColor = back.color;
};
};
buttons[_local2].c["back"].transform.colorTransform = light;
};
buttons[_local2].c.gotoAndStop("over");
}
private function soutHandler(_arg1:MouseEvent):void{
if (front){
clip.slider.icon.transform.colorTransform = front;
} else {
clip.slider.icon.gotoAndStop("out");
};
}
private function setColors():void{
if (view.config["backcolor"]){
back = new ColorTransform();
back.color = uint(("0x" + view.config["backcolor"].substr(-6)));
clip.back.transform.colorTransform = back;
clip.slider.back.transform.colorTransform = back;
};
if (view.config["frontcolor"]){
front = new ColorTransform();
front.color = uint(("0x" + view.config["frontcolor"].substr(-6)));
try {
clip.slider.icon.transform.colorTransform = front;
clip.slider.rail.transform.colorTransform = front;
} catch(err:Error) {
};
if (view.config["lightcolor"]){
light = new ColorTransform();
light.color = uint(("0x" + view.config["lightcolor"].substr(-6)));
} else {
light = front;
};
};
}
private function clickHandler(_arg1:MouseEvent):void{
view.sendEvent("item", Number(_arg1.target.name));
}
public function initializePlugin(_arg1:AbstractView):void{
var vie = _arg1;
view = vie;
view.addControllerListener(ControllerEvent.ITEM, itemHandler);
view.addControllerListener(ControllerEvent.PLAYLIST, playlistHandler);
view.addControllerListener(ControllerEvent.RESIZE, resizeHandler);
view.addModelListener(ModelEvent.STATE, stateHandler);
buttonheight = clip.list.button.height;
clip.list.button.visible = false;
clip.list.mask = clip.masker;
clip.list.addEventListener(MouseEvent.CLICK, clickHandler);
clip.list.addEventListener(MouseEvent.MOUSE_OVER, overHandler);
clip.list.addEventListener(MouseEvent.MOUSE_OUT, outHandler);
clip.slider.buttonMode = true;
clip.slider.mouseChildren = false;
clip.slider.addEventListener(MouseEvent.MOUSE_DOWN, sdownHandler);
clip.slider.addEventListener(MouseEvent.MOUSE_OVER, soverHandler);
clip.slider.addEventListener(MouseEvent.MOUSE_OUT, soutHandler);
clip.slider.visible = false;
buttons = new Array();
try {
image = new Array(clip.list.button.image.width, clip.list.button.image.height);
} catch(err:Error) {
};
if (clip.list.button["back"]){
setColors();
};
}
private function setContents(_arg1:Number):void{
var itm:String;
var img:MovieClip;
var msk:Sprite;
var ldr:Loader;
var idx = _arg1;
for (itm in view.playlist[idx]) {
buttons[idx].c.gotoAndStop(0);
if (((!(buttons[idx].c[itm])) || (!(view.playlist[idx][itm])))){
continue;
} else {
if (itm == "image"){
if (((!((config["thumbs"] == false))) && (((view.playlist[idx]["image"]) || (view.playlist[idx]["playlist.image"]))))){
img = buttons[idx].c.image;
msk = Draw.rect(buttons[idx].c, "0xFF0000", img.width, img.height, img.x, img.y);
ldr = new Loader();
img.mask = msk;
img.addChild(ldr);
ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, loaderHandler);
if (view.playlist[idx]["playlist.image"]){
ldr.load(new URLRequest(view.playlist[idx]["playlist.image"]));
} else {
ldr.load(new URLRequest(view.playlist[idx]["image"]));
};
};
} else {
if (itm == "duration"){
if (view.playlist[idx][itm] > 0){
buttons[idx].c[itm].text = Strings.digits(view.playlist[idx][itm]);
if (front){
buttons[idx].c[itm].textColor = front.color;
};
};
} else {
try {
if (itm == "description"){
buttons[idx].c[itm].htmlText = view.playlist[idx][itm];
} else {
buttons[idx].c[itm].text = view.playlist[idx][itm];
};
if (front){
buttons[idx].c[itm].textColor = front.color;
};
} catch(e:Error) {
};
};
};
};
};
if (((buttons[idx].c["image"]) && (((!(view.playlist[idx]["image"])) || ((config["thumbs"] == false)))))){
buttons[idx].c["image"].visible = false;
};
if (back){
buttons[idx].c["back"].transform.colorTransform = back;
};
}
private function buildSlider():void{
var _local1:MovieClip;
var _local2:Number;
_local1 = clip.slider;
_local1.visible = true;
_local1.x = (clip.back.width - _local1.width);
_local2 = ((clip.back.height - _local1.height) - _local1.y);
_local1.back.height = (_local1.back.height + _local2);
_local1.rail.height = (_local1.rail.height + _local2);
_local1.icon.height = Math.round((_local1.rail.height / proportion));
}
private function supHandler(_arg1:MouseEvent):void{
clearInterval(scrollInterval);
clip.stage.removeEventListener(MouseEvent.MOUSE_UP, supHandler);
}
private function sdownHandler(_arg1:MouseEvent):void{
clearInterval(scrollInterval);
clip.stage.addEventListener(MouseEvent.MOUSE_UP, supHandler);
scrollHandler();
scrollInterval = setInterval(scrollHandler, 50);
}
private function itemHandler(_arg1:ControllerEvent):void{
var idx:Number;
var itm:String;
var act:String;
var evt = _arg1;
idx = view.config["item"];
clearInterval(scrollInterval);
if (proportion > 1.01){
scrollInterval = setInterval(scrollEase, 50, ((idx * buttonheight) / proportion), ((-(idx) * buttonheight) + clip.masker.y));
};
if (light){
for (itm in view.playlist[idx]) {
if (buttons[idx].c[itm]){
try {
buttons[idx].c[itm].textColor = light.color;
} catch(err:Error) {
};
};
};
};
if (back){
buttons[idx].c["back"].transform.colorTransform = back;
};
buttons[idx].c.gotoAndStop("active");
if (!isNaN(active)){
if (front){
for (act in view.playlist[active]) {
if (buttons[active].c[act]){
try {
buttons[active].c[act].textColor = front.color;
} catch(err:Error) {
};
};
};
};
buttons[active].c.gotoAndStop("out");
};
active = idx;
}
private function buildList(_arg1:Boolean):void{
var _local2:Number;
var _local3:Number;
var _local4:Number;
var _local5:Number;
var _local6:MovieClip;
var _local7:Stacker;
if (!view.playlist){
return;
};
_local2 = clip.back.width;
_local3 = clip.back.height;
clip.masker.height = _local3;
clip.masker.width = _local2;
proportion = ((view.playlist.length * buttonheight) / _local3);
if (proportion > 1.01){
_local2 = (_local2 - clip.slider.width);
buildSlider();
} else {
clip.slider.visible = false;
};
if (_arg1){
clip.list.y = clip.masker.y;
_local5 = 0;
while (_local5 < buttons.length) {
clip.list.removeChild(buttons[_local5].c);
_local5++;
};
buttons = new Array();
} else {
if (proportion > 1){
scrollEase();
};
};
_local4 = 0;
while (_local4 < view.playlist.length) {
if (_arg1){
_local6 = Draw.clone(clip.list.button, true);
_local7 = new Stacker(_local6);
_local6.y = (_local4 * buttonheight);
_local6.buttonMode = true;
_local6.mouseChildren = false;
_local6.name = _local4.toString();
buttons.push({c:_local6, s:_local7});
setContents(_local4);
};
buttons[_local4].s.rearrange(_local2);
_local4++;
};
}
private function resizeHandler(_arg1:ControllerEvent=null):void{
clip.x = config["x"];
clip.y = config["y"];
clip.back.width = config["width"];
clip.back.height = config["height"];
buildList(false);
if (config["position"] == "over"){
clip.back.alpha = 0.7;
stateHandler();
} else {
clip.back.alpha = 1;
clip.visible = config["visible"];
};
}
private function loaderHandler(_arg1:Event):void{
var _local2:Loader;
_local2 = Loader(_arg1.target.loader);
Stretcher.stretch(_local2, image[0], image[1], Stretcher.FILL);
}
}
}//package com.jeroenwijering.plugins
Section 39
//Rightclick (com.jeroenwijering.plugins.Rightclick)
package com.jeroenwijering.plugins {
import com.jeroenwijering.events.*;
import flash.events.*;
import flash.ui.*;
import flash.net.*;
public class Rightclick implements PluginInterface {
public var config:Object;
private var view:AbstractView;
private var about:ContextMenuItem;
private var context:ContextMenu;
private var fullscreen:ContextMenuItem;
private var stretching:ContextMenuItem;
public function Rightclick():void{
config = {};
super();
context = new ContextMenu();
context.hideBuiltInItems();
}
public function initializePlugin(_arg1:AbstractView):void{
var vie = _arg1;
view = vie;
view.skin.contextMenu = context;
try {
if (view.skin.stage["displayState"]){
fullscreen = new ContextMenuItem("Toggle fullscreen...");
addItem(fullscreen, fullscreenHandler);
};
} catch(err:Error) {
};
stretching = new ContextMenuItem((("Stretching is " + view.config["stretching"]) + "..."));
addItem(stretching, stretchHandler);
if (view.config["abouttext"]){
about = new ContextMenuItem((view.config["abouttext"] + "..."));
} else {
about = new ContextMenuItem((("About JW Player " + view.config["version"]) + "..."));
};
addItem(about, aboutHandler);
}
private function stretchHandler(_arg1:ContextMenuEvent):void{
var _local2:Array;
var _local3:Number;
_local2 = new Array("uniform", "fill", "exactfit", "none");
_local3 = 0;
while (_local3 < _local2.length) {
if (_local2[_local3] == view.config["stretching"]){
break;
};
_local3++;
};
if ((_local3 == (_local2.length - 1))){
_local3 = 0;
} else {
_local3++;
};
view.config["stretching"] = _local2[_local3];
stretching.caption = (("Stretching is " + view.config["stretching"]) + "...");
view.sendEvent(ViewEvent.REDRAW);
}
private function aboutHandler(_arg1:ContextMenuEvent):void{
navigateToURL(new URLRequest(view.config["aboutlink"]), "_blank");
}
public function addItem(_arg1:ContextMenuItem, _arg2:Function):void{
_arg1.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, _arg2);
_arg1.separatorBefore = true;
context.customItems.push(_arg1);
}
private function fullscreenHandler(_arg1:ContextMenuEvent):void{
view.sendEvent(ViewEvent.FULLSCREEN);
}
}
}//package com.jeroenwijering.plugins
Section 40
//Watermark (com.jeroenwijering.plugins.Watermark)
package com.jeroenwijering.plugins {
import com.jeroenwijering.events.*;
import flash.display.*;
import flash.events.*;
import fl.transitions.*;
import fl.transitions.easing.*;
import com.jeroenwijering.utils.*;
import flash.net.*;
import flash.utils.*;
public dynamic class Watermark extends MovieClip implements PluginInterface {
public var clip:MovieClip;
private var watermarkTimeout:Number;// = 3000
private var config:Object;
private var view:AbstractView;
private var showing:Boolean;// = false
private var clickURL:String;// = "http://www.longtailvideo.com/players/jw-flv-player/"
private var alphas:Object;
private var hidingTimeout:uint;
public function Watermark(){
config = {};
watermarkTimeout = 3000;
alphas = {over:1, out:0.5};
clickURL = "http://www.longtailvideo.com/players/jw-flv-player/";
showing = false;
super();
this.alpha = alphas["out"];
this.buttonMode = true;
addEventListener(MouseEvent.MOUSE_OVER, mouseOverHandler);
addEventListener(MouseEvent.MOUSE_OUT, mouseOutHandler);
addEventListener(MouseEvent.CLICK, clickHandler);
}
public function initializePlugin(_arg1:AbstractView):void{
view = _arg1;
this.visible = false;
clip.addChild(this);
view.addModelListener(ModelEvent.STATE, stateHandler);
view.addControllerListener(ControllerEvent.RESIZE, resizeHandler);
}
private function stateHandler(_arg1:ModelEvent):void{
switch (_arg1.data.newstate){
case ModelStates.BUFFERING:
clearTimeout(hidingTimeout);
showWatermark();
break;
};
}
private function mouseOutHandler(_arg1:MouseEvent):void{
this.alpha = alphas["out"];
}
private function clickHandler(_arg1:MouseEvent):void{
navigateToURL(new URLRequest(clickURL), "_self");
}
private function hideWatermark():void{
showing = false;
clip.mouseEnabled = false;
TransitionManager.start(this, {type:Fade, direction:Transition.OUT, duration:0.3, easing:Regular.easeIn});
}
private function showWatermark():void{
if (!showing){
showing = true;
TransitionManager.start(this, {type:Fade, direction:Transition.IN, duration:0.3, easing:Regular.easeIn});
};
hidingTimeout = setTimeout(hideWatermark, watermarkTimeout);
clip.mouseEnabled = true;
}
private function mouseOverHandler(_arg1:MouseEvent):void{
this.alpha = alphas["over"];
}
private function resizeHandler(_arg1:ControllerEvent):void{
config = view.getPluginConfig(this);
this.x = (config["x"] + 10);
this.y = ((config["height"] - this.height) - 12);
}
}
}//package com.jeroenwijering.plugins
Section 41
//Animations (com.jeroenwijering.utils.Animations)
package com.jeroenwijering.utils {
import flash.display.*;
import flash.events.*;
public class Animations {
public static function fade(_arg1:MovieClip, _arg2:Number=1, _arg3:Number=0.2):void{
if (_arg1.alpha > _arg2){
_arg1.spd = -(Math.abs(_arg3));
} else {
_arg1.spd = Math.abs(_arg3);
};
_arg1.end = _arg2;
_arg1.addEventListener(Event.ENTER_FRAME, fadeHandler);
}
private static function fadeHandler(_arg1:Event):void{
var _local2:*;
_local2 = MovieClip(_arg1.target);
if ((((((_local2.alpha >= (_local2.end - _local2.spd))) && ((_local2.spd > 0)))) || ((((_local2.alpha <= (_local2.end + _local2.spd))) && ((_local2.spd < 0)))))){
_local2.removeEventListener(Event.ENTER_FRAME, fadeHandler);
_local2.alpha = _local2.end;
if (_local2.end == 0){
_local2.visible = false;
};
} else {
_local2.visible = true;
_local2.alpha = (_local2.alpha + _local2.spd);
};
}
private static function writeHandler(_arg1:Event):void{
var _local2:MovieClip;
var _local3:Number;
_local2 = MovieClip(_arg1.target);
_local3 = Math.floor(((_local2.str.length - _local2.tf.text.length) / _local2.spd));
_local2.tf.text = _local2.str.substr(0, (_local2.str.length - _local3));
if (_local2.tf.text == _local2.str){
_local2.tf.htmlText = _local2.str;
_local2.removeEventListener(Event.ENTER_FRAME, easeHandler);
};
}
private static function easeHandler(_arg1:Event):void{
var _local2:MovieClip;
_local2 = MovieClip(_arg1.target);
if ((((Math.abs((_local2.x - _local2.xps)) < 1)) && ((Math.abs((_local2.y - _local2.yps)) < 1)))){
_local2.removeEventListener(Event.ENTER_FRAME, easeHandler);
_local2.x = _local2.xps;
_local2.y = _local2.yps;
} else {
_local2.x = (_local2.xps - ((_local2.xps - _local2.x) / _local2.spd));
_local2.y = (_local2.yps - ((_local2.yps - _local2.y) / _local2.spd));
};
}
public static function ease(_arg1:MovieClip, _arg2:Number, _arg3:Number, _arg4:Number=2):void{
if (!_arg2){
_arg1.xps = _arg1.x;
} else {
_arg1.xps = _arg2;
};
if (!_arg3){
_arg1.yps = _arg1.y;
} else {
_arg1.yps = _arg3;
};
_arg1.spd = _arg4;
_arg1.addEventListener(Event.ENTER_FRAME, easeHandler);
}
public static function write(_arg1:MovieClip, _arg2:String, _arg3:Number=1.5):void{
_arg1.str = _arg2;
_arg1.spd = _arg3;
_arg1.tf.text = "";
_arg1.addEventListener(Event.ENTER_FRAME, writeHandler);
}
}
}//package com.jeroenwijering.utils
Section 42
//Configger (com.jeroenwijering.utils.Configger)
package com.jeroenwijering.utils {
import flash.display.*;
import flash.events.*;
import flash.net.*;
public class Configger extends EventDispatcher {
private var config:Object;
private var reference:Sprite;
private var loader:URLLoader;
public function Configger(_arg1:Sprite):void{
reference = _arg1;
}
private function loadCookies(){
var _local1:SharedObject;
_local1 = SharedObject.getLocal("com.jeroenwijering", "/");
compareWrite(_local1.data);
loadFlashvars();
}
private function loadXML(_arg1:String):void{
var url = _arg1;
loader = new URLLoader();
loader.addEventListener(Event.COMPLETE, xmlHandler);
try {
loader.load(new URLRequest(url));
} catch(err:Error) {
loadCookies();
};
}
private function compareWrite(_arg1:Object):void{
var _local2:String;
for (_local2 in _arg1) {
config[_local2.toLowerCase()] = Strings.serialize(_arg1[_local2.toLowerCase()]);
};
}
private function loadFlashvars():void{
compareWrite(reference.root.loaderInfo.parameters);
dispatchEvent(new Event(Event.COMPLETE));
}
public function load(_arg1:Object):void{
var _local2:String;
config = _arg1;
_local2 = reference.root.loaderInfo.parameters["config"];
if (_local2){
loadXML(Strings.decode(_local2));
} else {
loadCookies();
};
}
private function xmlHandler(_arg1:Event):void{
var _local2:XML;
var _local3:Object;
var _local4:XML;
_local2 = XML(_arg1.currentTarget.data);
_local3 = new Object();
for each (_local4 in _local2.children()) {
_local3[_local4.name()] = _local4.text();
};
compareWrite(_local3);
loadCookies();
}
public static function saveCookie(_arg1:String, _arg2:Object){
var _local3:SharedObject;
_local3 = SharedObject.getLocal("com.jeroenwijering", "/");
_local3.data[_arg1] = _arg2;
_local3.flush();
}
}
}//package com.jeroenwijering.utils
Section 43
//Debug (com.jeroenwijering.utils.Debug)
package com.jeroenwijering.utils {
import flash.display.*;
import flash.events.*;
import flash.geom.*;
import flash.net.*;
import flash.system.*;
public class Debug {
private static const MEMORY_OPERATION:String = "debugMemory";
public static const NAME:String = "Debug";
private static const ERROR_OPERATION:String = "debugError";
private static const CLEAR_OPERATION:String = "debugClear";
private static const BITMAP_OPERATION:String = "debugBitmapData";
public static const VERSION:String = "0.74";
private static const TYPE:String = "app";
private static const ARRAY_OPERATION:String = "debugArray";
private static const DOMAIN:String = "com.carlcalderon.Arthropod";
private static const OBJECT_OPERATION:String = "debugObject";
private static const WARNING_OPERATION:String = "debugWarning";
private static const CONNECTION:String = "arthropod";
private static const CHECK:String = ".161E714B6C1A76DE7B9865F88B32FCCE8FABA7B5.1";
private static const LOG_OPERATION:String = "debug";
public static var LIGHT_BLUE:uint = 0xCCCC;
public static var secureDomain:String = "*";
public static var password:String = "CDC309AF";
public static var allowLog:Boolean = true;
public static var BLUE:uint = 6710988;
public static var GREEN:uint = 0xCC00;
public static var ignoreStatus:Boolean = true;
public static var RED:uint = 0xCC0000;
public static var secure:Boolean = false;
public static var YELLOW:uint = 0xCCCC00;
public static var PINK:uint = 0xCC00CC;
private static var lc:LocalConnection = new LocalConnection();
private static var hasEventListeners:Boolean = false;
public static function memory():Boolean{
return (send(MEMORY_OPERATION, System.totalMemory, null));
}
public static function error(_arg1):Boolean{
return (send(ERROR_OPERATION, String(_arg1), 0xCC0000));
}
public static function warning(_arg1):Boolean{
return (send(WARNING_OPERATION, String(_arg1), 0xCCCC00));
}
private static function send(_arg1:String, _arg2, _arg3):Boolean{
var operation = _arg1;
var value = _arg2;
var prop = _arg3;
if (!secure){
lc.allowInsecureDomain("*");
} else {
lc.allowDomain(secureDomain);
};
if (!hasEventListeners){
if (ignoreStatus){
lc.addEventListener(StatusEvent.STATUS, ignore);
} else {
lc.addEventListener(StatusEvent.STATUS, status);
};
hasEventListeners = true;
};
if (allowLog){
try {
lc.send((((((TYPE + "#") + DOMAIN) + CHECK) + ":") + CONNECTION), operation, password, value, prop);
return (true);
} catch(e) {
return (false);
};
};
return (false);
}
public static function bitmap(_arg1, _arg2:String=null):Boolean{
var _local3:BitmapData;
var _local4:Matrix;
var _local5:Number;
var _local6:Rectangle;
_local3 = new BitmapData(100, 100, true, 0xFFFFFF);
_local4 = new Matrix();
_local5 = (100 / ((_arg1.width)>=_arg1.height) ? _arg1.width : _arg1.height);
_local4.scale(_local5, _local5);
_local3.draw(_arg1, _local4, null, null, null, true);
_local6 = new Rectangle(0, 0, Math.floor((_arg1.width * _local5)), Math.floor((_arg1.height * _local5)));
return (send(BITMAP_OPERATION, _local3.getPixels(_local6), {bounds:_local6, lbl:_arg2}));
}
public static function object(_arg1):Boolean{
return (send(OBJECT_OPERATION, _arg1, null));
}
public static function clear():Boolean{
return (send(CLEAR_OPERATION, 0, 0));
}
private static function ignore(_arg1:StatusEvent):void{
}
public static function log(_arg1, _arg2:uint=0xFEFEFE):Boolean{
return (send(LOG_OPERATION, String(_arg1), _arg2));
}
public static function array(_arg1:Array):Boolean{
return (send(ARRAY_OPERATION, _arg1, null));
}
public static function snapshot(_arg1:Stage, _arg2:String=null):Boolean{
if (_arg1){
return (bitmap(_arg1, _arg2));
};
return (false);
}
private static function status(_arg1:StatusEvent):void{
trace(("Arthropod status:\n" + _arg1.toString()));
}
}
}//package com.jeroenwijering.utils
Section 44
//Draw (com.jeroenwijering.utils.Draw)
package com.jeroenwijering.utils {
import flash.display.*;
import flash.text.*;
public class Draw {
public static function size(_arg1:DisplayObject, _arg2:Number, _arg3:Number):void{
var obj = _arg1;
var wid = _arg2;
var hei = _arg3;
try {
obj.width = Math.round(wid);
obj.height = Math.round(hei);
} catch(err:Error) {
};
}
public static function set(_arg1:DisplayObject, _arg2:String, _arg3:Object){
var obj = _arg1;
var prp = _arg2;
var val = _arg3;
try {
obj[prp] = val;
} catch(err:Error) {
};
}
public static function pos(_arg1:DisplayObject, _arg2:Number, _arg3:Number):void{
var obj = _arg1;
var xps = _arg2;
var yps = _arg3;
try {
obj.x = Math.round(xps);
obj.y = Math.round(yps);
} catch(err:Error) {
};
}
public static function text(_arg1:Sprite, _arg2:String, _arg3:String, _arg4:Number=12, _arg5:String="Arial", _arg6:Boolean=false, _arg7:Number=100, _arg8:Number=0, _arg9:Number=0, _arg10:String="left"):TextField{
var _local11:TextField;
var _local12:TextFormat;
_local11 = new TextField();
_local12 = new TextFormat();
_local11.autoSize = "left";
_local11.selectable = false;
if (_arg6){
_local11.width = _arg7;
_local11.multiline = true;
_local11.wordWrap = true;
} else {
_local11.autoSize = _arg10;
};
_local11.x = _arg8;
_local11.y = _arg9;
_local12.font = _arg5;
_local12.color = uint(("0x" + _arg3));
_local12.size = _arg4;
_local12.underline = false;
_local11.defaultTextFormat = _local12;
_local11.text = _arg2;
_arg1.addChild(_local11);
return (_local11);
}
public static function rect(_arg1:Sprite, _arg2:String, _arg3:Number, _arg4:Number, _arg5:Number=0, _arg6:Number=0, _arg7:Number=1):Sprite{
var _local8:Sprite;
_local8 = new Sprite();
_local8.x = _arg5;
_local8.y = _arg6;
_local8.graphics.beginFill(uint(("0x" + _arg2)), _arg7);
_local8.graphics.drawRect(0, 0, _arg3, _arg4);
_arg1.addChild(_local8);
return (_local8);
}
public static function clear(_arg1:DisplayObjectContainer):void{
var _local2:Number;
var _local3:Number;
_local2 = _arg1.numChildren;
_local3 = 0;
while (_local3 < _local2) {
_arg1.removeChildAt(0);
_local3++;
};
_arg1.scaleX = (_arg1.scaleY = 1);
}
public static function clone(_arg1:Sprite, _arg2:Boolean=false):MovieClip{
var _local3:Class;
var _local4:*;
var _local5:*;
_local3 = Object(_arg1).constructor;
_local4 = new (_local3);
_local4.transform = _arg1.transform;
_local4.filters = _arg1.filters;
_local4.cacheAsBitmap = _arg1.cacheAsBitmap;
_local4.opaqueBackground = _arg1.opaqueBackground;
if (_arg2 == true){
_local5 = _arg1.parent.getChildIndex(_arg1);
_arg1.parent.addChildAt(_local4, (_local5 + 1));
};
return (_local4);
}
}
}//package com.jeroenwijering.utils
Section 45
//NetClient (com.jeroenwijering.utils.NetClient)
package com.jeroenwijering.utils {
public class NetClient {
private var callback:Object;
public function NetClient(_arg1:Object):void{
callback = _arg1;
}
public function onHeaderData(_arg1:Object):void{
var _local2:Object;
var _local3:String;
var _local4:String;
var _local5:String;
var _local6:String;
_local2 = new Object();
_local3 = "-";
_local4 = "_";
for (_local5 in _arg1) {
_local6 = _local5.replace("-", "_");
_local2[_local6] = _arg1[_local5];
};
forward(_local2, "headerdata");
}
public function onImageData(_arg1:Object):void{
forward(_arg1, "imagedata");
}
public function onLastSecond(_arg1:Object):void{
forward(_arg1, "lastsecond");
}
private function forward(_arg1:Object, _arg2:String):void{
var _local3:Object;
var _local4:*;
_arg1["type"] = _arg2;
_local3 = new Object();
for (_local4 in _arg1) {
_local3[_local4] = _arg1[_local4];
};
callback.onData(_local3);
}
public function onXMPData(... _args):void{
forward(_args[0], "xmp");
}
public function onCaption(_arg1:String, _arg2:Number):void{
forward({captions:_arg1, speaker:_arg2}, "caption");
}
public function onMetaData(_arg1:Object):void{
forward(_arg1, "metadata");
}
public function onPlayStatus(_arg1:Object):void{
if (_arg1.code == "NetStream.Play.Complete"){
forward(_arg1, "complete");
} else {
forward(_arg1, "playstatus");
};
}
public function onBWCheck(... _args):Number{
return (0);
}
public function onCaptionInfo(_arg1:Object):void{
forward(_arg1, "captioninfo");
}
public function onBWDone(... _args):void{
if (_args.length > 0){
forward({bandwidth:_args[0]}, "bandwidth");
};
}
public function close(... _args):void{
forward({close:true}, "close");
}
public function onID3(... _args):void{
forward(_args[0], "id3");
}
public function RtmpSampleAccess(_arg1:Object):void{
forward(_arg1, "rtmpsampleaccess");
}
public function onCuePoint(_arg1:Object):void{
forward(_arg1, "cuepoint");
}
public function onFCSubscribe(_arg1:Object):void{
forward(_arg1, "fcsubscribe");
}
public function onSDES(... _args):void{
forward(_args[0], "sdes");
}
public function onTextData(_arg1:Object):void{
forward(_arg1, "textdata");
}
}
}//package com.jeroenwijering.utils
Section 46
//Randomizer (com.jeroenwijering.utils.Randomizer)
package com.jeroenwijering.utils {
public class Randomizer {
private var todo:Array;
private var done:Array;
private var original:Array;
public function Randomizer(_arg1:Number):void{
var _local2:Number;
super();
original = new Array();
todo = new Array();
done = new Array();
_local2 = 0;
while (_local2 < _arg1) {
original.push(_local2);
_local2++;
};
}
public function pick():Number{
var _local1:Number;
var _local2:Number;
var _local3:Number;
if (todo.length == 0){
_local3 = 0;
while (_local3 < original.length) {
todo.push(_local3);
_local3++;
};
};
_local1 = Math.floor((Math.random() * todo.length));
_local2 = todo[_local1];
done.push(todo.splice(_local1, 1)[0]);
return (_local2);
}
public function get length():Number{
return (todo.length);
}
public function back():Number{
if (done.length < 2){
return (pick());
};
todo.push(done.pop());
return (done[(done.length - 1)]);
}
}
}//package com.jeroenwijering.utils
Section 47
//Stacker (com.jeroenwijering.utils.Stacker)
package com.jeroenwijering.utils {
import flash.display.*;
public class Stacker {
private var _width:Number;
private var stack:Array;
public var clip:MovieClip;
private var latest:Number;// = 0
public function Stacker(_arg1:MovieClip):void{
latest = 0;
super();
clip = _arg1;
analyze();
}
public function get width():Number{
return (_width);
}
private function analyze():void{
var _local1:Number;
var _local2:DisplayObject;
_width = clip.width;
stack = new Array();
_local1 = 0;
while (_local1 < clip.numChildren) {
_local2 = clip.getChildAt(_local1);
stack.push({c:_local2, x:_local2.x, n:_local2.name, w:_local2.width});
_local1++;
};
stack.sortOn(["x", "n"], [Array.NUMERIC, Array.CASEINSENSITIVE]);
}
public function insert(_arg1:MovieClip, _arg2:MovieClip):void{
var _local3:Number;
var _local4:Number;
_local3 = 0;
_local4 = 0;
while (_local4 < stack.length) {
if (stack[_local4].w >= _width){
stack[_local4].w = (stack[_local4].w + _arg1.width);
};
if ((((stack[_local4].c == _arg2)) && (!(_local3)))){
_local3 = _local4;
stack.splice(_local4, 0, {c:_arg1, x:stack[_local4].x, n:_arg1.name, w:_arg1.width});
} else {
if (_local3){
stack[_local4].x = (stack[_local4].x + _arg1.width);
};
};
_local4++;
};
_width = (_width + _arg1.width);
rearrange();
}
public function rearrange(_arg1:Number=undefined):void{
var _local2:Number;
var _local3:Number;
var _local4:Number;
var _local5:Number;
var _local6:Number;
if (_arg1){
latest = _arg1;
};
_local2 = (latest - width);
_local3 = 0;
_local4 = 0;
while (_local4 < stack.length) {
if (stack[_local4].x > (width / 2)){
stack[_local4].c.x = (stack[_local4].x + _local2);
if ((((stack[_local4].c.visible == false)) && ((overlaps(_local4) == false)))){
if (_local4 < (stack.length - 1)){
_local2 = (_local2 - (((stack[_local4].w + stack[_local4].x) - stack[(_local4 - 1)].x) - stack[(_local4 - 1)].w));
} else {
_local2 = (_local2 - (((stack[_local4].w + stack[_local4].x) - stack[(_local4 - 1)].x) - stack[(_local4 - 1)].w));
};
};
} else {
stack[_local4].c.x = (stack[_local4].x - _local3);
if ((((stack[_local4].c.visible == false)) && ((overlaps(_local4) == false)))){
if (stack[(_local4 - 1)].w > (width / 4)){
_local3 = (_local3 + (stack[_local4].w + stack[_local4].x));
} else {
_local3 = (_local3 + (((stack[_local4].w + stack[_local4].x) - stack[(_local4 - 1)].x) - stack[(_local4 - 1)].w));
};
};
};
if (stack[_local4].w > (width / 4)){
stack[_local4].c.width = Math.abs(((stack[_local4].w + _local2) + _local3));
};
_local4++;
};
_local5 = ((latest - width) - _local2);
if (_local5 > 0){
_local6 = 0;
while (_local6 < stack.length) {
if (stack[_local6].x > (width / 2)){
stack[_local6].c.x = (stack[_local6].c.x + _local5);
};
if ((((stack[_local6].w > (width / 4))) && ((stack[_local6].w < width)))){
stack[_local6].c.width = (stack[_local6].c.width + _local5);
};
_local6++;
};
};
}
private function overlaps(_arg1:Number):Boolean{
var _local2:Number;
var _local3:Number;
var _local4:Number;
_local2 = stack[_arg1].x;
_local3 = (stack[_arg1].x + stack[_arg1].w);
_local4 = 0;
while (_local4 < stack.length) {
if (((((((((!((_local4 == _arg1))) && ((stack[_local4].c.visible == true)))) && ((stack[_local4].w < _width)))) && ((stack[_local4].x < _local3)))) && (((stack[_local4].x + stack[_local4].w) > _local2)))){
return (true);
};
_local4++;
};
return (false);
}
}
}//package com.jeroenwijering.utils
Section 48
//Stretcher (com.jeroenwijering.utils.Stretcher)
package com.jeroenwijering.utils {
import flash.display.*;
public class Stretcher {
public static var EXACTFIT:String = "exactfit";
public static var FILL:String = "fill";
public static var NONE:String = "none";
public static var UNIFORM:String = "uniform";
public static function stretch(_arg1:DisplayObject, _arg2:Number, _arg3:Number, _arg4:String="uniform"):void{
var _local5:Number;
var _local6:Number;
_local5 = (_arg2 / _arg1.width);
_local6 = (_arg3 / _arg1.height);
switch (_arg4.toLowerCase()){
case "exactfit":
_arg1.width = _arg2;
_arg1.height = _arg3;
break;
case "fill":
if (_local5 > _local6){
_arg1.width = (_arg1.width * _local5);
_arg1.height = (_arg1.height * _local5);
} else {
_arg1.width = (_arg1.width * _local6);
_arg1.height = (_arg1.height * _local6);
};
break;
case "none":
_arg1.scaleX = 1;
_arg1.scaleY = 1;
break;
case "uniform":
if (_local5 > _local6){
_arg1.width = (_arg1.width * _local6);
_arg1.height = (_arg1.height * _local6);
} else {
_arg1.width = (_arg1.width * _local5);
_arg1.height = (_arg1.height * _local5);
};
break;
};
_arg1.x = Math.round(((_arg2 / 2) - (_arg1.width / 2)));
_arg1.y = Math.round(((_arg3 / 2) - (_arg1.height / 2)));
_arg1.width = Math.ceil(_arg1.width);
_arg1.height = Math.ceil(_arg1.height);
}
}
}//package com.jeroenwijering.utils
Section 49
//Strings (com.jeroenwijering.utils.Strings)
package com.jeroenwijering.utils {
public class Strings {
public static function serialize(_arg1:String):Object{
if (_arg1 == null){
return (null);
};
if (_arg1 == "true"){
return (true);
};
if (_arg1 == "false"){
return (false);
};
if (((isNaN(Number(_arg1))) || ((_arg1.length > 5)))){
return (Strings.decode(_arg1));
};
return (Number(_arg1));
}
public static function digits(_arg1:Number):String{
var _local2:Number;
var _local3:Number;
var _local4:Number;
var _local5:String;
_local2 = Math.floor((_arg1 / 3600));
_local3 = Math.floor((_arg1 / 60));
_local4 = Math.floor((_arg1 % 60));
_local5 = ((Strings.zero(_local3) + ":") + Strings.zero(_local4));
if (_local2 > 0){
_local3 = (_local3 - (_local2 * 60));
_local5 = ((((Strings.zero(_local2) + ":") + Strings.zero(_local3)) + ":") + Strings.zero(_local4));
};
return (_local5);
}
public static function zero(_arg1:Number):String{
if (_arg1 < 10){
return (("0" + _arg1));
};
return (("" + _arg1));
}
public static function strip(_arg1:String):String{
var _local2:Array;
var _local3:Number;
var _local4:Number;
_local2 = _arg1.split("\n");
_arg1 = _local2.join("");
_local2 = _arg1.split("\r");
_arg1 = _local2.join("");
_local3 = _arg1.indexOf("<");
for (;_local3 != -1;(_arg1 = ((_arg1.substr(0, _local3) + " ") + _arg1.substr((_local4 + 1), _arg1.length))), (_local3 = _arg1.indexOf("<", _local3))) {
_local4 = _arg1.indexOf(">", (_local3 + 1));
if ((_local4 == -1)){
_local4 = (_arg1.length - 1);
continue;
};
};
return (_arg1);
}
public static function decode(_arg1:String):String{
if (_arg1.indexOf("asfunction") == -1){
return (unescape(_arg1));
};
return ("");
}
public static function seconds(_arg1:String):Number{
var _local2:Array;
var _local3:Number;
_arg1 = _arg1.replace(",", ".");
_local2 = _arg1.split(":");
_local3 = 0;
if (_arg1.substr(-1) == "s"){
_local3 = Number(_arg1.substr(0, (_arg1.length - 1)));
} else {
if (_arg1.substr(-1) == "m"){
_local3 = (Number(_arg1.substr(0, (_arg1.length - 1))) * 60);
} else {
if (_arg1.substr(-1) == "h"){
_local3 = (Number(_arg1.substr(0, (_arg1.length - 1))) * 3600);
} else {
if (_local2.length > 1){
_local3 = Number(_local2[(_local2.length - 1)]);
_local3 = (_local3 + (Number(_local2[(_local2.length - 2)]) * 60));
if (_local2.length == 3){
_local3 = (_local3 + (Number(_local2[(_local2.length - 3)]) * 3600));
};
} else {
_local3 = Number(_arg1);
};
};
};
};
return (_local3);
}
}
}//package com.jeroenwijering.utils
Section 50
//TEA (com.jeroenwijering.utils.TEA)
package com.jeroenwijering.utils {
public class TEA {
private static function strToChars(_arg1:String):Array{
var _local2:Array;
var _local3:Number;
_local2 = new Array();
_local3 = 0;
while (_local3 < _arg1.length) {
_local2.push(_arg1.charCodeAt(_local3));
_local3++;
};
return (_local2);
}
private static function charsToHex(_arg1:Array):String{
var _local2:String;
var _local3:Array;
var _local4:Number;
_local2 = new String("");
_local3 = new Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f");
_local4 = 0;
while (_local4 < _arg1.length) {
_local2 = (_local2 + (_local3[(_arg1[_local4] >> 4)] + _local3[(_arg1[_local4] & 15)]));
_local4++;
};
return (_local2);
}
public static function encrypt(_arg1:String, _arg2:String):String{
var _local3:Array;
var _local4:Array;
var _local5:Number;
var _local6:Number;
var _local7:Number;
var _local8:Number;
var _local9:Number;
var _local10:Number;
var _local11:Number;
var _local12:Number;
var _local13:Number;
_local3 = charsToLongs(strToChars(_arg1));
_local4 = charsToLongs(strToChars(_arg2));
_local5 = _local3.length;
if (_local5 == 0){
return ("");
};
if (_local5 == 1){
var _temp1 = _local5;
_local5 = (_local5 + 1);
var _local14 = _temp1;
_local3[_local14] = 0;
};
_local7 = _local3[(_local5 - 1)];
_local8 = _local3[0];
_local9 = 2654435769;
_local12 = Math.floor((6 + (52 / _local5)));
_local13 = 0;
while (_local12-- > 0) {
_local13 = (_local13 + _local9);
_local11 = ((_local13 >>> 2) & 3);
_local6 = 0;
while (_local6 < (_local5 - 1)) {
_local8 = _local3[(_local6 + 1)];
_local10 = ((((_local7 >>> 5) ^ (_local8 << 2)) + ((_local8 >>> 3) ^ (_local7 << 4))) ^ ((_local13 ^ _local8) + (_local4[((_local6 & 3) ^ _local11)] ^ _local7)));
_local7 = (_local3[_local6] = (_local3[_local6] + _local10));
_local6++;
};
_local8 = _local3[0];
_local10 = ((((_local7 >>> 5) ^ (_local8 << 2)) + ((_local8 >>> 3) ^ (_local7 << 4))) ^ ((_local13 ^ _local8) + (_local4[((_local6 & 3) ^ _local11)] ^ _local7)));
_local7 = (_local3[(_local5 - 1)] = (_local3[(_local5 - 1)] + _local10));
};
return (charsToHex(longsToChars(_local3)));
}
private static function longToChars(_arg1:Number):Array{
var _local2:Array;
_local2 = new Array();
_local2.push((_arg1 & 0xFF), ((_arg1 >>> 8) & 0xFF), ((_arg1 >>> 16) & 0xFF), ((_arg1 >>> 24) & 0xFF));
return (_local2);
}
private static function hexToChars(_arg1:String):Array{
var _local2:Array;
var _local3:Number;
_local2 = new Array();
_local3 = ((_arg1.substr(0, 2))=="0x") ? 2 : 0;
while (_local3 < _arg1.length) {
_local2.push(parseInt(_arg1.substr(_local3, 2), 16));
_local3 = (_local3 + 2);
};
return (_local2);
}
private static function charsToStr(_arg1:Array):String{
var _local2:String;
var _local3:Number;
_local2 = new String("");
_local3 = 0;
while (_local3 < _arg1.length) {
_local2 = (_local2 + String.fromCharCode(_arg1[_local3]));
_local3++;
};
return (_local2);
}
private static function longsToChars(_arg1:Array):Array{
var _local2:Array;
var _local3:Number;
_local2 = new Array();
_local3 = 0;
while (_local3 < _arg1.length) {
_local2.push((_arg1[_local3] & 0xFF), ((_arg1[_local3] >>> 8) & 0xFF), ((_arg1[_local3] >>> 16) & 0xFF), ((_arg1[_local3] >>> 24) & 0xFF));
_local3++;
};
return (_local2);
}
public static function decrypt(_arg1:String, _arg2:String):String{
var _local3:Array;
var _local4:Array;
var _local5:Number;
var _local6:Number;
var _local7:Number;
var _local8:Number;
var _local9:Number;
var _local10:Number;
var _local11:Number;
var _local12:Number;
var _local13:Number;
_local3 = charsToLongs(hexToChars(_arg1));
_local4 = charsToLongs(strToChars(_arg2));
_local5 = _local3.length;
if (_local5 == 0){
return ("");
};
_local7 = _local3[(_local5 - 1)];
_local8 = _local3[0];
_local9 = 2654435769;
_local12 = Math.floor((6 + (52 / _local5)));
_local13 = (_local12 * _local9);
while (_local13 != 0) {
_local11 = ((_local13 >>> 2) & 3);
_local6 = (_local5 - 1);
while (_local6 > 0) {
_local7 = _local3[(_local6 - 1)];
_local10 = ((((_local7 >>> 5) ^ (_local8 << 2)) + ((_local8 >>> 3) ^ (_local7 << 4))) ^ ((_local13 ^ _local8) + (_local4[((_local6 & 3) ^ _local11)] ^ _local7)));
_local8 = (_local3[_local6] = (_local3[_local6] - _local10));
_local6--;
};
_local7 = _local3[(_local5 - 1)];
_local10 = ((((_local7 >>> 5) ^ (_local8 << 2)) + ((_local8 >>> 3) ^ (_local7 << 4))) ^ ((_local13 ^ _local8) + (_local4[((_local6 & 3) ^ _local11)] ^ _local7)));
_local8 = (_local3[0] = (_local3[0] - _local10));
_local13 = (_local13 - _local9);
};
return (charsToStr(longsToChars(_local3)));
}
private static function charsToLongs(_arg1:Array):Array{
var _local2:Array;
var _local3:Number;
_local2 = new Array(Math.ceil((_arg1.length / 4)));
_local3 = 0;
while (_local3 < _local2.length) {
_local2[_local3] = (((_arg1[(_local3 * 4)] + (_arg1[((_local3 * 4) + 1)] << 8)) + (_arg1[((_local3 * 4) + 2)] << 16)) + (_arg1[((_local3 * 4) + 3)] << 24));
_local3++;
};
return (_local2);
}
}
}//package com.jeroenwijering.utils
Section 51
//Regular (fl.transitions.easing.Regular)
package fl.transitions.easing {
public class Regular {
public static function easeOut(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):Number{
_arg1 = (_arg1 / _arg4);
return ((((-(_arg3) * _arg1) * (_arg1 - 2)) + _arg2));
}
public static function easeIn(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):Number{
_arg1 = (_arg1 / _arg4);
return ((((_arg3 * _arg1) * _arg1) + _arg2));
}
public static function easeInOut(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):Number{
_arg1 = (_arg1 / (_arg4 / 2));
if (_arg1 < 1){
return (((((_arg3 / 2) * _arg1) * _arg1) + _arg2));
};
--_arg1;
return ((((-(_arg3) / 2) * ((_arg1 * (_arg1 - 2)) - 1)) + _arg2));
}
}
}//package fl.transitions.easing
Section 52
//Fade (fl.transitions.Fade)
package fl.transitions {
import flash.display.*;
public class Fade extends Transition {
protected var _alphaFinal:Number;
public function Fade(_arg1:MovieClip, _arg2:Object, _arg3:TransitionManager){
super(_arg1, _arg2, _arg3);
this._alphaFinal = this.manager.contentAppearance.alpha;
}
override protected function _render(_arg1:Number):void{
this._content.alpha = (this._alphaFinal * _arg1);
}
override public function get type():Class{
return (Fade);
}
}
}//package fl.transitions
Section 53
//Transition (fl.transitions.Transition)
package fl.transitions {
import flash.display.*;
import flash.events.*;
import flash.geom.*;
public class Transition extends EventDispatcher {
protected var _progress:Number;
public var ID:int;
protected var _twn:Tween;
protected var _direction:uint;// = 0
protected var _content:MovieClip;
protected var _height:Number;// = NAN
protected var _width:Number;// = NAN
protected var _outerBounds:Rectangle;
protected var _easing:Function;
protected var _innerBounds:Rectangle;
protected var _manager:TransitionManager;
protected var _duration:Number;// = 2
public static const IN:uint = 0;
public static const OUT:uint = 1;
public function Transition(_arg1:MovieClip, _arg2:Object, _arg3:TransitionManager){
_direction = 0;
_duration = 2;
_width = NaN;
_height = NaN;
super();
this.content = _arg1;
this.direction = _arg2.direction;
this.duration = _arg2.duration;
this.easing = _arg2.easing;
this.manager = _arg3;
this._innerBounds = this.manager._innerBounds;
this._outerBounds = this.manager._outerBounds;
this._width = this.manager._width;
this._height = this.manager._height;
this._resetTween();
}
public function stop():void{
this._twn.fforward();
this._twn.stop();
}
private function _resetTween():void{
if (this._twn){
this._twn.stop();
this._twn.removeEventListener(TweenEvent.MOTION_FINISH, this.onMotionFinished);
};
this._twn = new Tween(this, "", this.easing, 0, 1, this.duration, true);
this._twn.stop();
this._twn.prop = "progress";
this._twn.addEventListener(TweenEvent.MOTION_FINISH, this.onMotionFinished, false, 0, true);
}
public function onMotionFinished(_arg1:Object):void{
if (this.direction == Transition.OUT){
this.dispatchEvent(new Event("transitionOutDone"));
} else {
this.dispatchEvent(new Event("transitionInDone"));
};
}
public function get duration():Number{
return (this._duration);
}
public function set duration(_arg1:Number):void{
if (_arg1){
this._duration = _arg1;
if (this._twn){
this._twn.duration = _arg1;
};
};
}
public function get easing():Function{
return (this._easing);
}
public function get progress():Number{
return (this._progress);
}
public function get manager():TransitionManager{
return (this._manager);
}
protected function _render(_arg1:Number):void{
}
public function get type():Class{
return (Transition);
}
public function drawCircle(_arg1:MovieClip, _arg2:Number, _arg3:Number, _arg4:Number):void{
_arg1.graphics.moveTo((_arg2 + _arg4), _arg3);
_arg1.graphics.curveTo((_arg4 + _arg2), ((Math.tan((Math.PI / 8)) * _arg4) + _arg3), ((Math.sin((Math.PI / 4)) * _arg4) + _arg2), ((Math.sin((Math.PI / 4)) * _arg4) + _arg3));
_arg1.graphics.curveTo(((Math.tan((Math.PI / 8)) * _arg4) + _arg2), (_arg4 + _arg3), _arg2, (_arg4 + _arg3));
_arg1.graphics.curveTo(((-(Math.tan((Math.PI / 8))) * _arg4) + _arg2), (_arg4 + _arg3), ((-(Math.sin((Math.PI / 4))) * _arg4) + _arg2), ((Math.sin((Math.PI / 4)) * _arg4) + _arg3));
_arg1.graphics.curveTo((-(_arg4) + _arg2), ((Math.tan((Math.PI / 8)) * _arg4) + _arg3), (-(_arg4) + _arg2), _arg3);
_arg1.graphics.curveTo((-(_arg4) + _arg2), ((-(Math.tan((Math.PI / 8))) * _arg4) + _arg3), ((-(Math.sin((Math.PI / 4))) * _arg4) + _arg2), ((-(Math.sin((Math.PI / 4))) * _arg4) + _arg3));
_arg1.graphics.curveTo(((-(Math.tan((Math.PI / 8))) * _arg4) + _arg2), (-(_arg4) + _arg3), _arg2, (-(_arg4) + _arg3));
_arg1.graphics.curveTo(((Math.tan((Math.PI / 8)) * _arg4) + _arg2), (-(_arg4) + _arg3), ((Math.sin((Math.PI / 4)) * _arg4) + _arg2), ((-(Math.sin((Math.PI / 4))) * _arg4) + _arg3));
_arg1.graphics.curveTo((_arg4 + _arg2), ((-(Math.tan((Math.PI / 8))) * _arg4) + _arg3), (_arg4 + _arg2), _arg3);
}
public function cleanUp():void{
this.removeEventListener("transitionInDone", this._manager.transitionInDone);
this.removeEventListener("transitionOutDone", this._manager.transitionOutDone);
this.stop();
}
public function set easing(_arg1:Function):void{
this._easing = _arg1;
if (this._twn){
this._twn.func = _arg1;
};
}
public function set manager(_arg1:TransitionManager):void{
if (this._manager){
this.removeEventListener("transitionInDone", this._manager.transitionInDone);
this.removeEventListener("transitionOutDone", this._manager.transitionOutDone);
};
this._manager = _arg1;
this.addEventListener("transitionInDone", this._manager.transitionInDone);
this.addEventListener("transitionOutDone", this._manager.transitionOutDone);
}
public function set progress(_arg1:Number):void{
if (this._progress == _arg1){
return;
};
this._progress = _arg1;
if (this._direction){
this._render((1 - _arg1));
} else {
this._render(_arg1);
};
this.dispatchEvent(new Event("transitionProgress"));
}
public function start():void{
this.content.visible = true;
this._twn.start();
}
public function drawBox(_arg1:MovieClip, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Number):void{
_arg1.graphics.moveTo(_arg2, _arg3);
_arg1.graphics.lineTo((_arg2 + _arg4), _arg3);
_arg1.graphics.lineTo((_arg2 + _arg4), (_arg3 + _arg5));
_arg1.graphics.lineTo(_arg2, (_arg3 + _arg5));
_arg1.graphics.lineTo(_arg2, _arg3);
}
public function set content(_arg1:MovieClip):void{
if (_arg1){
this._content = _arg1;
if (this._twn){
this._twn.obj = _arg1;
};
};
}
private function _noEase(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):Number{
return ((((_arg3 * _arg1) / _arg4) + _arg2));
}
public function get content():MovieClip{
return (this._content);
}
public function set direction(_arg1:Number):void{
this._direction = (_arg1) ? 1 : 0;
}
public function get direction():Number{
return (this._direction);
}
}
}//package fl.transitions
Section 54
//TransitionManager (fl.transitions.TransitionManager)
package fl.transitions {
import flash.display.*;
import flash.events.*;
import flash.geom.*;
public class TransitionManager extends EventDispatcher {
public var _innerBounds:Rectangle;
private var _visualPropList:Object;
private var _triggerEvent:String;
public var className:String;// = "TransitionManager"
public var type:Object;
private var _contentAppearance:Object;
private var _content:MovieClip;
public var _width:Number;// = NAN
public var _height:Number;// = NAN
public var _outerBounds:Rectangle;
private var _transitions:Object;
private static var IDCount:int = 0;
public function TransitionManager(_arg1:MovieClip){
type = TransitionManager;
className = "TransitionManager";
_width = NaN;
_height = NaN;
_visualPropList = {x:null, y:null, scaleX:null, scaleY:null, alpha:null, rotation:null};
super();
this.content = _arg1;
this._transitions = {};
}
public function get content():MovieClip{
return (this._content);
}
public function removeAllTransitions():void{
var _local1:Transition;
for each (_local1 in this._transitions) {
_local1.cleanUp();
this.removeTransition(_local1);
};
}
function transitionInDone(_arg1:Object):void{
var _local2:Boolean;
this.removeTransition(_arg1.target);
if (this.numInTransitions == 0){
_local2 = this._content.visible;
if ((((this._triggerEvent == "hide")) || ((this._triggerEvent == "hideChild")))){
this._content.visible = false;
};
if (_local2){
this.dispatchEvent(new Event("allTransitionsInDone"));
};
};
}
public function get numOutTransitions():Number{
var _local1:Number;
var _local2:Object;
var _local3:Transition;
_local1 = 0;
_local2 = this._transitions;
for each (_local3 in _local2) {
if (_local3.direction){
_local1++;
};
};
return (_local1);
}
public function get contentAppearance():Object{
return (this._contentAppearance);
}
public function saveContentAppearance():void{
var _local1:MovieClip;
var _local2:Object;
var _local3:String;
_local1 = this._content;
if (!this._contentAppearance){
_local2 = (this._contentAppearance = {});
for (_local3 in this._visualPropList) {
_local2[_local3] = _local1[_local3];
};
_local2.colorTransform = _local1.transform.colorTransform;
};
this._innerBounds = _local1.getBounds(_local1);
this._outerBounds = _local1.getBounds(_local1.parent);
this._width = _local1.width;
this._height = _local1.height;
}
public function addTransition(_arg1:Transition):Transition{
_arg1.ID = ++TransitionManager.IDCount;
this._transitions[_arg1.ID] = _arg1;
return (_arg1);
}
public function startTransition(_arg1:Object):Transition{
var _local2:Class;
var _local3:Transition;
this.removeTransition(this.findTransition(_arg1));
_local2 = _arg1.type;
_local3 = new _local2(this._content, _arg1, this);
this.addTransition(_local3);
_local3.start();
return (_local3);
}
function transitionOutDone(_arg1:Object):void{
var _local2:Boolean;
this.removeTransition(_arg1.target);
if (this.numOutTransitions == 0){
this.restoreContentAppearance();
_local2 = this._content.visible;
if (((_local2) && ((((_triggerEvent == "hide")) || ((_triggerEvent == "hideChild")))))){
this._content.visible = false;
};
if (_local2){
this.dispatchEvent(new Event("allTransitionsOutDone"));
};
};
}
public function restoreContentAppearance():void{
var _local1:MovieClip;
var _local2:Object;
var _local3:String;
_local1 = this._content;
_local2 = this._contentAppearance;
for (_local3 in this._visualPropList) {
_local1[_local3] = _local2[_local3];
};
_local1.transform.colorTransform = _local2.colorTransform;
}
public function get numTransitions():Number{
var _local1:Number;
var _local2:Transition;
_local1 = 0;
for each (_local2 in this._transitions) {
_local1++;
};
return (_local1);
}
public function findTransition(_arg1:Object):Transition{
var _local2:Transition;
for each (_local2 in this._transitions) {
if (_local2.type == _arg1.type){
return (_local2);
};
};
return (null);
}
public function set content(_arg1:MovieClip):void{
this._content = _arg1;
this.saveContentAppearance();
}
public function get numInTransitions():Number{
var _local1:Number;
var _local2:Object;
var _local3:Transition;
_local1 = 0;
_local2 = this._transitions;
for each (_local3 in _local2) {
if (!_local3.direction){
_local1++;
};
};
return (_local1);
}
public function removeTransition(_arg1:Transition):Boolean{
if (((((!(_arg1)) || (!(this._transitions)))) || (!(this._transitions[_arg1.ID])))){
return (false);
};
_arg1.cleanUp();
return (delete this._transitions[_arg1.ID]);
}
public function get transitionsList():Object{
return (this._transitions);
}
public static function start(_arg1:MovieClip, _arg2:Object):Transition{
if (!_arg1.__transitionManager){
_arg1.__transitionManager = new TransitionManager(_arg1);
};
if (_arg2.direction == 1){
_arg1.__transitionManager._triggerEvent = "hide";
} else {
_arg1.__transitionManager._triggerEvent = "reveal";
};
return (_arg1.__transitionManager.startTransition(_arg2));
}
}
}//package fl.transitions
Section 55
//Tween (fl.transitions.Tween)
package fl.transitions {
import flash.display.*;
import flash.events.*;
import flash.utils.*;
public class Tween extends EventDispatcher {
private var _position:Number;// = NAN
public var prevTime:Number;// = NAN
public var prevPos:Number;// = NAN
public var isPlaying:Boolean;// = false
public var begin:Number;// = NAN
private var _fps:Number;// = NAN
private var _time:Number;// = NAN
public var change:Number;// = NAN
private var _finish:Number;// = NAN
public var looping:Boolean;// = false
private var _intervalID:uint;// = 0
public var func:Function;
private var _timer:Timer;// = null
private var _startTime:Number;// = NAN
public var prop:String;// = ""
private var _duration:Number;// = NAN
public var obj:Object;// = null
public var useSeconds:Boolean;// = false
protected static var _mc:MovieClip = new MovieClip();
public function Tween(_arg1:Object, _arg2:String, _arg3:Function, _arg4:Number, _arg5:Number, _arg6:Number, _arg7:Boolean=false){
isPlaying = false;
obj = null;
prop = "";
func = function (_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):Number{
return ((((_arg3 * _arg1) / _arg4) + _arg2));
};
begin = NaN;
change = NaN;
useSeconds = false;
prevTime = NaN;
prevPos = NaN;
looping = false;
_duration = NaN;
_time = NaN;
_fps = NaN;
_position = NaN;
_startTime = NaN;
_intervalID = 0;
_finish = NaN;
_timer = null;
super();
if (!arguments.length){
return;
};
this.obj = _arg1;
this.prop = _arg2;
this.begin = _arg4;
this.position = _arg4;
this.duration = _arg6;
this.useSeconds = _arg7;
if ((_arg3 is Function)){
this.func = _arg3;
};
this.finish = _arg5;
this._timer = new Timer(100);
this.start();
}
public function continueTo(_arg1:Number, _arg2:Number):void{
this.begin = this.position;
this.finish = _arg1;
if (!isNaN(_arg2)){
this.duration = _arg2;
};
this.start();
}
public function stop():void{
this.stopEnterFrame();
this.dispatchEvent(new TweenEvent(TweenEvent.MOTION_STOP, this._time, this._position));
}
private function fixTime():void{
if (this.useSeconds){
this._startTime = (getTimer() - (this._time * 1000));
};
}
public function set FPS(_arg1:Number):void{
var _local2:Boolean;
_local2 = this.isPlaying;
this.stopEnterFrame();
this._fps = _arg1;
if (_local2){
this.startEnterFrame();
};
}
public function get finish():Number{
return ((this.begin + this.change));
}
public function get duration():Number{
return (this._duration);
}
protected function startEnterFrame():void{
var _local1:Number;
if (isNaN(this._fps)){
_mc.addEventListener(Event.ENTER_FRAME, this.onEnterFrame, false, 0, true);
} else {
_local1 = (1000 / this._fps);
this._timer.delay = _local1;
this._timer.addEventListener(TimerEvent.TIMER, this.timerHandler, false, 0, true);
this._timer.start();
};
this.isPlaying = true;
}
public function set time(_arg1:Number):void{
this.prevTime = this._time;
if (_arg1 > this.duration){
if (this.looping){
this.rewind((_arg1 - this._duration));
this.update();
this.dispatchEvent(new TweenEvent(TweenEvent.MOTION_LOOP, this._time, this._position));
} else {
if (this.useSeconds){
this._time = this._duration;
this.update();
};
this.stop();
this.dispatchEvent(new TweenEvent(TweenEvent.MOTION_FINISH, this._time, this._position));
};
} else {
if (_arg1 < 0){
this.rewind();
this.update();
} else {
this._time = _arg1;
this.update();
};
};
}
protected function stopEnterFrame():void{
if (isNaN(this._fps)){
_mc.removeEventListener(Event.ENTER_FRAME, this.onEnterFrame);
} else {
this._timer.stop();
};
this.isPlaying = false;
}
public function getPosition(_arg1:Number=NaN):Number{
if (isNaN(_arg1)){
_arg1 = this._time;
};
return (this.func(_arg1, this.begin, this.change, this._duration));
}
public function set finish(_arg1:Number):void{
this.change = (_arg1 - this.begin);
}
public function set duration(_arg1:Number):void{
this._duration = ((_arg1)<=0) ? Infinity : _arg1;
}
public function setPosition(_arg1:Number):void{
this.prevPos = this._position;
if (this.prop.length){
this.obj[this.prop] = (this._position = _arg1);
};
this.dispatchEvent(new TweenEvent(TweenEvent.MOTION_CHANGE, this._time, this._position));
}
public function resume():void{
this.fixTime();
this.startEnterFrame();
this.dispatchEvent(new TweenEvent(TweenEvent.MOTION_RESUME, this._time, this._position));
}
public function fforward():void{
this.time = this._duration;
this.fixTime();
}
protected function onEnterFrame(_arg1:Event):void{
this.nextFrame();
}
public function get position():Number{
return (this.getPosition(this._time));
}
public function yoyo():void{
this.continueTo(this.begin, this.time);
}
public function nextFrame():void{
if (this.useSeconds){
this.time = ((getTimer() - this._startTime) / 1000);
} else {
this.time = (this._time + 1);
};
}
protected function timerHandler(_arg1:TimerEvent):void{
this.nextFrame();
_arg1.updateAfterEvent();
}
public function get FPS():Number{
return (this._fps);
}
public function rewind(_arg1:Number=0):void{
this._time = _arg1;
this.fixTime();
this.update();
}
public function set position(_arg1:Number):void{
this.setPosition(_arg1);
}
public function get time():Number{
return (this._time);
}
private function update():void{
this.setPosition(this.getPosition(this._time));
}
public function start():void{
this.rewind();
this.startEnterFrame();
this.dispatchEvent(new TweenEvent(TweenEvent.MOTION_START, this._time, this._position));
}
public function prevFrame():void{
if (!this.useSeconds){
this.time = (this._time - 1);
};
}
}
}//package fl.transitions
Section 56
//TweenEvent (fl.transitions.TweenEvent)
package fl.transitions {
import flash.events.*;
public class TweenEvent extends Event {
public var time:Number;// = NAN
public var position:Number;// = NAN
public static const MOTION_START:String = "motionStart";
public static const MOTION_STOP:String = "motionStop";
public static const MOTION_LOOP:String = "motionLoop";
public static const MOTION_CHANGE:String = "motionChange";
public static const MOTION_FINISH:String = "motionFinish";
public static const MOTION_RESUME:String = "motionResume";
public function TweenEvent(_arg1:String, _arg2:Number, _arg3:Number, _arg4:Boolean=false, _arg5:Boolean=false){
time = NaN;
position = NaN;
super(_arg1, _arg4, _arg5);
this.time = _arg2;
this.position = _arg3;
}
override public function clone():Event{
return (new TweenEvent(this.type, this.time, this.position, this.bubbles, this.cancelable));
}
}
}//package fl.transitions
Section 57
//bufferIcon_10 (player_fla.bufferIcon_10)
package player_fla {
import flash.display.*;
import flash.text.*;
public dynamic class bufferIcon_10 extends MovieClip {
public var txt:TextField;
}
}//package player_fla
Section 58
//button_16 (player_fla.button_16)
package player_fla {
import flash.display.*;
import flash.text.*;
public dynamic class button_16 extends MovieClip {
public var description:TextField;
public var shade:MovieClip;
public var image:MovieClip;
public var title:TextField;
public var duration:TextField;
public var back:MovieClip;
}
}//package player_fla
Section 59
//controlbar_24 (player_fla.controlbar_24)
package player_fla {
import flash.display.*;
import flash.text.*;
import flash.accessibility.*;
public dynamic class controlbar_24 extends MovieClip {
public var unmuteButton:MovieClip;
public var nextButton:MovieClip;
public var timeSlider:MovieClip;
public var normalscreenButton:MovieClip;
public var shade:MovieClip;
public var prevButton:MovieClip;
public var totalText:TextField;
public var volumeSlider:MovieClip;
public var muteButton:MovieClip;
public var elapsedText:TextField;
public var linkButton:MovieClip;
public var fullscreenButton:MovieClip;
public var pauseButton:MovieClip;
public var stopButton:MovieClip;
public var playButton:MovieClip;
public var back:MovieClip;
public function controlbar_24(){
addFrameScript(0, frame1);
}
function frame1(){
unmuteButton.tabIndex = 10;
muteButton.tabIndex = 9;
linkButton.tabIndex = 6;
fullscreenButton.tabIndex = 7;
nextButton.tabIndex = 5;
pauseButton.tabIndex = 2;
playButton.tabIndex = 1;
normalscreenButton.tabIndex = 8;
stopButton.tabIndex = 3;
prevButton.tabIndex = 4;
back.accessibilityProperties = new AccessibilityProperties();
back.accessibilityProperties.silent = true;
shade.accessibilityProperties = new AccessibilityProperties();
shade.accessibilityProperties.silent = true;
volumeSlider.accessibilityProperties = new AccessibilityProperties();
volumeSlider.accessibilityProperties.silent = true;
unmuteButton.accessibilityProperties = new AccessibilityProperties();
unmuteButton.accessibilityProperties.name = "unmuteButton";
unmuteButton.accessibilityProperties.shortcut = "m";
unmuteButton.accessibilityProperties.forceSimple = true;
muteButton.accessibilityProperties = new AccessibilityProperties();
muteButton.accessibilityProperties.name = "muteButton";
muteButton.accessibilityProperties.shortcut = "m";
muteButton.accessibilityProperties.forceSimple = true;
linkButton.accessibilityProperties = new AccessibilityProperties();
linkButton.accessibilityProperties.name = "linkButton";
linkButton.accessibilityProperties.shortcut = "l";
linkButton.accessibilityProperties.forceSimple = true;
fullscreenButton.accessibilityProperties = new AccessibilityProperties();
fullscreenButton.accessibilityProperties.name = "FullscreenButton";
fullscreenButton.accessibilityProperties.shortcut = "f";
fullscreenButton.accessibilityProperties.forceSimple = true;
timeSlider.accessibilityProperties = new AccessibilityProperties();
timeSlider.accessibilityProperties.silent = true;
nextButton.accessibilityProperties = new AccessibilityProperties();
nextButton.accessibilityProperties.name = "nextButton";
nextButton.accessibilityProperties.shortcut = "right-arrow";
nextButton.accessibilityProperties.forceSimple = true;
pauseButton.accessibilityProperties = new AccessibilityProperties();
pauseButton.accessibilityProperties.name = "pauseButton";
pauseButton.accessibilityProperties.shortcut = "p";
pauseButton.accessibilityProperties.forceSimple = true;
playButton.accessibilityProperties = new AccessibilityProperties();
playButton.accessibilityProperties.name = "playButton";
playButton.accessibilityProperties.shortcut = "p";
playButton.accessibilityProperties.forceSimple = true;
normalscreenButton.accessibilityProperties = new AccessibilityProperties();
normalscreenButton.accessibilityProperties.name = "normalscreenButton";
normalscreenButton.accessibilityProperties.shortcut = "f";
normalscreenButton.accessibilityProperties.forceSimple = true;
stopButton.accessibilityProperties = new AccessibilityProperties();
stopButton.accessibilityProperties.name = "stopButton";
stopButton.accessibilityProperties.shortcut = "s";
stopButton.accessibilityProperties.forceSimple = true;
prevButton.accessibilityProperties = new AccessibilityProperties();
prevButton.accessibilityProperties.name = "prevButton";
prevButton.accessibilityProperties.shortcut = "left-arrow";
prevButton.accessibilityProperties.forceSimple = true;
}
}
}//package player_fla
Section 60
//display_2 (player_fla.display_2)
package player_fla {
import flash.display.*;
import flash.accessibility.*;
public dynamic class display_2 extends MovieClip {
public var media:MovieClip;
public var nextIcon:MovieClip;
public var muteIcon:MovieClip;
public var masker:MovieClip;
public var errorIcon:MovieClip;
public var linkIcon:MovieClip;
public var logo:MovieClip;
public var playIcon:MovieClip;
public var fullscreenIcon:MovieClip;
public var bufferIcon:MovieClip;
public var back:MovieClip;
public function display_2(){
addFrameScript(0, frame1);
}
function frame1(){
back.accessibilityProperties = new AccessibilityProperties();
back.accessibilityProperties.silent = true;
masker.accessibilityProperties = new AccessibilityProperties();
masker.accessibilityProperties.silent = true;
back.accessibilityProperties = new AccessibilityProperties();
back.accessibilityProperties.silent = true;
}
}
}//package player_fla
Section 61
//errorIcon_6 (player_fla.errorIcon_6)
package player_fla {
import flash.display.*;
import flash.text.*;
public dynamic class errorIcon_6 extends MovieClip {
public var txt:TextField;
}
}//package player_fla
Section 62
//fullscreenButton_38 (player_fla.fullscreenButton_38)
package player_fla {
import flash.display.*;
public dynamic class fullscreenButton_38 extends MovieClip {
public var icon:MovieClip;
}
}//package player_fla
Section 63
//linkButton_35 (player_fla.linkButton_35)
package player_fla {
import flash.display.*;
public dynamic class linkButton_35 extends MovieClip {
public var icon:MovieClip;
public var back:MovieClip;
}
}//package player_fla
Section 64
//list_15 (player_fla.list_15)
package player_fla {
import flash.display.*;
public dynamic class list_15 extends MovieClip {
public var button:MovieClip;
}
}//package player_fla
Section 65
//muteButton_33 (player_fla.muteButton_33)
package player_fla {
import flash.display.*;
public dynamic class muteButton_33 extends MovieClip {
public var icon:MovieClip;
}
}//package player_fla
Section 66
//nextButton_45 (player_fla.nextButton_45)
package player_fla {
import flash.display.*;
public dynamic class nextButton_45 extends MovieClip {
public var icon:MovieClip;
}
}//package player_fla
Section 67
//normalscreenButton_51 (player_fla.normalscreenButton_51)
package player_fla {
import flash.display.*;
public dynamic class normalscreenButton_51 extends MovieClip {
public var icon:MovieClip;
}
}//package player_fla
Section 68
//pauseButton_47 (player_fla.pauseButton_47)
package player_fla {
import flash.display.*;
public dynamic class pauseButton_47 extends MovieClip {
public var icon:MovieClip;
}
}//package player_fla
Section 69
//playButton_49 (player_fla.playButton_49)
package player_fla {
import flash.display.*;
public dynamic class playButton_49 extends MovieClip {
public var icon:MovieClip;
}
}//package player_fla
Section 70
//player_1 (player_fla.player_1)
package player_fla {
import flash.display.*;
import flash.accessibility.*;
public dynamic class player_1 extends MovieClip {
public var controlbar:MovieClip;
public var display:MovieClip;
public var playlist:MovieClip;
public function player_1(){
addFrameScript(0, frame1);
}
function frame1(){
display.accessibilityProperties = new AccessibilityProperties();
display.accessibilityProperties.silent = true;
playlist.accessibilityProperties = new AccessibilityProperties();
playlist.accessibilityProperties.silent = true;
}
}
}//package player_fla
Section 71
//playlist_13 (player_fla.playlist_13)
package player_fla {
import flash.display.*;
public dynamic class playlist_13 extends MovieClip {
public var masker:MovieClip;
public var list:MovieClip;
public var slider:MovieClip;
public var back:MovieClip;
}
}//package player_fla
Section 72
//prevButton_55 (player_fla.prevButton_55)
package player_fla {
import flash.display.*;
public dynamic class prevButton_55 extends MovieClip {
public var icon:MovieClip;
}
}//package player_fla
Section 73
//slider_20 (player_fla.slider_20)
package player_fla {
import flash.display.*;
public dynamic class slider_20 extends MovieClip {
public var icon:MovieClip;
public var rail:MovieClip;
public var back:MovieClip;
}
}//package player_fla
Section 74
//stopButton_53 (player_fla.stopButton_53)
package player_fla {
import flash.display.*;
public dynamic class stopButton_53 extends MovieClip {
public var icon:MovieClip;
}
}//package player_fla
Section 75
//timeSlider_40 (player_fla.timeSlider_40)
package player_fla {
import flash.display.*;
import flash.accessibility.*;
public dynamic class timeSlider_40 extends MovieClip {
public var icon:MovieClip;
public var rail:MovieClip;
public var done:MovieClip;
public var mark:MovieClip;
public function timeSlider_40(){
addFrameScript(0, frame1);
}
function frame1(){
mark.accessibilityProperties = new AccessibilityProperties();
mark.accessibilityProperties.silent = true;
done.accessibilityProperties = new AccessibilityProperties();
done.accessibilityProperties.silent = true;
icon.accessibilityProperties = new AccessibilityProperties();
icon.accessibilityProperties.silent = true;
}
}
}//package player_fla
Section 76
//unmuteButton_31 (player_fla.unmuteButton_31)
package player_fla {
import flash.display.*;
public dynamic class unmuteButton_31 extends MovieClip {
public var icon:MovieClip;
}
}//package player_fla
Section 77
//volumeSlider_27 (player_fla.volumeSlider_27)
package player_fla {
import flash.display.*;
public dynamic class volumeSlider_27 extends MovieClip {
public var icon:MovieClip;
public var rail:MovieClip;
public var mark:MovieClip;
}
}//package player_fla
Section 78
//Watermark (Watermark)
package {
import com.jeroenwijering.plugins.*;
public dynamic class Watermark extends Watermark {
}
}//package