// ********** Const
// ***** Timer
var m_iTrunSpan = 6000;
var m_iAnimeMilliSec = 50;

// ***** Buki
var m_iMargin = 5;
var m_iCvWt = 640;
var m_iCvHt = 480;
var m_strPV = '';

// ***** Rank
var m_iColMax = 5;

// ********** Timer And Common
var m_iPar;
var m_timAnime;
var m_elmCv1;
var m_ctxCv1;
var m_strDefine;
var m_strColor;
var m_iBlendPar;
var m_iPatnCnt;
var m_astrText = new Array();
var m_astrPath = new Array();
var m_iScaleLimit = 100;
var m_iPathLimit = 100;
var m_bFinish = true;
var m_aiRandFlare = new Array();

// ********** Battle
var m_timTimer;
var m_elmSw1;
var m_elmRk1;
var m_elmNb1;
var m_elmTd1;
var m_strFull = '';
var m_astrFullType  = new Array();
var m_astrFullAnime = new Array();
var m_astrFullChar  = new Array();
var m_astrMessages = new Array();
var m_iRealTimeMinus = 0;
var m_iBattleTurnIdx = -1;
var m_iBattleTurnMax = 0;

// ********** Map
var m_aiCircle = new Array();
var m_iPieceAnime = 10;
var m_iMarginMap = 80;
var m_iPieceSize = 100;
var m_astrLabel = new Array();
var m_astrCol = new Array();
var m_aiX0 = new Array();
var m_aiY0 = new Array();
var m_aiHp0 = new Array();
var m_aiX1 = new Array();
var m_aiY1 = new Array();
var m_aiHp1 = new Array();
var m_iZoom;
var m_iAdjustX;
var m_iAdjustY;

// ********** Rank
var m_astrRank = new Array();

window.onload = sbInit;

function sbInit() {
	// ********** Init Canvas
	m_elmCv1 = document.getElementById('buki_showcv');
	m_ctxCv1 = m_elmCv1.getContext('2d');
	m_ctxCv1.lineWidth = 1;
	
	// ********** Init Battle
	m_elmSw1 = document.getElementById('buki_showpn');
	m_elmRk1 = document.getElementById('buki_rankpn');
	m_elmNb1 = document.getElementById('buki_shownb');
	m_elmTd1 = document.getElementById('buki_showms');
	m_elmTd1.innerHTML = m_strPV;
	sbInitHuman();
	
	m_astrMessages = document.getElementById('buki_messages').value.split(',');
	
	var dNow = new Date();
	var iSec = (dNow.getMinutes() * 60 + dNow.getSeconds()) * 1000 + dNow.getMilliseconds();
	m_iRealTimeMinus = -iSec + m_iTrunSpan * 0;
	
	// ********** PV Mode
	if (m_strPV != '') {
		m_iCvWt = 180;
		m_iCvHt = 180;
		m_iMarginMap = 30;
		m_elmSw1.style.backgroundColor = '#888888';
		m_elmCv1.style.backgroundColor = '#66502d';
		m_elmCv1.width = m_iCvWt;
		m_elmCv1.height = m_iCvHt;
	}
	// ********** Start Timer
	m_timAnime = setInterval('sbAnime()',m_iAnimeMilliSec);
	m_timTimer = setInterval('sbTurn()',5000);
	document.getElementById('buki_wait').style.display = 'none';
	document.getElementById('buki_all').style.display = 'block';
//	fnSend_anobuki();
}

function sbRealTime_anobuki(){
	document.getElementById('buki_realtime').disabled = true;
	m_iRealTimeMinus = 0;
}

function sbTurn() {
	// ********** Timer
	var dNow = new Date();
	var iSec = (dNow.getMinutes() * 60 + dNow.getSeconds()) * 1000 + dNow.getMilliseconds();
	var iNow = Math.floor(iSec / m_iTrunSpan);
	
	// ********** Cehck Next Anime
	var strFull;
	var astrFull = new Array();
	
	strFull = '' + document.getElementById('buki_full').value;
	
	// ********** Start Animation
	if (strFull != '' && strFull != m_strFull) {
		m_strFull = strFull;
		
		// ********** Init
		astrFull = strFull.split('@');
		m_astrFullType  = astrFull[0].split(':');
		if (astrFull.length > 2) {
			m_astrFullChar  = astrFull[2].split(':');
			astrFull[1] = astrFull[1].replace(/{c\-(.*?)}/g,function(strMark) { return m_astrFullChar[(parseInt(strMark.substr(3,strMark.length - 4),16) - 16) / 3]; });
		}
		m_astrFullAnime = astrFull[1].split(':');
		m_iBattleTurnMax = m_astrFullType.length;
		
		// ********** View Panel
		if (m_elmSw1.style.display == 'none') {
			m_elmSw1.style.display = 'block';
			m_elmRk1.style.display = 'none';
		}
		
		// ********** Start
		m_bFinish = false;
	}
	
	// ********** RealTime Button
	document.getElementById('buki_realtime').value = m_astrMessages[(iNow < m_astrFullType.length ? 0 : 1)];
	document.getElementById('buki_realtime').disabled = ((dNow.getMinutes() >= 50) || m_bFinish || m_iRealTimeMinus == 0);
}

