
/*frontend/mashup/ui/TickerBoardComponent/base/portfolio.js*/

nv.defineAwesomeClass("nv.widget.tickerboard.portfolio.Processor",function($this){var $static=nv.widget.tickerboard.portfolio.Processor;var view;var tickerboard;var refreshDataCallback;var oldTotal;var total;var changeNet;var tickerData;var isStreaming;var updateProcessor;$this.onStatUpdate;$this.__construct=function(_view,_tickerboard,_refreshDataCallback){view=_view;tickerboard=_tickerboard;refreshDataCallback=_refreshDataCallback;isStreaming=false;updateProcessor=new nv.TimedBatchProcessor(500,500);updateProcessor.OnNewBatchCreated.Bind(function(){var changePercent=(total===0?0:changeNet/total*100);$this.onStatUpdate.Trigger({total:total,changeNet:changeNet,changePercent:changePercent,oldTotal:oldTotal});oldTotal=total;});$this.onStatUpdate=new nv.Event();$this.onStatUpdate.setFirstBindCallback(startStreaming);};$this.process=function(data){oldTotal=null;total=0;changeNet=0;tickerData={};view.reset();var isEmpty=true;if(data.source==$static.SOURCE_DATAWIDGET&&data.tickers){if(nv.array.count(data.tickers)>0){nv.array.iterate(data.tickers,function(prefixedTicker,quote){var security=new nv.Security(prefixedTicker);var oldPrice=quote.price;var link=tickerboard.getTearsheetLinkForTicker(prefixedTicker);view.displayHolding(prefixedTicker,security.ticker,link,quote,data.name);});isEmpty=false;}}
else if(data.source==$static.SOURCE_DATALIGHT&&data.portfolios){if(nv.array.count(data.portfolios)>0){nv.array.iterate(data.portfolios,function(portfolio){var portfolioName=null;if(portfolio.sourceDisplayName){portfolioName=portfolio.sourceDisplayName+" ("+portfolio.name+")";}
else{portfolioName=portfolio.name;}
total+=portfolio.totalBalance;changeNet+=portfolio.todaysChange;view.displayAccount(portfolioName,portfolio);nv.array.iterate(portfolio.holdings,function(holding){var prefixedTicker=holding.prefixedTicker;var name=holding.ticker;var link=tickerboard.getTearsheetLinkForTicker(prefixedTicker);setTickerData(holding);view.displayHolding(prefixedTicker,name,link,holding,holding.name,holding);});});isEmpty=false;}}
if(nv.array.count(data.incomplete)>0){isEmpty=false;doIncomplete(data.incomplete);}
if(data.failed>0){isEmpty=false;view.displayFailed(data.failed);}
if(isEmpty){view.displayEmpty();}
var changePercent=0;if(total!=0){changePercent=changeNet/(total-changeNet)*100;}
view.displayPortfolioStats(total,changeNet,changePercent);oldTotal=total;view.onDisplayComplete();};var setTickerData=function(holding){var prefixedTicker=holding.prefixedTicker;var price=Number(holding.price);if(isNaN(price)){price=0;}
var changeNet=Number(holding.changeNet);if(isNaN(changeNet)){changeNet=0;}
var units=Number(holding.units);if(isNaN(units)){units=0;}
if(typeof tickerData[prefixedTicker]=="undefined"){tickerData[prefixedTicker]={units:units,price:price,changeNet:changeNet};if(isStreaming){nv.StreamingServices.SubscribeToTickers([prefixedTicker],true,false);}}
else{tickerData[holding.prefixedTicker].units+=holding.units;}};var startStreaming=function(){var tickers=nv.array.keys(tickerData);nv.StreamingServices.SubscribeToTickers(tickers,true,false);nv.StreamingServices.OnStreamingQuote.Bind(onStreamingQuote);isStreaming=true;};var onStreamingQuote=function(e){var ticker=e.security.getPrefixedTicker();var numHoldingsForTicker=0;if(typeof tickerData[ticker]!="undefined"){numHoldingsForTicker=tickerData[ticker].units;var changeDiff=e.quote.cN-tickerData[ticker].changeNet;var totalChange=changeDiff*numHoldingsForTicker;tickerData[ticker].changeNet=e.quote.cN;changeNet+=totalChange;total+=totalChange;updateProcessor.AddJob(1);}};var doIncomplete=function(inc){var countInc=nv.array.count(inc);view.displayIncompleteStatus(countInc);var done=false;var doneProcessed=0;var doneFailed=0;var postIncomplete=function(){if(doneFailed+doneProcessed<countInc||done){return;}
done=true;if(doneProcessed>0){view.displayRefreshing();refreshDataCallback();}
if(doneFailed>0){view.displayFailed(doneFailed);}};nv.array.iterate(inc,function(id){var tries=0;(function(){var check=arguments.callee;tries++;if(tries<=10){nv.http.request({url:nv.Urls.ServerUrl+'/frontend/portfolio/',timeout:5000,data:{action:'checksyncstatus',id:id,cb:new Date().getTime()},success:function(data){if(data.state&&data.state!="failed"){if(data.state=="processed"){doneProcessed++;postIncomplete();}
else{setTimeout(check,5000);}}
else{if(data.state=="failed"){doneFailed++;postIncomplete();}}}});}
else{doneFailed++;postIncomplete();}})();});};},function($this){$this.SOURCE_DATALIGHT=1;$this.SOURCE_DATAWIDGET=2;});
/* /frontend/mashup/ui/TickerBoardComponent/base/portfolio.js*/

