//flush使用コードをSJISに設定
//
//System.useCodepage =true;

//定義
//
//-- 積木の数 --
_global.HakoCount = 4;

//-- 積木名 --
var HAKO1:Number = 0;
var HAKO2:Number = 1;
var HAKO3:Number = 2;
var HAKO4:Number = 3;

//-- 箱移動量 --
_global.MOVEVALUE =20;

//--回答の文字数 -- 赤2122とか
_global.ANSWER_COUNT = 5;

/*---------------------------------------------------------
１）ブロックの配色 赤,青,白,黄　とする。
２）ブロックの位置の座標系(X,Y)

  X--> １２３４
    ５
    ４
    ３
    ２   □■
    １   ■□
    ↑ --------
    Y  座標系

＜配置表現例＞
  白黄                      赤
  赤青                   白 青黄
 -----                   -------
配置１(赤21青31白22黄32) 配置２(赤22青31白11d黄1)

＜Flashからの入力＞
input="赤い積木を青い積木の上に置け"         ユーザの入力した命令文
table="赤21青31白22黄32"                         現在の盤面

＜Flashへの出力＞
move=白2211黄3241赤2132&table=赤22青31白11黄41

move: ブロックの移動手順（下記）
table:最終配置 （次のFlashからの出力に利用する）
  入力文解析不能のときは、table=error が出力される。

move=白2211黄3241赤a2132　は次の手順を並べている。
     1----2====3----
----------------------------------------------------------*/

//-- サーバとの通信ステータス --
_global.comStatus = 'init';	// init  説明文表示状態
                            // ready 開始準備中
                            // idle  通信可
                            // busy  通信中
                            // stick はさみ移動中
                            // move  はさみ&箱移動中
                            // off   処理不能中

//Prologからの回答文字列
_global.moveString = '';
_global.tableString = '';

//ムービー重なり深度初期化
_global.depth = 0;

//表示の透明度設定
_global.alpha = 0;

//はさみ移動データ
_global.stickMoveString = '';
_global.currentPOSs = '';
_global.nextPOSs = '';

//はさみの初期位置座標y
_global.initPOSs = '1z';

//はさみと箱のY方向のオフセット値
_global.stickOffset = 190;

//最初の説明時の残り秒数表示
_global.interval;		//インターバル用
_global.second = 30;	//減算用

//--------------------------
// 各座標データの変数定義
//--------------------------
//
// 箱位置のマトリックス定義
//

//x座標定義
mtxX = [{pos:'1',x:210}
	   ,{pos:'2',x:300}
	   ,{pos:'3',x:390}
	   ,{pos:'4',x:480}];

//y座標定義
mtxY = [{pos:'z',y:-23}	//はさみの初期位置座標
	   ,{pos:'x',y:190} //箱の上空座標
	   ,{pos:'5',y:210}
	   ,{pos:'4',y:230}
	   ,{pos:'3',y:275}
	   ,{pos:'2',y:320}
	   ,{pos:'1',y:365}];

//
//Prologからの箱移動データ
//
_global.initialPOS = [{from:'21', to:'21'}
					,{from:'31', to:'31'}
					,{from:'22', to:'22'}
					,{from:'32', to:'32'} ];

//
//箱の現在位置データ
//
_global.currentPOS = [ {pos:''}
					  ,{pos:''}
					  ,{pos:''}
					  ,{pos:''} ];

//
//箱の移動先データ
//
_global.nextPOS = [{pos:''}
				  ,{pos:''}
				  ,{pos:''}
				  ,{pos:''} ];

//
//箱MCの配列定義
_global.hako = new Array();
_global.hako[0] = red;
_global.hako[1] = blue;
_global.hako[2] = white;
_global.hako[3] = yellow;

//箱のラベル定義
_global.Label = [{name:'赤'}
				,{name:'青'}
				,{name:'白'}
				,{name:'黄'} ];

//説明ボタン動作フラグ
_global.explainFlag = 'idle';


//
//説明文・命令文を外部ファイルから読み出す
	getExternalText();

//explain.Ex_Scroll.setScrollTarget( explain.setsumei );
//ex_bg.Command_Scroll.setScrollTarget(ex_bg.meirei );

//
//送信ボタンのフォーカス枠を消す
Sousin_Button._focusrect = false;

