// キャッチコピークイズ

//-------------------- 定数 --------------------
var DATA_CARD  = 0;		// CATCHCOPY_DATA の 0 番目の項目：カード名
var DATA_KANJI = 1;		// CATCHCOPY_DATA の 1 番目の項目：漢字モードのキャッチコピー
var DATA_KANA  = 2;		// CATCHCOPY_DATA の 2 番目の項目：ひらがなモードのキャッチコピー

var Q_NUM_MAX = 20;		// 出題される問題数

var PROB_KANA = 0.25;		// ひらがなモードのキャッチコピーが表示される確率

var TIME_DISP_INTERVAL = 10;		// 時間表示の間隔（ミリ秒）

var DISP_Q_NUM_TIME  = 1000;		// 問題数表示の時間（ミリ秒）
var DISP_ANSWER_TIME = 2000;		// 正解表示の時間（ミリ秒）

//-------------------- グローバル変数 --------------------
var CatchcopyData = new Array();	// カード名とキャッチコピーのデータ
var GameStatus;			// ゲームの状態(0:開始前 1:問題数表示 2:回答入力待ち 3:正解表示 4:完成)
var StatusTimer;		// 状態遷移のタイマーID
var TimeInterval;		// 時間計測のタイマーID
var StartTime;			// ゲーム開始時の Date オブジェクト
var QuestionNum;		// 現在何問目か
var Score;				// 正解数
var AnswerCard;			// 現在出題されているカードの CatchcopyData 中の位置

//--------------------------------------------------------------------------------
// 表示処理
//--------------------------------------------------------------------------------
// リセットボタンを押したときの初期化処理
function initDisp()
{
	$('game_score').innerHTML     = '0';
	$('gamefinish').style.color   = '#999999';
	$('game_catchcopy').innerHTML = 'ここにキャッチコピーが表示されます。';
	$('game_cardname').value      = '';
	$('game_ok').style.color      = '#999999';
	$('game_ng').style.color      = '#999999';
	$('game_answer').innerHTML    = '';

	dispTime(0, 0, 0);
}

//--------------------------------------------------------------------------------
// データ処理
//--------------------------------------------------------------------------------
// リセットボタンを押したときの初期化処理
function initData()
{
	clearInterval(TimeInterval);
	clearTimeout(StatusTimer);

	for(var i = 0; i < CATCHCOPY_DATA.length; i++){
		CatchcopyData[i] = new Array();
		for(var j = 0; j < CATCHCOPY_DATA[i].length; j++){
			CatchcopyData[i][j] = CATCHCOPY_DATA[i][j];
		}
	}

	GameStatus    = 0;
	StartTime     = null;
	QuestionNum   = 0;
	Score         = 0;
	AnswerCard    = null;
}

// ゲーム終了時の処理
function endGame()
{
	clearInterval(TimeInterval);
	GameStatus = 4;
	var play_time = doDispTime();
	$('gamefinish').style.color = '#cc0000';

	// Ajaxで得点、クリアタイムを送信
	var url = document.URL.split("#")[0];
	new Ajax.Request(url, {
		method: "post",
		parameters: "score=" + Score + "&play_time=" + play_time
	});
}

//--------------------------------------------------------------------------------
// ゲーム処理
//--------------------------------------------------------------------------------
// スタートボタンを押したときのゲーム開始処理
function gameStart()
{
	$('start_button').disabled = true;
	$('reset_button').disabled = false;

	// スタート時間を取得
	StartTime = new Date();
	TimeInterval = setInterval('doDispTime()', TIME_DISP_INTERVAL);

	// 問題数表示の開始
	beginDispQuestionNum()
}

// プレイ時間表示のインターバル関数
function doDispTime()
{
	var now_time;
	var play_time;
	var min;
	var sec;
	var ms;

	now_time      = new Date();									// 現在の時間を取得
	play_time     = now_time.getTime() - StartTime.getTime();	// プレイ時間を通算ミリ秒で計算
	min           = Math.floor(play_time / (60*1000));			// '分'取得
	play_time_sub = play_time - (min * 60*1000);
	sec           = Math.floor(play_time_sub / 1000);			// '秒'取得
	ms            = Math.floor((play_time_sub % 1000) / 10);	// 'コンマ○秒'取得
	dispTime(min, sec, ms);

	return play_time;
}

// プレイ時間を表示
function dispTime(min, sec, ms)
{
	if(sec < 10){
		sec = '0' + sec;
	}
	if(ms < 10){
		ms = '0' + ms;
	}
	$('gametime').value = min + ':' + sec + '.' + ms;
}

// 問題数表示の開始処理
function beginDispQuestionNum()
{
	clearTimeout(StatusTimer);

	// データ
	GameStatus = 1;
	QuestionNum++;
	AnswerCard = Math.floor(Math.random() * CatchcopyData.length);

	// 表示
	$('game_catchcopy').innerHTML = '第 ' + QuestionNum + ' 問';
	$('game_cardname').value      = '';
	$('game_cardname').focus();
	$('game_ok').style.color      = '#999999';
	$('game_ng').style.color      = '#999999';
	$('game_answer').innerHTML    = '';

	StatusTimer = setTimeout('endDispQuestionNum()', DISP_Q_NUM_TIME);
}

// 問題数表示の終了処理
function endDispQuestionNum()
{
	clearTimeout(StatusTimer);

	// データ
	GameStatus = 2;

	// 表示
	var type;
	if( Math.random() < PROB_KANA ){
		// ひらがな
		type = DATA_KANA;
	} else {
		// 漢字
		type = DATA_KANJI;
	}
	$('game_catchcopy').innerHTML = CatchcopyData[AnswerCard][type];

	$('answer_button').disabled = false;
}

// 回答ボタンを押したときの処理
function gameAnswer()
{
	if(GameStatus != 2){
		return;
	}

	$('answer_button').disabled = true;

	// 答え合わせ
	var cardname = $('game_cardname').value;
	var answer   = CatchcopyData[AnswerCard][DATA_CARD];
	if(cardname == answer){
		Score++;
		$('game_score').innerHTML = Score;
		$('game_ok').style.color = '#cc0000';
	} else {
		$('game_ng').style.color = '#0000cc';
	}
	$('game_answer').innerHTML = answer;

	// 出題したカードのデータを CatchcopyData から抜く
	CatchcopyData.splice(AnswerCard, 1);

	// 次のシーケンスへ
	if(QuestionNum == Q_NUM_MAX){
		// ゲーム終了
		endGame();
	} else {
		// 問題数表示のタイマーをセット
		GameStatus = 3;
		StatusTimer = setTimeout('beginDispQuestionNum()', DISP_ANSWER_TIME);
	}
}

//--------------------------------------------------------------------------------
// 初期化
//--------------------------------------------------------------------------------
// onload時の初期化処理
function init()
{
	gameReset();
}

// リセットボタンを押したときの初期化処理
function gameReset()
{
	initData();
	initDisp();

	$('reset_button').disabled  = true;
	$('answer_button').disabled = true;
	$('start_button').disabled  = false;
}

window.onload = init;
