/* -----------------------------------------------------
   コンストラクタ
   ----------------------------------------------------- */
Replay.URL = 'replay.cgi';
Replay.IMAGE_PATH_CARDS = 'img/game/cards';
Replay.IMAGE_PATH_ICON = 'img/game/ico';
Replay.MAX_PLAYERS = 2;
Replay.MAX_CARDS = 8;
/* -----------------------------------------------------
   コンストラクタ
   ----------------------------------------------------- */
function Replay(name) {
    this.name = name;
    this.url = 'replay.cgi';
    this.status = null;
    this.replay_all = null;
    this.replay = null;
    this.max_cards = 0;
}
/* -----------------------------------------------------
   メソッド
   ----------------------------------------------------- */
Replay.prototype.get = function(date) {
    var r = Math.random();
    Replay.show_nowloading();
    $.post(this.url,
	   {
	       'date' : date,
	       'r' : r
	   },
	   function(text) {
	       var replay_all = eval(text);
	       if (replay_all != null) {
		   var status = replay_all.status;
		   var replay = replay_all.replay[0];
		   this.status = status;
		   this.replay_all = replay_all;
		   if ((replay != null) && (replay['publish_date'] != null)) {
		       this.replay = replay;
		       Replay.data_change(replay);
		       Replay.display(replay);
		       Replay.show();
		   }
		   else {
		       Replay.show_none();
		   }
	       }
	   }
	  );
};
/* -----------------------------------------------------
   日付
   ----------------------------------------------------- */
Replay.date_convert = function(date) {
    date = date + '';
    var re = new RegExp(/(....)(..)(..)/);
    if (date.match(re) == null)
	return null;
	
    var year = RegExp.$1;
    var mon = RegExp.$2;
    var day = RegExp.$3;
    var date = year+'/'+mon+'/'+day;
    var pd = new Date(date);
    var publish_year = pd.getYear();
    var publish_month = pd.getMonth();
    var publish_day= pd.getDate();
    if (publish_year < 2000)
	publish_year += 1900;
    publish_month += 1;
    return publish_year+'年'+publish_month+'月'+publish_day+'日';
}
/* -----------------------------------------------------
   プレイ履歴を表示する
   ----------------------------------------------------- */
Replay.display_digest = function(replay) {
    if (replay == null)
	return;
    
    var common_keys = [
	'date',		// 対戦日時
    ];

    if (0) {
	for (var key in common_keys) {
	    key = common_keys[key];
	    $(".play_view ." + key).text(replay[key]);
	}
    }

    for (var player = 0; player < Replay.MAX_PLAYERS; player++) {
	Replay.display_player(replay, player);
	Replay.display_staff(replay, player);
    }

    for (var player = 0; player < Replay.MAX_PLAYERS; player++) {
	// 各ブロック
	var image_cards  = Replay.create_card_images(replay, player);
	$(".play_view_cards_images#p" + player).html(image_cards);
    }

    $(".view_digest .play_view_open").hide();
    if (replay['flag_detail_open'] == 1) 
	$(".view_digest .play_view_open").show();
}
/* -----------------------------------------------------
   プレイ履歴を表示する
   ----------------------------------------------------- */
