
/*common/javascript/streaming/wildfire/xdr.js*/

nv.extendClass("nv.streaming.wildfire.XDRTransport","nv.streaming.wildfire.Transport",function($this,$protected,$parent){var xdr=null;$this.__construct=function(baseUrl){$parent.__construct(baseUrl);};$this.getName=function(){return"XDRTransport";};$protected.supportsStreaming=function(){return true;};$protected.getStreamingPreludeSize=function(){return 2048;};$this.start=function(params){xdr=new XDomainRequest();$parent.start(params);xdr.open("POST",$protected.getRequestUrl());xdr.onload=onload;xdr.onerror=onerror;xdr.onprogress=progress;xdr.send($protected.getRequestData(params));};$this.abort=function(){$parent.abort();xdr.abort();onerror();};var progress=function(){$protected.partialResponseText=xdr.responseText;$protected.status=200;$protected.progressed();};var onload=function(){$protected.partialResponseText=xdr.responseText;$protected.status=200;$protected.progressed();$protected.completed();};var onerror=function(){$protected.responseText="";$protected.status=500;$protected.completed();};},function($static){$static.isSupported=function(){return(typeof XDomainRequest!=="undefined"&&document.documentMode>7);};});
/* /common/javascript/streaming/wildfire/xdr.js*/

/*common/javascript/streaming/wildfire/jsonp.js*/

nv.extendClass("nv.streaming.wildfire.JsonPTransport","nv.streaming.wildfire.Transport",function($this,$protected,$parent){var $static=nv.streaming.wildfire.JsonPTransport;var ifr=null;var barIfr=null;var nodes=[];var failTimer;var callbackId;var errbackId;var cbInstanceId=0;var callbacksActive=false;var loadInIfr=(window.opera&&Object.prototype.toString.call(window.opera)=="[object Opera]")||(window.controllers&&Object.prototype.toString.call(window.controllers)=="[object XULControllers]")||false;$this.__construct=function(baseUrl){$parent.__construct(baseUrl);callbackId=$static.wrapCallbackAsGlobal(onload);errbackId=$static.wrapCallbackAsGlobal(onerror);if(loadInIfr){ifr=createIframe();nv.util.Dom.safeAddNodeToHead(ifr);killLoadingBar();}};$this.getName=function(){return"JsonPTransport";};$this.start=function(params){$parent.start(params);cbInstanceId++;callbacksActive=true;$static.updateArgForCallback(callbackId,cbInstanceId);$static.updateArgForCallback(errbackId,cbInstanceId);var doc=ifr?(ifr.contentDocument||ifr.contentWindow.document||ifr.document):document;var head=doc.getElementsByTagName('head')[0]||doc.getElementsByTagName('body')[0];params.jsonp=getFullCallbackPath(callbackId);var url=$protected.getRequestUrl(params);if(ifr){doc.open();doc.write("<scr"+"ipt src='"+url+"'></scr"+"ipt>"+"<scr"+"ipt>"+getFullCallbackPath(errbackId)+"()</scr"+"ipt>");doc.close();killLoadingBar();nv.array.iterate(doc.getElementsByTagName("SCRIPT"),function(node){nodes.push(node);});}
else{nodes.push(nv.util.Dom.addJSToHead(url));}};$this.abort=function(){$parent.abort();clearNodes();callbacksActive=false;$protected.partialResponseText="";$protected.status=0;$protected.completed();};var onload=function(_cbInstanceId,response){if(!callbacksActive||cbInstanceId!=_cbInstanceId){return;}
callbacksActive=false;setTimeout(function(){clearNodes();$protected.partialResponseText=response;$protected.status=200;$protected.progressed();$protected.completed();},50);};var onerror=function(_cbInstanceId){if(!callbacksActive||cbInstanceId!=_cbInstanceId){return;}
setTimeout(function(){callbacksActive=false;clearNodes();$protected.partialResponseText="";$protected.status=500;$protected.completed();},50);};var getFullCallbackPath=function(callbackId){var fp=$static.getFullCallbackPath(callbackId);if(ifr){fp="parent."+fp;}
return fp;};var createIframe=function(){var i=document.createElement("iframe");i.style.display='block';i.style.width='0';i.style.height='0';i.style.border='0';i.style.margin='0';i.style.padding='0';i.style.overflow='hidden';i.style.visibility='hidden';i.cbId=0;return i;};var killLoadingBar=function(){var firstAdd=true;setTimeout(function(){if(barIfr===null){barIfr=createIframe();}
document.body.appendChild(barIfr);document.body.removeChild(barIfr);if(firstAdd){firstAdd=false;setTimeout(arguments.callee,50);}},0);};var removeNode=function(node){if(node.clearAttributes){node.clearAttributes();}
while(node.lastChild){removeNode(node.lastChild);}
if(node.parentNode){node.parentNode.removeChild(node);}};var clearNodes=function(){for(var i in nodes){if(nodes.hasOwnProperty(i)){removeNode(nodes[i]);}}
nodes=[];};},function($static){nv.jswf=$static;var callbacks=[];var emptyFunc=function(){};$static.cb=function(callbackId){if(typeof callbacks[callbackId]!="undefined"){var cbinstance=callbacks[callbackId];return function(jsonpresponse){cbinstance[1].call(null,cbinstance[0],jsonpresponse);};}
else{return emptyFunc;}};$static.isSupported=function(){return true;};var nextCallbackId=0;$static.wrapCallbackAsGlobal=function(callback,arg){var callbackId=nextCallbackId++;callbacks[callbackId]=[arg,callback];return callbackId;};$static.getFullCallbackPath=function(callbackId){return"nv.jswf.cb("+callbackId+")";};$static.removeCallback=function(callbackId){if(typeof callbacks[callbackId]!="undefined"){delete callbacks[callbackId];}};$static.updateArgForCallback=function(callbackId,arg){if(typeof callbacks[callbackId]!="undefined"){callbacks[callbackId][0]=arg;}};});
/* /common/javascript/streaming/wildfire/jsonp.js*/

/*common/javascript/streaming/wildfire/wildfire.js*/

