forked from: flash on 2010-8-19

by Aksor.Al
♥0 | Line 4479 | Modified 2011-01-04 10:41:55 | MIT License
play

ActionScript3 source code

/**
 * Copyright Aksor.Al ( http://wonderfl.net/user/Aksor.Al )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/s2Je
 */

// forked from chependuk's flash on 2010-8-19
package {

    import flash.display.*;



    public class SkinDefaults {



        public static function get values():Object{

            return ({

                bottom:0,

                left:"50%",

                height:26,

                width:"100%",

                zIndex:2,

                backgroundColor:"rgba(0, 0, 0, 0.7)",

                backgroundGradient:[0.5, 0, 0.3],

                border:"0px",

                borderRadius:"0px",

                timeColor:"#ffffff",

                durationColor:"#a3a3a3",

                sliderColor:"#000000",

                sliderGradient:"none",

                volumeColor:"#ffffff",

                volumeSliderColor:"#ffffff",

                volumeSliderGradient:"none",

                buttonColor:"#ffffff",

                buttonOverColor:"#ffffff",

                progressColor:"#ffffff",

                progressGradient:"none",

                bufferColor:"#a3a3a3",

                bufferGradient:"none",

                tooltipColor:"#000000",

                tooltipTextColor:"#ffffff",

                timeBgColor:"rgb(0, 0, 0, 0)",

                timeBorder:"0px solid rgba(0, 0, 0, 0.3)",

                timeBorderRadius:20,

                scrubberHeightRatio:0.6,

                scrubberBarHeightRatio:0.3,

                volumeSliderHeightRatio:0.6,

                volumeBarHeightRatio:0.3,

                timeBgHeightRatio:0.8,

                timeSeparator:" ",

                timeFontSize:12,

                volumeBorder:"1px solid rgba(128, 128, 128, 0.7)",

                sliderBorder:"1px solid rgba(128, 128, 128, 0.7)",

                autoHide:{

                    enabled:true,

                    fullscreenOnly:false,

                    delay:2000,

                    duration:1000,

                    style:"fade"

                }

            });

        }

        public static function getSpaceAfterWidget(_arg1:DisplayObject, _arg2:Boolean):Number{

            var _local3 = 2;

            if (_arg2){

                _local3 = 6;

            } else {

                if (_arg1.name == "volume"){

                    _local3 = 8;

                } else {

                    if (_arg1.name == "time"){

                        _local3 = 6;

                    };

                };

            };

            return (_local3);

        }

        public static function getSpaceBeforeFirstWidget():Number{

            return (12);

        }

        public static function getScrubberRightEdgeWidth(_arg1:DisplayObject):Number{

            return (0);

        }

        public static function getVolumeSliderWidth():Number{

            return (57);

        }

        public static function get margins():Array{

            return ([2, 6, 2, 6]);

        }



    }

}//package 

package buttons_modern_fla {

    import flash.display.*;



    public dynamic class PrevOver_23 extends MovieClip {



        public function PrevOver_23(){

            addFrameScript(0, frame1, 9, frame10, 19, frame20);

        }

        function frame20(){

            stop();

        }

        function frame10(){

            stop();

        }

        function frame1(){

            stop();

        }



    }

}//package buttons_modern_fla 

package buttons_modern_fla {

    import flash.display.*;



    public dynamic class UnMuteOver_35 extends MovieClip {



        public function UnMuteOver_35(){

            addFrameScript(0, frame1, 9, frame10, 19, frame20);

        }

        function frame20(){

            stop();

        }

        function frame10(){

            stop();

        }

        function frame1(){

            stop();

        }



    }

}//package buttons_modern_fla 

package buttons_modern_fla {

    import flash.display.*;



    public dynamic class SlowMotionFwdOver_54 extends MovieClip {



        public function SlowMotionFwdOver_54(){

            addFrameScript(0, frame1, 9, frame10, 18, frame19);

        }

        function frame10(){

            stop();

        }

        function frame1(){

            stop();

        }

        function frame19(){

            stop();

        }



    }

}//package buttons_modern_fla 

package buttons_modern_fla {

    import flash.display.*;



    public dynamic class SlowMotionBwdOver_57 extends MovieClip {



        public function SlowMotionBwdOver_57(){

            addFrameScript(0, frame1, 9, frame10, 18, frame19);

        }

        function frame10(){

            stop();

        }

        function frame1(){

            stop();

        }

        function frame19(){

            stop();

        }



    }

}//package buttons_modern_fla 

package buttons_modern_fla {

    import flash.display.*;



    public dynamic class DraggerOver_44 extends MovieClip {



        public function DraggerOver_44(){

            addFrameScript(0, frame1, 9, frame10, 19, frame20);

        }

        function frame20(){

            stop();

        }

        function frame10(){

            stop();

        }

        function frame1(){

            stop();

        }



    }

}//package buttons_modern_fla 

package buttons_modern_fla {

    import flash.display.*;



    public dynamic class SlowMotionFFwdOver_32 extends MovieClip {



        public function SlowMotionFFwdOver_32(){

            addFrameScript(0, frame1, 9, frame10, 19, frame20);

        }

        function frame20(){

            stop();

        }

        function frame10(){

            stop();

        }

        function frame1(){

            stop();

        }



    }

}//package buttons_modern_fla 

package buttons_modern_fla {

    import flash.display.*;



    public dynamic class StopOver_41 extends MovieClip {



        public function StopOver_41(){

            addFrameScript(0, frame1, 9, frame10, 19, frame20);

        }

        function frame20(){

            stop();

        }

        function frame10(){

            stop();

        }

        function frame1(){

            stop();

        }



    }

}//package buttons_modern_fla 

package buttons_modern_fla {

    import flash.display.*;



    public dynamic class MuteOver_38 extends MovieClip {



        public function MuteOver_38(){

            addFrameScript(0, frame1, 9, frame10, 19, frame20);

        }

        function frame20(){

            stop();

        }

        function frame10(){

            stop();

        }

        function frame1(){

            stop();

        }



    }

}//package buttons_modern_fla 

package buttons_modern_fla {

    import flash.display.*;



    public dynamic class PlayOver_51 extends MovieClip {



        public function PlayOver_51(){

            addFrameScript(0, frame1, 9, frame10, 18, frame19);

        }

        function frame10(){

            stop();

        }

        function frame1(){

            stop();

        }

        function frame19(){

            stop();

        }



    }

}//package buttons_modern_fla 

package buttons_modern_fla {

    import flash.display.*;



    public dynamic class FullScreenOnOver_47 extends MovieClip {



        public function FullScreenOnOver_47(){

            addFrameScript(0, frame1, 9, frame10, 19, frame20);

        }

        function frame20(){

            stop();

        }

        function frame10(){

            stop();

        }

        function frame1(){

            stop();

        }



    }

}//package buttons_modern_fla 

package buttons_modern_fla {

    import flash.display.*;



    public dynamic class PauseOver_20 extends MovieClip {



        public function PauseOver_20(){

            addFrameScript(0, frame1, 9, frame10, 19, frame20);

        }

        function frame20(){

            stop();

        }

        function frame10(){

            stop();

        }

        function frame1(){

            stop();

        }



    }

}//package buttons_modern_fla 

package buttons_modern_fla {

    import flash.display.*;



    public dynamic class SlowMotionFBwdOver_26 extends MovieClip {



        public function SlowMotionFBwdOver_26(){

            addFrameScript(0, frame1, 9, frame10, 19, frame20);

        }

        function frame20(){

            stop();

        }

        function frame10(){

            stop();

        }

        function frame1(){

            stop();

        }



    }

}//package buttons_modern_fla 

package buttons_modern_fla {

    import flash.display.*;



    public dynamic class NextOver_29 extends MovieClip {



        public function NextOver_29(){

            addFrameScript(0, frame1, 9, frame10, 19, frame20);

        }

        function frame20(){

            stop();

        }

        function frame10(){

            stop();

        }

        function frame1(){

            stop();

        }



    }

}//package buttons_modern_fla 

package org.flowplayer.ui {



    public class AutoHideConfig {



        private var _enabled:Boolean = true;

        private var _fullscreenOnly:Boolean = true;

        private var _hideDelay:Number = 4000;

        private var _hideDuration:Number = 800;

        private var _hideStyle:String = "move";

        private var _mouseOutDelay:Number = 500;



        public function set state(_arg1:String):void{

            this._enabled = (((_arg1) && (!((_arg1 == "never")))) as Boolean);

            this._fullscreenOnly = (_arg1 == "fullscreen");

        }

        public function get state():String{

            if (!this._enabled){

                return ("never");

            };

            return ((this._fullscreenOnly) ? "fullscreen" : "always");

        }

        public function get hideDelay():Number{

            return (this._hideDelay);

        }

        public function set hideDelay(_arg1:Number):void{

            this._hideDelay = _arg1;

        }

        public function set delay(_arg1:Number):void{

            this._hideDelay = _arg1;

        }

        public function set hideDuration(_arg1:Number):void{

            this._hideDuration = _arg1;

        }

        public function set duration(_arg1:Number):void{

            this._hideDuration = _arg1;

        }

        public function get hideStyle():String{

            return (this._hideStyle);

        }

        public function set hideStyle(_arg1:String):void{

            this._hideStyle = _arg1;

        }

        public function set mouseOutDelay(_arg1:Number):void{

            this._mouseOutDelay = _arg1;

        }

        public function get mouseOutDelay():Number{

            return (this._mouseOutDelay);

        }

        public function setStyle(_arg1:String):void{

            this._hideStyle = _arg1;

        }

        public function get hideDuration():Number{

            return (this._hideDuration);

        }

        public function get enabled():Boolean{

            return (this._enabled);

        }

        public function set enabled(_arg1:Boolean):void{

            this._enabled = _arg1;

        }

        public function get fullscreenOnly():Boolean{

            return (this._fullscreenOnly);

        }

        public function set fullscreenOnly(_arg1:Boolean):void{

            this._fullscreenOnly = _arg1;

        }



    }

}//package org.flowplayer.ui 

package org.flowplayer.ui {

    import flash.events.*;

    import org.flowplayer.view.*;

    import org.flowplayer.model.*;

    import flash.display.*;

    import flash.geom.*;

    import flash.utils.*;

    import org.flowplayer.util.*;



    public class AutoHide {



        private var log:Log;

        private var _disp:DisplayObject;

        private var _hideTimer:Timer;

        private var _mouseOutTimer:Timer;

        private var _stage:Stage;

        private var _playList:Playlist;

        private var _config:AutoHideConfig;

        private var _player:Flowplayer;

        private var _originalPos:Object;

        private var _mouseOver:Boolean = false;

        private var _hwFullScreen:Boolean;

        private var _model:DisplayPluginModel;

        private var _hideListener:Function;

        private var _showListener:Function;



        public function AutoHide(_arg1:DisplayPluginModel, _arg2:AutoHideConfig, _arg3:Flowplayer, _arg4:Stage, _arg5:DisplayObject){

            this.log = new Log(this);

            super();

            Assert.notNull(_arg2, "config cannot be null");

            Assert.notNull(_arg3, "player cannot be null");

            Assert.notNull(_arg4, "stage cannot be null");

            Assert.notNull(_arg5, "displayObject cannot be null");

            this._model = _arg1;

            this._config = _arg2;

            this._playList = _arg3.playlist;

            this._player = _arg3;

            this._stage = _arg4;

            this._disp = _arg5;

            this._originalPos = this.getDisplayProperties();

            if (this._config.state != "fullscreen"){

                this.startTimerAndInitializeListeners();

            };

            this._stage.addEventListener(FullScreenEvent.FULL_SCREEN, this.onFullScreen);

        }

        public function onHide(_arg1:Function):void{

            this._hideListener = _arg1;

        }

        public function onShow(_arg1:Function):void{

            this._showListener = _arg1;

        }

        public function stop(_arg1:Boolean=true):void{

            this.log.debug(("stop(), leaveVisible? " + _arg1));

            if (((!(this.isShowing())) && (_arg1))){

                this.show();

            };

            if (!_arg1){

                this.hide(null, true);

            };

            this.stopHideTimer();

            this.stopMouseOutTimer();

            this._stage.removeEventListener(FullScreenEvent.FULL_SCREEN, this.onFullScreen);

            this._stage.removeEventListener(MouseEvent.MOUSE_MOVE, this.onMouseMove);

            this._stage.removeEventListener(Event.RESIZE, this.onStageResize);

            this._stage.removeEventListener(Event.MOUSE_LEAVE, this.startMouseOutTimer);

            this._disp.removeEventListener(MouseEvent.ROLL_OVER, this.onMouseOver);

            this._disp.removeEventListener(MouseEvent.ROLL_OUT, this.onMouseOut);

        }

        public function start():void{

            this.show();

            this.log.debug(("start(), autoHide is " + this._config.state));

            if (this._config.state == "fullscreen"){

                this.fullscreenStart();

                return;

            };

            if (this._config.state == "always"){

                this.startTimerAndInitializeListeners();

                return;

            };

        }

        public function cancelAnimation():void{

            this.log.debug("cancelAnimation");

            this._player.animationEngine.cancel(this._disp);

        }

        public function showAndUpdate():void{

            this.cancelAnimation();

            this.show(function ():void{

                _originalPos = getDisplayProperties();

            });

        }

        private function getDisplayProperties():Object{

            if (((this._model) && ((this._model.getDisplayObject() == this._disp)))){

                return ((DisplayProperties(this._player.pluginRegistry.getPlugin(this._model.name)).clone() as DisplayProperties));

            };

            return ({

                top:this._disp.y,

                left:this._disp.x,

                width:this._disp.width,

                height:this._disp.height,

                alpha:this._disp.alpha

            });

        }

        private function clone(_arg1:Object):Object{

            var _local2:Object;

            var _local3:String;

            if ((_arg1 is DisplayProperties)){

                return ((_arg1.clone() as DisplayProperties));

            };

            _local2 = {};

            for (_local3 in _arg1) {

                _local2[_local3] = _arg1[_local3];

            };

            return (_local2);

        }

        private function get hiddenPos():Object{

            var _local1:Object = this.clone(this._originalPos);

            if (this.useFadeOut){

                this._hwFullScreen = true;

                _local1.alpha = 0;

            } else {

                this._hwFullScreen = false;

                _local1.top = this.getHiddenPosition();

            };

            return (_local1);

        }

        private function onFullScreen(_arg1:FullScreenEvent):void{

            if (_arg1.fullScreen){

                this.startTimerAndInitializeListeners();

                this.showAndUpdate();

            } else {

                if (this._config.state != "always"){

                    this.stop();

                };

                this._disp.alpha = 0;

                this.cancelAnimation();

                this.showAndUpdate();

            };

        }

        private function fullscreenStart():void{

            if (this.isInFullscreen()){

                this.startTimerAndInitializeListeners();

            } else {

                this.stopHideTimer();

                this.stopMouseOutTimer();

                this._stage.addEventListener(FullScreenEvent.FULL_SCREEN, this.onFullScreen);

            };

        }

        private function startTimerAndInitializeListeners():void{

            this.startHideTimer();

            this._stage.addEventListener(Event.MOUSE_LEAVE, this.startMouseOutTimer);

            this._stage.addEventListener(FullScreenEvent.FULL_SCREEN, this.onFullScreen);

            this._stage.addEventListener(MouseEvent.MOUSE_MOVE, this.onMouseMove);

            this._stage.addEventListener(Event.RESIZE, this.onStageResize);

            this._disp.addEventListener(MouseEvent.ROLL_OVER, this.onMouseOver);

            this._disp.addEventListener(MouseEvent.ROLL_OUT, this.onMouseOut);

        }

        private function onMouseOver(_arg1:MouseEvent):void{

            this._mouseOver = true;

        }

        private function onMouseOut(_arg1:MouseEvent):void{

            this._mouseOver = false;

        }

        private function mouseLeave(_arg1:Event=null):void{

            this._stage.addEventListener(MouseEvent.MOUSE_MOVE, this.onMouseMove);

            this.stopHideTimer();

            this.stopMouseOutTimer();

            this.cancelAnimation();

            this.hide();

        }

        private function startMouseOutTimer(_arg1:Event=null):void{

            this.log.debug(("startMouseOutTimer(), delay is " + this._config.mouseOutDelay));

            if (this._config.mouseOutDelay == 0){

                this.mouseLeave();

                return;

            };

            if (!this._mouseOutTimer){

                this._mouseOutTimer = new Timer(this._config.mouseOutDelay);

            } else {

                if (this._config.mouseOutDelay != this._mouseOutTimer.delay){

                    this.log.debug(("startMouseOutTimer(), using new delay " + this._config.mouseOutDelay));

                    this._mouseOutTimer.stop();

                    this._mouseOutTimer = new Timer(this._config.mouseOutDelay);

                };

            };

            this._mouseOutTimer.addEventListener(TimerEvent.TIMER, this.mouseLeave);

            this._mouseOutTimer.start();

        }

        private function stopMouseOutTimer():void{

            if (!this._mouseOutTimer){

                return;

            };

            this._mouseOutTimer.stop();

            this._mouseOutTimer = null;

        }

        private function onMouseMove(_arg1:MouseEvent):void{

            this._stage.removeEventListener(MouseEvent.MOUSE_MOVE, this.onMouseMove);

            this.cancelAnimation();

            this.show();

            if (((this.isShowing()) && (this._hideTimer))){

                this._hideTimer.stop();

                this._hideTimer.start();

                return;

            };

        }

        private function isShowing():Boolean{

            return ((((this._disp.alpha > 0)) && ((this._disp.y < this.getHiddenPosition()))));

        }

        private function onStageResize(_arg1:Event):void{

            if (!this._hideTimer){

                return;

            };

            this._hideTimer.stop();

            this._hideTimer.start();

        }

        private function startHideTimer():void{

            if (this._config.hideDelay == 0){

                this.hide();

                return;

            };

            if (!this._hideTimer){

                this._hideTimer = new Timer(this._config.hideDelay);

            } else {

                if (this._config.hideDelay != this._hideTimer.delay){

                    this._hideTimer.stop();

                    this._hideTimer = new Timer(this._config.hideDelay);

                };

            };

            this._hideTimer.addEventListener(TimerEvent.TIMER, this.hide);

            this._hideTimer.start();

        }

        private function stopHideTimer():void{

            if (!this._hideTimer){

                return;

            };

            this._hideTimer.stop();

            this._hideTimer = null;

        }

        private function isInFullscreen():Boolean{

            return ((this._stage.displayState == StageDisplayState.FULL_SCREEN));

        }

        public function hide(_arg1:TimerEvent=null, _arg2:Boolean=false):void{

            if (!this.isShowing()){

                if (this._hideTimer){

                    this._hideTimer.stop();

                };

                return;

            };

            this.log.warn((("HIDING ? " + (_arg2) ? "true " : "false ") + (this._mouseOver) ? "true " : "false "));

            if (((!(_arg2)) && (this._mouseOver))){

                return;

            };

            this.log.debug("dispatching onBeforeHidden");

            if (((this._model) && (!(this._model.dispatchBeforeEvent(PluginEventType.PLUGIN_EVENT, "onBeforeHidden"))))){

                this.log.debug("hide() onHidden event was prevented, not hiding");

                return;

            };

            if (((!((this._hideListener == null))) && (!(this._hideListener())))){

                this.log.debug("hideListener callback function prevented hiding");

                return;

            };

            this.log.debug("animating to hidden position");

            this._player.animationEngine.animate(this._disp, this.hiddenPos, this._config.hideDuration, this.onHidden);

            if (this._hideTimer){

                this._hideTimer.stop();

            };

        }

        private function onHidden():void{

            this.log.debug("onHidden()");

            this.dispatchEvent("onHidden");

        }

        public function show(_arg1:Function=null):void{

            var callback = _arg1;

            var currentProps:* = this.getDisplayProperties();

            if (this._hwFullScreen){

                currentProps.alpha = this._originalPos.alpha;

            } else {

                if ((this._originalPos is DisplayProperties)){

                    if (this._originalPos.position.top.hasValue()){

                        this.log.debug(("restoring to top " + this._originalPos.position.top));

                        currentProps.top = this._originalPos.position.top;

                    };

                    if (this._originalPos.position.bottom.hasValue()){

                        this.log.debug(("restoring to bottom " + this._originalPos.position.bottom));

                        currentProps.bottom = this._originalPos.position.bottom;

                    };

                } else {

                    this.log.debug(("restoring to y " + this._originalPos.y));

                    currentProps.y = this._originalPos.y;

                };

            };

            if (((this._model) && (!(this._model.dispatchBeforeEvent(PluginEventType.PLUGIN_EVENT, "onBeforeShowed"))))){

                this.log.debug("show() onShowed event was prevented, not showing");

                return;

            };

            if (((!((this._showListener == null))) && (!(this._showListener())))){

                this.log.debug("showListener returned false, will not show");

                return;

            };

            var onShowCallback:* = this.onShowed;

            if (callback != null){

                onShowCallback = function ():void{

                    onShowed();

                    callback();

                };

            };

            this._player.animationEngine.animate(this._disp, currentProps, 400, onShowCallback);

        }

        private function dispatchEvent(_arg1:String):void{

            if (!this._model){

                return;

            };

            this._model.dispatch(PluginEventType.PLUGIN_EVENT, _arg1);

        }

        private function onShowed():void{

            this.dispatchEvent("onShowed");

            this._stage.addEventListener(MouseEvent.MOUSE_MOVE, this.onMouseMove);

            if (this._config.state == "fullscreen"){

                this.fullscreenStart();

            };

            if (this._config.state == "always"){

                this.startTimerAndInitializeListeners();

            };

        }

        private function get useFadeOut():Boolean{

            if (this._config.hideStyle == "fade"){

                return (true);

            };

            return (((((this.isInFullscreen()) && (this._stage.hasOwnProperty("fullScreenSourceRect")))) && (!((this._stage.fullScreenSourceRect == null)))));

        }

        private function getHiddenPosition():Object{

            var _local1:Rectangle;

            if ((((this._stage.displayState == StageDisplayState.FULL_SCREEN)) && (this._stage.hasOwnProperty("fullScreenSourceRect")))){

                _local1 = this._stage.fullScreenSourceRect;

                if (_local1){

                    return (_local1.height);

                };

            };

            return (this._stage.stageHeight);

        }



    }

}//package org.flowplayer.ui 

