﻿var savedFirstMortgageBalances = new Array();
var savedSecondMortgageBalances = new Array();
var savedBorrowAmmounts = new Array();

function hideAllFields() {
    // hide all fields
    $(".toggleField").hide();
}

function attachStep1Functionality() {
    $("select.typeOfLoan").change(onTypeOfLoanChanged);
    $("a.refinanceSubmit.step1").click(onRefinanceStep1Click);

    selectToggleFields($("select.typeOfLoan"), ".toggleField.s_1_");
}

function attachStep2Functionality() {
    $("select.secondMortgageSelector").change(onSecondMortgageSelectorChanged);
    $("select.homeValue").change(onHomeValueChanged);
    $("select.firstMortgageBalance").change(onFirstMortgageBalanceChanged);
    $("select.secondMortgageBalance").change(onSecondMortgageBalanceChanged);
    $("a.refinanceSubmit.step2").click(onRefinanceStep2Click);

    changeHomeValue($("select.homeValue"));
    changeFirstMortgageBalance($("select.firstMortgageBalance"));
    changeSecondMortgageBalance($("select.secondMortgageBalance"));
    selectToggleFields($("select.secondMortgageSelector"), ".toggleField.s_2_");
}

function attachStep3Functionality() {
    $("a.refinanceSubmit.step3").click(onRefinanceStep3Click);
}

function attachStep4Functionality() {
    $("a.refinanceSubmit.step4").click(onRefinanceStep4Click);
}

function onSecondMortgageBalanceChanged() {
    var $select = $(this);
    changeSecondMortgageBalance($select);
}

function onFirstMortgageBalanceChanged() {
    var $select = $(this);
    changeFirstMortgageBalance($select);
}

function onHomeValueChanged() {
    var $select = $(this);
    changeHomeValue($select);
}

function changeHomeValue($homeValue) {
    var homeValue = parseInt($homeValue.val());

    var rightValue = getValueB(homeValue);
    var rightMortgage1 = getMortgage1B(rightValue)
    var leftMortgage1 = getMortgage1A(rightMortgage1);

    appendInvalidFirstMortgageBalanceItems();

    $("select.firstMortgageBalance option").each(function() {
        $option = $(this);
        if ($option.val() > leftMortgage1) {
            savedFirstMortgageBalances.push($option.remove());
        }
    });

    changeFirstMortgageBalance($("select.firstMortgageBalance"));
}

function appendInvalidFirstMortgageBalanceItems() {
    for (var i = 0; i < savedFirstMortgageBalances.length; ++i) {

        $("select.firstMortgageBalance option:last").after(savedFirstMortgageBalances[i]);
    }

    savedFirstMortgageBalances = new Array();
}

function changeFirstMortgageBalance($firstMortgageBalance) {
    var mortgage1A = parseInt($firstMortgageBalance.val());
    var homeValue = parseInt($("select.homeValue").val());
    var rightValue = getValueB(homeValue);
    var mortgage1B = mortgage1A + J(rightValue);
    var leftMortgage2 = getMortgage2A(homeValue, rightValue, mortgage1B);

    appendSecondMortgageBalanceItems();

    $("select.secondMortgageBalance option").each(function() {
        $option = $(this);
        if ($option.val() > leftMortgage2) {
            savedSecondMortgageBalances.push($option.remove());
        }
    });

    changeSecondMortgageBalance($("select.secondMortgageBalance"));
}

function appendSecondMortgageBalanceItems() {
    for (var i = 0; i < savedSecondMortgageBalances.length; ++i) {
        $("select.secondMortgageBalance option:last").after(savedSecondMortgageBalances[i]);
    }

    savedSecondMortgageBalances = new Array();
}

function changeSecondMortgageBalance($secondMortgageBalance) {
    var mortgage1A = parseInt($("select.firstMortgageBalance").val());
    var mortgage2A = parseInt($secondMortgageBalance.val());

    var homeValue = parseInt($("select.homeValue").val());
    var rightValue = getValueB(homeValue);

    // var mortgage1B = getMortgage1B(rightValue);
    var mortgage1B = mortgage1A + I(mortgage1A);
    var mortgage2B = getMortgage2B(mortgage2A);

    var borrowB = getBorrowB(homeValue, rightValue, mortgage1B, mortgage2B);
    var borrowA = getBorrowA(borrowB);

    appendBorrowAmmountItems();

    $("select.borrowAmmount option").each(function() {
        $option = $(this);
        if ($option.val() > borrowA) {
            savedBorrowAmmounts.push($option.remove());
        }
    });
}

