/**************************************************************
* 返済シュミレーション Copyright System Inc. All Rights Reserved
***************************************************************/
//定数域 開始
var debugMode = false;	//デバッグモード
//var debugMode = true;	//デバッグモード
var minLoan  =1;		//お申込金額の最小値 * 10000
var maxLoan  =5000;		//お申込金額の最大値 * 10000
var minHenCnt =1;		//ご返済回数の最小値
var maxHenCnt =900;		//ご返済回数の最大値
var maxCnt   = 300		//ループ最大回数（返済回数のリミット値）
var minKinri = 0;		//金利の最小値
var maxKinri = 29.3;	//金利の最大値
//定数域 終了 
function kariireChk(fm){

	var mess="";
	//半角数値チェックを行います

	if(chkNum(document.fm1.karikin.value)){
		document.fm1.karikin.value = document.fm1.karikin.value == "" ? "" : document.fm1.karikin.value - 0;
		if((document.fm1.karikin.value=="0") || (document.fm1.karikin.value=="" )){
			//半角数値なら必須入力チェックを行います
			mess ="お申込金額は必須入力です。";
		}else if(!((parseInt(document.fm1.karikin.value,10) >= minLoan) && (parseInt(document.fm1.karikin.value,10) <= maxLoan))){
			//半角数値なら範囲設定を行います。
			mess ="お申込金額は"+minLoan+"～"+maxLoan+"万円の間までです。";
		}
	}else{
		mess ="お申込金額は半角数値を入力して下さい。";
	}
	return mess;
}
function hensaiGakuChk(fm){

	var mess="";
	//半角数値チェックを行います
	if(chkNum(fm1.tuki.value)){
		fm1.tuki.value = fm1.tuki.value == "" ? "" : fm1.tuki.value - 0;
		if((fm1.tuki.value=="0") || ((fm1.tuki.value==""))){
			//半角数値なら必須入力チェックを行います
			mess ="毎月のご返済金額は必須入力です。";
		}else{
		}
	}else{
		mess ="ご返済金額は半角数値を入力して下さい。";
	}
	return mess;
}
function calculation(fm){

	var fsum = 0;					//回数を求める返済シミュレーション実行完了フラグ 0=未 1=完了 2=ループエラー
	var loopmax;					//計算MAX数
	var tmpMess = "";				//デバッグメッセージ
	
//--------------------------------------------------------------------

	var sLoan   = 0;				//貸付金額
	var sReturn = 0;				//月毎の返済金額
	var nenri   = 0;				//年利率
	
	var sNumber = 0;				//返済回数
	var sLast   = 0 ;				//最終回支払金額
	var getsuri;					//月利率
	
	var zandaka = 0 ;				//残高
	
	var risoku  = 0 ;				//利息
	var sumRisoku = 0;				//利息合計
	var gankin  = 0;				//元金支払額
	var days    = 0;				//使用日数
	
	var calSReturn = 0;				//計算用月毎の返済金額
//--------------------------------------------------------------------
	//入力ﾁｪｯｸ  お借入額(karikin)/ご返済回数(karinen)
	if(!calculation2Chk(fm)){
		//入力値にエラーがあるので処理を中断します。
		return false;
	}else{
//--------------------------------------------------------------------
		
		loopmax = maxCnt									//ループ最大回数
		sLoan   = parseInt(fm1.karikin.value,10) * 10000;	//最低単位が10000円
		sReturn = parseInt(fm1.tuki.value,10);				//月毎の返済額
		nenri 	= document.fm1.riritsu.value;
		getsuri = parseFloat(nenri * 0.01) / 365 * 30;		//月利率 !カスタマイズ! 060824 Msd

		zandaka = sLoan;

		while(zandaka > 0){
		
			calSReturn = sReturn;
			risoku = Math.floor(zandaka * getsuri);			//「残高 * 月利息」 で利息算出(小数点以下切捨て)
			
			sumRisoku = sumRisoku + risoku;							//利息の合計算出
			
			if((risoku + zandaka) < calSReturn){
				sLast = risoku + zandaka;							//最終回支払金額
			}
			
			gankin = calSReturn - risoku;
			
			if(debugMode){
				debugData1[sNumber+1] = risoku + "\n";
				debugData2[sNumber+1] = gankin + "\n";
				debugData3[sNumber+1] = zandaka + "\n";
			}
			
			//返済金額が初回の利息を満たしていない場合
			if(sNumber==0 && gankin<0){
				fsum = 3;
				
				break;
			}
			zandaka = zandaka - gankin;
			sNumber++;
			
			if(sNumber > loopmax){			//返済回数の制限ｵｰﾊﾞｰ?
				fsum = 2;
				sNumber = "";
				break;
			}
		}
//--------------------------------------------------------------------
		
		if(fsum==0){			
			allDataClear(fm,3);	//現在表示されているデータの初期化

			fm1.karinen.value=editCamma(sNumber);			//回数
			fm1.sougaku.value=editCamma(sLoan + sumRisoku);	//返済総額(ご利用金額+利息合計)
			fm1.risokugoukei.value=editCamma(sumRisoku);		//利息合計
			fm1.kintougaku.value=editCamma(sReturn);			//均等額
			fm1.saigaku.value=editCamma(sLast);				//最終回返済額
			
		}else if(fsum == 2){
			alert("ご返済回数が"+ loopmax +"回を超えています。\nもう一度値を変更してお試し下さい。");
			document.fm1.karikin.focus();
		}else if(fsum == 3){
			alert("ご返済金額が初回利息を満たしていません。\nもう一度値を変更してお試し下さい。");
			document.fm1.tuki.focus();
		}
	}
}

