//=======================================================
// 東北銀行　ローンシミュレーション
// 2004.11.10  TSS.Y.T
// JUN.15,2005 フラット35の上限額（5,000万円→8,000万円）
//             最短期間（20年→15年）変更 by Tatsuya@TBK 
// JUN.16,2005 印紙税額テーブルに5,000万円超を追加 by TBK
//=======================================================

//=======================================================
// 定数
//=======================================================

// 住宅ローン種類
var aLoan = new Array();
aLoan[1] = "住宅ローン";
aLoan[2] = "マイカーローン";	
aLoan[3] = "教育ローン「夢キャンパス」";
aLoan[4] = "とうぎんローン";

// 住宅ローン商品
var aLoanH = new Array();
aLoanH[11] = "ハイパワー住宅ローン";
aLoanH[12] = "オール電化住宅ローン";	
aLoanH[13] = "レディース住宅ローン";
aLoanH[14] = "長期固定金利型住宅ローン フラット35（買取型）";

// マイカーローン商品
var aLoanC = new Array();
aLoanC[21] = "マイカーローンＭＡＸ（交通傷害保険付き）";
aLoanC[22] = "マイカーローン（交通傷害保険付き）";	

// 教育ローン商品（未使用）
var aLoanK = new Array();
aLoanK[31] = "夢キャンパス";

// 商品説明文
var aLoanExp = new Array();
aLoanExp[0] = "";
aLoanExp[11] = "お使いみちは住宅建築・購入資金、お借換え資金の他、住宅取得に伴う家具・家電購入資金（200万円まで）、\n引越費用、中古住宅取得時のリフォーム資金まで、住宅に関わる資金にワイドに対応いたします。";
aLoanExp[12] = "優遇金利適用！\nオール電化住宅を新築・購入の方で下記のすべての機能を備えた住宅が対象になります。\n" + 
			   "☆給湯：電気温水器（エコキュート含む）\n☆調理：クッキングヒーター\n☆暖房：（下記のうちいずれか１つ以上を備えたもの）\n" +
			   "　・蓄熱式電気暖房機\n　・蓄熱式電気床暖房\n　・ヒートポンプ式ルームエアコン\n" +
			   "※金利支払方法は固定金利方式10年とします。ご融資利率は、固定金利方式10年の基準金利から年0.3%金利を優遇します。（金利の優遇は当初10年間のみ適用）";
aLoanExp[13] = "優遇金利適用！\n独身女性専用の住宅ローン\n※金利支払方式は固定金利方式10年とします。ご融資利率は、" + 
			   "固定金利方式10年の基準金利から年0.3%金利を優遇します。（金利の優遇は当初10年間のみ適用）";
aLoanExp[14] = "全期間固定金利\n住宅金融支援機構の証券化支援事業を活用した住宅ローン\n全期間固定金利となりますので、金利リスクが軽減されます。";
aLoanExp[21] = "自動車・自動二輪車の購入、車検、修理、オプション購入など車に関する資金";
aLoanExp[22] = "自動車、自動二輪車購入資金（諸費用を含みます）、運転免許の取得資金、車検、修理、オプション購入等、車に関する様々な資金";
aLoanExp[31] = "教育資金を一括サポート\n・中学・高校・大学または各種学校への入学金・授業料等\n・お子様の在学中のアパート・下宿等の家賃\n・お子様への仕送り費用等";

//借入金額説明文
var aKariireKinExp = new Array();
aKariireKinExp[0] = "";
aKariireKinExp[11] = "50万円以上5,000万円以内(10万円単位)";
aKariireKinExp[12] = "50万円以上5,000万円以内(10万円単位)";
aKariireKinExp[13] = "50万円以上5,000万円以内(10万円単位)";
//JUN.15,2005 上限変更
aKariireKinExp[14] = "100万円以上8,000万円以下で、建設費または購入価額の8割以内(1万円単位)";
aKariireKinExp[15] = "50万円以上5,000万円以内(10万円単位)";
aKariireKinExp[16] = "50万円以上5,000万円以内(10万円単位)";
aKariireKinExp[17] = "50万円以上5,000万円以内(10万円単位)";
aKariireKinExp[21] = "10万円以上500万円以内(1万円単位)";
aKariireKinExp[22] = "500万円以内(1万円単位)";
aKariireKinExp[31] = "500万円以内";

//借入金額チェック用範囲
var aKariireKinRange = new Array();
aKariireKinRange[0] = "";
aKariireKinRange[11] = new Array(50,5000);
aKariireKinRange[12] = new Array(50,5000);
aKariireKinRange[13] = new Array(50,5000);
//JUN.15,2005 上限変更
aKariireKinRange[14] = new Array(100,8000);
aKariireKinRange[15] = new Array(50,5000);
aKariireKinRange[16] = new Array(50,5000);
aKariireKinRange[17] = new Array(50,5000);
aKariireKinRange[21] = new Array(10,500);
aKariireKinRange[22] = new Array(1,500);
aKariireKinRange[31] = new Array(1,500);
aKariireKinRange[99] = new Array(1,9999);//画面上4桁まで

//借入金額チェックエラーメッセージ
var aKariireKinErr = new Array();
aKariireKinErr[0] = "";
aKariireKinErr[11] = "お借入ご希望金額は50万円以上5,000万円以内で入力してください。";
aKariireKinErr[12] = "お借入ご希望金額は50万円以上5,000万円以内で入力してください。";
aKariireKinErr[13] = "お借入ご希望金額は50万円以上5,000万円以内で入力してください。";
//JUN.15,2005 上限変更
aKariireKinErr[14] = "お借入ご希望金額は100万円以上8,000万円以内で入力してください。";
aKariireKinErr[15] = "お借入ご希望金額は50万円以上5,000万円以内で入力してください。";
aKariireKinErr[16] = "お借入ご希望金額は50万円以上5,000万円以内で入力してください。";
aKariireKinErr[17] = "お借入ご希望金額は50万円以上5,000万円以内で入力してください。";
aKariireKinErr[21] = "お借入ご希望金額は10万円以上500万円以内で入力してください。";
aKariireKinErr[22] = "お借入ご希望金額は500万円以内で入力してください。";
aKariireKinErr[31] ="お借入ご希望金額は500万円以内で入力してください。"
aKariireKinErr[99] ="お借入ご希望金額を入力してください。";

//ボーナス払い割合チェック用範囲
var aKariBMax = new Array();
aKariBMax[0] = "";
aKariBMax[11] = 0.5;
aKariBMax[12] = 0.5;
aKariBMax[13] = 0.5;
aKariBMax[14] = 0.4;
aKariBMax[15] = 0.5;
aKariBMax[16] = 0.5;
aKariBMax[17] = 0.5;
aKariBMax[21] = 0.5;
aKariBMax[22] = 0.5;
aKariBMax[31] = 0.5;
aKariBMax[99] = 1;

