(function($){var today=(new Date()).getFullYear()*12+(new Date()).getMonth();function _year(v){return(v/12)|0;}
function _month(v){return v%12;}
$.widget("ui.dateselector",{options:{min:1980*12,max:today,value:today,lastday:true,change:function(value){},monthFormatter:function(date){var m=_month(date);var y=_year(date);var d;if(this.lastday){switch(m){default:d=31;break;case 3:case 5:case 8:case 10:d=30;break;case 1:d=(y%400==0||y%100!=0&&y%4==0)?29:28;break;}}
else
d=1;m=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"][m];return d.toString()+" "+m.toString();},yearFormatter:function(year){return year.toString();}},_create:function(){if(this.options.hidden){this.element.hide();}
this.element.append("<select></select>").append("<select></select>");this._monthSelect().bind("change",{dateselector:this},this._monthSelectChangeHandler);this._yearSelect().bind("change",{dateselector:this},this._yearSelectChangeHandler);this._populate();},_setOption:function(key,value){$.Widget.prototype._setOption.apply(this,arguments);switch(key){case"min":case"max":var v=this.options.value;var vv=Math.max(this.options.min,Math.min(this.options.max,v));if(v!=vv)this._setOption("value",vv);this._populate();break;case"value":var v=this.options.value;var vv=Math.max(this.options.min,Math.min(this.options.max,v));if(v!=vv)
this.options.value=vv;this._changeCount++;this._yearSelect().attr("value",this.getYear());this._monthSelect().attr("value",this.getMonth());this._changeCount--;if(this._userChange)
this.options.change(this.options.value);break;}},_populate:function(){this._populateYear();this._populateMonth();},_populateYear:function(){var minyear=_year(this.options.min);var maxyear=_year(this.options.max);var select=this._yearSelect();select.empty();for(var year=minyear;year<=maxyear;year++){select.prepend("<option value=\""+year+"\">"
+this.options.yearFormatter(year)+"</option>");}
select.attr("value",this.getYear());},_populateMonth:function(){var year=this.getYear();var min=this.options.min;var max=this.options.max;var minmonth=(year==_year(min)?_month(min):0);var maxmonth=(year==_year(max)?_month(max):11);var select=this._monthSelect();select.empty();for(var month=minmonth;month<=maxmonth;month++)
select.append("<option value=\""+month+"\">"
+this.options.monthFormatter(12*year+month)+"</option>");select.attr("value",this.getMonth());},getYear:function(){return _year(this.options.value);},getMonth:function(){return _month(this.options.value);},_monthSelect:function(){return this.element.find("select:first");},_yearSelect:function(){return this.element.find("select:last");},_changeCount:0,_userChange:false,_monthSelectChangeHandler:function(event){var sel=event.data.dateselector;if(sel._changeCount)return;var m=sel._monthSelect().attr("value")|0;sel._userChange=true;if(sel.getMonth()!=m)
sel._setOption("value",sel.getYear()*12+m);sel._userChange=false;},_yearSelectChangeHandler:function(event){var sel=event.data.dateselector;if(sel._changeCount)return;var y=sel._yearSelect().attr("value")|0;sel._userChange=true;if(sel.getYear()!=y)
sel._setOption("value",y*12+sel.getMonth());sel._userChange=false;sel._changeCount++;sel._populateMonth();sel._changeCount--;},destroy:function(){$.Widget.prototype.destroy.apply(this,arguments);}});})(jQuery);
//---
var indexdata,exchangeratedata,economicdata;var progressCount=0;var uiComplete=false;var maxProgress=1;var userData={minDate:0,maxDate:1,startDate:0,endDate:1,hoverDate:undefined,logScale:false,volatilityFall:0.1,volatilityIndex:0,volatilityStats:{numFalls:NaN,avgSize:NaN,avgDecline:NaN,avgRecovery:NaN},datasets:{index:null,economic:null,exchangerate:null,volatility:null},currentDataset:null};var seriesColors=["#4087af","#d37644","#fdb913","#4d577a","#774a1e","#867da3","#a29127","#85b456"];function getDisplayMode(){return(typeof(window["displaymode"])=="undefined")?"advanced":displaymode;}
$.parseXML=function(xml){if(window.ActiveXObject&&window.GetObject){var dom;var progIDs=new Array("Msxml2.DOMDocument.6.0","Msxml2.DOMDocument.5.0","Msxml2.DOMDocument.4.0","Msxml2.DOMDocument.3.0","MSXML2.DOMDocument","MSXML.DOMDocument");for(var i in progIDs){try{dom=new ActiveXObject(progIDs[i]);}catch(e){};if(dom!=undefined)
break;}
if(dom!=undefined){dom.async="false";dom.loadXML(xml);return dom;}}
if(window.DOMParser)
return new DOMParser().parseFromString(xml,'text/xml');throw new Error('No XML parser available');};$.formatDate=function(datevalue,type,endOfMonth){var months=["January","February","March","April","May","June","July","August","September","October","November","December"];var date=new Date((datevalue/12)|0,datevalue%12+(endOfMonth?1:0),endOfMonth?0:1);switch(type){default:case"long":return date.getDate()+" "+months[date.getMonth()]+" "+date.getFullYear();case"medium":return date.getDate()+" "+months[date.getMonth()].substr(0,3)+" "+date.getFullYear();}}
$.formatNumber=function(value,decimals){var result="";if(value!=undefined&&!isNaN(value)){if(value==0)
return value.toFixed(decimals);var abs=Math.abs(value);var digits=abs.toFixed(decimals);if(decimals>0){result=digits.substr(digits.length-(decimals+1));digits=digits.substr(0,digits.length-(decimals+1));}
while(digits.length>3){result=","+digits.substr(digits.length-3)+result;digits=digits.substr(0,digits.length-3);}
result=digits+result;if(value<0)
result="-"+result;}
return result;}
$.formatDollar=function(value,decimals){var number=$.formatNumber(Math.abs(value),decimals);if(number=="")return"";return(value<0?"-":"")+"$"+number;}
$.formatPercent=function(value,decimals){var number=$.formatNumber(100*value,decimals);if(number=="")return number;return $.formatNumber(100*value,decimals)+"%";}
function DataSet(id,dataXml,options){this.addSeries=function(series){this.series.push(series);this.showOnChart.push(true);this.showInTable.push(true);if(this.minDate>series.minDate)
this.minDate=series.minDate;if(this.maxDate<series.maxDate)
this.maxDate=series.maxDate;}
this.getSeries=function(id){if(!this.series)
return null;for(var i=0;i<this.series.length;i++)
if(this.series[i].id==id)
return this.series[i];return null;}
this.buildChartData=function(startDate,endDate,startValue){var fn;switch(this.type){case"growth":fn="growthData";break;default:case"return":fn="returnData";break;}
this.chartData=[];this.rawData=[];this.commonEndDate=endDate;for(var i=0;i<this.series.length;i++){var data=this.series[i][fn](startDate,endDate,startValue);if(this.showOnChart[i])
this.chartData.push(new PlotSeries(data,seriesColors[i]));this.rawData.push(data);if(data.length)
this.commonEndDate=Math.min(this.commonEndDate,startDate+data.length-1);}}
this.id=id;this.minDate=Number.MAX_VALUE;this.maxDate=Number.MIN_VALUE;this.series=[];this.showOnChart=[];this.showInTable=[];this.type=options&&options.type?options.type:"growth";this.name=options&&options.name?options.name:"";this.categoryName=options?options.categoryName:"";this.formatFunction=!options||options.formatFunction==undefined?$.formatNumber:options.formatFunction;this.precision=!options||options.precision==undefined?2:options.precision;if(dataXml){var dataSeries=dataXml.getElementsByTagName("s");for(var i=0;i<dataSeries.length;i++){this.addSeries(new PerformanceIndex(dataSeries[i]));}}}
function PerformanceIndex(seriesXml){this.minDate=Number.MAX_VALUE;this.maxDate=Number.MIN_VALUE;this.id=seriesXml.getAttribute("id");this.name=seriesXml.getAttribute("n");this.resolution=(this.id=="CPI")?3:1;this.annualise=(this.id=="CPI");this.dataCache={growthData:{key:"",value:null},returnData:{key:"",value:null},volatilityData:{key:"",value:null}};var date;var returnElements=seriesXml.getElementsByTagName("r");for(var j=0;j<returnElements.length;j++){var elem=returnElements[j];date=new Number(elem.getAttribute("t"));if(this.minDate>date)this.minDate=date;if(this.maxDate<date)this.maxDate=date;}
this.minDate-=this.resolution-1;this.rates=new Array(this.maxDate-this.minDate+1);for(var j=0;j<returnElements.length;j++){var elem=returnElements[j];date=new Number(elem.getAttribute("t"))-(this.resolution-1);var rate=new Number(elem.getAttribute("v"));if(this.resolution>1)
rate=Math.pow(1+rate*this.resolution/12,1/this.resolution)-1;for(var k=0;k<this.resolution;k++)
this.rates[date+k-this.minDate]=rate;}
this.growthData=function(startDate,endDate,startValue){if(startDate<this.minDate-1)
return[];if(endDate>this.maxDate)
endDate=this.maxDate;var key=startDate.toString()+"|"+endDate.toString()+"|"+startValue.toString();if(this.dataCache.growthData.key==key)
return this.dataCache.growthData.value;var growth=startValue;var result=new Array(endDate-startDate+1);for(var j=0;j<this.resolution;j++)
result[j]=[startDate,growth];for(var date=startDate+1;date<=endDate;date++){var rate=this.rates[date-this.minDate];if(rate==undefined)
break;growth*=1+rate;result[date-startDate]=[date,growth];}
this.dataCache.growthData.key=key;this.dataCache.growthData.value=result;return result;}
this.returnData=function(startDate,endDate,startValue){var date;var dataStartDate;if(endDate>this.maxDate)
endDate=this.maxDate;var key=startDate.toString()+"|"+endDate.toString()+"|"+startValue.toString();if(this.dataCache.returnData.key==key)
return this.dataCache.returnData.value;var result=new Array(endDate-startDate+1);for(dataStartDate=startDate;dataStartDate<this.minDate;dataStartDate++)
result[dataStartDate-startDate]=[dataStartDate,NaN];for(date=dataStartDate;date<=endDate;date++){var rate=this.rates[date-this.minDate];if(this.annualise)
rate=Math.pow(1+rate,12)-1;result[date-startDate]=[date,rate];}
this.dataCache.returnData.key=key;this.dataCache.returnData.value=result;return result;}
this.volatilityData=function(minFall,startValue,startDate,endDate){if(startDate<this.minDate-1)
return[];if(endDate>this.maxDate)
endDate=this.maxDate;var key=startDate.toString()+"|"+endDate.toString()+"|"+startValue.toString();if(this.dataCache.volatilityData.key==key)
return this.dataCache.volatilityData.value;var result=[];var data=this.growthData(startDate,endDate,startValue);var floor=startValue;var peak=startValue;var floorDate=startDate;var fallDate=startDate;var inSlump=false;for(var month=startDate+1;month<=endDate;month++){var value=data[month-startDate][1];if(floor>value){floor=value;floorDate=month;}
if(inSlump){if(month==endDate||value>=peak){period=new VolatilityPeriodData();period.category="Fall";period.text=$.formatPercent(1-floor/peak)+" fall";period.start=fallDate;period.end=floorDate;period.peak=peak;period.floor=floor;period.complete=value>=peak;result.push(period);period=new VolatilityPeriodData();period.category="Recovery";period.text="In recovery from "+$.formatPercent(1-floor/peak)+" fall";period.start=floorDate;period.end=month;period.peak=peak;period.floor=floor;period.complete=value>=peak;result.push(period);floor=peak=value;floorDate=fallDate=month;inSlump=false;}}
else{if(floor<=peak*(1-minFall)){inSlump=true;}
else if(peak<=value){floor=peak=value;floorDate=fallDate=month;}}}
this.dataCache.volatilityData.key=key;this.dataCache.volatilityData.value=result;return result;}}
PlotSeries=function(points,color){this.data=points;this.hoverable=true;this.color=color;}
VolatilityPeriodData=function(start,end,category,text){this.start=start;this.end=end;this.category=category;this.text=text;this.peak=NaN;this.floor=NaN;this.size=function(){return 1-this.floor/this.peak;}
this.length=function(){return this.end-this.start;}}
$(function(){$.ajax({url:getDisplayMode()=="simple"?"mini-indexdata-10yrs.xml":"mini-indexdata.xml",method:"GET",dataType:"text",error:function(a,b,c){alert(b)},success:function(data){var xml=$.parseXML(data);var dataElem=xml.getElementsByTagName("d");for(var j=0;j<dataElem.length;j++){switch(dataElem[j].getAttribute("id")){case"index":indexdata=dataElem[j];break;case"exchangerate":exchangeratedata=dataElem[j];break;case"economic":economicdata=dataElem[j];break;}}
processDataSet("index");processDataSet("exchangerate");processDataSet("economic");loadProgress();}});});function loadProgress(){progressCount++;if(progressCount==maxProgress){dataComplete();uiReady();}}
function uiReady(){$("#tabs").tabs({show:function(){if(progressCount==maxProgress)refresh();}});$("#performanceSelector").bind("click",performanceSelectorChange);$("#volatilitySelector").bind("click",volatilitySelectorChange);if(getDisplayMode()!="simple"){$(".slider").slider({animate:true,range:true,change:sliderChange,values:[0,1]});$(".startSelector").dateselector({lastday:false,change:startSelectorChanged});$(".endSelector").dateselector({change:endSelectorChanged});}
$(".logscaleCheckbox").click(logscaleCheckboxChange);$(".assumptionsLink").click(showAssumptionsClickHandler);$.ajax({url:"assumptions.html",complete:function(request,status){var message=request.responseText;if(message==undefined||message==null||message=="")
message="<p>Error communicating with the server.  The notes & assumptions text failed to load.</p>";$("#assumptions").append(message);}});$(".assumptions-wrapper input").button().click(function(){$(".assumptions-wrapper").css("display","none");$("#pagePerformance, #pageVolatility").css("display","block");});uiComplete=true;invalidate();}
function processDataSet(dataset){var data,options;switch(dataset){case"index":data=indexdata;options={type:"growth",categoryName:"Asset class",name:"Growth of $10,000 invested {startDate}",formatFunction:$.formatDollar,precision:0};break;case"economic":data=economicdata;options={type:"return",categoryName:"Indicator",name:"Economic indicators",formatFunction:$.formatPercent};break;case"exchangerate":data=exchangeratedata;options={type:"return",categoryName:"Exchange rate",name:"Exchange rates",formatFunction:$.formatDollar,precision:4};break;default:return;}
processIndexData(dataset,data,options);}
function processIndexData(dataset,data,options){userData.datasets[dataset]=new DataSet(dataset,data,options);}
function dataLoaded(){processDataSet("index");processDataSet("exchangerate");processDataSet("economic");loadProgress();}
function dataComplete(){indexdata=economicdata=exchangeratedata=null;userData.currentDataset=userData.datasets.index;userData.startDate=userData.currentDataset.minDate-1;userData.endDate=userData.currentDataset.maxDate;var ds=userData.datasets;ds.volatility=new DataSet("volatility",undefined,{type:"growth",name:"Growth of $10,000 invested {startDate}",formatFunction:$.formatDollar,precision:0});ds.volatility.addSeries(ds.index.getSeries("AusEq"));ds.volatility.addSeries(ds.index.getSeries("IntEq"));ds.volatility.addSeries(ds.index.getSeries("Cash"));ds.volatility.addSeries(ds.economic.getSeries("CPI"));refresh();$("#vanguardIndexChart").css("display","block");}
function setControlValues(){$("#performanceSelector").attr("value",userData.currentDataset.id);if(getDisplayMode()=="simple"){userData.endDate=Math.min(userData.endDate,userData.currentDataset.maxDate);userData.startDate=userData.endDate-12*10;}
else{userData.startDate=Math.max(userData.startDate,userData.currentDataset.minDate-1);userData.endDate=Math.min(userData.endDate,userData.currentDataset.maxDate);$(".slider").slider("option","min",userData.currentDataset.minDate-1).slider("option","max",userData.currentDataset.maxDate).slider("option","values",[userData.startDate,userData.endDate]);$(".startSelector, .endSelector").dateselector("option","min",userData.currentDataset.minDate).dateselector("option","max",userData.currentDataset.maxDate);$(".startSelector").dateselector("option","value",userData.startDate+1);$(".endSelector").dateselector("option","value",userData.endDate);}
$(".logscaleCheckbox").attr("checked",userData.logScale);}
function performanceSelectorChange(){var value=$("#performanceSelector").attr("value");if(userData.currentDataset.id!=value){userData.currentDataset=userData.datasets[value];invalidate();}}
function volatilitySelectorChange(){var value=$("#volatilitySelector").attr("value");var series=userData.datasets.volatility.series;if(series[userData.volatilityIndex].id!=value){for(var i=0;i<series.length;i++){if(series[i].id==value){userData.volatilityIndex=i;invalidate();break;}}}}
function logscaleCheckboxChange(){var value=$(this).attr("checked");if(userData.logScale!=value){userData.logScale=value;invalidate();}}
function sliderChange(){var values=$(this).slider("option","values");var changed=false;if(userData.startDate!=values[0]){userData.startDate=values[0];changed=true;}
if(userData.endDate!=values[1]){userData.endDate=values[1];changed=true;}
if(userData.startDate==userData.endDate){if(userData.endDate==userData.currentDataset.maxDate)
userData.startDate--;else
userData.endDate++;changed=true;}
if(changed)
invalidate();}
function startSelectorChanged(value){if(userData.startDate!=value-1){userData.startDate=value-1;if(userData.endDate<=userData.startDate)
userData.endDate=userData.startDate+1;invalidate();}}
function endSelectorChanged(value){if(userData.endDate!=value){userData.endDate=value;if(userData.startDate>=userData.endDate)
userData.startDate=userData.endDate-1;invalidate();}}
var invalidateTimeout=null;function invalidate(){invalidateTimeout=setTimeout(refresh,50);}
function refresh(){invalidateTimeout=null;if(uiComplete){setControlValues();outputCurrentDisplay();$(".slider").slider("enable");}}
function outputCurrentDisplay(){switch($("#tabs").tabs("option","selected")){case 0:outputPerformance();break;case 1:outputVolatility();break;}}
function outputPerformance(){plotPerformance();writePerformanceLegend();}
function plotPerformance(){var dataset=userData.currentDataset;var endDate=userData.endDate;var startDate=userData.startDate;dataset.buildChartData(startDate,endDate,10000);var data=dataset.chartData;var options=cloneObject(chartOptions);options.yaxis.tickFormatter=function(number,axis){return dataset.formatFunction(number,dataset.precision);};if(dataset.type=='growth'&&userData.logScale){options.yaxis=logYAxis;}
var placeholder=$("#chartPerformance .chart");placeholder.unbind().empty();$.plot(placeholder,data,options);placeholder.bind("plothover",function(event,pos,item){userData.hoverDate=pos.x|0;updateLegendTimeout=setTimeout(updatePerformanceLegend,50);event.stopPropagation();}).mouseout(function(event){userData.hoverDate=userData.currentDataset.commonEndDate;updateLegendTimeout=setTimeout(updatePerformanceLegend,50);});var title=dataset.name.replace(/{startDate}/,$.formatDate(userData.startDate+1,"medium",false));$("#chartPerformance .chartTitle").empty().append("<strong>"+title+"</strong>");}
var legendUpdateTimeout=null;function updatePerformanceLegend(){legendUpdateTimeout=null;writePerformanceLegend();}
function writePerformanceLegend(){var data=userData.currentDataset;var endDate=userData.hoverDate;if(endDate==undefined||endDate<userData.startDate||endDate>data.commonEndDate)
endDate=data.commonEndDate;var table=$("#performanceTable");table.empty().append("<table class='dataTable' />");table=table.children().first();if(data.type=="growth")
table.append("<tr><th class='firstColumn' colspan='2'>"
+data.categoryName
+"</th><th>Value at<br/>"+
$.formatDate(endDate,"medium",true)+"</th><th>Return since<br/>"
+$.formatDate(userData.startDate+1,"medium",false)
+"</th></tr>");else
table.append("<tr><th class='firstColumn' colspan='3'>"
+data.categoryName
+"</th><th>Value at<br/>"+
$.formatDate(endDate,"medium",true)+"</th></tr>");var dateIndex=endDate-userData.startDate;var i=0;$.each(data.series,function(index,value){if(data.showInTable[i]){var cd=data.rawData[index];if(cd.length>dateIndex){if(data.type=="growth"){var growth=cd[dateIndex][1];var base=cd[0][1];var rate=Math.pow(growth/base,12/(endDate-userData.startDate))-1;table.append("<tr><td class='firstColumn' style='border-right: 0px none; padding-right: 1px; width: 26px'>"
+"<div class=\"legendMarker\" style=\"background-color: "+seriesColors[i]+"\" />"
+"</td><td class='firstColumn' style='border-left: 0px none; padding-left: 0px;' >"
+value.name+"</td><td>"+$.formatDollar(growth,0)
+"</td><td>"+$.formatPercent(rate,1)+" p.a.</td></tr>");}
else{var rate=cd[dateIndex][1];table.append("<tr><td class='firstColumn' style='border-right: 0px none; padding-right: 1px; width: 26px'>"
+"<div class=\"legendMarker\" style=\"background-color: "+seriesColors[i]+"\" />"
+"</td><td class='firstColumn' style='border-left: 0px none; padding-left: 0px; border-right: 0px none;' >"
+value.name+"</td><td style='border-left: 0px none;'>"
+"</td><td>"+data.formatFunction(rate,data.precision)
+"</td></tr>");}}}
i++;});}
function outputVolatility(){prepareVolatility();plotVolatility();writeVolatilityLegend();}
function prepareVolatility(){dataset=userData.datasets.volatility;userData.volatilityData=dataset.series[userData.volatilityIndex].volatilityData(userData.volatilityFall,10000,userData.startDate,userData.endDate);for(var i=0;i<2;i++){dataset.showOnChart[i]=dataset.showInTable[i]=(i==userData.volatilityIndex);}
var volatilityData=userData.volatilityData;var numFalls=(volatilityData.length/2)|0;if(numFalls&&!volatilityData[volatilityData.length-1].complete)
numFalls--;var avgSize=0;var avgDecline=0;var avgRecovery=0;for(i=0;i<numFalls;i++){avgSize+=volatilityData[i*2].size();avgDecline+=volatilityData[i*2].length();avgRecovery+=volatilityData[i*2+1].length();}
if(numFalls){avgSize/=numFalls;avgDecline/=numFalls;avgRecovery/=numFalls;}
else
avgSize=avgDecline=avgRecovery=NaN;userData.volatilityStats={numFalls:numFalls,avgSize:avgSize,avgDecline:avgDecline,avgRecovery:avgRecovery};}
function plotVolatility(){var dataset=userData.datasets.volatility;var endDate=userData.endDate;var startDate=userData.startDate;dataset.buildChartData(startDate,endDate,10000);var data=dataset.chartData;var options=cloneObject(chartOptions);options.yaxis.tickFormatter=function(number,axis){return dataset.formatFunction(number,dataset.precision);};if(dataset.type=='growth'&&userData.logScale){options.yaxis=logYAxis;}
var volatilityData=userData.volatilityData;var color1="#f3e7da",color2="#dae7f3";var markings=[];for(var i=0;i<volatilityData.length;i++){var d=volatilityData[i];markings.push({xaxis:{from:d.start,to:d.end},color:(d.category=="Fall"?color1:color2)});}
options.grid.markings=markings;var placeholder=$("#chartVolatility .chart");placeholder.unbind().empty();$.plot(placeholder,data,options);placeholder.bind("plothover",function(event,pos,item){userData.hoverDate=pos.x|0;updateLegendTimeout=setTimeout(updateVolatilityLegend,50);event.stopPropagation();}).mouseout(function(event){userData.hoverDate=userData.currentDataset.commonEndDate;updateLegendTimeout=setTimeout(updateVolatilityLegend,50);});var title=dataset.name.replace(/{startDate}/,$.formatDate(userData.startDate+1,"medium",false));$("#chartVolatility .chartTitle").empty().append("<strong>"+title+"</strong>");}
function updateVolatilityLegend(){legendUpdateTimeout=null;writeVolatilityLegend();}
function writeVolatilityLegend(){var data=userData.datasets.volatility;var endDate=userData.hoverDate;if(endDate==undefined||endDate<userData.startDate||endDate>data.commonEndDate)
endDate=data.commonEndDate;var tables=$("#volatilityTable");tables.empty().append("<table class='dataTable' />").append("<table class='dataTable' />");var table=tables.children(":first");table.append("<tr><th class='firstColumn' colspan='2'></th><th>Value at<br/>"+
$.formatDate(endDate,"medium",true)+"</th>"
+(data.type=="growth"?"<th>Return since<br/>"
+$.formatDate(userData.startDate+1,"medium",false)
+"</th></tr>":""));var dateIndex=endDate-userData.startDate;var i=0;$.each(data.series,function(index,value){if(data.showInTable[i]){var cd=data.rawData[index];if(cd.length>dateIndex){if(data.type=="growth"){var growth=cd[dateIndex][1];var base=cd[0][1];var rate=Math.pow(growth/base,12/(endDate-userData.startDate))-1;table.append("<tr><td class='firstColumn' style='border-right: 0px none; padding-right: 1px; width: 26px'>"
+"<div class=\"legendMarker\" style=\"background-color: "+seriesColors[i]+"\" />"
+"</td><td class='firstColumn' style='border-left: 0px none; padding-left: 0px;' >"
+value.name+"</td><td>"+$.formatDollar(growth,0)
+"</td><td>"+$.formatPercent(rate,1)+" p.a.</td></tr>");}
else{var rate=cd[dateIndex][1];table.append("<tr><td class='firstColumn'>"+value.name+"</td><td>"+data.formatFunction(rate,data.precision)
+"</td></tr>");}}}
i++;});vd=userData.volatilityStats;table=tables.children(":last");table.append("<tr><th class='firstColumn' colspan='3'>Market declines greater than "
+$.formatPercent(userData.volatilityFall)+" over period</th></tr>").append("<tr><td class='firstColumn' colspan='2'>Number of falls</td><td>"+vd.numFalls+"</td></tr>").append("<tr><td class='firstColumn' colspan='2'>Average size of fall</td><td>"+$.formatPercent(vd.avgSize,1)+"</td></tr>").append("<tr><td class='firstColumn' colspan='2'>Average decline</td><td>"+$.formatNumber(vd.avgDecline,1)+" months</tr>").append("<tr><td class='firstColumn' colspan='2'>Average recovery</td><td>"+$.formatNumber(vd.avgRecovery,1)+" months</tr>");}
var chartOptions={lines:{show:true},points:{show:false},grid:{borderWidth:1,borderColor:"#dddddd",tickColor:"#eeeeee",hoverable:true,autoHighlight:false,backgroundColor:{colors:["#ffffff","#f3f3f3"]}},xaxis:{tickDecimals:0,ticks:xAxisTickFunction,tickFormatter:xAxisTickFormatter},yaxis:{tickFormatter:function(number,axis){return $.formatNumber(number,0);}},series:{lines:{lineWidth:1},shadowSize:0},colors:seriesColors,hooks:{drawOverlay:function(plot,context){}},crosshair:{mode:"x",color:"#666666",lineWidth:1}};var logYAxis={transform:function(v){return Math.log(v);},inverseTransform:function(v){return Math.exp(v);},ticks:function(axis){var result=[];for(var i=axis.min;i<axis.max*10;i*=10){result.push(i);}
return result;},min:1000,tickFormatter:function(number,axis){return $.formatNumber(number,0);}};function xAxisTickFunction(axis){var v=((axis.max-axis.min)/6)|0;if(v<=6)v=((axis.max-axis.min)/4)|0;if(v==0)return[];var min=axis.min;if(v>6){v=Math.max(((((v+1)/12)|0)+1)*12,12);min=((min/12)|0)*12;if(min<axis.min)min+=12;}
else{if(v==5)v++;if(v==4)v--;min=((min/v)|0)*v;if(min<axis.min)min+=v;}
var ticks=[];for(var i=min;i<axis.max;i+=v)
ticks.push(i);return ticks;}
function xAxisTickFormatter(number,axis){var t=((number/12)|0).toString();var ticks=this.ticks(axis);if(ticks&&ticks.length>1&&ticks[1]-ticks[0]<12){t=("0"+((number%12)+1).toString()+"/"+t);t=t.substr(t.length-7);}
return t;}
function showAssumptionsClickHandler(event){event.preventDefault();showAssumptions();}
function showAssumptions(){$("#pagePerformance, #pageVolatility").css("display","none");$(".assumptions-wrapper").css("display","block");}
cloneObject=function(object){var newObj=(object instanceof Array)?[]:{};for(var i in object){if(object[i]&&typeof object[i]=="object"){newObj[i]=cloneObject(object[i]);}
else newObj[i]=object[i]}
return newObj;};