/*frontend/mashup/ui/TickerBoardComponent/base/HoldingsData.js*/

nv.extendClass("nv.widget.tickerboard.dataprovider.HoldingsData",nv.widget.tickerboard.dataprovider.Base,function($this,$protected,$parent){$this.getName=function(){return"HoldingsData";};$this.__construct=function(){nv.http.request({'url':nv.Urls.ServerUrl+"/frontend/portfolio/",'method':nv.http.Method.GET,'data':{'action':'holdingsdatalight','cb':new Date().getTime()},'timeout':14000,'success':function(data){data.source=nv.widget.tickerboard.portfolio.Processor.SOURCE_DATALIGHT;$this.data=data;$this.onDataReceived.Trigger();},'error':function(){$this.onDataFailed.Trigger();}});};});
/* /frontend/mashup/ui/TickerBoardComponent/base/HoldingsData.js*/

/*frontend/mashup/ui/TickerBoardComponent/base/AdviceSummaryData.js*/

nv.extendClass("nv.widget.tickerboard.dataprovider.AdviceSummaryData",nv.widget.tickerboard.dataprovider.Base,function($this,$protected,$parent){$this.getName=function(){return"AdviceSummaryData";};$this.__construct=function(){nv.http.request({'url':nv.Urls.ServerUrl+"/portfolio/api/recommendations/summary?cb="+(new Date()).getTime(),'method':nv.http.Method.GET,'timeout':14000,'success':function(data){$this.data=data;$this.onDataReceived.Trigger();},'error':function(){$this.onDataFailed.Trigger();}});};});
/* /frontend/mashup/ui/TickerBoardComponent/base/AdviceSummaryData.js*/

/*frontend/mashup/ui/TickerBoardComponent/base/portfolioView.js*/

nv.defineAwesomeClass("nv.widget.tickerboard.portfolio.View",function($this){var allFunctions=['reset','displayAccount','displayHolding','displayError','displayFailed','displayEmpty','displayRefreshing','displayIncompleteStatus','displayPortfolioStats','onDisplayComplete'];nv.array.iterate(allFunctions,function(func){$this[func]=function(){};});$this.onDisplayComplete=function(){};});
/* /frontend/mashup/ui/TickerBoardComponent/base/portfolioView.js*/

/*frontend/mashup/ui/TickerBoardComponent/base/movers.js*/

