// ********** Const
// ***** Timer
var m_iAnimeMilliSec = 50;

// ********** Common
var m_dStart;
var m_bFocus = 0;

// ********** Const
//@
var m_strURLSend = '/cgi-bin/generator/robot.cgi';
//var m_strURLSend = '/cgi-bin/generator/_robot.cgi';
//@

var m_iWait = 15;
var m_iRlMove = 30;
var m_iMargin = 0;

var m_iMainMode = 4 - 1;
var m_iSnapMode = 0 - 1;
var m_iCvWt,m_iCvWt2,m_iMiniWt2;
var m_iCvHt,m_iCvHt2,m_iMiniHt2;

var m_strForeColor = '#fff';
var m_strBackColor = '#020';
var m_bSnapFill = true;
var m_iLineWidth = 1;
var m_iBoxCnt = 10;

// ********** Draw
var m_iAnimeIdx;
var m_iAnimeMax = 0;
var m_timAnime;
var m_elmBody;
var m_strDefine;
var m_iPatnCnt;
var m_astrInit = [];
var m_astrStatus = [];
var m_astrLabel = [];
var m_astrColor = [];
var m_astrPath = [];
var m_iShotLast;

var m_iMinX = 0;
var m_iMinY = 0;
var m_iMaxX = 0;
var m_iMaxY = 0;
var m_bBox = [];

var m_strReq = '';

// ********** Draw
var m_elmPn;
var m_elmPns;

var m_iMainLayer = 6;
var m_astrArrayCv = new Array('bck0','bck1','frme','frst','frdm','desc','snpb','frm2','snpf');
var m_astrArrayNb = new Array('dbox');
var m_aelmCv = [];
var m_actxCv = [];
var m_aelmNb = [];
var m_astrNo = [];
var m_astrNn = [];

window.onload = sbInit;

function sbInit() {
	m_elmBody = document.getElementsByTagName('body').item(0);
	
	// ********** Init Canvas
	// 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);
	}
	
	m_elmPns = document.getElementById('gen_pns');
	
	sbChangeSize(false);
	sbChangeFilm(false);
	sbInitGame();
	
	// Get Param
	var astrParam = [];
	astrParam = sbGetParam();
	var strReq = '';
	if ('n' in astrParam) {
		strReq = decodeURI(astrParam['n']);
		if (strReq != '') {
			strReq = strReq.replace(/,/g,"\n");
			document.getElementById('gen_name').value = strReq;
			document.getElementById('gen_res').value = '';
			sbSend();
		}
	}
	
	// ********** Start Timer
	m_timAnime = setInterval('sbAnime()',m_iAnimeMilliSec);
}

// ********************************************************************************
function sbInitGame() {
	var iIdx,strIdx,iTemp;
	
	// ********** Resize Canvas
	m_elmPn.style.width  = m_iCvWt + 'px';
	m_elmPn.style.height = m_iCvHt + 'px';
	m_elmPns.style.width  = m_iCvWt2 + 'px';
	m_elmPns.style.height = m_iCvHt2 + 'px';
	for (iIdx = 0; iIdx < m_astrArrayCv.length; iIdx++) {
		strIdx = m_astrArrayCv[iIdx];
		if (iIdx < m_iMainLayer) {
			m_aelmCv[strIdx].width  = m_iCvWt;
			m_aelmCv[strIdx].height = m_iCvHt;
		} else {
			m_aelmCv[strIdx].width  = m_iCvWt2;
			m_aelmCv[strIdx].height = m_iCvHt2;
		}
		m_actxCv[strIdx].lineWidth = m_iLineWidth;
	}
	
	// ********** Clear And Hidden
	sbClearAll('bck0,bck1,frme,frst,frdm,desc,snpb,frm2,snpf','dbox');
	sbViewLayer('bck0,frme,frst,frdm,desc,snpb,frm2,snpf','dbox');
	
	// ********** Init Draw
	m_actxCv['frdm'].lineWidth = m_iLineWidth;
	m_actxCv['frst'].lineWidth = m_iLineWidth;
	m_actxCv['snpb'].lineWidth = m_iLineWidth;
	m_actxCv['snpf'].lineWidth = m_iLineWidth;
	
	// ********** Draw Back
	sbDrawBack();
	sbDrawFrame();
	
	// ********** Init Value
	m_strDefine = '';
}

