﻿var globAmount = 0;
var no_interest_payment_plans = { 12: 12, 18: 18, 24: 24 };
var extended_payment_plans = { 24: 24, 36: 36, 48: 48 };
var no_interest_payment_plan_limits = { 12: { 1: 1000, 2: 1000, 3: 1000 }, 18: { 1: 2000, 2: 2000, 3: 2000 }, 24: { 1: 3000, 2: 2000, 3: 3000} };
var extended_payment_plan_limits = { 24: { 1: 1000, 2: 1000, 3: 1000 }, 36: { 1: 1000, 2: 1000, 3: 1000 }, 48: { 1: 1000, 2: 1000, 3: 1000} };
var no_interest_payment_plan_factors = { 12: { 1: 0.0841, 2: 0.0841, 3: 0.0841 }, 18: { 1: 0.0561, 2: 0.0561, 3: 0.0561 }, 24: { 1: 0.042, 2: 0.042, 3: 0.042} };
var extended_payment_plan_factors_min = { 24: { 1: 0.0485, 2: 0.0485, 3: 0.0485 }, 36: { 1: 0.0347, 2: 0.0347, 3: 0.0347 }, 48: { 1: 0.0279, 2: 0.0279, 3: 0.0279} };
var max_amounts = { 1: 20001, 2: 12001, 3: 12001 };
var extended_plan_bounderies = { 24: { 1: { 1: 1000, 2: 2500 }, 2: { 1: 1000, 2: 2500 }, 3: { 1: 1000, 2: 2500} }, 36: { 1: { 1: 2500, 2: 4000 }, 2: { 1: 2500, 2: 4000 }, 3: { 1: 2500, 2: 4000} }, 48: { 1: { 1: 4000, 2: 20001 }, 2: { 1: 4000, 2: 12001 }, 3: { 1: 4000, 2: 20001}} };
var no_interest_percentage_values = { 12: 0, 18: 0, 24: 0 };
var extended_payment_percentage_values = { 24: { 0: 0, 1: 0 }, 36: { 0: 0, 1: 0 }, 48: { 0: 0, 1: 0} };
var CALC_SELECTORS = {
    procedureDropDown: "#procedure-type-select",
    amountField: "#amount",
    calculate: "#calculate-btn",
    output: "#calculator-output",
    callout: '#calculator-note',
    error: "#calculator-error",
    errorLabel: "#errorLabel"
};
var selectedSpecialtyDataIndex = 0;

$(document).ready(function () {
    $(CALC_SELECTORS.calculate).click(function () { toCalculateValues(); return false; });
    $(CALC_SELECTORS.procedureDropDown).change(function () {
        selectedSpecialtyDataIndex = $(CALC_SELECTORS.procedureDropDown).val();
        if (selectedSpecialtyDataIndex == 0) {
            $(CALC_SELECTORS.procedureDropDown).parent().addClass('error');
            resetValues();
        } else {
            $(CALC_SELECTORS.procedureDropDown).parent().removeClass('error');
            //toCalculateValues();
        }
    });
    $("#aspnetForm").submit(function () {
        toCalculateValues(); return false;
    });

    $('.no-interest-emc').live('click', function () {
        var id = this.id;
        var month = id.split('_')[1];
        var monthlyAmount = $(this).html().substr(1).replace(/,/gi, "");
        var finalMonthVal = (month - 1) * monthlyAmount;
        var message = "Make " + (month - 1) + " payments of <strong>" + formatcurrency(monthlyAmount) + "</strong> and a final payment of <strong>" + formatcurrency(globAmount - finalMonthVal) + "</strong>.  In " + month + " months the total amount you will pay is <strong>" + formatcurrency(globAmount) + "</strong>.";

        $("div#no-interest-emc .content").html(message);
        $.colorbox({ inline: true, href: "#no-interest-emc" });
        return false;
    });

    $('.extended-payments-emc').live('click', function () {
        var id = this.id;
        var month = id.split('_')[1];
        var monthlyAmount = $(this).html().substr(1).replace(/,/gi, "");
        var finalMonthVal = (month - 1) * monthlyAmount;
        var message = "Make " + (month) + " payments of <strong>" + formatcurrency(monthlyAmount) + "</strong> for " + (month) + " months and the total amount you will have to pay will be <strong>" + formatcurrency(monthlyAmount * month) + "</strong>.";

        $("div#extended-payments-emc .content").html(message);
        $.colorbox({ inline: true, href: "#extended-payments-emc" });
        return false;
    });
});

