(function($){
    $.fn.dataTableExt.aTypes.unshift(

        function (sData) {
            var sValidChars = "0123456789-,% ";
            var Char;
            var bDecimal = false;

            /* Check the numeric part */
            for (var i = 0; i < sData.length; i++) {
                Char = sData.charAt(i);
                if (sValidChars.indexOf(Char) == -1) {
                    return null;
                }

                /* Only allowed one decimal place... */

                if (Char == ",") {
                    if (bDecimal) {
                        return null;
                    }
                    bDecimal = true;
                }

            }

            return 'numeric-comma';
        });


    $.fn.dataTableExt.oSort['numeric-comma-asc'] = function (a, b) {
        var x = (a == "-") ? 0 : a.replace(/,/, ".");
        var y = (b == "-") ? 0 : b.replace(/,/, ".");
        x = parseFloat(x);
        y = parseFloat(y);
        return ((x < y) ? -1 : ((x > y) ? 1 : 0));
    };

    $.fn.dataTableExt.oSort['numeric-comma-desc'] = function (a, b) {
        var x = (a == "-") ? 0 : a.replace(/,/, ".");
        var y = (b == "-") ? 0 : b.replace(/,/, ".");
        x = parseFloat(x);
        y = parseFloat(y);
        return ((x < y) ? 1 : ((x > y) ? -1 : 0));
    };

    $.fn.dataTableExt.aTypes.unshift(

        function (sData) {
            if (sData.indexOf('руб') == -1) {
                return null;
            }
            return 'currency';

        });

    function trim( str, charlist ) {
        charlist = !charlist ? ' \s\xA0' : charlist.replace(/([\[\]\(\)\.\?\/\*\{\}\+\$\^\:])/g, '\$1');
        var re = new RegExp('^[' + charlist + ']+|[' + charlist + ']+$', 'g');
        return str.replace(re, '');
    }

    function currency2number(x){
        var i, b , a = x.split(' '), s = 0;
        for (i = 1; i < a.length; i+=2) {
            b = parseInt(trim(a[i-1]));
            if (a[i].indexOf('млрд') != -1)
                s += b * Math.pow(10, 9);
            else if (a[i].indexOf('млн') != -1)
                s += b * Math.pow(10, 6);
            else if (a[i].indexOf('тыс') != -1)
                s += b * Math.pow(10, 3);
            else if (a[i].indexOf('руб') != -1)
                s += b;
        }        
        return parseInt(s);
    }


    $.fn.dataTableExt.oSort['currency-asc'] = function (a, b) {
        var x = currency2number(a), y = currency2number(b);
        return ((x < y) ? 1 : ((x > y) ? 1 : 0));
    };

    $.fn.dataTableExt.oSort['currency-desc'] = function (a, b) {
        var x = currency2number(a), y = currency2number(b);
        return ((x < y) ? 1 : ((x > y) ? -1 : 0));
    };

})(jQuery)