//借入期間説明文
var aKariireKikanExp = new Array();
aKariireKikanExp[0] = "";
aKariireKikanExp[11] = "1年以上35年以内(1年単位)";
aKariireKikanExp[12] = "1年以上35年以内(1年単位)";
aKariireKikanExp[13] = "1年以上35年以内(1年単位)";
//JUN.15,2005 最短期間変更
aKariireKikanExp[14] = "つぎのいずれか短い期間となります。(1)15年以上35年以内(1年単位)(2)完済時年齢が80歳となるまでの年数";
aKariireKikanExp[15] = "1年以上35年以内(1年単位)";
aKariireKikanExp[16] = "1年以上35年以内(1年単位)";
aKariireKikanExp[17] = "1年以上35年以内(1年単位)";
aKariireKikanExp[21] = "6ヵ月以上7年以内(6ヵ月単位)";
aKariireKikanExp[22] = "6ヵ月以上7年以内";
aKariireKikanExp[31] = "最長10年";

//借入期間チェック用範囲
var aKariireKikanRange = new Array();
aKariireKikanRange[0] = "";
aKariireKikanRange[11] = new Array(12,420);
aKariireKikanRange[12] = new Array(12,420);
aKariireKikanRange[13] = new Array(12,420);
aKariireKikanRange[14] = new Array(1,420);
aKariireKikanRange[15] = new Array(12,420);
aKariireKikanRange[16] = new Array(12,420);
aKariireKikanRange[17] = new Array(12,420);
aKariireKikanRange[21] = new Array(6,84);
aKariireKikanRange[22] = new Array(6,84);
aKariireKikanRange[31] = new Array(1,120);
aKariireKikanRange[99] = new Array(1,1199);

//借入期間チェック用エラーメッセージ
var aKariireKikanErr = new Array();
aKariireKikanErr[0] = "";
aKariireKikanErr[11] = "お借入期間は1年以上35年以内で入力してください。";
aKariireKikanErr[12] = "お借入期間は1年以上35年以内で入力してください。";
aKariireKikanErr[13] = "お借入期間は1年以上35年以内で入力してください。";
aKariireKikanErr[14] = "お借入期間は35年以内で入力してください。";
aKariireKikanErr[15] = "お借入期間は1年以上35年以内で入力してください。";
aKariireKikanErr[16] = "お借入期間は1年以上35年以内で入力してください。";
aKariireKikanErr[17] = "お借入期間は1年以上35年以内で入力してください。";
aKariireKikanErr[21] = "お借入期間は6ヶ月以上7年以内で入力してください。";
aKariireKikanErr[22] = "お借入期間は6ヶ月以上7年以内で入力してください。";
aKariireKikanErr[31] = "お借入期間は10年以内で入力してください。";
aKariireKikanErr[99] = "お借入期間を入力してください。";

//ローン別借入金額の単位（万円）
var aKariireKinTani = new Array();
aKariireKinTani[0] = "";
aKariireKinTani[11] = 10;
aKariireKinTani[12] = 10;
aKariireKinTani[13] = 10;
aKariireKinTani[14] = 1;
aKariireKinTani[15] = 10;
aKariireKinTani[16] = 10;
aKariireKinTani[17] = 10;
aKariireKinTani[21] = 1;
aKariireKinTani[22] = 1;
aKariireKinTani[31] = 1;
aKariireKinTani[99] = 1;

//ローン別借入期間の単位（月）
var aKariireKikanTani = new Array();
aKariireKikanTani[0] = "";
aKariireKikanTani[11] = 12;
aKariireKikanTani[12] = 12;
aKariireKikanTani[13] = 12;
aKariireKikanTani[14] = 12;
aKariireKikanTani[15] = 12;
aKariireKikanTani[16] = 12;
aKariireKikanTani[17] = 12;
aKariireKikanTani[21] = 6;
aKariireKikanTani[22] = 1;
aKariireKikanTani[31] = 1;
aKariireKikanTani[99] = 1;

// 諸費用/取扱手数料
var aTesuryo = new Array();
aTesuryo[11] = "31500";
aTesuryo[12] = "31500";	
aTesuryo[13] = "31500";
aTesuryo[14] = "52500";
aTesuryo[15] = "31500";
aTesuryo[16] = "31500";	
aTesuryo[17] = "31500";

// 諸費用/保証料　東北保証サービス0.2％
var aHosyo1 = new Array();
aHosyo1[0] = 0;
aHosyo1[1] = 1016;
aHosyo1[2] = 1942;
aHosyo1[3] = 2844;
aHosyo1[4] = 3724;
aHosyo1[5] = 4580;
aHosyo1[6] = 5426;
aHosyo1[7] = 6240;
aHosyo1[8] = 7031;
aHosyo1[9] = 7799;
aHosyo1[10] = 8544;
aHosyo1[11] = 9302;
aHosyo1[12] = 10006;
aHosyo1[13] = 10688;
aHosyo1[14] = 11345;
aHosyo1[15] = 11982;
aHosyo1[16] = 12595;
aHosyo1[17] = 13187;
aHosyo1[18] = 13758;
aHosyo1[19] = 14308;
aHosyo1[20] = 14834;
aHosyo1[21] = 15416;
aHosyo1[22] = 15907;
aHosyo1[23] = 16374;
aHosyo1[24] = 16826;
aHosyo1[25] = 17254;
aHosyo1[26] = 17669;
aHosyo1[27] = 18063;
aHosyo1[28] = 18440;
aHosyo1[29] = 18880;
aHosyo1[30] = 19137;
aHosyo1[31] = 19470;
aHosyo1[32] = 19778;
aHosyo1[33] = 20070;
aHosyo1[34] = 20347;
aHosyo1[35] = 20614;

// 諸費用/保証料　東北保証サービス0.3％
var aHosyo2 = new Array();
aHosyo2[0] = 0;
aHosyo2[1] = 1524;
aHosyo2[2] = 2913;
aHosyo2[3] = 4266;
aHosyo2[4] = 5586;
aHosyo2[5] = 6870;
aHosyo2[6] = 8139;
aHosyo2[7] = 9360;
aHosyo2[8] = 10547;
aHosyo2[9] = 11699;
aHosyo2[10] = 12816;
aHosyo2[11] = 13953;
aHosyo2[12] = 15009;
aHosyo2[13] = 16032;
aHosyo2[14] = 17018;
aHosyo2[15] = 17973;
aHosyo2[16] = 18893;
aHosyo2[17] = 19781;
aHosyo2[18] = 20637;
aHosyo2[19] = 21462;
aHosyo2[20] = 22251;
aHosyo2[21] = 23124;
aHosyo2[22] = 23861;
aHosyo2[23] = 24561;
aHosyo2[24] = 25239;
aHosyo2[25] = 25881;
aHosyo2[26] = 26504;
aHosyo2[27] = 27095;
aHosyo2[28] = 27660;
aHosyo2[29] = 28200;
aHosyo2[30] = 28706;
aHosyo2[31] = 29205;
aHosyo2[32] = 29667;
aHosyo2[33] = 30105;
aHosyo2[34] = 30521;
aHosyo2[35] = 30921;

// エラーメッセージ
var aMsg = new Array();
aMsg[0] = "お使いみちを、[住宅資金/マイカー購入/教育資金] の中からお選びください。";
aMsg[1] = "ローンの商品名を選択してください。";
aMsg[2] = "借入期間の月数を0〜11の範囲で入力してください。";
aMsg[3] = "他借入金の返済額は税込み年収以内で入力してください。";
aMsg[4] = "を入力してください。";