function formatcurrency(amount) {
    amount += "";
    if (amount.length > 3) {
        var stringVal = amount.toString();
        var rgx = /(\d+)(\d{3})/;
        while (rgx.test(stringVal)) {
            stringVal = stringVal.replace(rgx, '$1' + ',' + '$2');
        }
        amount = stringVal;
    }
    return "$" + amount;
}

function validateInput() {
    var valid = true;
    var message;

    selectedSpecialtyDataIndex = $(CALC_SELECTORS.procedureDropDown).val();
    if (selectedSpecialtyDataIndex == 0) {
        $(CALC_SELECTORS.procedureDropDown).parent().addClass('error');
        message = "Please select a specialty.";
        valid = false;
    }
    else
        $(CALC_SELECTORS.procedureDropDown).parent().removeClass('error');

    if ($(CALC_SELECTORS.amountField).val().length < 1) {
        $(CALC_SELECTORS.amountField).parent().addClass('error');
        message = "Please enter a procedure cost.";
        valid = false;
    }

    var input = $(CALC_SELECTORS.amountField).val();
    input = input.replace(/,/gi, "");
    input = parseInt(input, 10);
    if (isNaN(input)) {
        $(CALC_SELECTORS.amountField).parent().addClass('error');
        message = "Please enter a valid number."
        valid = false;
    }
    else {
        formatInput(input);
        input = (input % 50) >= 25 ? parseInt(input / 50, 10) * 50 + 50 : parseInt(input / 50, 10) * 50;
        if (input < 1000) {
            $(CALC_SELECTORS.amountField).parent().addClass('error');
            message = "The amount entered is below the range that this calculator can process. Ask your provider about 6 month no interest plans for procedure amounts below $1,000."
            valid = false;
        }

        else if (input > 20000) {
            $(CALC_SELECTORS.amountField).parent().addClass('error');
            message = "The amount entered is above the range that this calculator can process. Please talk to your provider about financing options for procedures costing more than $20,000."
            valid = false;
        }
        else {
            $(CALC_SELECTORS.amountField).parent().removeClass('error');
        }
    }

    if (valid) {
        $(CALC_SELECTORS.amountField).parent().removeClass('error');
        $(CALC_SELECTORS.procedureDropDown).parent().removeClass('error');

        $(CALC_SELECTORS.output).removeClass('error').removeClass('hide');
        $(CALC_SELECTORS.error).addClass('hide');
        $(CALC_SELECTORS.callout).removeClass('hide');
    } else {
        $(CALC_SELECTORS.output).addClass('error').removeClass('hide');
        $(CALC_SELECTORS.error).removeClass('hide');
        $(CALC_SELECTORS.errorLabel).html(message);
    }
    return valid;
}

function formatInput(amount) {
    amount += "";
    amount = amount.replace(/,/gi, "");
    amount = parseInt(amount, 10);
    if (!isNaN(amount)) {
        amount = (amount % 50) >= 25 ? parseInt(amount / 50, 10) * 50 + 50 : parseInt(amount / 50, 10) * 50;
        var length = amount.toString().length;
        if (length > 3) {
            var stringVal = amount.toString();
            var rgx = /(\d+)(\d{3})/;
            while (rgx.test(stringVal)) {
                stringVal = stringVal.replace(rgx, '$1' + ',' + '$2');
            }
            amount = stringVal;
        }
        $(CALC_SELECTORS.amountField).val(amount);
    }
}

