define("animationPort", ["componentmodelComponentApi", "clientkernelEventbusApi"],
    function(componentmodelComponentApi, clientkernelEventbusApi) {
        "use strict";

        function $iterator(o) {
            if (o instanceof Array) return function() {
                return {
                    cur: 0,
                    arr: o,
                    hasNext: function() {
                        return this.cur < this.arr.length;
                    },
                    next: function() {
                        return this.arr[this.cur++];
                    }
                };
            };
            return typeof(o.iterator) == 'function' ? $bind(o, o.iterator) : o.iterator;
        };;
        var $fid = 0;

        function $bind(o, m) {
            if (m == null) return null;
            if (m.__id__ == null) m.__id__ = $fid++;
            var f;
            if (o.hx__closures__ == null) o.hx__closures__ = {};
            else f = o.hx__closures__[m.__id__];
            if (f == null) {
                f = function() {
                    return f.method.apply(f.scope, arguments);
                };
                f.scope = o;
                f.method = m;
                o.hx__closures__[m.__id__] = f;
            }
            return f;
        };
        var $_;
        var $estr = function() {
            return _hcmn_.js_Boot.__string_rec(this, '');
        };
        if (typeof animationPort == 'undefined') {
            var animationPort = {};
        };
        animationPort.Action = {
            __ename__: ["animationPort", "Action"],
            __constructs__: ["SHOW", "HIDE", "ADDITIONAL"]
        };
        animationPort.Action.SHOW = ["SHOW", 0];
        animationPort.Action.SHOW.toString = $estr;
        animationPort.Action.SHOW.__enum__ = animationPort.Action;
        animationPort.Action.ADDITIONAL = ["ADDITIONAL", 2];
        animationPort.Action.ADDITIONAL.toString = $estr;
        animationPort.Action.ADDITIONAL.__enum__ = animationPort.Action;
        animationPort.Action.HIDE = ["HIDE", 1];
        animationPort.Action.HIDE.toString = $estr;
        animationPort.Action.HIDE.__enum__ = animationPort.Action;
        animationPort.AnimationComponent = {
            __ename__: ["animationPort", "AnimationComponent"],
            __constructs__: ["ASPECT_FRAME", "REEL_BACKGROUND", "REEL_FRAMES_CONTAINER", "LOGO", "FREE_SPIN_PANEL", "FREE_SPIN_MULTIPLIER", "FREE_SPIN_REEL_FIRE", "SPITFIRE_MULTIPLIERS_LOGO", "BASE_GAME_BACK_FIRE", "NONE"]
        };
        animationPort.AnimationComponent.REEL_BACKGROUND = ["REEL_BACKGROUND", 1];
        animationPort.AnimationComponent.REEL_BACKGROUND.toString = $estr;
        animationPort.AnimationComponent.REEL_BACKGROUND.__enum__ = animationPort.AnimationComponent;
        animationPort.AnimationComponent.SPITFIRE_MULTIPLIERS_LOGO = ["SPITFIRE_MULTIPLIERS_LOGO", 7];
        animationPort.AnimationComponent.SPITFIRE_MULTIPLIERS_LOGO.toString = $estr;
        animationPort.AnimationComponent.SPITFIRE_MULTIPLIERS_LOGO.__enum__ = animationPort.AnimationComponent;
        animationPort.AnimationComponent.NONE = ["NONE", 9];
        animationPort.AnimationComponent.NONE.toString = $estr;
        animationPort.AnimationComponent.NONE.__enum__ = animationPort.AnimationComponent;
        animationPort.AnimationComponent.FREE_SPIN_REEL_FIRE = ["FREE_SPIN_REEL_FIRE", 6];
        animationPort.AnimationComponent.FREE_SPIN_REEL_FIRE.toString = $estr;
        animationPort.AnimationComponent.FREE_SPIN_REEL_FIRE.__enum__ = animationPort.AnimationComponent;
        animationPort.AnimationComponent.FREE_SPIN_MULTIPLIER = ["FREE_SPIN_MULTIPLIER", 5];
        animationPort.AnimationComponent.FREE_SPIN_MULTIPLIER.toString = $estr;
        animationPort.AnimationComponent.FREE_SPIN_MULTIPLIER.__enum__ = animationPort.AnimationComponent;
        animationPort.AnimationComponent.BASE_GAME_BACK_FIRE = ["BASE_GAME_BACK_FIRE", 8];
        animationPort.AnimationComponent.BASE_GAME_BACK_FIRE.toString = $estr;
        animationPort.AnimationComponent.BASE_GAME_BACK_FIRE.__enum__ = animationPort.AnimationComponent;
        animationPort.AnimationComponent.FREE_SPIN_PANEL = ["FREE_SPIN_PANEL", 4];
        animationPort.AnimationComponent.FREE_SPIN_PANEL.toString = $estr;
        animationPort.AnimationComponent.FREE_SPIN_PANEL.__enum__ = animationPort.AnimationComponent;
        animationPort.AnimationComponent.ASPECT_FRAME = ["ASPECT_FRAME", 0];
        animationPort.AnimationComponent.ASPECT_FRAME.toString = $estr;
        animationPort.AnimationComponent.ASPECT_FRAME.__enum__ = animationPort.AnimationComponent;
        animationPort.AnimationComponent.LOGO = ["LOGO", 3];
        animationPort.AnimationComponent.LOGO.toString = $estr;
        animationPort.AnimationComponent.LOGO.__enum__ = animationPort.AnimationComponent;
        animationPort.AnimationComponent.REEL_FRAMES_CONTAINER = ["REEL_FRAMES_CONTAINER", 2];
        animationPort.AnimationComponent.REEL_FRAMES_CONTAINER.toString = $estr;
        animationPort.AnimationComponent.REEL_FRAMES_CONTAINER.__enum__ = animationPort.AnimationComponent;

        animationPort.IAnimationPort = function() {}
        animationPort.IAnimationPort.prototype = {

            getAnimationAction: function() {
                return {
                    arguments: [],
                    returns: "*"
                };
            },
            show: function(component, data) {
                return {
                    arguments: ["*", {
                        type: "*",
                        opt: true
                    }],
                    returns: "void"
                };
            },
            hide: function(component, data) {
                return {
                    arguments: ["*", {
                        type: "*",
                        opt: true
                    }],
                    returns: "void"
                };
            },
            additionalAction: function(component, data) {
                return {
                    arguments: ["*", {
                        type: "*",
                        opt: true
                    }],
                    returns: "void"
                };
            },
            showMultiplier: function(multiplier) {
                return {
                    arguments: ["number"],
                    returns: "void"
                };
            },
            showReelFire: function(multiplier) {
                return {
                    arguments: [{
                        type: "*",
                        opt: true
                    }],
                    returns: "void"
                };
            },
            updateFreeSpinWin: function(winAmount) {
                return {
                    arguments: ["string"],
                    returns: "void"
                };
            },
            updateFreeSpinCounter: function(counter) {
                return {
                    arguments: ["string"],
                    returns: "void"
                };
            },
            playLogo: function() {
                return {
                    arguments: [],
                    returns: "void"
                };
            },
            pauseLogo: function() {
                return {
                    arguments: [],
                    returns: "void"
                };
            }
        };

        animationPort.IAnimationImplementationPort = function() {}
        animationPort.IAnimationImplementationPort.prototype = {

            getAnimationAction: function() {
                return {
                    arguments: [],
                    returns: "*"
                };
            }
        };
        animationPort.AnimationPort = function(instance, bus) {
            this.animationAction = new clientkernelEventbusApi.Topic("Animation:action");
            this.animationAction.connect(bus);
        };
        animationPort.AnimationPort = ck_implements(animationPort.AnimationPort, animationPort.IAnimationPort);
        animationPort.AnimationPort = ck_implements(animationPort.AnimationPort, animationPort.IAnimationImplementationPort);
        animationPort.AnimationPort.__interfaces__ = [animationPort.IAnimationPort, animationPort.IAnimationImplementationPort];
        animationPort.AnimationPort.__name__ = ["animationPort", "AnimationPort"];
        animationPort.AnimationPort.prototype.animationAction = null;
        animationPort.AnimationPort.prototype.getAnimationAction = function() {
            return this.animationAction;
        };
        animationPort.AnimationPort.prototype.show = function(component, data) {
            this.publishAction(new animationPort.AnimationAction(component, animationPort.Action.SHOW, data));
        };
        animationPort.AnimationPort.prototype.hide = function(component, data) {
            this.publishAction(new animationPort.AnimationAction(component, animationPort.Action.HIDE, data));
        };
        animationPort.AnimationPort.prototype.additionalAction = function(component, data) {
            this.publishAction(new animationPort.AnimationAction(component, animationPort.Action.ADDITIONAL, data));
        };
        animationPort.AnimationPort.prototype.publishAction = function(action) {
            this.getAnimationAction().publish(action);
        };
        animationPort.AnimationPort.prototype.showMultiplier = function(multiplier) {
            this.additionalAction(animationPort.AnimationComponent.FREE_SPIN_MULTIPLIER, {
                multiplier: multiplier
            });
        };
        animationPort.AnimationPort.prototype.showReelFire = function(multiplier) {
            this.additionalAction(animationPort.AnimationComponent.FREE_SPIN_REEL_FIRE, {
                multiplier: multiplier
            });
        };
        animationPort.AnimationPort.prototype.updateFreeSpinWin = function(winAmount) {
            this.additionalAction(animationPort.AnimationComponent.FREE_SPIN_PANEL, {
                winAmount: winAmount,
                counter: null
            });
        };
        animationPort.AnimationPort.prototype.updateFreeSpinCounter = function(counter) {
            this.additionalAction(animationPort.AnimationComponent.FREE_SPIN_PANEL, {
                winAmount: null,
                counter: counter
            });
        };
        animationPort.AnimationPort.prototype.playLogo = function() {
            this.additionalAction(animationPort.AnimationComponent.LOGO, "play");
        };
        animationPort.AnimationPort.prototype.pauseLogo = function() {
            this.additionalAction(animationPort.AnimationComponent.LOGO, "pause");
        };
        animationPort.AnimationPort.prototype.__class__ = animationPort.AnimationPort;
        animationPort.AnimationPortFactory = function() {};
        animationPort.AnimationPortFactory = ck_implements(animationPort.AnimationPortFactory, componentmodelComponentApi.IComponentPortFactory);
        animationPort.AnimationPortFactory.__interfaces__ = [componentmodelComponentApi.IComponentPortFactory];
        animationPort.AnimationPortFactory.__name__ = ["animationPort", "AnimationPortFactory"];
        animationPort.AnimationPortFactory.prototype.provide = function(instance, channel) {
            return new animationPort.AnimationPort(instance, channel);
        };
        animationPort.AnimationPortFactory.prototype["use"] = function(instance, channel) {
            return new animationPort.AnimationPort(instance, channel);
        };
        animationPort.AnimationPortFactory.prototype.__class__ = animationPort.AnimationPortFactory;
        animationPort.AnimationAction = function(animationComponent, action, data) {
            this.animationComponent = animationComponent;
            this.action = action;
            this.data = data;
        };
        animationPort.AnimationAction.__name__ = ["animationPort", "AnimationAction"];
        animationPort.AnimationAction.prototype.animationComponent = null;
        animationPort.AnimationAction.prototype.action = null;
        animationPort.AnimationAction.prototype.data = null;
        animationPort.AnimationAction.prototype.__class__ = animationPort.AnimationAction;
        if (typeof haxe == 'undefined') {
            var haxe = {};
        };

        haxe.IMap = function() {}
        haxe.IMap.prototype = {

        };
        return {
            exports: animationPort
        };
    });