//=======================================================
// 処理（イベント）
//=======================================================

//-------------------------------------------------------
// 返済額シミュレーション・試算ボタンクリック
//-------------------------------------------------------
function c11(f){
	var loan = isLoanType(f);						//ローンの種類
	var loanH = eval(f.sLoanHausing.value);
	var loanC = eval(f.sLoanCar.value);
	var loanNo = isLoanNo(loan, loanH, loanC);		//ローン商品　未選択はエラー

	if(loanNo!=0){
		//入力補完
		modInput1(f, loanNo);

		var kari  = eval(f.tKariirekin.value) * 10000;
		var kariB = eval(f.tKariirekinB.value) * 10000;
		var kariM = kari - kariB;
		var nen   = eval(f.tKariireNen.value);
		var tuki  = eval(f.tKariireTuki.value);
		var nenri = eval(f.tNenri.value);

		//入力チェック
		var chk = chkInput1(kari, kariB, nen, tuki, nenri, loanNo);
		if (chk==0){
			//返済額計算
			var kai = nen * 12 + tuki;
			var hensaiM = CalcHensaiM(nenri, kai, kariM);
			var hensaiB = CalcHensaiB(nenri, kai, kariB);

			f.tHensaiM.value = Comma(hensaiM);
			f.tHensaiMB.value = Comma(hensaiM + hensaiB);
			f.tHensaiB.value = Comma(hensaiB);
			f.tHensaiNen.value = Comma(CalcHensaiNen(hensaiM, hensaiB));
			f.tNenri2.value = nenri;
			
			//費用計算　住宅ローンのみ
			if(loan=="1"){
				f.tInshi.value = Comma(HiyoInsi(kari));
				f.tTesuryo.value = Comma(HiyoTesuryo(loanH));
				f.tHosyoryo.value = Comma(HiyoHosyoryo(kai, loanH, kari));
				f.tMenkyo.value = Comma(HiyoMenkyo(kari, loanH));
			} else {
				f.tInshi.value = "";
				f.tTesuryo.value = "";
				f.tHosyoryo.value = "";
				f.tMenkyo.value = "";
			}
			
			//ローン商品名表示
			//var tmpS = strInfo(loan,loanH,loanC);
			//f.tInfo.value = tmpS;
		}
	}
}

//-------------------------------------------------------
// 返済額シミュレーション・クリアボタンクリック
//-------------------------------------------------------
function c12(f){
	clrInput1(f);
	clrOutput1(f);
}

//-------------------------------------------------------
// 返済額シミュレーション・住宅ローン自己資金選択変更
//-------------------------------------------------------
function c13(f){
	var s = f.sJiko20.options[f.sJiko20.selectedIndex].value;

	//種類を住宅ローンに変更
	if(f.cLoanType[0].checked==false){
		f.cLoanType[0].click();
	}

	//商品の選択枝変更
	f.sLoanHausing.options.length = 0;
	if (s=="1"){
		f.sLoanHausing.options[0] = new Option("〜ご希望の商品を選択して下さい〜",0);
		f.sLoanHausing.options[1] = new Option(aLoanH[11],11);
		f.sLoanHausing.options[2] = new Option(aLoanH[12],12);
		f.sLoanHausing.options[3] = new Option(aLoanH[13],13);
		f.sLoanHausing.options[4] = new Option(aLoanH[14],14);
	} else if (s=="2"){
		f.sLoanHausing.options[0] = new Option("〜ご希望の商品を選択して下さい〜",0);
		f.sLoanHausing.options[1] = new Option(aLoanH[15],15);
		f.sLoanHausing.options[2] = new Option(aLoanH[16],16);
		f.sLoanHausing.options[3] = new Option(aLoanH[17],17);
	} else {
		f.sLoanHausing.options[0] = new Option("〜ご希望の商品を選択して下さい〜",0);
	}
}

//-------------------------------------------------------
// 返済額シミュレーション・ローン種類変更
//-------------------------------------------------------
function c14(f,loanType){
	var loan = loanType;
	if(loan==1){
		//住宅ローン

		//種類を住宅ローンに変更
		f.cLoanType[0].click();

		var loanH = eval(f.sLoanHausing.value);
		if(!(aLoanH[loanH])){	//住宅ローン種類の範囲外のとき
			loanH = 0;
		}
		f.tLoanExp.value = aLoanExp[loanH];
		f.tKariireKinExp.value = aKariireKinExp[loanH];
		f.tKariireKikanExp.value = aKariireKikanExp[loanH];
		
		//他のローンの選択肢をデフォルトに戻す
		f.sLoanCar.value = 0;

	} else if(loan==2){
		//マイカーローン

		//種類をマイカーローンに変更
		f.cLoanType[1].click();

		var loanC = eval(f.sLoanCar.value);
		if(!(aLoanC[loanC])){	//マイカーローンの範囲外のとき
			loanC =0;
		}
		f.tLoanExp.value = aLoanExp[loanC];
		f.tKariireKinExp.value = aKariireKinExp[loanC];
		f.tKariireKikanExp.value = aKariireKikanExp[loanC];

		//他のローンの選択肢をデフォルトに戻す
//		f.sJiko20.value = 0;
		f.sLoanHausing.value = 0;
//		f.sLoanHausing.options.length = 0;
//		f.sLoanHausing.options[0] = new Option("〜ご希望の商品を選択して下さい〜",0);

	} else if(loan==3){
		//教育ローン　夢キャンパス固定
		f.tLoanExp.value = aLoanExp[31];
		f.tKariireKinExp.value = aKariireKinExp[31];
		f.tKariireKikanExp.value = aKariireKikanExp[31];

		//他のローンの選択肢をデフォルトに戻す
		f.sLoanCar.value = 0;
//		f.sJiko20.value = 0;
//		f.sLoanHausing.options.length = 0;
//		f.sLoanHausing.options[0] = new Option("〜ご希望の商品を選択して下さい〜",0);
		f.sLoanHausing.value = 0;
	} else {
		//その他
		f.tLoanExp.value = aLoanExp[0];
		f.tKariireKinExp.value = "";
		f.tKariireKikanExp.value = "";

		//他のローンの選択肢をデフォルトに戻す
		f.sLoanCar.value = 0;
//		f.sJiko20.value = 0;
//		f.sLoanHausing.options.length = 0;
//		f.sLoanHausing.options[0] = new Option("〜ご希望の商品を選択して下さい〜",0);
		f.sLoanHausing.value = 0;
	}
}