Replay.show = function() {
    $(".play_view_now_loading").hide();
    $(".play_view_none").hide();
    $(".play_view").show();
}
Replay.show_nowloading = function() {
    $(".play_view_now_loading").show();
    $(".play_view_none").hide();
    $(".play_view").hide();
}
Replay.show_none = function() {
    $(".play_view_now_loading").hide();
    $(".play_view_none").show();
    $(".play_view").hide();
}
Replay.display = function(replay) {
    if (replay == null)
	return;
    
    var common_keys = [
	'date',		// 対戦日時
	'time_cnt',	// 残りカウント
    ];
    for (var key in common_keys) {
	key = common_keys[key];
	$(".play_view ." + key).text(replay[key]);
    }

    var key = 'publish_date';	// 公開日時
    var publish_date = replay[key];
    publish_date  = Replay.date_convert(publish_date);
    $(".play_view ." + key).text(publish_date);

    for (var player = 0; player < Replay.MAX_PLAYERS; player++) {
	Replay.display_player(replay, player);
	Replay.display_staff(replay, player);
    }

    for (var player = 0; player < Replay.MAX_PLAYERS; player++) {
	// 各ブロック
	var image_cards  = Replay.create_card_images(replay, player);
	var table_param  = Replay.create_card_param_table(replay, player);
	var table_tokugi = Replay.create_card_tokugi_table(replay, player);
	var table_attr   = Replay.create_card_attr_table(replay, player);
	var table_score  = Replay.create_card_score_table(replay, player);
	$(".play_view_cards_images#p" + player).html(image_cards);
	$("#p" + player + "param").html(table_param);
	$("#p" + player + "tokugi").html(table_tokugi);
	$("#p" + player + "attr").html(table_attr);
	$("#p" + player + "score").html(table_score);
    }
    var table_ikkiuchi = Replay.create_ikkiuchi_table(replay);
    if (table_ikkiuchi != '') {
	$("#ikkiuchi").html(table_ikkiuchi);
    }
};
/* -----------------------------------------------------------------------------
   各プレイヤーのデータにアクセスするキーを作成する
   ----------------------------------------------------------------------------- */
Replay.key = function(player, key) {
    key = 'p' + player + key
    return key
}
/* -----------------------------------------------------------------------------
   データを最適な表示に変換する
	二人のデッキの最大カード枚数
	チーム名の有無
	奥義レベル表示
   ----------------------------------------------------------------------------- */
Replay.data_change = function(replay) {
    if (replay == null)
	return replay;
	
    var max_cards = 0;
    for (var i = 0; i < Replay.MAX_PLAYERS; i++) {
	for (var j = 0; j < Replay.MAX_CARDS; j++) {
	    var key = Replay.key(i, 'card_params_') + j;
	    if (replay[key] == null)
		break;
	}
	if (max_cards < j)
	    max_cards = j;
    }
    replay.max_cards = max_cards;

    for (var i = 0; i < Replay.MAX_PLAYERS; i++) {
	var key = Replay.key(i, 'team_name');
	if (replay[key] != null) {
	    if (replay[key] != '')
		replay[key] = '「' + replay[key] + '」';
	}
	else
	    replay[key] = '';
	var key = Replay.key(i, 'staff_level');
	if (replay[key] != null) {
	    if (replay[key] != '')
		replay[key] = ' Lv:' + replay[key];
	}
	else {
	    replay[key] = '';
	}
    }
    return replay;
}
/* -----------------------------------------------------------------------------
   各プレイヤーのデータを表示する
   ----------------------------------------------------------------------------- */
Replay.display_player = function(replay, player) {
    var r = Replay;
    var keys = [
	'name',
	'hprate',
	'office',
	'brave',
	'brave_desc',
	'grade_name',
	'team_name',
	'pref_name',
	'win',
	'lose',
	'win_rate',
	'rank',
	'dummy_end'
    ];
    for (var key in keys) {
	var key = r.key(player, keys[key]);
	$(".play_view ." + key).text(replay[key]);
    }

    var keyi = r.key(player, 'image');
    var keyn = r.key(player, 'name');
    var image = '<img src="' + replay[keyi] + '" alt="' + replay[keyn] + '" />';
    $(".view_digest ." + keyi).html(image);
    $(".play_view ." + keyi).html(image);

    var hprate = replay[r.key(player, 'hprate')];
    var guage = r.key(player, 'guage');
    hprate = Math.floor(hprate*2);
    if (player == 0)
	$(".play_view #" + guage).css("right", hprate);
    else 
	$(".play_view #" + guage).css("left", hprate);

    var winlose = replay[r.key(player, 'result')];
    var line = '';
    if (winlose == 'win')
	line = '<img src="img/ico/ico_win.gif" />';
    else if (winlose == 'lose')
	line = '<img src="img/ico/ico_lose.gif" />';
    $('.p' + player + 'result').html(line);
}
/* -----------------------------------------------------------------------------
   各軍師のデータを表示する
   ----------------------------------------------------------------------------- */
