﻿var status = 'top';

//カード裏表
var flag = new Array(13);

//カード
var card = new Array(21);
for(i=0; i<card.length; i++){
	card[i] = i + '0';
	if(i < 10){
		card[i] = '0' + card[i];
	}
}

//カード画像
var cardImage = new Array(21);
for(i=0; i<cardImage.length; i++){
	cardNo = card[i].substring(0, 2);
	
	cardImage[i] = new Array(2);
	cardImage[i][0] = new Image();
	cardImage[i][0].src = cardNo + '0.gif';
	
	cardImage[i][1] = new Image();
	cardImage[i][1].src = cardNo + '1.gif';
}

var domXml;

addListener(window, 'load', load, false);

function load(e){
	setListeners();

	reset();
	
	//XMLファイル読み込み
	if(window.ActiveXObject){
		domXml = new ActiveXObject('Microsoft.XMLDOM');
		domXml.setProperty('SelectionLanguage', 'XPath');
	}
	else if(document.implementation){
		domXml = document.implementation.createDocument('', '', null);
	}
	else{
		alert('このブラウザでは使用できません。');
		return;
	}
	domXml.async = false;
	domXml.load('tarot.xml');
	
	document.getElementById('top').style.display = 'block';
	document.getElementById('next').style.display ='block';
}
function setListeners(){
	var ele;
	
	//次へ
	ele = document.getElementById('next');
	addListener(ele, 'click', goNext, false);
	//シャッフル
	ele = document.getElementById('shuffle');
	addListener(ele, 'click', shuffle, false);
	//閉じる
	ele = document.getElementById('close');
	addListener(ele, 'click', closeMes, false);
	
	//カード
	for(i=1; i<=13; i++){
		ele = document.getElementById('img_card' + i);
		addListener(ele, 'click', cardClick, false);
	}
}

function reset(){
	for(i=0; i<flag.length; i++){
		flag[i] = 0;
		document.getElementById('img_card' + (i+1)).src = '0.gif';
	}
}

function goNext(){
	document.getElementById(status).style.display = 'none';
	if(status == 'top'){
		//シャッフル画面
		status = 'shuffle';
	}else if(status == 'shuffle'){
		//メイン画面
		status = 'main';
		document.getElementById('next').innerHTML = 'トップへ';
		
		//httpRequest('tarot.xml');
		
	}else if(status == 'main'){
		//トップ画面
		status = 'top';
		document.getElementById('next').innerHTML = '次へ';
		
		reset();
	}
	document.getElementById(status).style.display = 'block';
}
//シャッフル
function shuffle(){
	var count, a, b, temp1, temp2;
	count = 50 + Math.floor(Math.random() * 50);
	for(i=0; i<count; i++){
		//aとb入れ替え
		a = Math.floor(Math.random() * card.length);
		b = Math.floor(Math.random() * card.length);
		temp1 = card[a];
		card[a] = card[b];
		card[b] = temp1;
		//上下反転
		card[a] = card[a].substring(0, 2) + Math.floor(Math.random() * 2);
		card[b] = card[b].substring(0, 2) + Math.floor(Math.random() * 2);
	}
}
function cardClick(e){
	//ID名取得
	var id = getElement(e).id;
	//ハウス番号
	var houseNo = eval(id.substr(8, id.length-8));
	//カードNo
	var cardNo = eval(card[houseNo+6].substr(0,2));
	//位置
	var position = eval(card[houseNo+6].substr(2,1));
	
	if(flag[houseNo-1]==0){
		//カードを開く
		getElement(e).src = cardImage[cardNo][position].src;
		flag[houseNo-1] = 1;
	}else{
		var houseEle = getXpathSingleNode(domXml, domXml, "/tarot/tarot_house[@no='" + houseNo + "']");
		var cardEle = getXpathSingleNode(domXml, domXml, "/tarot/tarot_card[@no='" + cardNo + "']");
		var posEle = getXpathSingleNode(domXml, cardEle, "position[@kind='" + position + "']");
		var mesEle = getXpathSingleNode(domXml, posEle, "message[@house='" + houseNo + "']");
		
		var noRome = getElementText(cardEle, 'no_rome');
		var nameJ = getElementText(cardEle, 'name_j');
		var nameE = getElementText(cardEle, 'name_e');
		var cardMessage = getElementText(cardEle, 'message');
		cardMessage = cardMessage.replace(/\n/g, '<br />');

		var keyword = getElementText(posEle, 'keyword');
		var houseMessage = mesEle.firstChild.nodeValue;
		var houseValue = houseEle.firstChild.nodeValue;
		
		var positionJ = '正位置';
		if(position == '1'){
			positionJ = '逆位置';
		}
		
		document.getElementById('mes1').innerHTML = noRome + '.' + nameJ + ' (' + nameE + ')';
		document.getElementById('mes2').innerHTML = cardMessage;
		
		document.getElementById('mes3').innerHTML = '*** [ ' + cardNo + '. ' + nameJ + '・' + positionJ + ' ] の Key Word ***';
		document.getElementById('mes4').innerHTML = keyword;
		document.getElementById('mes5').innerHTML = '&lt; 第' + houseNo + 'ハウス : ' + houseValue + ' &gt;<br />*** このハウスにあるこのカードの意味するもの ***';
		document.getElementById('mes6').innerHTML = houseMessage;
		
		//メッセージを表示する
		document.getElementById('message').style.visibility = 'visible';
	}
}
function getXpathSingleNode(doc, element, xpath){
	if(window.XPathResult){
		var res = doc.evaluate(xpath, element, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null);
		return res.singleNodeValue;
	}else{
		var root = domXml.documentElement;
		return element.selectSingleNode(xpath);
	}
}
function getElementText(element, tag){
	var eles = element.getElementsByTagName(tag);
	return eles[0].firstChild.nodeValue;
}

function closeMes(){
	document.getElementById('message').style.visibility = 'hidden';
}

function getElement(e){
	if(e.target){
		return e.target;
	}else{
		return e.srcElement;
	}
}

function getElement(e){
	if(e.target){
		return e.target;
	}else{
		return e.srcElement;
	}
}
function addListener(elem, eventType, func, cap){
	if(elem.addEventListener){
		elem.addEventListener(eventType, func, cap);
	}else if(elem.attachEvent){
		elem.attachEvent('on' + eventType, func);
	}else{
		alert('ご利用のブラウザでは、本プログラムをご利用いただけません。');
	}
}