//-------------------------------------------------------
// 借入可能額シミュレーション・試算ボタンクリック
//-------------------------------------------------------
function c21(f){

	//入力補完
	modInput2(f);

	var hensaiM  = eval(f.tKibouHensaiM.value);
	var hensaiB = eval(f.tKibouHensaiB.value);
	var nenri = eval(f.tNenri.value);
	var nen   = eval(f.tKariireNen.value);
	var tuki  = eval(f.tKariireTuki.value);
//	var nensyu = eval(f.tNensyu.value);
//	var hensaiO = eval(f.tHensaiOther.value);
	var loan = isLoanType(f);

	//入力チェック
//	var chk = chkInput2(hensaiM, hensaiB, nenri, nen, tuki, hensaiO, nensyu);
	var chk = chkInput2(hensaiM, hensaiB, nenri, nen, tuki);
	if (chk==0){

		//試算
		var kai = nen * 12 + tuki;
		var kaib = Math.floor(kai / 6);
		var kanouM = CalcKanouM(nenri, kai, hensaiM);
		var kanouB = CalcKanouB(nenri, kai, hensaiB);

		//借入可能額
		f.tKanou.value = Comma(kanouM + kanouB);

		var hensaiM = CalcHensaiM(nenri, kai, kanouM);
		var hensaiB = CalcHensaiB(nenri, kai, kanouB);

		//毎月返済額
//		f.tHensaiM.value = Comma(hensaiM);
		//ボーナス返済額
//		f.tHensaiB.value = Comma(hensaiB);
		//年間返済額
//		var hensaiNenAll = CalcHensaiNen(hensaiM, hensaiB);
//		f.tHensaiNenAll.value = Comma(hensaiNenAll);
		//総返済額
//		var hensaiAll = CalcHensaiAll(hensaiM, hensaiB, kai, kaib);
//		f.tHensaiAll.value = Comma(hensaiAll);
		//借入金割合
//		f.tWariai.value = CalcWariai(hensaiNenAll, hensaiO, nensyu);
	}
}

//-------------------------------------------------------
// 借入可能額シミュレーション・クリアボタンクリック
//-------------------------------------------------------
function c22(f){
	clrInput2(f);
	clrOutput2(f);
}

//-------------------------------------------------------
// 優遇条件チェックボックスクリック
//-------------------------------------------------------
function c31(f){
    f.tYuguKinri.value = CalcYuguKinri(f.cYuguJoken);
}
//-------------------------------------------------------
// ハイパワー住宅ローン優遇条件チェックボックスクリック
//-------------------------------------------------------
function c32(f){
	var nen  = "年 ";
	var Riritu;
	var DefKinri;
        var per = "%";
	Riritu = CalcHighPowerKinri(f.cYuguJoken);
    if (Riritu > 0) {
    	DefKinri = f.tDefKinri1.value;
	    f.tYuguKinri1.value = nen.concat(sprintf("%.3f", DefKinri.substring(2,7) - Riritu), per);
    	DefKinri = f.tDefKinri2.value;
	    f.tYuguKinri2.value = nen.concat(sprintf("%.3f", DefKinri.substring(2,7) - Riritu), per);
    	DefKinri = f.tDefKinri3.value;
	    f.tYuguKinri3.value = nen.concat(sprintf("%.3f", DefKinri.substring(2,7) - Riritu), per);
    	DefKinri = f.tDefKinri4.value;
	    f.tYuguKinri4.value = nen.concat(sprintf("%.3f", DefKinri.substring(2,7) - Riritu), per);
    	DefKinri = f.tDefKinri5.value;
	    f.tYuguKinri5.value = nen.concat(sprintf("%.3f", DefKinri.substring(2,7) - Riritu), per);
	}else {
	    f.tYuguKinri1.value = "";
	    f.tYuguKinri2.value = "";
	    f.tYuguKinri3.value = "";
	    f.tYuguKinri4.value = "";
	    f.tYuguKinri5.value = "";
	}
}

//=======================================================
// 汎用（関数）
//=======================================================

//-------------------------------------------------------
// 返済額シミュレーション・選択されたローン種別
//-------------------------------------------------------
function isLoanType(f){
	var ret = 4;		//デフォルトを「その他」にする

	for (i=0; i<f.cLoanType.length;i++){
		if (f.cLoanType[i].checked){
			ret = f.cLoanType[i].value;
		}
	}
	return (ret);
}

//-------------------------------------------------------
// 返済額シミュレーション・選択されたローン商品
// 未選択はエラー(99)を返す
//-------------------------------------------------------
function isLoanNo(loan, loanH, loanC){
	var loanNo = 0;	
	switch(loan){
		case "1":		//住宅
			if(!loanH){
				alert(aMsg[1]);
				return (99);
			}
			loanNo=loanH;
			break;
		case "2":		//マイカー
			if(!loanC){
				alert(aMsg[1]);
				return (99);
			}
			loanNo=loanC;
			break;
		case "3":		//教育
			loanNo=31;	//夢キャンパス固定
			break;
		case "4":		//その他
			loanNo=99;
			break;
		default:
			loanNo=99;	//デフォルトを「その他」にする
			break;
	}
	return loanNo;
}

//-------------------------------------------------------
// 共通・金利表を別ウィンドウで開く
//-------------------------------------------------------
function openWin(f){
	var n = isLoanType(f);
	switch(n){
		case "1":		//住宅
			w = window.open("./Rate_House.htm","popup","width=650,height=400,scrollbars=yes,resizable=yes,left=10,top=10");
			w.focus();
			break;
		case "2":		//マイカー
			w = window.open("./Rate_MyCar.htm","popup","width=450,height=350,scrollbars=yes,resizable=yes,left=10,top=10");
			w.focus();
			break;
		case "3":		//教育
			w = window.open("./Rate_Education.htm","popup","width=450,height=350,scrollbars=yes,resizable=yes,left=10,top=10");
			w.focus();
			break;
		default:
			alert(aMsg[1]);
			break;
	}

}


//-------------------------------------------------------
// 借入可能額算出（毎月払）　10000円未満切捨て
// nenri		年利（％）
// kai			回数（月数）
// hensai		希望毎月返済額
//-------------------------------------------------------
function CalcKanouM(nenri, kai, hensai){
	var geturi = eval(nenri) / 12 / 100;		//月利

	var bunsi = hensai * (Math.pow(1 + geturi, kai)-1);
	var bunbo = Math.pow(1 + geturi, kai) * geturi;
	var ret = Math.floor(bunsi / bunbo);
	ret = Math.floor(ret / 10000) * 10000;
	return (ret);
}

//-------------------------------------------------------
// 借入可能額算出（ボーナス払）　10000円未満切捨て
// nenri		年利（％）
// kai			回数（月数）
// hensai		希望ボーナス加算額
//-------------------------------------------------------
function CalcKanouB(nenri, kai, hensai){
	var hanri = eval(nenri) / 2 / 100;		//半年利
	var kaib = Math.floor(kai / 6);			//ボーナス回数

	if(kaib==0){
		//6回以下はボーナス一括全額返済
		ret = hensai;
	} else {
		var bunsi = hensai*(6*(Math.pow(1+hanri, kaib)-1));
		var bunbo = hanri*(6+(6*hanri))*Math.pow(1+hanri, (kaib-1))
		var ret = Math.floor(bunsi / bunbo);
		ret = Math.floor(ret / 10000) * 10000;
	}
	return (ret);
}

//-------------------------------------------------------
// 返済額算出（毎月払）　1円未満切捨て
// nenri		年利（％）
// kai			回数（月数）
// kari			借入額(毎月分)
//-------------------------------------------------------
function CalcHensaiM(nenri, kai, kari){
	var geturi = eval(nenri) / 12 / 100;		//月利

	var bunsi = kari * Math.pow(1 + geturi, kai) * geturi;
	var bunbo = Math.pow(1 + geturi, kai) - 1;
	var ret = Math.floor(bunsi / bunbo);
	return (ret);
}

