//-------------------------------
//円盤のムービークリップ処理
//-------------------------------
_root.onEnterFrame = function(){

	if( _global.comStatus == 'on' ){
		//
		//サーバとの通信が終了するまで移動チェックの一時停止
		_global.comStatus = 'busy';
		//
		//サーバと通信して次の移動位置取得
		comServer();

	} else {
		if( enbanStatusCheck() == true ){
			if( _global.comStatus == 'idle' ){
				//
		 		//次の通信を行う
				_global.comStatus = 'on';
			}
		}
	}
}

//-------------------------------
//円盤の状態チェック
//-------------------------------
function enbanStatusCheck(){

	for( i=0; i< _global.EnbanCount; i++ ){
		if( _global.currentPOS[ i ].pos != _global.nextPOS[ i ].pos ){
			return false;
		}
	}
return true;
}

//----------------------------
//サーバ通信
//----------------------------
function comServer() {
var currentEnbanData:String;
var targetEnbanData:String;

	//
	//現在の円盤位置をサーバに送出して次の位置を取得する
	currentEnbanData = "";
	currentEnbanData = _global.EnbanCount;
	
	for( i=0; i< _global.EnbanCount; i++ ){
		currentEnbanData = currentEnbanData + _global.currentPOS[ i].pos;
	}

	targetEnbanData = putAndGet( currentEnbanData );
	if( targetEnbanData == "" ){
		QADisplay ( QA, "通信エラー 009" );
		return;
	}

return;
}

//----------------------------
//サーバとの通信処理(実体)
//----------------------------
function putAndGet(askString:String):String {
	SendData = new LoadVars();
	SendData.place = askString;
	var answerString:String = '';
	var seedString:String = '';
	var QAString:String;

	if( _global.seedString == ''){
		//通信1回目だったら初期値をセット
		SendData.seed = _global.EnbanCount + "abc";
	} else {
	   //2回目以降
		SendData.seed = _global.seedString;
	}

	//
	//
	QADisplay ( QA, "========\n← サーバへ問合せ\n" );
	
	RcvData = new LoadVars();
	RcvData.onLoad = function(success) {
		if (success) {                            // 通信成功
			this.seedString = RcvData.seed;
			_global.seedString = this.seedString; //次回用に格納
			this.answerString = RcvData.answer;
			//
			//移動終了を確認
			if( this.answerString.substr(0,3) != 'end' ){
				//
				//長さチェック
				//trace(_global.EnbanCount*4 + SERVER_OFFSET + _root.server);
				//trace(this.answerString.length);
				if( this.answerString.length == _global.EnbanCount*4 + SERVER_OFFSET + parseFloat(_root.server) ){
					//
					// サーバからの応答を表示
					QAString =  "→ サーバからの応答\n";
					for( i=0; i < _global.EnbanCount; i++ ){
						//
						//移動データのみ表示
						if( this.answerString.substr( i*4+SERVER_OFFSET, 2 ) !=
							this.answerString.substr( i*4+SERVER_OFFSET+2 ,2 )){
								QAString = QAString.concat( "円盤移動",  " : ", this.answerString.substr( i*4+SERVER_OFFSET, 2 ));
								QAString = QAString.concat( "→ " );
								QAString = QAString.concat( this.answerString.substr( i*4+SERVER_OFFSET+2 ,2));
								QAString = QAString.concat( "\n" );
						}
					}
					QADisplay( QA, QAString );
					//
				    //サーバからの応答で次の移動位置を設定
					for( i=0; i < _global.EnbanCount; i++ ){
						_global.nextPOS[ i ].pos = this.answerString.substr( i*4+2+SERVER_OFFSET,2);
					}
					//
					//次の通信を許可する
					_global.comStatus = 'idle';
				} else {
					QADisplay( QA, "通信エラー 001" );
					//
					//円盤を初期位置に移動
					restartEnbanPosition();
					return( "" );
					
				}
			} else {
				//
				//移動終了
				QADisplay( QA, "-- 移動終了" );
				_global.seedString = '';		//seed初期化
				
			}
			return( this.answerString );
		} else {
			QADisplay( QA, "通信エラー 002" );
			//
			//円盤を初期位置に移動
			restartEnbanPosition();
			return( "" );
		}
		QADisplay( QA, "通信エラー 003" );
		return( "" );
	};

//------ 外部Webサーバにて実行時　以下を有効にする ------//
	SendData.sendAndLoad(_root.domain+"/cgi-bin/hanoi.cgi", RcvData, "GET");


	return;
}

//----------------------------
//テキストエリアに出力
//----------------------------
function QADisplay( obj:TextField, outStr:String){
	obj.text = obj.text + outStr;
	obj.scroll = obj.maxscroll;

}


