﻿//------------------------------------
function Init() {

//グローバル変数宣言

// yn：金額
	yn01 = 0;
	yn02 = 0;
	yn03 = 0;
	yn04 = 0;

	yntotal = 0;

// wt：配分
	wt01 = 0;
	wt02 = 0;
	wt03 = 0;
	wt04 = 0;

	wttotal = 0;

//
	rttotal = 0;
	rktotal = 0;

//最初のセルにフォーカス
	document.AAForm.yn01.focus();

}


//------------------------------------
// 金額か配分か合計金額が入力されたとき
function InputValue(loc) {

	var tmpval;

// 入力のあったセルの内容をtmpvalに読み込み
	tmpval = parseFloat(document.AAForm[loc].value);	
	tmpval = (isNaN(tmpval) ? 0 : tmpval);

// 入力のあったセルに対応する変数へ、tmpvalの内容を代入実行
	eval(loc + "=" + tmpval);

	switch (loc) {
// 金額が入力された場合
		case "yn01" :
		case "yn02" :
		case "yn03" :
		case "yn04" : {
			yntotal = yn01+yn02+yn03+yn04;
			wt01 = ((yn01/yntotal) * 100);
			wt02 = ((yn02/yntotal) * 100);
			wt03 = ((yn03/yntotal) * 100);
			wt04 = ((yn04/yntotal) * 100);
			
			if (yntotal == 0) {
				wt01 = 0;
				wt02 = 0;
				wt03 = 0;
				wt04 = 0;
			}
			
			wttotal = wt01 + wt02 + wt03 + wt04;
			
			document.AAForm.yntotal.value = yntotal.toFixed(2);
			document.AAForm.wttotal.value = wttotal.toFixed(2);
			document.AAForm.wt01.value = wt01.toFixed(2);
			document.AAForm.wt02.value = wt02.toFixed(2);
			document.AAForm.wt03.value = wt03.toFixed(2);
			document.AAForm.wt04.value = wt04.toFixed(2);
			break;
		}

// 配分が入力された場合
		case "wt01" :
		case "wt02" :
		case "wt03" :
		case "wt04" : {
			wttotal = wt01 + wt02 + wt03 + wt04;
			yn01 = (yntotal * wt01 / wttotal);
			yn02 = (yntotal * wt02 / wttotal);
			yn03 = (yntotal * wt03 / wttotal);
			yn04 = (yntotal * wt04 / wttotal);
			
			if (wttotal == 0) {
				yn01 = 0;
				yn02 = 0;
				yn03 = 0;
				yn04 = 0;
			}

			yntotal = yn01+yn02+yn03+yn04;

			document.AAForm.yntotal.value = yntotal.toFixed(2);
			document.AAForm.wttotal.value = wttotal.toFixed(2);
			document.AAForm.yn01.value = yn01.toFixed(2);
			document.AAForm.yn02.value = yn02.toFixed(2);
			document.AAForm.yn03.value = yn03.toFixed(2);
			document.AAForm.yn04.value = yn04.toFixed(2);
			break;
		}
		case "yntotal" : {
			yn01 = (yntotal * wt01 / wttotal);
			yn02 = (yntotal * wt02 / wttotal);
			yn03 = (yntotal * wt03 / wttotal);
			yn04 = (yntotal * wt04 / wttotal);

			if (yntotal == 0 || wttotal == 0) {
				yn01 = 0;
				yn02 = 0;
				yn03 = 0;
				yn04 = 0;
			}
			
			document.AAForm.yn01.value = yn01.toFixed(2);
			document.AAForm.yn02.value = yn02.toFixed(2);
			document.AAForm.yn03.value = yn03.toFixed(2);
			document.AAForm.yn04.value = yn04.toFixed(2);
		
		}
	}

//リターンとリスクを計算
	CalculateReturnRisk();

//	clearTimeout();
//	setTimeout('CalculateReturnRisk()',1200);

//表の中の期待リターンとリスクの表示
	document.AAForm.rttotal.value = rttotal.toFixed(2);
	document.AAForm.rktotal.value = rktotal.toFixed(2);


//グラフと説明の表示
	DrawGraphText();

}