//-------------------------------------------------------
// 返済額算出（ボーナス月払）　1円未満切捨て　初回ボーナスは6ヵ月後固定
// nenri		年利（％）
// kai			回数（月数）
// kari			借入額（ボーナス分）
//-------------------------------------------------------
function CalcHensaiB(nenri, kai, kari){
	var hanri = eval(nenri) / 2 / 100;		//半年利
	var kaib = Math.floor(kai / 6);			//ボーナス回数

	if (kaib==0){
		//6回以下はボーナス全額一括返済
		ret = kari;
	} else {
		var bunsi = kari * hanri * Math.pow(1+ hanri, kaib-1) * (1+hanri);
		var bunbo = Math.pow(1+ hanri, kaib) - 1;
		var ret = Math.floor(bunsi / bunbo);
	}
	return (ret);
}

//-------------------------------------------------------
// 年間返済額算出
// hensaiM		毎月分返済額
// hensaiB		ボーナス分返済額
//-------------------------------------------------------
function CalcHensaiNen(hensaiM, hensaiB){
	var ret = hensaiM * 12 + hensaiB * 2;
	return ret;
}

//-------------------------------------------------------
// 総返済額算出
// hensaiM		毎月分返済額
// hensaiB		ボーナス分返済額
// kai			毎月分回数
// kaib			ボーナス分回数
//-------------------------------------------------------
function CalcHensaiAll(hensaiM, hensaiB, kai, kaib){
	var ret = hensaiM * kai + hensaiB * kaib;
	return ret;
}

//-------------------------------------------------------
// 借入金割合算出
// hensaiM		毎月分返済額
// hensaiB		ボーナス分返済額
// kai			毎月分回数
// kaib			ボーナス分回数
//-------------------------------------------------------
//function CalcWariai(hensaiAll, hensaiO, nensyu){
//	var ret = 0;
//	if(nensyu>0){
//		ret = Math.floor((hensaiAll + hensaiO) / nensyu * 100);
//	}
//	return ret;
//}

//-------------------------------------------------------
// 数字をカンマ区切りにする　マイナス記号、小数点は考慮しない
// str		数字
//-------------------------------------------------------
function Comma(str){
	var tmp = str.toString();
	var j = 1;
	var ret = "";

	for( i=tmp.length-1; i>=0; i--){
		ret = tmp.charAt(i) + ret;
		if(j>0 && j%3==0 && i>0){
			ret = "," + ret;
		}
		j++;
	}
	return (ret);
}

//-------------------------------------------------------
// 入力を半角数字（小数点あり）のみにする。空白の場合はデフォルトにする。
// 全角=>半角置換も行う
// str		数字
// def		デフォルト
//-------------------------------------------------------
function Zen2Han(str, def){
	var ret = "";

	for(i=0; i< str.length; i++){
		var c = str.charCodeAt(i);
		if (c >= 65281 && c <= 65374 && c != 65340) {
			//０−９．
			ret += String.fromCharCode(c - 65248);
		} else if( c==46 || (c>=48 && c<=57)){
			//0-9.
			ret += String.fromCharCode(c);
		}
	}
	if(ret==""){
		ret = def;
	}

	ret = Number(ret);
	return (ret);

}

//-------------------------------------------------------
// 諸費用　契約書印紙代
// kari			借入金額
// 
// JUN.16,2005 5,000万円超、1億円超を追加
//-------------------------------------------------------
function HiyoInsi(kari){
	var ret = 0;

	if(kari > 100000 && kari <= 500000){
		ret =   400;
	} else if(kari >   500000  && kari <=  1000000){
		ret =  1000;
	} else if(kari >  1000000  && kari <=  5000000){
		ret =  2000;
	} else if(kari >  5000000  && kari <= 10000000){
		ret = 10000;
	} else if(kari > 10000000 && kari  <= 50000000){
		ret = 20000;
	} else if(kari > 50000000 && kari  <= 100000000){
		ret = 60000;
	} else if(kari > 100000000 && kari  <= 500000000){
		ret = 100000;
	}
	return (ret);
}

//-------------------------------------------------------
// 諸費用　手数料
// loanH			住宅ローン商品（aLoanH）
//-------------------------------------------------------
function HiyoTesuryo(loanH){
	var ret = 0;

	if(aLoanH[loanH]){
		ret = aTesuryo[loanH];
	}
	return (ret);
}

//-------------------------------------------------------
// 諸費用　保証料
// kai				回数
// loanH			住宅ローン商品（aLoanH）
// kari				借入金額
//-------------------------------------------------------
function HiyoHosyoryo(kai, loanH, kari){
	var ret = 0;
	var nen = eval(Math.ceil(kai / 12));
	switch(loanH){
		case 11:
		case 12:
		case 13:
			ret = aHosyo1[nen];
			break;
		case 14:
			//長期固定金利型は保証料なし
			break;
		case 15:
		case 16:
		case 17:
			ret = aHosyo2[nen];
			break;
	}
	if (ret > 0){
		ret = Math.floor(kari / 1000000) * ret;
	}
	return (ret);
}

//-------------------------------------------------------
// 諸費用　登録免許税
// kari			借入金額
// loanH		住宅ローン商品（aLoanH）
//-------------------------------------------------------
function HiyoMenkyo(kari,loanH){
	var ret = 0;

//2007.06.01 計算式を修正
//	if(loanH==14){	//長期固定金利型の場合は0
//		ret = 0;
//	} else {
		ret = Math.floor(kari * 4 / 1000);
//	}
	return (ret);
}

//-------------------------------------------------------
// 金利表		優遇金利計算（優遇条件）
// yuguJoken	優遇条件
//-------------------------------------------------------
function CalcYuguKinri(yuguJoken){
	var ret = 0;
	var max = 1;	//最大1.00%

	for (i=0; i<yuguJoken.length; i++){
		if (yuguJoken[i].checked){
			ret = ret + yuguJoken[i].value * 100;
		}
	}
	ret = ret / 100;
	if (max < ret){
		ret = max;
	}
	return (ret);
}
//-------------------------------------------------------
// 金利表		ハイパワー住宅ローン優遇金利計算
// yuguJoken	優遇条件
//-------------------------------------------------------
function CalcHighPowerKinri(yuguJoken){
	var ret = 0;

	for (i=0; i<yuguJoken.length; i++){
		if (yuguJoken[i].checked){
			ret = ret + yuguJoken[i].value * 100;
		}
	}
	ret = ret / 100;

	return (ret);
}
//-------------------------------------------------------
// ローン商品名表示　返済額シミュレーション
//-------------------------------------------------------
function strInfo(loan,loanH,loanC){
	var tmpS = "";
	switch(loan){
		case "1":
			if(!(aLoanH[loanH])){
				tmpS = aLoan[loan];
			} else {
				tmpS = aLoanH[loanH];
			}
			break;
		case "2":
			if(!(aLoanC[loanC])){
				tmpS = aLoan[loan];
			} else { 
				tmpS = aLoanC[loanC];
			}
			break;
		case "3":
			tmpS = aLoan[loan];
			break;
		default:
			tmpS = "自由入力";
			break;
	}
	return ("　＊＊＊「"+ tmpS + "」 の条件で試算しました。＊＊＊");
}


