//-----------------------------------------------------------------------------
//    $Id: jp_retire.js,v 1.4 2009/09/04 22:17:31 jinzhang Exp $
//    $Source: /bbsrc/web/docs/jp09/jscommon/calculators/jp_retire.js,v $
//    $Revision: 1.4 $
//-----------------------------------------------------------------------------

function RetireCalc()
{
	//initial form field and flag variables
	this.cage = 25;
	this.rage = 65;
	this.curamt = 500000;
	this.rate = 6;
	this.optamt = 100000000;
	
	this.calculate = RetireCalcCalculate;
	this.retireTable = RetireCalcTable;
	this.set =  RetireCalcSetData;
	this.validate = RetireCalcValidate;
}

function PopulateForm(frm)
{
		// populate form with values contained/calculated by fcalc object 
		frm.cage.value = rcalc.cage;
		frm.rage.value = rcalc.rage;
		frm.curamt.value = rcalc.curamt;
		frm.rate.value = rcalc.rate;
		frm.optamt.value = rcalc.optamt;
}

function RetireCalcCalculate()
{
		if ( rcalc.validate() ){
			ShowResult();
		}
}

function RetireCalcSetData(obj)
{
	var fld = obj.name;
	var val = obj.value;
	var errmsg1 = document.retireform.errmsg1.value;
	var errmsg2 = document.retireform.errmsg2.value;
	var errmsg3 = document.retireform.errmsg3.value;
	var errmsg4 = document.retireform.errmsg4.value;
	var errmsg5 = document.retireform.errmsg5.value;
	var errmsg6 = document.retireform.errmsg6.value;
	var errmsg7 = document.retireform.errmsg7.value;
	var errmsg8 = document.retireform.errmsg8.value;
	
	if (typeof(val) == "string"){
		//strip out any commas from the value 
		val = val.replace(/,/g, "");
	}
	if ( isNaN(val) || (val == "") ) {			
			document.retireform[fld].value = this[fld];
			alert(val + ' ' + errmsg1);
			document.retireform[fld].focus();
			return false;
	}
	else{
		this[fld] = val;
	}
	
	if ( (fld == 'cage') &&  ((val <= 0) || (val > 65)) ) {		
			document.retireform[fld].value = this[fld];
			alert(val + ' ' + errmsg2);
			document.retireform[fld].focus();
			return false;
	}
	if ( (fld == 'rage') &&  ((val < 20) || (val > 75)) ) {		
			document.retireform[fld].value = this[fld];
			alert(val + ' ' + errmsg3);
			document.retireform[fld].focus();
			return false;
	}
	if (this.cage >= this.rage){
		alert(errmsg4);
		return false;
	}
	if ( (fld == 'rate') &&  ((val < 1) || (val > 25)) ) {		
			document.retireform[fld].value = this[fld];
			alert(val + ' ' + errmsg5);
			document.retireform[fld].focus();
			return false;
	}
	if ( (fld == 'curamt') &&  (val < 0) ) {		
			document.retireform[fld].value = this[fld];
			alert(val + ' ' + errmsg6);
			document.retireform[fld].focus();
			return false;
	}
	if (fld == 'optamt') {
		if (document.retireform.option[1].checked  && (val < 1) ) {		
			document.retireform[fld].value = this[fld];
			alert(val + ' ' + errmsg7)
			document.retireform[fld].focus();
			return false;
		}
		if (document.retireform.option[0].checked  && (val < 1) ) {		
			document.retireform[fld].value = this[fld];
			alert(val + ' ' + errmsg7)
			document.retireform[fld].focus();
			return false;
		}
	}
	if (document.retireform.option[1].checked){
			if (Number(this.curamt) >= Number(this.optamt)){
			alert(errmsg8);
			document.retireform.curamt.focus();
			return false;
		}
	}
}

