if (navigator.appName.indexOf("Microsoft") <= -1){ // IE以外のモダンなブラウザなら.
 (function(){
  for (var property in Event.prototype){
   if(property.match(/MOUSE|CLICK|KEY/)){
    window.addEventListener(property.toLowerCase(), function(e){
     window.event = e;
    }, true);
   }
  }
 }());
};

/* 設定 */
var tableSize = 6;
var cardsdir = webroot + "img/cards/";
var allCards = new Array(
"意志","清楚","理性","秩序","知恵",
"誓約","善良","節度","至誠","生命",
"寛容","解放","調和","創造","信頼",
"公式","変化","結合","厳格","勇気",
"幸運","庇護","治癒","慈愛"
);
var noIds = new Array("#now_no", "#future_no", "#past_no", "#supporter_no", "#enemy_no", "#result_no");
var formIds = new Array("#PlotNow", "#PlotFuture", "#PlotPast", "#PlotSupporter", "#PlotEnemy", "#PlotResult");

/* 内部変数 */
var cards;
var showState = 0;
var openState = 0;

function setTable() {
	if (openState) {
		openState = 0;	// オープンしている場合は終了
	}
	var imgTag = "<img src=\""+cardsdir+"0.jpg\" alt=\"カード\" width=\"70px\"/>";
	if (showState == 0) {			// 逐次オープンへ
		showState = 1;
	} else if (showState == 1) {	// 即効オープンへ
		showState = 2;
		return;
	} else {
		return;
	}
	clearLabel();
	$("#plotSupplement").html("");
	cards = makeCards();
	
	for (i = 0; i < tableSize; i++) {
		$("#card"+i).html(imgTag);
		$("#card"+i+" > img").hide();
	}
	
	showTable(0);
}

function showTable(i) {
	if (i >= tableSize || openState == 2) {
		showState = 0;
		return;
	}
	if (showState == 2) {
		showNow();
		return;
	}
	
	$("#card"+i+" > img").slideDown("normal", function() {
									showTable(i+1);
	});
}

/**
 * 即効オープン
 */
function showNow() {
	for (i = 0; i < tableSize; i++) {
		$("#card"+i+" > img").show();
	}
	showState = 0;
}

function openTable() {
	if (openState == 0) {			// 逐次オープンへ
		openState = 1;
	} else if (openState == 1) {	// 即効オープンへ
		openState = 2;
		return;
	} else {
		return;
	}
	pickCard(0);
}

function pickCard(i) {
	if (openState == 3) {
		openState = 0;
		return;
	}
	if (i >= tableSize) {
		openState = 0;
		setLabel();
		return;
	}
	if (openState == 2) {
		openNow();
		return;
	}
	
	$("#card"+i+" > img").slideUp("normal", function() {
									openCard(i);
	});
}

function openCard(i) {
	if (openState == 0) {	// 終了
		return;
	}
	var index = Math.abs(cards[i]);
	if (cards[i] > 0) {
		$("#card"+i+" > img").attr({src:cardsdir+index+".jpg", alt:allCards[index-1]});
	} else {
		$("#card"+i+" > img").attr({src:cardsdir+"-"+index+".jpg", alt:allCards[index-1]+"(逆さま)"});
	}
	$("#card"+i+" > img").slideDown("normal", function() {
									pickCard(i+1);
	});
}

/**
 * 即効オープン
 */
function openNow() {
	if (openState == 0) {	// 終了
		return;
	}
	for (i = 0; i < tableSize; i++) {
		var index = Math.abs(cards[i]);
		if (cards[i] > 0) {
			$("#card"+i+" > img").attr({src:cardsdir+index+".jpg", alt:allCards[index-1]});
		} else {
			$("#card"+i+" > img").attr({src:cardsdir+"-"+index+".jpg", alt:allCards[index-1]+"(逆さま)"});
		}
		$("#card"+i+" > img").show();
	}
	openState = 0;
	setLabel();
}

function makeCards() {
	var index = makeIndexArray();
	var selected = new Array(tableSize);
	
	for (i = 0; i < tableSize; i++) {
		selected[i] = index.splice(Math.floor(Math.random()*index.length), 1);
	}
	
	return selected;
}

function makeIndexArray() {
	var index = new Array(allCards.length);
	for (i = 0; i < allCards.length; i++) {
		var sign = Math.random() < 0.5 ? -1 : 1;
		index[i] = (i+1) * sign;
	}
	return index;
}

function resumeCards() {
	var imgTag = "<img width=\"70px\"/>";
	var noCards = false;
	
	cards = new Array(tableSize);
	for (i = 0; i < tableSize; i++) {
		cards[i] = $(noIds[i]).attr("value");
		if ("undefined" == cards[i] || 0 == cards[i]) {
			noCards = true;
			break;
		}
		$("#card"+i).html(imgTag);
	}
	if (noCards) {
		setTable();
		return;
	}
	openState = 2;
	openNow();
	setLabel();
}

function roop() {
	setTable();
	setTimeout("openTable()", 6000);
	setTimeout("roop()", 14000);
}

function clearLabel() {
	for (i = 0; i < tableSize; i++) {
		$("#plot"+i).html("");
	}
}