nv.defineEnum("nv.streaming.wildfire.states",["SID_WAIT","CONNECTED","ABORTING"]);nv.defineAwesomeClass("nv.streaming.Wildfire",function($this){var s_=nv.importNamespace("nv.streaming.wildfire.states");var state;var oldsid=null;var sid=null;var lastMid=-1;var topicsToSub=[];var topicsToUnsub=[];var topicsSubRequested=[];var topicsUnsubRequested=[];var allSubscribedTopics=[];var transport;$this.onMessage=new nv.Event();var exponentialBackoffTimeout=Math.floor((2+Math.random()*4)*1000);var timeoutCount=0;var domain=nv.streaming.Wildfire.topicDomain;$this.__construct=function(){transport=nv.streaming.Wildfire.getTransport();transport.onMessageReceived.Bind(messageReceivedHandler);transport.onRequestCompleted.Bind(requestCompleteHandler);state=s_.SID_WAIT;transport.start({});};$this.subscribe=function(topics){nv.array.iterate(topics,function(topic){topic=domain+"."+topic;if(typeof allSubscribedTopics[topic]=="undefined"){allSubscribedTopics[topic]=1;topicsToSub.push(topic);}});resendRequest();};$this.unsubscribe=function(topics){nv.array.iterate(topics,function(topic){topic=domain+"."+topic;if(typeof allSubscribedTopics[topic]!="undefined"){delete allSubscribedTopics[topic];topicsToUnsub.push(topic);}});resendRequest();};var resendRequest=function(){if(state==s_.CONNECTED){state=s_.ABORTING;transport.abort();}};var messageReceivedHandler=function(e){timeoutCount=0;exponentialBackoffTimeout=Math.floor((2+Math.random()*4)*1000);var msg=e.message;if(msg.sid===null){oldsid=sid;sid=null;state=s_.SID_WAIT;transport.abort();return;}
switch(state){case s_.SID_WAIT:if(msg.sid){sid=msg.sid;state=s_.CONNECTED;nv.log("Connected with sid: "+sid,"wildfire");if(!nv.array.isEmpty(topicsToSub)||!nv.array.isEmpty(topicsToUnsub)){setTimeout(function(){if(!nv.array.isEmpty(topicsToSub)||!nv.array.isEmpty(topicsToUnsub)){resendRequest();}},500);}}
else if(msg.streamtestpacket||msg.prelude||msg.noop){}
else{nv.error("Was in SID_WAIT state, but a successful request didn't return SID","wildfire");}
break;case s_.CONNECTED:processResponse(msg);break;default:nv.error("Invalid state "+state+" in messageReceivedHandler PARTIAL switch","wildfire");break;}};var requestCompleteHandler=function(e){if(e.status==200){timeoutCount=0;exponentialBackoffTimeout=Math.floor((2+Math.random()*4)*1000);switch(state){case s_.SID_WAIT:if(oldsid){nv.log("Server has lost our session with sid: "+oldsid+". Starting a new one","wildfire");setTimeout(restartSession,0);}
else{nv.error("Was in SID_WAIT state, but a successful request didn't return SID","wildfire");}
break;case s_.CONNECTED:nv.log("Restarting request","wildfire");setTimeout(continueSession,0);break;case s_.ABORTING:nv.log("Request was aborted. Restarting in 50ms","wildfire");setTimeout(continueSession,50);break;default:nv.error("Invalid state "+state+" in requestCompleteHandler[success]","wildfire");break;}}
else{switch(state){case s_.SID_WAIT:var timeout=getExponentialBackoffTimeout();if(!oldsid){nv.log("Unable to connect. Retrying in "+timeout+"ms","wildfire");}
else{nv.log("Server has lost our session with sid: "+oldsid+". Starting a new one","wildfire");}
setTimeout(restartSession,timeout);break;case s_.CONNECTED:var timeout=getExponentialBackoffTimeout();nv.log("Connection dropped. Retrying in "+timeout+"ms","wildfire");setTimeout(continueSession,timeout);break;case s_.ABORTING:nv.log("Request was aborted. Restarting in 50ms","wildfire");setTimeout(continueSession,50);break;default:nv.error("Invalid state "+state+" in requestCompleteHandler[failure]","wildfire");break;}}
transport.reset();};var restartSession=function(){sid=null;topicsToSub=nv.array.keys(allSubscribedTopics);topicsToUnsub=[];topicsSubRequested=[];topicsUnsubRequested=[];state=s_.SID_WAIT;var params={};addTopicsToParams(params);transport.start(params);};var continueSession=function(){var params={sid:sid};if(lastMid!=-1){params.ack=lastMid;}
addTopicsToParams(params);state=s_.CONNECTED;transport.start(params);};var addTopicsToParams=function(params){if(!nv.array.isEmpty(topicsToSub)){nv.array.iterate(topicsToSub,function(topic){nv.log("Subscribing to "+topic,"wildfire");topicsSubRequested.push(topic);});topicsToSub=[];}
if(!nv.array.isEmpty(topicsToUnsub)){nv.array.iterate(topicsToUnsub,function(topic){nv.log("Unsubscribing to "+topic,"wildfire");topicsUnsubRequested.push(topic);});topicsToUnsub=[];}
if(!nv.array.isEmpty(topicsSubRequested)){params.sub=topicsSubRequested.join(",");}
if(!nv.array.isEmpty(topicsUnsubRequested)){params.unsub=topicsUnsubRequested.join(",");}};var processResponse=function(response){if(!nv.array.isEmpty(topicsSubRequested)){topicsSubRequested=[];}
if(!nv.array.isEmpty(topicsUnsubRequested)){topicsUnsubRequested=[];}
if(response.data&&!nv.array.isEmpty(response.data)){nv.array.iterate(response.data,function(msg){if(nv.array.count(msg)===3){lastMid=msg[0];var channel=msg[1].replace(new RegExp("^"+domain+"\\."),"");$this.onMessage.Trigger({channel:channel,message:msg[2]});}
else{nv.log("Invalid message received, dropping packet","wildfire");nv.log(msg);}});}
else{lastMid=-1;}};var getExponentialBackoffTimeout=function(){if(timeoutCount>0){if(exponentialBackoffTimeout<60000){exponentialBackoffTimeout*=2;}}
timeoutCount++;return exponentialBackoffTimeout;};},function($static){var transports=[nv.streaming.wildfire.XHRTransport,nv.streaming.wildfire.XDRTransport,nv.streaming.wildfire.JsonPTransport];var streamServers="stream.sigfig.com".split(",");var domain="prod";if(nv.test.isTesting(nv.test.cases.FAKE_STREAMING_QUOTES)){domain="fake";}
var streamServer=streamServers[Math.floor(Math.random()*nv.array.count(streamServers))];var baseUrl=document.location.protocol+"//"+streamServer+"/lp";nv.log("Wildfire server is "+streamServer,"wildfire");nv.log("Wildfire domain is "+domain,"wildfire");$static.topicDomain=domain;$static.getTransport=function(){var selectedTransport=null;nv.array.iterate(transports,function(transport){if(transport.isSupported()){selectedTransport=transport;return nv.array.BREAK;}});if(selectedTransport==null){nv.error("No suitable comet transport found");return null;}
else{transport=new selectedTransport(baseUrl);nv.log("Selected transport "+transport.getName(),"wildfire");return transport;}};var instance=null;$static.instance=function(){if(instance===null){instance=new $static();}
return instance;};});
/* /common/javascript/streaming/wildfire/wildfire.js*/

/*common/javascript/streaming/streaming.js*/

if(nv.CreateNamespace("nv.StreamingServices")){nv.StreamingServices=new function(){var $this=this;var hasSubscribedToStreamingStats=false;$this.REALTIME_STATS_ASSET_VALUE_UPDATE="REALTIMESTATS.ASSET.UPDATE";$this.OnStreamingQuote=new nv.Event();$this.OnStreamingNews=new nv.Event();$this.OnStreamingStat=new nv.Event();var wildfire;$this.SubscribeToTickers=function(tickers,quotes,news){init();if(typeof quotes=='undefined'){quotes=true;}
if(typeof news=='undefined'){news=true;}
var addSubs=[];nv.array.iterate(tickers,function(ticker){if(nv.Security.isValidPrefixedTicker(ticker)){var security=new nv.Security(ticker);if(quotes&&security.exchange!=="NYSE"&&security.exchange!=="NASDAQ"&&security.exchange!=="AMEX"){addSubs.push(getQuoteQueueForSecurity(security));}
if(news&&security.exchange!=="US"){addSubs.push(getNewsQueueForSecurity(security));}}});if(!nv.array.isEmpty(addSubs)){wildfire.subscribe(addSubs);}};$this.SubscribeToStreamingStats=function(){if(!hasSubscribedToStreamingStats){init();wildfire.subscribe($this.REALTIME_STATS_ASSET_VALUE_UPDATE);hasSubscribedToStreamingStats=true;}};var getNewsQueueForSecurity=function(security){return"NEWS."+security.exchange+"."+security.ticker;};var getQuoteQueueForSecurity=function(security){return"QUOTE."+security.exchange+"."+security.ticker;};var initDone=false;var init=function(){if(initDone){return;}
else{initDone=true;wildfire=nv.streaming.Wildfire.instance();var bindTime=new Date().getTime();var shouldArtificiallyDelay=false;wildfire.onMessage.Bind(function(e){var channel=e.channel;var message=e.message;var match=channel.match(/^(QUOTE|NEWS)\.(.*?)\.(.*)$/);if(match!==null){var security=new nv.Security(match[2]+":"+match[3]);if(match[1]=="QUOTE"){var quote=eval("("+message+")");var timeout=Math.floor(Math.random()*10000);if(!shouldArtificiallyDelay){if(new Date().getTime()-bindTime>10000){shouldArtificiallyDelay=true;}
else{timeout=0;}}
setTimeout(function(){$this.OnStreamingQuote.Trigger({security:security,quote:quote});},timeout);}
else if(match[1]=="NEWS"){var news=eval("("+message+")");$this.OnStreamingNews.Trigger({security:security,news:news});}}
else if(channel.match(/^REALTIMESTATS/)){var message=eval("("+message+")");$this.OnStreamingStat.Trigger({queue:channel,message:message});}});}};};}
/* /common/javascript/streaming/streaming.js*/

/*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/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/portfolio2col/performanceContent.js*/