function RetireCalcValidate()
{
	var fld, val; 
	var data = ["rage", "cage", "rate", "curamt", "optamt"]; 
	var label = ["Retirement Age", "Current Age", "Rate of Return", "Current Amount in Fund", "Desired amount in Fund/Annual contribution"];
	var errmsg1 = document.retireform.errmsg1.value;
	var errmsg2 = document.retireform.errmsg2.value;
	var errmsg3 = document.retireform.errmsg3.value;
	var errmsg4 = document.retireform.errmsg4.value;
	var errmsg5 = document.retireform.errmsg5.value;
	var errmsg6 = document.retireform.errmsg6.value;
	var errmsg7 = document.retireform.errmsg7.value;
	var errmsg8 = document.retireform.errmsg8.value;
	
	for(i=0; i < data.length; i++){
			fld = data[i];
			val = document.retireform[fld].value;
			if (typeof(val) == "string")
			{
				//strip out any commas from the value 
				val = val.replace(/,/g, "");
				this[fld] = val; 
			}
			if (isNaN(val) || (val < 0) || (val == "")){			
				alert(label[i] + ' ' + errmsg1);
				document.calcform[fld].focus();
				return false;
			}
			if ( (fld == 'cage') &&  ((val <= 0) || (val > 65)) ) {		
				alert(val + ' ' + errmsg2);
				document.retireform[fld].focus();
				return false;
			}
			if ( (fld == 'rage') &&  ((val < 20) || (val > 75)) ) {		
				alert(val + ' ' + errmsg3);
				document.retireform[fld].focus();
				return false;
			}
			if (this.cage >= this.rage){
				alert(errmsg4);
				return false;
			}
			if ( (fld == 'rate') &&  ((val < 1) || (val > 25)) ) {		
				alert(val + ' ' + errmsg5);
				document.retireform[fld].focus();
				return false;
			}
			if ( (fld == 'curamt') &&  (val < 0) ) {		
				alert(val + ' ' + errmsg6)
				document.retireform[fld].focus();
				return false;
			}
			if (fld == 'optamt') {
				if (document.retireform.option[1].checked  && (val < 1) ) {		
					alert(val + ' ' + errmsg7)
					document.retireform[fld].focus();
					return false;
			}
			if (document.retireform.option[0].checked  && (val < 1) ) {		
				alert(val + ' ' + errmsg7)
				document.retireform[fld].focus();
				return false;
			}
		}
		if (document.retireform.option[1].checked){
			if (Number(this.curamt) >= Number(this.optamt)){
				alert(errmsg8);
				document.retireform.curamt.focus();
				return false;
			}
		}
	}
	return true;
}



