// ********** Common
var m_dStart;
var m_timAnime;

// ********** Const
var m_strURLSend = '/cgi-bin/generator/maho.cgi';

var m_iInterval = 50;
var m_iRlMove = 30;
var m_iCvWt = 320;
var m_iCvHt = Math.floor(m_iCvWt / 1 * 1.414)
var m_iPathSize = 100;
var m_iPathSize2 = 1000;
var m_iMargin = 0;
var m_iLineHeight = 1 / 24;

// ********** Draw
var m_astrArrayCv = new Array('G0','G1','M0','HM','M1');
var m_astrArrayNb = new Array('RL');
var m_aelmCv = [];
var m_actxCv = [];
var m_aelmNb = [];
var m_astrNo = [];
var m_astrNn = [];

// Canvas / m_aelmCv , m_actxCv
// G0 : Back 0
// G1 : Back 1
// M0 : Magic 0
// HM : Human
// M1 : Magic 1

// Text / m_aelmNb , m_astrNo , m_astrNn
// RL : Rule

var m_bDataLoaded = false;
var m_elmPn;
var m_elmIt0;
var m_elmIt1;

var m_iState = 0;
var m_iGame = 0;
var m_iProc = 0;
var m_strMsg = '';
var m_iLineWidth;

var m_iRuleDrawCnt = 0;
var m_iRuleDrawIdx = -1;

// ********** Adjust Data
var m_astrInit = [];

var m_iRuleCnt = 0;
var m_aiRuleO = [];
var m_aiRuleG = [];
var m_aiRuleX = [];
var m_aiRuleY = [];
var m_astrRuleHead = [];
var m_astrRuleText = [];
var m_astrRuleFIro = [];

var m_iTitleCnt = 0;
var m_astrTitlePath = [];

var m_strModelPath;

window.onload = sbInit;

function sbInit() {
	var iIdx,strIdx;
	
	m_dStart = new Date();
	m_elmIt0 = document.getElementById('gen_init0');
	m_elmIt1 = document.getElementById('gen_init1');
	
	// Init Canvas
	m_elmPn = document.getElementById('gen_pn');
	for (iIdx = 0; iIdx < m_astrArrayCv.length; iIdx++) {
		strIdx = m_astrArrayCv[iIdx];
		m_aelmCv[strIdx] = document.getElementById('gen_cv' + iIdx);
		m_actxCv[strIdx] = m_aelmCv[strIdx].getContext('2d');
	}
	
	// Init Text
	for (iIdx = 0; iIdx < m_astrArrayNb.length; iIdx++) {
		strIdx = m_astrArrayNb[iIdx];
		m_aelmNb[strIdx] = document.getElementById('gen_nb' + iIdx);
	}
	
	// Init
	document.getElementById('gen_all').style.display = 'block';
	document.getElementById('gen_name').focus();
	
	// Get Param
	var astrParam = [];
	astrParam = sbGetParam();
	var strReq = '';
	if ('n' in astrParam) {
		strReq = decodeURI(astrParam['n']);
	}
	
	document.getElementById('gen_name').value = strReq;
	if (strReq != '') {
		fnSend();
	}
	
	// Start Timer
	m_timAnime = setInterval('sbAnime()',m_iInterval);
}