function sbAnime() {
	var iIdx;
	var strDefine;
	var astrDefine = [];
	var iConstDefine = 2;
	var astrTempPath = [];
	var strTemp;
	
	strDefine = '' + document.getElementById('gen_res').value;
	
	// ********** Start Animation
	if (strDefine != '' && strDefine != m_strDefine) {
		sbInitGame();
		
		// ********** Init
		astrDefine = strDefine.split('~');
		m_astrInit    = astrDefine[0].split(';');
		m_astrStatus  = astrDefine[1].split(';');
		m_astrLabel   = astrDefine[2].split(';');
		m_astrColor   = astrDefine[3].split(';');
		astrTempPath  = astrDefine[4].split(';');
		
		m_iPatnCnt = (astrDefine[4] == '' ? 0 : astrTempPath.length);
		for (iIdx = 0; iIdx < m_iPatnCnt; iIdx++) {
			m_astrPath[iIdx] = [];
			m_astrPath[iIdx] = astrTempPath[iIdx].split(' ');
			sbAdjustPath(iIdx,1000,1000);
		}
		
		// ********** Time
		if (m_bFocus == 0) {
			document.getElementById('gen_wait').style.display = 'none';
			document.getElementById('gen_all').style.display = 'block';
			document.getElementById('gen_name').focus();
			m_bFocus = 1;
		}
		m_dStart = new Date();
		
		// ********** Init Value
		m_iAnimeIdx = 0;
		m_iAnimeMax = (m_iWait + m_iRlMove) * m_iPatnCnt;
		m_strDefine = strDefine;
		m_iShotLast = -1;
		for (iIdx = 0; iIdx < m_iBoxCnt; iIdx++) {
			m_bBox[iIdx] = false;
		}
		
		// ********** Set Permalink 
		strTemp = window.location.href
		iTemp = strTemp.indexOf('?');
		if (iTemp >= 0) {
			strTemp = strTemp.substring(0,iTemp);
		}
		if (m_astrInit[1] != '') {
			strTemp = strTemp + '?n=' + encodeURI(m_astrInit[1]);
		}
		document.getElementById('gen_url').value = strTemp;
	}
	
	// ********** Draw
	var iAnime;
	var iSt,iPart;
	var iSize;
	var iPar,iPar2;
	var iXC,iYC,iX,iY,iW,iL,iM,iH;
	var iShotIdx;
	var strColor;
	var iBox,iR,iTempR,iTempX,iTempY;
	iM = m_iCvHt * 0.065;
	iW = m_iCvWt * 0.3;
	iH = m_iCvHt * 0.15;
	iL = m_iCvHt * 0.13;
	iFontSize = iL * 0.2;
	
	if (m_iAnimeIdx >= 0 && m_iAnimeIdx < m_iAnimeMax) {
		// ***** Clear
		
		// ***** Calc
		iAnime = m_iAnimeIdx - m_iWait - (m_iWait + m_iRlMove) * Math.floor(m_iAnimeIdx / (m_iWait + m_iRlMove));
		iSt = Math.floor(m_iAnimeIdx / (m_iWait + m_iRlMove));
		iPart = Math.floor(iSt / 3);
		iPar = (iAnime % m_iRlMove) / (m_iRlMove - 1);
		strColor = m_astrColor[iPart];
		
		m_actxCv['frdm'].fillStyle   = strColor;
		m_actxCv['frdm'].strokeStyle = strColor;
		m_actxCv['frdm'].globalAlpha = 1;
		
		if (iSt % 3 < 2) {
			iSize = 1;
			iPar2 = iPar / 0.5;
			iPar2 = (iPar2 < 0) ? 0 : iPar2;
			iPar2 = (iPar2 > 1) ? 1 : iPar2;
			if (iSt % 3 == 1) {
				iSize = 1 + Math.sin(iPar2 * Math.PI) * 0.3;
			}
			m_actxCv['frdm'].clearRect(0,0,m_iCvWt,m_iCvHt);
			if (iSt % 3 == 1 && iPar == 1) {
				m_actxCv['frst'].strokeStyle = strColor;
				m_actxCv['frst'].globalAlpha = 1;
				sbDrawLine(m_actxCv['frst'],0,0,m_iCvWt,m_iCvHt,iSt,1,1,0);
				if (m_bSnapFill) {
					m_actxCv['frst'].fillStyle   = strColor;
					m_actxCv['frst'].globalAlpha = 0.1;
					sbDrawLine(m_actxCv['frst'],0,0,m_iCvWt,m_iCvHt,iSt,1,1,1);
				}
			} else {
				sbDrawLine(m_actxCv['frdm'],0,0,m_iCvWt,m_iCvHt,iSt,iPar2,iSize,false);
			}
			
			if (iSt % 3 == 1 && iPar == 1) {
				iXC = m_iMinX + (m_iMaxX - m_iMinX) * 0.5;
				iYC = m_iMinY + (m_iMaxY - m_iMinY) * 0.5;
				
				iR = -1;
				iBox = 0;
				for (iIdx = 0; iIdx < m_iBoxCnt; iIdx++) {
					if (m_bBox[iIdx] == false) {
						iTempX = m_iCvWt * 0.5 + (iIdx < 6 ? -1 : 1) * (m_iCvWt * 0.5 - iW - iM);
						iTempY = m_iCvHt * 0.5 + (iIdx % 6 - 2.5) * iH;
						iTempR = Math.sqrt(Math.pow((iTempX - iXC + iM),2) + Math.pow((iTempY - iYC + iM),2));
						if (iR == -1 || iTempR < iR) {
							iX = iTempX;
							iY = iTempY;
							iR = iTempR;
							iBox = iIdx;
						}
					}
				}
				m_bBox[iBox] = true;
				
				iXC += (iX < m_iCvWt * 0.5 ? -1 : 1) * iM;
				m_actxCv['desc'].globalAlpha = 1;
				m_actxCv['desc'].fillStyle = strColor;
				m_actxCv['desc'].strokeStyle = strColor;
				m_actxCv['desc'].beginPath();
				m_actxCv['desc'].moveTo(iXC,iYC);
				m_actxCv['desc'].lineTo(iXC + (iX - iXC) * 0.5,iY);
				m_actxCv['desc'].lineTo(iX,iY);
				m_actxCv['desc'].stroke();
				iX += (iX < m_iCvWt * 0.5 ? -1 : 0) * iW;
				iY -= iL * 0.5;
				m_actxCv['desc'].globalAlpha = 0.5;
				m_actxCv['desc'].fillStyle = '#000';
				m_actxCv['desc'].fillRect(iX,iY,iW,iL);
				m_actxCv['desc'].globalAlpha = 1;
				m_actxCv['desc'].strokeRect(iX,iY,iW,iL);
				m_astrNn['dbox'] += sbDrawLabel(iX + iL * 0.1,iY + iL * 0,iW - iL * 0.2,iL * 1,'l',iFontSize,strColor,m_astrLabel[iPart]);
			}
		}
		
		// SnapShot
		iShotIdx = Math.floor((m_iAnimeIdx / m_iAnimeMax) * ((m_iCvWt2 * m_iCvHt2) / (m_iMiniWt2 * m_iMiniHt2)));
		if (iShotIdx > m_iShotLast) {
			iX =           (iShotIdx % (m_iCvWt2 / m_iMiniWt2)) * m_iMiniWt2;
			iY = Math.floor(iShotIdx / (m_iCvWt2 / m_iMiniWt2)) * m_iMiniHt2;
			m_actxCv['snpf'].fillStyle   = strColor;
			m_actxCv['snpf'].strokeStyle = strColor;
			m_actxCv['snpf'].globalAlpha = (m_bSnapFill ? 0.5 : 1);
			sbDrawLine(m_actxCv['snpf'],iX,iY,m_iMiniWt2,m_iMiniHt2,(iSt % 3 == 2 ? iSt - 1 : iSt),(iSt % 3 == 2 ? 1 : iPar),1,m_bSnapFill);
			
			m_iShotLast = iShotIdx;
		}

//dTemp = new Date();
//m_astrNn['info'] = sbDrawLabel(m_iCvHt * 0.01,m_iCvHt * 0.8,400,m_iCvHt * 0.1,'l',12,'#fff','' + dTemp.getTime());
	}
	
	// ********** End Animation
	if (m_iAnimeIdx == m_iAnimeMax + m_iWait) {
		sbViewLayer('bck0,bck1,frme,frst,frdm,desc,snpb,frm2,snpf','dbox');
		
		// Status
		m_actxCv['desc'].globalAlpha = 0.3;
		m_astrNn['dbox'] += sbDrawRadar(m_actxCv['desc'],m_iCvWt * 0.64,m_iCvHt * 0.66,m_iCvWt * 0.32,m_iCvHt * 0.32,iFontSize,m_astrStatus[0],'100',m_astrStatus[1],'#fff',m_astrColor[0]);
		m_astrNn['dbox'] += sbDrawLabel(0,m_iCvHt - iL,0,iL * 0.8,'c',iL * 0.2,'#fff',m_astrLabel[Math.floor(m_iPatnCnt / 3)]);
		
		//Amazon
		if (m_astrInit.length > 2) {
			sbGetAmazon('links','robot00-22','',encodeURIComponent(m_astrInit[2]),'',280,1);
		}
		
		// ********** Check Time
		dNow = new Date();
		//alert(parseInt((dNow.getTime() - m_dStart.getTime())));
	}
	
	// ********** Add FrameCount
	if (m_iAnimeIdx >= 0 && m_iAnimeIdx <= m_iAnimeMax + m_iWait) {
		m_iAnimeIdx ++;
	}
	
	// View Text
	sbViewText();
}

