
$.namespace('globe.common.util');globe.common.util.pagination=function(){var resultCount=undefined;var resultsPerPage=undefined;var baseUrl=undefined;var override=undefined;this.init=function(resultCount,resultsPerPage,baseUrl,override){this.resultCount=resultCount;this.resultsPerPage=resultsPerPage;this.baseUrl=baseUrl;this.override=override}
this.pageLink=function(page,text,linkClass){if(this.override!=undefined){return this.override(page,text,linkClass);}else{var url;if(text==undefined){text=page.toString();}
if(this.baseUrl.indexOf("page=")>=0){url=this.baseUrl.replaceAll("page=[0-9a-zA-Z]*","page="+page);}
else{var sep=this.baseUrl.indexOf('?')<0?"?":"&";url=this.baseUrl+sep+"page="+page;}
return"<a href=\""+url+"\""+
(linkClass==undefined?"":" class=\""+linkClass+"\"")+">"+text+"</a>";}}
this.pageLinks=function(page){var numPages=Math.ceil(this.resultCount/this.resultsPerPage);if(numPages>1){var buf='';var s=Math.max(1,(Math.floor(page/5.0)-1)*5+1);var e=Math.min(numPages,Math.ceil((page+1)/5.0)*5);if(s>1){buf=buf+(this.pageLink(s-1,"&#9664;","prev")+" ");}
for(var i=s;i<=e;i++){if(i==page){buf=buf+(i+" ");}
else{buf=buf+(this.pageLink(i)+" ");}}
if(e<numPages){buf=buf+(this.pageLink(e+1,"&#9654;","next"));}
return buf;}
else{return"";}}};globe.common.util.Number={separateThousands:function(s,n){var sign='';var decimals=null;if(typeof n!='string'){n=''+n;}
if(parseFloat(n)<0){sign='-';}
if(n.indexOf('.')!=-1){var arr=n.split('.');n=arr[0];decimals=arr[1];}
n=parseFloat(n);n=''+Math.abs(n);return sign+(function _(s,n,i,j){if(i<0){return n.substring(0,j);}
return _(s,n,i-3,j-3)+(i>0?s:'')+n.substring(i,j);})(s,n,n.length-3,n.length)+(decimals?'.'+decimals:'');},roundDecimals:function(n,d){return parseFloat(n).toFixed(d);},format:function(n,o){if(isNaN(n)||n===0||n=='0'){return'--';}
if(o.zeroIsNull===true&&n===0){return'--';}
if(o.decimals!==undefined){n=this.roundDecimals(n,o.decimals);}
if(o.separateThousands===true){n=this.thousandsComma(n);}
var prefix=o.prefix||'';var suffix=o.suffix||'';return prefix+n+suffix;}};globe.common.util.Number.thousandsComma=globe.common.util.Number.separateThousands.partial(',');globe.common.util.Date={};globe.common.util.Date.format=function(){var token=/d{1,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\1?|[LloSZ]|"[^"]*"|'[^']*'/g,timezone=/\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[\-+]\d{4})?)\b/g,timezoneClip=/[^\-+\dA-Z]/g,pad=function(val,len){val=String(val);len=len||2;while(val.length<len){val="0"+val;}
return val;};return function(date,mask,utc){var dF=globe.common.util.Date.format;if(arguments.length==1&&(typeof date=="string"||date instanceof String)&&!/\d/.test(date)){mask=date;date=undefined;}
date=date?new Date(date):new Date();if(isNaN(date)){throw new SyntaxError("invalid date");}
mask=String(dF.masks[mask]||mask||dF.masks["default"]);if(mask.slice(0,4)=="UTC:"){mask=mask.slice(4);utc=true;}
var _=utc?"getUTC":"get",d=date[_+"Date"](),D=date[_+"Day"](),m=date[_+"Month"](),y=date[_+"FullYear"](),H=date[_+"Hours"](),M=date[_+"Minutes"](),s=date[_+"Seconds"](),L=date[_+"Milliseconds"](),o=utc?0:date.getTimezoneOffset(),flags={d:d,dd:pad(d),ddd:dF.i18n.dayNames[D],dddd:dF.i18n.dayNames[D+7],m:m+1,mm:pad(m+1),mmm:dF.i18n.monthNames[m],mmmm:dF.i18n.monthNames[m+12],yy:String(y).slice(2),yyyy:y,h:H%12||12,hh:pad(H%12||12),H:H,HH:pad(H),M:M,MM:pad(M),s:s,ss:pad(s),l:pad(L,3),L:pad(L>99?Math.round(L/10):L),t:H<12?"a":"p",tt:H<12?"am":"pm",T:H<12?"A":"P",TT:H<12?"AM":"PM",Z:utc?"UTC":(String(date).match(timezone)||[""]).pop().replace(timezoneClip,""),o:(o>0?"-":"+")+pad(Math.floor(Math.abs(o)/60)*100+Math.abs(o)%60,4),S:["th","st","nd","rd"][d%10>3?0:(d%100-d%10!=10)*d%10]};return mask.replace(token,function($0){return $0 in flags?flags[$0]:$0.slice(1,$0.length-1);});};}();globe.common.util.Date.format.masks={"default":"ddd mmm dd yyyy h:MM:ss",shortDate:"m/d/yy",mediumDate:"mmm d, yyyy",longDate:"mmmm d, yyyy",fullDate:"dddd, mmmm d, yyyy",shortTime:"h:MM TT",mediumTime:"h:MM:ss TT",longTime:"h:MM:ss TT Z",isoDate:"yyyy-mm-dd",isoTime:"h:MM:ss",isoDateTime:"yyyy-mm-dd'T'h:MM:ss",isoUtcDateTime:"UTC:yyyy-mm-dd'T'h:MM:ss'Z'",timestamp:'"As of" ddd mmm dd, yyyy h:MM:ss TT Z',chartstamp:"yyyy-mm-dd HH:MM:ss",stockstamp:"h:MM TT Z",fundstamp:"mmm dd"};globe.common.util.Date.format.i18n={dayNames:["Sun","Mon","Tue","Wed","Thu","Fri","Sat","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],monthNames:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec","January","February","March","April","May","June","July","August","September","October","November","December"]};Date.prototype.format=function(mask,utc){return globe.common.util.Date.format(this,mask,utc);};globe.common.util.formatters={company:function(data,row){console.warn('globe.common.util.formatters.company is deprecated, use stocks instead');return globe.common.util.formatters.stocks(data,row);},indexSymbol:function(data,row){console.warn('globe.common.util.formatters.indexSymbol is deprecated, use indexes instead');return globe.common.util.formatters.indexes(data,row);},symbol:function(data,row){var symbol=row.symbol+'-'+row.exchangeCode;return'<a href="'+globe.conf.stockQuoteUrl+'?q='+symbol+'">'+symbol+'</a>';},funds:function(data,row){var fundId=row.fundId;return'<a href="'+globe.conf.fundQuoteUrl+'?id='+fundId+'&amp;companyName='+encodeURIComponent(row.companyName)+'">'+data+'</a>';},stocks:function(data,row){var symbol=row.symbol+'-'+row.exchangeCode;return'<a href="'+globe.conf.stockQuoteUrl+'?q='+symbol+'">'+data+'</a>';},indexes:function(data,row){var symbol=row.symbol||row.indexSymbol;var exchangeCode='';try{exchangeCode='-'+row.exchangeCode;}
catch(e){exchangeCode='';}
return'<a href="'+globe.conf.indexQuoteUrl+'?q='+symbol+exchangeCode+'">'+data+'</a>';},number:function(data){return globe.common.util.Number.format(data,{decimals:0,separateThousands:true});},decimal:function(data){return globe.common.util.Number.format(data,{decimals:2,separateThousands:true});},percent:function(data){return globe.common.util.formatters.decimal(data);},price:function(data){var d;if(Math.abs(data)<0.00095){d=4;}else if(Math.abs(data)<0.0095){d=3;}else{d=2;}
return globe.common.util.Number.format(data,{decimals:d,separateThousands:true,zeroIsNull:true});},marketCap:function(data){if(data>1000000){return globe.common.util.Number.format(data/1000000,{decimals:2,separateThousands:true,suffix:'M'});}
return globe.common.util.formatters.number(data);},months:function(data){var months=data;return months;},datetime:function(data){return globe.common.util.Date.format(parseInt(data),'"As of" ddd mmm dd, yyyy h:MM TT Z');},shortdate:function(data){return globe.common.util.Date.format(parseInt(data),'mm/dd h:MM TT Z');},stockstamp:function(data){var date=parseInt(data);date=new Date(date);if(isNaN(date)){throw new SyntaxError("invalid date");}
var one_day=1000*60*60*24;if(Math.ceil((new Date().getTime()-date)/(one_day))>1){return globe.common.util.Date.format(parseInt(data),'fundstamp');}else{return globe.common.util.Date.format(parseInt(data),'stockstamp');}},fundstamp:function(data){return globe.common.util.Date.format(parseInt(data),'fundstamp');}};Array.prototype.find=function(v){var a=this;return(function binarySearch(l,h){if(h<l){return-1;}
var m=Math.floor(l+(h-l)/2);if(a[m]>v){return binarySearch(l,m-1);}
else if(a[m]<v){return binarySearch(m+1,h);}
return m;})(0,this.length-1);};;$.namespace('globe.common');globe.common.AjaxManager={_requestUrl:globe.conf.templateUrl+'/ajax/',_isExpired:function(options){if(!options.expireTime)return false;return new Date().getTime()>=options.expireTime;},_invoke:function(name,options){$.publish(name+'-before');options=$.extend({},options);options.data=options.data||{};options.data.ts=new Date().getTime();$.ajax($.extend({timeout:20000,type:'GET',dataType:'json',success:function(json){if(json.errors!==undefined){$.publish(name+'-error',{status:400,statusText:'Bad Request',responseText:'',responseXML:null},'error',null,json);return;}
$.publish(name+'-success',json);if(options.periodically&&!globe.common.AjaxManager._isExpired(options)){setTimeout(function(){$.publish('run-request.'+name,name,options);},options.periodically);}else{globe.common.AjaxManager.removeRequest(name);}},error:function(xhr,status,error){$.publish(name+'-error',xhr,status,error);},complete:function(){$.publish(name+'-complete');}},options));},newRequest:function(name,options){options=options||{data:{}};if(options.proxy===true){var originalUrl=options.url,params='';if(options.data!==undefined){params=$.param(options.data);delete options.data;originalUrl=originalUrl+(/\?/.test(originalUrl)?'&':'?')+params;}
originalUrl=encodeURIComponent(originalUrl);options.url=this._requestUrl+'proxy.jsp?path='+originalUrl;}
$.subscribe('run-request.'+name,globe.common.AjaxManager,'_invoke');if(options.delay){setTimeout(function(){$.publish('run-request.'+name,name,options);},options.delay);}else{$.publish('run-request.'+name,name,options);}},removeRequest:function(name){$.unsubscribeAll('run-request.'+name);}};$.subscribe('invoke-request',globe.common.AjaxManager,'newRequest');$.subscribe('remove-request',globe.common.AjaxManager,'removeRequest');$.namespace('globe.common');globe.common.Cache=function(o){var _items={};o=o||{};var _maxSize=o.maxSize||100;var _ttl=o.ttl||2*60*1000;var _policy=o.policy||'FIFO';var _stats={hits:0,misses:0,count:0};var _remove=function(k){delete _items[k];_stats.count--;};var _algorithms={FIFO:function(){for(var k in _items){if(_items.hasOwnProperty(k)){_remove(k);break;}}},LRU:function(){var key;var time=Infinity;for(var k in _items){if(_items[k].used<time){key=k;time=_items[k].used;}}
_remove(key);}};if(!_algorithms[_policy]){throw'Defined policy is not valid: '+_policy;}
var _purge=function(){for(var k in _items){if(_items.hasOwnProperty(k)){var item=_items[k];if(item.expired()){_remove(k);}}}
if(_stats.count>=_maxSize){_algorithms[_policy].call();}};this.get=function(k){var item=_items[k];if(item){if(!item.expired()){var now=new Date().getTime();_stats.hits++;item.used=now;return item.value;}
_remove(k);}
_stats.misses++;return null;};this.set=function(k,v,o){var et;o=o||{};if(o.expireTime){et=o.expireTime;}else if(o.ttl){et=new Date().getTime()+o.ttl;}else{et=new Date().getTime()+_ttl;}
if(_stats.count==_maxSize){_purge();}
if(_items[k]===undefined){_stats.count++;}
_items[k]={value:v,expired:function(){return et<=new Date().getTime();},used:new Date().getTime()};};this.clear=function(){for(var k in _items){if(_items.hasOwnProperty(k)){_remove(_items[k]);}}};this.keys=function(){var arr=[];for(var k in _items){if(_items.hasOwnProperty(k)){arr.push(k);}}
return arr;};this.stat=function(q){return _stats[q];};};$.namespace('globe.common');globe.common.cli={hist:[],conf:{cli:'globe-cli',hist:'globe-cli-hist',cmd:'globe-cli-cmd'},commands:{help:{shortHelp:'This help command',longHelp:'Shows you the help documentation for a command.',fn:function(me,cmd){if(cmd===undefined){var all='';this.addHist('Here is a list of commands you can run.');for(var c in this.commands){this.addHist('\t'+c+': '+this.commands[c].shortHelp);}}else{if(this.commands.hasOwnProperty(cmd)){this.addHist(cmd+': '+this.commands[cmd].shortHelp);this.addHist(this.commands[cmd].longHelp);}else{this.addHist(cmd+': command not found');}}
this.repaint();}},contra:{shortHelp:'Contra pwns!',longHelp:'Displays Contra as the background image on the page.',fn:function(){$('body').css({'background-image':"url('"+globe.conf.mediaUrl+"/images/common/contra.gif')",'background-attachment':'fixed'});}}},cmd:function(){return $.trim($('#'+this.conf.cmd).attr('value'));},addHist:function(h){this.hist.push(h);},repaint:function(){var buf=[];this.hist.reverse();for(var i=0;i<12;i++){if(i>this.hist.length-1){break;}
buf.push(this.hist[i]);}
this.hist.reverse();$('#'+this.conf.hist).html('<pre>'+buf.reverse().join('</pre><pre>')+'</pre>');},suggest:function(){var cmd=this.cmd();var suggest=[];if(cmd==''){return;}
for(var k in this.commands){if(new RegExp('^'+cmd).test(k)){suggest.push(k);}}
if(suggest.length==1){$('#'+this.conf.cmd).attr('value',suggest[0]);}else if(suggest.length>1){this.addHist('&raquo; '+cmd);this.addHist(suggest.join('\t'));this.repaint();}},exec:function(){var cmd=this.cmd();cmd=cmd.split(/\s+/);this.addHist('&raquo; '+cmd[0]);if(this.commands.hasOwnProperty(cmd[0])){this.commands[cmd[0]].fn.apply(this,cmd);}else if(cmd[0]!=''){this.addHist(cmd[0]+': command not found');}
this.repaint();this.clear();},clear:function(){$('#'+this.conf.cmd).attr('value','');},init:function(){var fontStyles={color:'white','font-size':'12px','font-family':'"Courier New",monospace'};var cli=$('<div id="'+this.conf.cli+'"/>').css($.extend({'background-color':'black'},fontStyles));var hist=$('<div id="'+this.conf.hist+'"/>').css($.extend({height:'240px',margin:0,padding:0},fontStyles));var label=$('<label for="'+this.conf.cmd+'">&raquo; </label>').css(fontStyles);var cmd=$('<input id="'+this.conf.cmd+'" type="text"/>').css($.extend({height:'20px',padding:0,margin:0,border:'none','background-color':'black'},fontStyles)).keydown(function(ev){if(ev.keyCode==9){ev.preventDefault();ev.stopPropagation();ev.stopImmediatePropagation();globe.common.cli.suggest();}else if(ev.keyCode==13){globe.common.cli.exec();}});cli.append(hist).append(label.append(cmd));$('body').append(cli);cli.dialog({close:function(){$('#'+globe.common.cli.conf.cmd).blur();},autoOpen:false,dialogClass:'cli',position:['left','bottom']});cmd.focus();cli.click(function(){cmd.focus();});this.addHist('.&nbsp;.&nbsp;.-.&nbsp;.&nbsp;&nbsp;&nbsp;.&nbsp;&nbsp;&nbsp;.-.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.&nbsp;.&nbsp;.&nbsp;.-.&nbsp;.-.&nbsp;.&nbsp;&nbsp;&nbsp;.-.&nbsp;');this.addHist('|-|&nbsp;|-&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;|&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;|&nbsp;|&nbsp;|&nbsp;|&nbsp;|(&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;)');this.addHist('\'&nbsp;`&nbsp;`-\'&nbsp;`-\'&nbsp;`-\'&nbsp;`-\'&nbsp;,&nbsp;&nbsp;&nbsp;`.\'.\'&nbsp;`-\'&nbsp;\'&nbsp;\'&nbsp;`-\'&nbsp;`-\'&nbsp;');this.addHist('');this.addHist('');this.repaint();$(document).keydown(function(ev){if(ev.keyCode==32&&ev.shiftKey){var cli=$('#'+globe.common.cli.conf.cli);var toggle=cli.dialog('isOpen')?'close':'open';ev.preventDefault();ev.stopPropagation();cli.dialog(toggle);}});alert("w00t! Press Shift+Space for haXX0rz.");$.unsubscribeAll('konami.cli');}};$.subscribe('konami.cli',globe.common.cli,'init');$.namespace('globe.suggest');globe.suggest.stocks={redirect:function(data,element){$(element).addClass('loading');var type=parseInt(data.securityType);if(type==globe.investor.securityType.FUND){window.location=globe.conf.fundQuoteUrl+'?id='+data.securityId;}else if(type==globe.investor.securityType.INDEX){window.location=globe.conf.indexQuoteUrl+'?q='+data.symbol+'-'+data.exchangeCode;}else if(type==globe.investor.securityType.STOCK||type==globe.investor.securityType.ETF){window.location=globe.conf.stockQuoteUrl+'?q='+data.symbol+'-'+data.exchangeCode;}}};$.namespace('globe.common.widget.list');globe.common.widget.DataList=function(selector,dataEvent,displayOptions){this.data={_data:{},dataLoaded:function(json){this._data=json.data;}};this.gui={dataLoaded:function(json){var summary=json.data[0];for(var i in displayOptions){var item=displayOptions[i];var key=item.key;var data;var li=$(selector+' li.'+key);if(item.data!=undefined){data=typeof item.data=='function'?item.data(json):item.data;}else{data=summary[key];if(data===undefined){continue;}}
if(item.formatter!=undefined){data=typeof item.formatter=='string'?globe.common.util.formatters[item.formatter].apply(this,[data,summary]):item.formatter(data,summary);}
if(item.isChange===true){if(summary[key]>0){li.addClass('up');}else if(summary[key]<0){li.addClass('down');}}
$(' .data',li).html(data);}}};$.subscribe(dataEvent,this.data,'dataLoaded');$.subscribe(dataEvent,this.gui,'dataLoaded');};$.namespace('globe.common.widget.table');globe.common.widget.DataTable=function(selector,eventName,colOptions,ignore){var pageSize=parseInt($(selector).attr('paginateby'))||20;var $this=this;this.data={_data:{},dataLoaded:function(json){this._data=json;},sort:function(col,desc){if(this._data===undefined||this._data.data===undefined){return;}
this._data.data.sort(function(l,r){var recurse=function(l,r){if(l[col]<r[col]){return-1;}
if(l[col]>r[col]){return 1;}
return 0;};if(desc===true){return recurse(r,l);}
return recurse(l,r);});$.publish(eventName+'-sorted',this._data);},init:function(){$.subscribe(eventName+'-success',this,'dataLoaded');$.subscribe(eventName+'-sort',this,'sort');$.subscribe(eventName+'-updateOptions',this,'updateOptions');}};this.gui={_key2class:function(key){if(typeof key=='number'){return key;}
if(typeof key=='undefined'){return'';}
return key.replace(/ |_/g,'-').replace(/[^0-9a-zA-Z\-]/g,'').toLowerCase();},_moreBtn:$(selector+' a.more'),_noResultsMsg:'No more items to show',dataLoaded:function(json){if(json===null||json.data===undefined){this.displayMessage(globe.conf.emptyMessage);return;}
$(selector+' tbody').html(this._prepareData(json));if(this._tsElement.length>0){var milliseconds=json.meta.timestamp;if(typeof milliseconds=='string'){milliseconds=parseInt(milliseconds,10);}
var timestamp=''+(new Date(milliseconds));this._tsElement.text(globe.common.util.Date.format(timestamp,'timestamp'));}
if(this._hasMore){this._next=pageSize;if(this._next>=$this.data._data.data.length){this._moreBtn.text(this._noResultsMsg);}else{this._moreBtn.text(this._moreBtnText);}}},showMore:function(json){var next=this._next;if(next>=$this.data._data.data.length)return;var begin=next;var end=next+pageSize;this._next+=pageSize;$(selector+' tbody').append(this._prepareData(json,begin,end));var newRows=$(selector+' tbody tr').slice(begin,end);newRows.addClass('new');setTimeout(function(){newRows.removeClass('new');},2000);if(this._next>=$this.data._data.data.length){this._moreBtn.text(this._noResultsMsg);}},_prepareData:function(json,begin,end){var tableHtml='';var key=json.meta.uniqueId;var begin=begin||0;var end=end||pageSize;for(var i=begin;i<end;i++){if(i>=json.data.length)break;var row=json.data[i];if(ignore!==undefined&&ignore.find(row[key])!=-1){continue;}
tableHtml+='<tr class="'+this._key2class(row[key])+'">';for(var j=0;j<colOptions.length;j++){var col=colOptions[j],colContent,className='',direction;if(row[col.key]===undefined){colContent='--';}else if(col.formatter!==undefined){colContent=typeof col.formatter=='string'?globe.common.util.formatters[col.formatter].apply(this,[row[col.key],row]):col.formatter(row[col.key],row);}else{colContent=row[col.key];}
if(col.isChange===true){direction=row[col.key]>0?'up':(row[col.key]<0?'down':'');colContent='<span class="'+direction+'">'+colContent+'</span>';}
if(j===0){className='first';}else if(j===colOptions.length){className='last';}
tableHtml+='<td class="'+className+'">'+colContent+'</td>';}}
return tableHtml;},handleError:function(xhr,error,status){var msg;if(status=='timeout'){msg='The data call has timed out';}else if(status=='error'){switch(xhr.status){case 400:msg='Error on data load';break;case 403:msg='The data URL is forbidden';break;case 404:msg='The data URL is not found';break;case 500:msg='A server error occured';break;case 503:msg='Service unavailable';break;}}else{msg='An error has occured';}
this.displayMessage(msg,true);},displayMessage:function(msg,error){var classNames='';if(error===true){classNames+='loading error'};$(selector+' tbody').html('<tr><td colspan="'+colOptions.length+'"><p class="message">'+'<span class="'+classNames+'">'+
msg+'</span></p></td></tr>');},sortColumn:function(a){a=$(a);var classes=a.attr('class');var descending=false;$(selector+' th a').removeClass('sorted ascending descending');if(/ascending/.test(classes)){a.removeClass('ascending');a.addClass('sorted descending');descending=true;}else if(/descending/.test(classes)){a.removeClass('descending');a.addClass('sorted ascending');}else{a.addClass('sorted ascending');}
$.publish(eventName+'-sort',a.attr('href').split('#')[1],descending);},dataSorted:function(json){this.dataLoaded(json);},init:function(){this._tsElement=$(selector+' tfoot p.timestamp');if(this._moreBtn.length){this._moreBtnText=this._moreBtn.text(),this._moreBtn.click(function(){$this.gui.showMore($this.data._data);});this._hasMore=true;}else{this._hasMore=false;}
$(selector+' th:not(.unsortable)').click(function(){$.publish(eventName+'-columnClick',$('a',this));return false;}).attr('title','Sort by this column').css({cursor:'pointer'});$.subscribe(eventName+'-success',this,'dataLoaded');$.subscribe(eventName+'-error',this,'handleError');$.subscribe(eventName+'-columnClick',this,'sortColumn');$.subscribe(eventName+'-sorted',this,'dataSorted');$.subscribe(eventName+'-message',this,'displayMessage');}};this.data.init();this.gui.init();};globe.common.widget.DataTableFilter=function(name,values,selector,index){var _index=index||0;var _containerId=null;var _update=function(index){_index=index;$.publish(_containerId+'-filter-change',{name:name,index:index,value:values[index]});};this.getName=function(){return name;};this.getValue=function(){return values[_index];};this.getIndex=function(){return _index;};this.setContainerId=function(id){_containerId=id;};var c=$(selector);if(c.is('.view-tabs')){$(c).tabs().bind('tabsselect',function(e,ui){_update(ui.index);});}else if(c.is('.tabs')){$('li a',c).click(function(){_update(parseInt($(this).attr('rel'),10));$(selector+' li.active').removeClass('active');$(selector+' li.'+values[_index]).addClass('active');return false;}).each(function(i){$(this).attr('rel',i);});}else if(c.is('.view-tabs2')){$('li a',c).click(function(){_update(parseInt($(this).attr('rel'),10));$(selector+' li.active').removeClass('active');$(selector+' li.'+values[_index]).addClass('active');return false;}).each(function(i){$(this).attr('rel',i);});}else if(c.is('select')){c.change(function(){_update(this.selectedIndex);});}};globe.common.widget.FilteredDataTable=function(id,selectors,colOptions,filters,options){var _cache,cacheTTL=60*1000;var ajaxOptions={params:{}};var ignore=undefined;this.tables=[];this.viewIndex=0;if(options!==undefined){if(options.serviceUrl!==undefined){ajaxOptions.serviceUrl=options.serviceUrl;}
if(options.urlParams!==undefined){ajaxOptions.params=options.urlParams;}
if(options.view!==undefined){ajaxOptions.view=options.view;}
if(options.cacheTTL!==undefined){cacheTTL=options.cacheTTL;}
ignore=options.ignore;}
_cache=new globe.common.Cache({ttl:cacheTTL});var _currUrl='';var loadingBox=$('#'+id+' .status');var showLoadingBox,hideLoadingBox;if(loadingBox.length>0){showLoadingBox=function(){loadingBox.show();};hideLoadingBox=function(){loadingBox.hide();};}else{showLoadingBox=hideLoadingBox=function(){};}
this._updateKey=function(){var params={};for(var k in ajaxOptions.params){if(ajaxOptions.params[k]!=''){params[k]=ajaxOptions.params[k];}}
_currUrl=ajaxOptions.serviceUrl+ajaxOptions.view+'?'+$.param(params);};this._updateOption=function(o){if(o.name=='view'){this.viewIndex=o.index;ajaxOptions.view=o.value;}else{ajaxOptions.params[o.name]=o.value;}};this.updateData=function(o){if(o){this._updateOption(o);this._updateKey();}
var json=_cache.get(_currUrl);$('#'+ajaxOptions.view+' th a').removeClass('sorted');if(json!==null){$.publish(id+'-v'+this.viewIndex+'-success',json);return;}
$.publish('invoke-request',id+'-v'+this.viewIndex+'-fromAjax',$.extend({proxy:true,url:_currUrl},ajaxOptions));};this.init=function(){$.publish('invoke-request',id+'-v'+this.viewIndex+'-fromAjax',$.extend({proxy:true,url:_currUrl},ajaxOptions));};this.dataLoaded=function(json){hideLoadingBox();_cache.set(_currUrl,json);$.publish(id+'-v'+this.viewIndex+'-success',json);};this.beforeAjax=function(){showLoadingBox();};this.handleError=function(xhr,status,error){hideLoadingBox();$.publish(id+'-v'+this.viewIndex+'-error',xhr,status,error);};for(var i=0;i<selectors.length;i++){this.tables.push(new globe.common.widget.DataTable(selectors[i],id+'-v'+i,colOptions,ignore));$.subscribe(id+'-v'+i+'-fromAjax-success',this,'dataLoaded');$.subscribe(id+'-v'+i+'-fromAjax-error',this,'handleError');if(loadingBox.length>0){$.subscribe(id+'-v'+i+'-fromAjax-before',this,'beforeAjax');}}
for(i=0;i<filters.length;i++){filters[i].setContainerId(id);this._updateOption({name:filters[i].getName(),value:filters[i].getValue(),index:filters[i].getIndex()});}
$.subscribe(id+'-filter-change',this,'updateData');this._updateKey();};$.namespace('globe.investor');globe.investor.securityNames=[];globe.investor.securityNames[globe.investor.securityType.FUND]='Fund';globe.investor.securityNames[globe.investor.securityType.STOCK]='Stock';globe.investor.securityNames[globe.investor.securityType.INDEX]='Index';globe.investor.securityNames[globe.investor.securityType.ETF]='ETF';globe.investor.securityNames[globe.investor.securityType.BOND]='Bond';globe.investor.securityNames[globe.investor.securityType.COMMODITY]='Commodity';globe.investor.securityNames[globe.investor.securityType.CURRENCY]='Currency';globe.investor.inlineInfo=function(){var dialogs=$('<div id="symbol-dialogs" style="display:none;"></div>');$('#article-content span.company span.symbol').each(function(i,e){var symbol=$.trim($(e).html());var a=$('<a class="symbol popup" symbol="'+symbol+'" href="#">'+symbol+'</a>').click(function(){var symbol=$(this).attr('symbol');var offset=$(this).offset();var div=$("div[symbol="+symbol+"]");offset.left=offset.left-$(window).scrollLeft();offset.top=offset.top-$(window).scrollTop();div.dialog({position:[offset.left,offset.top+18],close:function(ev,ui){$(this).dialog("destroy");},draggable:false,resizable:false,dialogClass:'popup-chart'});if(div.attr('loaded')!='true'){div.attr('loaded','true').children('div.inner-holder').load(globe.conf.templateUrl+'/fragments/globeinvestor/smallStaticChart.jsp?symbol='+symbol+'&ajax=true');}
return false;});if($('div[symbol='+symbol+']',dialogs).length===0){dialogs.append('<div symbol="'+symbol+'">'+'<div class="inner-holder"><img src="'+globe.conf.mediaUrl+'/images/common/icon/icon-spinner.gif"/></div>'+'</div>');}
$(e).html('(').append(a).append($('<span class="ticker-info" symbol="'+symbol+'">'+'<span class="price last-price"></span>'+'<span class="price-change"></span>'+'<span class="percent-change"></span>'+'</span>')).append(')');});$('body').append(dialogs);};globe.investor.tickerInfo=function(parent){var symbols=[];parent=parent||document.body;$("span.ticker-info",parent).each(function(){symbols.push($(this).attr('symbol'));});if(symbols.length>0){symbols.sort();var querySymbols=[];for(var i=0;i<symbols.length;i++){if(symbols[i]!=querySymbols[querySymbols.length-1]){querySymbols.push(symbols[i]);}}
var url=globe.conf.financeServiceUrl+"/stocks/quote/summaryTabs?symbols="+querySymbols.join(",");$.publish('invoke-request','inline-ticker',{url:url,proxy:true,timeout:5000});$.subscribe('inline-ticker-success',{callback:function(json){globe.investor.fillTicker(json);}},'callback');$.subscribe('inline-ticker-error',{callback:function(status,error,type,json){console.log('error for line ticker');}},'callback');}};globe.investor.fillTicker=function(json){for(var i=0;i<json.data.length;i++){var row=json.data[i];var span=$('span.ticker-info[symbol='+row.symbol+'-'+row.exchangeCode+']');var direction;if(row.priceChange>0){direction="up";}else if(row.priceChange<0){direction="down";}else{direction='no-change';}
$(".symbol-name",span).addClass("symbol-"+direction);$(".last-price",span).html(globe.common.util.formatters.price(row.lastPrice));$(".price-change",span).html(globe.common.util.formatters.price(row.priceChange)).addClass(direction);$(".percent-change",span).html(globe.common.util.formatters.percent(row.percentChange)+"%").addClass(direction);span.show();}};$(document).ready(function(){globe.investor.inlineInfo();globe.investor.tickerInfo();});$.namespace('globe.investor.widget');globe.investor.widget.MediumChart=function(divId,dataEvent,ajaxOptions,chartVersion,currsymbol,showData)
{this.divId=divId;this.ajaxOptions=ajaxOptions;this.version=chartVersion?chartVersion:"default";if(this.version!="default"){this.version="v"+this.version;}
this.symbol=currsymbol;this.show=showData;this.chartSettings={'default':{width:380,height:225,footnoteColor:'#000000',fiveday_gridcount:8,maxgridcount:12,settings:'amstock_settings_medium.jsp'},v4:{width:400,height:105,footnoteColor:'#000000',fiveday_gridcount:10,maxgridcount:10,settings:'amstock_settings_medium_v4.jsp'},v5:{width:600,height:245,footnoteColor:'#FF6B00',fiveday_gridcount:15,maxgridcount:15,settings:'amstock_settings_medium_v5.jsp'},v6:{width:310,height:215,footnoteColor:'#FF6B00',fiveday_gridcount:8,maxgridcount:10,settings:'amstock_settings_medium_v6.jsp'},v7:{width:390,height:200,footnoteColor:'#000000',fiveday_gridcount:8,maxgridcount:10,settings:'amstock_settings_medium_v7.xml'},v8:{width:400,height:200,footnoteColor:'#000000',fiveday_gridcount:8,maxgridcount:10,settings:'amstock_settings_medium_v8.xml'},v9:{width:380,height:200,footnoteColor:'#000000',fiveday_gridcount:8,maxgridcount:10,settings:'amstock_settings_medium_v9.xml'}};this.compareColors=['#A1C30C','#00ff00','#ff0000'];$.subscribe(this.divId+"-success",this,'showData');};globe.investor.widget.MediumChart.prototype={createChart:function()
{this.updateDisplay();var mso=new SWFObject(globe.conf.templateUrl+"/gfx/amstock_medium.swf",this.divId+"_flash",this.chartSettings[this.version].width,this.chartSettings[this.version].height,"8","#FFFFFF");var myData=this.ajaxOptions.data;mso.addParam("wmode","transparent");mso.addParam('allowscriptaccess','always');mso.addVariable("path",globe.conf.templateUrl+"/ajax/");mso.addVariable("chart_id",this.divId+"_flash");mso.addVariable("settings_file",encodeURIComponent(globe.conf.templateUrl+"/gfx/"+this.chartSettings[this.version].settings+"?range="+myData.range+"&symbols="+myData.symbols+"&type="+myData.type));mso.addVariable("preloader_color","#999999");mso.write(this.symbol+"_flashcontent");},init:function()
{this.createChart();if(this.show=="true"){$.publish('invoke-request',this.divId,$.extend({url:globe.conf.templateUrl+'/ajax/medium.jsp?'},this.ajaxOptions));}},showData:function(json){var thisDiv=$('#'+this.divId);var info=eval(json.data[0]),direction;if(info.priceChange>0)
{direction='up';}
else if(info.priceChange<0)
{direction='down';}
else
{direction='nochange';}
$('.company .cname',thisDiv).text(info.companyName);$('.company .csymbol',thisDiv).text("("+info.symbol+'-'+info.exchangeCode+")");$('#securityInfo #price',thisDiv).text(globe.common.util.formatters.price(info.lastPrice));$('#securityInfo span#priceChg',thisDiv).html('<span class="'+direction+'">'+globe.common.util.formatters.price(info.priceChange)+'</span>');$('#securityInfo span#percentChg',thisDiv).html('<span class="'+direction+'">'+globe.common.util.formatters.percent(info.percentChange)+"%"+'</span>');if(info.exchangeCode=="Q"||info.exchangeCode=="N"){$('#securityInfo #currency',thisDiv).text("(U.S.)");}},getPeriod:function(period)
{var opts=this.ajaxOptions;opts.data.range=period;this.createChart();},resetMediumChart:function()
{this.getPeriod('5d');$('#'+this.symbol+'.range span').removeClass("selected");$('#'+this.symbol+'medium_5Day').parent().addClass("selected");},updateDisplay:function(){var settings=this.chartSettings[this.version];if(settings==null)
settings=this.chartSettings[this.version="default"];$('#'+this.divId).css("width",settings.width);$('#'+this.divId+" .descriptionText").css("color",settings.footnoteColor);$('#'+this.divId+" .flashcontent").css("height",settings.height);}};$.namespace('globe.investor.widget');globe.investor.widget.SmallChart=function(divId,dataEvent,ajaxOptions,currsymbol)
{window['ajaxOptions_'+currsymbol]=ajaxOptions;this.data={_data:{},dataLoaded:function(json)
{var key=json.meta.uniqueId;this._data={companyId:json.data.companyId,companyName:json.data.companyName,symbol:json.data.symbol,exchange:json.data.exchangeCode,priceChg:json.data.priceChg,percentChg:json.data.percentChange,timeStamp:json.meta.timestamp,descTxt:json.data.descriptionText,dataPoints:json.data.dataPoints,price:json.data.lastPrice}}};this.gui={_divId:divId,_dataPoints:{},_gridLines:"",_csv:"",_xmlCode:"",_init:false,dataLoaded:function(json)
{var range=window['ajaxOptions_'+currsymbol].data.range;this._csv="";this._xmlCode="";this._gridLines=(range=='1d')?"7":"8";if(json==null||json.data==null||json.data[0].dataPoints==null)
{this._xmlCode+="<settings><data_sets><data_set>"+"<main_drop_down selected='true'>false</main_drop_down>"+"<compare_list_box selected='false'>false</compare_list_box>"+"<csv>"+"<reverse>false</reverse>"+"<separator>,</separator>"+"<skip_first_rows>0</skip_first_rows>"+"<skip_last_rows>0</skip_last_rows>"+"<show_last_rows></show_last_rows>"+"<date_format>YYYY-MM-DD hh:mm:ss</date_format>"+"<decimal_separator>.</decimal_separator>"+"<columns><column>date</column><column>close</column></columns>"+"<data></data></csv></data_set></data_sets></settings>";}
else
{this._dataPoints=json.data[0].dataPoints;var timestamp=new Date(eval(json.data[0]).lastTradeDate),labelValue=((window['ajaxOptions_'+currsymbol].data.range=='5d')?"WW":"month"),direction;$('#'+this._divId+' .company .cname').text(eval(json.data[0]).companyName);$('#'+this._divId+' .company .csymbol').text("("+eval(json.data[0]).symbol+'-'+eval(json.data[0]).exchangeCode+")");$('#'+this._divId+' div.securityInfo span.price').text(globe.common.util.formatters.price(json.data[0].lastPrice));if(json.data[0].priceChange>0)
{direction='up';}
else if(json.data[0].priceChange<0)
{direction='down';}
else
{direction='nochange';}
$('#'+this._divId+' div.securityInfo span.priceChg').html('<span class="'+direction+'">'+globe.common.util.formatters.price(json.data[0].priceChange)+'</span>');$('#'+this._divId+' div.securityInfo span.percentChg').html('<span class="'+direction+'">'+globe.common.util.formatters.percent(json.data[0].percentChange)+"%"+'</span>');if(json.data[0].exchangeCode=="Q"||json.data[0].exchangeCode=="N"){$('#'+this._divId+' div.securityInfo span.currency').text("(U.S.)");}
$('#'+this._divId+' .timeStamp').text(timestamp.format("timestamp"));this._xmlCode+="<settings>"+"<max_grid_count>"+this._gridLines+"</max_grid_count>"+"<date_formats><hour_format>24</hour_format>"+"<x_axis><days>WW</days><months>"+labelValue+"</months><years>month</years></x_axis></date_formats>"+"</settings>";}
var settings_file="/gfx/amstock_settings_small.jsp?symbol="+json.data[0].symbol+"&exchange="+json.data[0].exchangeCode+"&range="+range;if(!this._init){$.publish(this._divId+'-create',currsymbol,settings_file);}
else{this.createChart(currsymbol,settings_file);}},createChart:function(containerid,settings_file)
{var so=new SWFObject(globe.conf.templateUrl+"/gfx/amstock.swf",divId+"_flash","220","175","8","#FFFFFF");so.addParam("wmode","transparent");so.addVariable("path",globe.conf.templateUrl+"/ajax/");so.addVariable("chart_id",divId+"_flash");so.addVariable("settings_file",encodeURIComponent(globe.conf.templateUrl+settings_file));so.addVariable("additional_chart_settings",this._xmlCode);so.addVariable("preloader_color","#999999");so.write(containerid+"_flashcontent");this._init=true;},setChartData:function(chart_id,chart_data)
{var flashMovie=document.getElementById(chart_id);flashMovie.setSettings(chart_data,true,true);}};this.init=function(divId){$.publish('invoke-request',divId,$.extend({url:globe.conf.templateUrl+'/ajax/small.jsp?'},window["ajaxOptions_"+currsymbol]));};this.getSmallChartPeriod=function(period,id,symbol)
{window["ajaxOptions_"+symbol].data.range=period;$.publish('invoke-request',id,$.extend({url:globe.conf.templateUrl+'/ajax/small.jsp?'},window["ajaxOptions_"+symbol]));};$.subscribe(divId+"-create",this.gui,'createChart');$.subscribe(divId+"-success",this.data,'dataLoaded');$.subscribe(divId+"-success",this.gui,'dataLoaded');this.init(divId);};function amChartInited(chart_id)
{}
$.namespace('globe.common');globe.common.ChartData={businessHours:function(time)
{var hours=time.getHours(),day=time.getDay();return((day>0&&day<6)&&(((hours>9||(hours==9&&time.getMinutes()>=30))&&hours<16)||(hours==16&&time.getMinutes()<=00)));},getDecimalsCount:function(value)
{if(Math.abs(value)<0.00095)
return 4;else if(Math.abs(value)<0.0095)
return 3;else
return 2;},currency:function(value,decimals)
{if(decimals==null)
decimals=globe.common.ChartData.getDecimalsCount(value);return globe.common.util.Number.format(value,{decimals:decimals,separateThousands:true});},max:function(points,columnIndex)
{var result=-999999999;for(var i=0;i<points.length;i++)
result=Math.max(result,points[i].pt[columnIndex]);return result;},min:function(points,columnIndex)
{var result=999999999;for(var i=0;i<points.length;i++)
result=Math.min(result,points[i].pt[columnIndex]);return result;},getEventPoints:function(eventPoints)
{if(eventPoints==null)
return'';var xml='';for(var i=0;i<eventPoints.length;i++)
{var date=new Date(eventPoints[i].pt[0]);xml+="<event><date>"+date.format('chartstamp')+"</date></event>";}
return xml;},pointsToCsv:function(dataPoints,chartRange,isSmallChart)
{if(dataPoints==null)
return'';var valueIndex=isSmallChart?1:4,csv=new Array();dataPoints=globe.common.ChartData.fix(dataPoints,chartRange,valueIndex);for(var i=0;i<dataPoints.length;i++)
{var row=dataPoints[i].pt,last=row[valueIndex],volume=row[5],time=new Date(row[0]);csv.push([time.format('chartstamp'),last,volume].join(','));}
return csv.join('\n');},fix:function(points,chartRange,valueIndex)
{var result=[],current,next,gap,steps={'1d':60000,'5d':5*60000,'1y':24*60*60000},step=steps[chartRange],i=0,max=0,businessHours=globe.common.ChartData.businessHours;function getPointTime(num)
{var time=new Date(num);time.setMilliseconds(0);return time;};function time(point){return point.pt[0];};function value(point){return point.pt[valueIndex];};function pt(time,value)
{if(valueIndex==1)
{this.pt=[time,value];}
else
{this.pt=[time,-1,-1,-1,value,0];}}
function createFiller(points,nextTime,currentTime,lastValue,currentValue,timeStep,count)
{var valueStep,time=nextTime,value=lastValue,actualCount=0;for(var i=1;i<count;i++)
{time+=timeStep;if(businessHours(new Date(time)))
actualCount++;}
time=nextTime;valueStep=(currentValue-lastValue)/actualCount;for(var i=1;i<count;i++)
{time+=timeStep;if(businessHours(new Date(time))==false)
continue;value+=valueStep;points.push(new pt(time,value));}};function pad(points,max)
{if(points==null||points.length<2)
return;var lastPos=points.length-1,lastTime=getPointTime(time(points[lastPos])),lastierTime=getPointTime(time(points[lastPos-1]));if((lastTime.getHours()==9&&lastTime.getMinutes()==0)==false&&lastTime.getDate()!=lastierTime.getDate())
return;while(businessHours(lastTime))
{points.push(new pt(lastTime.getTime(),max));lastTime.setTime(lastTime.getTime()+step);}};max=globe.common.ChartData.max(points,valueIndex)*1.0001;while(i<points.length)
{current=points[i];next=points[i+1];i++;if(chartRange=='1d'){if(businessHours(getPointTime(time(current))))
result.push(current);}
else{result.push(current);}
if(next==null)
continue;var currentTime=getPointTime(time(current)),nextTime=getPointTime(time(next));if(businessHours(currentTime)&&businessHours(nextTime)&&(currentTime.getDate()==nextTime.getDate()))
{gap=nextTime.getTime()-currentTime.getTime();var missingPoints=gap/step;if(missingPoints>1)
{createFiller(result,currentTime.getTime(),nextTime.getTime(),value(current),value(next),step,missingPoints);}}}
if(this.chartRange!='1y'&&result.length>0)
pad(result,max);result.push(new pt(new Date(time(result[result.length-1])+step).getTime(),max));return result;}};
