﻿var adultCount = 1;
var childCount = 0;
function initPlugins() {
    $('#itemList li.li-adult .form-title,#itemList li.li-child .form-title').each(function(i) {
        var title = (i < adultCount) ? "Verzekerde (" + (i + 1) + ")" : "Kind (" + (i - adultCount + 1) + ")";
        $(this).text(title);
    });
    setupSlider($("span.slider-in"));
    $('span.icon-question').bt({ positions: ['right'],
        contentSelector: "$(this).children().html()",
        spikeGirth: 0,
        spikeLength: 0,
        shadowColor: '#8A8474'
    });
}

function addItem(isAdult) {
    var newItem = $('#itemList li.li-adult:first').clone();
    if (isAdult) {
        adultCount++;
        newItem.find('.premie-birthday').attr('name', 'aBirthday' + (adultCount - 1));
        newItem.find('.premie-way').addClass('payment-rule').attr('name', 'aWay' + (adultCount - 1));
        newItem.find('.premie-amount').attr('name', 'aAmount' + (adultCount - 1));
        $('#aCount').val(adultCount);
        $('#itemList li.li-adult:last').after(newItem);
        $('.jqmWindow_yarden').jqmAddTrigger(".calculator-trigger");
    }
    else {
        childCount++;
        newItem.removeClass('li-adult').addClass('li-child').find('tr:gt(1)').remove();
        newItem.find('.premie-birthday')
            .removeClass('gt18')
			.removeClass('not_child')
            .addClass('lt18')
            .attr('name', 'cBirthday' + (childCount - 1))
            .closest('td').addClass('c-b-td');
        $('#cCount').val(childCount);
        $('#itemList').append(newItem);
    }

    var $input = newItem.find('input:text').val('').removeClass('error');
    var $container = $input.closest('tr').removeClass('error');
    newItem.find('label.error').remove();

    initPlugins();
}