package org.flowplayer.controls {

    import org.flowplayer.util.*;



    public class Style {



        private var log:Log;

        private var _bgStyle:Object;

        private var _style:Object;



        public function Style(){

            this.log = new Log(this);

            this._style = new Object();

            super();

        }

        public function addStyleProps(_arg1:Object):Object{

            var _local2:String;

            for (_local2 in this._style) {

                _arg1[_local2] = this._style[_local2];

            };

            return (_arg1);

        }

        public function set bgStyle(_arg1:Object):void{

            this.log.debug("setting bgStyle");

            this._bgStyle = _arg1;

        }

        public function get bgStyle():Object{

            this.log.debug("getting bgStyle");

            return (this._bgStyle);

        }

        public function get durationColor():Number{

            return (StyleSheetUtil.colorValue(this._style["durationColor"]));

        }

        public function get durationAlpha():Number{

            return (StyleSheetUtil.colorAlpha(this._style["durationColor"]));

        }

        public function setDurationColor(_arg1:String):void{

            this._style["durationColor"] = _arg1;

        }

        public function setTimeColor(_arg1:String):void{

            this._style["timeColor"] = _arg1;

        }

        public function get timeColor():Number{

            return (StyleSheetUtil.colorValue(this._style["timeColor"]));

        }

        public function get timeAlpha():Number{

            return (StyleSheetUtil.colorAlpha(this._style["timeColor"]));

        }

        public function get bufferColor():Number{

            return (StyleSheetUtil.colorValue(this._style["bufferColor"]));

        }

        public function get bufferAlpha():Number{

            return (StyleSheetUtil.colorAlpha(this._style["bufferColor"]));

        }

        public function setBufferColor(_arg1:String):void{

            this._style["bufferColor"] = _arg1;

        }

        public function setBufferGradient(_arg1:Object):void{

            this._style["bufferGradient"] = _arg1;

        }

        public function get bufferGradient():Array{

            return (this.decodeGradient(this._style["bufferGradient"]));

        }

        public function get buttonColor():Number{

            return (StyleSheetUtil.colorValue(this._style["buttonColor"]));

        }

        public function get buttonAlpha():Number{

            return (StyleSheetUtil.colorAlpha(this._style["buttonColor"]));

        }

        public function get buttonColorRGB():Array{

            return (StyleSheetUtil.rgbValue(this.buttonColor));

        }

        public function get buttonColorRGBA():Array{

            var _local1:Array = this.buttonColorRGB;

            _local1.push(this.buttonAlpha);

            return (_local1);

        }

        public function setButtonColor(_arg1:String):void{

            this._style["buttonColor"] = _arg1;

        }

        public function setButtonOverColor(_arg1:String):void{

            this._style["buttonOverColor"] = _arg1;

        }

        public function get buttonOverColor():Number{

            return (StyleSheetUtil.colorValue(this._style["buttonOverColor"]));

        }

        public function get buttonOverAlpha():Number{

            return (StyleSheetUtil.colorAlpha(this._style["buttonOverColor"]));

        }

        public function get buttonOverColorRGB():Array{

            return (StyleSheetUtil.rgbValue(this.buttonOverColor));

        }

        public function get buttonOverColorRGBA():Array{

            var _local1:Array = this.buttonOverColorRGB;

            _local1.push(this.buttonOverAlpha);

            return (_local1);

        }

        public function get sliderColor():Number{

            return (StyleSheetUtil.colorValue(this._style["sliderColor"]));

        }

        public function get sliderAlpha():Number{

            return (StyleSheetUtil.colorAlpha(this._style["sliderColor"]));

        }

        public function get sliderGradient():Array{

            return (this.decodeGradient(this._style["sliderGradient"]));

        }

        public function get volumeSliderColor():Number{

            return (StyleSheetUtil.colorValue(this._style["volumeSliderColor"]));

        }

        public function get volumeSliderAlpha():Number{

            return (StyleSheetUtil.colorAlpha(this._style["volumeSliderColor"]));

        }

        public function get volumeColor():Number{

            return (StyleSheetUtil.colorValue(this._style["volumeColor"], -2));

        }

        public function get volumeAlpha():Number{

            return (StyleSheetUtil.colorAlpha(this._style["volumeColor"], -2));

        }

        public function get volumeSliderGradient():Array{

            return (this.decodeGradient(this._style["volumeSliderGradient"]));

        }

        public function setSliderColor(_arg1:String):void{

            this._style["sliderColor"] = _arg1;

        }

        public function setSliderGradient(_arg1:Object):void{

            this._style["sliderGradient"] = _arg1;

        }

        public function setVolumeSliderColor(_arg1:String):void{

            this._style["volumeSliderColor"] = _arg1;

        }

        public function setVolumeColor(_arg1:String):void{

            this._style["volumeColor"] = _arg1;

        }

        public function setVolumeSliderGradient(_arg1:Object):void{

            this._style["volumeSliderGradient"] = _arg1;

        }

        public function set volumeBorder(_arg1:String):void{

            this._style["volumeBorder"] = _arg1;

        }

        public function get volumeBorderWidth():Number{

            return (StyleSheetUtil.borderWidth("volumeBorder", this._style, 0));

        }

        public function set volumeBorderWidth(_arg1:Number):void{

            this._style["volumeBorderWidth"] = _arg1;

        }

        public function get volumeBorderColor():Number{

            return (StyleSheetUtil.borderColor("volumeBorder", this._style));

        }

        public function get volumeBorderAlpha():Number{

            return (StyleSheetUtil.borderAlpha("volumeBorder", this._style));

        }

        public function setVolumeBorderColor(_arg1:String):void{

            this._style["volumeBorderColor"] = _arg1;

        }

        public function get progressColor():Number{

            return (StyleSheetUtil.colorValue(this._style["progressColor"]));

        }

        public function get progressAlpha():Number{

            return (StyleSheetUtil.colorAlpha(this._style["progressColor"]));

        }

        public function setProgressColor(_arg1:String):void{

            this._style["progressColor"] = _arg1;

        }

        public function get tooltipColor():Number{

            return (StyleSheetUtil.colorValue(this._style["tooltipColor"]));

        }

        public function get tooltipAlpha():Number{

            return (StyleSheetUtil.colorAlpha(this._style["tooltipColor"]));

        }

        public function setTooltipColor(_arg1:String):void{

            this._style["tooltipColor"] = _arg1;

        }

        public function get tooltipTextColor():Number{

            return (StyleSheetUtil.colorValue(this._style["tooltipTextColor"]));

        }

        public function get tooltipTextAlpha():Number{

            return (StyleSheetUtil.colorAlpha(this._style["tooltipTextColor"]));

        }

        public function setTooltipTextColor(_arg1:String):void{

            this._style["tooltipTextColor"] = _arg1;

        }

        public function setProgressGradient(_arg1:Object):void{

            this._style["progressGradient"] = _arg1;

        }

        public function get progressGradient():Array{

            return (this.decodeGradient(this._style["progressGradient"]));

        }

        public function set sliderBorder(_arg1:String):void{

            this._style["sliderBorder"] = _arg1;

        }

        public function get sliderBorderWidth():Number{

            return (StyleSheetUtil.borderWidth("sliderBorder", this._style, 0));

        }

        public function set sliderBorderWidth(_arg1:Number):void{

            this._style["sliderBorderWidth"] = _arg1;

        }

        public function get sliderBorderColor():Number{

            return (StyleSheetUtil.borderColor("sliderBorder", this._style));

        }

        public function get sliderBorderAlpha():Number{

            return (StyleSheetUtil.borderAlpha("sliderBorder", this._style));

        }

        public function setSliderBorderColor(_arg1:String):void{

            this._style["sliderBorderColor"] = _arg1;

        }

        public function get timeBorderRadius():Number{

            return (this._style["timeBorderRadius"]);

        }

        public function set timeBorderRadius(_arg1:Number):void{

            this._style["timeBorderRadius"] = _arg1;

        }

        public function set timeBorder(_arg1:String):void{

            this._style["timeBorder"] = _arg1;

        }

        public function get timeBorderWidth():Number{

            return (StyleSheetUtil.borderWidth("timeBorder", this._style, 0));

        }

        public function set timeBorderWidth(_arg1:Number):void{

            this._style["timeBorderWidth"] = _arg1;

        }

        public function get timeBorderColor():Number{

            return (StyleSheetUtil.borderColor("timeBorder", this._style));

        }

        public function get timeBorderAlpha():Number{

            return (StyleSheetUtil.borderAlpha("timeBorder", this._style));

        }

        public function setTimeBorderColor(_arg1:String):void{

            this._style["timeBorderColor"] = _arg1;

        }

        public function get scrubberBorderRadius():Number{

            return (this._style["scrubberBorderRadius"]);

        }

        public function set scrubberBorderRadius(_arg1:Number):void{

            this._style["scrubberBorderRadius"] = _arg1;

        }

        public function get volumeBorderRadius():Number{

            return (this._style["volumeBorderRadius"]);

        }

        public function set volumeBorderRadius(_arg1:Number):void{

            this._style["volumeBorderRadius"] = _arg1;

        }

        public function get timeBgColor():Number{

            return (StyleSheetUtil.colorValue(this._style["timeBgColor"]));

        }

        public function get timeBgAlpha():Number{

            return (StyleSheetUtil.colorAlpha(this._style["timeBgColor"]));

        }

        public function setTimeBgColor(_arg1:String):void{

            this._style["timeBgColor"] = _arg1;

        }

        public function get scrubberHeightRatio():Number{

            return (this._style["scrubberHeightRatio"]);

        }

        public function set scrubberHeightRatio(_arg1:Number):void{

            this._style["scrubberHeightRatio"] = _arg1;

        }

        public function get scrubberBarHeightRatio():Number{

            return (this._style["scrubberBarHeightRatio"]);

        }

        public function set scrubberBarHeightRatio(_arg1:Number):void{

            this._style["scrubberBarHeightRatio"] = _arg1;

        }

        public function get volumeSliderHeightRatio():Number{

            return (this._style["volumeSliderHeightRatio"]);

        }

        public function set volumeSliderHeightRatio(_arg1:Number):void{

            this._style["volumeSliderHeightRatio"] = _arg1;

        }

        public function get volumeBarHeightRatio():Number{

            return (this._style["volumeBarHeightRatio"]);

        }

        public function set volumeBarHeightRatio(_arg1:Number):void{

            this._style["volumeBarHeightRatio"] = _arg1;

        }

        public function get timeBgHeightRatio():Number{

            return (this._style["timeBgHeightRatio"]);

        }

        public function set timeBgHeightRatio(_arg1:Number):void{

            this._style["timeBgHeightRatio"] = _arg1;

        }

        public function get timeSeparator():String{

            return (this._style["timeSeparator"]);

        }

        public function set timeSeparator(_arg1:String):void{

            this._style["timeSeparator"] = _arg1;

        }

        public function get timeFontSize():Number{

            return (this._style["timeFontSize"]);

        }

        public function set timeFontSize(_arg1:Number):void{

            this._style["timeFontSize"] = _arg1;

        }

        private function decodeGradient(_arg1:Object, _arg2:String="medium"):Array{

            if (!_arg1){

                return (this.decodeGradient(_arg2));

            };

            if ((_arg1 is Array)){

                return ((_arg1 as Array));

            };

            if (_arg1 == "none"){

                return (null);

            };

            if (_arg1 == "high"){

                return ([0.1, 0.5, 0.1]);

            };

            if (_arg1 == "medium"){

                return ([0, 0.25, 0]);

            };

            return (this.decodeGradient(_arg2));

        }



    }

}//package org.flowplayer.controls 

package org.flowplayer.controls {

    import org.flowplayer.controls.config.*;

    import flash.display.*;



    public class NullToolTip implements ToolTip {



        public function redraw(_arg1:Config):void{

        }

        public function show(_arg1:DisplayObject, _arg2:String, _arg3:Boolean=false, _arg4:String=null):void{

        }

        public function hide():void{

        }

        public function set text(_arg1:String):void{

        }

        public function get visible():Boolean{

            return (true);

        }



    }

}//package org.flowplayer.controls 

package org.flowplayer.controls.config {

    import org.flowplayer.util.*;



    public class ToolTips {



        private var _buttons:Boolean = false;

        private var _scrubber:Boolean = true;

        private var _volume:Boolean = true;

        private var _marginBottom:Number = 5;

        private var _play:String = "Play";

        private var _pause:String = "Pause";

        private var _stop:String = "Stop";

        private var _mute:String = "Mute";

        private var _unmute:String = "Unmute";

        private var _next:String = "Next";

        private var _previous:String = "Previous";

        private var _slowMotionFwd:String = "Slow forward";

        private var _slowMotionBwd:String = "Slow backward";

        private var _slowMotionFFwd:String = "Fast forward";

        private var _slowMotionFBwd:String = "Fast backward";

        private var _fullscreen:String = "Fullscreen";

        private var _fullscreenExit:String = "Exit fullscreen";



        public function get props():Object{

            return (new ObjectConverter(this).convert());

        }

        public function get buttons():Boolean{

            return (this._buttons);

        }

        public function set buttons(_arg1:Boolean):void{

            this._buttons = _arg1;

        }

        public function get scrubber():Boolean{

            return (this._scrubber);

        }

        public function set scrubber(_arg1:Boolean):void{

            this._scrubber = _arg1;

        }

        public function get marginBottom():Number{

            return (this._marginBottom);

        }

        public function set marginBottom(_arg1:Number):void{

            this._marginBottom = _arg1;

        }

        public function get volume():Boolean{

            return (this._volume);

        }

        public function set volume(_arg1:Boolean):void{

            this._volume = _arg1;

        }

        public function get play():String{

            return (this.label(this._play));

        }

        private function label(_arg1:String):String{

            return ((this._buttons) ? _arg1 : null);

        }

        public function set play(_arg1:String):void{

            this._play = _arg1;

        }

        public function get stop():String{

            return (this.label(this._stop));

        }

        public function set stop(_arg1:String):void{

            this._stop = _arg1;

        }

        public function get mute():String{

            return (this.label(this._mute));

        }

        public function set mute(_arg1:String):void{

            this._mute = _arg1;

        }

        public function get unmute():String{

            return (this.label(this._unmute));

        }

        public function set unmute(_arg1:String):void{

            this._unmute = _arg1;

        }

        public function get next():String{

            return (this.label(this._next));

        }

        public function set next(_arg1:String):void{

            this._next = _arg1;

        }

        public function get previous():String{

            return (this.label(this._previous));

        }

        public function set previous(_arg1:String):void{

            this._previous = _arg1;

        }

        public function get slowMotionFwd():String{

            return (this.label(this._slowMotionFwd));

        }

        public function set slowMotionFwd(_arg1:String):void{

            this._slowMotionFwd = _arg1;

        }

        public function get slowMotionBwd():String{

            return (this.label(this._slowMotionBwd));

        }

        public function set slowMotionBwd(_arg1:String):void{

            this._slowMotionBwd = _arg1;

        }

        public function get slowMotionFFwd():String{

            return (this.label(this._slowMotionFFwd));

        }

        public function set slowMotionFFwd(_arg1:String):void{

            this._slowMotionFFwd = _arg1;

        }

        public function get slowMotionFBwd():String{

            return (this.label(this._slowMotionFBwd));

        }

        public function set slowMotionFBwd(_arg1:String):void{

            this._slowMotionFBwd = _arg1;

        }

        public function get fullscreen():String{

            return (this.label(this._fullscreen));

        }

        public function set fullscreen(_arg1:String):void{

            this._fullscreen = _arg1;

        }

        public function get fullscreenExit():String{

            return (this.label(this._fullscreenExit));

        }

        public function set fullscreenExit(_arg1:String):void{

            this._fullscreenExit = _arg1;

        }

        public function get pause():String{

            return (this.label(this._pause));

        }

        public function set pause(_arg1:String):void{

            this._pause = _arg1;

        }



    }

}//package org.flowplayer.controls.config 

package org.flowplayer.controls.config {



    public class WidgetEnabledStates extends WidgetBooleanStates {



        override public function get stop():Boolean{

            return (value("stop", true));

        }

        override public function get playlist():Boolean{

            return (value("playlist", true));

        }



    }

}//package org.flowplayer.controls.config 

package org.flowplayer.controls.config {

    import org.flowplayer.util.*;



    public class WidgetBooleanStates {



        protected var log:Log;

        private var _values:Object;

        private var _properties:Array;



        public function WidgetBooleanStates(){

            this.log = new Log(this);

            this._values = new Object();

            this._properties = ["play", "stop", "mute", "volume", "time", "scrubber", "playlist", "slowBackward", "fastBackward", "slowForward", "fastForward", "fullscreen"];

            super();

        }

        public function reset():void{

            this._values = new Object();

        }

        protected function value(_arg1:String, _arg2:Boolean=true):Boolean{

            if (this._values[_arg1] == undefined){

                return (_arg2);

            };

            return (this._values[_arg1]);

        }

        public function get play():Boolean{

            return (this.value("play"));

        }

        public function set play(_arg1:Boolean):void{

            this._values["play"] = _arg1;

        }

        public function get volume():Boolean{

            return (this.value("volume"));

        }

        public function set volume(_arg1:Boolean):void{

            this._values["volume"] = _arg1;

        }

        public function get mute():Boolean{

            return (this.value("mute"));

        }

        public function set mute(_arg1:Boolean):void{

            this._values["mute"] = _arg1;

        }

        public function get time():Boolean{

            return (this.value("time"));

        }

        public function set time(_arg1:Boolean):void{

            this._values["time"] = _arg1;

        }

        public function get scrubber():Boolean{

            return (this.value("scrubber"));

        }

        public function set scrubber(_arg1:Boolean):void{

            this._values["scrubber"] = _arg1;

        }

        public function get stop():Boolean{

            return (this.value("stop", false));

        }

        public function set stop(_arg1:Boolean):void{

            this._values["stop"] = _arg1;

        }

        public function get playlist():Boolean{

            return (this.value("playlist", false));

        }

        public function get next():Boolean{

            return (this.playlist);

        }

        public function get prev():Boolean{

            return (this.playlist);

        }

        public function set playlist(_arg1:Boolean):void{

            this._values["playlist"] = _arg1;

        }

        public function set slowForward(_arg1:Boolean):void{

            this._values["slowForward"] = _arg1;

        }

        public function get slowForward():Boolean{

            return (this.value("slowForward", true));

        }

        public function set slowBackward(_arg1:Boolean):void{

            this._values["slowBackward"] = _arg1;

        }

        public function get slowBackward():Boolean{

            return (this.value("slowBackward", false));

        }

        public function set fastForward(_arg1:Boolean):void{

            this._values["fastForward"] = _arg1;

        }

        public function get fastForward():Boolean{

            return (this.value("fastForward", true));

        }

        public function set fastBackward(_arg1:Boolean):void{

            this._values["fastBackward"] = _arg1;

        }

        public function get fastBackward():Boolean{

            return (this.value("fastBackward", false));

        }

        public function get fullscreen():Boolean{

            return (this.value("fullscreen"));

        }

        public function set fullscreen(_arg1:Boolean):void{

            this._values["fullscreen"] = _arg1;

        }

        public function set all(_arg1:Boolean):void{

            var _local2:Number = 0;

            while (_local2 < this._properties.length) {

                if (this._values[this._properties[_local2]] == undefined){

                    this._values[this._properties[_local2]] = _arg1;

                };

                _local2++;

            };

        }



    }

}//package org.flowplayer.controls.config 