if(nv.CreateNamespace("nv.UI.TickerBoardComponent.Portfolio.MoversHelper")){nv.UI.TickerBoardComponent.Portfolio.MoversHelper=new function(){this.GetMoversDataFromPortfolioApi=function(data){var gainers=[];var losers=[];if(nv.widget.tickerboard.portfolio.Processor.SOURCE_DATALIGHT){nv.array.iterate(data.portfolios,function(portfolio){nv.array.iterate(portfolio.holdings,function(v){var change=parseFloat(v.changeNet);var changePercent=parseFloat(v.changePercent);var price=parseFloat(v.price);if(isNaN(change)||isNaN(price)||isNaN(changePercent)){return;}
var obj={prefixedTicker:v.prefixedTicker,price:price,netChangeFromLastClose:change,netPercentChangeFromLastClose:changePercent};if(change>0){gainers.push(obj);}
else if(change<0){losers.push(obj);}});});}
else{nv.array.iterate(data.tickers,function(ticker,v){var change=parseFloat(v.changeNet);var changePercent=parseFloat(v.changePercent);var price=parseFloat(v.price);if(isNaN(change)||isNaN(price)||isNaN(changePercent)){return;}
var obj={prefixedTicker:ticker,price:price,netChangeFromLastClose:change,netPercentChangeFromLastClose:changePercent};if(change>0){gainers.push(obj);}
else if(change<0){losers.push(obj);}});}
gainers.sort(function(a,b){return b.netPercentChangeFromLastClose-a.netPercentChangeFromLastClose;});gainers=nv.array.reduce(gainers,function(hs,h){return!hs.length||hs[hs.length-1].prefixedTicker!=h.prefixedTicker?hs.concat(h):hs;},[]);losers.sort(function(a,b){return a.netPercentChangeFromLastClose-b.netPercentChangeFromLastClose;});losers=nv.array.reduce(losers,function(hs,h){return!hs.length||hs[hs.length-1].prefixedTicker!=h.prefixedTicker?hs.concat(h):hs;},[]);return{gainers:gainers,losers:losers};};};}
/* /frontend/mashup/ui/TickerBoardComponent/base/movers.js*/

/*frontend/mashup/ui/TickerBoardComponent/usatoday/portfolio2col/content/LoggedInPortfolio.js*/

