Engine.LoadingTextBox = class extends Engine.Dialog
{
    constructor(parentClip)
    {
        super(parentClip);

        this.background = new Engine.Drawable("BGStandard");
        
        this.text = new Engine.DrawableText();

        this.loadingCircle = new Engine.Drawable("LoadingCircle");
        this.boxWidth = 270;
        this.boxHeight = 90;

        this.dialogWidth = this.boxWidth;
        this.dialogHeight = this.boxHeight;

        this.name = "LoadingBox";
        this.background.setNineRect();
        this.background.width = this.boxWidth;
        this.background.height = this.boxHeight;

        this.initialTransparent = false;
        this.alwaysTransparent = false;
        this.delayTimer = new Engine.SimpleTimer();

        this.addChild(this.background);
        this.addChild(this.text);
        this.addChild(this.loadingCircle);

    }

    showAfterDelay()
    {
        if (this.parent == null) return;

        this.blockerInfo = new Engine.DialogBlockerInfo();
        if (this.alwaysTransparent)
        {
            this.blockerInfo.color = 0x000000;
            this.blockerInfo.alpha = 0;
        }
        Engine.DialogManagerInstance.updateBlockers();

        this.background.alpha = 1;
        this.addChild(this.text);
        this.addChild(this.loadingCircle);
    }

    show(message, delay, initialTransparent, alwaysTransparent)
    {
        if (delay === undefined) delay = 0;
        if (initialTransparent === undefined) initialTransparent = false;
        if (alwaysTransparent === undefined) alwaysTransparent = false;

        Debug.Log("Showing - " + message);
        this.initialTransparent = initialTransparent;
        this.alwaysTransparent = alwaysTransparent;
        if (delay != 0)
        {
            this.background.alpha = 0;
            this.removeChild(this.text);
            this.removeChild(this.loadingCircle);
            this.blockerInfo = null;

            if (this.delayTimer.active) this.delayTimer.stop();
            this.delayTimer.start(delay, () => { this.showAfterDelay(); });

            if (initialTransparent)
            {
                this.blockerInfo = new Engine.DialogBlockerInfo();
                this.blockerInfo.color = 0x000000;
                this.blockerInfo.alpha = 0;
            }
        }
        else
        {
            this.background.alpha = 1;
            this.addChild(this.text);
            this.addChild(this.loadingCircle);
            if (!this.active)
            {
                this.blockerInfo = new Engine.DialogBlockerInfo();
                if (alwaysTransparent)
                {
                    this.blockerInfo.color = 0x000000;
                    this.blockerInfo.alpha = 0;
                }
            }
        }

        this.active = true;

        this.parentClip.addChild(this);

        var loadingWidth = this.loadingCircle.width;
        this.loadingCircle.y = this.boxHeight / 2;
        this.loadingCircle.x = loadingWidth;
        this.loadingCircle.gotoAndPlay(0);

        this.text.setText(message);
        this.text.x = Math.floor(loadingWidth + ((this.boxWidth - loadingWidth) - this.text.width) / 2);
        this.text.y = Math.floor((this.boxHeight - this.text.height) / 2);

        this.dt.transitionIn();
    }

    hide(instant)
    {
        super.hide(this.delayTimer.active);
        this.delayTimer.stop();
    }

}