package org.flowplayer.controls.config {

    import org.flowplayer.ui.*;

    import org.flowplayer.view.*;

    import org.flowplayer.controls.*;

    import org.flowplayer.util.*;



    public class Config {



        private var log:Log;

        private var _player:Flowplayer;

        private var _skin:String;

        private var _style:Style;

        private var _autoHide:AutoHideConfig;

        private var _visible:WidgetBooleanStates;

        private var _enabled:WidgetBooleanStates;

        private var _tooltips:ToolTips;



        public function Config(){

            this.log = new Log(this);

            this._autoHide = new AutoHideConfig();

            this._visible = new WidgetBooleanStates();

            this._enabled = new WidgetEnabledStates();

            this._tooltips = new ToolTips();

            super();

        }

        public function get style():Style{

            return (((this._style) || (new Style())));

        }

        public function addStyleProps(_arg1:Object):void{

            this._style = (new PropertyBinder(this.style, "bgStyle").copyProperties(_arg1) as Style);

        }

        public function get visible():WidgetBooleanStates{

            return (this._visible);

        }

        public function set visible(_arg1:WidgetBooleanStates):void{

            this._visible = _arg1;

        }

        public function get enabled():WidgetBooleanStates{

            return (this._enabled);

        }

        public function set enabled(_arg1:WidgetBooleanStates):void{

            this._enabled = _arg1;

        }

        public function get skin():String{

            return (this._skin);

        }

        public function set skin(_arg1:String):void{

            this._skin = _arg1;

        }

        public function get tooltips():ToolTips{

            return (this._tooltips);

        }

        public function set tooltips(_arg1:ToolTips):void{

            this._tooltips = _arg1;

        }

        public function get player():Flowplayer{

            return (this._player);

        }

        public function set player(_arg1:Flowplayer):void{

            this._player = _arg1;

        }

        public function get autoHide():AutoHideConfig{

            return (this._autoHide);

        }

        public function setAutoHide(_arg1:Object):void{

            if ((_arg1 is String)){

                this._autoHide.state = (_arg1 as String);

            };

            if ((_arg1 is Boolean)){

                this._autoHide.enabled = (_arg1 as Boolean);

                this._autoHide.fullscreenOnly = !(_arg1);

            };

        }

        public function set hideDelay(_arg1:Number):void{

            this._autoHide.hideDelay = _arg1;

        }

        public function get hideDelay():Number{

            return (this._autoHide.hideDelay);

        }



    }

}//package org.flowplayer.controls.config 

package org.flowplayer.controls {

    import org.flowplayer.controls.config.*;

    import org.flowplayer.ui.*;

    import flash.events.*;

    import org.flowplayer.view.*;

    import org.flowplayer.model.*;

    import org.flowplayer.controls.button.*;

    import flash.display.*;

    import flash.system.*;

    import org.flowplayer.controls.slider.*;

    import flash.utils.*;

    import org.flowplayer.util.*;



    public class Controls extends StyleableSprite implements Plugin {



        private static const DEFAULT_HEIGHT:Number = 28;



        private var _playButton:AbstractToggleButton;

        private var _fullScreenButton:AbstractToggleButton;

        private var _muteVolumeButton:AbstractToggleButton;

        private var _volumeSlider:VolumeScrubber;

        private var _progressTracker:DisplayObject;

        private var _prevButton:DisplayObject;

        private var _nextButton:DisplayObject;

        private var _slowMotionFwdButton:DisplayObject;

        private var _slowMotionBwdButton:DisplayObject;

        private var _slowMotionFFwdButton:DisplayObject;

        private var _slowMotionFBwdButton:DisplayObject;

        private var _stopButton:DisplayObject;

        private var _scrubber:Scrubber;

        private var _timeView:TimeView;

        private var _widgetMaxHeight:Number = 0;

        private var _config:Config;

        private var _timeUpdateTimer:Timer;

        private var _floating:Boolean = false;

        private var _controlBarMover:AutoHide;

        private var _immediatePositioning:Boolean = true;

        private var _animationTimer:Timer;

        private var _player:Flowplayer;

        private var _pluginModel:PluginModel;

        private var _initialized:Boolean;

        private var _currentControlsConfig:Object;

        private var _originalConfig:Object;

        private var _durationReached:Boolean;

        private var _bgFill:Sprite;



        public function Controls(){

            log.debug("creating ControlBar");

            this.visible = false;

            this._bgFill = new Sprite();

            addChild(this._bgFill);

            height = DEFAULT_HEIGHT;

            addEventListener(Event.ADDED_TO_STAGE, this.onAddedToStage);

        }

        public function get config():Config{

            return (this._config);

        }

        public function setTooltips(_arg1:Object):void{

            this.initTooltipConfig(this._config, _arg1);

            this.redraw(_arg1);

        }

        public function getTooltips():ToolTips{

            return (this._config.tooltips);

        }

        public function setAutoHide(_arg1:Object=null):void{

            log.debug("autoHide()");

            if (_arg1){

                new PropertyBinder(this._config.autoHide).copyProperties(_arg1);

            };

            this._pluginModel.config.autoHide = this._config.autoHide.state;

            if (this._controlBarMover){

                this._controlBarMover.stop();

            };

            this.createControlBarMover();

            this._controlBarMover.start();

        }

        public function getAutoHide():AutoHideConfig{

            return (this._config.autoHide);

        }

        public function setWidgets(_arg1:Object=null):Object{

            log.debug("widgets()");

            if (!_arg1){

                return (this._config.visible);

            };

            if (((this._animationTimer) && (this._animationTimer.running))){

                return (this._config.visible);

            };

            this.setConfigBooleanStates("visible", _arg1);

            this.recreateWidgets();

            return (this._config.visible);

        }

        public function getWidgets():WidgetBooleanStates{

            return (this._config.visible);

        }

        public function enable(_arg1:Object):void{

            this.setEnabled(_arg1);

        }

        public function setEnabled(_arg1:Object):void{

            log.debug("enable()");

            this.setConfigBooleanStates("enabled", _arg1);

            this.enableWidgets();

            this.enableFullscreenButton(this._player.playlist.current);

        }

        public function getEnabled():WidgetBooleanStates{

            return (this._config.enabled);

        }

        private function recreateWidgets():void{

            this.immediatePositioning = false;

            this.createChildren();

            this.onResize();

            this.immediatePositioning = true;

        }

        private function enableWidgets():void{

            var _local2:DisplayObject;

            var _local1:int;

            while (_local1 < numChildren) {

                _local2 = getChildAt(_local1);

                log.debug((("enabledWidget " + _local2.name) + ":"));

                if (((_local2.hasOwnProperty("enabled")) && (this._config.enabled.hasOwnProperty(_local2.name)))){

                    log.debug(("enabled " + this._config.enabled[_local2.name]));

                    _local2["enabled"] = this._config.enabled[_local2.name];

                };

                _local1++;

            };

        }

        private function setConfigBooleanStates(_arg1:String, _arg2:Object):void{

            log.debug("setConfigBooleanStates");

            if (_arg2.hasOwnProperty("all")){

                this._config[_arg1].reset();

            };

            new PropertyBinder(this._config[_arg1]).copyProperties(_arg2);

        }

        private function set immediatePositioning(_arg1:Boolean):void{

            this._immediatePositioning = _arg1;

            if (!_arg1){

                return;

            };

            this._animationTimer = new Timer(500, 1);

            this._animationTimer.start();

        }

        override public function onBeforeCss(_arg1:Object=null):void{

            if (this._controlBarMover){

                this._controlBarMover.cancelAnimation();

            };

        }

        override public function css(_arg1:Object=null):Object{

            var _local2:Object = super.css(_arg1);

            if (this._controlBarMover){

                this._controlBarMover.showAndUpdate();

            };

            var _local3:Object = this._config.style.addStyleProps(_local2);

            if (!_arg1){

                return (_local3);

            };

            this.redraw(_arg1);

            return (_local3);

        }

        private function setAutoHideFullscreenOnly(_arg1:Config, _arg2:Object):void{

            if (_arg2.hasOwnProperty("fullscreenOnly")){

                this._config.autoHide.fullscreenOnly = _arg2.fullscreenOnly;

            } else {

                if (_arg1.autoHide.state == "never"){

                    this._config.autoHide.state = "fullscreen";

                };

            };

        }

        override public function animate(_arg1:Object):Object{

            var _local2:Object = super.animate(_arg1);

            return (this._config.style.addStyleProps(_local2));

        }

        override protected function onResize():void{

            if (!this._initialized){

                return;

            };

            log.debug(("arranging, width is " + width));

            this._bgFill.graphics.clear();

            this._bgFill.graphics.beginFill(0, 0);

            this._bgFill.graphics.drawRect(0, 0, width, height);

            this._bgFill.graphics.endFill();

            var _local1:Number = this.arrangeLeftEdgeControls();

            this.arrangeRightEdgeControls(_local1);

            this.initializeVolume();

            log.debug(((("arranged to x " + this.x) + ", y ") + this.y));

        }

        override protected function onRedraw():void{

            log.debug("onRedraw, making controls visible");

            this.visible = true;

        }

        public function getDefaultConfig():Object{

            if (!SkinClasses.defaults){

                return (null);

            };

            return (SkinClasses.defaults);

        }

        private function initTooltipConfig(_arg1:Config, _arg2:Object):void{

            new PropertyBinder(_arg1.tooltips).copyProperties(_arg2);

        }

        private function redraw(_arg1:Object=null):void{

            var _local3:DisplayObject;

            if (_arg1){

                this._config.addStyleProps(_arg1);

            };

            if (this._scrubber){

                this._scrubber.redraw(this._config);

            };

            if (this._volumeSlider){

                this._volumeSlider.redraw(this._config);

            };

            if (this._timeView){

                this._timeView.redraw(this._config);

            };

            var _local2:int;

            while (_local2 < numChildren) {

                _local3 = getChildAt(_local2);

                if ((_local3 is AbstractButton)){

                    AbstractButton(_local3).redraw(this._config);

                };

                _local2++;

            };

        }

        private function onAddedToStage(_arg1:Event):void{

            log.debug(("addedToStage, config is " + this._config));

            this.createControlBarMover();

            this.enableWidgets();

        }

        private function createControlBarMover():void{

            if (((!((this._config.autoHide.state == "never"))) && (!(this._controlBarMover)))){

                this._controlBarMover = new AutoHide(DisplayPluginModel(this._pluginModel), this._config.autoHide, this._player, stage, this);

            };

        }

        public function onLoad(_arg1:Flowplayer):void{

            log.info(("received player API! autohide == " + this._config.autoHide.state));

            this._player = _arg1;

            if (this._config.skin){

                this.initSkin();

            };

            this._config.player = _arg1;

            this.createChildren();

            loader = _arg1.createLoader();

            this.createTimeView();

            this.addListeners(_arg1.playlist);

            if (this._playButton){

                this._playButton.down = _arg1.isPlaying();

            };

            log.debug(("setting root style to " + this._config.style.bgStyle));

            rootStyle = this._config.style.bgStyle;

            if (this._muteVolumeButton){

                this._muteVolumeButton.down = _arg1.muted;

            };

            this._pluginModel.dispatchOnLoad();

        }

        private function initSkin():void{

            Security.allowDomain("*");

            var _local1:PluginModel = (this._player.pluginRegistry.getPlugin(this._config.skin) as PluginModel);

            log.debug(("using skin " + _local1));

            SkinClasses.skinClasses = (_local1.pluginObject as ApplicationDomain);

            log.debug("skin has defaults", SkinClasses.defaults);

            Arrange.fixPositionSettings((this._pluginModel as DisplayPluginModel), SkinClasses.defaults);

            new PropertyBinder(this._pluginModel, "config").copyProperties(SkinClasses.defaults, false);

            this._config = this.createConfig(this._pluginModel.config);

        }

        public function onConfig(_arg1:PluginModel):void{

            log.info("received my plugin config ", _arg1.config);

            this._pluginModel = _arg1;

            this.storeOriginalConfig(_arg1);

            log.debug("-");

            this._config = this.createConfig(_arg1.config);

            log.debug("config created");

        }

        private function storeOriginalConfig(_arg1:PluginModel):void{

            var _local2:String;

            this._originalConfig = new Object();

            for (_local2 in _arg1.config) {

                this._originalConfig[_local2] = _arg1.config[_local2];

            };

        }

        private function createConfig(_arg1:Object):Config{

            var _local2:Config = (new PropertyBinder(new Config()).copyProperties(_arg1) as Config);

            new PropertyBinder(_local2.autoHide).copyProperties(_arg1.autoHide);

            new PropertyBinder(_local2.visible).copyProperties(_arg1);

            new PropertyBinder(_local2.enabled).copyProperties(_arg1.enabled);

            _local2.addStyleProps(_arg1);

            this.initTooltipConfig(_local2, _arg1["tooltips"]);

            return (_local2);

        }

        public function set floating(_arg1:Boolean):void{

            this._floating = _arg1;

        }

        private function hasSlowMotion():Boolean{

            return (!((this._player.pluginRegistry.getPlugin("slowmotion") == null)));

        }

        private function createSlowmotionButtons(_arg1:AnimationEngine):void{

            var animationEngine:* = _arg1;

            var slomo:* = ((this.hasSlowMotion()) && (!((SkinClasses.getSlowMotionBwdButton() == null))));

            log.debug(("createSlowmotionButtons(), hasSlowMotion? " + slomo));

            if (slomo){

                this._slowMotionFwdButton = this.addChildWidget(this.createWidget(this._slowMotionFwdButton, "slowForward", SlowMotionFwdButton, this._config, animationEngine), ButtonEvent.CLICK, function (_arg1:ButtonEvent):void{

                    onSlowMotionClicked(false, true);

                });

                this._slowMotionBwdButton = this.addChildWidget(this.createWidget(this._slowMotionBwdButton, "slowBackward", SlowMotionBwdButton, this._config, animationEngine), ButtonEvent.CLICK, function (_arg1:ButtonEvent):void{

                    onSlowMotionClicked(false, false);

                });

                this._slowMotionFFwdButton = this.addChildWidget(this.createWidget(this._slowMotionFFwdButton, "fastForward", SlowMotionFFwdButton, this._config, animationEngine), ButtonEvent.CLICK, function (_arg1:ButtonEvent):void{

                    onSlowMotionClicked(true, true);

                });

                this._slowMotionFBwdButton = this.addChildWidget(this.createWidget(this._slowMotionFBwdButton, "fastBackward", SlowMotionFBwdButton, this._config, animationEngine), ButtonEvent.CLICK, function (_arg1:ButtonEvent):void{

                    onSlowMotionClicked(true, false);

                });

            };

        }

        private function createChildren():void{

            log.debug("creating fullscren ", this._config);

            var _local1:AnimationEngine = this._player.animationEngine;

            this._fullScreenButton = (this.addChildWidget(this.createWidget(this._fullScreenButton, "fullscreen", ToggleFullScreenButton, this._config, _local1)) as AbstractToggleButton);

            log.debug("creating play");

            this._playButton = (this.addChildWidget(this.createWidget(this._playButton, "play", TogglePlayButton, this._config, _local1), ButtonEvent.CLICK, this.onPlayClicked) as AbstractToggleButton);

            log.debug("creating stop");

            this._stopButton = this.addChildWidget(this.createWidget(this._stopButton, "stop", StopButton, this._config, _local1), ButtonEvent.CLICK, this.onStopClicked);

            this._nextButton = this.addChildWidget(this.createWidget(this._nextButton, "playlist", NextButton, this._config, _local1), ButtonEvent.CLICK, "next");

            this._prevButton = this.addChildWidget(this.createWidget(this._prevButton, "playlist", PrevButton, this._config, _local1), ButtonEvent.CLICK, "previous");

            this.createSlowmotionButtons(_local1);

            this._muteVolumeButton = (this.addChildWidget(this.createWidget(this._muteVolumeButton, "mute", ToggleVolumeMuteButton, this._config, _local1), ButtonEvent.CLICK, this.onMuteVolumeClicked) as AbstractToggleButton);

            this._volumeSlider = (this.addChildWidget(this.createWidget(this._volumeSlider, "volume", VolumeScrubber, this._config, _local1, this), VolumeSlider.DRAG_EVENT, this.onVolumeSlider) as VolumeScrubber);

            this._scrubber = (this.addChildWidget(this.createWidget(this._scrubber, "scrubber", Scrubber, this._config, _local1, this), Scrubber.DRAG_EVENT, this.onScrubbed) as Scrubber);

            this.createTimeView();

            this.createScrubberUpdateTimer();

            this._initialized = true;

        }

        private function createTimeView():void{

            if (!this._player){

                return;

            };

            if (this._config.visible.time){

                if (this._timeView){

                    return;

                };

                this._timeView = (this.addChildWidget(new TimeView(this._config, this._player), TimeView.EVENT_REARRANGE, this.onTimeViewRearranged) as TimeView);

                this._timeView.visible = false;

            } else {

                if (this._timeView){

                    this.removeChildAnimate(this._timeView);

                    this._timeView = null;

                };

            };

        }

        private function onTimeViewRearranged(_arg1:Event):void{

            this.onResize();

        }

        private function createWidget(_arg1:DisplayObject, _arg2:String, _arg3:Class, _arg4:Object, _arg5:Object=null, _arg6:Object=null):DisplayObject{

            var _local8:DisplayObject;

            var _local7:Boolean = this._config.visible[_arg2];

            if (!_local7){

                log.debug(("not showing widget " + _arg3));

                if (_arg1){

                    this.removeChildAnimate(_arg1);

                };

                return (null);

            };

            if (_arg1){

                return (_arg1);

            };

            log.debug(("creating " + _arg3));

            if (_arg6){

                _local8 = new _arg3(_arg4, _arg5, _arg6);

            } else {

                if (_arg5){

                    _local8 = new _arg3(_arg4, _arg5);

                } else {

                    _local8 = (_arg4) ? new _arg3(_arg4) : new (_arg3);

                };

            };

            this._widgetMaxHeight = Math.max(this._widgetMaxHeight, _local8.height);

            _local8.visible = false;

            _local8.name = _arg2;

            return (_local8);

        }

        private function removeChildAnimate(_arg1:DisplayObject):DisplayObject{

            var child:* = _arg1;

            if (((!(this._player)) || (this._immediatePositioning))){

                removeChild(child);

                return (child);

            };

            this._player.animationEngine.fadeOut(child, 1000, function ():void{

                removeChild(child);

            });

            return (child);

        }

        private function addChildWidget(_arg1:DisplayObject, _arg2:String=null, _arg3:Object=null):DisplayObject{

            var widget:* = _arg1;

            var eventType = _arg2;

            var listener = _arg3;

            if (!widget){

                return (null);

            };

            addChild((widget as DisplayObject));

            if (eventType){

                widget.addEventListener(eventType, ((listener is Function)) ? (listener as Function) : function ():void{

    var _local1 = _player;

    _local1[listener]();

});

            };

            log.debug(("added control bar child widget  " + widget));

            return (widget);

        }

        private function createScrubberUpdateTimer():void{

            this._timeUpdateTimer = new Timer(100);

            this._timeUpdateTimer.addEventListener(TimerEvent.TIMER, this.onTimeUpdate);

            this._timeUpdateTimer.start();

        }

        private function initializeVolume():void{

            if (!this._volumeSlider){

                return;

            };

            var _local1:Number = this._player.volume;

            log.info(("initializing volume to " + _local1));

            this._volumeSlider.value = _local1;

        }

        private function onTimeUpdate(_arg1:TimerEvent):void{

            var duration:* = NaN;

            var event:* = _arg1;

            if (!((this._scrubber) || (this._timeView))){

                return;

            };

            if (!this._player){

                return;

            };

            var status:* = this.getPlayerStatus();

            if (!status){

                return;

            };

            duration = (status.clip) ? status.clip.duration : 0;

            if (this._scrubber){

                if (duration > 0){

                    this._scrubber.value = ((status.time / duration) * 100);

                    this._scrubber.setBufferRange((status.bufferStart / duration), (status.bufferEnd / duration));

                    this._scrubber.allowRandomSeek = status.allowRandomSeek;

                } else {

                    this._scrubber.value = 0;

                    this._scrubber.setBufferRange(0, 0);

                    this._scrubber.allowRandomSeek = false;

                };

                if (status.clip){

                    this._scrubber.tooltipTextFunc = function (_arg1:Number):String{

                        if (duration == 0){

                            return (null);

                        };

                        if (_arg1 < 0){

                            _arg1 = 0;

                        };

                        if (_arg1 > 100){

                            _arg1 = 100;

                        };

                        return (TimeUtil.formatSeconds(((_arg1 / 100) * duration)));

                    };

                };

            };

            if (this._timeView){

                this._timeView.duration = (((status.clip.live) && ((duration == 0)))) ? -1 : duration;

                this._timeView.time = (this._durationReached) ? duration : status.time;

            };

        }

        private function getPlayerStatus():Status{

            try {

                return (this._player.status);

            } catch(e:Error) {

                log.error(("error querying player status, will stop query timer, error message: " + e.message));

                _timeUpdateTimer.stop();

                throw (e);

            };

            return (null);

        }

        private function addListeners(_arg1:Playlist):void{

            _arg1.onConnect(this.onPlayStarted);

            _arg1.onBeforeBegin(this.onPlayStarted);

            _arg1.onBegin(this.onPlayBegin);

            _arg1.onMetaData(this.onPlayStarted);

            _arg1.onStart(this.onPlayStarted);

            _arg1.onPause(this.onPlayPaused);

            _arg1.onResume(this.onPlayResumed);

            _arg1.onStop(this.onPlayStopped);

            _arg1.onBufferStop(this.onPlayStopped);

            _arg1.onFinish(this.onPlayStopped);

            _arg1.onBeforeFinish(this.durationReached);

            this._player.onFullscreen(this.onPlayerFullscreenEvent);

            this._player.onFullscreenExit(this.onPlayerFullscreenEvent);

            this._player.onMute(this.onPlayerMuteEvent);

            this._player.onUnmute(this.onPlayerMuteEvent);

            this._player.onVolume(this.onPlayerVolumeEvent);

        }

        private function durationReached(_arg1:ClipEvent):void{

            this._durationReached = true;

        }

        private function onPlayerVolumeEvent(_arg1:PlayerEvent):void{

            if (!this._volumeSlider){

                return;

            };

            this._volumeSlider.value = (_arg1.info as Number);

        }

        private function onPlayerMuteEvent(_arg1:PlayerEvent):void{

            log.info(("onPlayerMuteEvent, _muteButton " + this._muteVolumeButton));

            if (!this._muteVolumeButton){

                return;

            };

            this._muteVolumeButton.down = (_arg1.eventType == PlayerEventType.MUTE);

        }

        private function onPlayBegin(_arg1:ClipEvent):void{

            log.debug(("onPlayBegin(): received " + _arg1));

            this._durationReached = false;

            var _local2:Clip = (_arg1.target as Clip);

            this.handleClipConfig(_local2);

        }

        private function handleClipConfig(_arg1:Clip):void{

            var _local2:Object = _arg1.getCustomProperty("controls");

            if (_local2){

                if (_local2 == this._currentControlsConfig){

                    return;

                };

                log.debug("onPlayBegin(): clip has controls configuration, reconfiguring");

                this.reconfigure(_local2);

            } else {

                if (this._currentControlsConfig){

                    log.debug("onPlayBegin(): reverting to original configuration");

                    this._config = this.createConfig(this._originalConfig);

                    this._config.player = this._player;

                    rootStyle = this._config.style.bgStyle;

                    this.recreateWidgets();

                    this.enableWidgets();

                    this.redraw();

                };

            };

        }

        private function reconfigure(_arg1:Object):void{

            this._currentControlsConfig = _arg1;

            this.setWidgets(_arg1);

            if (_arg1.hasOwnProperty("tooltips")){

                this.initTooltipConfig(this._config, _arg1["tooltips"]);

            };

            this.css(_arg1);

            if (_arg1.hasOwnProperty("enabled")){

                this.setEnabled(_arg1["enabled"]);

            };

        }

        private function onPlayStarted(_arg1:ClipEvent):void{

            log.debug(("received " + _arg1));

            if (this._playButton){

                this._playButton.down = ((!(_arg1.isDefaultPrevented())) && (this._player.isPlaying()));

            };

            this._durationReached = false;

            this.enableFullscreenButton((_arg1.target as Clip));

        }

        private function enableFullscreenButton(_arg1:Clip):void{

            if (!this._fullScreenButton){

                return;

            };

            var _local2:Boolean = ((((_arg1) && ((((_arg1.originalWidth > 0)) || (!(_arg1.accelerated)))))) && (this._config.enabled.fullscreen));

            this._fullScreenButton.enabled = _local2;

            if (_local2){

                this._fullScreenButton.addEventListener(ButtonEvent.CLICK, this.toggleFullscreen);

            } else {

                this._fullScreenButton.removeEventListener(ButtonEvent.CLICK, this.toggleFullscreen);

            };

        }

        private function enableScrubber(_arg1:Boolean):void{

            if (!this._scrubber){

                return;

            };

            this._scrubber.enabled = _arg1;

            if (_arg1){

                this._scrubber.addEventListener(Scrubber.DRAG_EVENT, this.onScrubbed);

            } else {

                this._scrubber.removeEventListener(Scrubber.DRAG_EVENT, this.onScrubbed);

            };

        }

        private function toggleFullscreen(_arg1:ButtonEvent):void{

            this._player.toggleFullscreen();

        }

        private function onPlayPaused(_arg1:ClipEvent):void{

            log.info(("received " + _arg1));

            if (!this._playButton){

                return;

            };

            this._playButton.down = false;

            var _local2:Clip = (_arg1.target as Clip);

            log.info(("clip.seekableOnBegin: " + _local2.seekableOnBegin));

            if ((((this._player.status.time == 0)) && (!(_local2.seekableOnBegin)))){

                this.enableScrubber(false);

            };

        }

        private function onPlayStopped(_arg1:ClipEvent):void{

            log.debug(("received " + _arg1));

            var _local2:Clip = (_arg1.target as Clip);

            if (_local2.isMidroll){

                this.handleClipConfig(_local2.parent);

            };

            if (!this._playButton){

                return;

            };

            log.debug("setting playButton to up state");

            this._playButton.down = false;

        }

        private function onPlayResumed(_arg1:ClipEvent):void{

            this._durationReached = false;

            log.info(("received onResume, time " + this._player.status.time));

            if (!this._playButton){

                return;

            };

            this._playButton.down = true;

            if (this._player.status.time < 0.5){

                this.enableScrubber(true);

            };

        }

        private function onPlayerFullscreenEvent(_arg1:PlayerEvent):void{

            log.debug("onPlayerFullscreenEvent");

            if (!this._fullScreenButton){

                return;

            };

            this._fullScreenButton.down = (_arg1.eventType == PlayerEventType.FULLSCREEN);

        }

        private function onPlayClicked(_arg1:ButtonEvent):void{

            this._player.toggle();

        }

        private function onStopClicked(_arg1:ButtonEvent):void{

            this._player.stop();

        }

        private function onMuteVolumeClicked(_arg1:ButtonEvent):void{

            this._player.muted = !(this._player.muted);

        }

        private function onSlowMotionClicked(_arg1:Boolean, _arg2:Boolean):void{

            if (!this.hasSlowMotion()){

                return;

            };

            var _local3:* = this._player.pluginRegistry.getPlugin("slowmotion").pluginObject;

            var _local4:Number = _local3.getNextSpeed(_arg1, _arg2);

            if (_local4 == 0){

                _local3.normal();

            } else {

                if (_arg2){

                    _local3.forward(_local4);

                } else {

                    _local3.backward(_local4);

                };

            };

        }

        private function onVolumeSlider(_arg1:Event):void{

            log.debug(("volume slider changed to pos " + VolumeSlider(_arg1.target).value));

            this._player.volume = VolumeSlider(_arg1.target).value;

        }

        private function onScrubbed(_arg1:Event):void{

            this._player.seekRelative(ScrubberSlider(_arg1.target).value);

        }

        private function arrangeLeftEdgeControls():Number{

            var _local1:Number = this.getSpaceBeforeFirstWidget();

            var _local2:Array = [this._stopButton];

            if (((this.hasSlowMotion()) && (this._slowMotionFBwdButton))){

                _local2.push(this._slowMotionFBwdButton);

            };

            if (((this.hasSlowMotion()) && (this._slowMotionBwdButton))){

                _local2.push(this._slowMotionBwdButton);

            };

            _local2.push(this._playButton);

            if (((this.hasSlowMotion()) && (this._slowMotionFwdButton))){

                _local2.push(this._slowMotionFwdButton);

            };

            if (((this.hasSlowMotion()) && (this._slowMotionFFwdButton))){

                _local2.push(this._slowMotionFFwdButton);

            };

            _local2.push(this._prevButton);

            _local2.push(this._nextButton);

            _local1 = this.arrangeControls(_local1, _local2, this.arrangeToLeftEdge);

            return (_local1);

        }

        private function arrangeRightEdgeControls(_arg1:Number):void{

            var _local3:Array;

            var _local2:Number = (this._config.visible.scrubber) ? (width - this.margins[1]) : _arg1;

            if (this._volumeSlider){

                this._volumeSlider.width = this.getVolumeSliderWidth();

            };

            if (this._config.visible.scrubber){

                _local3 = [this._fullScreenButton, this._volumeSlider, this._muteVolumeButton, this._timeView];

                _local2 = this.arrangeControls(_local2, _local3, this.arrangeToRightEdge);

                _local2 = this.arrangeScrubber(_arg1, _local2, this.firstNonNull(_local3.reverse(), 0));

            } else {

                _local3 = [this._timeView, this._muteVolumeButton, this._volumeSlider, this._fullScreenButton];

                _local2 = this.arrangeControls(_local2, _local3, this.arrangeToLeftEdge);

            };

            this.arrangeVolumeControl();

        }

        private function firstNonNull(_arg1:Array, _arg2:int):DisplayObject{

            var _local3:Number = _arg2;

            while (_local3 < _arg1.length) {

                if (_arg1[_local3]){

                    return ((_arg1[_local3] as DisplayObject));

                };

                _local3++;

            };

            return (null);

        }

        private function arrangeControls(_arg1:Number, _arg2:Array, _arg3:Function):Number{

            var _local5:DisplayObject;

            var _local4:Number = 0;

            while (_local4 < _arg2.length) {

                if (_arg2[_local4]){

                    _local5 = (_arg2[_local4] as DisplayObject);

                    this.arrangeYCentered(_local5);

                    _arg1 = (_arg3(_arg1, this.getSpaceAfterWidget(_local5), _local5) as Number);

                };

                _local4++;

            };

            return (_arg1);

        }

        private function get margins():Array{

            return (SkinClasses.margins);

        }

        private function arrangeVolumeControl():void{

            if (!this._config.visible.volume){

                return;

            };

            this._volumeSlider.height = ((height - this.margins[0]) - this.margins[2]);

            this._volumeSlider.y = this.margins[0];

        }

        private function arrangeScrubber(_arg1:Number, _arg2:Number, _arg3:DisplayObject):Number{

            if (!this._config.visible.scrubber){

                return (_arg2);

            };

            this._scrubber.setRightEdgeWidth(this.getScrubberRightEdgeWidth(_arg3));

            this.arrangeX(this._scrubber, _arg1);

            var _local4:Number = ((_arg2 - _arg1) - (2 * this.getSpaceAfterWidget(this._scrubber)));

            if (((!(this._player)) || (this._immediatePositioning))){

                this._scrubber.width = _local4;

            } else {

                this._player.animationEngine.animateProperty(this._scrubber, "width", _local4);

            };

            this._scrubber.height = ((height - this.margins[0]) - this.margins[2]);

            this._scrubber.y = ((_height - this.margins[2]) - this._scrubber.height);

            return (((_arg2 - this.getSpaceAfterWidget(this._scrubber)) - _local4));

        }

        private function arrangeToRightEdge(_arg1:Number, _arg2:Number, _arg3:DisplayObject):Number{

            if (!_arg3){

                return (_arg1);

            };

            _arg1 = ((_arg1 - _arg3.width) - _arg2);

            this.arrangeX(_arg3, _arg1);

            return (_arg1);

        }

        private function arrangeX(_arg1:DisplayObject, _arg2:Number):void{

            _arg1.visible = true;

            if (((!(this._player)) || (this._immediatePositioning))){

                _arg1.x = _arg2;

                return;

            };

            if (_arg1.x == 0){

                _arg1.x = _arg2;

                this.fadeIn(_arg1);

            };

            this._player.animationEngine.animateProperty(_arg1, "x", _arg2);

        }

        private function fadeIn(_arg1:DisplayObject):void{

            var _local2:Number = _arg1.alpha;

            _arg1.alpha = 0;

            this._player.animationEngine.animateProperty(_arg1, "alpha", _local2);

        }

        private function arrangeToLeftEdge(_arg1:Number, _arg2:Number, _arg3:DisplayObject):int{

            if (!_arg3){

                return (_arg1);

            };

            this.arrangeX(_arg3, _arg1);

            return (((_arg1 + _arg3.width) + _arg2));

        }

        private function arrangeYCentered(_arg1:DisplayObject):void{

            _arg1.y = this.margins[0];

            _arg1.height = ((height - this.margins[0]) - this.margins[2]);

            _arg1.scaleX = _arg1.scaleY;

            Arrange.center(_arg1, 0, height);

        }

        private function getSpaceBeforeFirstWidget():int{

            return (SkinClasses.getSpaceBeforeFirstWidget());

        }

        private function getSpaceAfterWidget(_arg1:DisplayObject):int{

            return (SkinClasses.getSpaceAfterWidget(_arg1, (_arg1 == this.lastOnRight)));

        }

        private function getScrubberRightEdgeWidth(_arg1:DisplayObject):int{

            return (SkinClasses.getScrubberRightEdgeWidth(_arg1));

        }

        private function getVolumeSliderWidth():int{

            return (SkinClasses.getVolumeSliderWidth());

        }

        private function get lastOnRight():DisplayObject{

            if (this._fullScreenButton){

                return (this._fullScreenButton);

            };

            if (this._volumeSlider){

                return (this._volumeSlider);

            };

            if (this._muteVolumeButton){

                return (this._muteVolumeButton);

            };

            if (this._timeView){

                return (this._timeView);

            };

            return (null);

        }



    }

}//package org.flowplayer.controls 

