/**
 * Возвращает случайное целое число в диапазоне от min до max
 *
 * @param {Object} min минимальное значение
 * @param {Object} max максимальное значение
 * @return {Integer}
 */
Math.rand = function(min, max)
{
    var res = Math.random();
    return (min == undefined || max == undefined) ? res : Math.floor(res * (max - min + 1) + min);
};

/**
 * Преобразует целое число в строку в шестнадцатиричном формате
 *
 * @param {Object} dec
 * @param {Integer} signs минимальное число разрядов результата
 * @return {String}
 */
Math.dec2hex = function(dec, signs)
{
    signs = signs || 2;
    return pf.str.pad(Math.dec2any(dec, 16), signs, '0');
};

/**
 * Преобразует строку в шестнадцатиричном формате в целое число
 *
 * @param {Object} hex
 * @return {Integer}
 */
Math.hex2dec = function(hex)
{
    return Math.any2dec(hex,16);
};

/**
 * Преобразует целое число в строку в двоичном формате
 *
 * @param {Object} dec
 * @param {Object} signs минимальное число разрядов результата
 * @return {String}
 */
Math.dec2bin = function(dec, signs)
{
    signs = signs || 0;
    return pf.str.pad(Math.dec2any(dec, 2), signs, '0');
};

/**
 * Преобразует строку в двоичном формате в целое число
 *
 * @param {Object} bin
 * @return {Integer}
 */
Math.bin2dec = function(bin)
{
    return Math.any2dec(bin,2);
};

Math.any2dec = function(value, size)
{
    value = value || "0";
    size = parseInt(size) || 2;
    if (!value || size == 10) return parseInt(value);
    var megaChars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    if (size>1 && size<megaChars.length)
    {
        value = value.toString();
        var j = 1, decVal = 0;
        for (var i = value.length - 1; i >= 0; i--)
        {
            var ind = megaChars.indexOf(value.charAt(i));
            if (ind >= size) return null;
            decVal += megaChars.indexOf(value.charAt(i)) * j;
            j *= size;
        };
        return decVal;
    };
    return null
};

Math.dec2any = function(value, size)
{
    value = parseInt(value) || 0;
    size = parseInt(size);
    if (!value || size == 10) return value.toString();
    var megaChars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    if (size>1 && size<megaChars.length)
    {
        var res = '';
        var high = Math.floor(value/size);
        for (var i = 0; value >= size; i++)
        {
            res = megaChars.charAt(value % size) + res;
            value = Math.floor(value/size);
        }
        return megaChars.charAt(value % size) + res;
    };
    return null;
};

Math.any2any = function(value, sizeIn, sizeOut)
{
    return Math.dec2any(Math.any2dec(value, sizeIn),sizeOut);
};