function sbSend() {
	var strReq;
	var strName;
	
	strName = document.getElementById('gen_name').value.replace(/\n|\r/g,';');
	
	strReq = '';
	strReq += '&name=' + encodeURIComponent(strName);
	strReq += '&plat=' + document.getElementById('gen_plat').value;
	strReq += '&lang=' + document.getElementById('gen_lang').value;
	
	// Cache 
	var dNow = new Date();
	
	if (m_iAnimeIdx > m_iAnimeMax + m_iWait || strReq != m_strReq) {
		m_strReq = strReq;
		
		// 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) {
					document.getElementById('gen_res').value = xmlhttp.responseText;
				}
			}
			xmlhttp.send(null);
		}
	}
	return false;
}

function sbChangeColor() {
	var strColor = Math.floor(Math.random() * 0xFFF).toString(16);
	var iIdx;
	iIdx = Math.floor(Math.random() * 10);
	if        (iIdx == 0) { strColor = '000';
	} else if (iIdx == 1) { strColor = 'fff';
	}
	for(iIdx = strColor.length; iIdx < 3; iIdx++){
		strColor = '0' + strColor;
	}
	m_strBackColor = '#' + strColor;
	
	sbDrawBack();
}

function sbChangeText() {
	m_aelmCv['desc'].style.visibility = (m_aelmCv['desc'].style.visibility == 'hidden' ? 'visible' : 'hidden');
	m_aelmNb['dbox'].style.visibility =  m_aelmCv['desc'].style.visibility;
}