if(nv.CreateNamespace("nv.UI.TickerBoardComponent.PerformanceContent")){nv.UI.TickerBoardComponent.PerformanceContent=function(tickers,plotUserPerformance,tickerBoard,container){var $this=this;var $=nv.JQuery;var userCb=null;var getSelectedTimeframe=function(){var timeframe=container.find("div.nv-perf-graph-controls td.nv-selected").attr('timeframe');if(!timeframe){timeframe="1w";}
return timeframe;};var updateChart=function(ticker){var $img=container.find("div.nv-perf-graph img");if(!ticker){ticker=$img.attr('ticker');}
container.find("div.nv-perf-graph").empty().html('<img class="nv-perf-chart" style="display:none" width="248" height="100" />'+"<!--[if lte IE 7]><img  class=\"nv-spinner\" src=\"http:\/\/cdn.wikinvest.com\/partner\/Forbes\/wikinvest\/images\/ajax-loader-horizontal.gif\"\/><![endif]--><![if gte IE 8]><img  class=\"nv-spinner\" src=\"data:image\/gif;base64,R0lGODlhEAALAPQAAP\/\/\/2ZmZujo6OLi4vLy8mlpaWZmZoGBgbOzs5+fn9XV1Xp6epKSkri4uKGhodfX13x8fGhoaJSUlO\/v7+fn5\/j4+IeHh+np6fb29tLS0sXFxd7e3vT09AAAAAAAAAAAACH\/C05FVFNDQVBFMi4wAwEAAAAh\/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJCwAAACwAAAAAEAALAAAFLSAgjmRpnqSgCuLKAq5AEIM4zDVw03ve27ifDgfkEYe04kDIDC5zrtYKRa2WQgAh+QQJCwAAACwAAAAAEAALAAAFJGBhGAVgnqhpHIeRvsDawqns0qeN5+y967tYLyicBYE7EYkYAgAh+QQJCwAAACwAAAAAEAALAAAFNiAgjothLOOIJAkiGgxjpGKiKMkbz7SN6zIawJcDwIK9W\/HISxGBzdHTuBNOmcJVCyoUlk7CEAAh+QQJCwAAACwAAAAAEAALAAAFNSAgjqQIRRFUAo3jNGIkSdHqPI8Tz3V55zuaDacDyIQ+YrBH+hWPzJFzOQQaeavWi7oqnVIhACH5BAkLAAAALAAAAAAQAAsAAAUyICCOZGme1rJY5kRRk7hI0mJSVUXJtF3iOl7tltsBZsNfUegjAY3I5sgFY55KqdX1GgIAIfkECQsAAAAsAAAAABAACwAABTcgII5kaZ4kcV2EqLJipmnZhWGXaOOitm2aXQ4g7P2Ct2ER4AMul00kj5g0Al8tADY2y6C+4FIIACH5BAkLAAAALAAAAAAQAAsAAAUvICCOZGme5ERRk6iy7qpyHCVStA3gNa\/7txxwlwv2isSacYUc+l4tADQGQ1mvpBAAIfkECQsAAAAsAAAAABAACwAABS8gII5kaZ7kRFGTqLLuqnIcJVK0DeA1r\/u3HHCXC\/aKxJpxhRz6Xi0ANAZDWa+kEAA7AAAAAAAAAAAA\"\/><![endif]>");var $img=container.find("div.nv-perf-graph img.nv-perf-chart");$img[0].onload=function(){$img.css('display','inline');$img.siblings("img.nv-spinner").remove();};$img[0].onerror=function(){container.find("div.nv-perf-graph").html("<div class='nv-no-chart'>Chart not available</div>");};var timeframe=getSelectedTimeframe();nv.UI.TickerBoardComponent.PerformanceContent.SelectedChartTimeframe=timeframe;if(!plotUserPerformance){var cb=nv.http.GetTimestampForCachedRequest(600);var url=nv.Urls.ServerUrl+"/viz/stock.png?ticker="+ticker+"&theme=forbes&period="+timeframe+"&width=248&height=100&cb="+cb;$img.attr('src',url).attr('ticker',ticker);}
else{var url=nv.Urls.ServerUrl+"/frontend/portfolio/?action=chart&function=perfcomparison"+(ticker=="You"?"":"&indicies="+ticker)+"&theme=forbes&period="+timeframe+"&width=248&height=100&cb="+userCb;$img.attr('src',url).attr('ticker',ticker);}
if(ticker=="You"){container.find("td.nv-legend-key div").css('display','none');}
else{container.find("td.nv-legend-key div").css('display','block');}
updateLegend(ticker);};$this.updateCacheBuster=function(){userCb=new Date().getTime();updateChart();};$this.updateOneDayReturn=function(changePercent){$percentChangeYou=container.find("table.nv-perf-table tr.nv-perf-you td.nv-change-percent");var changePercentFormatted=nv.util.Number.formatPercent(changePercent,1);$percentChangeYou.removeClass("nv-price-change-up").removeClass("nv-price-change-down");if(changePercent>=0){changePercentFormatted="+"+changePercentFormatted;$percentChangeYou.addClass("nv-price-change-up");}
else{$percentChangeYou.addClass("nv-price-change-down");}
$percentChangeYou.html("("+changePercentFormatted+")");};$this.Activate=function(triggerChartUpdate){if(nv.UI.TickerBoardComponent.PerformanceContent.SelectedChartTimeframe!==null){var timeframe=nv.UI.TickerBoardComponent.PerformanceContent.SelectedChartTimeframe;var cell=container.find("div.nv-perf-graph-controls td[timeframe="+timeframe+"]");cell.siblings("td.nv-selected").removeClass("nv-selected");cell.addClass("nv-selected");if(triggerChartUpdate){updateChart();}}};var updateLegend=function(ticker){var $legend=container.find("div.nv-perf-graph-legend");if(!ticker){ticker=$legend.attr('ticker');}
else{$legend.attr('ticker',ticker);}
$legend.find("td.nv-legend").html(container.find("table.nv-perf-table tr[ticker='"+ticker+"'] td.nv-desc").html());var $legendChange=$legend.find("td.nv-legend-change");$legendChange.html('').removeClass('nv-change-up').removeClass('nv-change-down');var timeframe=getSelectedTimeframe();if(ticker!="You"){if(timeframe=='1d'){(new nv.StockQuote(ticker)).onStockDataReady.Bind(function(quote,oldPrice){if($legend.attr('ticker')==ticker&&getSelectedTimeframe()==timeframe){var changePercent=nv.util.Number.formatPercent(quote.changePercent,1);if(quote.changePercent>0){changePercent="+"+changePercent;$legendChange.addClass("nv-change-up");}
else{$legendChange.addClass("nv-change-down");}
$legendChange.html(changePercent);}});}
else{nv.UI.TickerBoardComponent.PerformanceContent.GetSummaryDataAsync(ticker,function(ticker,data){if($legend.attr('ticker')==ticker&&getSelectedTimeframe()==timeframe){if(typeof data[timeframe]!="undefined"){var changePercent=nv.util.Number.formatPercent(data[timeframe]["%"],1);if(data[timeframe]["%"]>0){changePercent="+"+changePercent;$legendChange.addClass("nv-change-up");}
else{$legendChange.addClass("nv-change-down");}
$legendChange.html(changePercent);}}});}}
if(plotUserPerformance){var $legendChangeYou=$legend.find("td.nv-legend-you-change");$legendChangeYou.html('').removeClass('nv-change-up').removeClass('nv-change-down');nv.UI.TickerBoardComponent.PerformanceContent.GetUserPerformanceAsync(function(userPerformance){if($legend.attr('ticker')==ticker&&getSelectedTimeframe()==timeframe){if(typeof userPerformance[timeframe]!="undefined"){var changePercent=nv.util.Number.formatPercent(userPerformance[timeframe],1);if(userPerformance[timeframe]>0){changePercent="+"+changePercent;$legendChangeYou.addClass("nv-change-up");}
else{$legendChangeYou.addClass("nv-change-down");}
$legendChangeYou.html(changePercent);}}});}};var __construct=function(){userCb=new Date().getTime();var html='<div class="nv-perf-content">'+'<div class="nv-perf-graph-legend">'+'<table cellpadding="0" cellspacing="0">'+'<tr>'+
(plotUserPerformance?'<td class="nv-legend-you-key"><div></div></td>'+'<td class="nv-legend-you">You</td>'+'<td class="nv-legend-you-change">+7.8</td>':'')+'<td class="nv-legend-key"><div></div></td>'+'<td class="nv-legend"></td>'+'<td class="nv-legend-change nv-change-up"></td>'+'</tr>'+'</table>'+'</div>'+'<div class="nv-perf-graph">'+'</div>'+'<div class="nv-perf-graph-controls">'+'<table cellpadding="0" cellspacing="0">'+'<tr>'+
(plotUserPerformance?'':'<td class="nv-first" timeframe="1d">1d</td>')+'<td class="nv-selected" timeframe="1w">1w</td>'+'<td timeframe="1m">1m</td>'+'<td timeframe="3m">3m</td>'+'<td timeframe="1y">1y</td>'+'<td class="nv-last" timeframe="YTD">YTD</td>'+'</tr>'+'</table>'+'</div>'+'<table class="nv-perf-table" cellpadding="0" cellspacing="0">'+
(plotUserPerformance?'<tr class="nv-perf-you">'+'<td class="nv-desc" colspan="3">Your 1-Day Return</td>'+'<td class="nv-change-percent">&nbsp;</td>':'<tr class="nv-perf-you doPortfolioAuth" source="perf-chart">'+'<td colspan="4" class="nv-desc">'+'<div class="nv-signin">'+'<span style="nv-raquo">&raquo;</span> Sign in to see your portfolio\'s chart'+'</div>'+'You</td>')+'</tr>';nv.array.iterate(tickers,function(prefixedTicker,name){html+='<tr ticker="'+prefixedTicker+'">'+'<td class="nv-desc">'+name+"</td>"+'<td class="nv-price">&nbsp;</td>'+'<td class="nv-change">&nbsp;</td>'+'<td class="nv-change-percent">&nbsp;</td>'+'</tr>';(new nv.StockQuote(prefixedTicker)).onStockDataReady.Bind(function(quote,oldPrice){var priceFormatted=nv.util.Number.formatWithCommas(quote.price);var priceNumeric=parseFloat(quote.price);if(isNaN(priceNumeric)){return;}
var row=container.find("tr[ticker='"+prefixedTicker+"']");var priceCell=row.find("td.nv-price");var hasDiff=false;if(typeof oldPrice!="undefined"&&oldPrice!==null){var streamClass="";if(priceNumeric>oldPrice){streamClass="nv-stream-change-up";}
else{streamClass="nv-stream-change-down";}
var oldPriceFormatted=nv.util.Number.formatWithCommas(oldPrice);priceFormatted=nv.String.Diff(oldPriceFormatted,priceFormatted,streamClass);if(priceFormatted!==oldPriceFormatted){hasDiff=true;}}
priceCell.html(priceFormatted);if(hasDiff){setTimeout(function(){priceCell.html(priceCell.text());},3000);}
var changeNet=parseFloat(quote.changeNet);var changeCell=row.find("td.nv-change");var changePercentCell=row.find("td.nv-change-percent");if(!quote.changePercent){quote.changePercent=0;}
if(!isNaN(changeNet)){var change=(changeNet>0?"+":"")+
nv.util.Number.formatWithCommas(quote.changeNet);var changePercent="("+
(changeNet>0?"+":"")+
nv.util.Number.formatPercent(quote.changePercent,1)+")";}
changeCell.html(change);changePercentCell.html(changePercent);if(changeNet>0){changeCell.addClass("nv-price-change-up");changePercentCell.addClass("nv-price-change-up");}
else if(changeNet<0){changeCell.addClass("nv-price-change-down");changePercentCell.addClass("nv-price-change-down");}
if(!oldPrice){tickerBoard.updateTimestamp(quote.tradeTimeFormatted);}
if(tickerBoard.isStreamingEnabled()){if(!oldPrice){var callee=arguments.callee;nv.StreamingServices.SubscribeToTickers([prefixedTicker],true,false);nv.StreamingServices.OnStreamingQuote.Bind(function(e){if(e.security.getPrefixedTicker()==prefixedTicker){var newData={};newData.price=e.quote.pr;newData.changeNet=e.quote.cN;newData.changePercent=e.quote.cP;newData.tradeTimeFormatted=e.quote.tF;tickerBoard.updateTimestamp(e.quote.tF,e.quote.tT);callee(newData,oldPrice);oldPrice=newData.price;}});}
oldPrice=priceNumeric;}});});html+="</table></div>";container.html(html);container.find("table.nv-perf-table tr:last").addClass("nv-last");container.find("tr[ticker]").click(function(){var row=$(this);var ticker=row.attr('ticker');container.find('tr.nv-perf-row-selected').removeClass('nv-perf-row-selected');row.addClass('nv-perf-row-selected');updateChart(ticker);});container.find("tr.nv-perf-you").click(function(){if(plotUserPerformance){var row=$(this);container.find('tr.nv-perf-row-selected').removeClass('nv-perf-row-selected');row.addClass('nv-perf-row-selected');updateChart("You");}});container.find("div.nv-perf-graph-controls td[timeframe]").click(function(){var cell=$(this);if(!cell.hasClass("nv-selected")){cell.siblings("td.nv-selected").removeClass("nv-selected");cell.addClass("nv-selected");updateChart();}});$this.Activate(false);container.find('tr[ticker]:first').click();};__construct();};(function(){var summaryDataBatchProcessor=new nv.TimedBatchProcessor(500,500);summaryDataBatchProcessor.OnNewBatchCreated.Bind(function(e){var tickers=[];var tickerToCallbacks=[];nv.array.iterate(e,function(tickerAndCallbackPair){var ticker=tickerAndCallbackPair.ticker;tickers[ticker]=1;if(typeof tickerToCallbacks[ticker]=="undefined"){tickerToCallbacks[ticker]=[];}
tickerToCallbacks[ticker].push(tickerAndCallbackPair.callback);});if(nv.array.count(tickers)>0){nv.http.request({url:nv.Urls.StockData,data:{action:'getSummary',prefixedTickers:nv.array.keys(tickers).join(",")},method:nv.http.Method.GET,timeout:14000,success:function(data){if(data&&data.data){nv.array.iterate(data.data,function(ticker,data){_summaryData[ticker]=data;if(typeof tickerToCallbacks[ticker]!="undefined"){nv.array.iterate(tickerToCallbacks[ticker],function(callback){callback(ticker,data);});}});}}});}});var _summaryData={};nv.UI.TickerBoardComponent.PerformanceContent.GetSummaryDataAsync=function(ticker,callback){if(typeof _summaryData[ticker]!="undefined"){setTimeout(function(){callback(ticker,_summaryData[ticker]);},0);}
else{summaryDataBatchProcessor.AddJob({ticker:ticker,callback:callback});}};var onUserPerformanceEvent=null;nv.UI.TickerBoardComponent.PerformanceContent.GetUserPerformanceAsync=function(callback){if(onUserPerformanceEvent==null){onUserPerformanceEvent=new nv.Event(true);nv.http.request({url:nv.Urls.ServerUrl+"/frontend/portfolio/",method:nv.http.Method.GET,data:{'action':'performance','function':'returnsSummary'},success:function(data){if(data&&data["Me"]){userPerformance=data["Me"];onUserPerformanceEvent.Trigger(userPerformance);}}});}
onUserPerformanceEvent.Bind(callback);};nv.UI.TickerBoardComponent.PerformanceContent.SelectedChartTimeframe=null;})();}
/* /frontend/mashup/ui/TickerBoardComponent/portfolio2col/performanceContent.js*/