//-------------------------------------------------------
// 入力補完　返済額シミュレーション
//-------------------------------------------------------
function modInput1(f, loanNo){
	//全角数字は半角数字に
	f.tKariirekin.value = Zen2Han(f.tKariirekin.value, 0);
	f.tKariirekinB.value = Zen2Han(f.tKariirekinB.value, 0);
	f.tKariireNen.value = Zen2Han(f.tKariireNen.value, 0);
	f.tKariireTuki.value = Zen2Han(f.tKariireTuki.value, 0);
	f.tNenri.value = Zen2Han(f.tNenri.value, 0);

	//借入金額単位補正
	tani = eval(aKariireKinTani[loanNo]);
	if(tani>1){
		var tmp1 = eval(f.tKariirekin.value);
		var tmp2 = Math.ceil(tmp1 / tani) * tani;
		if(tmp1 != tmp2){
			f.tKariirekin.value = tmp2;
			alert("お借入ご希望金額は"+tani+"万円単位となりますので、"+tmp2+"万円に修正しました。");
		}
	}

	//借入期間単位補正
	tani = eval(aKariireKikanTani[loanNo]);
	if(tani>1){
		var tmp1 = eval(f.tKariireNen.value) * 12 + eval(f.tKariireTuki.value);
		var tmp2 = Math.ceil(tmp1 / tani) * tani;
		if(tmp1 != tmp2){
			tmp3 = Math.floor(tmp2 / 12);
			tmp4 = tmp2 - (tmp3*12);
			f.tKariireNen.value = tmp3;
			f.tKariireTuki.value = tmp4;
			alert("お借入期間は"+tani+"ヶ月単位となりますので、"+tmp3+"年"+tmp4+"ヶ月に修正しました。");
		}
	}
}

//-------------------------------------------------------
// 入力補完　借入可能額シミュレーション
//-------------------------------------------------------
function modInput2(f){
	//全角数字は半角数字に
	f.tKibouHensaiM.value = Zen2Han(f.tKibouHensaiM.value, 0);
	f.tKibouHensaiB.value = Zen2Han(f.tKibouHensaiB.value, 0);
	f.tNenri.value = Zen2Han(f.tNenri.value, 0);
	f.tKariireNen.value = Zen2Han(f.tKariireNen.value, 0);
	f.tKariireTuki.value = Zen2Han(f.tKariireTuki.value, 0);
//	f.tNensyu.value = Zen2Han(f.tNensyu.value, 0);
//	f.tHensaiOther.value = Zen2Han(f.tHensaiOther.value, 0);
}

//-------------------------------------------------------
// 入力チェック　返済額シミュレーション
//-------------------------------------------------------
function chkInput1(kari, kariB, nen, tuki, nenri, loanNo){
	if(kari==0){
		//借入額必須入力チェック
		alert("お借入ご希望金額" + aMsg[4]);
		return(1);
	} else if ((nen*12+tuki)==0){
		//借入期間入力チェック
		alert("お借入期間" + aMsg[4]);
		return(2);
	} else if (nenri==0){
		//年利入力チェック
		alert("適用金利" + aMsg[4]);
		return(3);
	} else if (((kari / 10000) < aKariireKinRange[loanNo][0]) || ((kari / 10000) > aKariireKinRange[loanNo][1])){
		//借入金額の範囲チェック
		alert(aKariireKinErr[loanNo]);
		return (4);
	} else if (kari * aKariBMax[loanNo] < kariB){
		//ボーナス返済額の割合チェック
		var tmp = aKariBMax[loanNo] * 100;
		alert("ボーナス分返済額はお借り入れご希望金額の" + tmp + "％以内で入力してください。");
		return (5);
	} else if (tuki<0 || tuki>11){
		//期間の「月」の入力は0〜11まで
		alert(aMsg[2]);
		return (6);
	} else if(((nen*12 + tuki)<aKariireKikanRange[loanNo][0]) || ((nen*12 + tuki)>aKariireKikanRange[loanNo][1])){
		//借入期間の範囲チェック
		alert(aKariireKikanErr[loanNo]);
		return (7);
	}

	return (0);
}

//-------------------------------------------------------
// 入力チェック　借入可能額シミュレーション
//-------------------------------------------------------
//function chkInput2(hensaiM, hensaiB, nenri, nen, tuki, hensaiO, nensyu){
function chkInput2(hensaiM, hensaiB, nenri, nen, tuki){
	if(hensaiM==0){
		//返済希望額必須入力チェック
		alert("月々のご返済希望額" + aMsg[4]);
		return(1);
	} else if (nenri==0){
		//年利入力チェック
		alert("お借入利率" + aMsg[4]);
		return(2);
	} else if ((nen*12+tuki)==0){
		//借入期間入力チェック
		alert("お借入期間" + aMsg[4]);
		return(3);
//	} else if (nensyu==0){
//		//年収入力チェック
//		alert("税込年収" + aMsg[4]);
//		return(4);
//	} else if (hensaiO > nensyu){
//		//他の借入金が年収を超えているチェック
//		alert(aMsg[3]);
//		return (5);
	} else if (tuki<0 || tuki>11){
		//期間の「月」の入力は0〜11まで
		alert(aMsg[2]);
		return (6);
	}

	return (0);
}


//-------------------------------------------------------
// 入力項目クリア　返済額シミュレーション
//-------------------------------------------------------
function clrInput1(f){
	f.tKariirekin.value = "";
	f.tKariirekinB.value = "";
	f.tKariireNen.value = "";
	f.tKariireTuki.value = "";
	f.tNenri.value = "";
}
//-------------------------------------------------------
// 出力項目クリア　返済額シミュレーション
//-------------------------------------------------------
function clrOutput1(f){
	f.tInshi.value = "";
	f.tTesuryo.value = "";
	f.tHosyoryo.value = "";
	f.tMenkyo.value = "";
	f.tHensaiM.value = "";
	f.tHensaiMB.value = "";
	f.tHensaiB.value = "";
	f.tHensaiNen.value = "";
	f.tNenri2.value = "";
}

//-------------------------------------------------------
// 入力項目クリア　借入可能額シミュレーション
//-------------------------------------------------------
function clrInput2(f){
	f.tKibouHensaiM.value = "";
	f.tKibouHensaiB.value = "";
	f.tNenri.value = "";
	f.tKariireNen.value = "";
	f.tKariireTuki.value = "";
//	f.tNensyu.value = "";
//	f.tHensaiOther.value = "";
}
//-------------------------------------------------------
// 出力項目クリア　借入可能額シミュレーション
//-------------------------------------------------------
function clrOutput2(f){
	f.tKanou.value = "";
//	f.tHensaiM.value = "";
//	f.tHensaiB.value = "";
//	f.tHensaiNenAll.value = "";
//	f.tHensaiAll.value = "";
//	f.tWariai.value = "";
}