$(function () {
    $.validator.addMethod("birthday", function (value, element) {
        if (this.optional(element)) return true;

        if (!$.validator.methods.birthdayNL.call(this, value, element)) return false;

        var way = $(element).closest('table').find('.premie-way option:selected').val();
        var spanMonth = 1203;
        if (way == "T65")
            spanMonth = 60 * 12 + 11;
        else if (way == "T85")
            spanMonth = 69 * 12 + 11;

        var myDate = getDateFromBirthday(value);
        var d = new Date();
        d.setFullYear(myDate.year, myDate.month - 1, myDate.day);
        d.setMonth(spanMonth + d.getMonth());
        var today = new Date();
        if (d.getTime() < today.getTime()) return false;

        return validateBirthday(value);
    }, "error_birthday_range");

    $.validator.addMethod("payment-rule", function (value, element) {
        if (this.optional(element)) return true;
        val = $("select.premie-way:first").find('option:selected').val();
        var valid = true;
        if (val == 'Koopsom' && value != val)
            valid = false;
        else if ((val == 'T65' || val == 'T85') && value == 'Koopsom')
            valid = false;
        if (!valid)
            $('.payment-way-error').show();
        else
            $('.payment-way-error').hide();
        return valid;
    }, "");

    $('#adult').change(function () {
        var val = parseInt($(this).find('option:selected').text())
        if (val > adultCount) {
            var toAdd = val - adultCount;
            for (var i = 0; i < toAdd; i++)
                addItem(true);
        } else if (val < adultCount) {
            var toRemove = adultCount - val;
            for (var i = 0; i < toRemove; i++) {
                $('#itemList li.li-adult:last').remove();
                adultCount--;
                $('#aCount').val(adultCount);
            }
            initPlugins();
            getPremieResult();
        }
    });

    $('#children').change(function () {
        var val = parseInt($(this).find('option:selected').text())
        if (val > childCount) {
            var toAdd = val - childCount;
            for (var i = 0; i < toAdd; i++)
                addItem(false);
        } else if (val < childCount) {
            var toRemove = childCount - val;
            for (var i = 0; i < toRemove; i++) {
                $('#itemList li.li-child:last').remove();
                childCount--;
                $('#cCount').val(childCount);
            }
        }

        initPlugins();
    });

    $.validator.addMethod("som", function (value, element) {
        return this.optional(element) || (parseNLCurrency(value) >= 1000 && parseNLCurrency(value) <= 16500);
    }, function (a, ele) {
        if (parseNLCurrency($(ele).val()) > 16500)
            return "U kunt tot maximaal €16500 verzekeren per verzekerde.";
        else if (parseNLCurrency($(ele).val()) < 1000)
            return "U kunt tot minimaal €1000 verzekeren per verzekerde.";
    });

    $('#formPremie').validate({
        showErrors: function (errorMap, errorList) {
            for (var i = 0; i < errorList.length; i++) {
                if (errorList[i].message == 'error_birthday_range') {
                    var way = $(errorList[i].element).closest('table').find('.premie-way option:selected').val();
                    if (way == "T65")
                        errorList[i].message = "De uiterste instapleeftijd voor deze verzekering is 60 jaar en 11 maanden. U kunt wel een koopsom verzekering afsluiten.";
                    else if (way == "T85")
                        errorList[i].message = "De uiterste instapleeftijd voor deze verzekering is 69 jaar en 11 maanden. U kunt wel een koopsom verzekering afsluiten.";
                }
            }
            this.defaultShowErrors();
        }

    });

    var defaultValue = $('input.premie-amount:first').val();
    if (defaultValue > 0) {
        setupSlider($("span.slider-in"), defaultValue);
        $('input.premie-amount:first').val(toNLCurrency(defaultValue));
    }
    else {
        setupSlider($("span.slider-in"));
    }

    $('#calculate').click(function (evt) {
        if (!$('#formPremie').valid()) { evt.preventDefault(); return false; }
        var data = [];
        $('#itemList li.li-adult').each(function (i) {
            var item = {
                Index: i,
                Birthday: $(this).find('input.premie-birthday').val(),
                Way: $(this).find('select.premie-way option:selected').val(),
                Amount: parseNLCurrency($(this).find('input.premie-amount').val())
            }
            data.push(item);
        });

        calculatePremie(data, function (result) {
            $('#premie_result tr:gt(0)').remove();
            if (Object.prototype.toString.apply(result) === "[object Array]") {
                var totalAmount = 0;
                var totalPerMonth = 0;
                var totalPerYear = 0;
                var totalKoopsom = 0;

                var maxAmount = 0;
                var cCount = 0;
                $('#result_defaut').hide();
                $("#result").show();
                for (var i = 0; i < result.length; i++) {
                    var tr = $("<tr></tr>").appendTo("#premie_result")
                                .append("<td class='table-cloumn1 title-name'>Verzekerde (" + (result[i].index + 1) + ") (" + result[i].birthday + ")</td>")
                                .append("<td class='table-cloumn2'>" + toNLCurrency(parseNLCurrency(result[i].amount), "nvt.") + "</td>")
                                .append("<td class='table-cloumn3'>" + toNLCurrency(parseNLCurrency(result[i].perMonth), "nvt.") + "</td>")
                                .append("<td class='table-cloumn4'>" + toNLCurrency(parseNLCurrency(result[i].perYear), "nvt.") + "</td>")
                                .append("<td class='table-cloumn5'>" + toNLCurrency(parseNLCurrency(result[i].koopsom), "nvt.") + "</td>");
                    tr.find('td:first').append('<input type="hidden" name="birthday' + i + '" value="' + result[i].birthday + '"/>')
                        .append('<input type="hidden" name="way' + i + '" value="' + result[i].way + '"/>')
                        .append('<input type="hidden" name="som' + i + '" value="' + parseNLCurrency(result[i].amount) + '"/>');

                    var amt = parseNLCurrency(result[i].amount);
                    if (amt > maxAmount) maxAmount = amt;
                    totalAmount += amt;
                    totalPerMonth += parseNLCurrency(result[i].perMonth);
                    totalPerYear += parseNLCurrency(result[i].perYear);
                    totalKoopsom += parseNLCurrency(result[i].koopsom);

                }

                $('li.li-child').each(function (index) {
                    var tr = $("<tr></tr>").appendTo("#premie_result")
                                .append("<td class='table-cloumn1 title-name'>Kind (" + (index + 1) + ") (" + $(this).find(".premie-birthday").val() + ")</td>")
                                .append("<td class='table-cloumn2'>" + toNLCurrency(maxAmount, "nvt.") + "</td>")
                                .append("<td class='table-cloumn3'>" + "€ 0" + "</td>")
                                .append("<td class='table-cloumn4'>" + "€ 0" + "</td>")
                                .append("<td class='table-cloumn5'>" + "nvt." + "</td>");
                    tr.find('td:first').append('<input type="hidden" name="cBirthday' + index + '" value="' + $(this).find(".premie-birthday").val() + '"/>')
                        .append('<input type="hidden" name="cSom' + index + '" value="' + maxAmount + '"/>');
                    cCount++;
                    totalAmount += maxAmount;
                });

                $("<tr class='tr-total'></tr>").appendTo("#premie_result")
                        .append("<td class='table-cloumn1 title-name'>Totaal<input type='hidden' name='count' value='" + result.length + "' /><input type='hidden' name='cCount' value='" + cCount + "' /></td>")
                        .append("<td class='table-cloumn2'>" + toNLCurrency(totalAmount, "nvt.") + "</td>")
                        .append("<td class='table-cloumn3'>" + toNLCurrency(totalPerMonth, "nvt.") + "</td>")
                        .append("<td class='table-cloumn4'>" + toNLCurrency(totalPerYear, "nvt.") + "</td>")
                        .append("<td class='table-cloumn5'>" + toNLCurrency(totalKoopsom, "nvt.") + "</td>");
            }
        });
    });

    $('span.icon-question').bt({
        positions: ['right'],
        contentSelector: "$(this).children().html()",
        spikeGirth: 0,
        spikeLength: 0,
        shadowColor: '#8A8474'
    });

    $('.jqmWindow_yarden').appendTo('body').jqm({ modal: true, overlayClass: 'jqmOverlay_yarden',
        onShow: function (hash) {
            var inputName = $(hash.t).closest("td").find('.premie-amount').attr('name');
            $('#inputName').val(inputName);
            var oh = hash.o.height();
            var wh = hash.w.height();
            if (wh >= oh) {
                hash.w.find('#calculator').height(oh - 40).attr('scrolling', 'auto');
            }
            hash.w.show();
        },
        trigger: ".calculator-trigger"
    });
});

function calculatorOnload(frm) {
    $(frm).contents().find('#pickup').click(function() {
        var inputName = $('#inputName').val();
        var val = $(frm).contents().find('#totalcost').text().replace('&nbsp;', '');
        var $input = $('input[name="' + inputName + '"]');
        $input.val(toNLCurrency(parseNLCurrency(val)));
        var $slider = $input.closest('tr').next('tr').find("span.slider-in");
        $slider.slider('option', 'value', [parseNLCurrency(val)]);
        $(frm).parent('.jqmWindow_yarden').jqmHide();
    });
}