function RetireCalcTable(type)
{
	var table1 = '';
	var table2 = '';
	var results = '';
	var pctrate = this.rate/100;
    var years = this.rage - this.cage;
	var pct = Math.pow((pctrate+1), years);
	var fv=0, totfv=0;
	var contribution = new Number(0);
	var pvarray = new Array();
	var fvarray = new Array();
	var contarray = new Array();
	var currentamt = (Number(this.curamt) * (this.rate/100)) + Number(this.curamt);
	var result=0, dresult=0;
	var totyears=0;
	var retireage= new Number(0);
	var translation1 = document.retireform.translation1.value;
	var translation2A = document.retireform.translation2A.value;
	var translation2B = document.retireform.translation2B.value;
	var translation3 = document.retireform.translation3.value;
	var translation4 = document.retireform.translation4.value;
	var translation4 = document.retireform.translation4.value;
	var translation5 = document.retireform.translation5.value;
	var translation6 = document.retireform.translation6.value;
	var translation7 = document.retireform.translation7.value;
	var translation8 = document.retireform.translation8.value;
	var translation9 = document.retireform.translation9.value;
	var translation10 = document.retireform.translation10.value;
	var yensymbol = document.retireform.yensymbol.value;
	

	//calculate fund balance at retirement
	if (document.retireform.option[0].checked){  
		contribution = Number(this.optamt);	
		for (i=0; i<years; i++){
			pvarray[i] = Number(currentamt) * Math.pow((pctrate+1), i);
			fv += Number(this.optamt) * Math.pow((pctrate+1), i);
			totfv = fv + pvarray[i];
			fvarray[i] = Math.round(totfv*100)/100;
			contarray[i] = Math.round(contribution*100)/100;
			contribution += Number(this.optamt);
			totyears = i;
		}
	}
	else{ //calculate required annual contribution 
     	result = (Number(this.optamt) - (Number(this.curamt) * pct)) * (pctrate/(pct - 1));
		
		if (this.optamt <= (this.curamt * pct)){
			result = 0;
			dresult = 0;
		}
		else{
			dresult = result;
		}		
		contribution += Number(dresult);
		fv = 0;
		for (i=0; i<years; i++){
			temp = currentamt * Math.pow((pctrate+1), i);
			pvarray[i] = temp;
			fv += result * Math.pow((pctrate+1), i);
			totfv = fv + pvarray[i];
				fvarray[i] = Math.round(totfv*100)/100;
				contarray[i] = Math.round(contribution*100)/100;
				contribution += result;
				totyears=i;
				if(totfv >= this.optamt) break;
		}
		
	}
		
	totyears += 1; 
	retireage = Number(this.cage) + totyears;   
	var contemp =  (contarray[totyears-1] / totyears)*100;
	var contribute = Math.round(contemp)/100;
	var savings = Math.round(fvarray[totyears-1]*100)/100;

	var results_title = document.retireform.resultstitle.value;
	if (type == 'print'){
		table1 += '<table class="m_top_print">'
						+ '<tr><th colspan="5">'
						+ results_title 
						+ '</th></tr><tr>'
						+ '<td nowrap>'
						+ translation3 + '<br />'
						+ yensymbol 
						+ '<span class="style5_plain">' + Math.round(this.curamt) + '</span><br></td>'
						+ '<td  nowrap>'
						+ translation4 	+ '<br />'
						 + yensymbol+ '<span class="style5_plain">'  +  Math.round(savings)+ '</span>' + '<br></td>'
						+ '<td  nowrap>'
						+ translation5 + '<br />'
						+ '&#160;' + ' &#160;' + '&#160;' + ' &#160;' 
						+ '<span class="style5_plain">' + Math.round(this.rate) + '</span><br></td>'
						+ '<td  nowrap>'
						+ translation6 + '<br />'
						 + yensymbol + '<span class="style5_plain">' + Math.round(contribute) +'</span>'+ '<br></td>'
						+ '<td  nowrap>'
						+ translation7 + '<br />'
						+ '&#160;' + ' &#160;' + '&#160;' + ' &#160;' 
						+ '&#160;' + ' &#160;' + '&#160;' + ' &#160;' 
						+ '&#160;' + ' &#160;' + '&#160;' + ' &#160;' 
						+ '&#160;' + ' &#160;' + '&#160;' + ' &#160;' 
						+ '&#160;' + ' &#160;' + '&#160;' + ' &#160;' 
						+  '<span class="style5_plain">' + retireage + '</span>'
						+ '</td></tr>'
						+ '<tr><td><br /><br /></td></tr>'
						+  '</table>';
	}
	else{
		table1 += '<table class="m_left_t">'
                        + '<tr>'
                        + '</tr>'
                        + '<tr>'
                        + '<td>'
						+ translation3 
						+ '<br>' + yensymbol 
						+ '<span class="style5_plain">' + Math.round(this.curamt)  +'<br /><br /></span>'
		    			+ '</td>'
                        + '</tr>'
                        + '<tr>'
                        + '<td>'
						+ translation4 
						+ '<br />' 
						+  yensymbol  + '<span class="style5_plain">' + Math.round(savings) + '<br /><br /></span>'
		    			+ '</td>'
                        + '</tr>'
                        + '<tr>'
                        + '<td>'
						+ translation5 + '<span class="style5_plain">' + Math.round(this.rate) + '%' +'<br /><br /></span>'
		   				+ '</td>'
                        + '</tr>'
                        + '<tr>'
                        + '<td>'
						+ translation6 + '<span class="style5_plain">' + Math.round(contribute) +'<br /><br /></span>'
						+ '</td>'
                        + '</tr>'
                        + '<tr>'
                        + '<td>' + translation7 + '<span class="style5_plain">' + retireage +'<br /><br /></span>'
						+ '</td>'
                        + '</tr>'
                    +'</table>';
        }
	
	if (type == 'print'){
		table2 += '<table class="m_bottom_print">' 
		   +  '<tr><th colspan="3">'
		  +   translation2A + ' ' + totyears + ' ' + translation2B + '</th></tr>'
		  +  '<tr><td>'
		  + '<div class="m_text_left">' + translation8 + '</div>' + '</td>'
		  +  '<td>' 
		  + '<div class="m_text_left">' + translation9 + '</div>' + '</td>'
		  +  '<td>' 
		  + '<div class="m_text_left">' + translation10 + '</div>' + '</td></tr>';   
	}	<!--print page bottom table header-->
	else{ 
		table2 += '<table class="m_right_t">' 
		  +  '<tr><td>'
		  + '<div class="bold">' + translation8 + '</div>' + '</td>'
		  +  '<td>' 
		  + '<div class="bold">' + translation9 + '</div>' + '</td>'
		  +  '<td>' 
		  + '<div class="bold">' + translation10 + '</div>' + '</td>';   
	}	<!--right table header-->
		
	var yeartmp=0;	
	for (i=0; i<totyears; i++){
		yeartmp = i+1;
		<!--color = "bgcolor=#eeeeee";-->
		//if ((i % 2) == 0) color = "bgcolor=#ffffff"; else color = "bgcolor=#eeeeee";
		table2 += '<tr><td>' 
			  + yeartmp 
			  + '</td><td>' 
			  + Math.round(contarray[i]) 
			  + '</td><td>' 
			  + Math.round(fvarray[i]) + '</td></tr>';	
			  <!--right table data align center-->
	}
		table2 += '<tr><td colspan="3"></td></tr></table>';	   
	
	if (type == 'print')
	{
		results += '<table class="m_print_page">'
				+ '<tr><td>' + table1 + '</td></tr>'
				+ '<tr><td>' + table2 + '</td></tr></table>';
	}
	else{
		results += ' <div class="mortgage_new_greenline4">' + '計算結果' +'&#160; ' + '&#160; ' + '&#160; ' + ' &#160;' + '&#160; ' + '&#160; ' + '&#160; ' + '&#160; ' + '&#160; ' + ' &#160;' + '&#160; ' 
				+ '&#160;' + ' &#160;' + '&#160;' + ' &#160;' 
				+ '年間の貯蓄予定額 40 年' + '</div>'
				+ '<table>'
				+ '<tr><td valign="top">' + table1 + '</td>'
				+ '<td>' + table2 + '</td></tr></table><br><br>';
	}
	<!--important to keep left table valign top-->
	return (results);
}

