// Overridable functions
var digitGroupingCharacter = ",";
var decimalSeparator = ".";
var currencyPrefix = "$";
var currencySuffix = "";
var negativeCurrencyPrefix = "-$";
var negativeCurrencySuffix = "";
var currencyMegaSuffix = "M";

Number.prototype.toLongCurrency = function(decimals) {
    var abs = Math.abs(this);
    var prefix = (this >= 0) ? currencyPrefix : negativeCurrencyPrefix;
    var suffix = (this >= 0) ? currencySuffix : negativeCurrencySuffix;
    return prefix + abs.toDigitGroupedString(decimals) + suffix;
};


Number.prototype.toMillions = function(decimals) {
    var prefix = (this >= 0) ? currencyPrefix : negativeCurrencyPrefix;
    var suffix = (this >= 0) ? currencySuffix : negativeCurrencySuffix;
    var n = ((this >= 0) ? this : -this) / 1000000;
    return prefix + n.toDigitGroupedString(decimals) + currencyMegaSuffix + suffix;
};


Number.prototype.toDigitGroupedString = function(decimals) {


    var abs = Math.abs(this);

    var factor = Math.pow(10, decimals);
    var rounded = Math.round(abs * factor) / factor;
    var integer = Math.floor(rounded);
    var fraction = (rounded - integer);

    var sfraction = fraction.toString();
    sfraction = sfraction.substr(2, sfraction.length - 2);

    if (sfraction.length > decimals) {
        sfraction = sfraction.substr(0, decimals);
    }

    if (sfraction.length < decimals) {
        var pads = decimals - sfraction.length;

        for (var i = 0; i < pads; i++) {
            sfraction += "0";
        }
    }

    var s = integer.toString();
    var rgx = /(\d+)(\d{3})/;
    while (rgx.test(s)) {
        s = s.replace(rgx, '$1' + digitGroupingCharacter + '$2');
    }

    var sign = (this < 0) ? "-" : "";

    var r = decimals > 0 ? sign + s + decimalSeparator + sfraction : sign + s;
    return r;
};


function pluralize(prefix, amount) {
    var k = (amount == 1) ? prefix + "Singular" : prefix + "Plural";
    return translations[k].format(amount);
}

Number.prototype.pluralize = function(prefix) { return pluralize(prefix, this) };