//<script>

//**************************************************************************************************
//                                                                                                 *
//                             BIBLIOTECA PARA MANIPULAÇÃO DE NÚMEROS                              *
//                                     VERSÃO 10.03.30.15.00                                       *
//                                                                                                 *
//**************************************************************************************************
//                                                                                                 *
//                                         DEPENDÊNCIAS                                            *
//                                                                                                 *
//=================================================================================================*
//                                                                                                 *
// cltdat.js                                                                                       *
//                                                                                                 *
//**************************************************************************************************

//**************************************************************************************************
Number.prototype.currency = function(places) {
    try {
        places = isInteger(places, 0, 15) ? places : 2;
        if (isInteger(this) || isDecimal(this)) {
            var neg = (this < 0) ? "-" : "";
            var aux = ("" + Math.abs(this).fix(places)).split(".");
            var dec = (aux.length == 2) ? "," + aux[1] : ((places == 0) ? "" : "," + "0".replicate(places));
            while (aux[0].match(/^\d\d{3}/)) {
                aux[0] = aux[0].replace(/(\d)(\d{3}(\.|,|$))/, '$1.$2');
            }
            return neg + aux[0] + dec;
        }
        else return "";
    }
    catch(e) {
        throw "cltnbr.js: Number.prototype.currency()__" + (e.message || e);
    }
}

//**************************************************************************************************
Number.prototype.fix = function(places) {
    try {
        places = isInteger(places, 0, 15) ? places : 0;
        if (isInteger(this)) return "" + this;
        if (!isDecimal(this)) return "";
        var aux = ("" + Math.abs(this)).split(".");
        var factor = ((this < 0) ? -1 : 1);
        aux[1] = "" + (Math.round(Number(aux[1].substr(0, places) + "." + aux[1].substr(places)))).leading(Math.min(aux[1].length, places));
        if (aux[1].length > places) {
            aux[0] = "" + Math.abs(factor * (Number(aux[0]) + (Number(aux[1]) > 0 ? 1 : 0)));
            aux[1] = (places > 0) ? "." + (0).leading(places) : "";
        }
        else {
            aux[1] = (places > 0) ? "." + aux[1] + (((places - aux[1].length) > 0) ? (0).leading(places - aux[1].length) : "") : "";
        }
        return (((factor < 0) && (Number(aux[0] + aux[1]) != 0)) ? "-" : "") + aux[0] + aux[1];
    }
    catch(e) {
        throw "cltnbr.js: Number.prototype.fix()__" + (e.message || e);
    }
}

//**************************************************************************************************
Number.prototype.leading = function(places) {
    try {
        if (this < 0) return "" + this;
        places = isInteger(places, 0, 15) ? places : 0;
        var aux = "" + this;
        if (places > 0) {
            for (var loop = 0; loop < places - ("" + this).length; loop++) {
                aux = "0" + aux;
            }
        }
        return aux;
    }
    catch(e) {
        throw "cltnbr.js: Number.prototype.leading()__" + (e.message || e);
    }
}

//**************************************************************************************************
function CEPMask(value) {
    try {
        value = toString(value);
        if (isCEP(value)) {
            value = value.replace(/\D/g, "");
            while (value.length < 8) value = "0" + value;
            return value.substr(0, 5) + "-" + value.substr(5);
        }
        else return "";
    }
    catch(e) {
        throw "cltnbr.js: CEPMask()__" + (e.message || e);
    }
}

//**************************************************************************************************
function CNPJMask(value) {
    try {
        value = toString(value);
        if (isCNPJ(value)) {
            value = value.replace(/\D/g, "");
            while (value.length < 14) value = "0" + value;
            return value.substr(0, 2) + "." + value.substr(2, 3) + "." + value.substr(5, 3) + "/" + value.substr(8, 4) + "-" + value.substr(12);
        }
        else return "";
    }
    catch(e) {
        throw "cltnbr.js: CNPJMask()__" + (e.message || e);
    }
}

//**************************************************************************************************
function CPFMask(value) {
    try {
        value = toString(value);
        if (isCPF(value)) {
            value = value.replace(/\D/g, "");
            while (value.length < 11) value = "0" + value;
            return value.substr(0, 3) + "." + value.substr(3, 3) + "." + value.substr(6, 3) + "-" + value.substr(9);
        }
        else return "";
    }
    catch(e) {
        throw "cltnbr.js: CPFMask()__" + (e.message || e);
    }
}

//**************************************************************************************************
function TELMask(value) {
    try {
        value = toString(value);
        if (isTEL(value)) {
            value = value.replace(/\D/g, "");
            return value.substr(0, 4) + " " + value.substr(4);
        }
        else return "";
    }
    catch(e) {
        throw "cltnbr.js: TELMask()__" + (e.message || e);
    }
}

