
if(typeof(Msn)=="undefined")
{Msn={};}
if(typeof(Msn.Money)=="undefined")
{Msn.Money={};}
if(typeof(Msn.Money.Quote)=="undefined")
{Msn.Money.Quote={};}
Msn.Money.Quote.Enums={Zero:{AsIs:0,NA:1,Unchanged:2,Nothing:3},Direction:{Unchanged:0,Down:1,Up:2},CountryCode:{AT:4864,AU:5120,BE:1025,BR:4353,CA:2,CH:1794,DE:1027,DK:2563,DO:3587,EA:4,EE:1028,EF:1284,ES:4612,FI:2053,FR:4357,GB:262,HK:2567,ID:776,IT:4872,JP:3849,KR:4362,LU:5131,MX:5900,MY:6156,NL:2829,NO:3597,NZ:6413,PH:1807,PS:4623,PT:4879,PW:5647,SE:1042,SG:1554,TH:1811,TM:3091,TW:5651,US:4628,ZA:25}};Msn.Money.Quote.DirectionalIndicator=function()
{this.UpArrow=new Image(8,8);this.DownArrow=new Image(8,8);var root="/inc/images";this.UpArrow.src=root.concat("/trendup.gif");this.DownArrow.src=root.concat("/trenddown.gif");}
Msn.Money.Quote.Broker=function(){this.Inputs=[];this.Statics={};this.Timer=null;this.Inception=0;this.DataHost=null;this.Interval=-1;this.Timeout=-1;this.DirectionalIndicator=new Msn.Money.Quote.DirectionalIndicator();}
Msn.Money.Quote.Collection=function(asyncData,staticDataDelegate)
{this.Items=[];if((asyncData instanceof Array)&&(staticDataDelegate instanceof Function))
{var idxData=0;var dataCount=asyncData.length;for(;idxData<dataCount;idxData++)
{this.Items[this.Items.length]=new Msn.Money.Quote.Item(asyncData[idxData],staticDataDelegate);}}
this.Valid=(function(sample)
{return(sample.length>0);})(this.Items);}
Msn.Money.Quote.Item=function(asyncData,staticDataDelegate)
{this.Properties={};var symbol=asyncData.Symbol;var staticData=(typeof(symbol)=="undefined")?null:staticDataDelegate(symbol.toUpperCase());if(staticData!=null)
{for(var field in asyncData)
{this.Properties[field]=new Msn.Money.Quote.Property(staticData,field,asyncData[field]);}
this.Properties["AHPercentChange"]=new Msn.Money.Quote.Property
(staticData,"AHPercentChange",(function(boundto,close,last)
{var out=Number.NaN;if((boundto.toLowerCase()=="ahchange")&&!(isNaN(last)||isNaN(close)))
{out=((close==0)||(last==0))?0:(last-close)/close*100;}
return out;})
(staticData.IndicatorKey,this.Properties["Last"].Value,this.Properties["AHLastPrice"].Value));this.Properties["Direction"]=new Msn.Money.Quote.Property
(staticData,"Direction",(function(value)
{var enumDirection=Msn.Money.Quote.Enums.Direction;var out=enumDirection.Unchanged;if(!(isNaN(value)||value==0))
{out=value<0?enumDirection.Down:enumDirection.Up;}
return out;})
(this.Properties[staticData.IndicatorKey].Value));}
this.Valid=(function(sample)
{return true;})(this.Properties);}
Msn.Money.Quote.Property=function(staticData,rawName,rawValue)
{this.Format={};var specialCase;var enumZero=Msn.Money.Quote.Enums.Zero;var getSpecialCase=function(applyBaseUnit)
{var value=parseFloat(rawValue);var out={};if(staticData.CountryCode!=Msn.Money.Quote.Enums.CountryCode.JP)
{out["Style"]="{0:N2}";}
else
{out["Style"]="{0:N0}";if(applyBaseUnit&&(staticData.Type=="Fund"))
{var unit=parseFloat(staticData.JPFundBaseUnit);if(!(isNaN(unit)||unit==0))
{value*=unit;}}}
out["Value"]=value;return out;};switch(rawName)
{case"Symbol":case"Currency":this.Value=rawValue.toUpperCase();break;case"Direction":this.Value=parseInt(rawValue);break;case"Low":case"High":case"Open":case"Low52Week":case"High52Week":specialCase=getSpecialCase(false);this.Value=specialCase.Value;this.Format["Style"]=specialCase.Style;break;case"Delay":case"AskSize":case"BidSize":case"Volume":case"AHVolume":this.Value=parseFloat(rawValue);this.Format={Style:"{0:N0}",MilBil:true};break;case"Close":specialCase=getSpecialCase(true);this.Value=specialCase.Value;this.Format={Zero:enumZero.NA};this.Format["Style"]=specialCase.Style;break;case"Last":case"RTLast":case"AHLastPrice":specialCase=getSpecialCase(true);this.Value=specialCase.Value;this.Format["Style"]=specialCase.Style;break;case"Change":case"AHChange":case"RTChange":specialCase=getSpecialCase(true);this.Value=specialCase.Value;this.Format={Colorize:true,Zero:enumZero.Unchanged};this.Format["Style"]=specialCase.Style;break;case"DividendExDate":case"ExpirationDate":case"TimeOfLastSale":case"DividendPayDate":case"AHTimeOfLastSale":case"RTTimeOfLastSale":this.Value=(rawValue==null||rawValue.match(/([0-9]{1,})/)==null)?Number.NaN:new Date(parseInt(RegExp.$1));break;case"PercentChange":case"RTPercentChange":case"AHPercentChange":specialCase=(function()
{var value=parseFloat(rawValue);var out={Style:"{0:P}",Value:(value/=100)};if(staticData.Type=="Currency")
{out["Style"]="{0:P5}";}
return out;})();this.Value=specialCase.Value;this.Format={Colorize:true,Zero:enumZero.Nothing};this.Format["Style"]=specialCase.Style;break;default:this.Value=parseFloat(rawValue);this.Format={Style:"{0:N2}",MilBil:true};break;}}
Msn.Money.Quote.DirectionalIndicator.prototype={setImageProperties:function(img,quote)
{var enumDirection=Msn.Money.Quote.Enums.Direction;if(quote.Direction==enumDirection.Unchanged)
{img.style.display="none";}
else
{img.src=(quote.Direction==enumDirection.Down)?this.DownArrow.src:this.UpArrow.src;img.style.display="";}}};Msn.Money.Quote.Broker.prototype={init:function(param)
{if(this.DataHost!=null)
{return;}
if(param.Src!=null&&typeof(param.Src=="string"))
{this.DataHost=document.location.protocol.concat("//",param.Src);}
if(param.Src!=null&&typeof(param.Interval=="number"))
{this.Interval=param.Interval*1000;}
if(param.Src!=null&&typeof(param.Timeout=="number"))
{this.Timeout=param.Timeout*60*20;}
var numFmt=Sys.CultureInfo.CurrentCulture.numberFormat;numFmt.PercentNegativePattern=1;numFmt.PercentPositivePattern=1;},registerBindToElement:function(param)
{if((param.Tickers instanceof Array)&&(typeof(param.Element)=="string"))
{this.Inputs[this.Inputs.length]=param;}},go:function()
{if(this.DataHost==null)
{return;}
if(window.encodeURIComponent&&this.Inputs.length>0)
{var ticks=new Date().valueOf();if(this.Inception==0)
{var me=this;var idxInput=0;var inputCount=this.Inputs.length;for(;idxInput<inputCount;idxInput++)
{var idxTicker=0;var tickerList=this.Inputs[idxInput].Tickers
var tickerCount=tickerList.length;for(;idxTicker<tickerCount;idxTicker++)
{var item=tickerList[idxTicker];var symbol=item.Symbol.toUpperCase();item.Symbol=symbol;this.Statics[symbol]=item;}}
this.Inception=ticks;this.Timer=setInterval(function(){me.go()},this.Interval);}
else if(ticks-this.Inception>this.Timeout)
{if(this.Timer!=null)
{clearInterval(this.Timer);this.Timer=null;}}
else
{this.dataBind();}}},getSymbols:function()
{var out=[];for(var field in this.Statics)
{out[out.length]=field;}
return out;},getStaticData:function(symbol)
{var out={};for(var field in this.Statics)
{if(field==symbol)
{out=this.Statics[field];break;}}
return out;},dataBind:function()
{var query=this.getSymbols();var url=this.DataHost.concat("/quoteservice/streaming?format=json&symbol=",encodeURIComponent(query.join(",")),"&v=",(new Date()).valueOf(),"&callback=?");jQuery.getJSON
(url,function(result)
{var quotesData=new Msn.Money.Quote.Collection
(result,function(symbol)
{return $.quotebroker.getStaticData(symbol);});if(quotesData.Valid)
{var idxItem=0;var itemCount=$.quotebroker.Inputs.length;for(;idxItem<itemCount;idxItem++)
{var target=$get($.quotebroker.Inputs[idxItem].Element);var localeData=[];var idxTicker=0;var tickerList=$.quotebroker.Inputs[idxItem].Tickers
var tickerCount=tickerList.length;for(;idxTicker<tickerCount;idxTicker++)
{var item=quotesData.getItemBySymbol(tickerList[idxTicker].Symbol,true);if((typeof(item.Valid)!="undefined")&&item.Valid)
{localeData[localeData.length]=item.localeFormat();}}
if(target.dataView==null)
{target.dataView=new Sys.UI.DataView(target);}
if(localeData.length>0)
{target.dataView.set_data(localeData);target.dataView.refresh();}}}});}};Msn.Money.Quote.Property.prototype={toString:function()
{return this.Value.toString();},toLocaleString:function()
{var out=this.Value.toString();if(this.Value instanceof Date)
{out=this.Value.localeFormat("t");}
else if(this.Format==null||typeof(this.Format.Style)=="undefined")
{out=this.toString();}
else if(isNaN(this.Value))
{out=$.localeStrings.NA;}
else
{var absValue=Math.abs(this.Value);if
(!((typeof(this.Format.MilBil)=="undefined")?false:this.Format.MilBil)||(absValue<1E+6))
{if(this.Value!=0)
{out=String.localeFormat(this.Format.Style,this.Value);}
else
{var enumZero=Msn.Money.Quote.Enums.Zero;switch((typeof(this.Format.Zero)=="undefined")?enumZero.AsIs:this.Format.Zero)
{case enumZero.NA:out=$.localeStrings.NA;break;case enumZero.Unchanged:out=$.localeStrings.Unch;break;case enumZero.Nothing:out="";break;case enumZero.AsIs:default:out=String.localeFormat(this.Format.Style,this.Value);break;}}}
else
{var divisor=0;var formatRule=this.Format.Style;var cultureName=Sys.CultureInfo.CurrentCulture.name;if(cultureName=="es-ES")
{divisor=1E+6;formatRule="{0:N2}";}
else if(cultureName=="ja-JP")
{if(absValue>=1E+12)
{divisor=1E+9;formatRule="{0:N0}";}
else if(absValue>=1E+9)
{divisor=1E+6;formatRule="{0:N0}";}}
else if(absValue<1E+9)
{divisor=1E+6;formatRule="{0:N2}";}
else
{divisor=1E+9;formatRule="{0:N2}";}
out=(divisor==0)?String.localeFormat(formatRule,this.Value):String.format($.localeStrings[(divisor==1E+6)?"Mil":"Bil"],String.localeFormat(formatRule,this.Value/divisor));}
if((typeof(this.Format.Colorize)!="undefined")&&this.Format.Colorize)
{var color=this.Value>0?"green":this.Value==0?"black":"red";out="<span style=\"color:".concat(color,"\">",this.Value>0?"+":"",out,"</span>");}}
return out;}};Msn.Money.Quote.Item.prototype={localeFormat:function()
{var out={};for(var field in this.Properties)
{out[field]=this.Properties[field].toLocaleString();}
return out;}};Msn.Money.Quote.Collection.prototype={getItemBySymbol:function(symbol)
{var out={};var idxItem=0;var itemCount=this.Items.length;for(;idxItem<itemCount;idxItem++)
{var item=this.Items[idxItem];if(item.Valid&&(item.Properties.Symbol.Value==symbol))
{out=item;break;}}
return out;}};(function($)
{$.quotebroker=new Msn.Money.Quote.Broker();$.localeStrings={Mil:"{0} Mil",Bil:"{0} Bil",NA:"NA",Unch:"unch"};$(function()
{$.quotebroker.go();});})(jQuery);