function ShowResult()
{
	var results = rcalc.retireTable();
	var errmsg10 = document.retireform.errmsg10.value;
	
	if ((navigator.appName.indexOf("Netscape") != -1) && (parseInt(navigator.appVersion) == 4)) {
				var reslayer = document.layers['retireres2'].document;
				reslayer.open();
				reslayer.write(results);
				reslayer.close();
	     } 
		 else if ((navigator.appName.indexOf("Microsoft") != -1) || 
		 		  (parseInt(navigator.appVersion) >= 5)){
				document.getElementById("retireres").innerHTML = results;
	    } 
		else {
			alert(errmsg10);
		}
		
}


function NS47_addlines(){
	var i;
	if ((navigator.appName.indexOf("Netscape") != -1)&& (parseInt(navigator.appVersion) == 4)) {
		for(i=0; i<65; i++){
			document.write('<br>');	
		}	
	}
}

function loadResults()
{
	if ((navigator.appName.indexOf("Netscape") != -1) && (parseInt(navigator.appVersion) == 4)) {
		document.write('<div id="retireres2"></div>');		
	} 
	else if ((navigator.appName.indexOf("Microsoft") != -1) || 
		 		 (parseInt(navigator.appVersion) >= 5)){
		document.write('<div id="retireres"></div>');
	} 
	else {
		alert("Invalid Browser");
	}
}