Replay.display_staff = function(replay, player) {
    var keys = [
		'skill_ex_name',
		'staff_name',
		'staff_level',
		'staff_zokusei_name',
		'strategy_name',
		'time_usestaff',
		'dummy_end'
		];
    // others
    for (var key in keys) {
	key = Replay.key(player, keys[key]);
	$("." + key).text(replay[key]);
    }
    // 'staff_image',
    var key = Replay.key(player, 'staff_image');
    var image = '';
    if (replay[key] != '') {
	var image = replay[Replay.key(player, 'staff_image')];
	var title = replay[Replay.key(player, 'staff_name')];
	image = '<img src="img/game/cards/' + image + '" width="48" height="34" title="' + title + '" />';
	$("." + key).html(image);
    }
}
/* -----------------------------------------------------------------------------
   武将カードのイメージ
   ----------------------------------------------------------------------------- */
Replay.card_image_source = function(params) {
    var values = params.split(",");
    var cost = values[1];
    var buryoku = values[2];
    var buryoku_plus = values[3];
    var chiryoku = values[4];
    var name = values[5];
    var attr = values[6];
    var image = values[7];
    var title = name + '/' + cost + '/' + buryoku + buryoku_plus + '/' + chiryoku + '/' + attr;
    image = Replay.IMAGE_PATH_CARDS + '/' + image;
    image = '<img src="' + image + '" class="play_view_deck_card_image" width="34" height="48" title="' + title + '" />';
    return image;
}
/* -----------------------------------------------------------------------------
   武将カードのイメージ列を作成する
   ----------------------------------------------------------------------------- */
Replay.create_card_images = function(replay, player) {
    var line = '';
    if (replay != null) {
	for (var j = 0; j < 8; j++) {
	    var key = Replay.key(player, 'card_params_') + j;
	    var param = replay[key];
	    if (param != null) {
		var image = Replay.card_image_source(param);
		line = line + image + "\n";
	    }
	}
    }
    return line;
}
/* -----------------------------------------------------------------------------
   武将カードのパラメータ表を作成する
   ----------------------------------------------------------------------------- */
Replay.create_card_param_table = function(replay, player) {
    if (replay == null)
	return;

    var total_cost = 0;
    var total_buryoku = 0;
    var total_chiryoku = 0;
    var total_buryoku_plus = '';
    var key = Replay.key(player, 'card_params_t');
    if (replay[key] != null) {
	var t = replay[key].split(',');
	total_cost = t[0];
	total_buryoku = t[1];
	total_chiryoku = t[2];
	total_buryoku_plus = t[3];
    }

    var count = 0;
    var table = '';
    var line = '<tr>'+'<th>'+'</th>'+'<th>'+'武将'+'</th>'+'<th>'+'コスト'+'</th>'+'<th>'+'武力'+'</th>'+'<th>'+'知力'+'</th>'+'<th>'+'属性'+'</th>'+'</tr>';
    table = table + line + "\n";
    for (var j = 0; j < 8; j++) {
	var key = Replay.key(player, 'card_params_');
	key = key + j;
	if (replay[key] != null) {
	    var values = replay[key].split(",");
	    var heishu_icon = values[0];
	    var cost = values[1];
	    var buryoku = values[2];
	    var buryoku_plus = values[3];
	    var chiryoku = values[4];
	    var name = values[5];
	    var attr = values[6];
	    if (buryoku_plus != '')
		total_buryoku_plus = buryoku_plus;
	    heishu_icon = '<img src="' + Replay.IMAGE_PATH_ICON + '/' + heishu_icon + '" />';
	    line = '<tr>'+'<td>'+heishu_icon+'</td>'+'<td>'+name+'</td>'+'<td>'+cost+'</td>'+'<td>'+buryoku+buryoku_plus+'</td>'+'<td>'+chiryoku+'</td>'+'<td>'+attr+'</td>'+'</tr>';
	    table = table + line + "\n";
	    count++;
	}
    }
    for (var j = count; j < replay.max_cards; j++) {
	line = '<tr>'+'<td>'+'</td>'+'<td>'+'</td>'+'<td>'+'</td>'+'<td>'+'</td>'+'<td>'+'</td>'+'<td>'+'</td>'+'</tr>';
	table = table + line + "\n";
    }
    line = '<tr>'+'<th>'+'</th>'+'<th>'+'合計'+'</th>'+'<th>'+total_cost+'</th>'+'<th>'+total_buryoku+total_buryoku_plus+'</th>'+'<th>'+total_chiryoku+'</th>'+'<th>'+'</th>'+'</tr>';
    table = table + line + "\n";
    return table;
}
/* -----------------------------------------------------------------------------
   武将カードの特技表を作成する
   ----------------------------------------------------------------------------- */