package org.flowplayer.controls {



    class TimeUtil {



        public static function formatSeconds(_arg1:Number):String{

            if (isNaN(_arg1)){

                return ("00:00");

            };

            var _local2 = "";

            var _local3:Number = Math.floor((_arg1 / 60));

            var _local4:int = (int(_arg1) % 60);

            _local2 = two(_local4);

            var _local5:Number = Math.floor((_local3 / 60));

            _local3 = (_local3 % 60);

            _local2 = ((two(_local3) + ":") + _local2);

            if (_local5 == 0){

                return (_local2);

            };

            var _local6:Number = Math.floor((_local5 / 60));

            _local5 = (_local5 % 60);

            _local2 = ((two(_local5) + ":") + _local2);

            if (_local6 == 0){

                return (_local2);

            };

            _local2 = ((_local6 + ":") + _local2);

            return (_local2);

        }

        private static function two(_arg1:Number):String{

            return ((((_arg1)>9) ? "" : "0" + _arg1));

        }



    }

}//package org.flowplayer.controls 

package org.flowplayer.controls {

    import org.flowplayer.controls.config.*;

    import flash.events.*;

    import org.flowplayer.view.*;

    import flash.display.*;

    import flash.text.*;

    import flash.geom.*;

    import flash.utils.*;

    import org.flowplayer.util.*;

    import flash.filters.*;



    public class DefaultToolTip extends Sprite implements ToolTip {



        private var _stage:Stage;

        private var _parentObject:DisplayObject;

        private var _tf:TextField;

        private var _titleFormat:TextFormat;

        private var _contentFormat:TextFormat;

        private var _defaultWidth:Number = 60;

        private var _buffer:Number = 1;

        private var _align:String = "center";

        private var _cornerRadius:Number = 4;

        private var _autoSize:Boolean = true;

        private var _hookEnabled:Boolean = true;

        private var _delay:Number = 0;

        private var _hookSize:Number = 5;

        private var _offSet:Number;

        private var _hookOffSet:Number;

        private var _timer:Timer;

        private var _animationEngine:AnimationEngine;

        private var _tween:Animation;

        private var _config:Config;

        private var log:Log;



        public function DefaultToolTip(_arg1:Config, _arg2:AnimationEngine):void{

            this.log = new Log(this);

            super();

            this._config = _arg1;

            this._animationEngine = _arg2;

            this.mouseEnabled = false;

            this.buttonMode = false;

            this.mouseChildren = false;

            this._timer = new Timer(this._delay, 1);

            this._timer.addEventListener("timer", this.timerHandler);

            this.initTitleFormat();

            this.initContentFormat();

        }

        public function set text(_arg1:String):void{

            if (!this._tf){

                return;

            };

            this._tf.htmlText = _arg1;

            this.setDefaultWidth();

            this.drawBG();

        }

        public function redraw(_arg1:Config):void{

            this._config = _arg1;

            this.drawBG();

        }

        public function show(_arg1:DisplayObject, _arg2:String, _arg3:Boolean=false, _arg4:String=null):void{

            if (this._tween){

                this._tween.cancel();

                this.alpha = this._config.style.tooltipAlpha;

            };

            if (this.parent == _arg1.stage){

                if (((((this._tf) && (!((this._tf.htmlText == ""))))) && (!((this._tf.htmlText == _arg2))))){

                    this.cleanUp();

                } else {

                    return;

                };

            };

            this._stage = _arg1.stage;

            this._parentObject = _arg1;

            this.addCopy(_arg2, _arg4);

            this.setOffset();

            this.drawBG();

            this.bgGlow();

            var _local5:Point = new Point(this._parentObject.x, this._parentObject.y);

            var _local6:Point = _arg1.localToGlobal(_local5);

            this.x = (_local6.x + this._offSet);

            this.y = ((_local6.y - this.height) - 5);

            this.alpha = 0;

            this._stage.addChild(this);

            if (_arg3){

                this.follow(true);

            } else {

                this.position();

            };

            this._timer.start();

        }

        public function hide():void{

            if (!this.parent){

                return;

            };

            if (this._tween){

                this._tween.cancel();

                this.alpha = this._config.style.tooltipAlpha;

            };

            this.animate(false);

        }

        private function timerHandler(_arg1:TimerEvent):void{

            this.animate(true);

        }

        private function follow(_arg1:Boolean):void{

            if (_arg1){

                addEventListener(Event.ENTER_FRAME, this.eof);

            } else {

                removeEventListener(Event.ENTER_FRAME, this.eof);

            };

        }

        private function eof(_arg1:Event):void{

            this.position(true);

        }

        private function position(_arg1:Boolean=false):void{

            var _local2:Number = 1;

            var _local3:Point = (_arg1) ? this.parentMousePos() : new Point((this._parentObject.width / 2), 0);

            var _local4:Point = this._parentObject.localToGlobal(_local3);

            var _local5:Number = (_local4.x + this._offSet);

            var _local6:Number = ((_local4.y - this.height) - this._config.tooltips.marginBottom);

            var _local7:Number = (this._defaultWidth + _local5);

            if (_local7 > stage.stageWidth){

                _local5 = (stage.stageWidth - this._defaultWidth);

            } else {

                if (_local5 < 0){

                    _local5 = 0;

                };

            };

            if (_local6 < 0){

                _local6 = 0;

            };

            this.x = (this.x + ((_local5 - this.x) / _local2));

            this.y = (this.y + ((_local6 - this.y) / _local2));

        }

        private function parentMousePos():Point{

            var _local1:Number = this._parentObject.mouseX;

            if (_local1 < 0){

                return (new Point(0, 0));

            };

            if (_local1 > this._parentObject.width){

                return (new Point(this._parentObject.width, 0));

            };

            return (new Point(_local1, 0));

        }

        private function addCopy(_arg1:String, _arg2:String):void{

            if (this._tf){

                removeChild(this._tf);

            };

            var _local3:Boolean = this.isDeviceFont(this._titleFormat);

            this._tf = this.createField(_local3);

            this._tf.defaultTextFormat = this._titleFormat;

            this._tf.htmlText = _arg1;

            this._tf.alpha = this._config.style.tooltipTextAlpha;

            if (this._autoSize){

                this.setDefaultWidth();

                if (((this._parentObject.x + (this._parentObject.width / 2)) + (this._defaultWidth / 2)) > this._parentObject.stage.stageWidth){

                    this._align = "left";

                } else {

                    if (((this._parentObject.x + (this._parentObject.width / 2)) - (this._defaultWidth / 2)) < 0){

                        this._align = "right";

                    } else {

                        this._align = "center";

                    };

                };

            } else {

                this._tf.width = (this._defaultWidth - (this._buffer * 2));

            };

            this._tf.x = (this._tf.y = this._buffer);

            this.textGlow(this._tf);

            addChild(this._tf);

        }

        private function setDefaultWidth():void{

            this._defaultWidth = ((this._tf.textWidth + 4) + (this._buffer * 2));

        }

        private function createField(_arg1:Boolean):TextField{

            var _local2:TextField = new TextField();

            _local2.embedFonts = !(_arg1);

            _local2.gridFitType = "pixel";

            _local2.autoSize = TextFieldAutoSize.LEFT;

            _local2.blendMode = BlendMode.LAYER;

            _local2.selectable = false;

            if (!this._autoSize){

                _local2.multiline = true;

                _local2.wordWrap = true;

            };

            return (_local2);

        }

        private function drawBG():void{

            var _local9:Number;

            var _local10:Number;

            var _local11:Number;

            var _local12:Number;

            graphics.clear();

            this._titleFormat.color = this._config.style.tooltipTextColor;

            var _local1:Rectangle = this.getBounds(this);

            var _local2:String = GradientType.LINEAR;

            var _local3:Array = [this._config.style.tooltipAlpha, this._config.style.tooltipAlpha];

            var _local4:Array = [0, 0xFF];

            var _local5:Matrix = new Matrix();

            var _local6:Number = ((90 * Math.PI) / 180);

            _local5.createGradientBox(this._defaultWidth, (_local1.height + (this._buffer * 2)), _local6, 0, 0);

            var _local7:String = SpreadMethod.PAD;

            var _local8:Array = [this.lighten(this._config.style.tooltipColor), this._config.style.tooltipColor];

            this.graphics.beginGradientFill(_local2, _local8, _local3, _local4, _local5, _local7);

            if (this._hookEnabled){

                _local9 = 0;

                _local10 = 0;

                _local11 = this._defaultWidth;

                _local12 = (_local1.height + (this._buffer * 2));

                this.graphics.moveTo((_local9 + this._cornerRadius), _local10);

                this.graphics.lineTo(((_local9 + _local11) - this._cornerRadius), _local10);

                this.graphics.curveTo((_local9 + _local11), _local10, (_local9 + _local11), (_local10 + this._cornerRadius));

                this.graphics.lineTo((_local9 + _local11), ((_local10 + _local12) - this._cornerRadius));

                this.graphics.curveTo((_local9 + _local11), (_local10 + _local12), ((_local9 + _local11) - this._cornerRadius), (_local10 + _local12));

                this.graphics.lineTo(((_local9 + this._hookOffSet) + this._hookSize), (_local10 + _local12));

                this.graphics.lineTo((_local9 + this._hookOffSet), ((_local10 + _local12) + this._hookSize));

                this.graphics.lineTo(((_local9 + this._hookOffSet) - this._hookSize), (_local10 + _local12));

                this.graphics.lineTo((_local9 + this._cornerRadius), (_local10 + _local12));

                this.graphics.curveTo(_local9, (_local10 + _local12), _local9, ((_local10 + _local12) - this._cornerRadius));

                this.graphics.lineTo(_local9, (_local10 + this._cornerRadius));

                this.graphics.curveTo(_local9, _local10, (_local9 + this._cornerRadius), _local10);

                this.graphics.endFill();

            } else {

                this.graphics.drawRoundRect(0, 0, this._defaultWidth, (_local1.height + (this._buffer * 2)), this._cornerRadius, this._cornerRadius);

            };

        }

        private function lighten(_arg1:Number):Number{

            var _local2:Array = [((_arg1 >> 16) & 0xFF), ((_arg1 >> 8) & 0xFF), (_arg1 & 0xFF)];

            var _local3:Number = 60;

            _local2 = [Math.min((_local2[0] + _local3), 0xFF), Math.min((_local2[1] + _local3), 0xFF), Math.min((_local2[2] + _local3), 0xFF)];

            return ((((_local2[0] << 16) | (_local2[1] << 8)) | _local2[2]));

        }

        private function animate(_arg1:Boolean):void{

            if (_arg1){

                this._animationEngine.fadeIn(this, 500);

                this._timer.reset();

            } else {

                this._timer.stop();

                this._tween = this._animationEngine.fadeOut(this, 500, this.onComplete);

            };

        }

        private function onComplete():void{

            if (((this._tween) && (this._tween.canceled))){

                this._tween = null;

                return;

            };

            this._tween = null;

            this.cleanUp();

        }

        private function textGlow(_arg1:TextField):void{

            var _local2:Number = 0;

            var _local3:Number = 0.35;

            var _local4:Number = 2;

            var _local5:Number = 2;

            var _local6:Number = 1;

            var _local7:Boolean;

            var _local8:Boolean;

            var _local9:Number = BitmapFilterQuality.HIGH;

            var _local10:GlowFilter = new GlowFilter(_local2, _local3, _local4, _local5, _local6, _local9, _local7, _local8);

            var _local11:Array = new Array();

            _local11.push(_local10);

            _arg1.filters = _local11;

        }

        private function bgGlow():void{

            var _local1:Number = 0;

            var _local2:Number = 0.2;

            var _local3:Number = 5;

            var _local4:Number = 5;

            var _local5:Number = 1;

            var _local6:Boolean;

            var _local7:Boolean;

            var _local8:Number = BitmapFilterQuality.HIGH;

            var _local9:GlowFilter = new GlowFilter(_local1, _local2, _local3, _local4, _local5, _local8, _local6, _local7);

            var _local10:Array = new Array();

            _local10.push(_local9);

            filters = _local10;

        }

        private function initTitleFormat():void{

            this._titleFormat = new TextFormat();

            this._titleFormat.font = "_sans";

            this._titleFormat.bold = true;

            this._titleFormat.size = 10;

            this._titleFormat.color = this._config.style.tooltipTextColor;

        }

        private function initContentFormat():void{

            this._contentFormat = new TextFormat();

            this._contentFormat.font = "_sans";

            this._contentFormat.bold = false;

            this._contentFormat.size = 12;

            this._contentFormat.color = 0x333333;

        }

        private function isDeviceFont(_arg1:TextFormat):Boolean{

            var _local2:String = _arg1.font;

            var _local3 = "_sans _serif _typewriter";

            return ((_local3.indexOf(_local2) > -1));

        }

        private function setOffset():void{

            switch (this._align){

                case "left":

                    this._offSet = ((-(this._defaultWidth) + (this._buffer * 6)) + this._hookSize);

                    this._hookOffSet = ((this._defaultWidth - (this._buffer * 6)) - this._hookSize);

                    break;

                case "right":

                    this._offSet = ((0 - (this._buffer * 6)) - this._hookSize);

                    this._hookOffSet = ((this._buffer * 6) + this._hookSize);

                    break;

                case "center":

                    this._offSet = -((this._defaultWidth / 2));

                    this._hookOffSet = (this._defaultWidth / 2);

                    break;

                default:

                    this._offSet = -((this._defaultWidth / 2));

                    this._hookOffSet = (this._defaultWidth / 2);

            };

        }

        private function cleanUp():void{

            this.follow(false);

            this.filters = [];

            if (this._tf){

                this._tf.filters = [];

                removeChild(this._tf);

                this._tf = null;

            };

            this.graphics.clear();

            if (((parent) && ((this.parent == parent)))){

                parent.removeChild(this);

            };

        }

        override public function get visible():Boolean{

            if (super.visible){

                return (false);

            };

            return ((this.alpha < this._config.style.tooltipAlpha));

        }



    }

}//package org.flowplayer.controls 

