package {
    import flash.display.Sprite;
    import flash.text.*;
    import flash.events.*;

    [SWF(width="360", height="320", backgroundColor="#C8C5D9", frameRate="30")]

    public class iMovieHD6Frame extends Sprite
    {
        private var tempo:TextField;            ///< テンポ設定ボックス
        private var beatNum:TextField;          ///< 四分音符数設定ボックス
        private var imovieTime:TextField;       ///< iMovie時間表示

        /// コンストラクタ
        public function iMovieHD6Frame()
        {
            var x:int = 20, y:int = 30;

            /// テンポの文字表示
            var tempoStr:TextField = addLabel();
            tempoStr.x = x;
            tempoStr.y = y;
            tempoStr.text = "テンポ";
            tempoStr.selectable = false;

            /// テンポ設定ボックス設定
            tempo = addLabel();
            tempo.type = TextFieldType.INPUT;
            tempo.x = 250;
            tempo.y = tempoStr.y;
            tempo.background = true;
            tempo.border = true;
            tempo.text = "140";

            /// 四分音符の文字表示
            var beatnumStr:TextField = addLabel();
            beatnumStr.x = x;
            beatnumStr.y = tempoStr.y + tempoStr.textHeight + 10;
            beatnumStr.text = "四分音符数";
            beatnumStr.selectable = false;

            /// 四分音符数設定ボックス
            beatNum = addLabel();
            beatNum.type = TextFieldType.INPUT;
            beatNum.x = tempo.x;
            beatNum.y = beatnumStr.y;
            beatNum.background = true;
            beatNum.border = true;
            beatNum.text = "4";

            /// iMovie時間表示
            var imovieStr:TextField = addLabel();
            imovieStr.x = x;
            imovieStr.y = beatnumStr.y + beatnumStr.textHeight + 10;
            imovieStr.text = "iMovieHD時間(秒/フレーム数(30))";
            imovieStr.selectable = false;

            /// iMovie時間表示用
            imovieTime = addLabel();
            imovieTime.x = tempo.x;
            imovieTime.y = imovieStr.y;

            calcIMovieTime();

            // イベント追加
            tempo.addEventListener( Event.CHANGE, changeTemp );
            beatNum.addEventListener( Event.CHANGE, changeBeat );
        }

        /// テンポが設定変更された時、呼び出される
        private function changeTemp(event:Event):void {
            calcIMovieTime();
        }

        /// 音符数が設定変更された時、呼び出される
        private function changeBeat(event:Event):void {
            calcIMovieTime();
        }

        /// iMovieの時間表記を計算して表示
        private function calcIMovieTime() : void {

            var tempoNum:Number = Number(tempo.text);
            if( tempoNum == 0 ){
                return;
            }

            var beatSec:Number = 60/tempoNum*Number(beatNum.text);

            // まず秒数を出す
            var sec:Number = Math.floor(beatSec);

            // 秒数以下をフレーム数に変換
            var frameSec:Number = beatSec - Math.floor(beatSec);
            var frame:Number = Math.round(frameSec * 10 * 3);

            imovieTime.text = "" + sec + ":" + frame;
        }

        /// テキストフィールドの作成、追加
        public function addLabel() : TextField {
            var textField:TextField=new TextField();
            textField.text="Hello World!";
            textField.autoSize=TextFieldAutoSize.LEFT;
            addChild(textField);
            return textField;
        }

    }

}