Replay.create_card_tokugi_table = function(replay, player) {
    if (replay == null)
	return;

    var keys = ['kakusei','yuumou','fukuhei','bousaku','fukkatu','miryoku','bohei','renkei']; 
    var values = new Array();
    for (var i in keys)
	values[keys[i]] = 0;
    
    var key = Replay.key(player, 'card_params_t');
    if (replay[key] != null) {
	var t = replay[key].split(',');
	values['bohei'] = t[4];
	values['bousaku'] = t[5];
	values['fukkatu'] = t[6];
	values['miryoku'] = t[7];
	values['renkei'] = t[8];
	values['yuumou'] = t[9];
	values['fukuhei'] = t[10];
	values['kakusei'] = t[11];
    }

    var count = 0;
    var table = '';
    for (var i in keys) {
	if ((count % 2) == 0)
	    table = table + '<tr>';
	var img = '<img src="' + Replay.IMAGE_PATH_ICON + '/arcade_icon_skill_' + keys[i] + '.gif" />';
	var line = '<td>'+img+'</td>'+'<td>'+values[keys[i]]+'</td>';
	table = table + line;
	if ((count % 2) == 1)
	    table = table + '</tr>' + "\n";
	count++;
    }
    return table;
}
/* -----------------------------------------------------------------------------
   武将カードの属性コスト表を作成する
   ----------------------------------------------------------------------------- */
Replay.create_card_attr_table = function(replay, player) {
    if (replay == null)
	return;

    var ten = 0;
    var ti = 0;
    var jin = 0;
    var key = Replay.key(player, 'card_params_t');
    if (replay[key] != null) {
	var t = replay[key].split(',');
	ten = t[12];
	ti = t[13];
	jin = t[14];
    }

    var table = '';
    table = table + '<tr><td>天</td><td>' + ten + '</td></tr>';
    table = table + '<tr><td>地</td><td>' + ti  + '</td></tr>';
    table = table + '<tr><td>人</td><td>' + jin + '</td></tr>';
    return table;
}
/* -----------------------------------------------------------------------------
   武将カードのスコア表を作成する
   ----------------------------------------------------------------------------- */
Replay.create_card_score_table = function(replay, player) {
    if (replay == null)
	return;

    var count = 0;
    var table = '';
    var line = '<tr>'
	+'<th>'+'</th>'
	+'<th>'+'</th>'
	+'<th>'+"計<br />略"+'</th>'
	+'<th>'+"撃<br />破"+'</th>'
	+'<th>'+"突<br />撃"+'</th>'
	+'<th>'+"迎<br />撃"+'</th>'
	+'<th>'+"被<br />迎<br />撃"+'</th>'
	+'<th>'+"撤<br />退"+'</th>'
	+'<th>'+"踏<br />伏"+'</th>'
	+'<th>'+"攻<br />城"+'</th>'
	+'<th>'+"城<br />門"+'</th>'
	+'<th>'+"ダメ<br />ージ"+'</th>'
	+'</tr>';
    table = table + line + "\n";
    for (var j = 0; j < Replay.MAX_CARDS; j++) {
	key1 = 'p' + player + 'card_params_' + j;
	key2 = 'p' + player + 'card_score_' + j;
	if ((replay[key1] != null) && (replay[key2] != null)) {
	    var values = replay[key1].split(",");
	    var heishu_icon = values[0];
	    var name = values[5];

	    var values = replay[key2].split(",");
	    var strat = values[0];
	    var beatit = values[1];
	    var totsugeki = values[2];
	    var geigeki = values[3];
	    var recv_geigeki = values[4];
	    var dead = values[5];
	    var touchinvisible = values[6];
	    var attack = values[7];
	    var attackweak = values[8];
	    var hprate = values[9];
	    heishu_icon = '<img src="' + Replay.IMAGE_PATH_ICON + '/' + heishu_icon + '" />';

	    line = '<tr>'
		+'<td>'+heishu_icon+'</td>'
		+'<td>'+name+'</td>'
		+'<td>'+strat+'</td>'
		+'<td>'+beatit+'</td>'
		+'<td>'+totsugeki+'</td>'
		+'<td>'+geigeki+'</td>'
		+'<td>'+recv_geigeki+'</td>'
		+'<td>'+dead+'</td>'
		+'<td>'+touchinvisible+'</td>'
		+'<td>'+attack+'</td>'
		+'<td>'+attackweak+'</td>'
		+'<td>'+hprate+'</td>'
		+'</tr>';
	    table = table + line + "\n";
	    count++;
	}
    }
    for (var j = count; j < replay.max_cards; j++) {
	line = '<tr>'
	    +'<td>'+'</td>'
	    +'<td>'+'</td>'
	    +'<td>'+'</td>'
	    +'<td>'+'</td>'
	    +'<td>'+'</td>'
	    +'<td>'+'</td>'
	    +'<td>'+'</td>'
	    +'<td>'+'</td>'
	    +'<td>'+'</td>'
	    +'<td>'+'</td>'
	    +'<td>'+'</td>'
	    +'<td>'+'</td>'
	    +'</tr>';
	table = table + line + "\n";
    }
    return table;
}