//------------------------------------
function CalculateReturnRisk() {

//フォームから読み込み
// rt:リターン
	var rt01 = parseFloat(document.AAForm.rt01.value);
	var rt02 = parseFloat(document.AAForm.rt02.value);
	var rt03 = parseFloat(document.AAForm.rt03.value);
	var rt04 = parseFloat(document.AAForm.rt04.value);

// rk:リスク
	var rk01 = parseFloat(document.AAForm.rk01.value);
	var rk02 = parseFloat(document.AAForm.rk02.value);
	var rk03 = parseFloat(document.AAForm.rk03.value);
	var rk04 = parseFloat(document.AAForm.rk04.value);

// c0102:国内債券と国内株式の相関
	var c0102 = parseFloat(document.SKForm.s12.value);
	var c0103 = parseFloat(document.SKForm.s13.value);
	var c0104 = parseFloat(document.SKForm.s14.value);
	var c0203 = parseFloat(document.SKForm.s23.value);
	var c0204 = parseFloat(document.SKForm.s24.value);
	var c0304 = parseFloat(document.SKForm.s34.value);


//計算
//期待リターンの平均
	rttotal = (
		(wt01/100)*rt01 + 
		(wt02/100)*rt02 + 
		(wt03/100)*rt03 + 
		(wt04/100)*rt04
		);

//リスクの合計
	rktotal = (Math.sqrt(
		Math.pow((rk01*wt01/100),2) +
		Math.pow((rk02*wt02/100),2) + 
		Math.pow((rk03*wt03/100),2) + 
		Math.pow((rk04*wt04/100),2) + 
		2*c0102*(rk01*wt01/100)*(rk02*wt02/100) +
		2*c0103*(rk01*wt01/100)*(rk03*wt03/100) +
		2*c0104*(rk01*wt01/100)*(rk04*wt04/100) +
		2*c0203*(rk02*wt02/100)*(rk03*wt03/100) +
		2*c0204*(rk02*wt02/100)*(rk04*wt04/100) +
		2*c0304*(rk03*wt03/100)*(rk04*wt04/100))
		);

}