function sbChangeFrame() {
	m_aelmCv['frme'].style.visibility = (m_aelmCv['frme'].style.visibility == 'hidden' ? 'visible' : 'hidden');
	m_aelmCv['frm2'].style.visibility =  m_aelmCv['frme'].style.visibility;
}

function sbChangeSize(bRedraw) {
	m_iMainMode = (m_iMainMode + 1) % 5;
	if        (m_iMainMode == 0) { m_iCvWt = 240;
	} else if (m_iMainMode == 1) { m_iCvWt = 320;
	} else if (m_iMainMode == 2) { m_iCvWt = 512;
	} else if (m_iMainMode == 3) { m_iCvWt = 640;
	} else if (m_iMainMode == 4) { m_iCvWt = 720;
	}
	m_iCvHt = m_iCvWt * 0.75;
	
	if (bRedraw) {
		sbInitGame();
	}
}

function sbChangeFilm(bRedraw) {
	m_iSnapMode = (m_iSnapMode + 1) % 5;
	if        (m_iSnapMode == 0) { m_iCvWt2 = 720; m_iCvHt2 = 90; m_iMiniWt2 = 120;
	} else if (m_iSnapMode == 1) { m_iCvWt2 = 200; m_iCvHt2 = 600; m_iMiniWt2 = 200;
	} else if (m_iSnapMode == 2) { m_iCvWt2 = 640; m_iCvHt2 = 600; m_iMiniWt2 = 160;
	} else if (m_iSnapMode == 3) { m_iCvWt2 = 720; m_iCvHt2 = 720; m_iMiniWt2 = 120;
	} else if (m_iSnapMode == 4) { m_iCvWt2 = 720; m_iCvHt2 = 720; m_iMiniWt2 = 240;
	}
	m_iMiniHt2 = m_iMiniWt2 * 0.75;
	
	if (bRedraw) {
		sbInitGame();
	}
}