/* -----------------------------------------------------------------------------
   一騎打ち情報
   ----------------------------------------------------------------------------- */
Replay.create_ikkiuchi_table = function(replay) {
    var ikkiuchi = null;
    var c0 = replay['ikkiuchi_0_count'];
    var c1 = replay['ikkiuchi_1_count'];
    var line = '';
    var line2 = '';
    if (c0 != null) {
	line += '<div class="play_view_ikkiuchi_container">';
	line += '<div>一騎討ち情報</div>';
	line += '<table class="play_view_table play_view_ikkiuchi_table">';
    }
    if (c0 != null) {
	line += Replay.create_ikkiuchi_td(replay, 0, c0);
	if (c1 != null)
	    line += Replay.create_ikkiuchi_td(replay, 1, c1);
    }
    if (c0 != null) {
	line += '</table>';
	line += '</div>';
    }
    return line;
}
Replay.create_ikkiuchi_td = function(replay, index, count) {
    var line = '';
    var r00 = Replay.create_ikkiuchi_result(replay, index, 0, count);
    var r01 = Replay.create_ikkiuchi_result(replay, index, 1);
    var s00 = Replay.create_ikkiuchi_score(replay, index, 0);
    var s01 = Replay.create_ikkiuchi_score(replay, index, 1);
    var c00 = Replay.create_ikkiuchi_card(replay, index, 0);
    var c01 = Replay.create_ikkiuchi_card(replay, index, 1);
    var t00 = Replay.create_ikkiuchi_result_score(replay, index);
    line += '<tr>'+
	'<td>'+c00+'</td>'+
	'<td>'+s00+'</td>'+
	'<td>'+r00+'</td>'+
	'<td id="count">'+'カウント '+count+'</td>'+
	'<td>'+r01+'</td>'+
	'<td>'+s01+'</td>'+
	'<td>'+c01+'</td>'+
	'</tr>';
    return line;
}
Replay.create_ikkiuchi_result = function(replay, index, player) {
    var key = Replay.key(player, 'ikkiuchi_result_') + index;
    return replay[key];
}
Replay.create_ikkiuchi_score = function(replay, index, player) {
    var key = 'ikkiuchi_' + index + '_score_name_' + player;
    var score = replay[key].split(',');
    var line = score[0]+'-'+score[1]+'-'+score[2]+'-'+score[3]+'-'+score[4];
    return line;
}
Replay.create_ikkiuchi_result_score = function(replay, index) {
    var key = 'ikkiuchi_' + index + '_result_name';
    var score = replay[key].split(',');
    var line = score[0]+'-'+score[1]+'-'+score[2]+'-'+score[3]+'-'+score[4];
    return line;
}
Replay.create_ikkiuchi_card = function(replay, index, player) {
    var key = 'ikkiuchi_' + index + '_card_' + player;
    var info = replay[key].split(',');
    var line = info[0]+' '+'武力:'+info[1];
    return line;
}