function DrawGraphText() {

//ある金額の範囲に収まる確率
	var v95max=((((rktotal*1.96)+rttotal)/100 +1)*yntotal);
	var v95min=((((rktotal*(-1.96))+rttotal)/100 +1)*yntotal);
	var v60max=((((rktotal*0.84)+rttotal)/100 +1)*yntotal);
	var v60min=((((rktotal*(-0.84))+rttotal)/100 +1)*yntotal);
	var v30max=((((rktotal*0.38)+rttotal)/100 +1)*yntotal);
	var v30min=((((rktotal*(-0.38))+rttotal)/100 +1)*yntotal);


//説明文の数字を表示
document.getElementById("IDyntotal").innerHTML = yntotal.toFixed(2);
document.getElementById("IDrttotal").innerHTML = rttotal.toFixed(2);
document.getElementById("IDynreturn").innerHTML = (yntotal*(1+rttotal/100)).toFixed(2);

document.getElementById("ID95max").innerHTML = v95max.toFixed(2);
document.getElementById("ID95min").innerHTML = v95min.toFixed(2);

document.getElementById("ID60max").innerHTML = v60max.toFixed(2);
document.getElementById("ID60min").innerHTML = v60min.toFixed(2);

document.getElementById("ID30max").innerHTML = v30max.toFixed(2);
document.getElementById("ID30min").innerHTML = v30min.toFixed(2);


//チャートを表示
var pie = "http://chart.apis.google.com/chart?cht=p&chs=388x160&chp=4.71239&chl="
+encodeURIComponent("国内債券 ")+wt01.toFixed(0)+encodeURIComponent("％")
+encodeURIComponent("|国内株式 ")+wt02.toFixed(0)+encodeURIComponent("％")
+encodeURIComponent("|外国債券 ")+wt03.toFixed(0)+encodeURIComponent("％")
+encodeURIComponent("|外国株式 ")+wt04.toFixed(0)+encodeURIComponent("％")
+"&chco=0065FF&chd=t:"+wt01+","+wt02+","+wt03+","+wt04

document.getElementById("piechart").innerHTML = "<img src='"+pie+"&chf=bg,s,efefef"+"' align='absmiddle' />";

//テキストエリアに表示
document.PieChartForm.piecharthtml.value = "<div style='width: 390px'>"+"<img src='"+pie+"&chf=bg,s,ffffff' style='padding:5px 0px;border:solid 1px #ccc;'/>"+"<a href='http://guide.fund-no-umi.com/tools/aa.html' style='font-size:10px;line-height:100%;padding:0;margin:0;color:#999;text-decoration:none;float:right'>by 投資信託のガイド：アセットアロケーション分析</a></div><br style='clear:both;'>"

//チャート表示
line ="http://chart.apis.google.com/chart?chs=340x190&cht=lc"
+"&chco=cdefcd,80dd80,25bc2a,009100,25bc2a,80dd80,cdefcd"
+"&chm=b,cdefcd,0,1,0|b,80dd80,1,2,0|b,25bc2a,2,3,0|b,25bc2a,3,4,0|b,80dd80,4,5,0|b,cdefcd,5,6,0"
+"&chd=t:"
+yntotal+","+v95max+"|"
+yntotal+","+v60max+"|"
+yntotal+","+v30max+"|"
+yntotal+","+yntotal*(1+rttotal/100)+"|"
+yntotal+","+v30min+"|"
+yntotal+","+v60min+"|"
+yntotal+","+v95min
+"&chxt=y,r,x"
+"&chds="+(v95min-yntotal/20)+","+(v95max+yntotal/20)
+"&chxr=0,"+(v95min-yntotal/20)+","+(v95max+yntotal/20)+"|1,"+(v95min-yntotal/20)+","+(v95max+yntotal/20)
+"&chxp=0,"+yntotal+"|1,"+v95max+","+v60max+","+v30max+","+yntotal*(1+rttotal/100)+","+v30min+","+v60min+","+v95min
+"&chxl="+encodeURIComponent("0:|"+yntotal.toFixed(2)+"万円"
+"|1:|"+v95max.toFixed(2)+"万円"+"|"+v60max.toFixed(2)+"万円"+"|"+v30max.toFixed(2)+"万円"+"|"+(yntotal*(1+rttotal/100)).toFixed(2)+"万円"+"|"+v30min.toFixed(2)+"万円"+"|"+v60min.toFixed(2)+"万円"+"|"+v95min.toFixed(2)+"万円"
+"|2:|現在|1年後");

document.getElementById("linechart").innerHTML = "<img src='"+line+"&chf=bg,s,e9e9e9"+"' align='absmiddle' />";

document.LineChartForm.linecharthtml.value = "<div style='width: 390px'>"+"<img src='"+line+"&chf=bg,s,ffffff' style='padding:5px 25px;border:solid 1px #ccc;'/>"+"<a href='http://guide.fund-no-umi.com/tools/aa.html' style='font-size:10px;line-height:100%;padding:0;margin:0;color:#999;text-decoration:none;float:right'>by 投資信託のガイド：アセットアロケーション分析</a></div><br style='clear:both;'>"

}

//------------------------------------
function FocusChange(mode) {

	switch (mode) {
		case 1: {
			color1 = "#3333ff";
			color2 = "#d8d8d8";
			break;
		}
		case 2: {
			color1 = "#d8d8d8";
			color2 = "#3333ff";
			break;
		}
	}

	document.AAForm.yn01.style.border="solid 1px "+ color1;
	document.AAForm.yn02.style.border="solid 1px "+ color1;
	document.AAForm.yn03.style.border="solid 1px "+ color1;
	document.AAForm.yn04.style.border="solid 1px "+ color1;

	document.AAForm.wt01.style.border ="solid 1px "+ color2;
	document.AAForm.wt02.style.border ="solid 1px "+ color2;
	document.AAForm.wt03.style.border ="solid 1px "+ color2;
	document.AAForm.wt04.style.border ="solid 1px "+ color2;
	document.AAForm.yntotal.style.border = "solid 1px "+color2;

//	document.AAForm.yn04.style.backgroundColor= color1;

}