// ********************************************************************************
function sbInitGame() {
	var iIdx,strIdx;
	var iTemp,iTemp2,iTemp3;
	var strTemp;
	var iX,iY,iW,iH;
	
	// ********** Init
	m_iState = 0;
	
	document.getElementById('gen_footer').style.display = 'block';
	
	// ********** Resize Canvas
	m_elmPn.style.width  = m_iCvWt + 'px';
	m_elmPn.style.height = m_iCvHt + 'px';
	for (iIdx = 0; iIdx < m_astrArrayCv.length; iIdx++) {
		strIdx = m_astrArrayCv[iIdx];
		m_aelmCv[strIdx].width  = m_iCvWt;
		m_aelmCv[strIdx].height = m_iCvHt;
		m_actxCv[strIdx].lineJoin = 'round';
		m_actxCv[strIdx].lineCap = 'round';
	}
	m_iLineWidth = Math.floor((m_iCvHt / m_iTitleCnt) * 0.01);
	
	// ********** Clear And Hidden
	sbClearAll('G0,G1,M0,HM,M1','RL');
	sbViewLayer('','');
	
	// ********** Draw Back
	m_actxCv['G0'].fillStyle = '#000';
	sbDrawFukidashi(m_actxCv['G0'],0,0,m_iCvWt,m_iCvHt,0,0,30)
	m_actxCv['G0'].fill();
	
	m_actxCv['G1'].fillStyle = fnGetLinearGradientBetweenBlack(m_actxCv['G0'],m_astrInit['al_clpt'],m_astrInit['al_clpb']);
	sbDrawFukidashi(m_actxCv['G1'],0,0,m_iCvWt,m_iCvHt,0,0,30)
	m_actxCv['G1'].fill();
	
	// ********** View Text
	sbViewText();
	
	// ********** Others
	strTemp = window.location.href
	iTemp = strTemp.indexOf('?');
	if (iTemp >= 0) {
		strTemp = strTemp.substring(0,iTemp);
	}
	document.getElementById('gen_url').value = strTemp + '?n=' + encodeURI(m_astrInit['al_stnm']);
	m_elmIt0.style.display = 'block';
	m_elmIt1.style.display = 'none';
}