//-------------------------------------------------------
// 閉じるボタン
//-------------------------------------------------------
function CloseWin(){
	self.opener=self; 
	self.close();
}
//-------------------------------------------------------
// 文字列を指定した書式でformat。
//-------------------------------------------------------
// 例
//    sprintf("%d", 12345));        12345           //符号付き10進整数
//    sprintf("%d", 123.6));        123             //四捨五入でなく切り捨て
//    sprintf("%6d", 123));            123          //幅指定
//    sprintf("%06d", 123));        000123          //flag 0
//    sprintf("%06d", -123));       -00123          //先頭は -
//    sprintf("%6.4d", 123));         0123          //整数の精度
//    sprintf("%6.8d", 123));       00000123        //精度優先
//    sprintf("%f", 123.45));       123.450000      //小数 デフォルトの精度は6
//    sprintf("%11f", 123.45));      123.450000     //幅指定
//    sprintf("%.3f", 123.45));     123.450         //精度指定
//    sprintf("%7.1f", 123.25));      123.2         //四捨五入ではない
//    sprintf("%7.1f", 123.251));     123.3         //5より大きければ切り上げ
//    sprintf("%7.0f", 123.45));        123         //精度0なら.無し
//    sprintf("%08.2f", 123.45));   00123.45        //flag 0
//    sprintf("%08.2f", -123.45));  -0123.45        //先頭は -
//    sprintf("%E", 123.45));       1.234500E+02    //指数 デフォルトの精度は6
//    sprintf("%13E", 123.45));      1.234500E+02   //幅指定
//    sprintf("%.4E", 123.45));     1.2345E+02      //精度指定
//    sprintf("%13.5e", 123.45));     1.23450e+02   //指数e
//    sprintf("%s", "abc"));        abc             //文字列
//    sprintf("%4s", "abc"));        abc            //幅指定
//    sprintf("%.2s", "abc"));      ab              //精度指定
//   sprintf("%4.s", "abc"));                      //精度 0
//    sprintf("%d", 123.45));       123             //小数は整数にして表示
//   sprintf("%d", "123"));        123             //文字列も整数にして表示
//   sprintf("%d", "abc"));        0               //数値と解釈できないときは0
//    sprintf("%7s", 123.45));       123.45         //数値を文字列に変換
//   sprintf("%-7d", 123.45));     123             //左詰め
//    sprintf("% f", 123.45));       123.450000     //空白追加
//   sprintf("%+7.3f", 123.45));   +123.450        //+追加
//    sprintf("%+- 9.2fa", 123.45)); +123.45 a      //複数のオプション
//-------------------------------------------------------
function sprintf() {
	var argv = sprintf.arguments;
	var argc = argv.length;
	if(argc == 0)
		return "";
	var result = "";
	var format = argv[0];
	var format_length = format.length;
	
	var flag, width, precision;
	flag = 0;
	
	var index = 1;
	var mode = 0;
	var tmpresult;
	var buff;
	for(var i = 0; i < format_length; i++) {
		var c = format.charAt(i);
		switch(mode) {
		case 0:		//normal
			if(c == '%') {
				tmpresult = c;
				mode = 1;
				buff = "";
			}
			else
				result += c;
			break;
		case 1:		//after '%'
			if(c == '%') {
				result += c;
				mode = 0;
				break;
			}
			if(index >= argc)
				argv[argc++] = "";
			width = 0;
			precision = -1;
			switch(c) {
			case '-':
				flag |= 1;
				mode = 1;
				break;
			case '+':
				flag |= 2;
				mode = 1;
				break;
			case '0':
				flag |= 4;
				mode = 2;
				break;
			case ' ':
				flag |= 8;
				mode = 1;
				break;
			case '#':
				flag |= 16;
				mode = 1;
				break;
			case '1': case '2': case '3': case '4': case '5':
			case '6': case '7': case '8': case '9':
				width = parseInt(c);
				mode = 2;
				break;
			case '-':
				flag = 1;
				mode = 2;
				break;
			case '.':
				width = "";
				precision = 0;
				mode = 3;
				break;
			case 'd':
				result += toInteger(argv[index], flag, width, precision);
				index++;
				mode = 0;
				break;
			case 'f':
				result += toFloatingPoint(argv[index], flag, width, 6);
				index++;
				mode = 0;
				break;
			case 'e':
				result += toExponential(argv[index], flag, width, 6, 'e');
				index++;
				mode = 0;
				break;
			case 'E':
				result += toExponential(argv[index], flag, width, 6, 'E');
				index++;
				mode = 0;
				break;
			case 's':
				result += argv[index];
				index++;
				mode = 0;
				break;
			default:
				result += buff + c;
				mode = 0;
				break;
			}
			break;
		case 2:		//while defining width
			switch(c) {
			case '.':
				precision = 0;
				mode = 3;
				break;
			case '0': case '1': case '2': case '3': case '4':
			case '5': case '6': case '7': case '8': case '9':
				width = width * 10 + parseInt(c);
				mode = 2;
				break;
			case 'd':
				result += toInteger(argv[index], flag, width, precision);
				index++;
				mode = 0;
				break;
			case 'f':
				result += toFloatingPoint(argv[index], flag, width, 6);
				index++;
				mode = 0;
				break;
			case 'e':
				result += toExponential(argv[index], flag, width, 6, 'e');
				index++;
				mode = 0;
				break;
			case 'E':
				result += toExponential(argv[index], flag, width, 6, 'E');
				index++;
				mode = 0;
				break;
			case 's':
				result += toFormatString(argv[index], width, precision);
				index++;
				mode = 0;
				break;
			default:
				result += buff + c;
				mode = 0;
				break;
			}
			break;
		case 3:		//while defining precision
			switch(c) {
			case '0': case '1': case '2': case '3': case '4':
			case '5': case '6': case '7': case '8': case '9':
				precision = precision * 10 + parseInt(c);
				break;
			case 'd':
				result += toInteger(argv[index], flag, width, precision);
				index++;
				mode = 0;
				break;
			case 'f':
				result += toFloatingPoint(argv[index], flag, width, precision);
				index++;
				mode = 0;
				break;
			case 'e':
				result += toExponential(argv[index], flag, width, precision, 'e');
				index++;
				mode = 0;
				break;
			case 'E':
				result += toExponential(argv[index], flag, width, precision, 'E');
				index++;
				mode = 0;
				break;
			case 's':
				result += toFormatString(argv[index], width, precision);
				index++;
				mode = 0;
				break;
			default:
				result += buff + c;
				mode = 0;
				break;
			}
			break;
		default:
			return "error";
		}
		
		if(mode)
			buff += c;
	}
	
	return result;
}

function toInteger(n, f, w, p) {
	if(typeof n != "number") {
		if(typeof n == "string") {
			n = parseFloat(n);
			if(isNaN(n))
				n = 0;
		}
		else
			n = 0;
	}
	
	var str = n.toString();
	
	//to integer if decimal
	if(-1 < n && n < 1)
		str = "0";
	else {
		if(n < 0)
			str = str.substring(1);
		var pos_e = str.indexOf('e');
		if(pos_e != -1) {		//指数
			var exp = parseInt(str.substring(pos_e + 2));
			var pos_dot = str.indexOf('.');
			if(pos_dot == -1) {
				str = str.substring(0, pos_e) + "000000000000000000000";
				exp -= 21;
			}
			else {
				str = str.substring(0, pos_dot)
							+ str.substring(pos_dot + 1, pos_e) + "00000";
				exp -= str.length - pos_dot;
			}
			for( ; exp; exp--)
				str += "0";
		}
		else {
			var pos_dot = str.indexOf('.');
			if(pos_dot != -1)
				str = str.substring(0, pos_dot);
		}
	}
	
	//精度
	var len = str.length;
	if(len < p) {
		var c = "0";
		for(var i = p - len; i; i--)
			str = c + str;
		len = p;
	}
	
	//フラグの処理
	return ProcFlag(str, f, w - len, n >= 0);
}