package org.flowplayer.controls {

    import org.flowplayer.controls.config.*;

    import flash.events.*;

    import org.flowplayer.view.*;

    import org.flowplayer.controls.button.*;

    import flash.display.*;

    import flash.text.*;

    import org.flowplayer.util.*;



    public class TimeView extends AbstractSprite {



        public static const EVENT_REARRANGE:String = "onRearrange";



        private var _config:Config;

        private var _top:DisplayObject;

        private var _bottom:DisplayObject;

        private var _left:DisplayObject;

        private var _right:DisplayObject;

        private var _timeText:TextField;

        private var _durationText:TextField;

        private var _prevTextLength:Number;

        private var _player:Flowplayer;



        public function TimeView(_arg1:Config, _arg2:Flowplayer){

            this._prevTextLength = "00:00".length;

            super();

            this._config = _arg1;

            this._player = _arg2;

            this.createTimeText();

            this.createDurationText();

            this._left = addChild(SkinClasses.getTimeLeft());

            this._right = addChild(SkinClasses.getTimeRight());

            this._top = addChild(SkinClasses.getTimeTop());

            this._bottom = addChild(SkinClasses.getTimeBottom());

            this.duration = 0;

            this.time = 0;

        }

        private function get borderRadius():Number{

            return (((this._config.style.timeBorderRadius >= 0)) ? this._config.style.timeBorderRadius : Math.floor((height / 2)));

        }

        override public function get name():String{

            return ("time");

        }

        public function redraw(_arg1:Config):void{

            this._timeText.textColor = _arg1.style.timeColor;

            this._timeText.alpha = _arg1.style.timeAlpha;

            if (this._durationText){

                this._durationText.textColor = _arg1.style.durationColor;

                this._durationText.alpha = _arg1.style.durationAlpha;

            };

            this.drawBackground();

        }

        public function set time(_arg1:Number):void{

            this._timeText.text = TimeUtil.formatSeconds(_arg1);

            if (this._durationText){

                this._timeText.appendText((this._config.style.timeSeparator) ? this._config.style.timeSeparator : "/");

            };

            this.onResize();

            var _local2:Number = (this._timeText.text.length + (this._durationText) ? this._durationText.text.length : 0);

            if (_local2 != this._prevTextLength){

                dispatchEvent(new Event(EVENT_REARRANGE));

            };

            this._prevTextLength = _local2;

        }

        public function set duration(_arg1:Number):void{

            var _local2:String;

            if ((((_arg1 == -1)) && (this._durationText))){

                removeChild(this._durationText);

                this._durationText = null;

                this.onResize();

                dispatchEvent(new Event(EVENT_REARRANGE));

                return;

            };

            if ((((_arg1 > 0)) && (!(this._durationText)))){

                this.createDurationText();

                this.onResize();

                dispatchEvent(new Event(EVENT_REARRANGE));

            };

            if (this._durationText){

                _local2 = TimeUtil.formatSeconds(_arg1);

                if (_local2 == this._durationText.text){

                    return;

                };

                this.resizeFont(_local2.length);

                this._durationText.text = _local2;

            };

        }

        private function resizeFont(_arg1:int):void{

            var _local2:Number = ((_arg1 > "00:00".length)) ? 9 : 11;

            _local2 = (this._config.style.timeFontSize) ? this._config.style.timeFontSize : _local2;

            this.initField(this._durationText, this._config.style.durationColor, this._config.style.durationAlpha, _local2);

            this.initField(this._timeText, this._config.style.timeColor, this._config.style.timeAlpha, _local2);

            this.onResize();

        }

        override protected function onResize():void{

            this._left.y = this._top.height;

            this._left.height = ((height - this._top.height) - this._bottom.height);

            this._timeText.x = ((this._left.width - (this.borderRadius / 2)) + Math.max(this.borderRadius, 2));

            Arrange.center(this._timeText, 0, height);

            if (this._durationText){

                this._durationText.x = ((this._timeText.x + this._timeText.textWidth) + 2);

                Arrange.center(this._durationText, 0, height);

            };

            this.drawBackground();

            this._top.x = 0;

            this._top.width = width;

            this._right.x = (width - this._right.width);

            this._right.y = this._top.height;

            this._right.height = ((height - this._top.height) - this._bottom.height);

            this._bottom.x = 0;

            this._bottom.width = width;

            this._bottom.y = (height - this._bottom.height);

        }

        private function drawBackground():void{

            graphics.clear();

            if ((((this._config.style.timeBorderWidth > 0)) && ((this._config.style.timeBorderAlpha > 0)))){

                graphics.lineStyle(this._config.style.timeBorderWidth, this._config.style.timeBorderColor, this._config.style.timeBorderAlpha);

            };

            graphics.beginFill(this._config.style.timeBgColor, ((this._config.style.timeBgColor >= 0)) ? this._config.style.timeBgAlpha : 0);

            var _local1:Number = ((this._timeText.textWidth + (Math.max(this.borderRadius, 2) * 2)) + 6);

            if (this._durationText){

                _local1 = (_local1 + this._durationText.textWidth);

            };

            var _local2:Number = (height * this._config.style.timeBgHeightRatio);

            graphics.drawRoundRect(this._left.width, ((height / 2) - (_local2 / 2)), (_local1 - this.borderRadius), _local2, this.borderRadius, this.borderRadius);

            graphics.endFill();

            _width = (((_local1 - this.borderRadius) + this._left.width) + this._right.width);

        }

        private function createDurationText():void{

            this._durationText = this._player.createTextField();

            this.initField(this._durationText, this._config.style.durationColor, this._config.style.durationAlpha);

            addChild(this._durationText);

        }

        private function createTimeText():void{

            this._timeText = this._player.createTextField();

            this.initField(this._timeText, this._config.style.timeColor, this._config.style.timeAlpha);

            addChild(this._timeText);

        }

        private function initField(_arg1:TextField, _arg2:Number, _arg3:Number, _arg4:Number=13):void{

            if (!_arg1){

                return;

            };

            _arg1.textColor = _arg2;

            _arg1.selectable = false;

            _arg1.autoSize = TextFieldAutoSize.LEFT;

            _arg1.blendMode = BlendMode.LAYER;

            _arg1.alpha = _arg3;

            var _local5:TextFormat = _arg1.defaultTextFormat;

            _local5.size = _arg4;

            _arg1.defaultTextFormat = _local5;

        }



    }

}//package org.flowplayer.controls 

package org.flowplayer.controls.button {

    import org.flowplayer.controls.config.*;

    import org.flowplayer.view.*;

    import flash.display.*;



    public class TogglePlayButton extends AbstractToggleButton {



        public function TogglePlayButton(_arg1:Config, _arg2:AnimationEngine){

            super(_arg1, _arg2);

        }

        override public function get name():String{

            return ("play");

        }

        override protected function createUpStateFace():DisplayObjectContainer{

            return (DisplayObjectContainer(SkinClasses.getPlayButton()));

        }

        override protected function createDownStateFace():DisplayObjectContainer{

            return (DisplayObjectContainer(SkinClasses.getPauseButton()));

        }

        override protected function get tooltipLabel():String{

            if (!config.tooltips){

                return (null);

            };

            return ((isDown) ? config.tooltips.pause : config.tooltips.play);

        }



    }

}//package org.flowplayer.controls.button 

package org.flowplayer.controls.button {

    import org.flowplayer.controls.config.*;

    import flash.events.*;

    import org.flowplayer.view.*;

    import flash.display.*;

    import org.flowplayer.controls.*;

    import flash.geom.*;



    public class AbstractButton extends AbstractSprite {



        protected static const HIGHLIGHT_INSTANCE_NAME:String = "mOver";



        private var _config:Config;

        private var _top:DisplayObject;

        private var _bottom:DisplayObject;

        private var _left:DisplayObject;

        private var _right:DisplayObject;

        private var _face:DisplayObjectContainer;

        private var _tooltip:ToolTip;

        private var _animationEngine:AnimationEngine;



        public function AbstractButton(_arg1:Config, _arg2:AnimationEngine){

            this._config = _arg1;

            this._animationEngine = _arg2;

            this._face = DisplayObjectContainer(this.addFaceIfNotNull(this.createFace()));

            this._left = DisplayObjectContainer(this.addFaceIfNotNull(this.getButtonLeft()));

            this._right = DisplayObjectContainer(this.addFaceIfNotNull(this.getButtonRight()));

            this._top = DisplayObjectContainer(this.addFaceIfNotNull(this.getButtonTop()));

            this._bottom = DisplayObjectContainer(this.addFaceIfNotNull(this.getButtonBottom()));

            this.enabled = true;

            addEventListener(Event.ADDED_TO_STAGE, this.onAddedToStage);

        }

        protected function getButtonLeft():DisplayObject{

            return (SkinClasses.getButtonLeft());

        }

        protected function getButtonRight():DisplayObject{

            return (SkinClasses.getButtonRight());

        }

        protected function getButtonTop():DisplayObject{

            return (SkinClasses.getButtonTop());

        }

        protected function getButtonBottom():DisplayObject{

            return (SkinClasses.getButtonBottom());

        }

        public function addFaceIfNotNull(_arg1:DisplayObject):DisplayObject{

            if (!_arg1){

                return (_arg1);

            };

            return (addChild(_arg1));

        }

        override protected function onResize():void{

            this.resizeFace();

            this._left.x = 0;

            this._left.y = this._top.height;

            this._left.height = ((height - this._top.height) - this._bottom.height);

            this._top.x = 0;

            this._top.y = 0;

            this._top.width = ((this.faceWidth + this._left.width) + this._right.width);

            this._right.x = (this._left.width + this.faceWidth);

            this._right.y = this._top.height;

            this._right.height = ((height - this._top.height) - this._bottom.height);

            this._bottom.x = 0;

            this._bottom.y = (height - this.bottomEdge);

            this._bottom.width = ((this.faceWidth + this._left.width) + this._right.width);

            _height = ((this.topEdge + this.faceHeight) + this.bottomEdge);

            _width = ((this.leftEdge + this.faceWidth) + this.rightEdge);

        }

        protected function resizeFace():void{

            if (!this._face){

                return;

            };

            this._face.x = this._left.width;

            this._face.y = this._top.height;

            this._face.height = ((height - this.topEdge) - this.bottomEdge);

            this._face.scaleX = this._face.scaleY;

        }

        protected function get faceWidth():Number{

            return (this._face.width);

        }

        protected function get faceHeight():Number{

            return (this._face.height);

        }

        protected function get rightEdge():Number{

            return (this._right.width);

        }

        protected function get leftEdge():Number{

            return (this._left.width);

        }

        protected function get topEdge():Number{

            return (this._top.height);

        }

        protected function get bottomEdge():Number{

            return (this._bottom.height);

        }

        private function onAddedToStage(_arg1:Event):void{

            this.toggleTooltip();

            this.onMouseOut();

        }

        private function toggleTooltip():void{

            if (this.tooltipLabel){

                if (((this._tooltip) && ((this._tooltip is DefaultToolTip)))){

                    return;

                };

                log.debug("enabling tooltip");

                this._tooltip = new DefaultToolTip(this._config, this._animationEngine);

            } else {

                log.debug("tooltip disabled");

                this._tooltip = new NullToolTip();

            };

        }

        public function redraw(_arg1:Config):void{

            this._config = _arg1;

            this.onMouseOut();

            this.toggleTooltip();

            this._tooltip.redraw(_arg1);

        }

        public function set enabled(_arg1:Boolean):void{

            buttonMode = _arg1;

            var _local2:String = (_arg1) ? "addEventListener" : "removeEventListener";

            var _local3 = this;

            _local3[_local2](MouseEvent.ROLL_OVER, this.onMouseOver);

            _local3 = this;

            _local3[_local2](MouseEvent.ROLL_OUT, this.onMouseOut);

            _local3 = this;

            _local3[_local2](Event.MOUSE_LEAVE, this.onMouseOut);

            _local3 = this;

            _local3[_local2](MouseEvent.MOUSE_DOWN, this.onMouseDown);

            _local3 = this;

            _local3[_local2](MouseEvent.CLICK, this.onClicked);

            alpha = (_arg1) ? 1 : 0.5;

            this.doEnable(_arg1);

        }

        protected function doEnable(_arg1:Boolean):void{

        }

        private function transformColor(_arg1:DisplayObject, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Number):void{

            log.debug("transformColor");

            if (!_arg1){

                return;

            };

            var _local6:ColorTransform = new ColorTransform(0, 0, 0, _arg5, _arg2, _arg3, _arg4, 0);

            _arg1.transform.colorTransform = _local6;

        }

        protected function onMouseOut(_arg1:MouseEvent=null):void{

            log.debug("onMouseOut");

            this.hideTooltip();

            this.showMouseOutState(this._face);

            this.resetDispColor(this._face.getChildByName(HIGHLIGHT_INSTANCE_NAME));

        }

        protected function onMouseOver(_arg1:MouseEvent):void{

            log.debug(("onMouseOver" + this._face.getChildByName(HIGHLIGHT_INSTANCE_NAME)));

            this.showTooltip();

            this.showMouseOverState(this._face);

            this.transformDispColor(this._face.getChildByName(HIGHLIGHT_INSTANCE_NAME));

        }

        protected function showMouseOverState(_arg1:DisplayObjectContainer):void{

            log.debug(("showMouseOverState " + _arg1));

            if ((_arg1 is MovieClip)){

                log.debug(("calling play() on " + _arg1));

                if (MovieClip(_arg1).currentFrame == 1){

                    MovieClip(_arg1).play();

                };

            };

            var _local2:DisplayObject = _arg1.getChildByName(HIGHLIGHT_INSTANCE_NAME);

            if (((_local2) && ((_local2 is MovieClip)))){

                MovieClip(_local2).gotoAndPlay("over");

            };

        }

        protected function showMouseOutState(_arg1:DisplayObjectContainer):void{

            if ((_arg1 is MovieClip)){

                log.debug(("calling gotoAndStop(1) on " + _arg1));

                MovieClip(_arg1).gotoAndStop(1);

            };

            var _local2:DisplayObject = _arg1.getChildByName(HIGHLIGHT_INSTANCE_NAME);

            if (((_local2) && ((_local2 is MovieClip)))){

                MovieClip(_local2).gotoAndStop(1);

            };

        }

        protected function hideTooltip():void{

            this._tooltip.hide();

        }

        protected function showTooltip():void{

            if (!this.tooltipLabel){

                this.hideTooltip();

            };

            this.toggleTooltip();

            this._tooltip.show(this, this.tooltipLabel);

        }

        protected function get tooltipLabel():String{

            return (null);

        }

        protected function transformDispColor(_arg1:DisplayObject):void{

            log.debug("mouse over colors", this._config.style.buttonOverColorRGBA);

            this.transformColor(_arg1, this._config.style.buttonOverColorRGBA[0], this._config.style.buttonOverColorRGBA[1], this._config.style.buttonOverColorRGBA[2], this._config.style.buttonOverColorRGBA[3]);

        }

        protected function resetDispColor(_arg1:DisplayObject):void{

            log.debug("normal colors", this._config.style.buttonColorRGBA);

            this.transformColor(_arg1, this._config.style.buttonColorRGBA[0], this._config.style.buttonColorRGBA[1], this._config.style.buttonColorRGBA[2], this._config.style.buttonColorRGBA[3]);

        }

        protected function createFace():DisplayObjectContainer{

            return (null);

        }

        final protected function get config():Config{

            return (this._config);

        }

        protected function onClicked(_arg1:MouseEvent):void{

            log.debug("clicked!");

            dispatchEvent(new ButtonEvent(ButtonEvent.CLICK));

            this.showTooltip();

        }

        protected function onMouseDown(_arg1:MouseEvent):void{

            var _local2:DisplayObject = this._face.getChildByName(HIGHLIGHT_INSTANCE_NAME);

            if (((_local2) && ((_local2 is MovieClip)))){

                MovieClip(_local2).gotoAndPlay("down");

            };

        }



    }

}//package org.flowplayer.controls.button 