function sbChangeFill(bRedraw) {
	m_bSnapFill = !m_bSnapFill;
	
	if (bRedraw) {
		sbInitGame();
	}
}

function sbChangeLineWidth(bRedraw) {
	m_iLineWidth = m_iLineWidth % 3 + 0.5;
	
	if (bRedraw) {
		sbInitGame();
	}
}

// EnterKey Event
var m_elmFocus;
function sbFocus(elmTemp){
	m_elmFocus = elmTemp
	elmTemp.style.backgroundColor = '#400';
	elmTemp.select();
}

function sbBlur(elmNum){
	elmNum.style.backgroundColor = '';
}

// ********************************************************************************
// Common
// ********************************************************************************
function sbDrawBack() {
	m_actxCv['bck0'].globalAlpha = 1;
	m_actxCv['bck0'].fillStyle = '#000';
	m_actxCv['bck0'].fillRect(0,0,m_iCvWt,m_iCvHt);
	
	m_actxCv['bck1'].globalAlpha = 1;
	m_actxCv['bck1'].fillStyle = m_strBackColor;
	m_actxCv['bck1'].fillRect(0,0,m_iCvWt,m_iCvHt);
	
	m_actxCv['snpb'].fillStyle = m_strBackColor;
	m_actxCv['snpb'].fillRect(0,0,m_iCvWt2,m_iCvHt2);
}

function sbDrawFrame() {
	var iIdx,iTemp;
	var iX,iY;
	
	m_actxCv['frme'].globalAlpha = 1;
	m_actxCv['frme'].strokeStyle = '#fff';
	m_actxCv['frme'].strokeRect(m_iLineWidth,m_iLineWidth,m_iCvWt - m_iLineWidth * 2,m_iCvHt - m_iLineWidth * 2);
	
	m_actxCv['frme'].globalAlpha = 1;
	m_actxCv['frme'].strokeStyle = '#fff';
	m_actxCv['frme'].strokeRect(m_iLineWidth,m_iLineWidth,m_iCvWt - m_iLineWidth * 2,m_iCvHt - m_iLineWidth * 2);
	
	m_actxCv['frme'].globalAlpha = 0.1;
	m_actxCv['frme'].strokeStyle = '#fff';
	
	iTemp = m_iCvWt * 0.05;
	for (iIdx = 0; iIdx <= m_iCvWt; iIdx+=iTemp) {
		m_actxCv['frme'].beginPath();
		m_actxCv['frme'].moveTo(iIdx,0);
		m_actxCv['frme'].lineTo(iIdx,m_iCvHt);
		m_actxCv['frme'].stroke();
	}
	for (iIdx = 0; iIdx <= m_iCvHt; iIdx+=iTemp) {
		m_actxCv['frme'].beginPath();
		m_actxCv['frme'].moveTo(0,iIdx);
		m_actxCv['frme'].lineTo(m_iCvWt,iIdx);
		m_actxCv['frme'].stroke();
	}
	
	for (iY = 0; iY < m_iCvHt2; iY+=m_iMiniHt2) {
		for (iX = 0; iX < m_iCvWt2; iX+=m_iMiniWt2) {
			m_actxCv['frm2'].strokeStyle = '#fff';
			m_actxCv['frm2'].strokeRect(iX + m_actxCv['frm2'].lineWidth / 2,iY + m_actxCv['frm2'].lineWidth / 2,m_iMiniWt2 - m_actxCv['frm2'].lineWidth,m_iMiniHt2 - m_actxCv['frm2'].lineWidth);
		}
	}
}

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;
}

