﻿//TODO:
// Chart onclick value, display payment chart


//Declare globals
var loaned,rate,times,payments;

//Config Variables//

var kari_multiplier = '10000';//借り入れ金額倍率・壱萬円
var limit_gaku_loop = '1000';




////////////////////////


var Conversions = {
	
	// Conversions Chain
		process : function (txt){
			return this.purge(this.zenhan(txt));
		},
	
	// Remove unecessary letters
		purge : function(txt){
			return txt.replace(/\D/g,''); 	//All except numerals
		},

	// Zenkaku <> Hankaku
	
		//Wrappers for the Zen<>Han conversion
		zenhan:function(txt){
				return this.zenhan_algo(txt,0);
		},
		hanzen : function(txt){
				return this.zenhan_algo(txt,1);
		},
		
		//Main Algo, mode_switch changes into HanZen conversion
		zenhan_algo : function(txt,mode_switch){	
			_from = "０１２３４５６７８９．，－＋";
			_to = "0123456789.,-+";
			_res = "";
			//Swap list from<>to if mode_switch is on
			if(mode_switch){
				var temp = _from;_from = _to;_to = temp;
			}
			
				for (i=0; i<txt.length; i++){
					c = txt.charAt(i);
					n = _from.indexOf(c,0);
					if (n >= 0) c = _to.charAt(n);
					_res += c;
				}
			return _res;
		},
	
	// Add commas to resulting numeral string
		commas : function (txt){
						return txt.toString().replace(/([\d]+?)(?=(?:\d{3})+$)/g, function (t) { return t+","; });
		}
	
	
};




////////////////////////
//////////Main//////////
////////////////////////

function simu_proc(){


	//Init : Clean and control form
	simu_init();

	loaned = Conversions.process($('simu_kari').value) * kari_multiplier;
	rate = Conversions.process($('simu_riritsu').value) / 100 / 12; // 月利変換 + need to sanitize
	times= Conversions.process($('simu_kaisu').value);
	payments = Conversions.process($('simu_hensai').value);
	
	//Check null
	if(!loaned) simu_err($('simu_kari'),'借入額を入力して下さい');
	if(!rate) simu_err($('simu_riritsu'),'利率を入力して下さい');
	
	
	var simu_mode = $('simu_mode').value * 1; //Force cast to numeral
	
	//モード選択　１．支払い回数指定　２．毎月支払い額指定
	switch(simu_mode){
		case 1: simu_kaisu();
			break;
		case 2: simu_gaku();
			break;
		default:;
	}
	
}



function simu_kaisu(){

	//Error trap
	if(!times) simu_err($('simu_kaisu'),'回数を入力して下さい');

	//Flush unnecessary fields
	$('simu_hensai').value = '';

	var monthly =  Math.ceil((loaned * rate * Math.pow((1+rate),times)) / (Math.pow((1+rate),times) - 1));
	$('simu_res_mai').value = Conversions.commas(Math.ceil(monthly));
	$('simu_res_risoku').value = Conversions.commas(Math.ceil(monthly * times - loaned));
	$('simu_res_kaisu').value=times;
	$('simu_res_shiharai').value= Conversions.commas(Math.ceil(monthly * times - loaned) + loaned);
	$('result').style.display= "block";
}

function simu_gaku(){

	//Flush unnecessary fields
	$('simu_kaisu').value = '';

	var risoku = loaned * rate;
	var risoku_total = risoku;
	
	var remains = loaned - payments + risoku;
	
	var n = 1;
	
	// free(n,remains,risoku);
	
	while(remains>0){
		risoku = remains * rate;
		risoku_total = risoku_total +  risoku;
		remains = remains + risoku - payments;
		n++;
		
		if(n > limit_gaku_loop) simu_err($('simu_hensai'),'金額が少なすぎます');
		
		// free(n,remains,risoku);
	}
	
	$('simu_res_mai').value = Conversions.commas(payments);
	$('simu_res_kaisu').value = n;
	$('simu_res_risoku').value = Conversions.commas(Math.ceil(risoku_total));
	$('simu_res_shiharai').value= Conversions.commas(Math.ceil(risoku_total) + loaned);
	$('result').style.display= "block";
}

function simu_init(){
	$('simu_res_kaisu').value = '';
	$('simu_res_risoku').value = '';
	$('simu_res_mai').value = '';
	$('simu_res_shiharai').value='';
	$('result').style.display= "none";
}



function simu_err(obj,txt){
	//Temporary, should use a modal script to hover
	obj.value = txt;
	throw '';
}



//デバッグ用
function free(a,b,c){
	//var t = '回数 ' + a + ' 残高 ' + Math.round(b) + ' 利息 ' + Math.round(c) + '<br>';
	//$('free').innerHTML = $('free').innerHTML + t;
}

function simu_toggle(){
	var mode = $('simu_mode').value * 1; //Cast to num
		
	//flush
	simu_init();

	switch(mode){
		case 1: 
				$('simu_kaisu_full').show();
				$('simu_hensai_full').hide();
			break;
		case 2: ;
				$('simu_kaisu_full').hide();
				$('simu_hensai_full').show();
			break;
		default:;
	}	

}


//Place startup processing from in HTML DOMs in here
function startup(){
	simu_toggle();
	Event.observe($('submit'), "click", simu_proc, false);
	Event.observe($('simu_mode'),"change",simu_toggle,false);

}

//ブートプロセスの設定
Event.observe(window, "load", startup, false);

