// ********** Common
var m_bFocus = 0;

// ********** Const
var m_strDataName = '103,101,110,101,114,97,116,111,114,45,115,101,107,105,104,101,107,105,46,100,97,116';
var m_strTalkOK = '<0>お主の功績を称えて称号を授けよう。<br />お主の名前を教えてくれ。</0>@<1>わたしの名前は@{name}です。</1>@@@<0>{name}、@お主に与える称号は@・@・@・@@@<br /><span style="color:red;">{0}</span><br />@だ。</0>@@@<1>{1}</1>';
var m_strTalkNG = '<0>お主の功績を称えて称号を授けよう。<br />お主の名前を教えてくれ。</0>@<0>{0}</0>@<1>・・・。</1>';
var m_strMsgNameNone = '名前を入力して下さい。';
var m_strMsgNameRegx = '全角かなか全角カナか英語で入力して下さい。';
var m_iAnimeSt = 1;

// ********** Draw
var m_astrData = new Array();
var m_elmNb;
var m_elmRs;
var m_iAnime;
var m_timAnime;
var m_strDefine;
var m_strTalk = '';
var m_astrTalk = new Array(); 
var m_iAnimeEd;
var m_strName = '';

var m_iSumMin;
var m_iSumMax;
var m_iSumCnt;

window.onload = sbInit;

function sbInit() {
	// Init Area
	var strHTML;
	strHTML = '';
	strHTML += '<div id="sekiheki_all"style="display: none;">' + "\n";
	strHTML += '<div id="sekiheki_pn"><table class="no"><tr><td id="sekiheki_nb"></td></tr></table></div>' + "\n";
	strHTML += '<div id="sekiheki_input"><table class="no">' + "\n";
	strHTML += '<tr>' + "\n";
	strHTML += '<td>私の名前は <input id="sekiheki_req" name="sekiheki_req" type="text" class="text" value="" maxlength="30" size="20" style="ime-mode: active;"  onfocus="fnFocus_anosekiheki(this);" onblur="fnBlur_anosekiheki(this);" /> です。</td>' + "\n";
	strHTML += '<td><input id="sekiheki_send" name="sekiheki_send" type="button" value="沙汰を待つ" onclick="fnSend_anosekiheki();" onfocus="fnFocus_anosekiheki(this);" onblur="fnBlur_anosekiheki(this);" /></td>' + "\n";
	strHTML += '</tr>' + "\n";
	strHTML += '</table></div>' + "\n";
	strHTML += '<input id="sekiheki_res" type="hidden" value="~~" />' + "\n";
	strHTML += '</div>' + "\n";
	document.getElementById('generator').innerHTML = strHTML;
	
	// Create NameBox
	m_elmRs = document.getElementById('sekiheki_res');
	m_elmNb = document.getElementById('sekiheki_nb');
	
	// GD
	//window.prompt('',fnGetNameCode(''));
	fnGD();
	
	// Start Timer
	m_iAnime = m_iAnimeSt;
	m_timAnime = setInterval('sbAnime()',700);
}

function fnGetNameCode(strName) {
	var iIdx;
	var strList = '';
	for (iIdx = 0; iIdx < strName.length; iIdx++) {
		strList += (strList == '' ? '' : ',') + strName.charCodeAt(iIdx);
	}
	return strList;
}

function sbAnime() {
	var iIdx;
	var astrDefine = new Array();
	var strDefine;
	var strTemp;
	var astrWord = new Array();
	var bNull;
	
	if (m_astrData.length > 0 && m_bFocus == 0) {
		m_iSumCnt = m_astrData.length - 1;
		bNull = true;
		for (iIdx = m_iSumCnt; iIdx >= 0 && bNull; iIdx--) {
			bNull = (m_astrData[iIdx].length <= 1);
		}
		m_iSumCnt = iIdx + 1;
		m_iSumMin = 1;
		for (iIdx = 0; iIdx < 20; iIdx++) {
			if (m_iSumMin * 2 < m_iSumCnt) {
				m_iSumMin *= 2;
			}
		}
		m_iSumMax = m_iSumMin * 2;
		//alert('m_iSumCnt : ' + m_iSumCnt + "\n" + 'm_iSumMin : ' + m_iSumMin + "\n" + 'm_iSumMax : ' + m_iSumMax + "\n");
		document.getElementById('sekiheki_all').style.display = 'block';
		
		document.getElementById('sekiheki_req').focus();
		m_bFocus = 1;
	}
	
	// Start Animation
	strDefine = '' + m_elmRs.value;
	if (strDefine != '' && strDefine != m_strDefine) {
		m_iAnime = m_iAnimeSt;
		m_strDefine = strDefine;
		
		// Init
		astrDefine = (strDefine + '~~').split('~');
		if (astrDefine[1] != '') {
			strTemp = m_strTalkNG;
			astrWord = astrDefine[1].split(',');
		} else {
			strTemp = m_strTalkOK;
			astrWord = astrDefine[2].split(',');
		}
		for (iIdx = 0; iIdx < astrWord.length; iIdx++) {
			strTemp = strTemp.replace('{' + iIdx + '}',astrWord[iIdx]);
		}
		strTemp = strTemp.replace(/\{name\}/g,m_strName);
		strTemp = strTemp.replace(/\\n/g,'<br />');
		m_astrTalk = strTemp.split('@');
		
		if (astrDefine[1] != '' || astrDefine[2] != '') {
			m_iAnimeEd = m_astrTalk.length + 1;
		} else {
			m_iAnimeEd = 1;
		}
	}
	
	if (m_iAnime <= m_iAnimeEd) {
		m_strTalk = '';
		for (iIdx = 0; iIdx < m_astrTalk.length && iIdx < m_iAnime; iIdx++) {
			m_strTalk += m_astrTalk[iIdx];
		}
		m_strTalk = fnGetTalk_anosekiheki(m_strTalk);
		if (m_elmNb.innerHTML != m_strTalk) {
			m_elmNb.innerHTML = m_strTalk;
		}
		m_iAnime ++;
	}
}