// ********************************************************************************
function sbAnime() {
	var iSecSt = (+new Date());
	var iSecDiff = 0;
	var iPar;
	var iTemp,iTemp2,iTemp3,iCnt,strTemp;
	var iIdx,iIdx2,iIdx3;
	var iX,iY,iZ,iW,iH,iA,iCol,iCol2;
	var aiBad = [];
	var strText = '';
	var iRuleEscape = 2;
	
	m_iProc = (m_iProc + 1) % m_iRlMove;
	iPar = (m_iProc + 1) / m_iRlMove;
	
	if (! m_bDataLoaded) {
		return false;
	}
	
	// ********************************************************************************
	if (0 == 1) {
	} else if (m_iState == 0) {
		// **************************************** Title Start
		sbClearAll('','');
		sbViewLayer('G0,M0,M1','RL');
		m_elmIt0.style.display = 'block';
		m_elmIt1.style.display = 'none';
		
		// Set RuleText
		m_astrNn['RL'] = '';
		m_iRuleDrawIdx = -1;
		
		m_iState = 1;
		
		// ********** Draw Human
		sbDrawLineFlash(m_actxCv['HM'],1000,1000,0,(m_iCvHt - m_iCvWt) * 0.5,m_iCvWt,m_iCvWt,m_strModelPath,m_strModelPath,0,m_astrInit['al_zoom'],1,m_astrInit['al_clpt'],m_astrInit['al_clpb']);
		
	} else if (m_iState == 1) {
		m_actxCv['M1'].clearRect(0,0,m_iCvWt,m_iCvHt);
		sbDrawLine(m_actxCv['M1'],1000,1000,0,(m_iCvHt - m_iCvWt) * 0.5,m_iCvWt,m_iCvWt,m_strModelPath,m_strModelPath,0,fnCos(1,m_astrInit['al_zoom'],0.5,iPar),0,'',m_astrInit['al_clpb']);
		if (iPar == 1) {
			m_iState = 2;
		}
	} else if (m_iState == 2) {
		sbViewLayer('G0,M0,HM,M1','RL');
		m_iState = 3;
	} else if (m_iState == 3) {
		// **************************************** Title Loop
		// Draw Title
		m_actxCv['M1'].clearRect(0,0,m_iCvWt,m_iCvHt);
		
		iTemp = 1;
		iTemp3 = m_iCvWt / m_iTitleCnt;
		
		for (iIdx = 0; iIdx < m_iTitleCnt; iIdx++) {
			iX = m_iCvWt * (1 - iTemp) * 0.5 + iTemp3 * iIdx;
			iY = (m_iCvWt + (m_iCvHt - m_iCvWt)) * 0.5 - iTemp3 * 0.5 + fnCos(-10,10,2,iPar);
			iZ = 1;
			if (m_iProc % 30 == 0 && m_iRuleDrawIdx == m_iRuleDrawCnt + iRuleEscape) {
				sbDrawLineFlash(m_actxCv['M1'],1000,1000,iX,iY,iTemp3,iTemp3,m_astrTitlePath[iIdx],m_astrTitlePath[iIdx],0,iZ,1,m_astrInit['al_fnt0'],m_astrInit['al_fnt1']);
			} else {
				sbDrawLine(m_actxCv['M1'],1000,1000,iX,iY,iTemp3,iTemp3,m_astrTitlePath[iIdx],m_astrTitlePath[iIdx],0,iZ,1,m_astrInit['al_fnt0'],m_astrInit['al_fnt1']);
			}
		}
		
		// Set RuleText
		if (m_iProc % 30 == 0) {
			if (m_iRuleDrawIdx <= m_iRuleDrawCnt) {
				m_astrNn['RL'] = '';
				iW = 0;
				iH = m_iCvHt * m_iLineHeight;
				for (iIdx = 0; iIdx < m_iRuleCnt; iIdx++) {
					strText = '';
					if (m_aiRuleO[iIdx] <= m_iRuleDrawIdx || m_aiRuleO[iIdx] <= m_iRuleDrawCnt) {
						strText += m_astrRuleHead[iIdx];
					}
					if (m_aiRuleO[iIdx] <= m_iRuleDrawIdx) {
						strText += m_astrRuleText[iIdx];
					}
					iX = m_iCvHt * (0.04 * (m_aiRuleX[iIdx] + 1)) + m_aiRuleG[iIdx] * m_iCvWt * 0.5;
					iY = m_iCvHt - m_iCvHt * m_iLineHeight * (m_aiRuleY[iIdx] + 2);
					m_astrNn['RL'] += sbDrawLabel(iX,iY,(m_iCvWt - iX * 2),iH,(iIdx < 2 ? 'c' : 'l'),m_iCvHt * m_iLineHeight,m_astrRuleFIro[iIdx],strText);
				}
			}
			m_iRuleDrawIdx++;
			if (m_iRuleDrawIdx > m_iRuleDrawCnt + iRuleEscape) {
				m_iState = 4;
			}
		}
	} else if (m_iState == 4) {
		//Amazon
		if (m_astrInit['al_amzn'] != '') {
			sbGetAmazon('links','maho01-22','',encodeURIComponent(m_astrInit['al_amzn']),'',280,1);
		}
		
		sbViewLayer('G1,M0,HM,M1','RL');
		m_iState = 5;
	}
	
	// ********************************************************************************
	iSecDiff = (+new Date()) - iSecSt;
	
	// View Text
	sbViewText();
}

// ********************************************************************************************************************************************************
function fnSend() {
	var strName = document.getElementById('gen_name').value;
	
	if (strName.length < 1) {
		document.getElementById('gen_name').focus();
		return false;
	}
	
//	if (strName == m_astrInit['al_stnm']) {
//		return false;
//	}
	
	var strReq;
	strReq = '';
	strReq += '&name=' + encodeURIComponent(strName);
	strReq += '&mode=' + document.getElementById('gen_mode').value;
	strReq += '&lang=' + document.getElementById('gen_lang').value;
	
	// Cache 
	var dNow = new Date();
	
	// Create Object
	var xmlhttp = fnCreateXMLHttp();
	if (xmlhttp) {
		xmlhttp.open('GET', m_strURLSend + '?time=' + dNow.getTime() + strReq);
		xmlhttp.onreadystatechange = function() {
			if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
				strRes = xmlhttp.responseText;
				sbAdjustData(strRes)
			}
		}
		xmlhttp.send(null);
	}
	
	return false;
}

function sbChangeSize(iW) {
	m_iCvWt = iW;
	m_iCvHt = Math.floor(m_iCvWt / 1 * 1.414);
	sbInitGame();
	return false;
}

function sbReset() {
	sbInitGame();
	return false;
}

