
/* ローンシミュレーションフォーム02 */

	RatePer = 2.675;			// 金利をここで設定しています
	Rate    = RatePer / 100;
	var d1,d2,d3,d4,d5,d6,d7;
	var a1,a2,a3;
	
	// フォーム入力項目をクリアする
	function Clear(Text)
	{
		Text.D1.value = "";
		Text.D2.value = "";
		Text.D3.value = "";
		Text.D4.value = "";
		Text.D5.value = "";
		Text.D6.value = "";
		Text.D7.value = "";
		Text.A1.value = "";
		Text.A2.value = "";
		Text.A3.value = "";
	}
	
	// 入力項目を半角数字かチェックするための関数
	function isNum(txt)
	{
		for (var i = 0; i < txt.length; i++) {
			var oneChar = txt.substring(i, i+1);
			if (oneChar < "0" || oneChar > "9") {
				alert("半角数字を入力してください。");
				return false;
			}
		}
		return true;
	}
	
	// 借入れ期間の月換算
	function mTimes()
	{
		return d3*12+d4;
	}
	
	// 借入れ期間中のボーナス分支払回数
	function bTimes()
	{
		var X = mTimes() / 6;
		return X;
	}
	function bTimes1()
	{
		var X = mTimes() /6;
		if (d5 >= 6) return X-1;
		return X;
	}
	
	function goError(errNo)
	{
		if (errNo == 0) {
			alert("「お借り入れ残高」を正しく入力してください");
			return false;
		}
		if (errNo == 1) {
			alert("「内ボーナス返済分残高」を正しく入力してください");
			return false;
		}
		if (errNo == 2) {
			alert("「お借り入れ残期間」の「年」を正しく入力してください");
			return false;
		}
		if (errNo == 3) {
			alert("「お借り入れ残期間」の「月」入力は１２ヵ月未満にしてください");
			return false;
		}
		if (errNo == 4) {
			alert("「お借り入れ残期間」を正しく入力してください");
			return false;
		}
		if (errNo == 5) {
			alert("「借り換え後の初回ボーナス月までの期間」を正しく入力してください");
			return false;
		}
		if (errNo == 6) {
			alert("「ご返済額（毎月）」を正しく入力してください");
			return false;
		}
		if (errNo == 7) {
			alert("「ご返済額（ボーナス時増額分）を正しく入力してください」");
			return false;
		}
		if (errNo == 10) {
			alert("「お借り入れ残期間」の「ヵ月」を正しく入力してください");
			return false;
		}
		return true;
	}
	
	// Get values from the form
	// 処理：初期化処理
	function getValues(Text)
	{
		// 入力データをチェックしてグローバル変数へ代入。
		// もし、間違いならばエラー処理ルーチンへgoError()
		if (Text.D1.value == "" || isNum(Text.D1.value)==false) {	// 入力データチェック
			return goError(0);	// 借入れ総額の値エラー
		} else {
			d1 = eval(Text.D1.value);
		}
		if (Text.D2.value == "" || isNum(Text.D2.value)==false)	// 入力データチェック
			return goError(1);	// 内ボーナス返済分の値エラー
		else
			d2 = eval(Text.D2.value);
		if (isNum(Text.D3.value) == true) {
			if (eval(Text.D3.value == ""))
				d3 = 0;
			else
				d3 = eval(Text.D3.value);
		} else {
			return goError(2);
		}
		if (Text.D4.value >= "12" || isNum(Text.D4.value)==false) {	// 入力データチェック
			return goError(3);	// 12ヶ月以上はおかしい
		} else {
			if (Text.D4.value != "")
				d4 = eval(Text.D4.value);
			else
				d4 = 0;
		}
		if (isNum(Text.D3.value) == false)
			return goError(10);
		if (Text.D4.value == "" && Text.D3.value == "")
			return goError(4);	// 年の入力がないのに月の入力が無いのもおかしい
		
		//初回ボーナス月までの期間
		if (Text.D5.value == "" || isNum(Text.D5.value) == false)
			return goError(5);
		else
			d5 = eval(Text.D5.value);
		
		//ご返済額（毎月）
		if (Text.D6.value == "" || isNum(Text.D6.value) == false)
			return goError(6);
		else
			d6 = eval(Text.D6.value);
		
		//ご返済額（ボーナス時増額分）
		if (Text.D7.value == "" || isNum(Text.D7.value) == false)
			return goError(7);
		else
			d7 = eval(Text.D7.value);
		
		// 結果を零で初期化しておく
		a1 = 0;
		a2 = 0;
		a3 = 0;
		
		return true;
	}
	
	// 処理：毎月のご返済額を計算
	// parameters:
	//		rMoney	-- 返済額
	//		rTime	-- 返済期間(月で入力)
	function calculate0(rMoney, rTime)
	{
		var temp;
		var result;				// 計算結果
		var timeOfRet = eval(rTime);		// 回数（timeOfRetヵ月）
		var moneyOfRet = eval(rMoney);		// 返済額
		
		temp   = Math.pow(1+eval(Rate/12),eval(timeOfRet));
		result = (eval(moneyOfRet) * eval(temp))
			/ ((eval(temp)-1) / eval(Rate/12));
		
		return result;
	}
	
	function calculate1(rMoney, rTime)
	{
		var tempR0,tempR1;
		var result0,result1;			// 計算結果
		var timeOfRet = eval(rTime);		// 回数（timeOfRetヵ月）
		var moneyOfRet = eval(rMoney);		// 返済額
		
		tempR0  =
		 Math.pow(1+eval(Rate/2),
		  eval(timeOfRet));
		tempR1  =
		 Math.pow(1+eval(Rate/2),
		  eval(timeOfRet-1));
		tempBr  =
		 1+eval(Rate*d5/12);
		
		result0 = eval(moneyOfRet) * eval(tempR1) * eval((Rate/2)*(tempBr));
		result1 = result0/(eval(tempR0)-1);
		return result1;
	}
	
	
	function setValues(Text)
	{
		Text.A1.value = Math.round(a1);	// 毎月のご返済金額
		Text.A2.value = Math.round(a2);	// ボーナス分のご返済額
		Text.A3.value = Math.round(a3);	// ご返済総額
	}
	
	function cMain(Test)
	{
		if (getValues(Test) == true) {
			// これからの返済額を計算。ここで第１引数は(借入れ総額-内ボーナス返済分)で、
			// 第２引数に(借入れ期間を月換算した値)を渡しています。
			a1 =eval(d6 * mTimes()) + eval(d7 * bTimes1());
			
			// 返済額。ここで第１引数は(ボーナス返済分)で、第２引数は
			// (借入れ期間を月換算した値)を渡しています。
			a2 = calculate0(d1-d2, mTimes()) * mTimes() + calculate1(d2, bTimes()) * bTimes1();
			
			// 総ご返済額
			a3 = a1 - a2;
			
			// 上の処理で求められた各値（月々返済額、ボーナス月返済額、総返済額）を
			// フォームへ出力する
			setValues(Test);
		}
	}