function sbAnime() {
	if (m_strFull == '' || m_bFinish) {
		return false;
	}
	
	var dNow = new Date();
	var iSec = (dNow.getMinutes() * 60 + dNow.getSeconds()) * 1000 + dNow.getMilliseconds() + m_iRealTimeMinus;
	
	if (iSec < 0) {
		iSec += Math.ceil(-iSec / 3600000) * 3600000;
	}
	
	m_iBattleTurnIdx = Math.floor(iSec / m_iTrunSpan);
	m_iPar = (iSec % m_iTrunSpan) / (m_iTrunSpan  - m_iAnimeMilliSec);
	m_iPar = (m_iPar < 0 ? 0 : (m_iPar > 1 ? 1 : m_iPar));
	
	if (m_iBattleTurnIdx >= m_iBattleTurnMax) {
		m_iBattleTurnIdx = m_iBattleTurnMax - 1;
		m_iPar = 1;
	}
	
//	document.getElementById('buki_turn').value = m_iBattleTurnIdx;
//	document.getElementById('buki_timer').value = m_iPar;
	
	if (m_iBattleTurnIdx < m_iBattleTurnMax) {
		if (document.getElementById('buki_res').value != m_astrFullAnime[m_iBattleTurnIdx]) {
			document.getElementById('buki_res').value = m_astrFullAnime[m_iBattleTurnIdx];
		}
		if (document.getElementById('buki_typ').value != m_astrFullType[m_iBattleTurnIdx]) {
			document.getElementById('buki_typ').value = m_astrFullType[m_iBattleTurnIdx];
		}
		if        (m_astrFullType[m_iBattleTurnIdx] == 'b') { sbBuki();
		} else if (m_astrFullType[m_iBattleTurnIdx] == 's') { sbScroll();
		} else if (m_astrFullType[m_iBattleTurnIdx] == 'm') { sbMap();
		} else if (m_astrFullType[m_iBattleTurnIdx] == 'r') { sbRank();
		}
	}
	
}