/*common/javascript/jquery/jquery.tmpl.js*/

(function(jQuery,undefined){var oldManip=jQuery.fn.domManip,tmplItmAtt="_tmplitem",htmlExpr=/^[^<]*(<[\w\W]+>)[^>]*$|\{\{\! /,newTmplItems={},wrappedItems={},appendToTmplItems,topTmplItem={key:0,data:{}},itemKey=0,cloneIndex=0,stack=[];if(!nv.templates){nv.templates={};}
function newTmplItem(options,parentItem,fn,data){var newItem={data:parentItem&&parentItem!==topTmplItem?jQuery.extendIncludingUndefined({},parentItem.data,data):data||{},_wrap:parentItem?parentItem._wrap:null,tmpl:null,parent:parentItem||null,nodes:[],calls:tiCalls,nest:tiNest,wrap:tiWrap,param:tiParam,update:tiUpdate};if(parentItem&&parentItem.options){options=jQuery.extend({},parentItem.options,options);}
if(options){newItem.options=options;jQuery.extend(newItem,options,{nodes:[],parent:parentItem});}
if(fn){newItem.tmpl=fn;newItem._ctnt=newItem._ctnt||newItem.tmpl(jQuery,newItem);newItem.key=++itemKey;(stack.length?wrappedItems:newTmplItems)[itemKey]=newItem;}
return newItem;}
jQuery.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(name,original){jQuery.fn[name]=function(selector){var ret=[],insert=jQuery(selector),elems,i,l,tmplItems,parent=this.length===1&&this[0].parentNode;appendToTmplItems=newTmplItems||{};if(parent&&parent.nodeType===11&&parent.childNodes.length===1&&insert.length===1){insert[original](this[0]);ret=this;}else{for(i=0,l=insert.length;i<l;i++){cloneIndex=i;elems=(i>0?this.clone(true):this).get();jQuery(insert[i])[original](elems);ret=ret.concat(elems);}
cloneIndex=0;ret=this.pushStack(ret,name,insert.selector);}
tmplItems=appendToTmplItems;appendToTmplItems=null;jQuery.tmpl.complete(tmplItems);return ret;};});jQuery.fn.extend({tmpl:function(data,options,parentItem){return jQuery.tmpl(this[0],data,options,parentItem);},tmplItem:function(){return jQuery.tmplItem(this[0]);},template:function(name){return jQuery.template(name,this[0]);},domManip:function(args,table,callback,options){if(args[0]&&jQuery.isArray(args[0])){var dmArgs=jQuery.makeArray(arguments),elems=args[0],elemsLength=elems.length,i=0,tmplItem;while(i<elemsLength&&!(tmplItem=jQuery.data(elems[i++],"tmplItem"))){}
if(tmplItem&&cloneIndex){dmArgs[2]=function(fragClone){jQuery.tmpl.afterManip(this,fragClone,callback);};}
oldManip.apply(this,dmArgs);}else{oldManip.apply(this,arguments);}
cloneIndex=0;if(!appendToTmplItems){jQuery.tmpl.complete(newTmplItems);}
return this;}});jQuery.extend({tmpl:function(tmpl,data,options,parentItem){var ret,topLevel=!parentItem;if(topLevel){parentItem=topTmplItem;tmpl=nv.templates[tmpl]||jQuery.template(null,tmpl);wrappedItems={};}else if(!tmpl){tmpl=parentItem.tmpl;newTmplItems[parentItem.key]=parentItem;parentItem.nodes=[];return jQuery(build(parentItem,null,parentItem.tmpl(jQuery,parentItem)));}
if(!tmpl){return[];}
if(typeof data==="function"){data=data.call(parentItem||{});}
ret=jQuery.isArray(data)?jQuery.map(data,function(dataItem){return dataItem?newTmplItem(options,parentItem,tmpl,dataItem):null;}):[newTmplItem(options,parentItem,tmpl,data)];return topLevel?jQuery(build(parentItem,null,ret)):ret;},tmplItem:function(elem){var tmplItem;if(elem instanceof jQuery){elem=elem[0];}
while(elem&&elem.nodeType===1&&!(tmplItem=jQuery.data(elem,"tmplItem"))&&(elem=elem.parentNode)){}
return tmplItem||topTmplItem;},template:function(name,tmpl){if(tmpl){if(typeof tmpl==="string"){tmpl=buildTmplFn(tmpl,name);}else if(tmpl instanceof jQuery){if(tmpl[0]){tmpl=tmpl[0];}
else{nv.log("We are about to use {} in place of the template, which likely means that you're trying to access a named template that was not defined. Name was "+tmpl.selector);tmpl={};}}
if(tmpl.nodeType){tmpl=jQuery.data(tmpl,"tmpl")||jQuery.data(tmpl,"tmpl",buildTmplFn(tmpl.innerHTML));}
return typeof name==="string"?(nv.templates[name]=tmpl):tmpl;}
return name?(typeof name!=="string"?jQuery.template(null,name):(nv.templates[name]||jQuery.template(null,htmlExpr.test(name)?name:jQuery(name)))):null;},encode:function(text){if(text==null)return"";return(""+text).split("<").join("&lt;").split(">").join("&gt;").split('"').join("&#34;").split("'").join("&#39;");}});jQuery.extend(jQuery.tmpl,{complete:function(items){newTmplItems={};},afterManip:function afterManip(elem,fragClone,callback){var content=fragClone.nodeType===11?jQuery.makeArray(fragClone.childNodes):fragClone.nodeType===1?[fragClone]:[];callback.call(elem,fragClone);storeTmplItems(content);cloneIndex++;}});function build(tmplItem,nested,content){var frag,ret=content?jQuery.map(content,function(item){return(typeof item==="string")?(tmplItem.key?item.replace(/(<\w+)(?=[\s>])(?![^>]*_tmplitem)([^>]*)/g,"$1 "+tmplItmAtt+"=\""+tmplItem.key+"\" $2"):item):build(item,tmplItem,item._ctnt);}):tmplItem;if(nested){return ret;}
ret=ret.join("");ret.replace(/^\s*([^<\s][^<]*)?(<[\w\W]+>)([^>]*[^>\s])?\s*$/,function(all,before,middle,after){frag=jQuery(middle).get();storeTmplItems(frag);if(before){frag=unencode(before).concat(frag);}
if(after){frag=frag.concat(unencode(after));}});return frag?frag:unencode(ret);}
function unencode(text){var el=document.createElement("div");el.innerHTML=text;return jQuery.makeArray(el.childNodes);}
function buildTmplFn(markup,templateName){return nv.tmpl.build(markup,templateName,{functionObj:true});}
function unescape(args){return args?args.replace(/\\'/g,"'").replace(/\\\\/g,"\\"):null;}
function outerHtml(elem){var div=document.createElement("div");div.appendChild(elem.cloneNode(true));return div.innerHTML;}
function storeTmplItems(content){var keySuffix="_"+cloneIndex,elem,elems,newClonedItems={},i,l,m;for(i=0,l=content.length;i<l;i++){if((elem=content[i]).nodeType!==1){continue;}
elems=elem.getElementsByTagName("*");for(m=elems.length-1;m>=0;m--){processItemKey(elems[m]);}
processItemKey(elem);}
function processItemKey(el){var pntKey,pntNode=el,pntItem,tmplItem,key;if((key=el.getAttribute(tmplItmAtt))){while(pntNode.parentNode&&(pntNode=pntNode.parentNode).nodeType===1&&!(pntKey=pntNode.getAttribute(tmplItmAtt))){}
if(pntKey!==key){pntNode=pntNode.parentNode?(pntNode.nodeType===11?0:(pntNode.getAttribute(tmplItmAtt)||0)):0;if(!(tmplItem=newTmplItems[key])){tmplItem=wrappedItems[key];tmplItem=newTmplItem(tmplItem,newTmplItems[pntNode]||wrappedItems[pntNode]);tmplItem.key=++itemKey;newTmplItems[itemKey]=tmplItem;}
if(cloneIndex){cloneTmplItem(key);}}
el.removeAttribute(tmplItmAtt);}else if(cloneIndex&&(tmplItem=jQuery.data(el,"tmplItem"))){cloneTmplItem(tmplItem.key);newTmplItems[tmplItem.key]=tmplItem;pntNode=jQuery.data(el.parentNode,"tmplItem");pntNode=pntNode?pntNode.key:0;}
if(tmplItem){pntItem=tmplItem;while(pntItem&&pntItem.key!=pntNode){pntItem.nodes.push(el);pntItem=pntItem.parent;}
delete tmplItem._ctnt;delete tmplItem._wrap;jQuery.data(el,"tmplItem",tmplItem);}
function cloneTmplItem(key){key=key+keySuffix;tmplItem=newClonedItems[key]=(newClonedItems[key]||newTmplItem(tmplItem,newTmplItems[tmplItem.parent.key+keySuffix]||tmplItem.parent));}}}
function tiCalls(content,name,data,options){if(!content){return stack.pop();}
stack.push({_:content,name:name,item:this,data:data,options:options||{}});return undefined;}
function tiParam(call,content){if(stack.length==0){nv.error("Tried to define parameter: "+call.name+" when not inside a {{wrap}} call");return;}
var wrap=stack[stack.length-1];var options=wrap.options;var value=build(options,true,content).join("");var previous=options[call.name];if(previous!=null){value=jQuery.isArray(previous)?previous.concat(value):[previous,value];}
options[call.name]=value;}
function tiNest(tmpl,data,options){return jQuery.tmpl(jQuery.template(tmpl),data,options,this);}
function tiWrap(call,wrapped){var options=call.options||{};options.wrapped=wrapped.join('');return jQuery.tmpl(jQuery.template(call.name),call.data,options,call.item);}
function tiUpdate(){var coll=this.nodes;jQuery.tmpl(null,null,null,this).insertBefore(coll[0]);jQuery(coll).remove();}})(nv.JQuery);
/* /common/javascript/jquery/jquery.tmpl.js*/

/*common/javascript/concurrency.js*/

nv.defineSingleton("nv.Concurrency",function(){this.runLater=function(functionToRunLater,howMuchLater){setTimeout(functionToRunLater,howMuchLater||10);};this.Semaphore=function(initialValue){var $this=this;var value=0;var callbacks=[];var __construct=function(initialValue){if(initialValue!=null)value=initialValue;};$this.P=function(callback){callbacks.push(function(){value--;callback();});if(value>0)allowP();};$this.V=function(){value++;if(value>0)allowP();};var allowP=function(){while(callbacks.length>0&&value>0){var callback=callbacks.shift();callback();}};__construct(initialValue);};});
/* /common/javascript/concurrency.js*/

/*common/javascript/jquery/jquery.tmpl.tmplbind.js*/

(function(jQuery,undefined){function curry(func){var args=Array.prototype.slice.call(arguments,1);return function(context){return func.apply(context||{},args.concat(Array.prototype.slice.call(arguments)));};}
var openningOverrides={"table":"tr","tbody":"tr","tr":"td","thead":"th"};var closingOverrides={};for(var k in openningOverrides){if(openningOverrides.hasOwnProperty(k)){var v=openningOverrides[k];closingOverrides[v]=v;}}
var inlineTags={'span':true};var pendingLinks=[];var waitingOnShow=[];var uniqueId=0;jQuery.tmpl.registerLinkTemplate=function(tmplItem,templateName,prevHtml,children,onVisible,eventObject,filter){if(typeof eventObject==="string"){if(typeof tmplItem[eventObject]!=='undefined'){eventObject=tmplItem[eventObject];}
else{nv.log("No event object passed in with key "+eventObject+", so don't expect any updates");eventObject=null;}}
return register(prevHtml,children,{event:eventObject,templateName:templateName,data:tmplItem.data,filter:filter,onVisible:onVisible,options:tmplItem.options});};jQuery.tmpl.registerCall=function(tmplItem,func,prevHtml,args){if(typeof func==="string"){func=tmplItem[func];}
if(!jQuery.isFunction(func)){if(typeof(console)!='undefined'&&typeof(console.log)!='undefined'){console.log("Unknown function "+func+" in {{call}} tag in a jquery tmpl");}
func=jQuery.noop;}
var curried=curry.apply(this,[func].concat(args));return register(prevHtml,[],{func:curried,onVisible:true});};function register(prevHtml,children,linkData){linkData.id="linkedTemplate"+uniqueId++;pendingLinks.push(linkData);var nodeName="span";for(var i=prevHtml.length-1;i>=0;i--){var lastHtml=prevHtml[i];if(typeof lastHtml=='string'){var match=lastHtml.match(/<(\/*)(\w+)[^>]*>\s*$/);if(match){var overrides=!match[1]?openningOverrides:closingOverrides;var lastNodeName=match[2];var override=overrides[lastNodeName];if(override){nodeName=override;}
break;}}}
var inlineVisibilitySpace="";if(inlineTags[nodeName]===true)inlineVisibilitySpace="&nbsp;";return["<"+nodeName+" id='"+linkData.id+"'>"+inlineVisibilitySpace+"</"+nodeName+">",children];};var findPending=function(){while(pendingLinks.length>0){var linkData=pendingLinks.shift();var placeholder=document.getElementById(linkData.id);var elem=placeholder&&placeholder.parentNode;if(!elem||(linkData.onVisible&&elem.offsetWidth===0&&elem.offsetHeight===0)){waitingOnShow.push(linkData);jQuery(placeholder).bind("remove",removeFromWaiting);continue;}
jQuery.removeEvent(placeholder,"remove",removeFromWaiting);elem.removeChild(placeholder);if(linkData.func){var value=linkData.func(elem);if(value&&value!==elem){jQuery(elem).append(value);}}
else if(linkData.event){linkData.event.bind(makeCallback(linkData.filter,elem,linkData.templateName,linkData.data,linkData.options),elem);}}};var removeFromWaiting=function(){for(var i=0;i<waitingOnShow.length;i++){if(waitingOnShow[i].id==this.id){waitingOnShow.splice(i,1);}}};var makeCallback=function(filter,elem,templateName,originalData,originalOptions){var isFilterFunction=jQuery.isFunction(filter);var prevDataForFilterFunction;return function(data,options){if(isFilterFunction){var ret=filter(data,prevDataForFilterFunction);prevDataForFilterFunction=data;if(ret)return;}
else{for(var k in filter){if(data[k]!=filter[k]){return;}}}
var mergedData=jQuery.extendIncludingUndefined({},originalData,data);var perTemplateOptions=originalOptions[templateName];if(jQuery.isArray(perTemplateOptions)){var extendParams=[{}];for(var i=0;i<perTemplateOptions.length;i++){extendParams.push(new perTemplateOptions[i]());}
perTemplateOptions=jQuery.extend.apply(this,extendParams);}
else if(perTemplateOptions instanceof Function){perTemplateOptions=new perTemplateOptions();}
var mergedOptions=jQuery.extend({},originalOptions,options,perTemplateOptions);var tmplItem=null;var children=elem.children;var length=children.length;if(length!=0){for(var i=length-1;i>=0;i--){tmplItem=jQuery.data(children[i],"tmplItem");if(tmplItem){if(tmplItem.tmpl.templateName==templateName)break;tmplItem=tmplItem.parent;if(tmplItem.tmpl.templateName==templateName)break;}}}
if(tmplItem==null){if(length==0){while(elem.lastChild)
elem.removeChild(elem.lastChild);}
jQuery.tmpl(templateName,mergedData,mergedOptions).appendTo(elem);}
else{tmplItem.options=mergedOptions;jQuery.extend(tmplItem,mergedOptions);tmplItem.oldData=tmplItem.data;tmplItem.data=mergedData;tmplItem.update();findPending();}};};var oldComplete=jQuery.tmpl.complete;jQuery.tmpl.complete=function(tmplItems){findPending();oldComplete(tmplItems);};var oldShow=jQuery.prototype.show;jQuery.fn.extend({"show":function(){var result=oldShow.apply(this,arguments);var length=waitingOnShow.length;if(length>0){Array.prototype.push.apply(pendingLinks,waitingOnShow);waitingOnShow.splice(0,length);findPending();}
return result;}});})(nv.JQuery);
/* /common/javascript/jquery/jquery.tmpl.tmplbind.js*/

/*common/javascript/jquery/jquery.tmpl.clearDiff.js*/

(function(jQuery){jQuery.extend(jQuery.tmpl,{clearDiff:function(timeout,node){if(!timeout){timeout=3000;}
setTimeout(function(){var nodes=jQuery(node).find("span.nv-diff-up, span.nv-diff-down");nodes.replaceWith(nodes.contents());},timeout);}});})(nv.JQuery);
/* /common/javascript/jquery/jquery.tmpl.clearDiff.js*/

/*common/javascript/jquery/jquery.tmpl.tags.js*/

(function(exports){exports.tags={"tmpl":{_default:{$2:"null"},open:"$ifdef{_=_.concat($item.nest($1,$2));}"},"wrap":{_default:{$2:"null"},open:"$item.calls(_,$1,$2); _ = [];",close:"call = $item.calls(); _ = call._.concat( $item.wrap( call, _ ) );"},"param":{_default:{$2:"null"},open:"$item.calls(_,$1,$2); _ = [];",close:"call = $item.calls(); $item.param( call, _ ); _ = call._;"},"each":{_default:{$2:"$index, $value"},open:"$.each( $testdef $1 || [],function($2){with( (this == window ? {} : this ) ){",close:"}});"},"if":{open:"if($testdef $1){",close:"}"},"else":{_default:{$1:"true"},open:"}else if($testdef $1){"},"html":{open:"$ifdef{_.push($1 || '');}"},"=":{_default:{$1:"$data"},open:"$ifdef{_.push($.encode($1));}"},"!":{open:""},"subscribe":{_default:{$1:"null",$2:"null"},open:"_ = _.concat(nv.tmpl.subscribe($item, $1, $2));"},"tmplbind":{_default:{$1:"null",$2:"'no key given'"},open:"_=Array.prototype.concat.apply(_,jQuery.tmpl.registerLinkTemplate($item,$1,_,[],false,$2));"},"tmplbindnow":{_default:{$1:"null",$2:"'no key given'"},open:"_=Array.prototype.concat.apply(_,jQuery.tmpl.registerLinkTemplate($item,$1,_,$item.nest($1,$.extendIncludingUndefined({__theTimeIsNow: true},[$2][1],[$2][2])),false,$2));"},"tmplbindlater":{_default:{$1:"null",$2:"'no key given'"},open:"_=Array.prototype.concat.apply(_,jQuery.tmpl.registerLinkTemplate($item,$1,_,[],true,$2));"},"ifnow":{open:"if(typeof __theTimeIsNow !== 'undefined' && __theTimeIsNow === true){",close:"}"},"call":{_default:{$1:"null",$2:"$data"},open:"_=Array.prototype.concat.apply(_,jQuery.tmpl.registerCall($item,$1,_,[$2]));"},"debugger":{open:"debugger;"},"with":{open:"$ifdef{with(( $1 )||{}){",close:"}}"},"snippet":{open:"$1;"},"format":{_default:{$1:"$data",$2:"undefined"},open:"$ifdef{_.push(nv.util.Number.formatWithCommas($1,$2));}"},"aformat":{_default:{$1:"$data",$2:"undefined"},open:"$ifdef{ nv.array.forEach($.isArray($1) ? $1 : [$1], function(v,i) { if (i !== 0) _.push(', '); _.push(nv.util.Number.formatWithCommas(v,$2)); }); }"},"plus":{_default:{$1:"$data",$2:"undefined"},open:"$ifdef{_.push(nv.util.Number.formatWithCommasAndSignIfPositive($1,$2));}"},"dollar":{_default:{$1:"$data",$2:"undefined"},open:"$ifdef{_.push(nv.util.Number.formatDollar($1,$2));}"},"adollar":{_default:{$1:"$data",$2:"undefined"},open:"$ifdef{ nv.array.forEach($.isArray($1) ? $1 : [$1], function(v,i) { if (i !== 0) _.push(', '); _.push(nv.util.Number.formatDollar(v,$2)); }); }"},"percent":{_default:{$1:"$data",$2:"undefined"},open:"$ifdef{_.push(nv.util.Number.formatPercent($1,$2));}"},"apercent":{_default:{$1:"$data",$2:"undefined"},open:"$ifdef{ nv.array.forEach($.isArray($1) ? $1 : [$1], function(v,i) { if (i !== 0) _.push(', '); _.push(nv.util.Number.formatPercent(v,$2)); }); }"},"percentWithSign":{_default:{$1:"$data"},open:"$ifdef{_.push(nv.util.Number.formatPercentAndSignIfPositive($1));}"},"quoteChangeClass":{_default:{$1:"0",$2:"'nv-change-up','nv-change-down',''"},open:"var _num=Number($1);var cssClasses=[$2];_.push(_num>0?cssClasses[0]:(_num<0?cssClasses[1]:cssClasses[2]));"},"diffCurrency":{_default:{$1:"$data",$2:"null,2,'',null"},open:"$ifdef{"+"var arg1=$1;"+"var args=[$2];"+"var diffClass= (arg1>args[0]?'nv-diff-up':(args[0]>arg1?'nv-diff-down':''));"+"_.push(nv.String.Diff("+"nv.util.Number.formatWithCommas(args[0],args[1],args[2]),nv.util.Number.formatWithCommas(arg1,args[1],args[2]),diffClass)"+");"+"_=Array.prototype.concat.apply(_,jQuery.tmpl.registerCall($item,$.tmpl.clearDiff,_,args[3]));"+"}"}};})(typeof nv!=='undefined'?(nv.JQuery.tmpl):exports);
/* /common/javascript/jquery/jquery.tmpl.tags.js*/

/*common/javascript/jquery/jquery.tmpl.parser.js*/

(function(exports){if(typeof require!=='undefined'){var defaultTags=require("./jquery.tmpl.tags.js").tags;}
else{var defaultTags=nv.JQuery.tmpl.tags;}
var TOKEN_TYPE_OPEN_TAG=0;var TOKEN_TYPE_CLOSE_TAG=1;var TOKEN_TYPE_CONTROL_COMMENT=3;var LEVEL_WARNING=0;var LEVEL_ERROR=1;TEMPLATE="template";SNIPPET="snippet";var validJsNameRegex=/^[$A-Za-z_][0-9A-Za-z_]*$/;function getCodeForString(str){return escapeQuotesForCode(str);};function escapeQuotesForCode(str){return str.replace(/'/g,"\\'").replace(/\s+/g,' ');};function sanitizeSource(str){return str.replace(/_.push\(''\);/g,'');};function build(parseTree,templateName,options){var customTags=options.tags||{};function getCodeForTag(node){var tag=customTags[node.tag]||defaultTags[node.tag];if(!tag){throw"Template command not found: "+node.tag;}
var def=tag._default||[];var target=node.$1;var expr=target?unescape(target):def.$1||"null";var fnargs=node.$2?unescape(node.$2):def.$2||"";var validJsName=validJsNameRegex.test(target);var testdef=target&&validJsName?"typeof("+target+")!=='undefined' &&":"";var ifdef=target&&validJsName?"if (typeof("+target+")!=='undefined')":"";return"');"+"\n/* line "+node.n+" */\n"+
tag[node.t===TOKEN_TYPE_CLOSE_TAG?"close":"open"].split("$ifdef").join(ifdef).split("$testdef").join(testdef).split("$1").join(expr).split("$2").join(fnargs)+"\n_.push('";};var controlComments=[];var sourceArray=[];sourceArray.push("_.push('");for(var i=0;i<parseTree.length;i++){var currNode=parseTree[i];if(typeof currNode=='object'){switch(currNode.t){case TOKEN_TYPE_OPEN_TAG:case TOKEN_TYPE_CLOSE_TAG:var codeForTag=getCodeForTag(currNode);sourceArray.push(codeForTag);break;case TOKEN_TYPE_CONTROL_COMMENT:if(currNode.type=="template"){templateName=currNode.args;}
controlComments.push("/* nv:",currNode.type," ",currNode.args," */\n");break;default:throw"Shouldn't have any other token types";break;}}
else{var current=getCodeForString(currNode);if(current==' '&&(/ $/).test(sourceArray[sourceArray.length-1]))continue;sourceArray.push(current);}}
sourceArray.push("');");var source=sanitizeSource(sourceArray.join(''));if(options.output==SNIPPET){return source;}
var functionSourceArray=[];functionSourceArray.push("var $=jQuery,call,_=[],$data=$item.data;\n");functionSourceArray.push("with($data){\n");functionSourceArray.push(source);functionSourceArray.push("\n}return _;");var functionSource=sanitizeSource(functionSourceArray.join(''));if(!options.functionObj){if(!templateName){throw"Compling requires template name (either explicit or nv:template command comment";}
return controlComments.join('')+"(nv.templates['"+templateName+"'] = function(jQuery, $item) {\n"+functionSource+"\n}).templateName = '"+templateName+"';\n";}
try{var ret=new Function("jQuery","$item",functionSource);ret.templateName=templateName;return ret;}
catch(e){nv.log("Chances are you have a syntax error in one of your JS expressions inside the template, because the Function constructor threw. Here's the code:\n\n"+functionSource);throw e;}}
var stateNumber=0;var STATE_START=stateNumber++;var STATE_TAG_NAME=stateNumber++;var STATE_TAG_$2=stateNumber++;var STATE_TAG_$1=stateNumber++;var STATE_CONTROL_COMMENT_NAME=stateNumber++;var STATE_CONTROL_COMMENT_ARGS=stateNumber++;var regexes={};regexes[STATE_START]=/\{\{|\n|\/\*[ ]*nv:/g;regexes[STATE_TAG_NAME]=/\(| |\n|\t|\r\n|\}\}/g;regexes[STATE_TAG_$2]=/\(|\)/g;regexes[STATE_TAG_$1]=/{|}|\n|\/\*|\/\/|"|'/g;regexes[STATE_CONTROL_COMMENT_NAME]=/\*| |\n/g;regexes[STATE_CONTROL_COMMENT_ARGS]=/[ ]*\*\//g;function parse(markup,templateName,options){var throwLevel=options.throwLevel==null?LEVEL_ERROR:options.throwLevel;for(var key in regexes){regexes[key].lastIndex=0;}
var length=markup.length;var currMatch;var currState=STATE_START;var lineNumber=1;var tokens=[];var stack=[];var regex=regexes[currState];function skiptil(lookfor){lookfor.lastIndex=regex.lastIndex;var skipmatch=lookfor.exec(markup);if(skipmatch==null){throw{message:"Mismatched "+lookfor,level:LEVEL_WARNING};}
regex.lastIndex=lookfor.lastIndex;}
function state(newState){currState=newState;var oldRegex=regex;regex=regexes[newState];regex.lastIndex=oldRegex.lastIndex;};var from=0;function token(t){var upto=markup.substring(from,regex.lastIndex-currMatch.length);if(upto.length>0)tokens.push(upto);from=regex.lastIndex;tokens.push({t:t,n:lineNumber});};function tokenparam(param){tokens[tokens.length-1][param]=markup.substring(from,regex.lastIndex-currMatch.length);from=regex.lastIndex;};var regexResult;while((regexResult=regex.exec(markup))!=null){var currMatch=regexResult[0];if(currMatch=="\n")lineNumber++;try{switch(currState){case STATE_START:switch(currMatch){case'{{':if(markup.charAt(regex.lastIndex)==='!'){tokens.push(markup.substring(from,regex.lastIndex-currMatch.length));regex.lastIndex=markup.indexOf('}}',regex.lastIndex)+2;from=regex.lastIndex;}
else{if(markup.charAt(regex.lastIndex)==='/'){token(TOKEN_TYPE_CLOSE_TAG);from++;}
else{token(TOKEN_TYPE_OPEN_TAG);}
state(STATE_TAG_NAME);}
break;case"\n":break;case"/*nv:":case"/* nv:":token(TOKEN_TYPE_CONTROL_COMMENT);state(STATE_CONTROL_COMMENT_NAME);break;}
break;case STATE_CONTROL_COMMENT_NAME:tokenparam("type");switch(currMatch){case' ':case'\n':state(STATE_CONTROL_COMMENT_ARGS);break;case'*':state(STATE_START);from++;}
break;case STATE_CONTROL_COMMENT_ARGS:tokenparam("args");switch(currMatch){case'*/':case' */':state(STATE_START);break;}
break;case STATE_TAG_NAME:tokenparam("tag");switch(currMatch){case'(':state(STATE_TAG_$2);break;case' ':case"\t":case"\n":case"\r\n":state(STATE_TAG_$1);break;case'}}':state(STATE_START);break;}
break;case STATE_TAG_$2:switch(currMatch){case'(':stack.push(currMatch);break;case')':if(stack.length==0){tokenparam("$2");state(STATE_TAG_$1);from++;}
else if(stack[stack.length-1]=='('){stack.pop();}
else{throw{message:") closing a "+stack[stack.length-1],level:LEVEL_ERROR};}
break;}
break;case STATE_TAG_$1:switch(currMatch){case'{':stack.push(currMatch);break;case'}':if(stack.length==0){if(markup.charAt(regex.lastIndex)!='}'){throw{message:"We shouldn't have anything but a closing brace here. Mismatched braces?",level:LEVEL_ERROR};}
tokenparam("$1");state(STATE_START);from++;}
else if(stack[stack.length-1]=='{'){stack.pop();}
else{throw{message:"} closing a "+stack[stack.length-1],level:LEVEL_ERROR};}
break;case"'":case'"':if(markup.charAt(regex.lastIndex)==currMatch){regex.lastIndex++;break;}
skiptil(currMatch=='\''?(/[^\\]'/g):(/[^\\]"/g));break;case'/*':skiptil(/\*\//g);break;case'//':skiptil(/\/\//g);break;}
break;}}
catch(e){if(typeof nv!=='undefined'){nv.log(["SYNTAX "+(e.level==LEVEL_ERROR?"ERROR":"WARNING")+" IN TEMPLATE DEFINITION\n","Template Name:  "+templateName,"Line number:    "+lineNumber,"Message:        "+e.message].join("\n"));}
if(e.level>=throwLevel||typeof e.nextState=='undefined'){throw{message:e.message,level:e.level,lineNumber:lineNumber,templateName:templateName};}
else{state(e.nextState);}}}
if(from<markup.length){tokens.push(markup.substring(from));}
return tokens;};function parseTreeToSource(parseTree){var filteredParseTree=[];for(var i=0;i<parseTree.length;i++){var currNode=parseTree[i];if(typeof currNode=='object'){var stringEquivalent="";switch(currNode.t){case TOKEN_TYPE_OPEN_TAG:stringEquivalent="{{"+currNode.tag+"("+currNode.$2+") "+currNode.$1+"}}";break;case TOKEN_TYPE_CLOSE_TAG:stringEquivalent="{{/"+currNode.tag+"}}";break;default:break;}
filteredParseTree.push(stringEquivalent);}
else{filteredParseTree.push(currNode.replace("\\n","\n"));}}
return filteredParseTree.join('');};function tsv2tags(text,start){var tags={};var lines=text.split('\n');for(var i=start||0;i<lines.length;i++){var line=lines[i];var fields=line.split('\t');if(fields.length<2)continue;var parseTree=parse(fields[1],"dummy",{});var snippet=build(parseTree,"dummy",{output:SNIPPET});tags[fields[0]]={"open":snippet};}
return tags;};exports.build=function(markup,templateName,options){options=options||{};if(options.tsv){options.tags=tsv2tags(options.tsv);}
var parseTree=parse(markup,templateName,options);var fun=build(parseTree,templateName,options);return fun;};exports.LEVEL_WARNING=LEVEL_WARNING;exports.LEVEL_ERROR=LEVEL_ERROR;exports._parse=parse;exports._build=build;exports._tsv2tags=tsv2tags;exports._TOKEN_TYPE_OPEN_TAG=TOKEN_TYPE_OPEN_TAG;exports._TOKEN_TYPE_CLOSE_TAG=TOKEN_TYPE_CLOSE_TAG;exports._TOKEN_TYPE_CONTROL_COMMENT=TOKEN_TYPE_CONTROL_COMMENT;exports.TEMPLATE=TEMPLATE;exports.SNIPPET=SNIPPET;})(typeof nv!=='undefined'?(nv.tmpl={}):exports);
/* /common/javascript/jquery/jquery.tmpl.parser.js*/

/*common/javascript/jquery/jquery.extendIncludingUndefined.js*/

(function(jQuery){jQuery.extendIncludingUndefined=jQuery.fn.extendIncludingUndefined=function(){var options,name,src,copy,copyIsArray,clone,target=arguments[0]||{},i=1,length=arguments.length,deep=false;if(typeof target==="boolean"){deep=target;target=arguments[1]||{};i=2;}
if(typeof target!=="object"&&!jQuery.isFunction(target)){target={};}
if(length===i){target=this;--i;}
for(;i<length;i++){if((options=arguments[i])!=null){for(name in options){src=target[name];copy=options[name];if(target===copy){continue;}
if(deep&&copy&&(jQuery.isPlainObject(copy)||(copyIsArray=jQuery.isArray(copy)))){if(copyIsArray){copyIsArray=false;clone=src&&jQuery.isArray(src)?src:[];}else{clone=src&&jQuery.isPlainObject(src)?src:{};}
target[name]=jQuery.extendIncludingUndefined(deep,clone,copy);}else{target[name]=copy;}}}}
return target;};})(nv.JQuery);
/* /common/javascript/jquery/jquery.extendIncludingUndefined.js*/

/*common/javascript/jquery/jquery.tmpl.lazycompile.js*/

(function(jQuery,undefined){if(typeof nv.TemplateMap==='undefined'){nv.TemplateMap={};}
var originalJQueryTemplateFn=jQuery.template;jQuery.template=function(name,tmpl){if(!tmpl&&nv.templates[name]){return nv.templates[name];}
for(var i=0;i<arguments.length;i++){var key=arguments[i];if(nv.TemplateMap[key]!=null){if(nv.TemplateMap[key]==''){nv.error("You wanted "+key+" to be an empty template, didn't you now? A noble desire, indeed. Too bad you CAN'T DO THAT, thanks to our friends who wrote jquery.tmpl. They use type-oblivious if conditions, so an empty template is as good as and undefined template. Sucks, eh? Yes, I know, I know. After you're done swearing, go ahead and add an empty line to your templates, and it'll work. But don't you wish you didn't have to do something like that?? I sure do...");}
return originalJQueryTemplateFn(key,nv.TemplateMap[key]);}}
var result=originalJQueryTemplateFn(name,tmpl);if(typeof result!='function'){if(name!==null){nv.error("Chances are you haven't defined the "+name+" template.");}
else if(name==null&&typeof tmpl=='object'&&tmpl.selector){nv.error("Chances are you haven't defined the "+tmpl.selector+" template; jQuery is trying to look up a DOM element containing the template definition.");}
else{nv.error("Chances are you haven't defined some template, whose name we don't know. Good luck debugging that.");}}
return result;};})(nv.JQuery);
/* /common/javascript/jquery/jquery.tmpl.lazycompile.js*/

/*common/javascript/jquery/jquery.tmpl.includes.js*/

/* /common/javascript/jquery/jquery.tmpl.includes.js*/

/*frontend/mashup/ui/TickerBoardComponent/portfolio2col/tmpl/Anonymous.preview.tmpl.js*/

(nv.templates['nv.widget.tickerboard.portfolio2col.Anonymous.preview']=function(jQuery,$item){var $=jQuery,call,_=[],$data=$item.data;with($data){_.push(' <div class="nv-signin-preview"> <div class="nv-signin-preview-image"></div> <div class="nv-signin-preview-popup-button"></div> <div class="nv-start-now-button doPortfolioAuth" source="portfolio" >Start Now</div> </div> ');}return _;}).templateName='nv.widget.tickerboard.portfolio2col.Anonymous.preview';
/* /frontend/mashup/ui/TickerBoardComponent/portfolio2col/tmpl/Anonymous.preview.tmpl.js*/

/*frontend/mashup/ui/TickerBoardComponent/portfolio2col/portfolioSignInContent.js*/

nv.defineAwesomeClass("nv.UI.TickerBoardComponent.PortfolioSignInContent",function($this,$protected){"use strict";var graphicName=null;var tickerboard;$this.__construct=function(container,newTickerboard){tickerboard=newTickerboard;var preview=function(){var dom=nv.JQuery.tmpl("nv.widget.tickerboard.portfolio2col.Anonymous.preview");nv.JQuery.nvlive(".nv-signin-preview-popup-button",'click',function(){var url='http://cdn.wikinvest.com/partner/Forbes/frontend/mashup/ui/TickerBoardComponent/portfolio2col/tmpl/preview_image.html';var width=1011;var height=667;window.open(url,"previewPopup","status=0,toolbar=0,location=0,menubar=0,directories=0,resizable=0,scrollbars=0,height="+height+",width="+width);nv.Analytics.trackAction('Widget-Portfolio2Col-'+nv.getCurrentPartnerToken()+'-Preview','Clicked','Preview Button',1);return false;});return dom;};var allOptions={'preview':preview};graphicName='preview';var forcedOption=window.location.search.match(/\bcreative=([a-zA-Z0-9_]+)\b/);if(forcedOption){if(typeof allOptions[forcedOption[1]]!="undefined"){graphicName=forcedOption[1];}}
var option=allOptions[graphicName]();container.html(option);};$this.getCurrentGraphicName=function(){return graphicName;};});
/* /frontend/mashup/ui/TickerBoardComponent/portfolio2col/portfolioSignInContent.js*/

/*frontend/mashup/ui/TickerBoardComponent/portfolio2col/moversContent.js*/

if(nv.CreateNamespace("nv.UI.TickerBoardComponent.MoversContent")){nv.UI.TickerBoardComponent.MoversContent=function(container,tickerboard,numGainers,numLosers,numMovers,loggedIn){var $=nv.JQuery;var $this=this;var $content=null;var __construct=function(){container.html('<div class="nv-movers"></div>');$content=container.find("div.nv-movers");if(loggedIn){$content.addClass('nv-movers-loggedin');}
$content.html('<div class="nv-movers-loading">Loading..</div>');if(!loggedIn){var glm=new nv.GainersLosersMovers(numGainers,numLosers,numMovers,150000000);glm.onDataReady.Bind(function(data){if(data){if(data.gainers){data.gainers.sort(function(a,b){return b.netPercentChangeFromLastClose-a.netPercentChangeFromLastClose;});}
if(data.losers){data.losers.sort(function(a,b){return a.netPercentChangeFromLastClose-b.netPercentChangeFromLastClose;});}
onData(data);}
else{onFailed();}});glm.onDataFailed.Bind(onFailed);}};$this.setData=function(data){onData(data);};$this.setDataFailed=function(){onFailed();};var getLinkForPrefixedTicker=function(prefixedTicker){if(!prefixedTicker){return null;}
return nv.Urls.ServerUrl+"/frontend/mashup/?action=viewtearsheet&ticker="+prefixedTicker;};var onData=function(data){var $gainers=null;var $losers=null;var $movers=null;if(numGainers>0&&data.gainers){$gainers=$("<div></div>");renderData(data.gainers,"gainers",$gainers,numGainers);}
if(numLosers>0&&data.losers){$losers=$("<div></div>");renderData(data.losers,"losers",$losers,numLosers);}
if(numMovers>0&&data.movers){$movers=$("<div></div>");renderData(data.movers,"movers",$movers,numMovers);}
var $table=$('<table class="nv-movers-main-table" cellpadding="0" cellspacing="0"><tr></tr></table>');var $row=$table.find('tr');if($gainers){$row.append('<td class="nv-mover-cell nv-gainers-cell"></td>').find('td.nv-gainers-cell').append($gainers);}
if($losers){$row.append('<td class="nv-mover-cell nv-losers-cell"></td>').find('td.nv-losers-cell').append($losers);}
if($movers){$row.append('<td class="nv-mover-cell nv-movers-cell"></td>').find('td.nv-movers-cell').append($movers);}
if(!loggedIn){$row.append('<td class="nv-mover-cell nv-promo-cell"></td>').find('td.nv-promo-cell').append('<div>'+'<img src="'+nv.Urls.TransparentPixel+'" class="nv-movers-sign-up doPortfolioAuth" source="movers" auth="auto" />'+'<img src="'+nv.Urls.TransparentPixel+'" class="nv-movers-sign-in doPortfolioAuth" auth="login" />'+'</div>');}
$row.find("table.nv-mover-table").find("tr:last").addClass('nv-last');$content.empty().append($table);};var renderData=function(data,text,element,max){var html='<table class="nv-mover-table" cellpadding="0" cellspacing="0"><tr class="nv-header-row"><td colspan="3">'+text+'</td></tr>';var i=0;nv.array.iterate(data,function(v){if(++i>max){return nv.array.BREAK;}
var security=new nv.Security(v.prefixedTicker);var link=getLinkForPrefixedTicker(v.prefixedTicker);html+='<tr><td class="nv-ticker-cell">'+
(link?'<a href="'+link+'" target="'+tickerboard.getLinksTarget()+'">'+security.ticker+'</a>':security.ticker)+'</td>'+'<td class="nv-change-cell">'+
(loggedIn?nv.util.Number.format(v.netChangeFromLastClose):nv.util.Number.format(v.netPercentChangeFromLastClose)+"%")+"</td>"+
(loggedIn?'<td class="nv-change-percent-cell">('+
nv.util.Number.formatPercent(v.netPercentChangeFromLastClose)+")":"")+'</tr>';return true;});if(i===0){html+='<tr><td class="nv-no-tops" colspan="2">No '+text+' today</td></tr>';}
html+='</table>';element.html(html);};var onFailed=function(){$content.html('<div class="nv-movers-loading">Unable to load market data</div>');};__construct();};}
/* /frontend/mashup/ui/TickerBoardComponent/portfolio2col/moversContent.js*/
