/*
v1.08
これらのソースは著作権者を主張しません。改造、二次使用、何でも自由です
ソースを改変した場合の著作権は改変者に準じます
http://kis.cside.com/rgt/

動作確認ブラウザ
IE5, NN7, Opera7
*/

// initialize setting _____________________________________
status_max = 130;	//ステータス最大値
radius = 60;	//ステータス最大値の有効半径
radius_bg = 95;	//背景画像半径
diameter_bg = radius_bg * 2;	//背景画像直径
segment = 8;	//ポジション間のセグメント数
segment_unprinting_margin = 2.5;
	//各セグメント間の最低マージン
	//これ以下になるようならそのセグメントは描画しない（見易さ保全

//背景画像パス
bg_url = "./img/status_bg.png";

//各ポジションに使う画像のパス、表示サイズ
point_imgurl = "./img/point.png";
point_imgwidth = 8;
point_imgheight = 8;

//各セグメントに使う画像のパス、表示サイズ
segment_imgurl = "./img/point.png";
segment_imgwidth = 4;
segment_imgheight = 4;

//マウス座標から見たグラフ表示位置
viewmargin_w = -(diameter_bg - 60);	//width
viewmargin_h = -(diameter_bg + 30);	//height

//各ステータス値の表示位置（left, top)
coord_str = new Array(110, 26);
coord_vit = new Array(158, 70);
coord_luk = new Array(157, 139);
coord_int = new Array(110, 164);
coord_dex = new Array(50, 139);
coord_agi = new Array(38, 70);

//ステ−タス値が正常でない場合に表示するエラー文字列、及び文字色
err_string = "Error!";
err_color = '#B64A6D';

//ステータス値が空のときに表示する文字列、及び文字色
unknown_string = "ﾋﾐﾂ。";
unknown_color = '#5AA5A5';

//ステータス値の文字色（値によって変える）
status_rank = new Array(0, 40, 60, 80, 99, 110);
status_color = new Array('#8C7877', '#9D6B6B', '#AE6060', '#BF5454', '#CC3333', '#FF4040');

//フェード表示設定（フェード処理はIEのみ動作）
fade_use = true;	//フェード処理を使うか（true or false)
trans_max = 100;	//不透明度最大値
trans_min = 0;	//不透明度最低値
trans_1fadein = 20;	//フェードイン１処理時の進捗不透明度
trans_1fadeout = 10;	//フェードアウト１処理時の進捗不透明度
//これらは互いに割り切れる必要がある

// end of setting
// ________________________________________________________

layerid = 0;
errors = new Array();

browser = navigator.appName;
if (browser == "Microsoft Internet Explorer") {
	browser = "IE";
	if (fade_use == true) {
		trans_cnt = 0;
		trans_now = new Array();
		trans_tid = new Array();
		trans_loop = new Array();
		trans_name = new Array();
		fadeout_flag = new Array();
		fadein_flag = new Array();
	}
}
else if (browser == "Netscape") {
	browser = "NN";
}
else if (navigator.userAgent.search("Opera")!= -1) {
	browser = "Opera";
}

pi = Math.PI;
base_cos = Math.abs( radius * Math.cos(150 * pi / 180) );
base_sin = Math.abs( radius * Math.sin(150 * pi / 180) );