function PrintResults()
{
	PopulateForm(document.retireform);
	var winheight = 500;
	var winwidth = 630;
	var results_table = "";
	var newwin = window.open('', 'printable', 'height=' + winheight + ',width=' + winwidth + ',toolbar,scrollbars,resizable');
	var head = '<html><head><title>Bloomberg Printer-Friendly Page</title>'
				+ '<META http-equiv="Content-Type" content="text/html; charset=UTF-8">'
				+ '<LINK REL="stylesheet" TYPE="text/css" HREF="/styles/tools.css">'
				+ '<LINK REL="stylesheet" TYPE="text/css" HREF="/styles/main.css">'
				+ '<style type="text/css">'
				+ '@media print {'
				+ '	#print_page .article_print_container {'
				+ '		display: none;'
				+ '	}'
				+ '}'
				+ '</style>'
				+ '</head>';
	var body = '<body id="print_page" marginwidth="0" marginheight="0" leftmargin="0" topmargin="0" rightmargin="0">';
	var logo = 	'<div id="page_header_container">'
				+ '<div id="header_top_container">'
				+ '<div id="bloomberg_logo">'
				+ '<A HREF="/index.html"><img alt="Bloomberg.co.jp" border="0" height="34" width="267" src="http://images.bloomberg.com/jp09/navigation/logo_jp.png">'
				+ '</A></div></div></div>';
				
	var printtxt = document.retireform.printtxt.value;
	var start_main = '<div class="article_print_container"style="margin-top:5px;margin-bottom:5px;margin-left:500px;">'
				+  '<a class="article_link_print" href="javascript:window.print();">'
				+ '印刷用ページ'
				+ '</a></div>'
				+ '<div class="clear_float"></div><br />'

	results_table = rcalc.retireTable('print');
	var print_link ='<div class="article_print_container" style="margin-top:5px;margin-bottom:5px;margin-left:500px;">'
				+  '<a class="article_link_print" href="javascript:window.print();">'
				+ '印刷用ページ'
				+ '</a></div>'
				+ '<div class="clear_float"></div><br />'
				
	var end_main = '<!-- end, page content   -->'
					+ '<div style="margin-bottom:10px;" id="popup_footer">'
				    + '<div class="imgcopyright">'
					+ '<img alt="" border="0" src="http://images.bloomberg.com/r06/navigation/copyright.gif">'
					+ '</div>'
					+ '<div id="popup_middlerow">'
					+ '<a target="_blank" href="/notices/tos.html">サービスの要項</a> |' 
					+ '<a target="_blank" href="/notices/privacy.html">プライバシー保護方針</a> | '
					+ '<a target="_blank" href="/notices/trademarks.html">商標について</a>'
					+ '</div>'
					+ '<div class="clear_float" /></div>'				
					+ '</td></tr></table><br>';	
	var tail = '</body></html>';
	
	newwin.document.write(head);
	newwin.document.write(body);
	newwin.document.write(logo);
	newwin.document.write(start_main);
	newwin.document.write(results_table);
	newwin.document.write(print_link);
	newwin.document.write(end_main);
	newwin.document.write(tail);
	newwin.document.close();
	newwin.focus();

}