function toCalculateValues() {
    if (!validateInput($(CALC_SELECTORS.amountField).val())) { return; }
    var stringAmount = $(CALC_SELECTORS.amountField).val();
    stringAmount = stringAmount.replace(/,/gi, "");
    var num = parseInt(stringAmount, 10);
    if (num) {
        num = (num % 50) >= 25 ? parseInt(num / 50, 10) * 50 + 50 : parseInt(num / 50, 10) * 50;
        formatInput(num);
    }
    globAmount = String(num);
    calculateValues();
    $(CALC_SELECTORS.callout).removeClass('hide');
    //track amount
    if (_gaq != undefined)
        _gaq.push(['_trackEvent', 'Payment Calculator', $(CALC_SELECTORS.procedureDropDown + " option:selected").text(), '', num]);
}

function calculateValues() {
    $.each(no_interest_payment_plans, function (i, v) {
        if (globAmount >= no_interest_payment_plan_limits[i][selectedSpecialtyDataIndex] && globAmount <= max_amounts[selectedSpecialtyDataIndex]) {
            var factor = no_interest_payment_plan_factors[i][selectedSpecialtyDataIndex];
            totalAmount = globAmount * factor;
            no_interest_percentage_values[i] = totalAmount;
            d = Math.round((totalAmount / globAmount) * 100);
            totalAmount = Math.round(totalAmount);
            num = new NumberFormat();
            num.setNumber(totalAmount);
            num.setPlaces('0', false);
            totalAmount = num.toFormatted();

            $("#month_" + i + "_n").html("<a href='#' id=\"month_" + i + "_link\" class='no-interest-emc'>$" + totalAmount + "</a> / mo<br />Estimated total cost: <strong>" + formatcurrency(globAmount) + "</strong>");
        } else {
            no_interest_percentage_values[i] = 0;
            $("#month_" + i + "_n").html("<strong>NA</strong>");
        }
    });

    $.each(extended_payment_plans, function (i, v) {
        if (globAmount >= extended_payment_plan_limits[i][selectedSpecialtyDataIndex] && globAmount <= max_amounts[selectedSpecialtyDataIndex]) {
            if (globAmount >= extended_plan_bounderies[i][selectedSpecialtyDataIndex][1] && globAmount < extended_plan_bounderies[i][selectedSpecialtyDataIndex][2]) {
                var factor_min = extended_payment_plan_factors_min[i][selectedSpecialtyDataIndex];
                totalAmount_min = globAmount * factor_min;
                d_min = Math.round((totalAmount_min / globAmount) * 100);
                totalAmount_min = Math.round(totalAmount_min);
                extended_payment_percentage_values[i][0] = totalAmount_min;
                num = new NumberFormat();
                num.setNumber(totalAmount_min);
                num.setPlaces('0', false);
                totalAmount_min = num.toFormatted();
                $("#month_" + i + "_e").html("<a href='#' id=\"month_" + i + "_e_link\" class='extended-payments-emc'>$" + totalAmount_min + "</a> / mo<br />Estimated total cost: <strong><span id='month_" + i + "_t'></span></strong>");

                //totals
                var totalAmount = i * totalAmount_min;
                amount = new NumberFormat();
                amount.setNumber(totalAmount);
                amount.setPlaces('0', false);
                totalAmount = amount.toFormatted();
                $("#month_" + i + "_t").html("$" + totalAmount);

            } else {
                extended_payment_percentage_values[i][0] = 0;
                extended_payment_percentage_values[i][1] = 0;
                $("#month_" + i + "_e").html("<strong>NA</strong>");
                $("#month_" + i + "_t").html("<strong>NA</strong>");
            }
        } else {
            extended_payment_percentage_values[i][0] = 0;
            extended_payment_percentage_values[i][1] = 0;
            $("#month_" + i + "_e").html("<strong>NA</strong>");
            $("#month_" + i + "_t").html("<strong>NA</strong>");
        }
    });
}

function resetValues() {
    $.each(extended_payment_plans, function (i, v) {
        $("#month_" + i + "_e").html("<strong>NA</strong>");
    });

    $.each(no_interest_payment_plans, function (i, v) {
        $("#month_" + i + "_n").html("<strong>NA</strong>");
    });
}
