function mpiq_widget_initmpiq_id123(ind){ if(ind >= mp_filesmpiq_id123.length){ mpiq_load_widgetsmpiq_id123(); return false; } var file=mp_filesmpiq_id123[ind]; var flag=eval(mp_flagsmpiq_id123[ind]); if(flag){ var _doc = document.getElementsByTagName('head')[0]; var js = document.createElement('script'); js.setAttribute('type', 'text/javascript'); js.setAttribute('src', mpiq_get_url(file)); _doc.appendChild(js); if(-[1,]){//if not IE js.onload = function () { mpiq_widget_initmpiq_id123(++ind); } } else { // IE6,IE7 support js.onreadystatechange js.onreadystatechange = function () { if ((js.readyState == 'loaded' || js.readyState == 'complete') && !js.loaded ){ mpiq_widget_initmpiq_id123(++ind); } } } }else{ mpiq_widget_initmpiq_id123(++ind); } return false; } var mp_filesmpiq_id123=new Array("/LTISystem/jsp/javascript/jquery-1.8.2.min.js","/LTISystem/jsp/javascript/jquery-ui-1.9.0.min.js","/LTISystem/jsp/portfolio/images/jquery.ajaxAutoComplete/jquery.suggest.js","/LTISystem/jsp/widgets/js/jquery.tipTip.js","/LTISystem/jsp/template/ed/js/jquery.colorbox.js","/LTISystem/jsp/javascript/mpiq/sunnytabs.js?version_1"); var mp_flagsmpiq_id123=new Array("typeof window.jQuery == \"undefined\"","typeof jQuery.ui == \"undefined\"","typeof jQuery.suggest == \"undefined\"","typeof jQuery.fn.tipTip == \"undefined\"","typeof jQuery.colorbox == \"undefined\"","typeof jQuery.fn.sunnytabs == \"undefined\""); function mpiq_load_data_from_server(data_url,fn){ window.jQuery.ajax({ type : "GET", url : data_url, dataType : "jsonp", jsonp: 'jsoncallback', success : function(data){ window.jQuery(".mpiq_loading_back").hide(); window.jQuery(".mpiq_loading").hide(); fn(data); }, error:function(){ window.jQuery(".mpiq_loading_back").hide(); window.jQuery(".mpiq_loading").hide(); } }); } function mpiq_post_data_to_server(data_url,data,fn){ window.jQuery(".mpiq_loading_back").show(); window.jQuery(".mpiq_loading").show(); window.jQuery.ajax({ type : "post", url : data_url, data : data, dataType : "jsonp", jsonp: 'jsoncallback', success : function(data){ window.jQuery(".mpiq_loading_back").hide(); window.jQuery(".mpiq_loading").hide(); fn(data); }, error:function(){ window.jQuery(".mpiq_loading_back").hide(); window.jQuery(".mpiq_loading").hide(); } }); } function mpiq_ajax_post_server(data_url,fn){ window.jQuery(".mpiq_loading_back").show(); window.jQuery(".mpiq_loading").show(); window.jQuery.ajax({ type : "GET", url : data_url, dataType : "jsonp", jsonp: 'jsoncallback', success : function(data){ window.jQuery(".mpiq_loading_back").hide(); window.jQuery(".mpiq_loading").hide(); fn(data); }, error:function(){ window.jQuery(".mpiq_loading_back").hide(); window.jQuery(".mpiq_loading").hide(); } }); } function mpiq_widget_ajax(url, data, isShow, fn, type){ var params = arguments; var json = { url: params[0] }; for(var i = 1; i<=params.length; i++){ if(typeof params[i] == "function"){ json.success = params[i]; if(params[i+1]){ json.dataType = params[i+1]; } if(i == 2){ if(typeof params[i-1] == "boolean"){ json.isShow = params[i-1]; }else{ json.data = params[i-1]; } }else if(i == 3){ json.isShow = params[i-1]; json.data = params[i-2]; } break; } } mpiq_widget_ajaxAll(json); } function mpiq_widget_ajaxAll(param){ var defaults = { url : "", data : "", dataType : "jsonp", success : function(){}, error : function(a, b, c){ console.log(a); console.log(b); console.log(c); }, isShow : true } var ops = window.jQuery.extend({}, defaults, param); if(ops.isShow){ window.jQuery(".mpiq_loading_back").show(); window.jQuery(".mpiq_loading").show(); } window.jQuery.ajax({ type : "GET", url : ops.url, data : ops.data, dataType : ops.dataType, jsonp: 'jsoncallback', success : function(data){ if(ops.isShow){ window.jQuery(".mpiq_loading_back").hide(); window.jQuery(".mpiq_loading").hide(); } ops.success(data); }, error:function(a,b,c){ ops.error(); if(ops.isShow){ window.jQuery(".mpiq_loading_back").hide(); window.jQuery(".mpiq_loading").hide(); } } }); } function mpiq_widget_calculatorwidgetmpiq_id123(){ mpiq_load_css(mpiq_calculatorwidgetmpiq_id123_cssFile); window.jQuery("#mpiq_id123").html("

How old are you, and when will you retire?

I'm and plan to retire at age

What's your current annual income?

$ per year

Expected annual income increase?

%

How much do you save annually for retirement?

% of your income = $

How much have you already saved for retirement?

$

Expected average annual rate of investment return?

%

Expected inflation rate?

%
Expected annual spending in retirement? (in today's dollar)
$
Performance

Retirement Investment Balance

Balances by Year
Year Age Annual Income ($) Investment Balance ($) Annual Spending In Retirement ($)
"); mpiq_calculatorwidgetmpiq_id123_preparewidget(); } var mpiq_calculatorwidgetmpiq_id123_cssFile = ["https://www.myplaniq.com/LTISystem/jsp/widgets/calculatorwidget/thirdparty.css", "https://www.myplaniq.com/LTISystem/jsp/widgets/css/green.css", "https://www.myplaniq.com/LTISystem/jsp/template/ed/css/jquery_UI/smoothness/jquery-ui-1.8.custom.css"]; function mpiq_calculatorwidgetmpiq_id123_preparewidget(){ window.jQuery.ajax({ url: 'https://www.google.com/jsapi?callback', cache: false, dataType: 'script', success: function(){ google.load('visualization', '1', {packages:['corechart'], 'callback' : function(){ console.log("Google Chart"); }}); } }); //window.jQuery.getScript('https://www.google.com/jsapi?autoload={"modules":[{"name":"visualization","version":"1","packages":["corechart"]}]}'); window.jQuery(function(){ window.jQuery("#mpiq_calculatorwidgetmpiq_id123_calcBtn").click(function(){ window.jQuery("#mpiq_calculatorwidgetmpiq_id123_performance").hide(); var currentAge = parseInt(window.jQuery("#mpiq_calculatorwidgetmpiq_id123_currentAge").val()); var retirementAge = parseInt(window.jQuery("#mpiq_calculatorwidgetmpiq_id123_retirementAge").val()); var currentIncome = parseInt(window.jQuery("#mpiq_calculatorwidgetmpiq_id123_currentIncome").val()); var annualIncomeIncrease = parseFloat(window.jQuery("#mpiq_calculatorwidgetmpiq_id123_annualIncomeIncrease").val() / 100); var annualContribution = parseFloat(window.jQuery("#mpiq_calculatorwidgetmpiq_id123_annualContribution").val() / 100); var currentBalance = parseInt(window.jQuery("#mpiq_calculatorwidgetmpiq_id123_currentBalance").val()); var annualInvestmentGain = parseFloat(window.jQuery("#mpiq_calculatorwidgetmpiq_id123_annualInvestmentGain").val() / 100); var inflationRate = parseFloat(window.jQuery("#mpiq_calculatorwidgetmpiq_id123_inflationRate").val() / 100); var annualSpending = parseFloat(window.jQuery("#mpiq_calculatorwidgetmpiq_id123_annualSpending").val()); var num = retirementAge - currentAge + 40; var currentYear = new Date().getFullYear(); var result = {}; var firstItem = { year: currentYear, age: currentAge, spending: annualSpending, income: currentIncome, balance: currentBalance } result[currentYear] = firstItem; for(var i = 1; i <= num; i++){ var item = {}; item.year = currentYear + i; item.age = currentAge + i; item.spending = (result[item.year - 1].spending * (1 + inflationRate)).toDecimal(0); item.income = (item.age <= retirementAge ? currentIncome * Math.pow((1 + annualIncomeIncrease), i) : 0).toDecimal(0); item.balance = (result[item.year - 1].balance * (1 + annualInvestmentGain) + result[item.year - 1].income * annualContribution - (item.age <= retirementAge ? 0 : result[item.year - 1].spending)).toDecimal(0); result[item.year] = item; } mpiq_calculatorwidgetmpiq_id123_drawLineChart(result); mpiq_calculatorwidgetmpiq_id123_createPerformanceTable(result); window.jQuery("#mpiq_calculatorwidgetmpiq_id123_performance").show("blind", 3000); }); window.jQuery("#mpiq_calculatorwidgetmpiq_id123_currentAgeSlider").slider({ range: true, max: 100, min: 10, values: [35, 65], create: function( event, ui ) { window.jQuery("#mpiq_calculatorwidgetmpiq_id123__currentAge").text(35); window.jQuery("#mpiq_calculatorwidgetmpiq_id123_currentAge").val(35); window.jQuery("#mpiq_calculatorwidgetmpiq_id123__retirementAge").text(65); window.jQuery("#mpiq_calculatorwidgetmpiq_id123_retirementAge").val(65); }, slide: function( event, ui ) { window.jQuery("#mpiq_calculatorwidgetmpiq_id123__currentAge").text(ui.values[0]); window.jQuery("#mpiq_calculatorwidgetmpiq_id123_currentAge").val(ui.values[0]); window.jQuery("#mpiq_calculatorwidgetmpiq_id123__retirementAge").text(ui.values[1]); window.jQuery("#mpiq_calculatorwidgetmpiq_id123_retirementAge").val(ui.values[1]); } }); window.jQuery("#mpiq_calculatorwidgetmpiq_id123__currentIncome").text(mpiq_calculatorwidgetmpiq_id123_formatNum(window.jQuery("#mpiq_calculatorwidgetmpiq_id123_currentIncome").val())); window.jQuery("#mpiq_calculatorwidgetmpiq_id123_currentIncome").blur(function(){ var currentIncome = parseInt(window.jQuery("#mpiq_calculatorwidgetmpiq_id123_currentIncome").val()); if(isNaN(currentIncome)){ currentIncome = 0; window.jQuery("#mpiq_calculatorwidgetmpiq_id123_currentIncome").val(currentIncome); } window.jQuery("#mpiq_calculatorwidgetmpiq_id123__currentIncome").text(mpiq_calculatorwidgetmpiq_id123_formatNum(currentIncome)); window.jQuery("#mpiq_calculatorwidgetmpiq_id123___annualContribution").text(mpiq_calculatorwidgetmpiq_id123_formatNum(currentIncome * window.jQuery("#mpiq_calculatorwidgetmpiq_id123_annualContribution").val() / 100)); }); window.jQuery("#mpiq_calculatorwidgetmpiq_id123_currentIncomeIncreaseSlider").slider({ range: "min", min: 0, max: 100, value: 5, create: function( event, ui ) { window.jQuery("#mpiq_calculatorwidgetmpiq_id123__annualIncomeIncrease").text(5); window.jQuery("#mpiq_calculatorwidgetmpiq_id123_annualIncomeIncrease").val(5); }, slide: function( event, ui ) { window.jQuery("#mpiq_calculatorwidgetmpiq_id123__annualIncomeIncrease").text(ui.value); window.jQuery("#mpiq_calculatorwidgetmpiq_id123_annualIncomeIncrease").val(ui.value); } }); window.jQuery("#mpiq_calculatorwidgetmpiq_id123_annualContributionSlider").slider({ range: "min", min: 0, max: 100, value: 10, create: function( event, ui ) { window.jQuery("#mpiq_calculatorwidgetmpiq_id123__annualContribution").text(10); window.jQuery("#mpiq_calculatorwidgetmpiq_id123_annualContribution").val(10); window.jQuery("#mpiq_calculatorwidgetmpiq_id123___annualContribution").text(mpiq_calculatorwidgetmpiq_id123_formatNum(10 * window.jQuery("#mpiq_calculatorwidgetmpiq_id123_currentIncome").val() / 100)); }, slide: function( event, ui ) { window.jQuery("#mpiq_calculatorwidgetmpiq_id123__annualContribution").text(ui.value); window.jQuery("#mpiq_calculatorwidgetmpiq_id123_annualContribution").val(ui.value); window.jQuery("#mpiq_calculatorwidgetmpiq_id123___annualContribution").text(mpiq_calculatorwidgetmpiq_id123_formatNum(ui.value * window.jQuery("#mpiq_calculatorwidgetmpiq_id123_currentIncome").val() / 100)); } }); window.jQuery("#mpiq_calculatorwidgetmpiq_id123__currentBalance").text(mpiq_calculatorwidgetmpiq_id123_formatNum(window.jQuery("#mpiq_calculatorwidgetmpiq_id123_currentBalance").val())); window.jQuery("#mpiq_calculatorwidgetmpiq_id123_currentBalance").blur(function(){ var currentBalance = parseInt(window.jQuery("#mpiq_calculatorwidgetmpiq_id123_currentBalance").val()); if(isNaN(currentBalance)){ currentBalance = 0; window.jQuery("#mpiq_calculatorwidgetmpiq_id123_currentBalance").val(currentBalance); } window.jQuery("#mpiq_calculatorwidgetmpiq_id123__currentBalance").text(mpiq_calculatorwidgetmpiq_id123_formatNum(currentBalance)); }); window.jQuery("#mpiq_calculatorwidgetmpiq_id123_annualInvestmentGainSlider").slider({ range: "min", min: 0, max: 100, value: 8, create: function( event, ui ) { window.jQuery("#mpiq_calculatorwidgetmpiq_id123__annualInvestmentGain").text(8); window.jQuery("#mpiq_calculatorwidgetmpiq_id123_annualInvestmentGain").val(8); }, slide: function( event, ui ) { window.jQuery("#mpiq_calculatorwidgetmpiq_id123__annualInvestmentGain").text(ui.value); window.jQuery("#mpiq_calculatorwidgetmpiq_id123_annualInvestmentGain").val(ui.value); } }); window.jQuery("#mpiq_calculatorwidgetmpiq_id123_inflationRateSlider").slider({ range: "min", min: -5, max: 30, value: 3, create: function( event, ui ) { window.jQuery("#mpiq_calculatorwidgetmpiq_id123__inflationRate").text(3); window.jQuery("#mpiq_calculatorwidgetmpiq_id123_inflationRate").val(3); }, slide: function( event, ui ) { window.jQuery("#mpiq_calculatorwidgetmpiq_id123__inflationRate").text(ui.value); window.jQuery("#mpiq_calculatorwidgetmpiq_id123_inflationRate").val(ui.value); } }); window.jQuery("#mpiq_calculatorwidgetmpiq_id123__annualSpending").text(mpiq_calculatorwidgetmpiq_id123_formatNum(window.jQuery("#mpiq_calculatorwidgetmpiq_id123_annualSpending").val())); window.jQuery("#mpiq_calculatorwidgetmpiq_id123_annualSpending").blur(function(){ var annualSpending = parseInt(window.jQuery("#mpiq_calculatorwidgetmpiq_id123_annualSpending").val()); if(isNaN(annualSpending)){ annualSpending = 0; window.jQuery("#mpiq_calculatorwidgetmpiq_id123_annualSpending").val(annualSpending); } window.jQuery("#mpiq_calculatorwidgetmpiq_id123__annualSpending").text(mpiq_calculatorwidgetmpiq_id123_formatNum(annualSpending)); }); }); } function mpiq_calculatorwidgetmpiq_id123_createPerformanceTable(data){ var html = ''; window.jQuery.each(data, function(key, obj){ html += ''; html += '' + obj.year + ''; html += '' + obj.age + ''; html += '' + mpiq_calculatorwidgetmpiq_id123_formatNum(obj.income) + ''; html += '' + mpiq_calculatorwidgetmpiq_id123_formatNum(obj.balance) + ''; html += '' + mpiq_calculatorwidgetmpiq_id123_formatNum(obj.spending) + ''; html += ''; }) window.jQuery("#mpiq_calculatorwidgetmpiq_id123_result_table tbody").html(html); } function mpiq_calculatorwidgetmpiq_id123_formatNum(num){ num = parseInt(num) + ""; var l = num.length; var n = 0; var result = ""; for(var i = num.length - 1; i >= 0; i--){ if(n % 3 == 0 && n != 0){ result = num[i] + "," + result; n = 0; }else{ result = num[i] + result; } n++; } return result; } function mpiq_calculatorwidgetmpiq_id123_processLineChartData(data){ var a = [], b; var retirement = false, retirementIndex = 0; window.jQuery.each(data, function(key, obj){ if(!retirement && obj.income == 0){ retirement = true; retirementIndex--; } if(!retirement){ retirementIndex++; } b = [key, obj.balance, "$" + mpiq_calculatorwidgetmpiq_id123_formatNum(obj.balance), null, obj.age]; a.push(b); }) var first = a[0], retire = a[retirementIndex], last = a[a.length - 1]; a[0] = [first[0], first[1], "$" + mpiq_calculatorwidgetmpiq_id123_formatNum(first[1]), "$" + mpiq_calculatorwidgetmpiq_id123_formatNum(first[1]) + " in " + first[0], first[4]]; a[a.length - 1] = [last[0], last[1], "$" + mpiq_calculatorwidgetmpiq_id123_formatNum(last[1]), "$" + mpiq_calculatorwidgetmpiq_id123_formatNum(last[1]) + " in " + last[0], last[4]]; if (retire!=undefined){ a[retirementIndex] = [retire[0], retire[1], "$" + mpiq_calculatorwidgetmpiq_id123_formatNum(retire[1]), "Total retirement balance $" + mpiq_calculatorwidgetmpiq_id123_formatNum(retire[1]) + " in " + retire[0] , retire[4]]; a = a.slice(retirementIndex); } //Do not display the retirement performace before retire return a; } var mpiq_calculatorwidgetmpiq_id123_gl_chart; function mpiq_calculatorwidgetmpiq_id123_drawLineChart(result) { try{ var a = mpiq_calculatorwidgetmpiq_id123_processLineChartData(result); var data = new google.visualization.DataTable(a); data.addColumn('string', 'Year'); data.addColumn('number', 'Investment Balance'); data.addColumn({type:'string', role:'tooltip'}); data.addColumn({type:'string', role:'annotation'}); data.addColumn('number', 'Age'); data.addRows(a); var options = { width: 950, height: 450, focusTarget: "category", legend: "none", tooltip: { isHtml: true }, hAxis: { slantedText: true, slantedTextAngle: 90 }, vAxis: { viewWindowMode: "maximized" } }; if(mpiq_calculatorwidgetmpiq_id123_gl_chart){ mpiq_calculatorwidgetmpiq_id123_gl_chart.clearChart(); }else{ mpiq_calculatorwidgetmpiq_id123_gl_chart = new google.visualization.LineChart(document.getElementById("mpiq_calculatorwidgetmpiq_id123_gl_chart")); } mpiq_calculatorwidgetmpiq_id123_gl_chart.draw(data, options); }catch(e){ console.log("google chart error") ; } } function mpiq_load_widgetsmpiq_id123(){ mpiq_widget_calculatorwidgetmpiq_id123(); } /* * load css file */ function mpiq_load_css(href){ var cssHead = document.getElementsByTagName('head')[0]; for(var i = 0;i