function calculation2Chk(fm){
	var mess="";
	var chkMess1="";
	var chkMess2="";
	var chkMess3="";
	var chkMess4="";
	//お借入金額
	mess+=kariireChk(fm);
	//messが空でなければフォーカスを当てる
	if(mess!=""){
		document.fm1.karikin.focus();
	}

	//ご返済額
	chkMess1 = hensaiGakuChk(fm);
	if((mess=="") && (chkMess1 != "")){
		mess += chkMess1;
		//フォーカスを当てる
		fm1.tuki.focus();
	}else if((mess!="") && (chkMess1 != "")){
		mess +="\n"+ chkMess1;
	}
	//お借入れ金額 < ご返済額 エラー
	// 最低単位が1円
	if( (parseInt(document.fm1.karikin.value,10)*10000) < (parseInt(fm1.tuki.value,10)) ){
		chkMess3 = "ご返済金額がご利用金額を超えております。";
		if((mess=="") && (chkMess3 != "")){
			mess += chkMess3;
			//フォーカスを当てる
			fm1.tuki.focus();
		}else if((mess!="") && (chkMess3 != "")){
			mess +="\n"+ chkMess3;
		}
	}
	if(mess!=""){
		alert(mess);
		return false;
	}
	return true;
}
function allDataClear(fm,index){

	fm1.karinen.value="";		//回数
	fm1.sougaku.value="";		//返済総額(ご利用金額+利息合計)
	fm1.risokugoukei.value="";	//利息合計
	fm1.kintougaku.value="";		//均等額
	fm1.saigaku.value="";		//最終回返済額
}
function chkNum(str){
	if (str == ""){
		return true;
	}

	for ( vCnt = 0; vCnt < str.length; vCnt++ ){
		vCode = str.charCodeAt(vCnt);
		if(!((vCode >= 0x30) && (vCode <= 0x39))){
			return false;
		}
	}
	return true;
}
function editCamma(val){

	var strTemp = "";
	var sTemp = "" + val;
	var sCount = 0;

	for ( var sInc = sTemp.length - 1; 0 <= sInc; sInc-- ){
		if ( sCount % 3 == 0 && sCount != 0 ){
			strTemp= "," + strTemp;
		}
		strTemp = sTemp.charAt(sInc) + strTemp;
		sCount ++;
	}
	return strTemp;
}