nv.extendClass("nv.widget.tickerboard.usatoday.portfolio2col.view.LoggedInPortfolio","nv.widget.tickerboard.View",function($this,$protected,$parent){$protected.templateData={};var _tickerboard;var onUpdate;var holdingsDataProvider;var portfolioView;var dataProcessor;$this.__construct=function(tickerboard,options){options=options||{};$parent.__construct(tickerboard,options);_tickerboard=tickerboard;};var processMovers=function(movers,noDataMessage){var mover=null;if(movers&&movers.length>0){mover=movers[0];var prefixedTicker=mover.prefixedTicker;var colonIndex=prefixedTicker.indexOf(':');mover.ticker=colonIndex>=0?prefixedTicker.substring(colonIndex+1):prefixedTicker;mover.moreCount=movers.length-1;}else{mover={message:noDataMessage};}
return mover;};var fetchData=function(){holdingsDataProvider=new nv.widget.tickerboard.dataprovider.HoldingsData();holdingsDataProvider.onDataReceived.bind(function(){var data=holdingsDataProvider.data;var movers=nv.UI.TickerBoardComponent.Portfolio.MoversHelper.GetMoversDataFromPortfolioApi(data);var gainer=processMovers(movers.gainers,'No Gainers');var loser=processMovers(movers.losers,'No Losers');nv.$('.movers-table').html(nv.$.tmpl('nv.widget.tickerboard.usatoday.portfolio2col.LoggedInPortfolio.movers',{gainer:gainer,loser:loser}));dataProcessor.process(data);dataProcessor.onStatUpdate.Bind(function(obj){onStatsUpdate(obj.total,obj.changeNet,obj.changePercent);});var hasSources=false;nv.array.iterate(data.portfolios,function(portfolio){if(portfolio.sourceDisplayName){hasSources=true;return nv.array.BREAK;}});if(!hasSources){var adviceData={totalSavings:0,error:'In order to receive a portfolio diagnosis, please <a target="_blank" href="https://portfoliotracker.usatoday.com/account/settings/portfolios/add">sync an account</a>'};nv.$('.advice-table').html(nv.$.tmpl('nv.widget.tickerboard.usatoday.portfolio2col.LoggedInPortfolio.advice',adviceData));}});holdingsDataProvider.onDataFailed.bind(function(){var data={error:'Movers data not currently available'};nv.$('.movers-table').html(nv.$.tmpl('nv.widget.tickerboard.usatoday.portfolio2col.LoggedInPortfolio.movers',data));});var adviceSummaryDataProvider=new nv.widget.tickerboard.dataprovider.AdviceSummaryData();adviceSummaryDataProvider.onDataReceived.bind(function(){var data=adviceSummaryDataProvider.data;if(nv.$('.advice-table tr').length==0){nv.$('.advice-table').html(nv.$.tmpl('nv.widget.tickerboard.usatoday.portfolio2col.LoggedInPortfolio.advice',data));}});adviceSummaryDataProvider.onDataFailed.bind(function(){var data={totalSavings:0,error:'Advice not currently available'};nv.$('.advice-table').html(nv.$.tmpl('nv.widget.tickerboard.usatoday.portfolio2col.LoggedInPortfolio.advice',data));});};var onStatsUpdate=function(total,changeNet,changePercent){var now=new Date();var suffix="AM";var hours=now.getHours();if(hours>=12){suffix="PM";hours-=12;}
if(hours==0){hours=12;}
var minutes=now.getMinutes();if(minutes<10){minutes="0"+minutes;}
formattedTime=hours+":"+minutes+" "+suffix;var data={total:total,changeNet:changeNet,changePercent:changePercent,time:formattedTime};nv.$('.change-data').html(nv.$.tmpl('nv.widget.tickerboard.usatoday.portfolio2col.LoggedInPortfolio.change',data));};$this.render=function($contentDiv){$contentDiv.html(nv.$.tmpl('nv.widget.tickerboard.usatoday.portfolio2col.LoggedInPortfolio',$protected.templateData));portfolioView=getView($contentDiv);dataProcessor=new nv.widget.tickerboard.portfolio.Processor(portfolioView,_tickerboard,fetchData);fetchData();};var getView=function($contentDiv){var viewClass=nv.extendToAnonymousClass("nv.widget.tickerboard.portfolio.View",function($view){$view.displayPortfolioStats=onStatsUpdate;});return new viewClass();};});
/* /frontend/mashup/ui/TickerBoardComponent/usatoday/portfolio2col/content/LoggedInPortfolio.js*/

/*frontend/mashup/ui/TickerBoardComponent/usatoday/portfolio2col/content/tmpl/maintenance.tmpl.js*/

(nv.templates['nv.widget.tickerboard.usatoday.portfolio2col.Maintenance']=function(jQuery,$item){var $=jQuery,call,_=[],$data=$item.data;with($data){_.push('  <div class="maintenance-title"> Portfolio Tracker is down for maintenance. </div> <div class="powered-by"></div> <div class="maintenance-text"> To ensure optimum performance, we periodically perform maintenance on our Portfolio Tracker software. </div> <div class="maintenance-text"> Thank you for your patience. </div>');}return _;}).templateName='nv.widget.tickerboard.usatoday.portfolio2col.Maintenance';
/* /frontend/mashup/ui/TickerBoardComponent/usatoday/portfolio2col/content/tmpl/maintenance.tmpl.js*/

/*frontend/mashup/ui/TickerBoardComponent/usatoday/portfolio2col/content/Maintenance.js*/

nv.extendClass("nv.widget.tickerboard.usatoday.portfolio2col.view.Maintenance","nv.widget.tickerboard.View",function($this,$protected,$parent){$protected.templateData={};$this.__construct=function(tickerboard,options){options=options||{};$parent.__construct(tickerboard,options);};$this.render=function($contentDiv){$contentDiv.html(nv.$.tmpl('nv.widget.tickerboard.usatoday.portfolio2col.Maintenance',$protected.templateData));};});
/* /frontend/mashup/ui/TickerBoardComponent/usatoday/portfolio2col/content/Maintenance.js*/

/*frontend/mashup/ui/TickerBoardComponent/usatoday/portfolio2col/Portfolio2Col.js*/