function toFloatingPoint(n, f, w, p) {
	if(typeof n != "number") {
		if(typeof n == "string") {
			n = parseFloat(n);
			if(isNaN(n))
				n = 0;
		}
		else
			n = 0;
	}
	
	var bpositive = (n >= 0);
	if(!bpositive)
		n = -n;
	
	str = toFloatingPoint2(n, f, p);
	
	//フラグの処理
	return ProcFlag(str, f, w - str.length, bpositive);
}

function toFloatingPoint2(n, f, p) {
	var str = n.toString();
	
	//to decimal if exponential
	var pos_e = str.indexOf('e');
	if(pos_e != -1) {
		var exp = parseInt(str.substring(pos_e + 1));
		if(exp > 0) {			//指数を整数に
			var pos_dot = str.indexOf('.');
			if(pos_dot == -1) {
				str = str.substring(0, pos_e) + "000000000000000000000";
				exp -= 21;
			}
			else {
				str = str.charAt(0) + str.substring(2, pos_e) + "00000";
				exp -= str.length - 1;
			}
			for( ; exp; exp--)
				str += "0";
		}
		else {					//指数を小数に
			var equive_p = exp + p;
			if(equive_p < -1)	//精度無し
				str = "0";
			else if(equive_p >= 0) {	//精度有り
				str = str.substring(0, pos_e);
				var pos_dot = str.indexOf(".");
				if(pos_dot != -1)
					str = str.charAt(0) + str.substring(2, pos_e);
				str = "000000" + str;
				for(exp += 7; exp; exp++)
					str = "0" + str;
				str = "0." + str;
			}
			else {				//微妙
				var tmp = parseFloat(str.substring(0, pos_e));
				if(tmp > 5) {	//切り上げ
					str = "0.00000";
					for(var i = exp + 7; i; i++)
						str += "0";
					str += "1";
				}
				else			//切捨て
					str = "0";
			}
		}
	}
	
	//精度で整形
	var len = str.length;
	var pos_dot = str.indexOf(".");
	if(pos_dot != -1) {
		var dec = len - pos_dot - 1;
		if(dec > p) {		//切る
			var tmp = parseFloat(str.charAt(pos_dot + p + 1)
									+ "." + str.substring(pos_dot + p + 2));
			if(tmp > 5) {	//切り上げ
				var i;
				if(n < 1) {
					i = 2;
					while(str.charAt(i) == "0")
						i++;
					tmp = (parseInt(str.substring(i, p + 2)) + 1).toString();
					if(tmp.length > p + 2 - i) {		//桁増
						if(i == 2)
							str = "1." + tmp.substring(1);
						else
							str = str.substring(0, i - 1) + tmp;
					}
					else
						str = str.substring(0, i) + tmp;
				}
				else {
					tmp = (parseInt(str.substring(0, pos_dot) + str.substring(
								pos_dot + 1, pos_dot + p + 1)) + 1).toString();
					if(tmp.length > pos_dot + p)				//桁増
						str = tmp.substring(0, pos_dot + 1)
									+ "." +  tmp.substring(pos_dot + 1);
					else
						str = tmp.substring(0, pos_dot)
									+ "." + tmp.substring(pos_dot);
				}
			}
			else {		//切捨て
				str = str.substring(0, p ? pos_dot + p + 1 : pos_dot);
			}
		}
		else if(dec < p) {	//"0"を充填
			for(var i = p - dec; i; i--)
				str += "0";
		}
	}
	else {
		if(p) {
			str += ".0";
			for(var i = p - 1; i; i--)
				str += "0";
		}
	}
	
	return str;
}

function toExponential(n, f, w, p, e) {
	if(typeof n != "number") {
		if(typeof n == "string") {
			n = parseFloat(n);
			if(isNaN(n))
				n = 0;
		}
		else
			n = 0;
	}
	
	var bpositive = n >= 0;
	if(!bpositive)
		n = -n;
	
	var str = n.toString();
	var pos_dot = str.indexOf(".");
	var pos_e = str.indexOf("e");
	var type = ((pos_e != -1) << 1) + (pos_dot != -1);
	var exp;
	
	//仮数部と指数部に分ける
	if(type == 0) {			//整数
		if(exp = str.length - 1)
			str = str.charAt(0) + "." + str.substring(pos_dot = 1);
	}
	else if(type == 1) {	//小数
		if(n > 10) {
			exp = pos_dot - 1;
			str = str.substring(0, 1) + "."
					+ str.substring(1, pos_dot) + str.substring(pos_dot + 1);
			pos_dot = 1;
		}
		else if(n > 1)
			exp = 0;
		else {
			for(var i = 2; ; i++) {
				if(str.charAt(i) != "0") {
					exp = 1 - i;
					str = str.charAt(i) + "." + str.substring(i + 1);
					break;
				}
			}
			pos_dot = 1;
		}
	}
	else {	//指数
		exp = parseInt(str.substring(pos_e + 1));
		str = str.substring(0, pos_e);
	}
	
	//仮数部の整形
	str = toFloatingPoint2(parseFloat(str), f, p);
	
	//指数部の整形
	if(exp >= 0)
		str += e + (exp < 10 ? "+0" : "+") + exp;
	else
		str += e + (exp > -10 ? "-0" + (-exp) : exp);
	
	//フラグの処理
	str = ProcFlag(str, f, w - str.length, bpositive);
	
	return str;
}

function toFormatString(s, w, p) {
	if(typeof s != "string")
		s = s.toString();
	
	var len = s.length;
	if(p >= 0) {
		if(p < len) {
			s = s.substring(0, p);
			len = p;
		}
	}
	if(len < w) {
		var c = " ";
		for(var i = w - len; i; i--)
			s = c + s;
	}
	
	return s;
}

function ProcFlag(str, f, extra, b) {
	var minus = f & 1;
	var plus = f & 2;
	var space = f & 8;
	if(space)			//with ' '
		extra--;
	extra -= !b + plus > 0;
	if((f & 4) > 0 && !minus) {	//with 0 and not -
		if(extra > 0) {
			var c = "0";
			for(var i = extra; i; i--)
				str = c + str;
		}
		if(!b)
			str = "-" + str;
		else if(plus)
			str = "+" + str;
	}
	else {					//without 0 or with -
		if(!b)
			str = "-" + str;
		else if(plus)
			str = "+" + str;
		var c = " ";
		if(extra > 0) {
			var c = " ";
			if(minus)
				for(var i = extra; i; i--)
					str += c;
			else
				for(var i = extra; i; i--)
					str = c + str;
		}
	}
	if(space)
		str = " " + str;
	
	return str;
}