//
//説明文の残秒数インターバル開始（1秒）
explain.timer_t.text = _global.second;
_global.interval = setInterval( waitExplain, 1000 );

//
//------------------ 関数定義 ---------------------------------
//---------------------------------
//最初の処理
//---------------------------------
function introduction(){

	//
	//各オブジェクトの位置を初期化
		initHako();

	//
	//答えエリアを入力不可にする
	Answer.selectable = false;
	Answer.tabEnabled = false;

	debug.selectable = false;
	debug.tabEnabled = false;

	//
	//説明を表示
	//	ex_bg._height = 1;
	//	ex_bg.width = 1;
	//	_global.explainFlag = 'open';
	ex_bg._alpha = 0;

	//for debug
	//commandArea.text = "赤い積木の上に青い積木を置け";
}

//-------------------------------
// 箱の位置を初期化
//-------------------------------
function initHako(){
	//
	//通信処理停止
	_global.comStatus = 'ready';

	//通信データ初期化
	_global.tableString = '';
	_global.inputString = '';

	//
	//表示開始のイントロ処理用
	_global.alpha = 0;

	//説明ボタン有効化
	_global.explainFlag = 'idle';

	//現在位置データ初期化
	initPosition();

	//
	//箱表示初期化
	for( i=0; i< _global.HakoCount; i++ ){
		//表示初期化
		_global.hako[ i ]._x = getMtx( _global.currentPOS[ i ].pos.charAt(0,1), 'x' );
		_global.hako[ i ]._y = getMtx( _global.currentPOS[ i ].pos.charAt(1,1), 'y' );
		_global.hako[ i ]._alpha = 0;
		setDepth( _global.hako[ i ] );
//		_global.hako[ i ].swapDepths( _global.depth++ );
	}

	//
	//はさみ表示初期化
	_global.stickMoveString = '';

	sc_open._alpha = 100;
	sc_open._visible = false;

	sc_close._alpha = 0;
	sc_close._visible = true;
	setDepth( sc_close );
	sc_close._x = getMtx( '1', 'x' );	//一番左側
	sc_close._y = getMtx( 'z', 'y' );	//一番上

	//
	//命令エリア消去
	commandArea.text = "";

	//
	//QAフィールド初期化
	initQAField();

	//
	//入力エリアにフォーカスを設定
	Selection.setFocus( commandArea );

}

//-------------------------------
// 最前面に出す
//-------------------------------
function setDepth( obj:MovieClip ){

	obj.swapDepths( _global.depth++ );

	//
	//タイトル部は常に最前面
	title.swapDepths( _global.depth++ );

}


//-------------------------------
//QAフィールド初期化
//-------------------------------
function initQAField(){

	Answer.text = "";

}

//-------------------------------
//位置初期化
//-------------------------------
function initPosition(){

	//箱
	for( i=0; i< _global.HakoCount; i++ ){
		//位置初期化
		_global.currentPOS[i].pos = _global.initialPOS[i].from;
		_global.nextPOS[i].pos = _global.initialPOS[i].from;
	}

	//はさみ
	_global.currentPOSs = _global.initPOSs;
	_global.nextPOSs = '';
}

//-------------------------------
//箱位置リスタート位置へ
//-------------------------------
function restartPosition(){

	for( i=0; i< _global.HakoCount; i++ ){
		_global.nextPOS[i].pos = _global.initialPOS[i].from;
	}

	//
	//prologの通信データを初期化
	_global.comStatus = 'idle';
	_global.moveString = '';

	//
	//QAエリアを初期化
	initQAField()
}

//--------------------------------------
// 絶対座標を得る
// getMtx( '1', 'x' ) ← 1 の x座標を取得
// getMtx( '2', 'y' ) ← 2 の y座標を取得
//---------------------------------------
function getMtx(pos:String, xy:String ){

	if( xy == 'x' ){
	//x座標取得
		for( var i in mtxX ){
			if( mtxX[i].pos == pos ){
				return( mtxX[i].x );
			}
		}
	}else{
	//y座標取得
		for( var i in mtxY ){
			if( mtxY[i].pos == pos ){
				return( mtxY[i].y );
			}
		}
	}
return('');
trace( "NG" );
}



