function getRender(key, value, depth) {
    var sr = $("<div>")
        .addClass("JSONObjectDiv")
        .data("nodeName", key)
        .css("margin-left", depth * 15 + "px");
    if (value instanceof Object) {
        $("<label>").text(key).appendTo(sr);
        $.each(value, function (key, value) {
            sr.append(getRender(key, value, depth + 1));
        });
    } else {
        $("<label>").text(key).css("margin-right", "15px").appendTo(sr);
        $("<input>").attr("type", "text").val(value).appendTo(sr);
    }
    return sr;
}
var cfgid = 0;
$(".jsonSettingsEdit").on("click", function (event) {
    event.preventDefault();
    cfgid = $(this).data("cfgid");
    var cfgvalue = jQuery.parseJSON($("input[name='new_value[" + cfgid + "]']").val());
    $("#JSONSettingsDiv").html("");
    $.each(cfgvalue, function (key, value) {
        $("#JSONSettingsDiv").append(getRender(key, value, 0));
    });

    $("#JSONSettingsModal").modal("show");
});

function getFormValue(object) {
    var tmp = {};
    if ($(object).children(".JSONObjectDiv").length > 0) {
        $(object)
            .children(".JSONObjectDiv")
            .each(function () {
                tmp[$(this).data("nodeName")] = getFormValue($(this));
            });
        return tmp;
    } else if ($(object).children("input").length > 0) {
        return $("input", object).val();
    }
}

function updateDropDrownFromAjax(selectObj) {
    $.ajax({
        method: "GET",
        url: window.CRM.root + selectObj.data("url"),
        dataType: "json",
        encode: true,
    }).done(function (data) {
        $.each(data, function (index, config) {
            var optSelected = config.id == selectObj.data("value");
            var opt = new Option(config.value, config.id, optSelected, optSelected);
            selectObj.append(opt);
        });
    });
}

$(".jsonSettingsClose").on("click", function (event) {
    var settings = getFormValue($("#JSONSettingsDiv"));
    $("input[name='new_value[" + cfgid + "]']").val(JSON.stringify(settings));
    $("#JSONSettingsModal").modal("hide");
    $("input[name=save]").click();
});

$(".setting-tip").click(function () {
    bootbox.alert({
        message: $(this).data("tip"),
        backdrop: true,
        className: "setting-tip-box",
    });
});