//**************************************************************************************************
function isCEP(value) {
    try {
        value = toString(value);
        if (value == "") return false;
        if (((value.match(/\D/) == null) && (value.length <= 8)) || ((value.match(/\d{5}\-\d{3}/) != null) && (value.length == 9))) {
            value = value.replace(/\D/g, "");
            return (parseInt(value, 10) > 999999);
        }
        return false;
    }
    catch(e) {
        throw "cltnbr.js: isCEP()__" + (e.message || e);
    }
}

//**************************************************************************************************
function isCNPJ(value) { // 04757693000112  61198164000160
    try {
        value = toString(value);
        if (value == "") return false;
        if (value.match(/\D/) == null) {
            if (value.length > 14) return false;
            while (value.length < 14) value = "0" + value;
        }
        else {
            if (value.length > 18) return false;
            while (value.length < 18) value = "0" + value;
            if (value.match(/\d{2}\.\d{3}\.\d{3}\/\d{4}\-\d{2}/) == null) return false;
            value = value.replace(/\D/g, "");
        }
        var A = 0;
        var B = 0;
        var IA = 5;
        var IB = 6;
        var DVA;
        var DVB;
        var RA;
        var RB;
        var auxValue = new Array(14);
        for (var loop = 0; loop < 14; loop++) auxValue[loop] = value.substr(loop, 1);
        for (var loop = 0; loop < 12; loop++) {
            A += auxValue[loop] * IA;
            B += auxValue[loop] * IB;
            IA--;
            if (IA == 1) IA = 9;
            IB--;
            if (IB == 1) IB = 9;
        }
        RA = A - (Math.floor(A / 11) * 11);
        if (RA < 2) DVA = 0;
        else DVA = 11 - RA;
        B += 2 * DVA;
        RB = B - (Math.floor(B / 11) * 11);
        if (RB < 2) DVB = 0;
        else DVB = 11 - RB;
        if ((DVA != auxValue[12]) || (DVB != auxValue[13])) return false;
        return true;
    }
    catch(e) {
        throw "cltnbr.js: isCNPJ()__" + (e.message || e);
    }
}

//**************************************************************************************************
function isCPF(value) { // 04618220830  11649227850
    try {
        value = toString(value);
        if (value == "") return false;
        if (value.match(/\D/) == null) {
            if (value.length > 11) return false;
            while (value.length < 11) value = "0" + value;
        }
        else {
            if (value.length > 14) return false;
            while (value.length < 14) value = "0" + value;
            if (value.match(/\d{3}\.\d{3}\.\d{3}\-\d{2}/) == null) return false;
            value = value.replace(/\D/g, "");
        }
	    if ((value == "00000000000") || (value == "11111111111") || (value == "22222222222") ||
	        (value == "33333333333") || (value == "44444444444") || (value == "55555555555") ||
	        (value == "66666666666") || (value == "77777777777") || (value == "88888888888") ||
	        (value == "99999999999")) return false;
	    var auxSum = 0;
        var auxMod;
	    for (var loop = 0; loop < 9; loop++) auxSum += parseInt(value.charAt(loop), 10) * (10 - loop);
        auxMod = 11 - (auxSum % 11);
        if (auxMod == 10 || auxMod == 11) auxMod = 0;
        if (auxMod != parseInt(value.charAt(9), 10)) return false;
        auxSum = 0;
        for (var loop = 0; loop < 10; loop++) auxSum += parseInt(value.charAt(loop), 10) * (11 - loop);
        auxMod = 11 - (auxSum % 11);
        if (auxMod == 10 || auxMod == 11) auxMod = 0;
        if (auxMod != parseInt(value.charAt(10), 10)) return false;
        return true;
    }
    catch(e) {
        throw "cltnbr.js: isCPF()__" + (e.message || e);
    }
}

//**************************************************************************************************
function isDecimalString(value, min, max) {
    try {
        value = toString(value).replace(",", ".");
        if ((value != "") && (value.substr(1).match(/\-/) == null) && (value.match(/[^0-9\-\.]/) == null) && (value.split(".").length <= 2)) {
            value = parseFloat(value);
            return isDecimal(value, min, max);
        }
        return false;
    }
    catch(e) {
        throw "cltnbr.js: isDecimalString()__" + (e.message || e);
    }
}

//**************************************************************************************************
function isIntegerString(value, min, max) {
    try {
        value = toString(value);
        if ((value != "") && (value.substr(1).match(/\-/) == null) && (value.match(/[^0-9\-]/) == null)) {
            value = parseInt(value, 10);
            return isInteger(value, min, max);
        }
        return false;
    }
    catch(e) {
        throw "cltnbr.js: isIntegerString()__" + (e.message || e);
    }
}

//**************************************************************************************************
function isTEL(value) {
    try {
        value = toString(value);
        if (value == "") return false;
        if (((value.match(/\D/) == null) && (value.length <= 8)) || ((value.match(/\d{4}\ \d{4}/) != null) && (value.length == 9))) {
            value = value.replace(/\D/g, "");
            return (parseInt(value, 10) > 9999999);
        }
        return false;
    }
    catch(e) {
        throw "cltnbr.js: isTEL()__" + (e.message || e);
    }
}

//</script>