function fnGetTalk_anosekiheki(strMsg) {
	strMsg = strMsg.replace(/<0>/g,'<div class="talkb"><div class="talkh"><div class="talkf"><div class="talk0"><div class="talkm">');
	strMsg = strMsg.replace(/<1>/g,'<div class="talkb"><div class="talkh"><div class="talkf"><div class="talk1"><div class="talkm">');
	strMsg = strMsg.replace(/<\/.>/g,'</div></div></div></div></div>');
	return strMsg;
}

function fnSend_anosekiheki() {
	var strReq;
	var iIdx;
	
	strReq = document.getElementById('sekiheki_req').value;
	
	m_strName = strReq.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/,/g,"&#44;");
	if (strReq == '') {
		m_elmRs.value = '~' + m_strMsgNameNone + '~';
		return false;
	}
	if (! strReq.match(/^[a-zA-Z\-ａ-ｚＡ-Ｚぁ-んァ-ヶー－]*$/)) {
		m_elmRs.value = m_strName + '~' + m_strMsgNameRegx + '~';
		return false;
	}
	
	var iSum = 0;
	var iCode;
	for (iIdx = 0; iIdx < strReq.length; iIdx++) {
		iCode = strReq.charCodeAt(iIdx);
		iSum = (iSum + iCode + ((iCode % 2 == 0 ? 171 : 23) * iCode) + (iCode % 3 == 1 ? 10291 : 351) + (iCode % (iIdx * iIdx + 3))) % m_iSumMax;
	}
	if (iSum >= m_iSumCnt) {
		iSum = iSum % m_iSumMin;
	}
	iSum++;
	//alert(iSum);
	
	// Safety Check
	if (m_astrData[iSum].length < 1) {
		iSum = 1;
	}
	//alert(iSum);
	
	m_elmRs.value = '~~';
	m_strDefine = m_elmRs.value;
	m_elmRs.value = m_astrData[iSum];
	
	return false;
}

// EnterKey Event
var m_elmFocus;
function fnFocus_anosekiheki(elmNum){
	m_elmFocus = elmNum
	elmNum.style.backgroundColor = '#a88';
	elmNum.select();
}
function fnBlur_anosekiheki(elmNum){
	elmNum.style.backgroundColor = '';
}
function fnGetKeycode_anosekiheki(e){
	if (document.all) {
		return event.keyCode;
	} else if (document.getElementById) {
		return (e.keyCode!=0) ? e.keyCode : e.charCode;
	} else if(document.layers){
		return e.which;
	}
}
function fnKeyPress_anosekiheki(e){
	if(fnGetKeycode_anosekiheki(e) == 13) {
		if        (m_elmFocus.id == 'sekiheki_send') { document.getElementById('sekiheki_req').focus(); fnSend_anosekiheki();
		} else if (m_elmFocus.id == 'sekiheki_req')  { document.getElementById('sekiheki_send').focus();
		}
		return false;
	}
}
document.onkeypress = fnKeyPress_anosekiheki;

function fnCreateXMLHttp(){
	if(window.ActiveXObject){
		try {
			return new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try {
				return new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e2) {
				return null;
	 		}
	 	}
	} else if(window.XMLHttpRequest){
		return new XMLHttpRequest();
	} else {
		return null;
	}
}
function fnGD(){
	var astrDataName = new Array();
	var strDataName = '';
	astrDataName = m_strDataName.split(',');
	for (iIdx = 0; iIdx < astrDataName.length; iIdx++) {
		strDataName += String.fromCharCode(astrDataName[iIdx]);
	}
	
	// Cache 
	var dNow = new Date();
	
	// Create Object
	var xmlhttp = fnCreateXMLHttp();
	var strData;
	if (xmlhttp) {
		xmlhttp.open('GET', strDataName + '?time=' + dNow.getTime());
		xmlhttp.onreadystatechange = function() {
			if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
				strData = xmlhttp.responseText;
				m_astrData = strData.split("\n");
			}
		}
		xmlhttp.send(null);
	}
}