// ********************************************************************************
// Common Layer
// ********************************************************************************
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];
		}
	}
}

// ********************************************************************************
// Common Graphic
// ********************************************************************************
function sbAdjustPath(iIdx2,iScaleW,iScaleH) {
	var aiTemp = [];
	var iTempW;
	var iTempH;
	var iZoomin;
	var iMarginX;
	var iMarginY;
	var iX,iY;
	var iIdx;
	var strPath;
	
	iTempW = (m_iCvWt - m_iMargin) / iScaleW;
	iTempH = (m_iCvHt - m_iMargin) / iScaleH;
	iZoomin = (iTempW < iTempH ? iTempW : iTempH)
	iMarginX = m_iCvWt / 2 - iScaleW * iZoomin / 2;
	iMarginY = m_iCvHt / 2 - iScaleH * iZoomin / 2;
	
	strPath = '';
	for (iIdx = 0; iIdx < m_astrPath[iIdx2].length; iIdx++) {
		if        (m_astrPath[iIdx2][iIdx].length == 0) {
		} else if (m_astrPath[iIdx2][iIdx].length == 1) {
			strPath += m_astrPath[iIdx2][iIdx] + ' ';
		} else {
			aiTemp = m_astrPath[iIdx2][iIdx].split(',');
			iX = Number(aiTemp[0]) * iZoomin + iMarginX;
			iY = Number(aiTemp[1]) * iZoomin + iMarginY;
			strPath += iX + ',' + iY + ' ';
		}
	}
	m_astrPath[iIdx2] = strPath.split(' ');
}