function appendBorrowAmmountItems() {
    for (var i = 0; i < savedBorrowAmmounts.length; ++i) {
        $("select.borrowAmmount option:last").after(savedBorrowAmmounts[i]);
    }

    savedBorrowAmmounts = new Array();
}

function onRefinanceStep1Click() {
    var $firstInvalidRequiredField = getFirstInvalidRequiredField();
    var $requiredErrorMessage = $(".requiredError");

    $requiredErrorMessage.hide();

    if ($firstInvalidRequiredField != null) {
        showRefinancingAlert();
        $firstInvalidRequiredField.focus();
        $requiredErrorMessage.show();
        return false;
    }
}

function onRefinanceStep2Click() {
    appendInvalidFirstMortgageBalanceItems();
    appendSecondMortgageBalanceItems();
    appendBorrowAmmountItems();

    return onRefinanceStep1Click();
}

function onRefinanceStep3Click() {
    return onRefinanceStep1Click();
}

function onRefinanceStep4Click() {
    return onRefinanceStep1Click();
}

function getFirstInvalidRequiredField() {
    var $firstInvalidField = null;
    $(".required:visible").each(function() {
        if ($firstInvalidField) {
            return;
        }

        var $input = $(this);

        if ($input[0].tagName == "SELECT") {
            if ($input.val() == -1  ) {
                $firstInvalidField = $input;
            }
        }

        if ($input.val() == null || $input.val() == "") {
            $firstInvalidField = $input;
        }
    });

    return $firstInvalidField;
}

function onTypeOfLoanChanged() {
    selectToggleFields($(this), ".toggleField.s_1_");
}

function onSecondMortgageSelectorChanged() {
    selectToggleFields($(this), ".toggleField.s_2_");

    if ($("secondMortgageSelector").val() == "1") {
        $("secondMortgageBalance").addClass("required");
        $("secondMortgageInterestRate").addClass("required");
    } else {
        $("secondMortgageBalance").removeClass("required");
        $("secondMortgageInterestRate").removeClass("required");
    }
}

function selectToggleFields($select, selectorPrefix) {
    var selection = $select.val();
    var processedItems = new Array();

    for (var i = 0; i < $select.find("option").length; ++i) {
        // toggle hidden fields that have the right css class
        var option = i + 1;
        var selector = selectorPrefix + option + ":not(.processed)";

        var show = option == selection;

        var $item = $(selector);

        $item.each(function() {
            if (show) {
                $item.show();
                $item.addClass("processed");
            } else {
                $item.hide();
            }
        });
    }

    $(".processed").removeClass("processed");
}

$(document).ready(function() {
    $(".zipCodeMask").mask("99999", { placeholder: " " });
    $(".phoneMask").mask("(999)999-9999", { placeholder: " " });
    hideAllFields();
    attachStep1Functionality();
    attachStep2Functionality();
    attachStep3Functionality();
    attachStep4Functionality();
});

function getMortgage1B(vb) {
    return vb;
    //    var result = Math.min(1000000, vb - Math.round(vb * 0.1 / D(vb)) * D(vb));
    //    return result;
}

function D(vb) {
    if (vb < 400000) {
        return 10000;
    } else if (vb < 1000000) {
        return 20000;
    } else {
        return 25000;
    }
}

function getMortgage2A(va, vb, m1b) {
    var result = vb - m1b;
    return result;

    //var result = Math.max(5000, Math.round((va - va * 0.1 - m1a) / D1(vb)) * D1(vb));
    //return result;
}

function D1(vb) {
    if (vb < 400000) {
        return 5000;
    } else if (vb < 1000000) {
        return 10000;
    } else {
        return 25000;
    }
}

function getValueA(vb) {
    return Math.max(vb - I(vb));
}

function I(vb) {
    if (vb <= 100000) {
        return 5000;
    } else if (vb <= 400000) {
        return 10000;
    } else if (vb <= 1000000) {
        return 20000;
    } else {
        return 250000;
    }
}

function J(vb) {
    if (vb < 100000) {
        return 5000;
    } else if (vb < 400000) {
        return 10000;
    } else if (vb < 1000000) {
        return 20000;
    } else {
        return 250000;
    }
}

function getValueB(va) {
    return va + J(va);
}

function getMortgage1A(m1b) {
    return Math.max(0, m1b - I(m1b));
}

function getMortgage2B(m2a) {
    return m2a + J(m2a);
}

function getBorrowB(va, vb, m1b, m2b) {
    //return Math.round(Math.max(va - va * 0.1 - m1a - m2a, 0) / (vb - va)) * (vb - va);
    return Math.max(0, vb - m1b - m2b);
}

function getBorrowA(bb) {
    return Math.max(0, bb - I(bb));
}