package org.flowplayer.controls.button {

    import org.flowplayer.controls.config.*;

    import org.flowplayer.view.*;

    import flash.display.*;



    public class DraggerButton extends AbstractButton {



        public function DraggerButton(_arg1:Config, _arg2:AnimationEngine){

            super(_arg1, _arg2);

        }

        protected function isToolTipEnabled():Boolean{

            return (false);

        }

        override public function get name():String{

            return ("dragger");

        }

        override protected function createFace():DisplayObjectContainer{

            return (SkinClasses.getDragger());

        }

        override protected function getButtonLeft():DisplayObject{

            return (new Sprite());

        }

        override protected function getButtonRight():DisplayObject{

            return (new Sprite());

        }

        override protected function getButtonTop():DisplayObject{

            return (new Sprite());

        }

        override protected function getButtonBottom():DisplayObject{

            return (new Sprite());

        }



    }

}//package org.flowplayer.controls.button 

package org.flowplayer.controls.button {

    import flash.display.*;

    import flash.system.*;

    import flash.utils.*;

    import org.flowplayer.util.*;

    import fp.*;



    public class SkinClasses {



        private static var log:Log = new Log("org.flowplayer.controls.button::SkinClasses");

        private static var _skinClasses:ApplicationDomain;



        private var slowMotionFwd:SlowMotionFwdButton;

        private var slowMotionBwd:SlowMotionBwdButton;

        private var slowMotionFFwd:SlowMotionFFwdButton;

        private var slowMotionFBwd:SlowMotionFBwdButton;

        private var foo:FullScreenOnButton;

        private var bar:FullScreenOffButton;

        private var next:NextButton;

        private var prev:PrevButton;

        private var dr:Dragger;

        private var pause:PauseButton;

        private var play:PlayButton;

        private var stop:StopButton;

        private var vol:MuteButton;

        private var volOff:UnMuteButton;

        private var scrubberLeft:ScrubberLeftEdge;

        private var scrubberRight:ScrubberRightEdge;

        private var scrubberTop:ScrubberTopEdge;

        private var scrubberBottom:ScrubberBottomEdge;

        private var buttonLeft:ButtonLeftEdge;

        private var buttomRight:ButtonRightEdge;

        private var buttomTop:ButtonTopEdge;

        private var buttonBottom:ButtonBottomEdge;

        private var timeLeft:TimeLeftEdge;

        private var timeRight:TimeRightEdge;

        private var timeTop:TimeTopEdge;

        private var timeBottom:TimeBottomEdge;

        private var volumeLeft:VolumeLeftEdge;

        private var volumeRight:VolumeRightEdge;

        private var volumeTop:VolumeTopEdge;

        private var volumeBottom:VolumeBottomEdge;

        private var defaults:SkinDefaults;



        public static function getDisplayObject(_arg1:String):DisplayObject{

            var _local2:Class = getClass(_arg1);

            return ((new (_local2) as DisplayObject));

        }

        public static function getClass(_arg1:String):Class{

            log.debug((("creating skin class " + _arg1) + (_skinClasses) ? "from skin swf" : ""));

            if (_skinClasses){

                return ((_skinClasses.getDefinition(_arg1) as Class));

            };

            return ((getDefinitionByName(_arg1) as Class));

        }

        public static function get defaults():Object{

            var clazz:* = null;

            try {

                clazz = getClass("SkinDefaults");

                return (clazz["values"]);

            } catch(e:Error) {

            };

            return (null);

        }

        public static function getSpaceBeforeFirstWidget():Number{

            var clazz:* = null;

            try {

                clazz = getClass("SkinDefaults");

                return (clazz["getSpaceBeforeFirstWidget"]());

            } catch(e:Error) {

            };

            return (0);

        }

        public static function get margins():Array{

            var clazz:* = null;

            try {

                clazz = getClass("SkinDefaults");

                return (clazz["margins"]);

            } catch(e:Error) {

            };

            return ([0, 0, 0, 0]);

        }

        public static function getSpaceAfterWidget(_arg1:DisplayObject, _arg2:Boolean):Number{

            var clazz:* = null;

            var widget:* = _arg1;

            var lastOnRight:* = _arg2;

            try {

                clazz = getClass("SkinDefaults");

                return (clazz["getSpaceAfterWidget"](widget, lastOnRight));

            } catch(e:Error) {

            };

            return (0);

        }

        public static function getScrubberRightEdgeWidth(_arg1:DisplayObject):Number{

            var clazz:* = null;

            var nextWidgetToRight:* = _arg1;

            try {

                clazz = getClass("SkinDefaults");

                return (clazz["getScrubberRightEdgeWidth"](nextWidgetToRight));

            } catch(e:Error) {

            };

            return (0);

        }

        public static function getVolumeSliderWidth():Number{

            var clazz:* = null;

            try {

                clazz = getClass("SkinDefaults");

                return (clazz["getVolumeSliderWidth"]());

            } catch(e:Error) {

            };

            return (40);

        }

        public static function set skinClasses(_arg1:ApplicationDomain):void{

            log.debug(("received skin classes " + _arg1));

            _skinClasses = _arg1;

        }

        public static function getScrubberLeftEdge():DisplayObject{

            return (getDisplayObject("fp.ScrubberLeftEdge"));

        }

        public static function getScrubberRightEdge():DisplayObject{

            return (getDisplayObject("fp.ScrubberRightEdge"));

        }

        public static function getScrubberTopEdge():DisplayObject{

            return (getDisplayObject("fp.ScrubberTopEdge"));

        }

        public static function getScrubberBottomEdge():DisplayObject{

            return (getDisplayObject("fp.ScrubberBottomEdge"));

        }

        public static function getFullScreenOnButton():DisplayObject{

            return (getDisplayObject("fp.FullScreenOnButton"));

        }

        public static function getFullScreenOffButton():DisplayObject{

            return (getDisplayObject("fp.FullScreenOffButton"));

        }

        public static function getPlayButton():DisplayObject{

            return (getDisplayObject("fp.PlayButton"));

        }

        public static function getPauseButton():DisplayObject{

            return (getDisplayObject("fp.PauseButton"));

        }

        public static function getMuteButton():DisplayObject{

            return (getDisplayObject("fp.MuteButton"));

        }

        public static function getUnmuteButton():DisplayObject{

            return (getDisplayObject("fp.UnMuteButton"));

        }

        public static function getNextButton():DisplayObjectContainer{

            return (DisplayObjectContainer(getDisplayObject("fp.NextButton")));

        }

        public static function getPrevButton():DisplayObjectContainer{

            return (DisplayObjectContainer(getDisplayObject("fp.PrevButton")));

        }

        public static function getSlowMotionFwdButton():DisplayObjectContainer{

            return (DisplayObjectContainer(getDisplayObject("fp.SlowMotionFwdButton")));

        }

        public static function getSlowMotionBwdButton():DisplayObjectContainer{

            return (DisplayObjectContainer(getDisplayObject("fp.SlowMotionBwdButton")));

        }

        public static function getSlowMotionFFwdButton():DisplayObjectContainer{

            return (DisplayObjectContainer(getDisplayObject("fp.SlowMotionFFwdButton")));

        }

        public static function getSlowMotionFBwdButton():DisplayObjectContainer{

            return (DisplayObjectContainer(getDisplayObject("fp.SlowMotionFBwdButton")));

        }

        public static function getStopButton():DisplayObjectContainer{

            return (DisplayObjectContainer(getDisplayObject("fp.StopButton")));

        }

        public static function getButtonLeft():DisplayObject{

            return (getDisplayObject("fp.ButtonLeftEdge"));

        }

        public static function getButtonRight():DisplayObject{

            return (getDisplayObject("fp.ButtonRightEdge"));

        }

        public static function getButtonTop():DisplayObject{

            return (getDisplayObject("fp.ButtonTopEdge"));

        }

        public static function getButtonBottom():DisplayObject{

            return (getDisplayObject("fp.ButtonBottomEdge"));

        }

        public static function getTimeLeft():DisplayObject{

            return (getDisplayObject("fp.TimeLeftEdge"));

        }

        public static function getTimeRight():DisplayObject{

            return (getDisplayObject("fp.TimeRightEdge"));

        }

        public static function getTimeTop():DisplayObject{

            return (getDisplayObject("fp.TimeTopEdge"));

        }

        public static function getTimeBottom():DisplayObject{

            return (getDisplayObject("fp.TimeBottomEdge"));

        }

        public static function getVolumeLeft():DisplayObject{

            return (getDisplayObject("fp.VolumeLeftEdge"));

        }

        public static function getVolumeRight():DisplayObject{

            return (getDisplayObject("fp.VolumeRightEdge"));

        }

        public static function getVolumeTop():DisplayObject{

            return (getDisplayObject("fp.VolumeTopEdge"));

        }

        public static function getVolumeBottom():DisplayObject{

            return (getDisplayObject("fp.VolumeBottomEdge"));

        }

        public static function getDragger():DisplayObjectContainer{

            return ((getDisplayObject("fp.Dragger") as DisplayObjectContainer));

        }



    }

}//package org.flowplayer.controls.button 

package org.flowplayer.controls.button {

    import flash.events.*;



    public class ButtonEvent extends Event {



        public static const CLICK:String = "flowclick";



        public function ButtonEvent(_arg1:String, _arg2:Boolean=false, _arg3:Boolean=true){

            super(_arg1, _arg2, _arg3);

        }

        override public function clone():Event{

            return (new ButtonEvent(type, bubbles, cancelable));

        }

        override public function toString():String{

            return (formatToString("ButtonEvent", "type"));

        }



    }

}//package org.flowplayer.controls.button 

package org.flowplayer.controls.button {

    import org.flowplayer.controls.config.*;

    import flash.events.*;

    import org.flowplayer.view.*;

    import flash.display.*;



    public class ToggleFullScreenButton extends AbstractToggleButton {



        public function ToggleFullScreenButton(_arg1:Config, _arg2:AnimationEngine){

            super(_arg1, _arg2);

        }

        override public function get name():String{

            return ("fullscreen");

        }

        override protected function createUpStateFace():DisplayObjectContainer{

            log.debug("createUpStateFace");

            return (DisplayObjectContainer(SkinClasses.getFullScreenOnButton()));

        }

        override protected function createDownStateFace():DisplayObjectContainer{

            log.debug("createDownStateFace");

            return (DisplayObjectContainer(SkinClasses.getFullScreenOffButton()));

        }

        override protected function onClicked(_arg1:MouseEvent):void{

            super.onClicked(_arg1);

            onMouseOut();

        }

        override protected function get tooltipLabel():String{

            if (!config.tooltips){

                return (null);

            };

            return ((isDown) ? config.tooltips.fullscreenExit : config.tooltips.fullscreen);

        }



    }

}//package org.flowplayer.controls.button 

package org.flowplayer.controls.button {

    import org.flowplayer.controls.config.*;

    import org.flowplayer.view.*;

    import flash.display.*;



    public class SlowMotionBwdButton extends AbstractButton {



        public function SlowMotionBwdButton(_arg1:Config, _arg2:AnimationEngine){

            super(_arg1, _arg2);

        }

        override public function get name():String{

            return ("slowMotionBwd");

        }

        override protected function createFace():DisplayObjectContainer{

            return (SkinClasses.getSlowMotionBwdButton());

        }

        override protected function get tooltipLabel():String{

            return (config.tooltips.slowMotionBwd);

        }



    }

}//package org.flowplayer.controls.button 

package org.flowplayer.controls.button {

    import org.flowplayer.controls.config.*;

    import flash.events.*;

    import org.flowplayer.view.*;

    import flash.display.*;



    public class ToggleVolumeMuteButton extends AbstractToggleButton {



        public function ToggleVolumeMuteButton(_arg1:Config, _arg2:AnimationEngine){

            super(_arg1, _arg2);

            addEventListener(Event.ADDED_TO_STAGE, this.onAddedToStage);

        }

        override public function get name():String{

            return ("mute");

        }

        private function onAddedToStage(_arg1:Event):void{

            log.debug("adding hit area");

            var _local2:Sprite = new Sprite();

            _local2.graphics.beginFill(0, 0);

            _local2.graphics.drawRect(0, 0, _upStateFace.width, _upStateFace.height);

            _local2.graphics.endFill();

            _local2.mouseEnabled = false;

            addChild(_local2);

            hitArea = _local2;

        }

        override protected function createUpStateFace():DisplayObjectContainer{

            return (DisplayObjectContainer(SkinClasses.getMuteButton()));

        }

        override protected function createDownStateFace():DisplayObjectContainer{

            return (DisplayObjectContainer(SkinClasses.getUnmuteButton()));

        }

        override protected function get tooltipLabel():String{

            if (!config.tooltips){

                return (null);

            };

            return ((isDown) ? config.tooltips.unmute : config.tooltips.mute);

        }



    }

}//package org.flowplayer.controls.button 

package org.flowplayer.controls.button {

    import org.flowplayer.controls.config.*;

    import org.flowplayer.view.*;

    import flash.display.*;



    public class SlowMotionFBwdButton extends AbstractButton {



        public function SlowMotionFBwdButton(_arg1:Config, _arg2:AnimationEngine){

            super(_arg1, _arg2);

        }

        override public function get name():String{

            return ("slowMotionFBwd");

        }

        override protected function createFace():DisplayObjectContainer{

            return (SkinClasses.getSlowMotionFBwdButton());

        }

        override protected function get tooltipLabel():String{

            return (config.tooltips.slowMotionFBwd);

        }



    }

}//package org.flowplayer.controls.button 

package org.flowplayer.controls.button {

    import org.flowplayer.controls.config.*;

    import org.flowplayer.view.*;

    import flash.display.*;



    public class PrevButton extends AbstractButton {



        public function PrevButton(_arg1:Config, _arg2:AnimationEngine){

            super(_arg1, _arg2);

        }

        override public function get name():String{

            return ("prev");

        }

        override protected function createFace():DisplayObjectContainer{

            return (SkinClasses.getPrevButton());

        }

        override protected function get tooltipLabel():String{

            return (config.tooltips.previous);

        }



    }

}//package org.flowplayer.controls.button 

package org.flowplayer.controls.button {

    import org.flowplayer.controls.config.*;

    import org.flowplayer.view.*;

    import flash.display.*;



    public class SlowMotionFwdButton extends AbstractButton {



        public function SlowMotionFwdButton(_arg1:Config, _arg2:AnimationEngine){

            super(_arg1, _arg2);

        }

        override public function get name():String{

            return ("slowMotionFwd");

        }

        override protected function createFace():DisplayObjectContainer{

            return (SkinClasses.getSlowMotionFwdButton());

        }

        override protected function get tooltipLabel():String{

            return (config.tooltips.slowMotionFwd);

        }



    }

}//package org.flowplayer.controls.button 

package org.flowplayer.controls.button {

    import org.flowplayer.controls.config.*;

    import org.flowplayer.view.*;

    import flash.display.*;



    public class StopButton extends AbstractButton {



        public function StopButton(_arg1:Config, _arg2:AnimationEngine){

            super(_arg1, _arg2);

        }

        override public function get name():String{

            return ("stop");

        }

        override protected function createFace():DisplayObjectContainer{

            return (SkinClasses.getStopButton());

        }

        override protected function get tooltipLabel():String{

            return (config.tooltips.stop);

        }



    }

}//package org.flowplayer.controls.button 

package org.flowplayer.controls.button {

    import org.flowplayer.controls.config.*;

    import flash.events.*;

    import org.flowplayer.view.*;

    import flash.display.*;



    public class AbstractToggleButton extends AbstractButton {



        protected var _upStateFace:DisplayObjectContainer;

        protected var _downStateFace:DisplayObjectContainer;



        public function AbstractToggleButton(_arg1:Config, _arg2:AnimationEngine){

            super(_arg1, _arg2);

            this._downStateFace = this.createDownStateFace();

            this._upStateFace = this.createUpStateFace();

            addChild(this._upStateFace);

        }

        override protected function resizeFace():void{

            this.resize(this._downStateFace);

            this.resize(this._upStateFace);

        }

        override protected function get faceWidth():Number{

            return (this._upStateFace.width);

        }

        override protected function get faceHeight():Number{

            return (this._upStateFace.height);

        }

        private function resize(_arg1:DisplayObject):void{

            _arg1.x = leftEdge;

            _arg1.y = topEdge;

            _arg1.height = ((height - topEdge) - bottomEdge);

            _arg1.scaleX = _arg1.scaleY;

        }

        override protected function onMouseOut(_arg1:MouseEvent=null):void{

            resetDispColor(this._upStateFace.getChildByName(HIGHLIGHT_INSTANCE_NAME));

            resetDispColor(this._downStateFace.getChildByName(HIGHLIGHT_INSTANCE_NAME));

            hideTooltip();

            showMouseOutState(this._upStateFace);

            showMouseOutState(this._downStateFace);

        }

        override protected function onMouseOver(_arg1:MouseEvent):void{

            transformDispColor(this._upStateFace.getChildByName(HIGHLIGHT_INSTANCE_NAME));

            transformDispColor(this._downStateFace.getChildByName(HIGHLIGHT_INSTANCE_NAME));

            showTooltip();

            showMouseOverState(this._upStateFace);

            showMouseOverState(this._downStateFace);

        }

        override protected function onMouseDown(_arg1:MouseEvent):void{

            var _local2:DisplayObject = this._upStateFace.getChildByName(HIGHLIGHT_INSTANCE_NAME);

            if (((_local2) && ((_local2 is MovieClip)))){

                MovieClip(_local2).gotoAndPlay("down");

            };

            _local2 = this._downStateFace.getChildByName(HIGHLIGHT_INSTANCE_NAME);

            if (((_local2) && ((_local2 is MovieClip)))){

                MovieClip(_local2).gotoAndPlay("down");

            };

        }

        public function get isDown():Boolean{

            return (!((getChildByName(this._downStateFace.name) == null)));

        }

        public function set down(_arg1:Boolean):void{

            if (this.isDown == _arg1){

                return;

            };

            removeChild((_arg1) ? this._upStateFace : this._downStateFace);

            addChild((_arg1) ? this._downStateFace : this._upStateFace);

        }

        protected function createUpStateFace():DisplayObjectContainer{

            return (null);

        }

        protected function createDownStateFace():DisplayObjectContainer{

            return (null);

        }

        override protected function createFace():DisplayObjectContainer{

            return (null);

        }



    }

}//package org.flowplayer.controls.button 

