﻿var ubox = {};
var categorias = new Array();
var parametros = new Object();

function roundNumber(number, digits) {
    var multiple = Math.pow(10, digits);
    var rndedNum = Math.round(number * multiple) / multiple;
    return rndedNum;
};

ubox.calculadora = {

    manejoAduana: function (valor) {
        if (valor <= 200) { return 10 };
        if (valor <= 400) { return 15 };
        if (valor <= 1000) { return 20 };
        if (valor <= 2000) { return 30 };

        return (0);
    },


    calcular: function (valorFOB, pesoLbs, categoriaID) {
        var calculos = new Object;

        calculos["pesoKgs"] = roundNumber((pesoLbs / 2.202), 2);
        calculos["fleteAerolinea"] = roundNumber((calculos["pesoKgs"] * parametros["valorFleteAerolinea"]), 2);
        calculos["seguro"] = roundNumber((parseFloat(valorFOB) + parseFloat(calculos["fleteAerolinea"])) * parametros["seguro"], 2);

        calculos["TRANSPORTE"] = parseFloat(parametros["valorLb"] * pesoLbs);
        calculos["MANEJO_ADUANA"] = parseFloat(ubox.calculadora.manejoAduana(valorFOB));
        calculos["IVA_TRANSPORTE"] = roundNumber((calculos["TRANSPORTE"] + calculos["MANEJO_ADUANA"]) * (parametros["iva"] / 100), 2)

        calculos["CIF"] = roundNumber(parseFloat(valorFOB) + parseFloat(calculos["fleteAerolinea"]) + parseFloat(calculos["seguro"]), 2);
        calculos["FODINFA"] = parseFloat(parametros["fodinfa"] / 100 * calculos["CIF"]);


        if (valorFOB <= 400 & pesoLbs <= 8) {
            calculos["IVA_IMPUESTOS"] = 0;

            calculos["ICE"] = 0;
            calculos["ARANCEL"] = 0;
            calculos["FODINFA"] = 0;

            return (calculos);
        }


        calculos["ARANCEL"] = parseFloat(categorias[categoriaID].getARANCEL() / 100 * calculos["CIF"]);

        if (categorias[categoriaID].getICE()) {
            //(CIF+Arancel+FODINFA)*1.25
            var baseICE = (calculos["CIF"] + calculos["ARANCEL"] + calculos["FODINFA"]) * 1.25;
            calculos["ICE"] = parseFloat((categorias[categoriaID].getICE() / 100) * baseICE);
        } else {
            calculos["ICE"] = 0;
        }
        // CIF + ARANCEL + salvaguarda + fodinfa + ice
        var baseIVA = calculos["CIF"] + calculos["ARANCEL"] + calculos["FODINFA"] + calculos["ICE"];
        calculos["IVA_IMPUESTOS"] = parseFloat((parametros["iva"] / 100) * baseIVA);

        return (calculos);
    },

    init: function () {

        function Categoria(properties) {
            var self = this;
            for (var i in properties) {
                (function () {
                    var property = i;
                    self["get" + i] = function () {
                        return properties[property];
                    };
                    self["set" + i] = function (val) {
                        properties[property] = val;
                    };
                })();
            }
        };

        parametros["seguro"] = 0.02;
        parametros["valorLb"] = 4.5;
        parametros["valorFleteAerolinea"] = 1.5;
        parametros["iva"] = 12;
        parametros["fodinfa"] = 0.5;

        categorias.push(new Categoria({
            id: 0,
            name: "Paquetes Generales",
            ARANCEL: "20",
            ICE: "0",
            salvaguardaAplica: "%"
        }));
        categorias.push(new Categoria({
            id: 1,
            name: "Video Juegos",
            ARANCEL: "20",
            ICE: "35",
            salvaguardaAplica: "%"
        }));
        categorias.push(new Categoria({
            id: 2,
            name: "Libros",
            ARANCEL: "0",
            ICE: "0",
            salvaguardaAplica: "%"
        }));
        categorias.push(new Categoria({
            id: 3,
            name: "Computadoras",
            ARANCEL: "0",
            ICE: "0",
            salvaguardaAplica: "%"
        }));
        categorias.push(new Categoria({
            id: 4,
            name: "Ropa",
            ARANCEL: "30",
            ICE: "0",
            salvaguardaAplica: " p/kg"
        }));
        categorias.push(new Categoria({
            id: 5,
            name: "Perfumes",
            ARANCEL: "20",
            ICE: "20",
            salvaguardaAplica: "%"
        }));

        var ddCategoriasOptions = "";
        for (var i in categorias) {
            ddCategoriasOptions += "<option value='" + categorias[i].getid() + "' >" + categorias[i].getname() + "</option>";
        }

        //$("#ddCategoria").html(ddCategoriasOptions);

        $("#dropDwnCategoria").html('<select id="ddCategoria">' + ddCategoriasOptions + '</select>');

        $("#btnCalcular").bind("click", function () {

            if (
                isNaN($("#txtValor").val()) | $("#txtValor").val() == "" |
                isNaN($("#txtPeso").val()) | $("#txtPeso").val() == ""

            ) { alert("Debe introducir el valor y peso del paquete"); return (false); };

            if ($("#txtValor").val() > 2000) { alert("Paquetes de más de 2000 $ no pueden ser transportados."); return (false); };

            var categoriaID = $("#ddCategoria").val();
            var calculos = ubox.calculadora.calcular($("#txtValor").val(), $("#txtPeso").val(), categoriaID);


            var totalServicio = calculos["IVA_TRANSPORTE"] + calculos["TRANSPORTE"] + calculos["MANEJO_ADUANA"];
            var resultadosHTML = "<table id='ubox-calculadora-resultados'>" +

            "<tr><td class='titulo transporte' colspan='2'><b>SERVICIO</b></td></tr>" +
            "<tr><td class='titulo transporte'>Transporte</td><td class='valor'>" + calculos["TRANSPORTE"] + "</td></tr>" +
            "<tr><td class='titulo manejo'>Manejo</td><td class='valor'>" + calculos["MANEJO_ADUANA"] + "</td></tr>" +
            "<tr><td class='titulo manejo'>IVA</td><td class='valor'>" + calculos["IVA_TRANSPORTE"] + "</td></tr>" +
             "<tr><td class='titulo manejo'><b>Total Servicio</b></td><td class='valor'>" + totalServicio + " US$</td></tr>" +
             "<tr><td class='titulo transporte' colspan='2'>&nbsp;</td></tr>" +

             "<tr><td class='titulo transporte' colspan='2'><b>IMPUESTOS</b></td></tr>";


            if (calculos["FODINFA"] > 0) { "<tr><td class='titulo fodinfa'>FODINFA " + parametros["fodinfa"] + "% </td><td class='valor'>" + roundNumber(calculos["FODINFA"], 2) + "</td></tr>" };

            if (calculos["ARANCEL"]) { resultadosHTML += "<tr><td class='titulo arancel'>Arancel " + categorias[categoriaID].getARANCEL() + "% </td><td class='valor'>" + roundNumber(calculos["ARANCEL"], 2) + "</td></tr>" };
            if (calculos["ICE"]) { resultadosHTML += "<tr><td class='titulo ice'>ICE " + categorias[categoriaID].getICE() + "% </td><td class='valor'>" + roundNumber(calculos["ICE"], 2) + "</td></tr>" };
            if (calculos["IVA_IMPUESTOS"]) { resultadosHTML += "<tr><td class='titulo iva'>IVA " + parametros["iva"] + "% </td><td class='valor iva'>" + roundNumber(calculos["IVA_IMPUESTOS"], 2) + "</td></tr>" };

            var totalVal = 0.0;
            totalVal = calculos["IVA_IMPUESTOS"] + calculos["ICE"] + calculos["ARANCEL"] + calculos["FODINFA"];
            totalVal = roundNumber(totalVal, 2);
            if (totalVal > 0) {
                resultadosHTML += "<tr><td class='titulo'><b>Total Impuestos</b></td><td  class='valor'>" + totalVal + " US$</td></tr>";
            } else {
                resultadosHTML += "<tr><td class='titulo' colspan=2 ><b>Ninguno! </b></td></tr>";

            }
            var grandTotal = roundNumber((totalServicio + totalVal), 2);
            resultadosHTML += "<tr><td class='titulo transporte' colspan='2'>&nbsp;</td></tr>" +
             "<tr><td class='titulo total'><b>TOTAL</b></td><td  class='valor total'>" + grandTotal + " US$</td></tr>";

            resultadosHTML += "</table>";
            $("#ubox-calculadora-resultados").html(resultadosHTML);


        })
    }

}