//------------------------------------
function drawscatter () {

	var x = "";
	var y = "";
	var step = 10;
	var rtmax = 0;
	var rtmin = 100;
	var rkmax = 0;
	var rtmin = 100;
	var scalex = 0;
	var scaley = 0;


// rtmax:リターンの最大値を求める
	rtmax = parseFloat(document.AAForm.rt01.value);
	if (rtmax < parseFloat(document.AAForm.rt02.value)) {
		rtmax = parseFloat(document.AAForm.rt02.value)
	}
	if (rtmax < parseFloat(document.AAForm.rt03.value)) {
		rtmax = parseFloat(document.AAForm.rt03.value)
	}
		if (rtmax < parseFloat(document.AAForm.rt04.value)) {
		rtmax = parseFloat(document.AAForm.rt04.value)
	}

// rtmin:リターンの最小大値を求める
	rtmin = parseFloat(document.AAForm.rt01.value);
	if (rtmin > parseFloat(document.AAForm.rt02.value)) {
		rtmin = parseFloat(document.AAForm.rt02.value)
	}
	if (rtmin > parseFloat(document.AAForm.rt03.value)) {
		rtmin = parseFloat(document.AAForm.rt03.value)
	}
	if (rtmin > parseFloat(document.AAForm.rt04.value)) {
		rtmin = parseFloat(document.AAForm.rt04.value)
	}


// rkmax:リスクの最大値を求める
	rkmax = parseFloat(document.AAForm.rk01.value);
	if (rkmax < parseFloat(document.AAForm.rk02.value)) {
		rkmax = parseFloat(document.AAForm.rk02.value)
	}
	if (rkmax < parseFloat(document.AAForm.rk03.value)) {
		rkmax = parseFloat(document.AAForm.rk03.value)
	}
	if (rkmax < parseFloat(document.AAForm.rk04.value)) {
		rkmax = parseFloat(document.AAForm.rk04.value)
	}

// rkmin:リスクの最小値を求める
	rkmin = parseFloat(document.AAForm.rk01.value);
	if (rkmin > parseFloat(document.AAForm.rk02.value)) {
		rkmin = parseFloat(document.AAForm.rk02.value)
	}
	if (rkmin > parseFloat(document.AAForm.rk03.value)) {
		rkmin = parseFloat(document.AAForm.rk03.value)
	}
	if (rkmin > parseFloat(document.AAForm.rk04.value)) {
		rkmin = parseFloat(document.AAForm.rk04.value)
	}


//rkmax,rtmaxからrkmin,rtminまでを0～100で表現するための係数scalex,scaleyを求める
//小数点を使わず0～100の整数表現により文字列長を短くするため
	scalex = (100 / (rkmax-rkmin) ).toFixed(0);
	scaley = (100 / (rtmax-rtmin) ).toFixed(0);

//グローバル変数退避（あんまりよい実装じゃないけど）
	var lwt01 = wt01;
	var lwt02 = wt02;
	var lwt03 = wt03;
	var lwt04 = wt04;
	var lrktotal = rktotal;
	var lrttotal = rttotal
	

//0から100に前後に15％ずつ余白をつけ0～130に。それに0.769を掛けて0～100にする
	for (wt01 = 0; wt01 <= 100; wt01 = wt01 + step) {
		for (wt02 = 0; wt02 <= (100 -wt01); wt02 = wt02 + step) {
			for (wt03 = 0; wt03 <= (100 -wt01 -wt02); wt03 = wt03 + step) {
					wt04 = 100 - wt01 -wt02 -wt03;
					CalculateReturnRisk();
					x = x + (((rktotal-rkmin)*scalex+15)*.769).toFixed(0) + ",";
					y = y + (((rttotal-rtmin)*scaley+15)*.769).toFixed(0) + ",";
			}
		}
	}

//グローバル変数復帰
	wt01 = lwt01;
	wt02 = lwt02;
	wt03 = lwt03;
	wt04 = lwt04;
	rktotal = lrktotal;
	rttotal = lrttotal

var x0 = (((rktotal-rkmin)*scalex+15)*.769).toFixed(0);
var y0 = (((rttotal-rtmin)*scaley+15)*.769).toFixed(0);

//rt軸の最小値 rtmin-(rtmax-rtmin)*0.15、rt軸の最大値 rtmax+(rtmax-rtmin)*0.15
//rkも同様

//xとyに-5を追加しているのは、カンマを最後にしないためのダミーデータ
//document.getElementById("scatterchart").innerHTML =
//"<image src='http://chart.apis.google.com/chart?chd=t:"+x0+"," + x + "-5|"+y0 //+"," + y + "-5&cht=s&chs=490x280&chf=bg,s,e3e3e3&chxt=x,y,x,y&chxr=0,"+
//(rkmin-(rkmax-rkmin)*0.15)+","+(rkmax+(rkmax-rkmin)*0.15)+"|1,"+
//(rtmin-(rtmax-rtmin)*0.15)+","+(rtmax+(rtmax-rtmin)*0.15)+
//"&chxl="+encodeURIComponent("2:|ﾘｽｸ (%)|3:|ﾘﾀｰﾝ|(%) |")+
//"&chxp=2,50|3,50,44&chm=o,7F92FF,1,1,6|c,ff0000,0,0,10' />";

var scatter = "http://chart.apis.google.com/chart?chd=t:"+x0+"," + x + "-5|"+y0 +"," + y + "-5&cht=s&chxt=x,y,x,y&chxr=0,"+
(rkmin-(rkmax-rkmin)*0.15)+","+(rkmax+(rkmax-rkmin)*0.15)+"|1,"+
(rtmin-(rtmax-rtmin)*0.15)+","+(rtmax+(rtmax-rtmin)*0.15)+
"&chxl="+encodeURIComponent("2:|ﾘｽｸ (%)|3:|ﾘﾀｰﾝ|(%) |")+
"&chxp=2,50|3,50,44&chm=o,7F92FF,1,1,6|c,ff0000,0,0,10";

//グラフ表示
document.getElementById("scatterchart").innerHTML ="<img src='"+scatter+"&chs=488x280&chf=bg,s,e3e3e3"+"' />";

//テキストエリアに表示
document.ScatterChartForm.scattercharthtml.value = "<div style='width: 490px'>"+"<img src='"+scatter+"&chs=488x280&chf=bg,s,ffffff' style='padding:5px 0px;border:solid 1px #ccc;'/>"+"<a href='http://guide.fund-no-umi.com/tools/aa.html' style='font-size:10px;line-height:100%;padding:0;margin:0;color:#999;text-decoration:none;float:right'>by 投資信託のガイド：アセットアロケーション分析</a></div><br style='clear:both;'>"

document.ScatterChartForm.scattercharthtml2.value = "<div style='width: 390px'>"+"<img src='"+scatter+"&chs=388x210&chf=bg,s,ffffff' style='padding:5px 0px;border:solid 1px #ccc;'/>"+"<a href='http://guide.fund-no-umi.com/tools/aa.html' style='font-size:10px;line-height:100%;padding:0;margin:0;color:#999;text-decoration:none;float:right'>by 投資信託のガイド：アセットアロケーション分析</a></div><br style='clear:both;'>"

}

//--------------------------------------
function ShowHidePanel(panel,onoff) {	document.getElementById(panel).style.display = onoff;
}

//--------------------------------------
function generatePieHTML() {
	var e;

	e = "<div style='width: 390px'>"+pie +"<a href='http://guide.fund-no-umi.com/' style='font-size:10px;line-height:100%;padding:0;margin:0;color:#999;text-decoration:none;float:right'>by 投資信託のガイド：ポートフォリオグラフメーカー</a></div><br style='clear:both;'>"

	document.ColorSelect.piecharthtml.value = e;

}
