var port_equity_series=[];var port_equity_comm_series=[];var sp_equity_series=[];var equity_delta=[];var compSys=new Object;var deltaSeries=new Object;var monteIndex=[];var monteSeries=[];var mainPercent;var eqChart;var sp_eq_scale;document.observe("dom:loaded",function(){getChartData();if(document.getElementById('user_profile_link'))
{$j('#user_profile_link').cluetip({onShow:function(){},attribute:'name',activation:'click',cluetipClass:'jtip',dropShadow:false,sticky:true,closeText:'<font style="color:red">X</font>',closePosition:'title',arrows:true,local:false,leftOffset:10,topOffset:5,width:'520px',positionBy:'auto',ajaxCache:false,onHide:function(){startcrop();}});}
$j('#share_button').cluetip({onShow:function(){changeFBTWPreview('simple');},attribute:'name',activation:'click',cluetipClass:'jtip',dropShadow:false,sticky:true,closeText:'<font style="color:red">X</font>',closePosition:'title',arrows:true,local:false,leftOffset:10,topOffset:5,width:'612px',positionBy:'auto',onHide:function(){startcrop();},ajaxCache:false});if((typeof share_prompt_text!="undefined")&&share_prompt_text)
{show_notify(share_prompt_text,'info',0);}});function cloneAndMultiplex(systemid)
{var content='<form name="cloneForm" id="cloneForm"><input type="hidden" name="system_id" value="'+systemid+'">New Owner ID (defaults to current owner):<input type="text" name="owner_id"><br/><br/>WL Site ID (optional):<input type="text" name="wl_site_id"><br/><br/>Scale to (default is 1 = 100%):<input type="text" name="scale"></form>';var actionJS='var req = $("cloneForm").serialize();var url="/cgi-perl/system/utils.mpl?rm=doCloneAndMultiplex&" + req;pendURL.push(url);';q_confirm('plain','Clone and Multiplex',content,450,'cloneAndMultiplex',actionJS);}
function makeWLPrivate(systemid)
{var content='<form name="privateForm" id="privateForm"><input type="hidden" name="system_id" value="'+systemid+'">WL Site ID:<input type="text" name="wl_site_id"></form>';var actionJS='var req = $("privateForm").serialize();var url="/cgi-perl/system/utils.mpl?rm=doWLPrivate&" + req;pendURL.push(url);';q_confirm('plain','Make Private to WL Site',content,450,'makeWLPrivate',actionJS);}
function changeFBTWPreview(type,val,extra)
{var sys=gSystemName;var sysid=gSystemID;var fb_text="Check out the investment fund I am managing!";var tw_text="Check out my <span class='tw_link'>#Collective2 #tradingsystem</span>, "+sys+". <br/>";var change_word=(val>0)?'Gains of':'Lost';var tw_change_word=(val>0)?'Gains':'Losses';if((type=='inception')||(type=='last_7')||(type=='last_30')||(type=='last_90'))
{var when_string;if(type=='inception')
{when_string='since inception';$('recurring_options').style.display='none';}
else if(type=='last_7')
{when_string='in the past 7 days';$('recurring_options').style.display='block';$('only_pos_recurring').style.display='block';$('recurring_freq').innerHTML='once every 7 days';}
else if(type=='last_30')
{when_string='in the past 30 days';$('recurring_options').style.display='block';$('only_pos_recurring').style.display='block';$('recurring_freq').innerHTML='once every 30 days';}
else if(type=='last_90')
{when_string='in the past 90 days';$('recurring_options').style.display='block';$('only_pos_recurring').style.display='block';$('recurring_freq').innerHTML='once every 90 days';}
fb_text+="<br/>"+change_word+" "+val+"% "+when_string+".";tw_text+=tw_change_word+" of "+val+"% "+when_string+".";}
else if(type=='simple')
{tw_text+=" Trade it at your brokerage!";$('recurring_options').style.display='none';}
else if(type=='num_subs')
{fb_text+=(val==1)?" I now have my first subscriber.":" "+val+" people have now subscribed.";tw_text+=(val==1)?"Just gained first subscriber!":"Now has "+val+" subscribers!";$('recurring_options').style.display='none';}
tw_text+="<br/><span class='tw_link'>http://collective2.com/system"+sysid+"</span>";fb_text+="<br/>Follow my trades in your brokerage account.";var fb_title=document.title;var fb_right_text="<div class='fb_link'>"+fb_title+"</div>";fb_right_text+="<div class='fb_subtle'>http://collective2.com/system"+sysid+"</div>";var fb_desc=$j('meta[name=description]').attr("content");fb_desc=fb_desc?(fb_desc.substr(0,300)+'...'):'';fb_right_text+="<br/><div style='margin-top:5px;width:335px;' class='fb_subtle'>"+fb_desc+"</div>";$('fb_preview_text').innerHTML=fb_text;$('fb_preview_right').innerHTML=fb_right_text;$('fb_name').innerHTML=$('providername').innerHTML;$('tw_name').innerHTML=$('providername').innerHTML;$('tw_preview_text').innerHTML=tw_text;}
function createPost(which)
{var recur=0;var recur_pos=0;var sysid=gSystemID;var type=$j("input[name='share_type']:checked").val();if((type=="started_comp")||(type=="last_7")||(type=="last_30")||(type=="last_90"))
{if($('make_recurring').checked==true)
{recur=1;if($('only_pos_recurring').checked==true)
{recur_pos=1;}}}
var url="/cgi-perl/system/utils.mpl?rm=createSharePost&to="+which+"&type="+type+"&recur="+recur+"&recur_only_pos="+recur_pos+'&sysid='+sysid;pendURL.push(url);}
function addChartData(add_sys_id,percent)
{if(compSys[add_sys_id]||(add_sys_id==gSystemID))
{new Effect.Opacity('chartcontainer',{to:1});return;}
var chartDataURL='/c2equity'+add_sys_id+'?addSys=1';var count=0;var sys_name;$j.get(chartDataURL,function(data){var eq_data=data.split(';');sys_name=eq_data[1];var equity_series=[];var tbase=port_equity_series[0][0];var scale;var lastDate='';var lastEq;$j.each(eq_data[0].split('|'),function(i,line){var point=line.split(',');if(parseInt(point[0])>=tbase)
{if(!scale)
{for(p in port_equity_series)
{if(port_equity_series[p][0]>parseInt(point[0]))
{scale=port_equity_series[p][1]/parseFloat(point[1]);break;}}}
var scaledEq=(parseFloat(point[1])*scale);equity_series.push([parseInt(point[0]),scaledEq]);var d=new Date(parseInt(point[0]));var dateString=d.getFullYear()+'-'+d.getMonth()+'-'+d.getDate();if(dateString!=lastDate)
{if(lastEq)
{if(!deltaSeries[add_sys_id])
{deltaSeries[add_sys_id]=new Object;}
deltaSeries[add_sys_id][dateString]=(scaledEq-lastEq)/lastEq;}
lastEq=scaledEq;lastDate=dateString;}}});if(!Object.size(compSys))
{createCombined();}
compSys[add_sys_id]=new Object;compSys[add_sys_id]['index']=eqChart.series.length;compSys[add_sys_id]['name']=sys_name;if(percent>0)
{compSys[add_sys_id]['percent']=percent;}
saveBalance();eqChart.addSeries({id:'comp_'+add_sys_id,name:sys_name,zIndex:6000,data:equity_series,showInLegend:true},0);eqChart.redraw();new Effect.Opacity('chartcontainer',{to:1});});}
function createCombined()
{eqChart.addSeries({id:'combined',name:'Combined Portfolio',zIndex:7000,data:'',showInLegend:true,dashStyle:'shortDot',color:'#ECAD36',lineWidth:3},0);eqChart.get('system_comm').hide();}
function drawCombined()
{var numSeries=Object.size(deltaSeries);var ebase=port_equity_series[0][1];var lastEq=new Object;var series=[];var used=0;var chosen=0;for(comp in compSys)
{if(compSys[comp]['percent'])
{used+=compSys[comp]['percent'];chosen++;}}
if(mainPercent)
{used+=mainPercent;chosen++;}
var remainder_size=(used>=100)?0:(100-used)/((Object.size(compSys)+1)-chosen);remainder_size=parseInt(remainder_size);for(day in deltaSeries[gSystemID])
{var baseDelta=deltaSeries[gSystemID][day];var totalEq=0;var baseEq;var baseEqU;if(lastEq[gSystemID])
{baseEq=lastEq[gSystemID]+(lastEq[gSystemID]*deltaSeries[gSystemID][day]);baseEqU=lastEq[gSystemID+'u']+(lastEq[gSystemID+'u']*deltaSeries[gSystemID][day]);}
else
{var mult=(mainPercent||remainder_size)*.01;baseEq=ebase*mult;baseEqU=ebase;}
lastEq[gSystemID]=baseEq;lastEq[gSystemID+'u']=baseEqU;for(comp in compSys)
{if(deltaSeries[comp][day])
{var thisEq;if(lastEq[comp])
{thisEq=lastEq[comp]+(lastEq[comp]*deltaSeries[comp][day]);}
else
{var mult=(compSys[comp]['percent']||remainder_size)*.01;thisEq=baseEqU*mult;}
lastEq[comp]=thisEq;totalEq+=thisEq;}
else if(lastEq[comp])
{totalEq+=lastEq[comp];}
else
{var thisEq;var mult=(compSys[comp]['percent']||remainder_size)*.01;thisEq=baseEqU*mult;totalEq+=thisEq;}}
totalEq+=baseEq;var date_split=day.split('-');var d=Date.UTC(date_split[0],date_split[1],date_split[2],0,0,0,0);series.push([d,totalEq]);}
eqChart.get('combined').setData(series);}
function getChartData(plan,is_reload)
{var use_sys_id=gSystemID;var chartDataURL='/c2equity'+use_sys_id+'?RAND='+Math.random()+'&';if(plan)
{chartDataURL+='setplan='+plan+'&';}
if(forceChartRecache)
{chartDataURL+='force=1&'}
var count=0;$j.get(chartDataURL,function(data){var eq_data=data.split(';');sp_eq_scale=eq_data[1];port_equity_series=[];port_equity_comm_series=[];sp_equity_series=[];var lastDate='';var lastEq;$j.each(eq_data[0].split('|'),function(i,line){var point=line.split(',');port_equity_series.push([parseInt(point[0]),parseFloat(point[1])]);port_equity_comm_series.push([parseInt(point[0]),parseFloat(point[2])]);sp_equity_series.push([parseInt(point[0]),parseFloat(point[3])]);count++;var d=new Date(parseInt(point[0]));var dateString=d.getFullYear()+'-'+d.getMonth()+'-'+d.getDate();if(dateString!=lastDate)
{if(lastEq)
{if(!deltaSeries[gSystemID])
{deltaSeries[gSystemID]=new Object;}
deltaSeries[gSystemID][dateString]=(parseFloat(point[1])-lastEq)/lastEq;}
lastEq=parseFloat(point[1]);lastDate=dateString;}});if(count>1)
{drawC2Chart(plan);if(gCurrentChartType=='Monte%20Carlo')
{drawMonteCarlo();}
drawMovingAverage(gPriorTAval);var compURL='/cgi-perl/system/utils.mpl?rm=getChartComp&main='+gSystemID;$j.get(compURL,function(data){$j.each(data.split('|'),function(i,c){var spv=c.split('=');if(spv[0]=='main')
{if(spv[1]>0)
{mainPercent=spv[1];}}
else
{var perc=0;if(spv[1])
{perc=spv[1];}
if(spv[0])
{addChartData(spv[0],perc);}}});});if(is_reload)
{loadMonthlyReturns(gSystemID,'Normal');redrawTradeListInPlace(gSystemID,plan,1);}}
else
{$('chartdiv').innerHTML='<img src="/images/c2_no_chart.png" alt="This is a new system.  Performance is currently being tracked, and will be charted here once we have more data." />';}});}
function drawC2Chart(new_plan)
{new Effect.Opacity('chartcontainer',{to:1});$('chartSelMonte').className='chartOFF';$('chartSelStandard').className='chartON';if(typeof eqChart!="undefined")
{eqChart.destroy();}
var titleY=$j.browser.msie?260:265;var use_animation=new_plan?false:true;eqChart=new Highcharts.StockChart({chart:{renderTo:'chartdiv',zoomType:'x',plotBackgroundColor:'#F8FAFD',plotBorderColor:'#aaa',plotBorderWidth:1,plotShadow:true},title:{text:'Hypothetical Results',floating:true,align:'center',y:titleY,style:{color:'#999',fontSize:'12px'}},plotOptions:{series:{animation:use_animation,compare:'value',dataGrouping:{smoothed:true},events:{hide:function(event){var ser_id=this.options.id;if(ser_id=='combined')
{eqChart.get('combined').show();var winContent=balanceContent();if(qUtilWin['combined_bal'])
{qUtilWin['combined_bal'].update(winContent);qUtilWin['combined_bal'].show();}
else
{q_window('plain','chartdiv','Rebalance Combined Portfolio',winContent,200,'','combined_bal','',280,110);}}
else if(ser_id.match(/^comp_/))
{eqChart.get(ser_id).remove();spID=ser_id.split('_');delete compSys[spID[1]];if(Object.size(compSys))
{saveBalance();}
else
{mainPercent=0;eqChart.get('combined').remove();pendURL.push('/cgi-perl/system/utils.mpl?rm=storeChartComp&main='+gSystemID+'&val=');eqChart.get('system_comm').show();}}}}}},rangeSelector:{buttonTheme:{fill:'none',stroke:'none',style:{color:'#999',fontWeight:'normal',fontSize:'10px',width:'10px'},states:{hover:{fill:'white'},select:{style:{color:'black'}}}},buttons:[{type:'day',count:1,text:'1d'},{type:'week',count:1,text:'1w'},{type:'month',count:1,text:'1m'},{type:'month',count:3,text:'3m'},{type:'month',count:6,text:'6m'},{type:'ytd',text:'YTD'},{type:'year',count:1,text:'1y'},{type:'all',text:'All'}],inputStyle:{color:'#039',fontWeight:'normal',fontSize:'10px'},labelStyle:{color:'silver',fontWeight:'normal',fontSize:'10px'},selected:7,inputEnabled:false},labels:{items:[{html:'<div id="zoomContent" class="zoomClass">Drag mouse in chart to zoom</div>',style:{left:'350px',top:'-30px',fontSize:'10px'}},{html:'<div id="zoomContent" class="zoomClass">Drop other charts to compare</div>',style:{left:'350px',top:'-18px',fontSize:'10px'}}]},xAxis:{ordinal:false,maxZoom:24*3600000},yAxis:{labels:{formatter:function(){return'$'+Highcharts.numberFormat(this.value+gSysStartEquity,0)}},gridLineColor:'#e0e0e0'},legend:{enabled:true,y:25,verticalAlign:'center',borderWidth:0,floating:false,labelFormatter:function(){var ret=this.name;var ser_id=this.options.id;if(ser_id=='combined')
{ret+=' (click to rebalance)';}
else if(ser_id.match(/^comp_/))
{ret+=' (click to remove)';}
return ret;}},tooltip:{backgroundColor:{linearGradient:{x1:0,y1:0,x2:0,y2:1},stops:[[0,'white'],[1,'#EEE']]},borderColor:'gray',borderWidth:1,formatter:function(){var s='<b>'+Highcharts.dateFormat('%a %b %e, %Y %H:%M',this.x)+'</b>';$j.each(this.points,function(i,point){if(this.series.name!='Equally Likely')
{s+='<br/>'+this.series.name+': $'+Highcharts.numberFormat(((this.series.name=='S&P 500')?(point.y/sp_eq_scale):point.y),0);}});return s;}},navigator:{height:20,margin:4,baseSeries:1,series:{color:'#749BB5'}},credits:{enabled:false},scrollbar:{buttonArrowColor:'#333',rifleColor:'#333',barBackgroundColor:'#ddd',barBorderRadius:2,barBorderWidth:0,buttonBackgroundColor:'#ccc'},series:[{id:'system',name:gSystemName,data:port_equity_series,yAxis:0,color:'#99b',lineWidth:2,zIndex:2000},{id:'system_comm',name:gSystemName+' w/commissions',data:port_equity_comm_series,yAxis:0,color:'#194C6E',lineWidth:3,zIndex:3000},{id:'sp',name:'S&P 500',data:sp_equity_series,yAxis:0,color:'#333',lineWidth:1,dashStyle:'shortDot',zIndex:1000}]});pendURL.push('/cgi-perl/system/utils.mpl?rm=storeChartType&type='+encodeURIComponent('Standard'));}
function hideMonteCarlo()
{$('chartSelStandard').className='chartON';$('chartSelMonte').className='chartOFF';if(monteIndex.length)
{for(var i=0;i<monteIndex.length;i++)
{var series=eqChart.get(monteIndex[i])
if(series)
{series.remove(false);}}
eqChart.redraw();monteIndex=[];}
pendURL.push('/cgi-perl/system/utils.mpl?rm=storeChartType&type='+encodeURIComponent('Standard'));}
function drawMonteCarlo()
{if(eqChart.get('monte1'))
{return;}
$('chartSelStandard').className='chartOFF';$('chartSelMonte').className='chartON';if(monteSeries.length)
{for(var i=0;i<monteSeries.length;i++)
{var showInLeg=i?false:true;var cid='monte'+(i+1);eqChart.addSeries({name:'Equally Likely',color:"#ddd",zIndex:10,data:monteSeries[i],id:cid,showInLegend:showInLeg},0);monteIndex.push('monte'+(i+1));}}
else
{for(i=1;i<=24;i++)
{var run=createSimEquityRun(i);monteSeries.push(run);monteIndex.push('monte'+i);}}
eqChart.redraw();pendURL.push('/cgi-perl/system/utils.mpl?rm=storeChartType&type='+encodeURIComponent('Monte Carlo'));}
function drawMovingAverage(days)
{if(!days){days=0}
pendURL.push('/cgi-perl/system/utils.mpl?rm=saveMALength&days='+days+'&sysid='+gSystemID);if(maseries=eqChart.get('movingAvg'))
{maseries.remove();}
if(!days)
{return;}
var ebuffer=[];var tbuffer=[];var delaySecs=(days*86400)*1000;var maseries=[];var everFilledBuffer=0;$j.each(port_equity_series,function(i,line)
{ebuffer.push(line[1]);tbuffer.push(line[0]);var diffSecs=line[0]-tbuffer[0];if((diffSecs<delaySecs)&&(!everFilledBuffer))
{}
else
{everFilledBuffer=1;while((diffSecs>=delaySecs)&&tbuffer.length)
{var goneT=tbuffer.shift();var goneE=ebuffer.shift();diffSecs=line[0]-tbuffer[0];}
var MA=line[1];var numE=ebuffer.length;if(numE)
{var sum=0;var tempbuffer=ebuffer.slice(0);while(tempbuffer.length)
{sum+=tempbuffer.shift();}
MA=Math.floor(sum/numE);}
maseries.push([line[0],MA]);}});eqChart.addSeries({id:'movingAvg',name:days+' Day Moving Avg',color:"#3c3",zIndex:5000,data:maseries,showInLegend:true,dashStyle:'dash'},0);eqChart.redraw();}
function createSimEquityRun(ind)
{var simRun=[];if(!equity_delta.length)
{var lasteq=0;var lastsecs=0;$j.each(port_equity_series,function(i,line){var deqpct=0;var dsecs=0;if(lasteq)
{deqpct=(line[1]-lasteq)/lasteq;dsecs=line[0]-lastsecs;}
lasteq=line[1];lastsecs=line[0];equity_delta.push([deqpct,dsecs]);});}
var enow=port_equity_series[0][1];var tnow=port_equity_series[0][0];var numleft=equity_delta.length;equity_delta_temp=equity_delta;while(numleft)
{var randIndex=Math.floor(Math.random()*numleft);var refRemoved=equity_delta_temp.splice(randIndex,1);numleft--;enow=enow*(1+refRemoved[0][0]);tnow+=refRemoved[0][1];simRun.push([tnow,enow]);if(enow<=0){last;}}
var showInLeg=(ind==1)?true:false;var cid='monte'+ind;eqChart.addSeries({name:'Equally Likely',color:"#ddd",zIndex:10,id:cid,data:simRun,showInLegend:showInLeg},0);return simRun;}
function balanceContent()
{var used=0;var chosen=0;for(comp in compSys)
{if(compSys[comp]['percent'])
{used+=compSys[comp]['percent'];chosen++;}}
if(mainPercent)
{used+=mainPercent;chosen++;}
var remainder_size=(used>=100)?0:(100-used)/((Object.size(compSys)+1)-chosen);remainder_size=parseInt(remainder_size);var selectBoxes;var useval=mainPercent?mainPercent:remainder_size;selectBoxes='<br/><div class="chartCompLabel">'+gSystemName+':</div> <input class="chartCompInput" type="text" id="main_percent" value="'+useval+'" /> %<br/>';for(comp in compSys)
{useval=compSys[comp]['percent']?compSys[comp]['percent']:remainder_size;selectBoxes+='<div class="chartCompLabel">'+compSys[comp]['name']+':</div> <input class="chartCompInput" type="text" id="'+comp+'_percent" value="'+useval+'" /> %<br/>';}
var retButton='<input type="button" style="width:150px;margin-left:70px;margin-top:15px" class="leftButton" value="Save and Rebalance" onclick="saveBalance()">';return(selectBoxes+retButton);}
function saveBalance()
{var comp_sys_array=[];for(comp in compSys)
{var selVal=$(comp+'_percent')?$(comp+'_percent').value:0;selVal=parseInt(selVal);if(!selVal)
{if(compSys[comp]['percent'])
{selVal=compSys[comp]['percent'];}
else
{selVal=0;}}
compSys[comp]['percent']=selVal;comp_sys_array.push(comp+'='+selVal);}
var selVal=$('main_percent')?parseInt($('main_percent').value):0;if(!selVal)
{if(mainPercent)
{selVal=mainPercent;}
else
{selVal=0}};mainPercent=selVal;drawCombined();if(qUtilWin['combined_bal'])
{qUtilWin['combined_bal'].hide();}
var comp_string=comp_sys_array.join('|')+"|main="+mainPercent;pendURL.push('/cgi-perl/system/utils.mpl?rm=storeChartComp&main='+gSystemID+'&val='+encodeURIComponent(comp_string));}
Object.size=function(obj){var size=0,key;for(key in obj){if(obj.hasOwnProperty(key))size++;}
return size;};