package org.flowplayer.controls.button {

    import org.flowplayer.controls.config.*;

    import org.flowplayer.view.*;

    import flash.display.*;



    public class SlowMotionFFwdButton extends AbstractButton {



        public function SlowMotionFFwdButton(_arg1:Config, _arg2:AnimationEngine){

            super(_arg1, _arg2);

        }

        override public function get name():String{

            return ("slowMotionFFwd");

        }

        override protected function createFace():DisplayObjectContainer{

            return (SkinClasses.getSlowMotionFFwdButton());

        }

        override protected function get tooltipLabel():String{

            return (config.tooltips.slowMotionFFwd);

        }



    }

}//package org.flowplayer.controls.button 

package org.flowplayer.controls.button {

    import org.flowplayer.controls.config.*;

    import org.flowplayer.view.*;

    import flash.display.*;



    public class NextButton extends AbstractButton {



        public function NextButton(_arg1:Config, _arg2:AnimationEngine){

            super(_arg1, _arg2);

        }

        override public function get name():String{

            return ("next");

        }

        override protected function createFace():DisplayObjectContainer{

            return (SkinClasses.getNextButton());

        }

        override protected function get tooltipLabel():String{

            return (config.tooltips.next);

        }



    }

}//package org.flowplayer.controls.button 

package org.flowplayer.controls {

    import org.flowplayer.controls.config.*;

    import flash.display.*;



    public interface ToolTip {



        function set text(_arg1:String):void;

        function redraw(_arg1:Config):void;

        function show(_arg1:DisplayObject, _arg2:String, _arg3:Boolean=false, _arg4:String=null):void;

        function hide():void;

        function get visible():Boolean;



    }

}//package org.flowplayer.controls 

package org.flowplayer.controls.slider {

    import org.flowplayer.controls.config.*;

    import flash.events.*;

    import org.flowplayer.view.*;

    import org.flowplayer.model.*;

    import flash.display.*;

    import flash.utils.*;

    import org.flowplayer.util.*;



    public class ScrubberSlider extends AbstractSlider {



        private var _bufferEnd:Number;

        private var _bufferBar:Sprite;

        private var _allowRandomSeek:Boolean;

        private var _seekInProgress:Boolean;

        private var _progressBar:Sprite;

        private var _bufferStart:Number;

        private var _enabled:Boolean = true;

        private var _startDetectTimer:Timer;

        private var _trickPlayTrackTimer:Timer;

        private var _slowMotionInfo:Object;

        private var _currentClip:Clip;



        public function ScrubberSlider(_arg1:Config, _arg2:AnimationEngine, _arg3:DisplayObject){

            super(_arg1, _arg2, _arg3);

            this.lookupPluginAndBindEvent(_arg1.player, "slowmotion", this.onSlowMotionEvent);

            this.lookupPluginAndBindEvent(_arg1.player, "audio", this.onAudioEvent);

            this.createBars();

            this.addPlaylistListeners(_arg1.player.playlist);

        }

        private function lookupPluginAndBindEvent(_arg1:Flowplayer, _arg2:String, _arg3:Function):void{

            var _local4:PluginModel = (_arg1.pluginRegistry.getPlugin(_arg2) as PluginModel);

            if (_local4){

                log.debug(("found plugin " + _local4));

                _local4.onPluginEvent(_arg3);

            };

        }

        public function addPlaylistListeners(_arg1:Playlist):void{

            var playlist:* = _arg1;

            playlist.onStart(this.setSeekDone);

            playlist.onBeforeSeek(this.setSeekBegin);

            playlist.onSeek(this.setSeekDone);

            playlist.onBegin(function (_arg1:ClipEvent):void{

                _currentClip = (_arg1.target as Clip);

            });

            playlist.onStart(this.start);

            playlist.onResume(this.resume);

            playlist.onPause(this.stop);

            playlist.onBufferEmpty(this.stop);

            playlist.onBufferFull(this.start);

            playlist.onStop(this.stopAndRewind);

            playlist.onFinish(this.stopAndRewind);

            playlist.onBeforeSeek(this.beforeSeek);

            playlist.onSeek(this.seek);

        }

        private function onSlowMotionEvent(_arg1:PluginEvent):void{

            log.debug("onSlowMotionEvent()");

            this._slowMotionInfo = _arg1.info2;

            this.stop();

            if (!this.isTrickPlay){

                this.stopTrickPlayTracking();

                this.doStart(this._slowMotionInfo["clip"], this.adjustedTime(_config.player.status.time));

            } else {

                this.startTrickPlayTracking();

            };

        }

        private function onAudioEvent(_arg1:PluginEvent):void{

            log.debug("onAudioEvent()");

            this.stop();

            this.doStart(_config.player.playlist.current);

        }

        private function stopTrickPlayTracking():void{

            if (this._trickPlayTrackTimer){

                this._trickPlayTrackTimer.stop();

            };

        }

        private function startTrickPlayTracking():void{

            this.stopTrickPlayTracking();

            this._trickPlayTrackTimer = new Timer(200);

            this._trickPlayTrackTimer.addEventListener(TimerEvent.TIMER, this.onTrickPlayProgress);

            this._trickPlayTrackTimer.start();

        }

        private function onTrickPlayProgress(_arg1:TimerEvent):void{

            this.updateDraggerPos(_config.player.status.time, (this._slowMotionInfo["clip"] as Clip));

        }

        override protected function onResize():void{

            super.onResize();

            this.drawBufferBar(0, 0);

            this.drawProgressBar(0, 0);

            if (this._currentClip){

                this.stop();

                this.updateDraggerPos(_config.player.status.time, this._currentClip);

                this.doStart(this._currentClip, _config.player.status.time);

            };

        }

        private function beforeSeek(_arg1:ClipEvent):void{

            log.debug("beforeSeek()");

            if (_arg1.isDefaultPrevented()){

                log.debug("Default prevented ");

                this.stop();

                this.updateDraggerPos(_config.player.status.time, (_arg1.target as Clip));

                this.doStart((_arg1.target as Clip), _config.player.status.time);

                return;

            };

            this.updateDraggerPos((_arg1.info as Number), (_arg1.target as Clip));

            this.stop();

            this.drawBufferBar(0, 0);

            this.drawProgressBar(0, 0);

        }

        private function updateDraggerPos(_arg1:Number, _arg2:Clip):void{

            _dragger.x = ((_arg1 / _arg2.duration) * (width - _dragger.width));

        }

        private function seek(_arg1:ClipEvent):void{

            log.debug(((("seek(), isPlaying: " + _config.player.isPlaying()) + ", seek target time is ") + _arg1.info));

            if (!_config.player.isPlaying()){

                return;

            };

            this._currentClip = (_arg1.target as Clip);

            this.doStart(this._currentClip, (_arg1.info as Number));

        }

        private function start(_arg1:ClipEvent):void{

            this._currentClip = (_arg1.target as Clip);

            log.debug(("start() " + this._currentClip));

            if ((((this._currentClip.duration == 0)) && ((this._currentClip.type == ClipType.IMAGE)))){

                return;

            };

            this.stop();

            this.doStart(this._currentClip);

        }

        private function resume(_arg1:ClipEvent):void{

            this._currentClip = (_arg1.target as Clip);

            this.stop();

            this.doStart(this._currentClip);

        }

        private function doStart(_arg1:Clip, _arg2:Number=0):void{

            var time:* = NaN;

            var clip:* = _arg1;

            var startTime:int = _arg2;

            log.debug("doStart()");

            if (this.isTrickPlay){

                return;

            };

            var status:* = _config.player.status;

            time = ((startTime > 0)) ? startTime : status.time;

            if (!_config.player.isPlaying()){

                return;

            };

            if (((this._startDetectTimer) && (this._startDetectTimer.running))){

                return;

            };

            if (animationEngine.hasAnimationRunning(_dragger)){

                return;

            };

            this._startDetectTimer = new Timer(200);

            this._startDetectTimer.addEventListener(TimerEvent.TIMER, function (_arg1:TimerEvent):void{

                var endPos:* = NaN;

                var duration:* = NaN;

                var event:* = _arg1;

                var currentTime:* = _config.player.status.time;

                if (Math.abs((currentTime - time)) > 0.2){

                    _startDetectTimer.stop();

                    endPos = (width - _dragger.width);

                    duration = ((clip.duration - time) * 1000);

                    log.debug(((((("doStart(), starting an animation to x pos " + endPos) + ", the duration is ") + clip.duration) + ", current pos is ") + _dragger.x));

                    updateDraggerPos(currentTime, clip);

                    animationEngine.animateProperty(_dragger, "x", endPos, duration, null, function (_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):Number{

                        return ((((_arg3 * _arg1) / _arg4) + _arg2));

                    });

                };

            });

            this._startDetectTimer.start();

        }

        private function adjustedTime(_arg1:Number):Number{

            if (!this._slowMotionInfo){

                return (_arg1);

            };

            if (this._slowMotionInfo){

                log.debug(("adjustedTime: " + this._slowMotionInfo["adjustedTime"](_arg1)));

                return (this._slowMotionInfo["adjustedTime"](_arg1));

            };

            return (_arg1);

        }

        private function get isTrickPlay():Boolean{

            return (((this._slowMotionInfo) && (this._slowMotionInfo["isTrickPlay"])));

        }

        private function stop(_arg1:ClipEvent=null):void{

            log.debug("stop()");

            if (this._startDetectTimer){

                this._startDetectTimer.stop();

            };

            animationEngine.cancel(_dragger);

        }

        private function stopAndRewind(_arg1:ClipEvent=null):void{

            log.debug("stopAndRewind()");

            animationEngine.cancel(_dragger);

            animationEngine.animateProperty(_dragger, "x", 0, 300);

        }

        override protected function get dispatchOnDrag():Boolean{

            return (false);

        }

        override protected function getClickTargets(_arg1:Boolean):Array{

            this._enabled = _arg1;

            var _local2:Array = [this._bufferBar, this._progressBar];

            if (((!(_arg1)) || (this._allowRandomSeek))){

                _local2.push(this);

            };

            return (_local2);

        }

        override protected function isToolTipEnabled():Boolean{

            return (((_config.tooltips) && (_config.tooltips.scrubber)));

        }

        private function drawBufferBar(_arg1:Number, _arg2:Number):void{

            drawBar(this._bufferBar, _config.style.bufferColor, _config.style.bufferAlpha, _config.style.bufferGradient, _arg1, _arg2);

        }

        private function drawProgressBar(_arg1:Number, _arg2:Number=0):void{

            drawBar(this._progressBar, _config.style.progressColor, _config.style.progressAlpha, _config.style.progressGradient, ((_arg1) || (0)), ((_arg2) || (((_dragger.x + _dragger.width) - 2))));

        }

        override protected function get sliderAlpha():Number{

            return (_config.style.sliderAlpha);

        }

        override protected function get borderWidth():Number{

            return (_config.style.sliderBorderWidth);

        }

        override protected function get borderColor():Number{

            return (_config.style.sliderBorderColor);

        }

        override protected function get borderAlpha():Number{

            return (_config.style.sliderBorderAlpha);

        }

        private function createBars():void{

            this._progressBar = new Sprite();

            addChild(this._progressBar);

            this._bufferBar = new Sprite();

            addChild(this._bufferBar);

            swapChildren(_dragger, this._bufferBar);

        }

        public function set allowRandomSeek(_arg1:Boolean):void{

            this._allowRandomSeek = _arg1;

            if (this._enabled){

                if (_arg1){

                    addEventListener(MouseEvent.MOUSE_DOWN, this.onMouseDown);

                } else {

                    removeEventListener(MouseEvent.MOUSE_DOWN, this.onMouseDown);

                };

                buttonMode = this._allowRandomSeek;

            };

        }

        override function get maxDrag():Number{

            if (this._allowRandomSeek){

                return ((width - _dragger.width));

            };

            return ((this._bufferEnd * (width - _dragger.width)));

        }

        public function setBufferRange(_arg1:Number, _arg2:Number):void{

            this._bufferStart = _arg1;

            this._bufferEnd = Math.min(_arg2, 1);

            this.drawBars();

        }

        override protected function canDragTo(_arg1:Number):Boolean{

            if (this._allowRandomSeek){

                return (true);

            };

            return ((_arg1 < (this._bufferBar.x + this._bufferBar.width)));

        }

        override protected function onDispatchDrag():void{

            this.drawBars();

            this._seekInProgress = true;

        }

        private function drawBars():void{

            if (this._seekInProgress){

                log.debug("drawBars(): seek in progress");

                return;

            };

            if ((_dragger.x + (_dragger.width / 2)) > (this._bufferStart * width)){

                this.drawBufferBar((this._bufferStart * width), (this._bufferEnd * width));

                this.drawProgressBar((this._bufferStart * width));

            } else {

                this._bufferBar.graphics.clear();

                GraphicsUtil.removeGradient(this._bufferBar);

                this._progressBar.graphics.clear();

                GraphicsUtil.removeGradient(this._progressBar);

            };

        }

        private function setSeekBegin(_arg1:ClipEvent):void{

            log.debug("onBeforeSeek");

            this._seekInProgress = !(_arg1.isDefaultPrevented());

        }

        private function setSeekDone(_arg1:ClipEvent):void{

            log.debug(("seek done! target " + _arg1.info));

            this._seekInProgress = false;

        }

        override protected function get allowSetValue():Boolean{

            return (!(this._seekInProgress));

        }

        override public function redraw(_arg1:Config):void{

            super.redraw(_arg1);

            drawBar(this._progressBar, _config.style.progressColor, _config.style.progressAlpha, _config.style.progressGradient, this._progressBar.x, this._progressBar.width);

            drawBar(this._bufferBar, _config.style.bufferColor, _config.style.bufferAlpha, _config.style.bufferGradient, this._bufferBar.x, this._bufferBar.width);

        }

        override protected function get barHeight():Number{

            return (Math.ceil((height * _config.style.scrubberBarHeightRatio)));

        }

        override protected function get sliderGradient():Array{

            return (_config.style.sliderGradient);

        }

        override protected function get sliderColor():Number{

            return (_config.style.sliderColor);

        }

        override protected function get barCornerRadius():Number{

            if (isNaN(_config.style.scrubberBorderRadius)){

                return (super.barCornerRadius);

            };

            return (_config.style.scrubberBorderRadius);

        }

        override protected function onMouseDown(_arg1:MouseEvent):void{

            this.stop();

            super.onMouseDown(_arg1);

        }



    }

}//package org.flowplayer.controls.slider 