function setLabel() {
	for (i = 0; i < tableSize; i++) {
		var index = Math.abs(cards[i]) -1;
		var label = allCards[index];
		if (cards[i] < 0) {
			label += "（逆）";
		}
		$("#plot"+i).html(label)
					.attr("style", "background-color: #98FB98")
					.hover(function(){
							var no = $(this).attr("id").substr(4);
							setSupplement(Math.abs(cards[no])-1);
						}, function(){})
					.hover(function(){
							$(this).attr("style", "background-color: #FFABFF");
						}, function(){
							$(this).attr("style", "background-color: #98FB98");
						})
					.fadeIn("slow");
		$(noIds[i]).attr("value", cards[i]);
	}
}

/* あらすじジェネレート */
function generateStory() {
	$.post(
		webroot+"plots/generate/",
		{},
		function(json){
			if (json == "") {
				$("#PlotStory").attr("value", "");
				return;
			}
			var data = eval("("+json+")");
			if (typeof data != "object") {
				$("#PlotStory").attr("value", "");
				return;
			}
			
			var story = data['story'];
			var index = 0;
			var formVals = new Array();
			for (i = 0; i < formIds.length; i++) {
				if (undefined != $(formIds[i]).attr("value") && "" != $(formIds[i]).attr("value")) {
					formVals[index] = $(formIds[i]).attr("value");
					index++;
				}
			}
			var min = formVals.length < data['heads'].length ? formVals.length : data['heads'].length;
			for (i = 0; i < min; i++) {
				var re = new RegExp(data['heads'][i], "g");
				story = story.replace(re, formVals[i]);
			}
			
			$("#PlotStory").attr("value", story);
		}
	);
}

function setSupplement(index) {
	$.post(
		webroot+"najax/getSupplement/"+index,
		null,
		function(supplement){
			$("#plotSupplement").html(supplement);
		}
	); 
}

/* 類語検索 */
function getSynonym() {
	var imgtag = '<img src="' + webroot + 'img/ajax-loader.gif" alt="検索中..." />';
	$("#synonymResult").html(imgtag);
	$.post(
		webroot+"najax/getSynonym/"+encodeURIComponent($("#word").attr("value")),
		{},
		function(json){
			if (json == "") {
				$("#synonymResult").html("該当単語がありません");
				return;
			}
			var data = eval(json);
			if (typeof data != "object") {
				$("#synonymResult").html("検索に失敗しました");
				return;
			}
			var html = "<ul>";
			for (i = 0; i < data.length; i++) {
				html += "<li>" + data[i] + "</li>";
			}
			html += "</ul>";
			$("#synonymResult").html(html);
		}
	);
}

function synonym_key_press(fm) {
	if (event.keyCode == 13) {
		getSynonym();
	}
}

/* 名字ランダム取得 */
function getRandomLnames() {
	var imgtag = '<img src="' + webroot + 'img/ajax-loader.gif" alt="検索中..." />';
	$("#lnameResult").html(imgtag);
	$.post(
		webroot+"lnames/getrandom/",
		{},
		function(json) {
			if (json == "") {
				$("#lnameResult").html("データの取得に失敗しました");
				return;
			}
			var data = eval(json);
			if (typeof data != "object") {
				$("#lnameResult").html("データの取得に失敗しました");
				return;
			}
			var html = "<ul>";
			for (i = 0; i < data.length; i++) {
				html += "<li>" + data[i]['ideogram'] + "（" + data[i]['phonogram'] + "）</li>";
			}
			html += "</ul>";
			$("#lnameResult").html(html);
		}
	);
}

/* 名字検索 */
function searchLnames() {
	var imgtag = '<img src="' + webroot + 'img/ajax-loader.gif" alt="検索中..." />';
	$("#lnameResult").html(imgtag);
	$.post(
		webroot+"lnames/search/",
		{'word':$("#lnameword").attr("value")},
		function(json) {
			if (json == "") {
				$("#lnameResult").html("データの取得に失敗しました");
				return;
			}
			var data = eval(json);
			if (typeof data != "object") {
				$("#lnameResult").html("データの取得に失敗しました");
				return;
			}
			var html = "<ul>";
			for (i = 0; i < data.length; i++) {
				html += "<li>" + data[i]['ideogram'] + "（" + data[i]['phonogram'] + "）</li>";
			}
			html += "</ul>";
			$("#lnameResult").html(html);
		}
	);
}

function lname_key_press(fm) {
	if (event.keyCode == 13) {
		searchLnames();
	}
}

/* 名前検索 */
function searchFnames() {
	var imgtag = '<img src="' + webroot + 'img/ajax-loader.gif" alt="検索中..." />';
	$("#fnameResult").html(imgtag);
	$.post(
		webroot+"fnames/search/",
		{'word':$("#fnameword").attr("value")},
		function(json) {
			if (json == "") {
				$("#fnameResult").html("データの取得に失敗しました");
				return;
			}
			var data = eval(json);
			if (typeof data != "object") {
				$("#fnameResult").html("データの取得に失敗しました");
				return;
			}
			var html = "<ul>";
			for (i = 0; i < data.length; i++) {
				html += "<li>" + data[i]['ideogram'] + "（" + data[i]['phonogram'] + "）</li>";
			}
			html += "</ul>";
			$("#fnameResult").html(html);
		}
	);
}

function fname_key_press(fm) {
	if (event.keyCode == 13) {
		searchFnames();
	}
}

function savePlot(fm) {
	fm.submit();
}
