﻿
/**
 * 正規表現サンプル

// マッチング
"abcdefg".match(/a/)

// 置換
"abcdefg".replace(/cde/g, "XYZ");
 */
 

function setHtml(key, value)
{
	document.getElementById(key).childNodes[0].nodeValue = value;
}


/**
 * 試算実行
 */
function shisan(param)
{
	/************************************************** フィルター */
	
	var names = new Array
	(
		'kakaku',
		'yachin',
		'akishitsukojo',
		'shokeihiritsu',
		'jikoshikin',
		//'kariirekin',
		'kikan',
		'kinri'
	);
	for(key in names)
	{
		// 数字と . 以外を削除
		document.simulation.elements[names[key]].value =
		document.simulation.elements[names[key]].value.replace(/[^0-9\.]/g, "");
		
		// . で始まる場合は 0. にする
		if(document.simulation.elements[names[key]].value.match(/^\./))
		{
			document.simulation.elements[names[key]].value = '0.';
		}
		
		// 0 で始まる数字は 0 を削除
		document.simulation.elements[names[key]].value =
		document.simulation.elements[names[key]].value.replace(/^0+([^\.].*)$/g, "$1");
		
		// ２つ目以降の小数点を削除
		document.simulation.elements[names[key]].value =
		document.simulation.elements[names[key]].value.replace(/^([0-9]+\.[0-9]*)\..*$/g, "$1");
	}
	
	
	// フィルターここまで
	
	

	
	/************************************************** バリデーター
	連想配列 message にエラーメッセージを代入
	エラーメッセージが存在したら試算しない
	エラーメッセージが存在しなければ試算して結果を表示
	*/
	
	var success = true;	// バリデーションのフラグ, true なら試算結果を表示
	var message =
	{
		'messageKakaku': '',
		'messageYachin': '',
		'messageAkishitsukojo': '',
		'messageShokeihiritsu': '',
		'messageJikoshikin': '',
		//'messageKariirekin': '',
		'messageKikan': '',
		'messageKinri': ''
	};	// エラーメッセージ
	
	/**
	 * 入力フォームの値
	 */
	var f_kakaku			= document.simulation.kakaku.value;
	var f_yachin			= document.simulation.yachin.value;
	var f_akishitsukojo		= document.simulation.akishitsukojo.value;
	var f_shokeihiritsu		= document.simulation.shokeihiritsu.value;
	var f_jikoshikin		= document.simulation.jikoshikin.value;
	/*
	if(f_kakaku < f_jikoshikin)
	{
		f_jikoshikin = f_kakaku;
	}
	*/
	//var f_kariirekin		= document.simulation.kariirekin.value;
	var f_kikan				= document.simulation.kikan.value;
	var f_kinri				= document.simulation.kinri.value;
	
	
	
	/**
	 * 物件価格・自己資金・借入金額のバランスを保つ
	 * 借入金の代入
	 */
	if(f_jikoshikin == '')
	{
		//alert('ddddddd');
		var kariirekin = 1111111111;
		var f_kariirekin = 1111111111;
	}
	else if(eval(f_kakaku) <= eval(f_jikoshikin))
	{
		//document.simulation.jikoshikin.value = f_kakaku;
		var kariirekin = 0;
		var f_kariirekin = 0;
		//setHtml("kariirekin", '0 万円');
	}
	else
	{
		var kariirekin = f_kakaku - f_jikoshikin;
		var f_kariirekin = f_kakaku - f_jikoshikin;
		//setHtml("kariirekin", kariirekin + ' 万円');
	}
	////////////////////////////////////////////////////////////////////////////////////////////////////
	////////////////////////////////////////////////////////////////////////////////////////////////////
	////////////////////////////////////////////////////////////////////////////////////////////////////
	////////////////////////////////////////////////////////////////////////////////////////////////////
	////////////////////////////////////////////////////////////////////////////////////////////////////
	////////////////////////////////////////////////////////////////////////////////////////////////////
	////////////////////////////////////////////////////////////////////////////////////////////////////
	////////////////////////////////////////////////////////////////////////////////////////////////////
	////////////////////////////////////////////////////////////////////////////////////////////////////
	////////////////////////////////////////////////////////////////////////////////////////////////////
	////////////////////////////////////////////////////////////////////////////////////////////////////
	
	
	/**
	 * 空
	 */
	var elements =
	{
		'messageKakaku': f_kakaku,
		'messageYachin': f_yachin,
		'messageAkishitsukojo': f_akishitsukojo,
		'messageShokeihiritsu': f_shokeihiritsu,
		'messageJikoshikin': f_jikoshikin,
		//'messageKariirekin': f_kariirekin,
		'messageKikan': f_kikan,
		'messageKinri': f_kinri
	};
	for(key in elements)
	{	
		if(elements[key] == '')
		{
			message[key] = '&nbsp;<strong>入力してください</strong>';
		}
	}
	
	/**
	 * ０より大きい数
	 */
	var elements =
	{
		'messageKakaku': f_kakaku,
		'messageYachin': f_yachin,
		'messageAkishitsukojo': f_akishitsukojo,
		'messageShokeihiritsu': f_shokeihiritsu,
		//'messageJikoshikin': f_jikoshikin,
		//'messageKariirekin': f_kariirekin,
		//'messageKikan': f_kikan,
		'messageKinri': f_kinri
	};
	for(key in elements)
	{	
		if(elements[key] <= 0 && message[key] == '')
		{
			message[key] = '&nbsp;<strong>０より大きい数を入力してください</strong>';
		}
	}
	
	/**
	 * 期間
	if(f_kikan == '')
	{
		message['messageKikan'] = '<br /><strong>選択してください</strong>';
		f_kikan = 1;
		f_kinri = 1;
	}
	
	if(f_kariirekin == 0 || f_kariirekin == '')
	{
		message['messageKikan'] = '';
		message['messageKinri'] = '';
		f_kikan = 1;
		f_kinri = 1;
	}
	 */
	 
	 
	 
	/**
	 * innerHTML でエラーメッセージを代入
	 * メッセージが無ければ真を返して試算を実行
	 */
	function setMessage(message)
	{
		var flag = true;
		for(key in message)
		{	
			if(message[key] != '')
			{
				flag = false;
				document.getElementById(key).innerHTML = message[key];
			}
			else
			{
				document.getElementById(key).innerHTML = '';
			}
		}
		return flag;
	}
	
	// バリデーションここまで
	
	

	
	// 全て入っている場合は引数で分岐


	
	/************************************************** 試算ここから */
	
	/**
	 * flag が真なら試算を表示
	 */
	if(setMessage(message))
	{
	
		/**
		 * 書式を変更する関数
		 */
		// 1/10000
		function getRound(tmp)
		{
			return(Math.round(tmp / 10000));
		}
		// 万円
		function getTenThousand(tmp)
		{
			return(tmp + ' 万円');
		}
		// ％
		function getPercent(tmp)
		{
			return((Math.round(tmp * 10)) / 10 + ' ％');
		}
		// カンマ
		function getComma(num)
		{
			//return num.toString().replace(/([\d]+?)(?=(?:\d{3})+$)/g, function (t) { return t+","; });
			//return num.toString().replace( /([0-9]+?)(?=(?:[0-9]{3})+$)/g , '$1,' );
			return num.toString().replace(/([\d]+?)(?:(\d{3}\.\d+)|(?=(?:\d{3})+(?:\.\d+)?$))/g, "$1,$2");
		}
		
		
		
		
		/**
		 * 年間収入
		 * ((平均家賃 * 戸数) + (平均駐車場代金 * 台数)) * 12
		 */
		//var nenkanShunyu = ((f_yachin * f_kosu) + (f_parking_price * f_parking_number)) * 12;
		var nenkanShunyu = f_yachin;
		
		
	
		
		
		/**
		 * 空室控除 + 諸経費
		 * (年間収入 * 0.05) + (年間収入 * パーセンテージ)
		 */
		//////////////////////////////////////////////////////////// パーセンテージの設定が必要！！！！！！！
		var akishitsuKojo = nenkanShunyu * (f_akishitsukojo / 100);
		var shokeihi = nenkanShunyu * (f_shokeihiritsu / 100);
		var akishitsuShokeihi = akishitsuKojo + shokeihi;
		akishitsuShokeihi = Math.round(akishitsuShokeihi);	// 四捨五入
		
		
		/**
		 * 年間手取り
		 * 年間収入 - 年間支出
		 */
		//nenkanTedori = nenkanShunyu - akishitsuShokeihi - 111;
		nenkanTedori = nenkanShunyu - akishitsuShokeihi;
		
		
		
		
		/**
		 * ローン返済額
		 * 年間収入 - (空室控除 + 諸経費) - (年間手取り)
		 */
		
		//f_kariirekin = 1111;
		/*
		alert(f_kikan);
		alert(f_kariirekin);
		alert(f_kinri);
		var hensaigaku = 222;
		*/
		
		var wk_kaisu = f_kikan * 12;			// 借入期間
		var wk_kari = f_kariirekin * 10000;	// 借入金額
		var wk_kinri = f_kinri / 100;		// 借入金利
		var wk_bunsi = wk_kari * (wk_kinri / 12) * Math.pow((1 + (wk_kinri / 12)), wk_kaisu);
		var wk_bunbo = Math.pow((1 + (wk_kinri / 12)), wk_kaisu) - 1;
		var kingaku = wk_bunsi / wk_bunbo;
		//var hensaigaku = round(f_kingaku * 12, -4);
		var hensaigaku = Math.round(kingaku * 12 / 10000);
		
		
		//alert(f_hensaigaku);
		
		
		
		
		/**
		 * 支出合計（年間）
		 * 年間支出
		 * ローン返済額（年間）＋空室控除・諸経費（年間）
		 */
		var shishutsuTotal = eval(hensaigaku) + eval(akishitsuShokeihi);
		
		
		
		/**
		 * 年間手取り
		 * 年間収入 - (ローン返済額 + 空室控除 + 諸経費)
		 */
		var nenkanTedori = nenkanShunyu - shishutsuTotal;
		
		/**
		 * 物件価格
		 * 自己資金 + 借入金
		////////////////////////////////////////////////// いらないよ！！！！！！！！！！！！！！！！！！！！！！ 
		var articleKakaku = f_jikoshikin + f_kariirekin;
		 */
		
		/**
		 * 表面利回り
		 * 年間収入 / 物件価格
		 */
		//var hyomenRimawari = Math.floor(nenkanShunyu / (f_kakaku / 1000)) / 10;
		var hyomenRimawari = Math.round(nenkanShunyu / (f_kakaku / 1000)) / 10;
		
		/**
		 * 実質利回り
		 * (年間収入 - (空室控除 + 諸経費)) / 物件価格
		 */
		var jishitsuRimawari = Math.round((nenkanShunyu - (akishitsuKojo + shokeihi)) / (f_kakaku / 1000)) / 10;
		
		/**
		 * ローン返済後利回り
		 * 年間手取り / 物件価格
		 */
		//var hensaigoRimawari = round(nenkanTedori / articleKakaku / 100, 1);
		var hensaigoRimawari = Math.round(nenkanTedori / (f_kakaku / 1000)) / 10;
		
		/**
		 * 投資利回り
		 * 年間手取り / 自己資金
		 ******************************************************** いらない？
		//var toshiRimawari = round(nenkanTedori / jikoshikin / 100, 1);
		//var toshiRimawari = nenkanTedori / jikoshikin;
		if(f_jikoshikin == 0)
		{
			var toshiRimawari = nenkanTedori / 100;
		}
		else
		{
			var toshiRimawari = nenkanTedori / f_jikoshikin / 100;
		}
		 */
		
		//var hensaigoRimawari = Math.round(nenkanTedori / (f_kakaku / 1000)) / 10;
		//var toshiRimawari = Math.round(nenkanTedori / f_jikoshikin);
		
		
		//var toshiRimawari = nenkanTedori / f_jikoshikin * 100;
		var toshiRimawari = nenkanTedori / f_jikoshikin * 100;
		
		
		/*
		/////////////////////////////////////////////////////////////////////////////////////////////////////
		alert(f_kakaku);
		alert(f_jikoshikin);
		if(f_kakaku < f_jikoshikin)
		{
			alert('aaaaaaaaaaaaaaaa');
			//toshiRimawari = 11111;
		}
		*/
		

		
		/************************************************** 書式の変更 */
		
		/*
		// 1/10000
		function getRound(tmp)
		{
			return(Math.round(tmp / 10000));
		}
		
		// 万円
		function getTenThousand(tmp)
		{
			return(tmp + ' 万円');
		}
		
		// 年間収入
		//nenkanShunyu = getTenThousand(getComma(getRound(nenkanShunyu)));
		nenkanShunyu = getTenThousand(getComma(nenkanShunyu));
		
		// ローン返済額
		//hensaigaku = getTenThousand(getComma(getRound(hensaigaku)));
		
		// 空室控除 + 諸経費
		//akishitsuShokeihi = getTenThousand(getComma(getRound(akishitsuShokeihi)));
		akishitsuShokeihi = getTenThousand(getComma(akishitsuShokeihi));
		
		// 年間手取り
		nenkanTedori = getTenThousand(getComma(getRound(nenkanTedori)));
		
		// ％
		function getPercent(tmp)
		{
			return((Math.round(tmp * 10)) / 10 + ' ％');
		}
		hyomenRimawari = getPercent(hyomenRimawari);
		jishitsuRimawari = getPercent(jishitsuRimawari);
		hensaigoRimawari = getPercent(hensaigoRimawari);
		toshiRimawari = getPercent(toshiRimawari);
		
		// カンマ
		function getComma(num)
		{
			//return num.toString().replace(/([\d]+?)(?=(?:\d{3})+$)/g, function (t) { return t+","; });
			//return num.toString().replace( /([0-9]+?)(?=(?:[0-9]{3})+$)/g , '$1,' );
			return num.toString().replace(/([\d]+?)(?:(\d{3}\.\d+)|(?=(?:\d{3})+(?:\.\d+)?$))/g, "$1,$2");
		}
		*/
		
		
		
		/************************************************** 単位をつける */
		
		/*
		// 1/10000
		function getRound(tmp)
		{
			return(Math.round(tmp / 10000));
		}
		
		// 万円
		function getTenThousand(tmp)
		{
			return(tmp + ' 万円');
		}
		
		// 年間収入
		//nenkanShunyu = getTenThousand(getComma(getRound(nenkanShunyu)));
		nenkanShunyu = getTenThousand(getComma(nenkanShunyu));
		
		// ローン返済額
		//hensaigaku = getTenThousand(getComma(getRound(hensaigaku)));
		var hensaigaku = 333333;
		
		// 空室控除 + 諸経費
		//akishitsuShokeihi = getTenThousand(getComma(getRound(akishitsuShokeihi)));
		akishitsuShokeihi = getTenThousand(getComma(akishitsuShokeihi));
		*/
		
		// 年間手取り
		nenkanShunyu = getTenThousand(nenkanShunyu);
		hensaigaku = getTenThousand(hensaigaku);
		akishitsuShokeihi = getTenThousand(akishitsuShokeihi);
		nenkanTedori = getTenThousand(nenkanTedori);
		shishutsuTotal = getTenThousand(shishutsuTotal);
		
		// 借入金額
		kariirekin = getTenThousand(kariirekin);
		
		// ％
		function getPercent(tmp)
		{
			return((Math.round(tmp * 10)) / 10 + ' ％');
		}
		hyomenRimawari = getPercent(hyomenRimawari);
		jishitsuRimawari = getPercent(jishitsuRimawari);
		hensaigoRimawari = getPercent(hensaigoRimawari);
		toshiRimawari = getPercent(toshiRimawari);
		
		// カンマ
		function getComma(num)
		{
			//return num.toString().replace(/([\d]+?)(?=(?:\d{3})+$)/g, function (t) { return t+","; });
			//return num.toString().replace( /([0-9]+?)(?=(?:[0-9]{3})+$)/g , '$1,' );
			return num.toString().replace(/([\d]+?)(?:(\d{3}\.\d+)|(?=(?:\d{3})+(?:\.\d+)?$))/g, "$1,$2");
		}
		
		
		
		
		
		setHtml("kariirekin", kariirekin);
		/*
		var kariirekin = 8887777777777;
		var f_kariirekin = 8887777777777;
		if(jikoshikin == '')
		{
			alert('iiiiooooooooooooo');
			kariirekin = 7777777777;
			f_kariirekin = 8887777777777;
			
			//f_kariirekin = f_kakaku;
			//f_kariirekin = 88888888;
			//f_kakaku = 88888888;
		}
		*/
		// 表示
		if(success)
		{
			setHtml("shishutsuTotal", shishutsuTotal);
			setHtml("nenkanShunyu", nenkanShunyu);
			setHtml("hensaigaku", hensaigaku);
			setHtml("akishitsuShokeihi", akishitsuShokeihi);
			setHtml("nenkanTedori", nenkanTedori);
			setHtml("hyomenRimawari", hyomenRimawari);
			setHtml("jishitsuRimawari", jishitsuRimawari);
			//setHtml("kariirekin", kariirekin);
			setHtml("hensaigoRimawari", hensaigoRimawari);
			setHtml("toshiRimawari", toshiRimawari);
		}
		
		
		
		/**
		 * 年間収入
		 * ((平均家賃 * 戸数) + (平均駐車場代金 * 台数)) * 12
		document.simulation.key.childNodes[0].nodeValue = value;
		 */
		
		
		/**
		 * 物件価格・自己資金・借入金額のバランスを保つ
		if(eval(f_kakaku) <= eval(f_jikoshikin))
		{
			document.simulation.jikoshikin.value = f_kakaku;
			//var kariirekin = 0;
			setHtml("kariirekin", '0 万円');
		}
		else
		{
			var kariirekin = f_kakaku - f_jikoshikin;
			setHtml("kariirekin", kariirekin + ' 万円');
		}
		 */
	
		
		 
	}
	else
	{
		setHtml("nenkanShunyu", '-');
		setHtml("hensaigaku", '-');
		setHtml("akishitsuShokeihi", '-');
		setHtml("shishutsuTotal", '-');
		setHtml("nenkanTedori", '-');
		setHtml("hyomenRimawari", '-');
		setHtml("jishitsuRimawari", '-');
		setHtml("hensaigoRimawari", '-');
		setHtml("toshiRimawari", '-');
	}
}

