﻿	var n = 0;

	var day ='';
	var lastday = 12;
	var logreg;
	var memo_id =1;
	var memoB = new Array();
	var memoC;
	var log = new Array();
			var arr = new Array();
					arr["log"] = new Array();
						//arr["log"]["2"] = new Array();					
					arr["投票"] = new Array();
					arr["得票"] = new Array();
					arr["player"] = new Array();

	var electhtml = "";

	var tohyo = "投票";
	var electtable = "";
	var e_count ="";
	var tr2 = new Array();tr2[0]= "<tr><th>回数</th>";
	function elect(){
		if(document.form.edit.value != ""){
			//electtable += "<a href='#"+day+"elect'>"+ day +"日目</a>　";
			arr[day] = new Array();
			log[elect] = document.form.edit.value;
			arrelect = log[elect].split("\n");
			reg = new RegExp("([0-9]{1,2})[ \t\s]+日目[ \t\s]+.[ \t\s]+([0-9]{1,2})[ \t\s]+回目.","g");
			if(arrelect[0].match(reg)){e_count = arrelect[0].match(reg);tr2[0] = tr2[0]+"<th>"+e_count+"</th>";electtable +="<a href='#"+RegExp.$1+RegExp.$2+"elect'>"+arrelect[0].match(reg);electhtml +="<a id ='"+RegExp.$1+RegExp.$2+"elect'>" +arrelect[0].match(reg)+"投票結果";arrelect.shift();}
			//alert(arrelect[0]);
			 
			reg = new RegExp("(.*)[ \t\s]+([0-9]{1,2}[ \t\s]+票)[ \t\s]+投票先[ \t\s]?([0-9]{1,2}[ \t\s]+票?[ \t\s]+)?→[ \t\s]+(.*)", "g");
			if(navigator.appName=='Microsoft Internet Explorer'){
			
			if(arrelect[arrelect.length] == undefined){arrelect.length = arrelect.length -1;}
//			reg = new RegExp("([^「]+)さん ([0-9]+ 票) 投票先 → ([^「]+)さん", "g");
			}

		
					electhtml +="<br /><table><tr><th>投票者</th><th>得票数</th><th>投票先</th><th>得票先</th></tr>";
				for (i=0; i<arrelect.length;i++){
				logreg = arrelect[i].replace(/[ \s\t]*$/g,"").match(reg);
					if(!arr[day][RegExp.$1]){arr[day][RegExp.$1]　= new Array();arr[day][RegExp.$1]["得票"] =''} 
//				arr[day][RegExp.$1]　= new Array();
				arr[day][RegExp.$1]["投票"]= RegExp.$4;
				arr[day][RegExp.$1]["得票数"] = RegExp.$2;
					if(!arr[day][RegExp.$4]){arr[day][RegExp.$4]　= new Array();arr[day][RegExp.$4]["得票"] =''} 
				arr[day][RegExp.$4]["得票"] += RegExp.$1 +" , ";
					//electhtml += "<tr><th>"+RegExp.$1+"</th><td>"+RegExp.$2+"</td><td>"+RegExp.$3+"</td></tr>";
				if(!arr["投票"][RegExp.$1]){arr["投票"][RegExp.$1] = new Array();}
				arr["投票"][RegExp.$1][e_count] =  RegExp.$4;
				}
				for ( player in arr[day]){
				
				//alert(player);
					electhtml += "<tr><th>"+player+"</th><td>"+arr[day][player]["得票数"]+"</td><td>"+arr[day][player]["投票"]+"</td><td>"+arr[day][player]["得票"]+"</td></tr>";
				}
				electhtml += "<tr><th>投票者</th><th>得票数</th><th>投票先</th><th>得票先</th></tr></table><a href='#anchor'>投票日リストへ</a><hr />";

					document.getElementById("electhtml").innerHTML = electhtml;
		//document.title = "投票ログ";
					var m=1;
						for ( player in arr["投票"]){
				//alert(player);
					tr2[m] = "<tr><th>"+player+"</th>";
						for( count in arr["投票"][player]){
							tr2[m] += "<td>"+arr["投票"][player][count] +"</td>";
						}
					tr2[m] += "<th>"+player+"</th></tr>";
					m = m+1;
				}
			var electhistory = "<table>";		
		for(i=0;i<tr2.length;i++){
		electhistory += tr2[i];
		}
		electhistory += "</table>";
		document.getElementById("ehistory").innerHTML = electhistory;
		document.getElementById("electtable").innerHTML = "<a id='anchor'>" + electtable;
		}
		document.form.edit.value = "";
	}

	function logsave() {
		if(document.form.edit.value != ""){
			document.getElementById("view").innerHTML = "";
			//薔薇鯖のみ日にちの後に半角スペース
			if(document.form.edit.value.match(/朝日が昇り ([0-9]+) ?日目の朝がやってきました/g)){
				day = RegExp.$1;
			}else if(day == ''){
				day = 2;
			}else{
				day++;
			}
			arr["log"][day] = new Array();
		log[day] = document.form.edit.value;

		// if(log[day].match(/　{12}[\r\n]*.*?[\r\n]◆/)){
			//alert(RegExp.lastMatch);
		// }
		//alert(log[day]);
		logact = log[day]
		.replace(/　{12}ゲームマスター：[^\0]+?[\r\n]◆/g,"\n◆")//システムメッセージがあったら削除（流石鯖）
		.replace(/[\r\n](身代わり君|GM|ＧＭ)：[^\0◆]+?」[\r\n]/g,"」\n")//GM発言があったら削除（薔薇鯖）
		.replace(/[\r\n](身代わり君|GM|ＧＭ)：[^\0]+?[^」][\r\n](身代わり君|GM|ＧＭ|◆)/g,"\n$2")//GM発言があったら削除（薔薇鯖）
		//.replace(/[\r\n](身代わり君|GM|ＧＭ)：[^\0]+?」[\r\n](身代わり君|GM|ＧＭ|◆)/g,"\n$2")//GM発言があったら削除（薔薇鯖）
		.replace(/[\r\n].+?が「異議」を申し立てました ?/g,"\n")//
		.replace(/[\r\n].+?処刑投票しました ?/g,"\n")//
		.replace(/(◆[^\t]*)[ \s\t]+[\r\n]?(「)/g,"$1 	$2")//CNと「の間のスペースを半角スペースTABに統一
		.replace(/\s+$/mgi, "")//行末にスペース類があったら削除
		.replace(/([^」])[\r\n]+/g ,"$1<br>")//発言の最後またはTABの後でない改行、つまり発言内の改行を<br>に変換
		.replace(/ \t<br>「/mgi," 	「");//
		if(window.opera){
		logact = logact.replace(/(」)([\r\n]|<br>)+([^◆])/g ,"$1<br>$2");//」の後に改行をした次の行の先頭の文字が◆ではない場合改行を<br>変換
		}else{
		logact = logact.replace(/(」)[\r\n]+([^◆])/g ,"$1<br>$2");//」の後に改行をした次の行の先頭の文字が◆ではない場合改行を<br>変換
		// Operaにて改行のあとに>が挿入される？
		}
		logact = logact.replace(/」◆/g,"」◆");//
		//alert(logact);
		 reg = new RegExp("◆.*」[ \t]*", "g");
		logreg = logact.match(reg);
		for (var i=0;i<logreg.length;i++){
			ii=0;
			rre1 = "";
			rre2 ="";
			reg = new RegExp("「","g");
			rr1 = logreg[i].match(reg);
			reg = new RegExp("」","g");
			rr2 = logreg[i].match(reg);
			while(rr1.length != rr2.length){
				kinkyu = logreg[i];
				logreg[i] += logreg[i+ii+1];
				ii++;
				reg = new RegExp("「","g");
				rr1 = logreg[i].match(reg);
				reg = new RegExp("」","g");
				rr2 = logreg[i].match(reg);		
				if(ii > 10){
					rr1=rr2;
					logreg[i] = kinkyu;ii = 0;
				}
			}
		
			 reg = new RegExp("◆([^\t]+?)[ \t]+「(.+)」", "m");
				rrr = logreg[i].match(reg);
					rre1 = RegExp.$1;
					rre2 = RegExp.$2;
					rre1 =rre1.replace(" ","");
			//alert(RegExp.$1);
			var count = logreg.length - i;			//発言間隔表示　2010/06/03　テスト実装
				if(!arr["log"][day][rre1]){arr["log"][day][rre1] = new Array();}
				arr["log"][day][rre1]+= "<table><tr><th class='user-name'><a href='javascript:void(0)' onClick='addmemo(this);return false'>◆</a>" + rre1 +  "("+ count +")</th><td class='user-said'>　「" + rre2 + "」</td></tr></table>";
				//alert(arr["log"][day][RegExp.$1]);
				i += ii;
		}
				document.form.edit.value = "";
				var e = document.createElement("LI");
				var a = document.createElement("A");
				a.setAttribute("href","javascript:void(0)");
			//IEはnew Functionで呼び出す
				if(navigator.userAgent.toLowerCase().indexOf('msie') != -1) {
					a.setAttribute("onclick",new Function("allshow("+ day +")"));
				}else{
					a.setAttribute("onClick","allshow("+ day +")");
				}
				a.appendChild(document.createTextNode(day+"日目"));
				e.appendChild(a);
				document.getElementById("footer_list").appendChild(e);
			display();

}
	}

	function display(){
		tr = new Array();
			if(arr["player"][0] == undefined){
				for(aaa in arr["log"][day]){
					arr["player"].push(aaa.replace(" ",""));
					//alert(aaa);
				}
				arr["player"].sort();
				//alert(arr["player"]+" 以上"+arr["player"].length+"名を参加者として登録しました。");
			}
		tr[0] = "<tr><th width='50'>"+arr["player"].length+"名</th>";
				for(aaa in arr["player"]){

					tr[0] += "<th><a href='javascript:void(0)' onclick='playershow("+aaa+")'>" + arr["player"][aaa] + "</a></th>";
				}				
				dayshow(day);
							
		tr[0] +="</tr>";
		for ( ddd in arr["log"]){
		tr[ddd] = "<tr><th><a href='javascript:void(0)' onclick='dayshow("+ ddd +")'>" + ddd +"日</a></th>";
			for ( aaa in arr["player"]){
			if(arr["log"][ddd][arr["player"][aaa]]){
			reg = new RegExp("<tr","gm");
				kazu = arr["log"][ddd][arr["player"][aaa]].match(reg);
				tr[ddd] +="<td><a href='javascript:void(0)' onclick='indshow("+ ddd +","+aaa+")'>" +kazu.length + "</a></td>";

			}
			else{
				tr[ddd] +="<td class='said-nothing'>　</td>";
			}
			}
		tr[ddd] += "</tr>";
		}
		
		table = "<table>";
		for ( nnn in tr){
			if (nnn == "0"){
				table +="<thead>" + tr[0] +"</thead>";
				table +="<tfoot>" + tr[0] +"</tfoot>";
			}
			else{
				table += tr[nnn];
			}
		}
		table += "</table>";
		document.getElementById("sanka").innerHTML = "<a id='anchor'>" + table;
		document.title = day +"日目会話ログ";
		}
	function dayshow(day){
		document.getElementById("view").innerHTML = '';
		for(aaa in arr["player"]){

			if(arr["log"][day][arr["player"][aaa]]){
				reg = new RegExp("<tr","gm");
				kazu = arr["log"][day][arr["player"][aaa]].match(reg);
				document.getElementById("view").innerHTML += "<a id='" + arr["player"][aaa] +"'><big style='font-weight:bold'>【" +arr["player"][aaa] + "】さんの発言回数："  + kazu.length + "回</big><br />";
				document.getElementById("view").innerHTML += "<table border=4 align=center>";	
				document.getElementById("view").innerHTML += arr["log"][day][arr["player"][aaa]];	
				document.getElementById("view").innerHTML += "</table><br /><a href='#anchor'>参加者リストへ</a><hr />";				}
		}
	}
	
	
	
	
	function checktypeon(value){ mode = value;}
	function allshow(value){
		logact = log[value].replace(/[\r\n]/g ,"<br />");
		//alert("check1");
		//alert(arr["player"].length);
		for(var j=0;j<arr["player"].length;j++){
		 var temp ='"player'+ j +'"';
		 var reg = new RegExp(arr["player"][j],"g");
		 //alert(reg);
		logact = logact.replace(reg,"<span class="+temp+" onMouseover='hoverClassPlayer("+temp+")' onMouseout='outClassPlayer("+temp+")'  onClick='clickClassPlayer("+temp+")'>"+arr["player"][j]+"</span>");
		}
		//alert(logact);
		document.getElementById("view").innerHTML = logact;
	}
	function playershow(value){
	document.getElementById("view").innerHTML = "";
		for(i=lastday; 0 <i; i--){
			if(arr["log"][i]){
				if(arr["log"][i][arr["player"][value]]){
					document.getElementById("view").innerHTML += i +"日目<br />" +arr["log"][i][arr["player"][value]]+ "<hr />";
				}
			}
		}
	}

	function indshow(when,who){
			if(arr["log"][when]){
				if(arr["log"][when][arr["player"][who]]){
					document.getElementById("view").innerHTML = when +"日目<br />" +arr["log"][when][arr["player"][who]];
				}
			}
		}
	function memoshow(value){
		var memo_no = value-1;
		document.getElementById("view").innerHTML = "MEMO."+value +"<br>";
		document.getElementById("view").innerHTML += memoB[memo_no];
	}
	
	function addplayer(){
	jcount = 0;
		job = new Array();
		if(document.form.edit.value){
			tempName = document.form.edit.value;
			reg = new RegExp("◆[^\t]+\n","g");
			if(tempName.match(reg)){
				tempNames = tempName.split(/[\r\n]/);
				//alert(tempNames);
				reg = new RegExp("◆([^\t]+?) *$","g");
				for(i=0; i<tempNames.length;i++){
					tripreg = new RegExp("[^\t ]◆","g");
					if(tempNames[i].match(tripreg)){
						continue;
					}
					if(tempNames[i].match(reg)){
						matchName = tempNames[i].match(reg);
						arr["player"].push(RegExp.$1.replace(" ",""));
					}
				}
				arr["player"].sort();
				alert(arr["player"]+" 以上"+arr["player"].length+"名を参加者として登録しました。");
				document.form.edit.value = "";
				for(var j=0;j<arr["player"].length;j++){
					var e = document.createElement("LI");
					var a = document.createElement("A");
					a.setAttribute("href","javascript:void(0)");
				//IEはnew Functionで呼び出す
					if(navigator.userAgent.toLowerCase().indexOf('msie') != -1) {
						a.setAttribute("onclick",new Function("playershow("+ j +")"));
					}else{
						a.setAttribute("onclick","playershow("+ j +")");
					}
					a.appendChild(document.createTextNode(arr["player"][j]));
					e.appendChild(a);
					document.getElementById("footer_list").appendChild(e);
				}
					selector_show();
			}
			else{
				alert("コピーする場所が違う可能性があります。もう一度確認してみて下さい。");
			}
		}else{alert("空白ですよ");}
	}
	function showplayer(){
		alert(arr["player"]+" 以上"+arr["player"].length+"名が参加者として登録されています。");
	}
	
	function selector_show(){//未完了
		var select_co = "<select id='co_player'>";
		var gray = "";
		for(var j=0;j<arr["player"].length;j++){
			select_co += "<option value="+arr["player"][j]+">"+arr["player"][j]+"</option>";
			gray += "◆" +arr["player"][j] +" ";
		}
		
		matome_text = "【占い】\n\n【霊能】\n\n【共有】 - \n\n【無残】\n\n【吊り】\n\n【完グレ】"+gray+"\n\n【死体】\n";
		gray = "<span class='pgray'>【完グレ】"+gray+"</span><br />";
		$("#matome_form").append(gray);
		
		document.form.edit.value = matome_text;
		select_co += "</select>";
		select_co += "<select id='co_job'>";
		select_co += "<option value='mage'>占い師</option>";
		select_co += "<option value='necromancer'>霊能者</option>";
		select_co += "<option value='common'>共有者</option>";
		select_co += "<option value='guard'>狩人</option>";
		select_co += "<option value='cat'>猫又（埋毒者）</option>";
		select_co += "<option value='wolf'>人狼</option>";
		select_co += "<option value='mad'>狂人</option>";
		select_co += "<option value='fox'>妖狐</option>";
		select_co += "<option value='assassin'>決闘者</option>";
		select_co += "</select>";

		select_co += "<input type='button' id='co' name='co' value='CO' onClick='comingOut()' /><br />";
		 var select_death = "<select id='dead_player'>";
		for(var j=0;j<arr["player"].length;j++){
			select_death += "<option value="+arr["player"][j]+">"+arr["player"][j]+"</option>";
		}
		select_death += "</select>";
		select_death += "<select id='dead_kind'>";
		select_death += "<option value='無残'>無残</option>";
		select_death += "<option value='吊り'>吊り</option>";
		select_death += "<option value='死体'>死体</option>";
		select_death += "<option value='突然死'>突然死</option>";
		select_death += "<option value='その他'>その他</option>";
		select_death += "</select>";
		select_death += "<input type='button' id='death' name='death' value='死因' onClick='dead()' /><br />";		

		$("#matome_form").append(select_co);
		$("#matome_form").append(select_death);
		$("#matome_form").append("<span class='bite'>【<span class='wolf'>無残</span>】</span><br />");
		$("#matome_form").append("<span class='execute'>【吊り】</span><br />");
		$("#matome_form").append("<span class='death'>【その他死体】</span><br />");
		
	}
			 reg = new RegExp("◆([^\t]+?)[ \t]+「(.+)」", "m");
				rrr = logreg[i].match(reg);
	function comingOut(){
		var n=$("#co_job option:selected").val();
		var m=$("#co_player option:selected").val();
		$(".pgray").text($(".pgray").text().replace(m,""));
		job[n] = new Array();
		job[n][m] = new Array();
		job[n][m]["no"] = jcount;
		if(n == "mage" || n == "necromancer"){
			job[n][m]["span"] = "<span class='job"+jcount+"'>[<span class='"+n+"'>"+$("#co_job option:selected").text()+"</span>]"+m+"：</span><br />";
			job[n][m]["select"] = "<select id='worker"+jcount+"'>";
			job[n][m]["gray"] ="";
				for(var j=0;j<arr["player"].length;j++){
					if(arr["player"][j] == m){
						continue;
					}
					job[n][m]["gray"] += "◆" +arr["player"][j] +" ";
					job[n][m]["select"] += "<option value="+arr["player"][j]+">"+arr["player"][j]+"</option>";
				}
			job[n][m]["select"] +="</select><input type='button' id='submitworker"+jcount+"1' value='○' onClick='work("+jcount+",1)' /><input type='button' id='submitworker"+jcount+"0' value='●' onClick='work("+jcount+",0)' /><br />";
			$("#matome_form").append("<hr />"+job[n][m]["select"]);
			
		 }else {
			job[n][m]["span"] = "<span class='job"+jcount+"'>[<span class='"+n+"'>"+$("#co_job option:selected").text()+"</span>]"+m+"</span>";
		 }
		
		$("#matome_form").append(job[n][m]["span"]);
		if( n == "mage"){
			$("#matome_form").append("<span class='gray"+jcount+" "+n+"rst'>【"+m+"グレ】"+job[n][m]["gray"]+"</span><br />");
		}
		jcount++;
	}
	
	function work(x,y){
			$(".job"+x).append($("#worker"+x+" option:selected").val()+$("#submitworker"+x+y).val()+"　<span class='arrow'>-></span>　");
				$(".pgray").text($(".pgray").text().replace($("#worker"+x+" option:selected").val(),""));
				$(".gray"+x).text($(".gray"+x).text().replace($("#worker"+x+" option:selected").val(),""));
						$("#worker"+x+" option:selected").remove();
		
	}
	function dead(){
		switch($("#dead_kind option:selected").val()){
			case "無残":
				$(".bite").append($("#dead_player option:selected").val()+"　<span class='arrow'>-></span>　");
				$(".pgray").text($(".pgray").text().replace($("#dead_player option:selected").val(),""));
				$(".magerst").each(function(){
 					$(this).text($(this).text().replace($("#dead_player option:selected").val(),""));
				});

			break;
			case "吊り":
				$(".execute").append($("#dead_player option:selected").val()+"　<span class='arrow'>-></span>　");
				$(".pgray").text($(".pgray").text().replace($("#dead_player option:selected").val(),""));
			break;
			default :
				$(".death").append($("#dead_player option:selected").val()+"　<span class='arrow'>-></span>　");
				$(".pgray").text($(".pgray").text().replace($("#dead_player option:selected").val(),""));				
			break;
		}
		$("#dead_player option:selected").remove();
	}
	function addmemo(putmemo){
		memo_contents ="";
	if(putmemo){
	//alert(putmemo.parentNode.parentNode.innerHTML.replace(/<br>/g,'\n').replace(/<.*?[^\/]>/g,'').replace(/\n/g,'<br>'))
		putmemo = putmemo.parentNode.parentNode.innerHTML.replace(/<br>/g,'\n').replace(/<.*?[^\/]>/g,'').replace(/\n/g,'<br>');
		//memo_contents ="<p id='memo"+memo_id+"'><input type='button' value='x' id='memo_delete"+memo_id+"+' onClick='deletememo("+memo_id+")' />memo"+memo_id+"."+putmemo.parentNode.parentNode.innerHTML.replace(/<br>/g,'\n').replace(/<.*?[^\/]>/g,'').replace(/\n/g,'<br>')+"</p>";
	}else{
		putmemo = document.form.edit.value.replace(/\n/g,'<br>');
		}
		putmemo_f = '"'+ putmemo + '"';
		putmemo_frep = putmemo_f.replace(/<.*?[^\/]>/g,'') ;
		memo_contents ="<p id='memo"+memo_id+"'><input type='button' value='x' id='memo_delete"+memo_id+"+' onClick='deletememo("+memo_id+")' /><input type='button' value='i' id='memo_delete"+memo_id+"' onClick='document.form.edit.value += "+putmemo_frep+";' />memo"+memo_id +"."+putmemo+"</p>";
		document.getElementById("memo_form").innerHTML += memo_contents;
		document.form.edit.value = "";
		memo_id++
	}
	function deletememo(number){
		var e = document.getElementById("memo"+number);
		//alert(e);
		document.getElementById("memo_form").removeChild(e);
	}
	function addmemoB(){
		memoB.push(document.form.edit.value);
		memoBNo = memoB.length;
				document.form.edit.value = "";
				var e = document.createElement("LI");
				var a = document.createElement("A");
				a.setAttribute("href","javascript:void(0)");
			//IEはnew Functionで呼び出す
				if(navigator.userAgent.toLowerCase().indexOf('msie') != -1) {
					a.setAttribute("onclick",new Function("memoshow("+ memoBNo +")"));
				}else{
					a.setAttribute("onClick","memoshow("+ memoBNo +")");
				}
				a.appendChild(document.createTextNode("MEMO."+memoBNo));
				e.appendChild(a);
				document.getElementById("footer_list").appendChild(e);		
		}
		
	function savememoC(){
		memoC = document.form.edit.value;
		document.form.edit.value = "";
	}
	function readmemoC(){
		document.form.edit.value = memoC;
	}
//全体ログに於いてプレイヤーの名前にカーソルで色変更	
	function hoverClassPlayer(name){
		var e = document.getElementsByClassName(name);
			for(var i=0;i<e.length;i++){
			e[i].className = name +' hover';
			}
	}
//全体ログに於いてプレイヤーの名前からカーソルアウトで元に戻す
	function outClassPlayer(name){
		var e = document.getElementsByClassName(name);
		for(var i=0;i<e.length;i++){
			e[i].className = e[i].className.replace(' hover','');
		}
	}
	function clickClassPlayer(name){
	var e = document.getElementsByClassName(name);
		for(var i=0;i<e.length;i++){
		e[i].className = name +' clip';
		}
	}