function sbAdjustData(strData) {
	var astrLine = [];
	var astrCell = [];
	var astrTemp = [];
	var strType = '';
	var iCellCnt;
	var iLine = 0;
	var iError = 0;
	var iLineIdx
	var strAlert = '';
	
	// ******************** Read Data
	strData = strData.replace(/\r/g,'');
	astrLine = strData.split("\n");
	
	for (iLineIdx = 1; iLineIdx < astrLine.length; iLineIdx++) {
		if (astrLine[iLineIdx].length > 1) {
			astrCell = astrLine[iLineIdx].split(';');
			iCellCnt = astrCell.length;
			if (astrCell[0] == '********************') {
				strType = astrCell[1];
				iLine = 0;
				if (strType == 'init') {
					m_iRuleDrawCnt = 0;
					m_iRuleCnt = 0;
					m_iTitleCnt = 0;
				}
			} else {
				if (0 == 1) {
				} else if (strType == 'init') {
					if (iCellCnt < 2) {
						iError ++;
					} else {
						m_astrInit[astrCell[0]] = astrCell[1];
						iLine ++;
					}
				} else if (strType == 'rule') {
					if (iCellCnt != 7) {
						iError ++;
					} else {
						m_aiRuleO[iLine] = Number(astrCell[0]);
						m_aiRuleG[iLine] = Number(astrCell[1]);
						m_aiRuleX[iLine] = Number(astrCell[2]);
						m_aiRuleY[iLine] = Number(astrCell[3]);
						m_astrRuleFIro[iLine] = astrCell[4];
						m_astrRuleHead[iLine] = astrCell[5];
						m_astrRuleText[iLine] = astrCell[6];
						m_iRuleDrawCnt = (m_aiRuleO[iLine] > m_iRuleDrawCnt ? m_aiRuleO[iLine] : m_iRuleDrawCnt);
						m_iRuleCnt++;
						iLine ++;
					}
				} else if (strType == 'title') {
					if (iCellCnt != 3) {
						iError ++;
					} else {
						m_astrTitlePath[iLine] = fnAdjustPath(astrCell[2],m_iPathSize,m_iPathSize,1000,1000,0);
						m_iTitleCnt++;
						iLine ++;
					}
				} else if (strType == 'alert') {
					strAlert = (strAlert == '' ? '' : "\n") + astrCell[0];
				} else if (strType == 'memo') {
				} else {
					iError ++;
				}
			}
		}
	}
	
	// ******************** Error Check
	if (strAlert != '') {
		alert(strAlert);
		document.getElementById('gen_name').focus();
		return false;
	}
	
	// ******************** Error
	if (iError > 0) {
//		alert("Error : " + iError);
	}
	
	// ******************** Start
	m_strModelPath = fnAdjustPath(m_astrInit['al_mdel'],m_iPathSize2,m_iPathSize2,1000,1000,0);
	m_astrInit['al_zoom'] = Number(m_astrInit['al_zoom']);
	sbInitGame();
	m_bDataLoaded = true;
}