package org.flowplayer.controls.slider {

    import org.flowplayer.controls.config.*;

    import flash.events.*;

    import org.flowplayer.view.*;

    import org.flowplayer.controls.button.*;

    import flash.display.*;

    import org.flowplayer.controls.*;

    import flash.utils.*;

    import org.flowplayer.util.*;



    public class AbstractSlider extends AbstractSprite {



        public static const DRAG_EVENT:String = "onDrag";



        protected var _dragger:DraggerButton;

        private var _dragTimer:Timer;

        private var _previousDragEventPos:Number;

        protected var _config:Config;

        private var _animationEngine:AnimationEngine;

        private var _currentPos:Number;

        private var _tooltip:ToolTip;

        private var _tooltipTextFunc:Function;

        private var _controlbar:DisplayObject;

        private var _mouseOver:Boolean;

        private var _border:Sprite;



        public function AbstractSlider(_arg1:Config, _arg2:AnimationEngine, _arg3:DisplayObject){

            this._config = _arg1;

            this._animationEngine = _arg2;

            this._controlbar = _arg3;

            this._dragTimer = new Timer(50);

            this.createDragger();

            this.toggleTooltip();

            addEventListener(Event.ADDED_TO_STAGE, this.onAddedToStage);

            addEventListener(MouseEvent.ROLL_OVER, this.onMouseOver);

            addEventListener(MouseEvent.ROLL_OUT, this.onMouseOut);

        }

        private function onMouseMove(_arg1:MouseEvent):void{

            if (!this._mouseOver){

                return;

            };

            var _local2:String = this.tooltipText;

            if (!this.tooltipText){

                this._tooltip.hide();

            } else {

                if (this._tooltip.visible){

                    this.showTooltip();

                } else {

                    this._tooltip.text = this.tooltipText;

                };

            };

        }

        private function get tooltipText():String{

            if (this._tooltipTextFunc == null){

                return (null);

            };

            return (this._tooltipTextFunc((((mouseX - (this._dragger.width / 2)) / (width - this._dragger.width)) * 100)));

        }

        protected function onMouseOut(_arg1:MouseEvent=null):void{

            log.debug("onMouseOut");

            this.hideTooltip();

            this._mouseOver = false;

            removeEventListener(MouseEvent.MOUSE_MOVE, this.onMouseMove);

        }

        protected function onMouseOver(_arg1:MouseEvent):void{

            log.debug("onMouseOver");

            this.showTooltip();

            this._mouseOver = true;

            addEventListener(MouseEvent.MOUSE_MOVE, this.onMouseMove);

        }

        protected function hideTooltip():void{

            this._tooltip.hide();

        }

        protected function showTooltip():void{

            if (this.tooltipText){

                this._tooltip.show(this, this.tooltipText, true);

            };

        }

        private function toggleTooltip():void{

            if (this.isToolTipEnabled()){

                if (((this._tooltip) && ((this._tooltip is DefaultToolTip)))){

                    return;

                };

                log.debug("enabling tooltip");

                this._tooltip = new DefaultToolTip(this._config, this._animationEngine);

            } else {

                log.debug("tooltip disabled");

                this._tooltip = new NullToolTip();

            };

        }

        protected function isToolTipEnabled():Boolean{

            return (false);

        }

        public function set enabled(_arg1:Boolean):void{

            log.debug(("setting enabled to " + _arg1));

            this._dragTimer.addEventListener(TimerEvent.TIMER, this.dragging);

            var _local2:String = (_arg1) ? "addEventListener" : "removeEventListener";

            var _local3 = this;

            _local3[_local2](MouseEvent.MOUSE_UP, this.onMouseUp);

            _local3 = this._dragger;

            _local3[_local2](MouseEvent.MOUSE_DOWN, this.onMouseDown);

            _local3 = this._dragger;

            _local3[_local2](MouseEvent.MOUSE_UP, this.onMouseUp);

            _local3 = stage;

            _local3[_local2](MouseEvent.MOUSE_UP, this.onMouseUpStage);

            _local3 = stage;

            _local3[_local2](Event.MOUSE_LEAVE, this.onMouseLeaveStage);

            this.toggleClickListeners(_arg1);

            alpha = (_arg1) ? 1 : 0.5;

            this._dragger.buttonMode = _arg1;

        }

        public function get enabled():Boolean{

            return (this._dragger.buttonMode);

        }

        private function onAddedToStage(_arg1:Event):void{

            this.enabled = true;

        }

        private function toggleClickListeners(_arg1:Boolean):void{

            var _local2:Array = this.getClickTargets(_arg1);

            log.debug("click targets", _local2);

            var _local3:Number = 0;

            while (_local3 < _local2.length) {

                if (_arg1){

                    EventDispatcher(_local2[_local3]).addEventListener(MouseEvent.MOUSE_DOWN, this.onMouseDown);

                } else {

                    EventDispatcher(_local2[_local3]).removeEventListener(MouseEvent.MOUSE_DOWN, this.onMouseDown);

                };

                if (_local2[_local3].hasOwnProperty("buttonMode")){

                    _local2[_local3]["buttonMode"] = _arg1;

                };

                _local3++;

            };

        }

        protected function getClickTargets(_arg1:Boolean):Array{

            return ([this]);

        }

        protected function createDragger():void{

            this._dragger = new DraggerButton(this._config, this._animationEngine);

            this._dragger.buttonMode = true;

            addChild(this._dragger);

        }

        private function onMouseUpStage(_arg1:MouseEvent):void{

            if (this._dragTimer.running){

                this.onMouseUp();

            };

            this._dragTimer.stop();

        }

        private function onMouseLeaveStage(_arg1:Event):void{

            this._tooltip.hide();

            if (this._dragTimer.running){

                this.onMouseUp();

            };

            this._dragTimer.stop();

        }

        protected function onMouseUp(_arg1:MouseEvent=null):void{

            log.debug("onMouseUp");

            if (((_arg1) && (!((_arg1.target == this))))){

                return;

            };

            if (((!(this.canDragTo(mouseX))) && ((this._dragger.x > 0)))){

                return;

            };

            this._dragTimer.stop();

            this.dragging();

            this.updateCurrentPosFromDragger();

            if (!this.dispatchOnDrag){

                this.dispatchDragEvent();

            };

        }

        protected function canDragTo(_arg1:Number):Boolean{

            return (true);

        }

        private function updateCurrentPosFromDragger():void{

            this._currentPos = ((this._dragger.x / (width - this._dragger.width)) * 100);

        }

        final protected function get isDragging():Boolean{

            return (this._dragTimer.running);

        }

        protected function onMouseDown(_arg1:MouseEvent):void{

            if (!(_arg1.target) == this){

                return;

            };

            this._dragTimer.start();

        }

        private function dragging(_arg1:TimerEvent=null):void{

            var _local2:Number = (mouseX - (this._dragger.width / 2));

            if (_local2 < 0){

                _local2 = 0;

            };

            if (_local2 > this.maxDrag){

                _local2 = this.maxDrag;

            };

            this._dragger.x = _local2;

            if (Math.abs((this._previousDragEventPos - this._dragger.x)) < 1){

                return;

            };

            this._previousDragEventPos = this._dragger.x;

            if (this.dispatchOnDrag){

                this.updateCurrentPosFromDragger();

                this.dispatchDragEvent();

            };

        }

        private function dispatchDragEvent():void{

            log.debug("dispatching drag event");

            this.onDispatchDrag();

            dispatchEvent(new Event(DRAG_EVENT));

        }

        protected function get dispatchOnDrag():Boolean{

            return (true);

        }

        protected function onDispatchDrag():void{

        }

        function get maxDrag():Number{

            return ((width - this._dragger.width));

        }

        public function get value():Number{

            return (this._currentPos);

        }

        final public function set value(_arg1:Number):void{

            if (_arg1 > 100){

                _arg1 = 100;

            };

            this._currentPos = _arg1;

            this.onSetValue();

        }

        protected function onSetValue():void{

        }

        protected function get allowSetValue():Boolean{

            return (true);

        }

        override protected function onResize():void{

            log.debug("onResize");

            super.onResize();

            this._dragger.height = height;

            this._dragger.scaleX = this._dragger.scaleY;

            this.drawBackground();

            this.drawBorder();

        }

        private function drawBackground():void{

            graphics.clear();

            graphics.beginFill(this.sliderColor, this.sliderAlpha);

            graphics.drawRoundRect(0, ((height / 2) - (this.barHeight / 2)), width, this.barHeight, this.barCornerRadius, this.barCornerRadius);

            graphics.endFill();

            if (this.sliderGradient){

                GraphicsUtil.addGradient(this, 1, this.sliderGradient, this.barCornerRadius, 0, ((height / 2) - (this.barHeight / 2)), this.barHeight);

            };

        }

        private function drawBorder():void{

            if (((this._border) && ((this._border.parent == this)))){

                removeChild(this._border);

            };

            if (!(this.borderWidth) > 0){

                return;

            };

            this._border = new Sprite();

            addChild(this._border);

            swapChildren(this._border, this._dragger);

            log.info(((((("border weight is " + this.borderWidth) + ", color is ") + String(this.borderColor)) + ", alpha ") + String(this.borderAlpha)));

            this._border.graphics.lineStyle(this.borderWidth, this.borderColor, this.borderAlpha);

            GraphicsUtil.drawRoundRectangle(this._border.graphics, 0, ((height / 2) - (this.barHeight / 2)), width, this.barHeight, this.barCornerRadius);

        }

        protected function get borderWidth():Number{

            return (0);

        }

        protected function get borderColor():Number{

            return (0xFFFFFF);

        }

        protected function get borderAlpha():Number{

            return (0);

        }

        protected function get barCornerRadius():Number{

            return ((this.barHeight / 1.5));

        }

        protected function get sliderGradient():Array{

            return (null);

        }

        protected function get sliderColor():Number{

            return (0);

        }

        protected function get sliderAlpha():Number{

            return (1);

        }

        protected function get barHeight():Number{

            return (height);

        }

        protected function drawBar(_arg1:Sprite, _arg2:Number, _arg3:Number, _arg4:Array, _arg5:Number, _arg6:Number):void{

            _arg1.graphics.clear();

            if (_arg5 > _arg6){

                return;

            };

            _arg1.scaleX = 1;

            _arg1.graphics.beginFill(_arg2, _arg3);

            _arg1.graphics.drawRoundRect(_arg5, ((height / 2) - (this.barHeight / 2)), (_arg6 - _arg5), this.barHeight, this.barCornerRadius, this.barCornerRadius);

            _arg1.graphics.endFill();

            if (_arg4){

                GraphicsUtil.addGradient(_arg1, 0, _arg4, this.barCornerRadius, _arg5, ((height / 2) - (this.barHeight / 2)), this.barHeight);

            } else {

                GraphicsUtil.removeGradient(_arg1);

            };

        }

        final protected function get animationEngine():AnimationEngine{

            return (this._animationEngine);

        }

        public function redraw(_arg1:Config):void{

            this._config = _arg1;

            this.drawBackground();

            this.drawBorder();

            this.toggleTooltip();

            this._tooltip.redraw(_arg1);

        }

        public function set tooltipTextFunc(_arg1:Function):void{

            this._tooltipTextFunc = _arg1;

        }



    }

}//package org.flowplayer.controls.slider 

package org.flowplayer.controls.slider {

    import org.flowplayer.controls.config.*;

    import org.flowplayer.view.*;

    import flash.display.*;



    public class VolumeSlider extends AbstractSlider {



        public static const DRAG_EVENT:String = "onDrag";



        private var _volumeBar:Sprite;



        public function VolumeSlider(_arg1:Config, _arg2:AnimationEngine, _arg3:DisplayObject){

            var config:* = _arg1;

            var animationEngine:* = _arg2;

            var controlbar:* = _arg3;

            super(config, animationEngine, controlbar);

            tooltipTextFunc = function (_arg1:Number):String{

                if (_arg1 > 100){

                    return ("100%");

                };

                if (_arg1 < 0){

                    return ("0%");

                };

                return ((Math.round(_arg1) + "%"));

            };

            this.createBars();

        }

        override public function get name():String{

            return ("volume");

        }

        private function createBars():void{

            this._volumeBar = new Sprite();

            addChild(this._volumeBar);

            swapChildren(_dragger, this._volumeBar);

        }

        override public function redraw(_arg1:Config):void{

            super.redraw(_arg1);

            this.onSetValue();

        }

        override protected function onSetValue():void{

            var _local1:Number = ((value / 100) * (width - _dragger.width));

            animationEngine.animateProperty(_dragger, "x", _local1, 200);

            drawBar(this._volumeBar, this.volumeColor, this.volumeAlpha, _config.style.bufferGradient, 0, (_local1 + (_dragger.width / 2)));

        }

        override protected function isToolTipEnabled():Boolean{

            return (((_config.tooltips) && (_config.tooltips.volume)));

        }

        override protected function get barHeight():Number{

            log.debug(("bar height ratio is " + _config.style.volumeSliderHeightRatio));

            return ((height * _config.style.volumeBarHeightRatio));

        }

        override protected function get sliderGradient():Array{

            return (_config.style.volumeSliderGradient);

        }

        override protected function get sliderColor():Number{

            return (_config.style.volumeSliderColor);

        }

        override protected function get sliderAlpha():Number{

            return (_config.style.volumeSliderAlpha);

        }

        override protected function get borderWidth():Number{

            return (_config.style.volumeBorderWidth);

        }

        override protected function get borderColor():Number{

            return (_config.style.volumeBorderColor);

        }

        override protected function get borderAlpha():Number{

            return (_config.style.volumeBorderAlpha);

        }

        protected function get volumeColor():Number{

            if (((isNaN(_config.style.volumeColor)) || ((_config.style.volumeColor == -2)))){

                return (this.sliderColor);

            };

            return (_config.style.volumeColor);

        }

        protected function get volumeAlpha():Number{

            if (((isNaN(_config.style.volumeAlpha)) || ((_config.style.volumeAlpha == -2)))){

                return (this.sliderAlpha);

            };

            return (_config.style.volumeAlpha);

        }

        override protected function get barCornerRadius():Number{

            if (isNaN(_config.style.volumeBorderRadius)){

                return (super.barCornerRadius);

            };

            return (_config.style.volumeBorderRadius);

        }



    }

}//package org.flowplayer.controls.slider 

package org.flowplayer.controls.slider {

    import org.flowplayer.controls.config.*;

    import org.flowplayer.view.*;

    import org.flowplayer.controls.button.*;

    import flash.display.*;

    import org.flowplayer.util.*;



    public class Scrubber extends AbstractSprite {



        public static const DRAG_EVENT:String = AbstractSlider.DRAG_EVENT;



        private var _scrubber:ScrubberSlider;

        private var _controlbar:DisplayObject;

        private var _config:Config;

        private var _leftEdge:DisplayObject;

        private var _bottomEdge:DisplayObject;

        private var _rightEdge:DisplayObject;

        private var _topEdge:DisplayObject;



        public function Scrubber(_arg1:Config, _arg2:AnimationEngine, _arg3:DisplayObject){

            this._config = _arg1;

            this._controlbar = _arg3;

            this._leftEdge = addChild(SkinClasses.getScrubberLeftEdge());

            this._bottomEdge = addChild(SkinClasses.getScrubberBottomEdge());

            this._topEdge = addChild(SkinClasses.getScrubberTopEdge());

            this._rightEdge = addChild(SkinClasses.getScrubberRightEdge());

            addChild(this._bottomEdge);

            this._scrubber = new ScrubberSlider(_arg1, _arg2, _arg3);

            addChild(this._scrubber);

        }

        public function setRightEdgeWidth(_arg1:Number):void{

            log.debug(("setRightEdgeWidth() " + _arg1));

            this._rightEdge.width = _arg1;

        }

        override public function addEventListener(_arg1:String, _arg2:Function, _arg3:Boolean=false, _arg4:int=0, _arg5:Boolean=false):void{

            if (_arg1 == DRAG_EVENT){

                this._scrubber.addEventListener(_arg1, _arg2, _arg3, _arg4, _arg5);

            } else {

                super.addEventListener(_arg1, _arg2, _arg3, _arg4, _arg5);

            };

        }

        override protected function onResize():void{

            this._leftEdge.height = ((height - this._topEdge.height) - this._bottomEdge.height);

            this._leftEdge.x = 0;

            this._leftEdge.y = this._topEdge.height;

            this._rightEdge.height = ((height - this._topEdge.height) - this._bottomEdge.height);

            this._rightEdge.x = (width - this._rightEdge.width);

            this._rightEdge.y = this._topEdge.height;

            this._scrubber.x = this._leftEdge.width;

            this._scrubber.setSize(((width - this._leftEdge.width) - this._rightEdge.width), ((height - this._bottomEdge.height) * this._config.style.scrubberHeightRatio));

            Arrange.center(this._scrubber, 0, height);

            this._bottomEdge.y = (height - this._bottomEdge.height);

            this._bottomEdge.width = width;

            this._topEdge.y = 0;

            this._topEdge.width = width;

        }

        override public function get name():String{

            return ("scrubber");

        }

        public function set allowRandomSeek(_arg1:Boolean):void{

            this._scrubber.allowRandomSeek = _arg1;

        }

        public function setBufferRange(_arg1:Number, _arg2:Number):void{

            this._scrubber.setBufferRange(_arg1, _arg2);

        }

        public function redraw(_arg1:Config):void{

            this.onResize();

            this._scrubber.redraw(_arg1);

        }

        public function set enabled(_arg1:Boolean):void{

            this._scrubber.enabled = _arg1;

        }

        public function get enabled():Boolean{

            return (this._scrubber.enabled);

        }

        public function get value():Number{

            return (this._scrubber.value);

        }

        final public function set value(_arg1:Number):void{

            this._scrubber.value = _arg1;

        }

        public function set tooltipTextFunc(_arg1:Function):void{

            this._scrubber.tooltipTextFunc = _arg1;

        }



    }

}//package org.flowplayer.controls.slider 

package org.flowplayer.controls.slider {

    import org.flowplayer.controls.config.*;

    import org.flowplayer.view.*;

    import org.flowplayer.controls.button.*;

    import flash.display.*;

    import org.flowplayer.util.*;



    public class VolumeScrubber extends AbstractSprite {



        public static const DRAG_EVENT:String = AbstractSlider.DRAG_EVENT;



        private var _scrubber:VolumeSlider;

        private var _leftEdge:DisplayObject;

        private var _controlbar:DisplayObject;

        private var _config:Config;

        private var _bottomEdge:DisplayObject;

        private var _topEdge:DisplayObject;

        private var _rightEdge:DisplayObject;



        public function VolumeScrubber(_arg1:Config, _arg2:AnimationEngine, _arg3:DisplayObject){

            log.debug("creating VolumeScrubber");

            this._config = _arg1;

            this._controlbar = _arg3;

            this._leftEdge = addChild(SkinClasses.getVolumeLeft());

            this._bottomEdge = addChild(SkinClasses.getVolumeBottom());

            this._topEdge = addChild(SkinClasses.getVolumeTop());

            this._rightEdge = addChild(SkinClasses.getVolumeRight());

            this._scrubber = new VolumeSlider(_arg1, _arg2, _arg3);

            addChild(this._scrubber);

        }

        override public function addEventListener(_arg1:String, _arg2:Function, _arg3:Boolean=false, _arg4:int=0, _arg5:Boolean=false):void{

            if (_arg1 == DRAG_EVENT){

                this._scrubber.addEventListener(_arg1, _arg2, _arg3, _arg4, _arg5);

            } else {

                super.addEventListener(_arg1, _arg2, _arg3, _arg4, _arg5);

            };

        }

        override protected function onResize():void{

            this._leftEdge.height = height;

            this._leftEdge.x = 0;

            this._leftEdge.y = 0;

            this._scrubber.x = this._leftEdge.width;

            this._scrubber.setSize(((width - this._leftEdge.width) - this._rightEdge.width), (height * this._config.style.volumeSliderHeightRatio));

            Arrange.center(this._scrubber, 0, height);

            this._bottomEdge.y = (height - this._bottomEdge.height);

            this._bottomEdge.width = width;

            this._topEdge.width = width;

            this._rightEdge.x = (width - this._rightEdge.width);

            this._rightEdge.height = height;

        }

        override public function get name():String{

            return ("volume");

        }

        public function redraw(_arg1:Config):void{

            this._scrubber.redraw(_arg1);

        }

        public function set enabled(_arg1:Boolean):void{

            this._scrubber.enabled = _arg1;

        }

        public function get value():Number{

            return (this._scrubber.value);

        }

        final public function set value(_arg1:Number):void{

            this._scrubber.value = _arg1;

        }

        public function set tooltipTextFunc(_arg1:Function):void{

            this._scrubber.tooltipTextFunc = _arg1;

        }



    }

}//package org.flowplayer.controls.slider 

package fp {

    import flash.display.*;



    public dynamic class ButtonBottomEdge extends Sprite {



    }

}//package fp 

package fp {

    import flash.display.*;



    public dynamic class TimeRightEdge extends Sprite {



    }

}//package fp 

package fp {

    import flash.display.*;



    public dynamic class UnMuteButton extends Sprite {



        public var mOver:MovieClip;



    }

}//package fp 

package fp {

    import flash.display.*;



    public dynamic class TimeLeftEdge extends Sprite {



    }

}//package fp 

package fp {

    import flash.display.*;



    public dynamic class ScrubberLeftEdge extends Sprite {



    }

}//package fp 

package fp {

    import flash.display.*;



    public dynamic class ScrubberBottomEdge extends MovieClip {



    }

}//package fp 

package fp {

    import flash.display.*;



    public dynamic class TimeBottomEdge extends Sprite {



    }

}//package fp 

package fp {

    import flash.display.*;



    public dynamic class ScrubberTopEdge extends Sprite {



    }

}//package fp 

package fp {

    import flash.display.*;



    public dynamic class ButtonTopEdge extends Sprite {



    }

}//package fp 

package fp {

    import flash.display.*;



    public dynamic class SlowMotionBwdButton extends MovieClip {



        public var mOver:MovieClip;



    }

}//package fp 

package fp {

    import flash.display.*;



    public dynamic class ButtonRightEdge extends Sprite {



    }

}//package fp 

package fp {

    import flash.display.*;



    public dynamic class SlowMotionFBwdButton extends MovieClip {



        public var mOver:MovieClip;



    }

}//package fp 

package fp {

    import flash.display.*;



    public dynamic class PrevButton extends Sprite {



        public var mOver:MovieClip;



    }

}//package fp 

package fp {

    import flash.display.*;



    public dynamic class VolumeLeftEdge extends Sprite {



    }

}//package fp 

package fp {

    import flash.display.*;



    public dynamic class SlowMotionFwdButton extends MovieClip {



        public var mOver:MovieClip;



    }

}//package fp 

package fp {

    import flash.display.*;



    public dynamic class MuteButton extends Sprite {



        public var mOver:MovieClip;



    }

}//package fp 

package fp {

    import flash.display.*;



    public dynamic class VolumeTopEdge extends MovieClip {



    }

}//package fp 

package fp {

    import flash.display.*;



    public dynamic class StopButton extends Sprite {



        public var mOver:MovieClip;



    }

}//package fp 

package fp {

    import flash.display.*;



    public dynamic class FullScreenOnButton extends MovieClip {



        public var mOver:MovieClip;



        public function FullScreenOnButton(){

            addFrameScript(9, frame10);

        }

        function frame10(){

            stop();

        }



    }

}//package fp 

package fp {

    import flash.display.*;



    public dynamic class VolumeRightEdge extends Sprite {



    }

}//package fp 

package fp {

    import flash.display.*;



    public dynamic class ScrubberRightEdge extends Sprite {



    }

}//package fp 

package fp {

    import flash.display.*;



    public dynamic class SlowMotionFFwdButton extends MovieClip {



        public var mOver:MovieClip;



    }

}//package fp 

package fp {

    import flash.display.*;



    public dynamic class PlayButton extends MovieClip {



        public var mOver:MovieClip;



    }

}//package fp 

package fp {

    import flash.display.*;



    public dynamic class Dragger extends Sprite {



        public var mOver:MovieClip;



    }

}//package fp 

package fp {

    import flash.display.*;



    public dynamic class VolumeBottomEdge extends MovieClip {



    }

}//package fp 

package fp {

    import flash.display.*;



    public dynamic class NextButton extends Sprite {



        public var mOver:MovieClip;



    }

}//package fp 

package fp {

    import flash.display.*;



    public dynamic class ButtonLeftEdge extends Sprite {



    }

}//package fp 

package fp {

    import flash.display.*;



    public dynamic class TimeTopEdge extends Sprite {



    }

}//package fp 

package fp {

    import flash.display.*;



    public dynamic class FullScreenOffButton extends MovieClip {



        public var mOver:MovieClip;



        public function FullScreenOffButton(){

            addFrameScript(9, frame10);

        }

        function frame10(){

            stop();

        }



    }

}//package fp 

package fp {

    import flash.display.*;



    public dynamic class PauseButton extends Sprite {



        public var mOver:MovieClip;



    }

}//package fp