﻿
(function($){$.formatCurrency={};$.formatCurrency.regions=[];$.formatCurrency.regions['']={symbol:'$',positiveFormat:'%s%n',negativeFormat:'(%s%n)',decimalSymbol:'.',digitGroupSymbol:',',groupDigits:true};$.fn.formatCurrency=function(destination,settings){if(arguments.length==1&&typeof destination!=="string"){settings=destination;destination=false;}
var defaults={name:"formatCurrency",colorize:false,region:'',global:true};defaults=$.extend(defaults,$.formatCurrency.regions['']);settings=$.extend(defaults,settings);if(settings.region.length>0)
{settings=$.extend(settings,getRegionOrCulture(settings.region));}
return this.each(function(){$this=$(this);var num='0';num=$this[$this.is('input, select, textarea')?'val':'html']();var trimRegex=new RegExp("[^\\d"+settings.decimalSymbol+"-]","g");num=num.replace(trimRegex,'');if(settings.decimalSymbol!='.')
num=num.replace(settings.decimalSymbol,'.');if(isNaN(num))num='0';var isPositive=(num==(num=Math.abs(num)));num=Math.floor(num*100);var cents=num%100;num=Math.floor(num/100).toString();if(cents<10)cents='0'+cents;if(settings.groupDigits){for(var i=0;i<Math.floor((num.length-(1+i))/3);i++){num=num.substring(0,num.length-(4*i+3))+settings.digitGroupSymbol+num.substring(num.length-(4*i+3));}}
if(!settings.dropDecimals){num=num+settings.decimalSymbol+cents;}
var format=isPositive?settings.positiveFormat:settings.negativeFormat;var money=format.replace(/%s/g,settings.symbol)
money=money.replace(/%n/g,num);if(!destination)
{destination=$this;}
else
{destination=$(destination);}
destination[destination.is('input, select, textarea')?'val':'html'](money);if(settings.colorize)
destination.css('color',isPositive?'black':'red');});};$.fn.toNumber=function(settings){var defaults=$.extend({name:"toNumber",region:'',global:true},$.formatCurrency.regions['']);settings=jQuery.extend(defaults,settings);if(settings.region.length>0)
{settings=$.extend(settings,getRegionOrCulture(settings.region));}
return this.each(function(){var method=$(this).is('input, select, textarea')?'val':'html';var trimRegex=new RegExp("[^\\d"+settings.decimalSymbol+"-]","g");$(this)[method]($(this)[method]().replace(trimRegex,''));});};$.fn.asNumber=function(settings){var defaults=$.extend({name:"asNumber",region:'',parse:true,parseType:'Float',global:true},$.formatCurrency.regions['']);settings=jQuery.extend(defaults,settings);if(settings.region.length>0)
{settings=$.extend(settings,getRegionOrCulture(settings.region));}
settings.parseType=validateParseType(settings.parseType);var method=$(this).is('input, select, textarea')?'val':'html';var trimRegex=new RegExp("[^\\d"+settings.decimalSymbol+"-]","g");var num=$(this)[method]().replace(trimRegex,'');if(!settings.parse)
return num;if(num.length==0)
num='0';if(settings.decimalSymbol!='.')
num=num.replace(settings.decimalSymbol,'.');return window['parse'+settings.parseType](num);};function getRegionOrCulture(region){var regionInfo=$.formatCurrency.regions[region];if(regionInfo){return regionInfo;}
else{if(/(\w+)-(\w+)/g.test(region))
{var culture=region.replace(/(\w+)-(\w+)/g,"$1");return $.formatCurrency.regions[culture];}}
return null;}
function validateParseType(parseType){switch(parseType.toLowerCase())
{case'int':return'Int';case'float':return'Float';default:throw'invalid parseType';}}})(jQuery);