function setposition(id, left, top) {
	var layerObj = document.getElementById(id);
	if (browser == "IE" || browser == "Opera") {
		layerObj.style.pixelLeft = left;
		layerObj.style.pixelTop = top;
	}
	else if (browser == "NN") {
		layerObj.style.left = left + "px";
		layerObj.style.top = top + "px";
	}
}
function viewsegments(layername, id, x, y, seg_x, seg_y) {
	var saveX = x;
	var saveY = y;
	var x_step, y_step;
	for (i=0; i<segment; i++) {
		x += seg_x;
		y += seg_y;
		x_step = Math.abs( saveX - x );
		y_step = Math.abs( saveY - y );
		if (x_step <= segment_unprinting_margin &&
			y_step <= segment_unprinting_margin ) {
			continue;
		}
		if (y_step <= segment_unprinting_margin &&
			x_step <= segment_unprinting_margin ) {
			continue;
		}
		document.write("<div id=" +layername+id+ " class=graph><img src=" +segment_imgurl+ " width=" +segment_imgwidth+ " height=" +segment_imgheight+ "></div>");
		setposition(layername+id, x, y);
		saveX = x;
		saveY = y;
		id++;
	}
	return id;
}
function viewposition(layername, x, y) {
	document.write("<div id=" +layername+ " class=graph><img src=" +point_imgurl+ " width=" +point_imgwidth+ " height=" +point_imgheight+ "></div>");
	setposition(layername, x, y);
}
function viewparm(layername, x, y, val, color) {
	document.write("<div id=" +layername+ " class=parm><b><font size=1 color=" +color+ ">" +val+ "</font></b></div>");
	setposition(layername, x, y);
}
function status_output(name, str, agi, vit, int_, dex, luk) {
	var seed;
	var st_x, st_y, vit_x, vit_y, luk_x, luk_y,
		int_x, int_y, dex_x, dex_y, agi_x, agi_y;
	var seg_x, seg_y;
	var id, layername;
	var str_rgb, agi_rgb, vit_rgb, int_rgb, dex_rgb, luk_rgb;
	
	// ステータス値チェック
	str = verify_status(str);
	agi = verify_status(agi);
	vit = verify_status(vit);
	int_ = verify_status(int_);
	dex = verify_status(dex);
	luk = verify_status(luk);
	
	// _start_of_status_
	layername = name + "_bg";
	document.write("<div id=" +layername+ " class=bg>");
	var layerObj = document.getElementById( layername );
	layerObj.style.backgroundImage = 'url('+bg_url+')';
	if (browser == "IE") {
		layerObj.style.pixelWidth = diameter_bg;
		layerObj.style.pixelHeight = diameter_bg;
		if (fade_use == true) {
			trans_name[trans_cnt] = layername;
			trans_now[trans_cnt] = 0;
			trans_tid[trans_cnt] = '';
			trans_loop[trans_cnt] = 0;
			fadeout_flag[trans_cnt] = false;
			fadein_flag[trans_cnt] = false;
			layerObj.style.filter = "alpha(opacity=" +trans_min+ ")";
			trans_cnt++;
		}
	}
	else if (browser == "NN" ||
			browser == "Opera")
	{
		layerObj.style.width = diameter_bg + "px";
		layerObj.style.height = diameter_bg + "px";
	}
	layerObj.style.visibility = "hidden";
	
	// 各ポジションの座標計算（時計回り）_________________________
	// str
	if (str == unknown_string) {
		st_x = radius_bg;
		st_y = radius_bg;
		str_rgb = unknown_color;
	}
	else if (str == err_string) {
		st_x = radius_bg;
		st_y = radius_bg;
		str_rgb = err_color;
	}
	else{
		seed = eval(str);
		str_rgb = status_color[ranker(seed)];
		seed /= status_max;
		st_x = radius_bg;
		st_y = radius_bg - radius * seed;
	}
	
	// vit
	if (vit == unknown_string) {
		vit_x = radius_bg;
		vit_y = radius_bg;
		vit_rgb = unknown_color;
	}
	else if (vit == err_string) {
		vit_x = radius_bg;
		vit_y = radius_bg;
		vit_rgb = err_color;
	}
	else{
		seed = eval(vit);
		vit_rgb = status_color[ranker(seed)];
		seed /= status_max;
		vit_x = radius_bg + base_cos;
		vit_y = radius_bg - base_sin;
		vit_x = radius_bg + Math.abs(vit_x - radius_bg) * seed;
		vit_y = radius_bg - Math.abs(vit_y - radius_bg) * seed;
	}
	
	// luk
	if (luk == unknown_string) {
		luk_x = radius_bg;
		luk_y = radius_bg;
		luk_rgb = unknown_color;
	}
	else if (luk == err_string) {
		luk_x = radius_bg;
		luk_y = radius_bg;
		luk_rgb = err_color;
	}
	else{
		seed = eval(luk);
		luk_rgb = status_color[ranker(seed)];
		seed /= status_max;
		luk_x = radius_bg + base_cos;
		luk_y = radius_bg + base_sin;
		luk_x = radius_bg + Math.abs(luk_x - radius_bg) * seed;
		luk_y = radius_bg + Math.abs(luk_y - radius_bg) * seed;
	}
	
	// int
	if (int_ == unknown_string) {
		int_x = radius_bg;
		int_y = radius_bg;
		int_rgb = unknown_color;
	}
	else if (int_ == err_string) {
		int_x = radius_bg;
		int_y = radius_bg;
		int_rgb = err_color;
	}
	else{
		seed = eval(int_);
		int_rgb = status_color[ranker(seed)];
		seed /= status_max;
		int_x = radius_bg;
		int_y = radius_bg + radius * seed;
	}
	
	// dex
	if (dex == unknown_string) {
		dex_x = radius_bg;
		dex_y = radius_bg;
		dex_rgb = unknown_color;
	}
	else if (dex == err_string) {
		dex_x = radius_bg;
		dex_y = radius_bg;
		dex_rgb = err_color;
	}
	else{
		seed = eval(dex);
		dex_rgb = status_color[ranker(seed)];
		seed /= status_max;
		dex_x = radius_bg - base_cos;
		dex_y = radius_bg + base_sin;
		dex_x = radius_bg - Math.abs(dex_x - radius_bg) * seed;
		dex_y = radius_bg + Math.abs(dex_y - radius_bg) * seed;
	}
	
	// agi
	if (agi == unknown_string) {
		agi_x = radius_bg;
		agi_y = radius_bg;
		agi_rgb = unknown_color;
	}
	else if (agi == err_string) {
		agi_x = radius_bg;
		agi_y = radius_bg;
		agi_rgb = err_color;
	}
	else{
		seed = eval(agi);
		agi_rgb = status_color[ranker(seed)];
		seed /= status_max;
		agi_x = radius_bg - base_cos;
		agi_y = radius_bg - base_sin;
		agi_x = radius_bg - Math.abs(agi_x - radius_bg) * seed;
		agi_y = radius_bg - Math.abs(agi_y - radius_bg) * seed;
	}
	
	// 各ポジション間のセグメントを表示（時計回り）______________________________
	layername = name + "_segments";
	document.write("<div id=" +layername+ " class=segments>");
	id = 0;
	// str -> vit
	seg_x = (vit_x - st_x) / segment;
	seg_y = (vit_y - st_y) / segment;
	id = viewsegments(layername, id, st_x, st_y, seg_x, seg_y);
	
	// vit -> luk
	seg_x = (luk_x - vit_x) / segment;
	seg_y = (luk_y - vit_y) / segment;
	id = viewsegments(layername, id, vit_x, vit_y, seg_x, seg_y);
	
	// luk -> int
	seg_x = (int_x - luk_x) / segment;
	seg_y = (int_y - luk_y) / segment;
	id = viewsegments(layername, id, luk_x, luk_y, seg_x, seg_y);
	
	// int -> dex
	seg_x = (dex_x - int_x) / segment;
	seg_y = (dex_y - int_y) / segment;
	id = viewsegments(layername, id, int_x, int_y, seg_x, seg_y);
	
	// dex -> agi
	seg_x = (agi_x - dex_x) / segment;
	seg_y = (agi_y - dex_y) / segment;
	id = viewsegments(layername, id, dex_x, dex_y, seg_x, seg_y);
	
	// agi -> str
	seg_x = (st_x - agi_x) / segment;
	seg_y = (st_y - agi_y) / segment;
	id = viewsegments(layername, id, agi_x, agi_y, seg_x, seg_y);
	document.write("</div>");
	
	// 各ポジションを表示（時計回り）______________________________
	layername = name + "_positions";
	document.write("<div id="  +layername+ " class=positions>");
	viewposition(layername+0, st_x, st_y);
	viewposition(layername+1, vit_x, vit_y);
	viewposition(layername+2, luk_x, luk_y);
	viewposition(layername+3, int_x, int_y);
	viewposition(layername+4, dex_x, dex_y);
	viewposition(layername+5, agi_x, agi_y);
	document.write("</div>");
	
	// 各ステータス値を表示（時計回り）______________________________
	layername = name + "_status";
	document.write("<div id=" +layername+ " class=status>");
	viewparm(layername+0, coord_str[0], coord_str[1], str, str_rgb);
	viewparm(layername+1, coord_vit[0], coord_vit[1], vit, vit_rgb);
	viewparm(layername+2, coord_luk[0], coord_luk[1], luk, luk_rgb);
	viewparm(layername+3, coord_int[0], coord_int[1], int_, int_rgb);
	viewparm(layername+4, coord_dex[0], coord_dex[1], dex, dex_rgb);
	viewparm(layername+5, coord_agi[0], coord_agi[1], agi, agi_rgb);
	document.write("</div>");
	
	layerObj = document.getElementById( layername+4 );
	if (browser == "IE" || browser == "Opera") {
		layerObj.style.pixelLeft -= layerObj.offsetWidth;
	}
	
	layerObj = document.getElementById( layername+5 );
	if (browser == "IE" || browser == "Opera") {
		layerObj.style.pixelLeft -= layerObj.offsetWidth;
	}
	
	// _end_of_status_
	document.write("</div>");
}
function hidden_graph(name) {
 	var layerObj = document.getElementById(name + "_bg");
	if (browser == "IE" &&
		fade_use == true)
	{ 
		for (i=0; i<trans_name.length; i++) {
			if (trans_name[i] == name + "_bg") {
				fadein_flag[i] = false;
				fadeout_flag[i] = true;
				clearTimeout( trans_tid[i]  );
				fadeout_alpha(i);
				break;
			}
		}
	}
	else
	{
		layerObj.style.visibility = "hidden";
		if (errors[name]) {
			document.getElementById(name + "_err").style.visibility = "hidden";
		}else{
			visible_layers(name + "_segments", false);
			visible_layers(name + "_positions", false);
			visible_layers(name + "_status", false);
		}
	}
}
function show_graph(name, x, y) {
 	var layerObj = document.getElementById( name + "_bg" );
 	if (browser == "IE" ||
 		browser == "Opera") {
		layerObj.style.pixelLeft = document.body.scrollLeft + event.clientX + viewmargin_w;
		layerObj.style.pixelTop = document.body.scrollTop + event.clientY + viewmargin_h;
	}
	else if (browser == "NN") {
		layerObj.style.left = x + viewmargin_w + "px";
		layerObj.style.top = y + viewmargin_h + "px";
	}
	
	layerObj.style.visibility = "visible";
	if (errors[name]) {
		document.getElementById(name + "_err").style.visibility = "visible";
	}else{
		visible_layers(name + "_segments", true);
		visible_layers(name + "_positions", true);
		visible_layers(name + "_status", true);
	}
	
	if (browser == "IE" &&
		fade_use == true)
	{
		for (i=0; i<trans_name.length; i++) {
			if (trans_name[i] == name + "_bg") {
				fadeout_flag[i] = false;
				fadein_flag[i] = true;
				clearTimeout( trans_tid[i]  );
				fadein_alpha(i);
				break;
			}
		}
	}
}
function fadein_alpha(arraynum) {
	var layerObj = document.getElementById( trans_name[arraynum] );
	if (trans_now[arraynum] > trans_max ||
		fadein_flag[arraynum] == false)
	{
		clearTimeout( trans_tid[arraynum]  );
		fadein_flag[arraynum] == false;
		return;
	}
	else
	{
		layerObj.style.filter = "alpha(opacity=" + trans_now[arraynum] + ")";
		trans_loop[arraynum] += trans_1fadein;
		trans_now[arraynum] = trans_min + trans_loop[arraynum];
		
		//再帰でフェードさせる
		trans_tid[arraynum] = setTimeout("fadein_alpha(" + arraynum + ")", 100);
	} 
}
function fadeout_alpha(arraynum) {
	var layerObj = document.getElementById( trans_name[arraynum] );
	if (trans_now[arraynum] < trans_min ||
		fadeout_flag[arraynum] == false)
	{
		clearTimeout( trans_tid[arraynum]  );
		fadeout_flag[arraynum] == false;
		return;
	}
	else
	{
		layerObj.style.filter = "alpha(opacity=" + trans_now[arraynum] + ")";
		trans_loop[arraynum] -= trans_1fadeout;
		trans_now[arraynum] = trans_min + trans_loop[arraynum];
		
		//再帰でフェードさせる
		trans_tid[arraynum] = setTimeout("fadeout_alpha(" + arraynum + ")", 100);
	} 
}
function visible_layers(name, flag) {
	var object = document.getElementById(name);
	if (flag == true) {
		for (i=0; i<object.length; i++) object[i].style.visibility = "visible";
	}else{
		for (i=0; i<object.length; i++) object[i].style.visibility = "hidden";
	}
}
function verify_status(parm) {
	if (parm == '') return unknown_string;
	
	var str = parm.match(/\D/g);
	if (str) {
		if (str.length != 1) return err_string;
		if (str[0] != '+') return err_string;
	}
	
	if (eval(parm) > status_max) return err_string;
	
	return parm;
}
function ranker(status) {
	var rank = 0;
	var i;
	for (i=1; i<=status_rank.length-1; i++) {
		if (status >= status_rank[i])
			rank++;
		else
			return rank;
	}
	return rank;
}