// ********************************************************************************
function sbDrawLabel(iX,iY,iW,iH,strAlign,iFontSize,strColor,strText) {
	var strStyleAlign;
	var strTemp;
	var strHTML;
	
	iX = Math.round(iX);
	iY = Math.round(iY);
	iW = Math.round(iW);
	iH = Math.round(iH);
	iFontSize = Math.round(iFontSize);
	
	iW = (iW > 0 ? iW : m_iCvWt - iX);
	strStyleAlign = (strAlign == 'c' ? 'center' : (strAlign == 'r' ? 'right' : 'left'));
	
	strHTML = '';
	if (iX >= 0 && iY >= 0 && iX + iW <= m_iCvWt && iY + iH <= m_iCvHt) {
		strTemp = strText.replace(/#/g, '<br />');
		strHTML += '<table style="left:' + iX + 'px; top:' + iY + 'px; width:' + iW + 'px;height:' + iH + 'px; font-size:' + iFontSize + 'px; color:' + strColor + '; text-align:' + strStyleAlign + ';"><tr><td>' + strTemp + '</td></tr></table>';
	}
	return strHTML;
}

function sbViewLayer(strCv,strNb) {
	strCv = ',' + strCv + ',';
	strNb = ',' + strNb + ',';
	var iIdx,strIdx;
	
	for (iIdx = 0; iIdx < m_astrArrayCv.length; iIdx++) {
		strIdx = m_astrArrayCv[iIdx];
		m_aelmCv[strIdx].style.visibility = (strCv.indexOf(strIdx) >= 0 ? 'visible' : 'hidden');
	}
	for (iIdx = 0; iIdx < m_astrArrayNb.length; iIdx++) {
		strIdx = m_astrArrayNb[iIdx];
		m_aelmNb[strIdx].style.visibility = (strNb.indexOf(strIdx) >= 0 ? 'visible' : 'hidden');
	}
}

function sbClearAll(strCv,strNb) {
	strCv = ',' + strCv + ',';
	strNb = ',' + strNb + ',';
	var iIdx,strIdx;
	
	for (iIdx = 0; iIdx < m_astrArrayCv.length; iIdx++) {
		strIdx = m_astrArrayCv[iIdx];
		if (strCv.indexOf(strIdx) >= 0) {
			m_actxCv[strIdx].clearRect(0,0,m_iCvWt,m_iCvHt);
		}
	}
	for (iIdx = 0; iIdx < m_astrArrayNb.length; iIdx++) {
		strIdx = m_astrArrayNb[iIdx];
		if (strNb.indexOf(strIdx) >= 0) {
			m_astrNo[strIdx] = '';
			m_astrNn[strIdx] = '';
			m_aelmNb[strIdx].innerHTML = '';
		}
	}
}
function sbViewText() {
	var iIdx,strIdx;
	for (iIdx = 0; iIdx < m_astrArrayNb.length; iIdx++) {
		strIdx = m_astrArrayNb[iIdx];
		if (m_astrNn[strIdx] != m_astrNo[strIdx]) {
			m_astrNo[strIdx] = m_astrNn[strIdx];
			m_aelmNb[strIdx].innerHTML = m_astrNo[strIdx];
		}
	}
}
function fnGetLinearGradientBetweenBlack(ctxTemp,strColor0,strColor1) {
	var lgTemp;
	lgTemp = ctxTemp.createLinearGradient(0,0,0,m_iCvHt);
	lgTemp.addColorStop(0,strColor0);
	lgTemp.addColorStop(0.5,'#000');
	lgTemp.addColorStop(1,strColor1);
	return lgTemp;
}

// ********************************************************************************
// EnterKey Event
var m_elmFocus;
function sbFocus(elmTemp){
	m_elmFocus = elmTemp
	elmTemp.style.backgroundColor = '#ffffcc';
	elmTemp.select();
}
function sbBlur(elmNum){
	elmNum.style.backgroundColor = '';
}
function fnGetKeycode(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(e){
	if(fnGetKeycode(e) == 13) {
		if        (m_elmFocus.id == 'gen_send') { document.getElementById('gen_name').focus(); sbSend();
		} else if (m_elmFocus.id == 'gen_name') { document.getElementById('gen_send').focus();
		}
		return false;
	}
}
document.onkeypress = fnKeyPress;

// ********************************************************************************
// Common
function fnAdjustPath(strPathCt,iScaleW,iScaleH,iCvWt,iCvHt,iMargin) {
	var astrPathCt = [];
	var aiTemp = [];
	var iTempW;
	var iTempH;
	var iZoomin;
	var iMarginX;
	var iMarginY;
	var iX,iY;
	var iIdx;
	var strPath;
	
	astrPathCt = strPathCt.split(' ');
	
	iTempW = (iCvWt - iMargin) / iScaleW;
	iTempH = (iCvHt - iMargin) / iScaleH;
	iZoomin = (iTempW < iTempH ? iTempW : iTempH)
	iMarginX = iCvWt / 2 - iScaleW * iZoomin / 2;
	iMarginY = iCvHt / 2 - iScaleH * iZoomin / 2;
	
	strPath = '';
	for (iIdx = 0; iIdx < astrPathCt.length; iIdx++) {
		if        (astrPathCt[iIdx].length == 0) {
		} else if (astrPathCt[iIdx].length == 1) {
			strPath += astrPathCt[iIdx] + ' ';
		} else {
			aiTemp = astrPathCt[iIdx].split(',');
			iX = Number(aiTemp[0]) * iZoomin + iMarginX;
			iY = Number(aiTemp[1]) * iZoomin + iMarginY;
			strPath += iX + ',' + iY + ' ';
		}
	}
	return strPath;
}

function sbDrawLineFlash(ctxCv,iCvWt,iCvHt,iBaseX,iBaseY,iBaseW,iBaseH,strPathSt,strPathEd,iPar,iSize,iLineWidth,strColorStroke,strColorFill) {
	var iLineLoop = 6;
	var iIdx;
	var iTempLineWidth;
	var strTempColorStroke;
	var strTempColorFill;
	for (iIdx = 0; iIdx < iLineLoop; iIdx++) {
		ctxCv.globalAlpha = (iIdx == iLineLoop - 1 ? 1 : 0.1);
		iTempLineWidth = iLineWidth * fnCos(1,10,0.5,(iLineLoop - iIdx - 1) / (iLineLoop - 1));
		strTempColorStroke = (iIdx == iLineLoop - 1 ? '' : strColorStroke);
		strTempColorFill   = (iIdx == iLineLoop - 1 ? strColorFill : '');
		sbDrawLine(ctxCv,iCvWt,iCvHt,iBaseX,iBaseY,iBaseW,iBaseH,strPathSt,strPathEd,iPar,iSize,iTempLineWidth,strTempColorStroke,strTempColorFill);
	}
	ctxCv.globalAlpha = 1;
}

function sbDrawLine(ctxCv,iCvWt,iCvHt,iBaseX,iBaseY,iBaseW,iBaseH,strPathSt,strPathEd,iPar,iSize,iLineWidth,strColorStroke,strColorFill) {
	var iX,iY;
	var aiX = [];
	var aiY = [];
	var aiTemp = [];
	var aiCurve = [];
	var iCurve;
	var iIdx,iIdx2;
	var strMode;
	var iCol;
	var astrPathSt = [];
	var astrPathEd = [];
	var iIdx3;
if (iPar == 1) {
	astrPathEd = strPathEd.split(' ');
}
if (iPar == 0) {
	astrPathSt = strPathSt.split(' ');
}
	
	ctxCv.lineWidth = iLineWidth;
	ctxCv.strokeStyle = strColorStroke;
	ctxCv.fillStyle = strColorFill;
	
	iPar = (iPar < 0 ? 0 : (iPar > 1 ? 1 : iPar));
	
	var iLoopSt = (strColorStroke != '' ? 0 : 1);
	var iLoopEd = (strColorFill   != '' ? 2 : 1);
	
	for (iIdx3 = iLoopSt; iIdx3 < iLoopEd; iIdx3++) {
		strMode = '';
		iCol = 0;
		for (iIdx = 0; iIdx < astrPathSt.length; iIdx++) {
			if        (astrPathSt[iIdx].length == 0) {
			} else if (astrPathSt[iIdx].length == 1) {
				strMode = astrPathSt[iIdx];
				if        (strMode == 'M')  {
				} else if (strMode == 'C')  { iCurve = 0;
				} else if (strMode == 'L')  {
				} else if (strMode == 'z')  {
					if        (1 == 0)  {
					} else if (iIdx3 == 0 && strColorStroke != '') { ctxCv.stroke();
					} else if (iIdx3 == 1 && strColorFill   != '') { ctxCv.fill();
					}
				} else if (strMode == "\n") {
				} else                      {
				}
			} else {
if (iPar == 0) {
				aiTemp = astrPathSt[iIdx].split(',');
				iX = Number(aiTemp[0]);
				iY = Number(aiTemp[1]);
} else if (iPar == 1) {
				aiTemp = astrPathEd[iIdx].split(',');
				iX = Number(aiTemp[0]);
				iY = Number(aiTemp[1]);
} else {
				for (iIdx2 = 0; iIdx2 <= 1; iIdx2++) {
					aiTemp = (iIdx2 == 0 ? astrPathSt[iIdx] : astrPathEd[iIdx]).split(',');
					aiX[iIdx2] = Number(aiTemp[0]);
					aiY[iIdx2] = Number(aiTemp[1]);
				}
				iX = Math.round(aiX[0] + (aiX[1] - aiX[0]) * iPar);
				iY = Math.round(aiY[0] + (aiY[1] - aiY[0]) * iPar);
}
				
				iX = iX * iSize - iCvWt * iSize / 2 + iCvWt / 2;
				iY = iY * iSize - iCvHt * iSize / 2 + iCvHt / 2;
				
				iX = iBaseX + iX * (iBaseW / iCvWt);
				iY = iBaseY + iY * (iBaseH / iCvHt);
				
				if        (strMode == 'M') {
					iCol = (iCol + 1) % 2;
					ctxCv.beginPath();
					ctxCv.moveTo(iX,iY);
				} else if (strMode == 'C') { 
					aiCurve[iCurve * 2 + 0] = iX;
					aiCurve[iCurve * 2 + 1] = iY;
					iCurve++;
					
					if (iCurve == 3)   {
						ctxCv.bezierCurveTo(aiCurve[0],aiCurve[1],aiCurve[2],aiCurve[3],aiCurve[4],aiCurve[5]);
					}
				} else if (strMode == 'L') { ctxCv.lineTo(iX,iY);
				} else if (strMode == 'z') {
				} else                     {
				}
			}
		}
	}
}

function sbGetParam() {
	var iIdx,iTemp;
	var strKey,strVal;
	var astrParam = [];
	var strQuery = window.location.search.substring(1);
	var astrParam = strQuery.split('&');
	for (iIdx = 0; iIdx < astrParam.length; iIdx++) {
		var iTemp = astrParam[iIdx].indexOf('=');
		if (iTemp > 0) {
			strKey = astrParam[iIdx].substring(0,iTemp);
			strVal = astrParam[iIdx].substring(iTemp + 1);
			astrParam[strKey] = strVal;
		}
	}
	return astrParam;
}

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 fnCos(iMin,iMax,iNum,iPar) {
	return iMin + (iMax - iMin) * ((1 - Math.cos(iPar * (iNum * 2) * Math.PI)) / 2);
}
function fnSin(iMin,iMax,iNum,iPar) {
	return iMin + (iMax - iMin) * ((1 - Math.sin(iPar * (iNum * 2) * Math.PI)) / 2);
}
function fnRep(strMsg,strRep0,strRep1,strRep2) {
	return strMsg.replace('%0%',strRep0).replace('%1%',strRep1).replace('%2%',strRep2);
}

function sbDrawFukidashi(ctxCv,iX,iY,iW,iH,iTryW,iTryH,iR) {
	ctxCv.beginPath();
	ctxCv.moveTo(iX + iW / 2,iY + iH + iTryH);
	ctxCv.lineTo(iX + iW / 2 + iTryW,iY + iH);
	ctxCv.lineTo(iX + iW - iR,iY + iH);
	ctxCv.bezierCurveTo(iX + iW,iY + iH,iX + iW,iY + iH,iX + iW,iY + iH - iR);
	ctxCv.lineTo(iX + iW,iY + iR);
	ctxCv.bezierCurveTo(iX + iW,iY,iX + iW,iY,iX + iW - iR,iY);
	ctxCv.lineTo(iX + iR,iY);
	ctxCv.bezierCurveTo(iX,iY,iX,iY,iX,iY + iR);
	ctxCv.lineTo(iX,iY + iH - iR);
	ctxCv.bezierCurveTo(iX,iY + iH,iX,iY + iH,iX + iR,iY + iH);
	ctxCv.lineTo(iX + iW / 2 - iTryW,iY + iH);
	ctxCv.closePath();
}
