// 
// MessageWidgetClass : モーダルなメッセージダイアログを表示する。
// args[0] : メッセージの内容(string)
//		改行を入れると、その位置でキーの入力を待つ。
//		メッセージの終端に改行を入れないと、最後の文字が表示された直後に勝手にウィジェットが閉じてしまう。
// args[1] : 次のウィジェット (省略可)
//		ここにウィジェットのインスタンスを指定すると、Messageが閉じたときに次のWidgetを表示できる。
//		MessageWidgetでも、その他の非モーダルなウィジェットでも指定可。

var MessageWidgetClass = function(manager, args)
{
	MessageWidgetClass.base.apply(this, arguments);
	
	this.downKeyPushed = true;
	this.upKeyPushed = true;
	this.message = args[0];
	this.origin = new Point2D(10,240);
	this.size = new Point2D(620, 230);
	
	//改行が入っているところで一時停止し↓キーの押下を待つ
	
	this.messageIndex = 0;
	this.interval = 5;
	this.intervalCount = 0;
	
	//このメッセージが表示し終わった後に実行するウィジェット
	this.nextWidget = args[1];
	
	this.wBox = null;
	this.isPaused = false;
	this.closed = args[2];
	
	this.modalFunc = null;
	this.cancelKeyEnabled = true;
}.extend(WidgetClass, {
	attach : function(){
		var that = this;
		this.modalFunc = function()
		{
			// pauseStageに直接tickを設置するとtick内のthisでmanagerが取得されてしまう
			return that.tick();
		};
		this.manager.pauseStage(this.modalFunc, function(){
			that.wBox = createMessageBox("MessageBoxWidghetMessageBox-" + MessageWidgetClass.attachedCount,
						that.size.x, that.size.y, that.origin.x, that.origin.y,
						that.manager.mainArea, undefined, undefined, 5);
			MessageWidgetClass.attachedCount++;
		});
	},
	detach : function(){
		if(this.wBox)
		{
			this.manager.mainArea.removeChild(this.wBox);
			this.wBox = null;
		}
		if(this.closed){
			this.closed(this);
		}
	},
	tick : function(){
		if(!this.wBox) return true;
		if(this.manager.UIManager.keyState.cursorUp)
		{
			if(!this.upKeyPushed && this.cancelKeyEnabled)
			{
				this.upKeyPushed = true;
				//メッセージを閉じる
				if(this.wBox)
				{
					this.manager.mainArea.removeChild(this.wBox);
					this.wBox = null;
				}
				if(this.modalFunc)
				{
					this.manager.resumeStage(this.modalFunc);
				}
				return false;
			}
		}else
		{
			this.upKeyPushed = false;
		}
		if(!this.manager.UIManager.keyState.cursorDown && !this.manager.UIManager.keyState.select) this.downKeyPushed = false;
		if(this.intervalCount >= this.interval)
		{
			if(this.message[this.messageIndex] == '\n')
			{
				if(!this.downKeyPushed)
				{
					if(this.manager.UIManager.keyState.cursorDown || this.manager.UIManager.keyState.select)
					{
						this.downKeyPushed = true;
						this.messageIndex++;
						this.isPaused = false;
					}else
					{
						this.isPaused = true;
					}
				}
			}else
			{
				this.messageIndex++;
				this.isPaused = false;
			}
			
			if(this.messageIndex >= this.message.length)
			{
				//メッセージを閉じる
				if(this.modalFunc)
				{
					this.manager.resumeStage(this.modalFunc);
				}
				if(this.nextWidget)
				{
					this.manager.addWidget(this.nextWidget);
				}
				return false;
			}
			this.intervalCount = 0;
		}else
		{
			this.intervalCount++;
		}
		
		if(this.wBox != null)
		{
			changeMessageBox(this.wBox, this.message.slice(0, this.messageIndex), this.isPaused);
		}
		return true;
	},
	draw : function(){
	}
});

MessageWidgetClass.attachedCount = 0;