function sbBuki() {
	var iLen;
	var iIdx;
	var strDefine;
	var astrDefine = new Array();
	var astrScale = new Array();
	var iConstDefine = 3;
	
	strDefine = '' + document.getElementById('buki_res').value;
	
	// ********** Start Animation
	if (strDefine != '' && strDefine != m_strDefine) {
		m_strDefine = strDefine;
		
		m_elmNb1.innerHTML = '';
		if (m_strPV == '') {
			m_elmTd1.innerHTML = '';
		}
		
		// ********** Init
		astrDefine = strDefine.split('~');
		m_astrText = astrDefine[0].replace(/#/g, '<br />').split(',');
		m_strColor = astrDefine[1];
		m_iBlendPar = astrDefine[2];
		m_iPatnCnt = (astrDefine.length - iConstDefine) / 2;
		for (iIdx = 0; iIdx < m_iPatnCnt; iIdx++) {
			astrScale = astrDefine[iConstDefine + iIdx].split(',');
			m_astrPath[iIdx] = new Array();
			m_astrPath[iIdx] = astrDefine[iConstDefine + m_iPatnCnt + iIdx].split(' ');
			sbAdjustPath(iIdx,Number(astrScale[0]),Number(astrScale[1]));
		}
		sbCreatePathLocate(1);
		sbCreatePathbuki(2);
		
		// ********** Init Flare
		for (iIdx = 0; iIdx < 5; iIdx++) {
			m_aiRandFlare[iIdx] = Math.random();
		}
	}
	
	// ********** Calc
	var iAni;
	var iPar;
	var iSize;
	if        (m_iPar < 0.15) { iAni = 0; iPar = 0; iSize = 1;
	} else if (m_iPar < 0.35) { iAni = 0; iPar = (m_iPar - 0.15) / 0.2; iSize = 1;
	} else if (m_iPar < 0.55) { iAni = 1; iPar = (m_iPar - 0.35) / 0.2; iSize = 1;
	} else if (m_iPar < 0.75) { iAni = 1; iPar = 1; iSize = 1 + Math.sin(((m_iPar - 0.55) / 0.2) * Math.PI) * 0.5;
	} else                    { iAni = 1; iPar = 1; iSize = 1;
	}
	
	// ********** Draw
	var strBg;
	if (iPar >= 0 && iPar <= 1) {
		// ***** Flash
		strBg = (Math.random() * 100 < 10 && iPar < 0.9 ? '#fff' : '#66502d');
		if (m_elmCv1.style.backgroundColor != strBg) {
			m_elmCv1.style.backgroundColor = strBg;
		}
		
		// ***** Clear
		m_ctxCv1.clearRect(0,0,m_iCvWt,m_iCvHt);
		
		// ***** Draw Flare
		if (m_iPar >= 0.15 && m_iPar < 0.75) {
			sbDrawFlare(0,0,iSize,'fff',true);
		}
		
		// ***** Draw Weapon
		m_ctxCv1.fillStyle = '#' + m_strColor;
		sbDrawLine(m_ctxCv1,0,0,m_iCvWt,m_iCvHt,iAni,iPar,iSize,true);
		
		// ***** Draw Flare
		if (m_iPar >= 0.15 && m_iPar < 0.75) {
			sbDrawFlare(0,0,iSize,'fff',false);
		}
	}
	
	// ********** View Message
	var strHTML;
	if (m_strPV == '') {
		iLen = Math.floor(m_iPar * 4) + 2;
		iLen = (m_astrText.length < iLen ? m_astrText.length : iLen);
		strHTML = '';
		for (iIdx = 1; iIdx < iLen; iIdx++) {
			if (m_astrText[iIdx] != '') {
				strHTML += m_astrText[iIdx] + '<br />';
			}
		}
		if (m_elmTd1.innerHTML != strHTML) {
			m_elmTd1.innerHTML = strHTML;
		}
	}
}

function sbDrawFlare(iX,iY,iZ,strColor,bBack) {
	var iIdx;
	var iFlareCnt;
	var iFlareSpeed;
	var iFlareSize;
	var iTempX,iTempY,iTempZ;
	
	m_ctxCv1.fillStyle = '#' + strColor;
	
	iFlareCnt = Math.round(1 + 6 * m_aiRandFlare[0]);
	iFlareSize = m_iCvWt / 200 * (1 + 3 * m_aiRandFlare[1]);
	for (iIdx = 0; iIdx < iFlareCnt; iIdx++) {
		// ***** Calc Flare
		iFlareSpeed = (4 + 5 * m_aiRandFlare[2]) + iIdx * 2;
		iTempX = m_iCvWt / 2 + Math.cos(m_iPar * iFlareSpeed * Math.PI) * ((Math.sin(m_iPar * (1 + 10 * m_aiRandFlare[3]) * Math.PI)) * (m_iCvWt / 8) + (m_iCvWt / 4)) * iZ + iX;
		iTempY = m_iCvHt / 2 + Math.sin(m_iPar * iFlareSpeed * Math.PI) * ((Math.sin(m_iPar * (1 + 10 * m_aiRandFlare[4]) * Math.PI)) * (m_iCvWt / 8) + (m_iCvWt / 4)) * iZ + iY;
		iTempZ = (iFlareSize + Math.sin(m_iPar * iFlareSpeed * Math.PI) * iFlareSize + 1) * iZ;
		
		// ***** Draw Flare
		if (iTempZ <= iFlareSize * iZ == bBack) {
			m_ctxCv1.beginPath();
			m_ctxCv1.arc(iTempX,iTempY,iTempZ,0 * Math.PI / 180,1 * Math.PI / 180,1);
			m_ctxCv1.closePath();
			m_ctxCv1.fill();
		}
	}
}

var m_avarPropaty = new Array();
function sbScroll() {
	var iScrCut = 4;
	var iLen;
	var iIdx,iIdx2,iIdx3;
	var strNew0,iSkip0;
	var strNew1,iSkip1;
	var strNew2,iSkip2;
	var strDefine;
	var astrDefine = new Array();
	var astrScale = new Array();
	var iConstDefine = 1;
	
	strDefine = '' + document.getElementById('buki_res').value;
	
	// ********** Start Animation
	if (strDefine != '' && strDefine != m_strDefine) {
		m_strDefine = strDefine;
		
		m_elmNb1.innerHTML = '';
		if (m_strPV == '') {
			m_elmTd1.innerHTML = '';
		}
		
		// ********** Init
		astrDefine = strDefine.split('~');
		m_astrText = astrDefine[0].replace(/#/g, '<br />').split(',');
		m_iPatnCnt = (astrDefine.length - iConstDefine) / 3;
		strNew0 = '';
		strNew1 = '';
		strNew2 = '';
		iSkip0 = 0;
		iSkip1 = 0;
		iSkip2 = 0;
		for (iIdx = 0; iIdx < iScrCut * 2; iIdx++) {
			iIdx2 = iIdx % m_iPatnCnt;
			strNew0 = astrDefine[iConstDefine + m_iPatnCnt * 0 + iIdx2];	// Propaty
			strNew1 = astrDefine[iConstDefine + m_iPatnCnt * 1 + iIdx2];	// Scale
			strNew2 = astrDefine[iConstDefine + m_iPatnCnt * 2 + iIdx2];	// Path
			if (strNew0.length < 3) { strNew0 = astrDefine[iConstDefine + m_iPatnCnt * 0 + iSkip0]; } else { iSkip0 = iIdx2; }
			if (strNew1.length < 3) { strNew1 = astrDefine[iConstDefine + m_iPatnCnt * 1 + iSkip1 + iIdx2 % 2]; } else { iSkip1 = Math.floor(iIdx2 / 2) * 2; }
			if (strNew2.length < 3) { strNew2 = astrDefine[iConstDefine + m_iPatnCnt * 2 + iSkip2 + iIdx2 % 2]; } else { iSkip2 = Math.floor(iIdx2 / 2) * 2; }
			
			// Propaty
			m_avarPropaty[iIdx] = new Array();
			m_avarPropaty[iIdx] = strNew0.split(',');
			for (iIdx3 = 1; iIdx3 < m_avarPropaty[iIdx].length; iIdx3++) {
				m_avarPropaty[iIdx][iIdx3] = Number(m_avarPropaty[iIdx][iIdx3]);
			}
			
			// Scale
			astrScale = strNew1.split(',');
			
			// Path
			m_astrPath[iIdx] = new Array();
			m_astrPath[iIdx] = strNew2.split(' ');
			sbAdjustPath(iIdx,Number(astrScale[0]),Number(astrScale[1]));
		}
		
		// ********** Init Flare
		m_aiRandFlare[0] = 0.3;
		m_aiRandFlare[1] = 0.5;
		m_aiRandFlare[2] = 0;
		m_aiRandFlare[3] = -Math.random();
		m_aiRandFlare[4] = -Math.random();
	}
	
	// ********** Calc
	var iPar;
	var iMovePar;
	var iTrunPar;
	var iX;
	var iY;
	var iZ;
	
	if (m_iPar < 1) {
		iIdx = Math.floor(m_iPar * iScrCut);
		iPar = m_iPar * iScrCut - iIdx;
	} else {
		iIdx = iScrCut - 1;
		iPar = 1;
	}
	
	iMovePar = (1 - Math.cos(iPar * Math.PI)) / 2;
	iTrunPar = (1 - Math.cos((iPar * 4) * Math.PI)) / 2;
	iZ =  m_avarPropaty[iIdx * 2][3] + (m_avarPropaty[iIdx * 2 + 1][3] - m_avarPropaty[iIdx * 2][3]) * iMovePar;
	iX = (m_avarPropaty[iIdx * 2][1] + (m_avarPropaty[iIdx * 2 + 1][1] - m_avarPropaty[iIdx * 2][1]) * iMovePar) * m_iCvWt * iZ;
	iY = (m_avarPropaty[iIdx * 2][2] + (m_avarPropaty[iIdx * 2 + 1][2] - m_avarPropaty[iIdx * 2][2]) * iMovePar) * m_iCvHt * iZ;
	
	// ***** Clear
	m_ctxCv1.clearRect(0,0,m_iCvWt,m_iCvHt);
	
	// ***** Draw Flare
	sbDrawFlare(iX,iY,iZ,'fff',true);
	
	// ***** Draw Weapon
	m_ctxCv1.fillStyle = '#' + m_avarPropaty[0][0];
	sbDrawLine(m_ctxCv1,iX,iY,m_iCvWt,m_iCvHt,iIdx * 2,iTrunPar,iZ,true);
	
	// ***** Draw Flare
	sbDrawFlare(iX,iY,iZ,'fff',false);
	
	// ********** View Message
	var strHTML;
	if (m_strPV == '') {
		iLen = Math.floor(m_iPar * 4) + 2;
		iLen = (m_astrText.length < iLen ? m_astrText.length : iLen);
		strHTML = '';
		for (iIdx = 1; iIdx < iLen; iIdx++) {
			if (m_astrText[iIdx] != '') {
				strHTML += m_astrText[iIdx] + '<br />';
			}
		}
		if (m_elmTd1.innerHTML != strHTML) {
			m_elmTd1.innerHTML = strHTML;
		}
	}
}

function sbMap() {
	var iIdx,iIdx2,iIdx3;
	var strDefine;
	var astrDefine = new Array();
	
	strDefine = '' + document.getElementById('buki_res').value;
	
	// ********** Start Animation
	var iMinX;
	var iMinY;
	var iMaxX;
	var iMaxY;
	var iZoomX;
	var iZoomY;
	if (strDefine != '' && strDefine != m_strDefine) {
		m_strDefine = strDefine;
		
		m_elmNb1.innerHTML = '';
		if (m_strPV == '') {
			m_elmTd1.innerHTML = '';
		}
		
		// ********** Init
		astrDefine = strDefine.split('~');
		m_astrText  = astrDefine[0].replace(/#/g, '<br />').split(',');
		m_aiCircle  = astrDefine[1].split(',');
		m_astrLabel = astrDefine[2].split(',');
		m_astrCol   = astrDefine[3].split(',');
		m_aiX0  = astrDefine[4].split(',');
		m_aiY0  = astrDefine[5].split(',');
		m_aiHp0 = astrDefine[6].split(',');
		m_aiX1  = astrDefine[7].split(',');
		m_aiY1  = astrDefine[8].split(',');
		m_aiHp1 = astrDefine[9].split(',');
		for (iIdx = 0; iIdx < m_aiCircle.length; iIdx++) {
			m_aiCircle[iIdx]  = Number(m_aiCircle[iIdx]);
		}
		for (iIdx = 0; iIdx < m_astrLabel.length; iIdx++) {
			m_aiX0[iIdx]  = Number(m_aiX0[iIdx]);
			m_aiY0[iIdx]  = Number(m_aiY0[iIdx]);
			m_aiHp0[iIdx] = Number(m_aiHp0[iIdx]);
			m_aiX1[iIdx]  = Number(m_aiX1[iIdx]);
			m_aiY1[iIdx]  = Number(m_aiY1[iIdx]);
			m_aiHp1[iIdx] = Number(m_aiHp1[iIdx]);
		}
		iMinX = m_aiX0[0];
		iMinY = m_aiY0[0];
		iMaxX = m_aiX0[0];
		iMaxY = m_aiY0[0];
		for (iIdx = 0; iIdx < m_astrLabel.length; iIdx++) {
			iMinX = (m_aiX0[iIdx] < iMinX) ? m_aiX0[iIdx] : iMinX;
			iMinY = (m_aiY0[iIdx] < iMinY) ? m_aiY0[iIdx] : iMinY;
			iMaxX = (m_aiX0[iIdx] > iMaxX) ? m_aiX0[iIdx] : iMaxX;
			iMaxY = (m_aiY0[iIdx] > iMaxY) ? m_aiY0[iIdx] : iMaxY;
		}
		for (iIdx = 0; iIdx < m_astrLabel.length; iIdx++) {
			iMinX = (m_aiX1[iIdx] < iMinX) ? m_aiX1[iIdx] : iMinX;
			iMinY = (m_aiY1[iIdx] < iMinY) ? m_aiY1[iIdx] : iMinY;
			iMaxX = (m_aiX1[iIdx] > iMaxX) ? m_aiX1[iIdx] : iMaxX;
			iMaxY = (m_aiY1[iIdx] > iMaxY) ? m_aiY1[iIdx] : iMaxY;
		}
		iMinX = Math.floor(iMinX / 100) * 100;
		iMinY = Math.floor(iMinY / 100) * 100;
		iMaxX = Math.ceil(iMaxX / 100) * 100;
		iMaxY = Math.ceil(iMaxY / 100) * 100;
		iZoomX = (m_iCvWt - m_iMarginMap * 2) / (iMaxX - iMinX + m_iPieceSize / 2);
		iZoomY = (m_iCvHt - m_iMarginMap * 2) / (iMaxY - iMinY + m_iPieceSize / 2);
		m_iZoom  = (iZoomX < iZoomY ? iZoomX : iZoomY);
		m_iAdjustX = m_iCvWt / 2 - (iMinX + (iMaxX - iMinX) / 2) * m_iZoom;
		m_iAdjustY = m_iCvHt / 2 - (iMinY + (iMaxY - iMinY) / 2) * m_iZoom;
	}
	
	// ********** Calc
	var iMovePar = 1;
	var iAtackPar = -1;
	var bBlink = false;
	if        (m_iPar < 0.25) { iMovePar  = (m_iPar       ) / 0.25;
	} else if (m_iPar < 0.5 ) { iAtackPar = (m_iPar - 0.25) / 0.25;
	} else if (m_iPar < 0.75) { bBlink = true;
	} else                    { bBlink = true;
	}
	iMovePar = (1 - Math.cos(iMovePar * Math.PI)) / 2;
	
	// ********** Clear
	var strHTML;
	var iX,iY,iR,iS,iFlashSizeR,iRectSize;
	var iFontSize;
	var strCol;
	var strLabel;
	var iScrewPar;
	var iFlashPar;
	var iMotionPar;
	
	strHTML = '';
	m_ctxCv1.clearRect(0,0,m_iCvWt,m_iCvHt);
	
	// ********** Draw
	for (iIdx = 0; iIdx <= m_astrLabel.length; iIdx++) {
		iIdx2 = iIdx % m_astrLabel.length;
		iX = m_aiX0[iIdx2] + (m_aiX1[iIdx2] - m_aiX0[iIdx2]) * iMovePar;
		iY = m_aiY0[iIdx2] + (m_aiY1[iIdx2] - m_aiY0[iIdx2]) * iMovePar;
		iX = iX * m_iZoom + m_iAdjustX;
		iY = iY * m_iZoom + m_iAdjustY;
		
		if (iIdx == 0) {
			// ********** Marker
			if (m_aiCircle.length > 0 && iMovePar < 0.7) {
				for (iIdx3 = 1; iIdx3 >= 0; iIdx3--) {
					if (m_aiCircle[iIdx3] * m_iZoom > 0) {
						m_ctxCv1.fillStyle = (iIdx3 == 1 ? '#6e5835' : '#66502d');
						m_ctxCv1.beginPath();
						m_ctxCv1.arc(iX,iY,m_aiCircle[iIdx3] * m_iZoom,0 * Math.PI / 180,1 * Math.PI / 180,1);
						m_ctxCv1.closePath();
						m_ctxCv1.fill();
					}
				}
			}
		} else {
			// ********** Atack
			if (m_aiCircle.length > 1 && iAtackPar >= 0 && iIdx2 == 0 && m_aiHp0[iIdx2] == m_aiHp1[iIdx2]) {
				for (iIdx3 = 0; iIdx3 < 7; iIdx3++) {
					iScrewPar = (iAtackPar - 0.03 * iIdx3) / 0.2;
					iFlashPar = (5 - iIdx3) / 5;
					if (iScrewPar >= 0 && iScrewPar <= 2) {
						iS = 360 * iScrewPar / 180 * Math.PI;
						iR = (m_aiCircle[0] + (m_aiCircle[1] - m_aiCircle[0]) / 2) * m_iZoom;
						iFlashSizeR = (m_aiCircle[1] - m_aiCircle[0]) / 2 * iFlashPar;
						
						if (iFlashSizeR * m_iZoom > 0) {
							m_ctxCv1.fillStyle = '#fff';
							m_ctxCv1.beginPath();
							m_ctxCv1.arc(iX + Math.cos(iS) * iR,iY + Math.sin(iS) * iR,iFlashSizeR * m_iZoom,0 * Math.PI / 180,1 * Math.PI / 180,1);
							m_ctxCv1.closePath();
							m_ctxCv1.fill();
						}
					}
				}
			}
			
			// ********** Human
			if (bBlink && m_aiHp0[iIdx2] != m_aiHp1[iIdx2]) {
				strCol = ((m_iPar * 100 % 4 < 1) ? 'fff' : m_astrCol[iIdx2]);
				strLabel = m_astrLabel[iIdx2] + '<br />' + m_aiHp0[iIdx2] + ' &raquo; ' + m_aiHp1[iIdx2] + '';
			} else {
				strCol = m_astrCol[iIdx2];
				strLabel = m_astrLabel[iIdx2] + '<br />' + m_aiHp0[iIdx2];
			}
			m_ctxCv1.fillStyle = '#' + strCol;
			iMotionPar = m_iPar * ((5 + m_aiHp0[iIdx2]) * 30 / 100) + 0.13 * iIdx2;
			iMotionPar -= Math.floor(iMotionPar);
			sbDrawHuman(m_ctxCv1,iX,iY,m_iZoom,iMotionPar);
			
			// ********** Label
			iX -= (m_iPieceSize * 2 * (m_iZoom < 1 ? 1 : m_iZoom)) / 2;
			iY -= (m_iPieceSize * 2 * (m_iZoom < 1 ? 1 : m_iZoom)) / 2;
			iRectSize = Math.round(m_iPieceSize * 2 * (m_iZoom < 1 ? 1 : m_iZoom));
			iFontSize = Math.round(12 * (m_iZoom < 1 ? 1 : m_iZoom));
			if (iIdx < 20 && iX > -iRectSize / 2 && iX < m_iCvWt - iRectSize / 2 && iY > -iRectSize / 2 && iY < m_iCvWt - iRectSize / 2) {
				strHTML += '<table style="left:' + iX + 'px; top:' + iY + 'px; width: ' + iRectSize + 'px;height: ' + iRectSize + 'px;font-size: ' + iFontSize + 'px;"><tr><td>' + strLabel + '</td></tr></table>';
			}
		}
	}
	if (m_strPV == '') {
		m_elmNb1.innerHTML = strHTML;
	}
	
	// ********** View Message
	var strHTML;
	if (m_strPV == '') {
		iLen = Math.floor(m_iPar * 4) + 2;
		iLen = (m_astrText.length < iLen ? m_astrText.length : iLen);
		strHTML = '';
		for (iIdx = 1; iIdx < iLen; iIdx++) {
			if (m_astrText[iIdx] != '') {
				strHTML += m_astrText[iIdx] + '<br />';
			}
		}
		if (m_elmTd1.innerHTML != strHTML) {
			m_elmTd1.innerHTML = strHTML;
		}
	}
}

var m_aiHumanPath = new Array();

function sbInitHuman() {
	var astrBasePath = new Array();
	astrBasePath[0]             = '50,3;38,3,29,13,29,25;29,34,34,41,41,44;32,48,28,35,23,41;20,47,35,58,38,57;42,74,30,87,35,92;43,97,44,79,50,76;56,79,58,97,66,93;71,87,58,74,62,57;65,58,80,46,77,40;72,34,68,48,59,44;66,41,71,33,71,25;71,13,62,3,50,3';
	astrBasePath[m_iPieceAnime] = '50,5;38,5,29,14,29,26;29,35,34,42,41,45;32,49,22,58,24,61;28,67,35,60,38,59;42,77,26,87,32,92;40,97,44,80,50,78;56,81,60,97,68,92;74,87,58,77,62,59;65,60,72,67,76,61;78,58,68,49,59,45;66,42,71,35,71,26;71,14,62,5,50,5';
	var iIdx,iIdx2,iIdx3;
	var astrPath = new Array();
	
	for (iIdx3 = 0; iIdx3 <= m_iPieceAnime; iIdx3+=m_iPieceAnime) {
		astrPath = astrBasePath[iIdx3].split(';');
		m_aiHumanPath[iIdx3] = new Array();
		for (iIdx = 0; iIdx < astrPath.length; iIdx++) {
			m_aiHumanPath[iIdx3][iIdx] = new Array();
			m_aiHumanPath[iIdx3][iIdx] = astrPath[iIdx].split(',');
			if (m_aiHumanPath[iIdx3][iIdx].length >= 2) {
				for (iIdx2 = 0; iIdx2 < m_aiHumanPath[iIdx3][iIdx].length; iIdx2++) {
					m_aiHumanPath[iIdx3][iIdx][iIdx2] = (Number(m_aiHumanPath[iIdx3][iIdx][iIdx2]) - 50);
				}
			}
		}
	}
	
	for (iIdx3 = 1; iIdx3 < m_iPieceAnime; iIdx3++) {
		m_aiHumanPath[iIdx3] = new Array();
		for (iIdx = 0; iIdx < astrPath.length; iIdx++) {
			m_aiHumanPath[iIdx3][iIdx] = new Array();
			if (m_aiHumanPath[0][iIdx].length >= 2) {
				for (iIdx2 = 0; iIdx2 < m_aiHumanPath[0][iIdx].length; iIdx2++) {
					m_aiHumanPath[iIdx3][iIdx][iIdx2] = m_aiHumanPath[0][iIdx][iIdx2] + (m_aiHumanPath[m_iPieceAnime][iIdx][iIdx2] - m_aiHumanPath[0][iIdx][iIdx2]) * (iIdx3 / m_iPieceAnime);
				}
			}
		}
	}
}

function sbDrawHuman(ctxCv,iX,iY,iZoom,iMotionPar) {
	var iIdx,iIdx2,iIdx3;
	var aiPath = new Array();
	
	iMotionPar = (iMotionPar < 0 ? 0 : (iMotionPar > 1 ? 1 : iMotionPar));
	iIdx3 = Math.floor((Math.cos(360 * iMotionPar / 180 * Math.PI) + 1) / 2 * m_iPieceAnime);
	
	if (iZoom > 0.05) {
		ctxCv.beginPath();
		for (iIdx = 0; iIdx < m_aiHumanPath[iIdx3].length; iIdx++) {
			aiPath[iIdx] = new Array();
			for (iIdx2 = 0; iIdx2 < m_aiHumanPath[iIdx3][iIdx].length; iIdx2++) {
				aiPath[iIdx][iIdx2] = m_aiHumanPath[iIdx3][iIdx][iIdx2] * iZoom + (iIdx2 % 2 == 0 ? iX : iY);
			}
			if (aiPath[iIdx].length == 2) {
				if (iIdx == 0) {
					ctxCv.moveTo(aiPath[iIdx][0],aiPath[iIdx][1]);
				} else {
					ctxCv.lineTo(aiPath[iIdx][0],aiPath[iIdx][1]);
				}
			} else if (aiPath[iIdx].length == 6) {
				ctxCv.bezierCurveTo(aiPath[iIdx][0],aiPath[iIdx][1],aiPath[iIdx][2],aiPath[iIdx][3],aiPath[iIdx][4],aiPath[iIdx][5]);
			}
		}
		ctxCv.fill();
	} else {
		if (50 * iZoom > 0) {
			ctxCv.beginPath();
			ctxCv.arc(iX,iY,50 * iZoom,0 * Math.PI / 180,1 * Math.PI / 180,1);
			ctxCv.closePath();
		}
	}
	ctxCv.fill();
}

function sbRank() {
	var iLen;
	var iIdx;
	var strDefine;
	var astrDefine = new Array();
	var astrScale = new Array();
	
	strDefine = '' + document.getElementById('buki_res').value;
	
	// ********** View Panel
	if (m_elmRk1.style.display == 'none') {
		m_elmSw1.style.display = 'none';
		m_elmRk1.style.display = 'block';
	}
	
	// ********** Start Animation
	if (strDefine != '' && strDefine != m_strDefine) {
		m_strDefine = strDefine;
		
		m_elmNb1.innerHTML = '';
		if (m_strPV == '') {
			m_elmTd1.innerHTML = '';
		}
		
		// ********** Init
		astrDefine = strDefine.split('~');
		m_astrText = astrDefine[0].split(',');
		m_astrRank = astrDefine[1].split(',');
	}
	
	// ********** Calc
	var iPar;
	var iNum;
	var iColMax;
	var iRowMax;
	var iCol;
	var iRow;
	
	iNum = m_astrRank.length;
	if (iNum > 100) {
		iPar = 1;
	} else {
		iPar = ((m_iPar < 0.8) ? m_iPar / 0.8 : 1);
	}
	iColMax = Math.ceil(iNum / 10);
	iColMax = (iColMax > m_iColMax ? m_iColMax : iColMax);
	iRowMax = Math.ceil(iNum / iColMax);
	
	// ********** Dead Line
	var iDeadLine;
	if (iNum > 1) {
		iDeadLine = ((iNum - 1) / 3) * 2;
	} else {
		iDeadLine = 0;
	}
	
	// ********** Draw
	var strHTML;
	var strRank;
	var strStyle;
	strHTML = '';
	iLen = iNum - Math.floor(iPar * iNum);
	strHTML += '<table>';
	strHTML += '<tr>';
	strHTML += '<th' + (iColMax < 2 ? '' : ' colspan="' + iColMax + '"') + '>' + m_astrText[1] + '</th>';
	strHTML += '</tr>';
	for (iRow = 0; iRow < iRowMax; iRow++) {
		strHTML += '<tr>';
		for (iCol = 0; iCol < iColMax; iCol++) {
			iIdx = iCol * iRowMax + iRow;
			strRank = '';
			if (iIdx < iNum) {
				strRank += (iIdx + 1) + '. ';
				if (iIdx >= iLen) {
					strRank += m_astrRank[iIdx];
				}
			}
			strStyle = (iIdx == 0 ? ' style="background-color:#ffee66;"' : (iNum - iIdx - 1 > iDeadLine ? ' style="background-color:#ffff99;"' : ''));
			strHTML += '<td' + strStyle + '>' + strRank + '</td>';
		}
		strHTML += '</tr>';
	}
	strHTML += '</table>';
	if (m_elmRk1.innerHTML != strHTML) {
		m_elmRk1.innerHTML = strHTML;
	}
	
	// ********** View Message
	iLen = Math.floor(m_iPar * 4) + 2;
	iLen = (m_astrText.length < iLen ? m_astrText.length : iLen);
	strHTML = '';
	for (iIdx = 1; iIdx < iLen; iIdx++) {
		if (m_astrText[iIdx] != '') {
			strHTML += m_astrText[iIdx] + '<br />';
		}
	}
	if (m_elmTd1.innerHTML != strHTML) {
		m_elmTd1.innerHTML = strHTML;
	}
	if (iPar == 1) {
		m_bFinish = true;
	}
}

function fnSend_anobuki() {
	fnGetValue_anobuki3('','buki_full');
	return false;
}