nv.extendClass("nv.widget.tickerboard.usatoday.Portfolio2Col",nv.widget.tickerboard.Base,function($this,$protected,$parent){"use strict";var v_=nv.importNamespace("nv.widget.tickerboard.usatoday.portfolio2col.view");var widgetDomId;var _isLoggedIn=false;$protected.activeView;var $widgetDiv;var options;var abChoice;$this.__construct=function(id,_options){if(typeof _options!='object'){_options={};}
$parent.__construct();_isLoggedIn=!!_options.loggedIn;options=_options;widgetDomId=id;var activeViewName=options.activeView;var match=window.location.search.match(/\bview=(\w+)\b/);if(match){activeViewName=match[1];}
var optionsForView=options['viewSpecific'][activeViewName]||{};optionsForView['widgetName']=options.widgetName;if(typeof v_[activeViewName]=="undefined"){throw"Undefined view to activate: "+activeViewName;}
optionsForView.widgetName=options.widgetName;var trackingOptions={environment:nv.Analytics.Env.USAToday,services:{}};trackingOptions.services[nv.Analytics.Engine.GoogleAnalytics]=true;nv.Analytics.init(trackingOptions);var pageUrl=window.location.pathname+'/'+nv.getCurrentPartnerToken()+'/'+activeViewName;if(pageUrl.match(/^\/widget\//)){nv.Analytics.trackPageView(pageUrl);nv.Analytics.trackEvent(pageUrl);}
nv.JQuery.nvlive('.button-signup','click',function(){nv.Analytics.trackEvent("Clicked - Money Widget - Wide");return true;});(function(cfg){var last='none';for(var track in cfg){(function(sel,trk){nv.JQuery(nv.JQuery(sel).mousedown(function(){if(last!=trk&&self.utag){utag.track('link',{clickName:'sigfig'+trk,eventtype:'uotrack',linkTrackEvents:'none',linkTrackVars:'prop41'});last=trk;}}));})(cfg[track],track);}})({addaccount:'a.add-account-button',advicetab:'.tab.recommendations',chartstab:'.tab.charts',holdingstab:'.tab.holdings',overviewtab:'.tab.overview',viewportfolio:'.viewbutton a',widgetasset:'.chart-links a:contains(Asset)',widgetdividends:'.chart-links a:contains(Dividends)',widgetgeographic:'.chart-links a:contains(Geographic)',widgetlogin:'.login a',widgetrisk:'.chart-links a:contains(Risk)',widgetsignup:'.signup a',widgetstartnow:'.nv-start-now-button'});$protected.activeView=new v_[activeViewName](this,optionsForView);};$this.isLoggedIn=function(){return _isLoggedIn;};$this.init=function(){$widgetDiv=nv.$("#"+widgetDomId);$parent.init();$protected.activeView.render($widgetDiv.find("div.nv-content"));};$this.get$Widget=function(){return $widgetDiv;};$protected.getAuthOptions=function(action){return $protected.activeView.getAuthOptions(action);};});
/* /frontend/mashup/ui/TickerBoardComponent/usatoday/portfolio2col/Portfolio2Col.js*/

/*common/javascript/popup.js*/

nv.defineAwesomeClass("nv.Popup",function($this){"use strict";$this.popupCenterBrowser=function(pageURL,title,w,h){var wLeft=window.screenLeft?window.screenLeft:window.screenX;var wTop=window.screenTop?window.screenTop:window.screenY;var left=wLeft+(window.innerWidth/2)-(w/2);var top=wTop+(window.innerHeight/2)-(h/2);return window.open(pageURL,title,'toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=no, resizable=no, copyhistory=no, width='+w+', height='+h+', top='+top+', left='+left);};$this.popupCenterScreen=function(pageURL,title,w,h){var left=(screen.width/2)-(w/2);var top=(screen.height/2)-(h/2);var targetWin=window.open(pageURL,title,'toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=no, resizable=no, copyhistory=no, width='+w+', height='+h+', top='+top+', left='+left);};});
/* /common/javascript/popup.js*/
