/* Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved. Available via Academic Free License >= 2.1 OR the modified BSD license. see: http://dojotoolkit.org/license for details */ if(!dojo._hasResource["dojo.number"]){ dojo._hasResource["dojo.number"]=true; dojo.provide("dojo.number"); dojo.require("dojo.i18n"); dojo.requireLocalization("dojo.cldr","number",null,"ROOT,ar,ca,cs,da,de,el,en,en-au,en-gb,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ru,sk,sl,sv,th,tr,zh"); dojo.require("dojo.string"); dojo.require("dojo.regexp"); dojo.number.format=function(_1,_2){ _2=dojo.mixin({},_2||{}); var _3=dojo.i18n.normalizeLocale(_2.locale),_4=dojo.i18n.getLocalization("dojo.cldr","number",_3); _2.customs=_4; var _5=_2.pattern||_4[(_2.type||"decimal")+"Format"]; if(isNaN(_1)||Math.abs(_1)==Infinity){ return null; } return dojo.number._applyPattern(_1,_5,_2); }; dojo.number._numberPatternRE=/[#0,]*[#0](?:\.0*#*)?/; dojo.number._applyPattern=function(_6,_7,_8){ _8=_8||{}; var _9=_8.customs.group,_a=_8.customs.decimal,_b=_7.split(";"),_c=_b[0]; _7=_b[(_6<0)?1:0]||("-"+_c); if(_7.indexOf("%")!=-1){ _6*=100; }else{ if(_7.indexOf("‰")!=-1){ _6*=1000; }else{ if(_7.indexOf("¤")!=-1){ _9=_8.customs.currencyGroup||_9; _a=_8.customs.currencyDecimal||_a; _7=_7.replace(/\u00a4{1,3}/,function(_d){ var _e=["symbol","currency","displayName"][_d.length-1]; return _8[_e]||_8.currency||""; }); }else{ if(_7.indexOf("E")!=-1){ throw new Error("exponential notation not supported"); } } } } var _f=dojo.number._numberPatternRE; var _10=_c.match(_f); if(!_10){ throw new Error("unable to find a number expression in pattern: "+_7); } if(_8.fractional===false){ _8.places=0; } return _7.replace(_f,dojo.number._formatAbsolute(_6,_10[0],{decimal:_a,group:_9,places:_8.places,round:_8.round})); }; dojo.number.round=function(_11,_12,_13){ var _14=10/(_13||10); return (_14*+_11).toFixed(_12)/_14; }; if((0.9).toFixed()==0){ (function(){ var _15=dojo.number.round; dojo.number.round=function(v,p,m){ var d=Math.pow(10,-p||0),a=Math.abs(v); if(!v||a>=d||a*Math.pow(10,p+1)<5){ d=0; } return _15(v,p,m)+(v>0?d:-d); }; })(); } dojo.number._formatAbsolute=function(_16,_17,_18){ _18=_18||{}; if(_18.places===true){ _18.places=0; } if(_18.places===Infinity){ _18.places=6; } var _19=_17.split("."),_1a=typeof _18.places=="string"&&_18.places.indexOf(","),_1b=_18.places; if(_1a){ _1b=_18.places.substring(_1a+1); }else{ if(!(_1b>=0)){ _1b=(_19[1]||[]).length; } } if(!(_18.round<0)){ _16=dojo.number.round(_16,_1b,_18.round); } var _1c=String(Math.abs(_16)).split("."),_1d=_1c[1]||""; if(_19[1]||_18.places){ if(_1a){ _18.places=_18.places.substring(0,_1a); } var pad=_18.places!==undefined?_18.places:(_19[1]&&_19[1].lastIndexOf("0")+1); if(pad>_1d.length){ _1c[1]=dojo.string.pad(_1d,pad,"0",true); } if(_1b<_1d.length){ _1c[1]=_1d.substr(0,_1b); } }else{ if(_1c[1]){ _1c.pop(); } } var _1e=_19[0].replace(",",""); pad=_1e.indexOf("0"); if(pad!=-1){ pad=_1e.length-pad; if(pad>_1c[0].length){ _1c[0]=dojo.string.pad(_1c[0],pad); } if(_1e.indexOf("#")==-1){ _1c[0]=_1c[0].substr(_1c[0].length-pad); } } var _1f=_19[0].lastIndexOf(","),_20,_21; if(_1f!=-1){ _20=_19[0].length-_1f-1; var _22=_19[0].substr(0,_1f); _1f=_22.lastIndexOf(","); if(_1f!=-1){ _21=_22.length-_1f-1; } } var _23=[]; for(var _24=_1c[0];_24;){ var off=_24.length-_20; _23.push((off>0)?_24.substr(off):_24); _24=(off>0)?_24.slice(0,off):""; if(_21){ _20=_21; delete _21; } } _1c[0]=_23.reverse().join(_18.group||","); return _1c.join(_18.decimal||"."); }; dojo.number.regexp=function(_25){ return dojo.number._parseInfo(_25).regexp; }; dojo.number._parseInfo=function(_26){ _26=_26||{}; var _27=dojo.i18n.normalizeLocale(_26.locale),_28=dojo.i18n.getLocalization("dojo.cldr","number",_27),_29=_26.pattern||_28[(_26.type||"decimal")+"Format"],_2a=_28.group,_2b=_28.decimal,_2c=1; if(_29.indexOf("%")!=-1){ _2c/=100; }else{ if(_29.indexOf("‰")!=-1){ _2c/=1000; }else{ var _2d=_29.indexOf("¤")!=-1; if(_2d){ _2a=_28.currencyGroup||_2a; _2b=_28.currencyDecimal||_2b; } } } var _2e=_29.split(";"); if(_2e.length==1){ _2e.push("-"+_2e[0]); } var re=dojo.regexp.buildGroupRE(_2e,function(_2f){ _2f="(?:"+dojo.regexp.escapeString(_2f,".")+")"; return _2f.replace(dojo.number._numberPatternRE,function(_30){ var _31={signed:false,separator:_26.strict?_2a:[_2a,""],fractional:_26.fractional,decimal:_2b,exponent:false},_32=_30.split("."),_33=_26.places; if(_32.length==1&&_2c!=1){ _32[1]="###"; } if(_32.length==1||_33===0){ _31.fractional=false; }else{ if(_33===undefined){ _33=_26.pattern?_32[1].lastIndexOf("0")+1:Infinity; } if(_33&&_26.fractional==undefined){ _31.fractional=true; } if(!_26.places&&(_33<_32[1].length)){ _33+=","+_32[1].length; } _31.places=_33; } var _34=_32[0].split(","); if(_34.length>1){ _31.groupSize=_34.pop().length; if(_34.length>1){ _31.groupSize2=_34.pop().length; } } return "("+dojo.number._realNumberRegexp(_31)+")"; }); },true); if(_2d){ re=re.replace(/([\s\xa0]*)(\u00a4{1,3})([\s\xa0]*)/g,function(_35,_36,_37,_38){ var _39=["symbol","currency","displayName"][_37.length-1],_3a=dojo.regexp.escapeString(_26[_39]||_26.currency||""); _36=_36?"[\\s\\xa0]":""; _38=_38?"[\\s\\xa0]":""; if(!_26.strict){ if(_36){ _36+="*"; } if(_38){ _38+="*"; } return "(?:"+_36+_3a+_38+")?"; } return _36+_3a+_38; }); } return {regexp:re.replace(/[\xa0 ]/g,"[\\s\\xa0]"),group:_2a,decimal:_2b,factor:_2c}; }; dojo.number.parse=function(_3b,_3c){ var _3d=dojo.number._parseInfo(_3c),_3e=(new RegExp("^"+_3d.regexp+"$")).exec(_3b); if(!_3e){ return NaN; } var _3f=_3e[1]; if(!_3e[1]){ if(!_3e[2]){ return NaN; } _3f=_3e[2]; _3d.factor*=-1; } _3f=_3f.replace(new RegExp("["+_3d.group+"\\s\\xa0"+"]","g"),"").replace(_3d.decimal,"."); return _3f*_3d.factor; }; dojo.number._realNumberRegexp=function(_40){ _40=_40||{}; if(!("places" in _40)){ _40.places=Infinity; } if(typeof _40.decimal!="string"){ _40.decimal="."; } if(!("fractional" in _40)||/^0/.test(_40.places)){ _40.fractional=[true,false]; } if(!("exponent" in _40)){ _40.exponent=[true,false]; } if(!("eSigned" in _40)){ _40.eSigned=[true,false]; } var _41=dojo.number._integerRegexp(_40),_42=dojo.regexp.buildGroupRE(_40.fractional,function(q){ var re=""; if(q&&(_40.places!==0)){ re="\\"+_40.decimal; if(_40.places==Infinity){ re="(?:"+re+"\\d+)?"; }else{ re+="\\d{"+_40.places+"}"; } } return re; },true); var _43=dojo.regexp.buildGroupRE(_40.exponent,function(q){ if(q){ return "([eE]"+dojo.number._integerRegexp({signed:_40.eSigned})+")"; } return ""; }); var _44=_41+_42; if(_42){ _44="(?:(?:"+_44+")|(?:"+_42+"))"; } return _44+_43; }; dojo.number._integerRegexp=function(_45){ _45=_45||{}; if(!("signed" in _45)){ _45.signed=[true,false]; } if(!("separator" in _45)){ _45.separator=""; }else{ if(!("groupSize" in _45)){ _45.groupSize=3; } } var _46=dojo.regexp.buildGroupRE(_45.signed,function(q){ return q?"[-+]":""; },true); var _47=dojo.regexp.buildGroupRE(_45.separator,function(sep){ if(!sep){ return "(?:\\d+)"; } sep=dojo.regexp.escapeString(sep); if(sep==" "){ sep="\\s"; }else{ if(sep==" "){ sep="\\s\\xa0"; } } var grp=_45.groupSize,_48=_45.groupSize2; if(_48){ var _49="(?:0|[1-9]\\d{0,"+(_48-1)+"}(?:["+sep+"]\\d{"+_48+"})*["+sep+"]\\d{"+grp+"})"; return ((grp-_48)>0)?"(?:"+_49+"|(?:0|[1-9]\\d{0,"+(grp-1)+"}))":_49; } return "(?:0|[1-9]\\d{0,"+(grp-1)+"}(?:["+sep+"]\\d{"+grp+"})*)"; },true); return _46+_47; }; }