function sbDrawLine(ctxCv,iBaseX,iBaseY,iBaseW,iBaseH,iSt,iPar,iSize,bFill) {
	var iX,iY;
	var aiX = [];
	var aiY = [];
	var aiTemp = [];
	var aiCurve = [];
	var iCurve;
	var iIdx,iIdx2;
	var strMode;
	var iCol;
	
	iPar = (iPar < 0 ? 0 : (iPar > 1 ? 1 : iPar));
	
	var bFirst = true;
	m_iMinX = 0;
	m_iMinY = 0;
	m_iMaxX = 0;
	m_iMaxY = 0;
	
	strMode = '';
	iCol = 0;
	for (iIdx = 0; iIdx < m_astrPath[iSt].length; iIdx++) {
		if        (m_astrPath[iSt][iIdx].length == 0) {
		} else if (m_astrPath[iSt][iIdx].length == 1) {
			strMode = m_astrPath[iSt][iIdx];
			if        (strMode == 'M')  {
			} else if (strMode == 'C')  { iCurve = 0;
			} else if (strMode == 'L')  {
			} else if (strMode == 'z')  { bFill ? ctxCv.fill() : ctxCv.stroke();
			} else if (strMode == "\n") {
			} else                      {
			}
		} else {
			for (iIdx2 = 0; iIdx2 <= 1; iIdx2++) {
				aiTemp = m_astrPath[iSt + iIdx2][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 - m_iCvWt * iSize / 2 + m_iCvWt / 2;
			iY = iY * iSize - m_iCvHt * iSize / 2 + m_iCvHt / 2;
			
			iX = iBaseX + iX * (iBaseW / m_iCvWt);
			iY = iBaseY + iY * (iBaseH / m_iCvHt);
			
			if (bFirst || iX < m_iMinX) { m_iMinX = iX; }
			if (bFirst || iY < m_iMinY) { m_iMinY = iY; }
			if (bFirst || iX > m_iMaxX) { m_iMaxX = iX; }
			if (bFirst || iY > m_iMaxY) { m_iMaxY = iY; }
			bFirst = false;
			
			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 sbDrawRadar(ctxCv,iBaseX,iBaseY,iW,iH,iFontSize,strCaptionList,strMaxList,strValList,strColorStroke,strColorFill) {
	var iLbWt = iW * 0.4;
	var iLbHt = iH * 0.2;
	var iR;
	
	if (strCaptionList == '') {
		return '';
	}
	
	// Clear Canvas
	var strHTML = '';
	
	ctxCv.lineWidth = 1;
	ctxCv.strokeStyle = strColorStroke;
	ctxCv.fillStyle = strColorFill;
	
	iX = iBaseX + iW / 2;
	iY = iBaseY + iH / 2;
	iCcRd = (iH / 2) * 0.6;
	var astrCaption = [];
	var aiMaxIdx = [];
	var aiValIdx = [];
	astrCaption = strCaptionList.split(',');
	aiMaxIdx = strMaxList.split(',');
	aiValIdx = strValList.split(',');
	
	for (iIdx = 0; iIdx <= 4; iIdx++) {
		switch(iIdx) {
		case 0: ctxCv.beginPath(); break;
		case 1: ctxCv.beginPath(); break;
		case 2: ctxCv.beginPath(); break;
		}
		
		for (iIdx2 = 0; iIdx2 < astrCaption.length; iIdx2++) {
			switch(iIdx) {
			case 0: iR = iCcRd * (Number(aiValIdx[iIdx2]) / Number(aiMaxIdx[iIdx2 % aiMaxIdx.length])); break;
			case 1: iR = iCcRd * (Number(aiValIdx[iIdx2]) / Number(aiMaxIdx[iIdx2 % aiMaxIdx.length])); break;
			case 2: iR = iCcRd; break;
			case 3: iR = iCcRd; break;
			case 4: iR = iCcRd * 1.4; break;
			}
			iXi = iX + Math.round(Math.cos((iIdx2 * (360 / astrCaption.length) + 270) / 180 * Math.PI) * iR);
			iYi = iY + Math.round(Math.sin((iIdx2 * (360 / astrCaption.length) + 270) / 180 * Math.PI) * iR);
			switch(iIdx) {
			case 0:
			case 1:
			case 2:
				if (iIdx2 == 0) {
					ctxCv.moveTo(iXi,iYi);
				} else {
					ctxCv.lineTo(iXi,iYi);
				}
				break;
			case 3:
				ctxCv.beginPath();
				ctxCv.moveTo(iX,iY);
				ctxCv.lineTo(iXi,iYi);
				ctxCv.stroke();
				break;
			case 4:
				strHTML += '<table style="text-align: center; left:' + (iXi - iLbWt / 2) + 'px; top:' + (iYi - iLbHt / 2) + 'px; width: ' + (iLbWt + 2) + 'px;height: ' + (iLbHt + 2) + 'px;">';
				strHTML += '<tr><td><span  style="font-size:' + iFontSize + 'px;">' + astrCaption[iIdx2] + '<br />' + (astrCaption[iIdx2] == '' ? '' : aiValIdx[iIdx2]) + '</span>';
				strHTML += '</td></tr></table>';
				break;
			}
		}
		
		switch(iIdx) {
		case 0: ctxCv.closePath(); ctxCv.fill(); break;
		case 1: ctxCv.closePath(); ctxCv.stroke(); break;
		case 2: ctxCv.closePath(); ctxCv.stroke(); break;
		}
	}
	return strHTML;
}

