/* Minification failed. Returning unminified contents.
(95,79-80): run-time error JS1195: Expected expression: >
(143,6-7): run-time error JS1195: Expected expression: )
(148,64-65): run-time error JS1195: Expected expression: >
(163,5-6): run-time error JS1002: Syntax error: }
(164,63-64): run-time error JS1004: Expected ';': {
(166,6-7): run-time error JS1195: Expected expression: )
(169,55-56): run-time error JS1195: Expected expression: )
(169,57-58): run-time error JS1004: Expected ';': {
(171,6-7): run-time error JS1195: Expected expression: )
(173,61-62): run-time error JS1195: Expected expression: )
(173,63-64): run-time error JS1004: Expected ';': {
(175,6-7): run-time error JS1195: Expected expression: )
(177,43-44): run-time error JS1195: Expected expression: )
(177,45-46): run-time error JS1004: Expected ';': {
(180,6-7): run-time error JS1195: Expected expression: )
(182,7-22): run-time error JS1197: Too many errors. The file might not be a JavaScript file: ".open-section"
 */
var countOptions = {
    useEasing: false,
    useGrouping: true,
    separator: ' ',
    decimal: ',',
    prefix: '',
    suffix: ''
};


function animateCount(element, startValue, endValue, decimals, speed, options) {

    if (options == undefined) {
        options = countOptions;
    }

    var counter = new CountUp(element, startValue, endValue, decimals, speed, options);
    counter.start();
}

function animateCountIfInViewport(element, startValue, endValue, decimals, speed, options) {
    if (isElementInViewport($("#" + element))) {
        animateCount(element, startValue, endValue, decimals, speed, options);
    }
}

function isElementInViewport(el) {

    //special bonus for those using jQuery
    if (typeof jQuery === "function" && el instanceof jQuery) {
        el = el[0];
    }

    var rect = el.getBoundingClientRect();

    return (
        rect.top >= 0 &&
        rect.left >= 0 &&
        rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && /*or $(window).height() */
        rect.right <= (window.innerWidth || document.documentElement.clientWidth) /*or $(window).width() */
    );
};
function initPage() {

    // GLOBALIZATION
    // set Globalize to the current culture driven by the html lang property
    var currentCulture = $("html").attr("lang");

    if (currentCulture) {
        Globalize.culture(currentCulture);
    }

};

$(document).ready(initPage);

$(function () {
    if ($(".contact-page .search-input input").length > 0) {
        $(".contact-page .search-input input").on('keyup', function () {
            var matcher = new RegExp($(this).val(), 'gi');
            var search = $(this).val().toLowerCase();

            $('.contact').removeClass("hidden").not(function () {
                return ($(this).find('.contact-name,.contact-role').text().toLowerCase().indexOf(search) != -1);
            }).addClass("hidden");
        });
    }

    $(".contacts tr").on("click", function () { $(this).toggleClass("active"); });

    // Accordion
    $(".accordion .accordion-item").on("click", function () {
        $(this).toggleClass("active");
    });

    $(".accordion-enovatilskuddet .accordion-item").on("click", function () {
        $(this).toggleClass("active");
    });

    $(".factbox-expand, .text-expand").on("click", function (e) {
        e.preventDefault();
        var target = $(this).data("target");
        $('.expandable[data-id="' + target + '"]').toggleClass("active");
    });
    $(".figure-risk-possibilities .btn").on("click", function (e) {
        e.preventDefault();
        var target = $(this).data("target");
        $(".figure-risk-possibilities .btn").addClass("inactive");
        $(this).removeClass("inactive");
        $('.figure-content').addClass("hidden");
        $(target).removeClass("hidden");
    });


    document.querySelectorAll('.chapter-navigation .chapter').forEach(anchor => {
        anchor.addEventListener('click', function (e) {
            e.preventDefault();

            var yOffset = -80;
            var element = document.getElementById(this.getAttribute('href').replace('#', ''));
            var y = element.getBoundingClientRect().top + window.pageYOffset + yOffset;

            window.scrollTo({ top: y, behavior: 'smooth' });
        });

        var href = anchor.getAttribute("href");



        new Waypoint({
            element: document.getElementById(href.replace("#", "")),
            handler: function (direction) {
                var id = this.element.id;
                if (direction == 'down') {
                    $('.chapter-navigation .chapter[href="#' + id + '"]').addClass("active").siblings().removeClass("active");
                }
                //$('.chapter-navigation .chapter[href="#' + id + '"]').removeClass("active");

            },
            offset: '90%'
        });

        new Waypoint({
            element: document.getElementById(href.replace("#", "")),
            handler: function (direction) {
                var id = this.element.id;
                if (direction == 'up') {
                    $('.chapter-navigation .chapter[href="#' + id + '"]').addClass("active").siblings().removeClass("active");
                }
            },
            offset: function () { return -this.element.clientHeight + 100; }
        });

        new Waypoint({
            element: document.getElementById(href.replace("#", "")),
            handler: function (direction) {
                var id = this.element.id;
                $('.chapter-navigation .chapter[href="#' + id + '"]').removeClass("active");
            },
            offset: '100%'
        });

    });




    document.querySelectorAll('.faq-question').forEach(anchor => {
        anchor.addEventListener('click', function (e) {
            e.preventDefault();

            var yOffset = -80;
            var element = document.getElementById(this.getAttribute('href').replace('#', ''));
            var y = element.getBoundingClientRect().top + window.pageYOffset + yOffset;

            window.scrollTo({ top: y, behavior: 'smooth' });

            //document.querySelector(this.getAttribute('href')).scrollIntoView({
            //    alignToTop: true,
            //    behavior: 'smooth'
            //});
        });
    });
    $('.accordion-item-description').on("click", function (e) {
        e.stopPropagation();
    });

    // Energy private toggler
    $(".grant-listing-toggler").on("click", function () {
        $(".grant-listing-heading").toggle();
    });

    $(".grant-form-criteria-toggler").on("click", function () {
        $(".grant-form-criteria-description").toggle();
    });

    $(".js-toggle").on("click", function () {
        $(this).toggleClass("toggled");
        $($(this).data("toggle")).toggle();
    });

    $(".open-section").click(function () {
        var dataid = "#" + $(this).attr("data-showid");
        $(dataid).removeClass("hidden");
        if ($(this).hasClass("hide-on-open")) {
            $(this).hide();
        }
    });

    if ($('.contact-page').length > 0) {
        var $divs = $(".contact");
        var alphabeticallyOrderedDivs = $divs.sort(function (a, b) {
            var nameA = $(a).find(".contact-name").text();
            var nameB = $(b).find(".contact-name").text();

            var lastNameA = nameA.split(" ")[nameA.split(" ").length - 1];
            var lastNameB = nameB.split(" ")[nameB.split(" ").length - 1];

            if (lastNameA < lastNameB) return -1;
            if (lastNameA > lastNameB) return 1;
            return 0;
        });
        $(".contact-page .items").html(alphabeticallyOrderedDivs);
        $('.contact-page .items').removeClass("hidden");

    }

    // Collapse
    $('.toggle-collapse').on("click", function (e) {
        e.preventDefault();
        $(this).toggleClass("active");
        var target = $(this).data("target");

        $(target).toggle();
    });

    $.ajaxSetup({
        cache: false
    });

    if ($("form.contact-form").length) {

        jQuery.validator.addMethod("validPhone", function (value, element) {
            return (value.length > 10 && value.indexOf("+") !== -1);
        }, "Telefonnummer må være på et gyldig format (+47XXXXXXXX)");

        jQuery.validator.methods.date = function (value, element) {
            return this.optional(element) || parseDate(value) !== null;
        };

        // set the correct datetime format based on the culture
        //$('[data-toggle="datepicker"]').datepicker({
        //    language: 'nb-NO',
        //    //format: Globalize.culture().calendar.patterns.d,
        //    autoHide: true
        //});

        $('[data-toggle="datepicker"]').flatpickr({
            locale: 'no',
            enableTime: true,
            dateFormat: "Y-m-d H:i"
        });

        $('form.contact-form').each(function () {


            var form = this;
            $(this).submit(function (e) {
                e.preventDefault();

                var $form = $(this);
                var formData = $form.serialize();

                var isAdvisorForm = $form.hasClass("advisor-form");

                if (isAdvisorForm) {
                    formData = new FormData(form);
                }

                var validGDPR = true;

                var contentType = "application/x-www-form-urlencoded";
                var processData = true;

                if (isAdvisorForm) {
                    contentType = false;
                    processData = false;
                }


                if ($("#GDPR_TERMS_CONFIRMED").length > 0) {
                    if (!document.getElementById('GDPR_TERMS_CONFIRMED').checked) {
                        e.preventDefault();
                        $("#gdprspan").addClass("failed");
                        $("#GDPR_TERMS_CONFIRMED").next().css("border-color", "red");
                        validGDPR = false;
                    }
                }

                if ($form.valid() && validGDPR) {

                    $(".btn-submit").prop('disabled', true);
                    $.ajax({
                        type: 'POST',
                        url: $form.attr('action'),
                        processData: processData,
                        contentType: contentType,
                        cache: false,
                        data: formData,
                        dataType: 'json',
                        statusCode: {
                            500: function () {
                                displayFormError($form, "");
                            },
                            404: function () {
                                displayFormError($form, "");
                            }
                        }
                    })
                        .done(function (response) {
                            if (response && response.success) {
                                if (response.redirectTo) {
                                    window.location.href = response.redirectTo;

                                } else {
                                    if (response.Confirmation) {
                                        $('.form-receipt').html(response.Confirmation);
                                    }
                                    $form.addClass("hidden");
                                    $('.form-receipt').removeClass("hidden");

                                    if (response.newuser) {
                                        $('.newuser').removeClass("hidden");
                                    } else {
                                        $('.existinguser').removeClass("hidden");
                                    }
                                }
                            } else if (response.advisorExists) {
                                $(".btn-submit").prop('disabled', false);
                                if ($('.form-status.error').length === 0) {
                                    $(".btn-submit").parent().append("<div class='form-status error'><h3>Feil</h3><p>Denne e-postadressen er allerede i bruk i vårt register. Det er ikke mulig å registrere samme adresse to ganger.</p></div>");
                                } else {
                                    $('.form-status.error').html("<h3>Feil</h3><p>Denne e-postadressen er allerede i bruk i vårt register. Det er ikke mulig å registrere samme adresse to ganger.</p>");
                                }
                            } else {
                                displayFormError($form, response.message);
                            }


                        })
                        .fail(function (response) {
                            displayFormError($form, "");
                        });
                }
            })
                .validate({
                    rules: {
                        C457: {
                            validPhone: true
                        }
                    }
                });
        });

    }

    $(".toggle-login").on("click", function (e) {
        e.preventDefault();
        $('.login-box').toggleClass("hidden");
    });
    $(".toggle-login-mobile").on("click", function (e) {
        e.preventDefault();
        $(this).parent().find("ul").click();
    });


    if ($("form.postform").length > 0) {
        // set the correct datetime format based on the culture
        $('[data-toggle="datepicker"]').datepicker({ format: Globalize.culture().calendar.patterns.d });
        $('form.postform').each(function () {
            $(this).submit(function (e) {
                e.preventDefault();

                var $form = $(this);
                if ($form.valid()) {
                    $(".btn-submit").prop('disabled', true);
                    $.ajax({
                        type: 'POST',
                        url: $form.attr('action'),
                        data: $form.serialize(),
                        dataType: 'json'
                    })
                        .done(function (response) {
                            if (response && response.success) {
                                console.log(response);
                                var postobj = JSON.parse(response.post);
                                $('[data-guid="' + postobj.GUID + '"]').addClass("booked").removeClass("selected");
                                if (response.isbooked) {
                                    $(".cantbook").show();
                                } else {
                                    $(".gdprinfo").addClass("hidden");
                                    $(".personinfo").addClass("hidden").removeClass("personinfo");
                                    $('.form-receipt').removeClass("hidden");
                                    $(".cantbook").hide();
                                    $("#sendinn").hide();
                                }
                            }
                        })
                        .fail(function (response) {
                            $(".btn-submit").prop('disabled', false);
                            $("<div class='form-status'><h3>Feil</h3><p>Noe gikk galt under innsendingen.</p></div>").insertAfter("#submit");
                        });
                }
            })
                .validate();
        });

    }

    if ($("#enova-conference").length) {

        var player, iframe;

        // init player
        function onYouTubeIframeAPIReady() {
            player = new YT.Player('player', {
                height: '200',
                width: '300',
                videoId: 'dQw4w9WgXcQ',
                events: {
                    'onReady': onPlayerReady
                }
            });
        }

        // when ready, wait for clicks
        function onPlayerReady(event) {
            var player = event.target;
            iframe = $('#player');
            setupListener();
        }

        function setupListener() {
            $('button').addEventListener('click', playFullscreen);
        }

        function playFullscreen() {
            player.playVideo();//won't work on mobile

            var requestFullScreen = iframe.requestFullScreen || iframe.mozRequestFullScreen || iframe.webkitRequestFullScreen;
            if (requestFullScreen) {
                requestFullScreen.bind(iframe)();
            }
        }
    }

    $("form").submit(function (e) {

        if ($("#GDPR_TERMS_CONFIRMED").length > 0) {
            if (!document.getElementById('GDPR_TERMS_CONFIRMED').checked) {
                e.preventDefault();
                $("#gdprspan").addClass("failed");
                $("#GDPR_TERMS_CONFIRMED").next().css("border-color", "red");
            }

        }
    });

    $("#GDPR_TERMS_CONFIRMED").click(function () {
        $("#gdprspan").removeClass("failed");
        $("#GDPR_TERMS_CONFIRMED").next().css("border-color", "");
    });

    if ($(".js-position").length > 0) {
        imgheight = $(".image-map-background").height();
        var positions = [];
        $(".js-position").each(function () {
            var ttop = $(this).position().top;
            var tbottom = ttop + 56;
            var tleft = $(this).position().left;
            var tright = tleft + 56;
            var obj = { "top": ttop, "bottom": tbottom, "left": tleft, "right": tright };
            positions.push(obj);
        });
        //console.log(positions);
        $(".js-position").each(function () {
            var top = $(this).position().top;
            var imgmapinfobox = $(this).find(".image-map-infobox.noslickmode");
            var height = imgmapinfobox.height() + 70;
            var bottom = top + height;


            if (bottom > imgheight) {
                var infotop = (imgheight - bottom - 1);
                imgmapinfobox.css("top", infotop);
            }

            var left = $(this).position().left + 64;
            var right = left + 300;

            var oe = _.find(positions, function (o) { return !((bottom < o.top) || (top > o.bottom) || (right < o.left) || (left > o.right)) });
            var maxmoves = 0;
            while (oe && maxmoves < 10) {

                if (bottom > oe.top) {

                    //console.log("top: " + top + ", bottom: " + bottom + ", left: " + left + ", right: " + right);

                    //console.log("oetop: " + oe.top + ", oebottom: " + oe.bottom + ", oeleft: " + oe.left + ", oeright: " + oe.right);
                    var diff = oe.top - bottom - 2;
                    bottom = bottom + diff;

                    top = top + diff;
                    imgmapinfobox.css("top", diff);

                    //_.forEach(positions, function (o) {

                    //    //console.log(bottom + " < " + o.top + " || " + top + " > " + o.bottom + " || " + right + " < " + o.right + " || " + left + " > " + o.right);
                    //});

                    oe = _.find(positions, function (o) { return !((bottom < o.top) || (top > o.bottom) || (right < o.left) || (left > o.right)) });

                }

                if (oe) {
                    if (oe.right > left) {
                        var diff = oe.right - left + 2;
                        left = left + diff;
                        right = right + diff;
                        imgmapinfobox.css("left", diff);
                        oe = _.find(positions, function (o) { return !((bottom < o.top) || (top > o.bottom) || (right < o.left) || (left > o.right)) });
                    }

                }





                maxmoves++;
            }

            //$(".js-position").each(function () {

            //    if (!((bottom < ttop) || (top > tbottom) || (right < tleft) || (left > tright))) {
            //        if (ttop < bottom) {
            //            var diff = ttop - bottom - 1;
            //            imgmapinfobox.css("top", diff);

            //        }

            //    }

            //});



        });
    }


    $(".slick-track").attr("aria-label", "Bildegalleri med mulighet for informasjon");

});

function parseDate(value) {
    var date = value.split(".");
    var d = parseInt(date[0], 10),
        m = parseInt(date[1], 10),
        y = parseInt(date[2], 10);
    return new Date(y, m - 1, d);
}

function displayFormError(formContainer, message) {

    var errorHtml = "<div class='form-status'><h3>Feil ved innsending</h3><p>Noe gikk galt under innsendingen av skjemaet.</div>";
    if (formContainer.hasClass("motimate-form")) {
        if (message !== "") {
            errorHtml = "<div class='form-status'>" + message + "</div>";
        } else {
            errorHtml = "<div class='form-status'><h3>Feil ved registrering</h3><p>Noe gikk galt under innsendingen av skjemaet. Dersom du allerede er registrert kan du logge inn her. <a style=\"text-decoration:underline;\" href=\"https://enovakunnskap.web.motimateapp.com/\">Innlogging Motimate</a></p></div>";
        }
    }

    if (formContainer.hasClass("advisor-form")) {
        $(".btn-submit").prop('disabled', false);
        if ($('.form-status.error').length === 0) {
            $(".btn-submit").parent().append("<div class='form-status error'><h3>Feil</h3><p>Noe gikk galt under innsendingen.</p></div>");
        }
    } else {
        if (!$('.form-status').length) {
            $(errorHtml).insertAfter(".btn-submit");
        }
        $(".btn-submit").prop('disabled', false);
    }

}

$(document).ready(function () {
    // Gallery
    //$("#lightgallery").lightGallery({
    //    thumbnail: true
    //});
    window.lightGallery(document.getElementById("lightgallery"));

    $("body").on("click", ".open-chat", function (e) {
        e.preventDefault();
        openChat();
    });

    if ($("#adminposttable").length > 0) {


        var postcount = $("#adminposttable").data("count");
        var newcount = postcount;
        var urlchk = "/form/countposts/?id=" + $("#adminposttable").data("form-id");


        setInterval(function () {

            $.get(urlchk, function (data) {
                newcount = data;
            });


            if (postcount != newcount) {
                location.reload();

            }
        }, 7000);
    }


});

function openChat() {
    window.open("https://login.edialog24.com/chattemplate/enova_2017/index.html", "_blank", "width=400, height=600, status=0, scrollbars=0, titlebar=0, resizable=0");
}

function showPhoneNumbers() {
    var element = document.getElementById("open-the-box");
    var outlineShowPhone = document.getElementById("togglePhone");
    element.classList.toggle("showNumbers");
    outlineShowPhone.classList.toggle("outline");
};
var initialState = [];
var activeNavParent = null;

var currentId = 1;
var currentParent = 0;
var currentLevel = 2;
var currentMenuHasChildren=false;
var parentMenuHasChildren = true;

$(document).ready(function () {
    setopenmenu();
    initialState = { url: location.pathname, title: document.title };
    initMainMenu();
    initMenuControls();
});

function setopenmenu() {
    currentId = $("#enovMenu").data("menu-show-id");
    if (currentId == 3) {
        $(".submenu.privat").addClass("active");
        currentMenuHasChildren = true;
    }
    if (currentId == 4) {
        $(".submenu.bedrift").addClass("active");
        currentMenuHasChildren = true;
    }

    var activeelement = $('[data-id="' + currentId + '"]');
    if (activeelement.length > 0) {
        currentParent = activeelement.data("parent");
        currentLevel = activeelement.data("level");
        if ($('[data-parent="' + currentId + '"]').length > 0) {
            currentMenuHasChildren = true;
        }
        activeelement.find("a").addClass("active selected");
        activeelement.find("button").addClass("active");
        activeelement.closest(".submenu").addClass("active");
        pid = currentParent;
        for (i = currentLevel; i > 3; i--) {
            $('[data-id="' + pid + '"]').find("a").addClass("active");
            $('[data-id="' + pid + '"]').find("button").addClass("active");
            pid = $('[data-id="' + pid + '"]').data("parent");
        }

        if (currentMenuHasChildren) {
            $('[data-parent="' + currentId + '"]').removeClass("hidden");
        } else {
            $('[data-parent="' + currentParent + '"]').removeClass("hidden");
        }
    }
}

function initMenuControls() {
    var body = $('body');
    var navBar = $(".navbar");
    var navBarToggler = $(".navbar-toggler");
    var searchToggler = $(".search-toggler");
    var searchInput = $(".navbar .search-input input");

    activeNavParent = currentParent;

    if (!currentMenuHasChildren) {
        activeNavParent = $(".navbar-menu li[data-id='" + currentParent + "']").data("parent");
    }

    navBarToggler.on("click", function () {
        toggleMenu();
    });

    searchToggler.on("click", function () {
        if (!navBar.hasClass("open")) {
            toggleMenu();
        };

        searchInput.focus();
    });


    function toggleMenu() {
        navBar.toggleClass("open");
        navBarToggler.toggleClass("alternated");
        body.toggleClass("no-scroll");
    }

    function hideMenu() {
        navBar.removeClass("open");
        navBarToggler.removeClass("alternated");
        body.removeClass("no-scroll");
    }

    $('.navbar-menu-back a').on("click", function (e) {
        e.preventDefault();
        back();
        toggleGlobalMenu();
    });

    $('.main-menu .navbar-submenu button').on("click", function (e) {
        e.preventDefault();
        expandLevel($(this));
    });

    $('.global-menu .navbar-submenu button').on("click", function (e) {
        e.preventDefault();
        expandLevel($(this));
    });

    $('.navbar  .navbar-tabs:not(.navbar-contact) > .navbar-tab').on("click", function (e) {
        e.preventDefault();

        if (!$(this).hasClass("active")) {
            loadMenu(this);

            var href = $(this).attr("href");
            var title = $(this).attr("data-title");
            pushState(href, title)
            loadContent(href, title);

            $('.navbar-menu li a').removeClass("active");
            $('.navbar-menu li button').removeClass("active");
        }
    });
    $(document).on("click", function (e) {
        hideMenu();
    });
    $('.navbar-toggler, .navbar, .search-toggler').on("click", function (e) {
        e.stopPropagation();
    });

    window.addEventListener("popstate", function (e) {
        var title = "";
        if (e.state != null) {
            title = e.state.title;
        } else {
            title = initialState.title;
        }
        loadContent(location.pathname, title);
    });

}

function back(container) {
    var prevLevel = currentLevel - 1;
    
    if (prevLevel < 4) {
        $(".global-menu").show();
    }
    var container = $('.navbar-menu');
    var elementsToShow = container.find("li[data-level='" + prevLevel + "'][data-parent='" + activeNavParent + "']");
    container.find("li[data-level='" + currentLevel + "']").addClass("hidden");
    elementsToShow.removeClass("hidden");

    if (prevLevel == 3) {
        $('.navbar-menu-back').hide();
        $('.navbar-menu').find("li[data-level='" + prevLevel + "']").removeClass("hidden");
    }

    currentLevel = prevLevel;

    var parent = elementsToShow.attr("data-parent");
    activeNavParent = container.find("li[data-id='" + parent + "']").data("parent");
}

function expandLevel(element) {
    if (currentLevel == 2) {
        currentLevel = currentLevel + 2;
    } else {
        currentLevel++;
    }
    
    
    if (element.closest(".global-menu").length > 0) {
        $(".global-menu").show();
    } else {
        $(".global-menu").hide();
    }
    var menuId = element.parent().attr("data-id");
    var parentId = element.parent().attr("data-parent");
    activeNavParent = parentId;

    var elementsToShow = $(".navbar-menu li[data-parent='" + menuId + "']");

    $('.navbar-menu li').addClass("hidden");
    elementsToShow.removeClass("hidden");
    $('.navbar-menu-back').show();
}

function initMainMenu() {
    $('.navbar-menu li').addClass("hidden");
    $('.navbar-menu-back').hide();

    if ((currentLevel > 2 && currentMenuHasChildren) || currentLevel > 3) {
        $('.navbar-menu-back').show();
    }

    if (!parentMenuHasChildren && currentLevel != 2) {
        $(".navbar-menu li[data-id='" + currentParent + "']").removeClass("hidden");
        currentLevel--;
    }

    if (currentMenuHasChildren || currentLevel == 2) {
        $(".navbar-menu li[data-parent='" + currentId + "']").removeClass("hidden");
        currentLevel++;
    }
    else {
        $(".navbar-menu li[data-parent='" + currentParent + "']").removeClass("hidden");
    }

    toggleGlobalMenu();
}

function toggleGlobalMenu() {
    if (currentLevel == 3) {
        
        $('.global-menu li').addClass("hidden");
        $('.global-menu li[data-level=3]').removeClass("hidden");
    }
}


function loadMenu(source) {
    $('.navbar-tab').removeClass("active");
    $(source).addClass("active");

    var target = $(source).attr("data-target");
    $('.submenu').hide();
    $('.submenu.' + target).show();

    currentLevel = 2;
    currentPageHasChildren = true;
    if (target == 'bedrift') {
        currentId = 4;
    } else {
        currentId = 3;
    }

    initMainMenu();
}

function pushState(href, title) {
    var stateObj = { url: href, title: title };
    window.history.pushState(stateObj, title, href);
}

function loadContent(href, title) {
    $('#main-content').load(href + " #main-content > *", function () {
        $('.header-brand > a').attr("href", href);
        $('.footer-brand > a').attr("href", href);
        document.title = title;

        var contactHref = $('a.call').attr("href");

        if (href == "/privat/" || href == "/bedrift/") {
            $('.navbar-contact a.navbar-contact-bg').attr("href", contactHref);
        }


        //var videoId = $('#front-header').data("video");
        //if (videoId != null && videoId != "") {
        //}
            //initVideoIframe(videoId);
            runPlayer();
        


    });
};
$(document).ready(function () {

    $('.show-email').each(function () {
        var element = $(this);
        var email = element.data("link");
        
        element.on("click", function (e) {
            e.preventDefault();
            if (!email.includes("@")) {
                email = email + "@enova.no";
            }

            var html = "<a href='mailto:" + email + "'>" + email + "</a>";
            $(this).replaceWith(html);
        });
    });

    hideUnusedPublicationFilters();

    var queryString = getQueryString();

    var companySelectFilter = $('select[name="company"]');
    var categorySelectFilter = $('.filter select[name="category"]');

    if (companySelectFilter.length > 0) {
        companySelectFilter.find('option:not(.default)').addClass("hidden");

        $('.item').each(function () {
            var itemCompany = $(this).data("company").toString().split(",");
            if (itemCompany !== "") {
                for (var i = 0; i < itemCompany.length; i++) {
                    companySelectFilter.find('option[value="' + itemCompany[i] + '"]').removeClass("hidden");
                }
            }
        });
    }

    categorySelectFilter.on("change", function () {
        removeFromQueryString("company");
        if (companySelectFilter.length > 0) {
            companySelectFilter.val("-1");
        }


        var category = this.value;
        if (category > 0) {
            setQueryString("bransje", category);
            $('.section-inspiration-articles').removeClass("show-featured");

            $(".item").addClass("hidden");
            $(".item").filter(function () {
                var tag = $(this).attr("data-category");
                if (category == tag) {
                    $(this).removeClass("hidden");
                }
            });

            if (companySelectFilter.length > 0) {
                companySelectFilter.find('option:not(.default)').hide();

                visibleCompanyOptions = 0;

                companySelectFilter.find('option:not(.hidden)').each(function () {
                    var company = $(this).val();

                    var matchingArticleCount = $('.item[data-company*="' + company + '"][data-category="' + category + '"]').length;

                    if (matchingArticleCount > 0) {
                        visibleCompanyOptions++;
                        $(this).show();
                    }
                });


                if (visibleCompanyOptions === 0) {
                    companySelectFilter.parent().hide();
                } else {
                    companySelectFilter.parent().show();
                }
            }

        } else {
            $('.section-inspiration-articles').addClass("show-featured");
            removeFromQueryString("bransje");
            companySelectFilter.parent().show();
            companySelectFilter.find('option:not(.hidden)').show();
            $('.item').removeClass("hidden");
        }
    });

    companySelectFilter.on("change", function () {
        var company = this.value;
        if (company != "" && company != "-1") {
            setQueryString("company", company);
            $('.section-inspiration-articles').removeClass("show-featured");

            $(".item").addClass("hidden");

            $(".item").filter(function () {
                var itemCompany = $(this).data("company").toString().split(",");
                if (isFilterMatch(company, itemCompany)) {
                    $(this).removeClass("hidden");
                }

            });
        } else {
            removeFromQueryString("company");
            $('.section-inspiration-articles').addClass("show-featured");

            var selectedCategory = categorySelectFilter.val();
            if (selectedCategory > 0) {
                $('.item[data-category="' + selectedCategory + '"]').removeClass("hidden");
            }
            else {
                $('.item').removeClass("hidden");
            }


        }
    });


    if (queryString.bransje !== undefined) {
        var bransje = queryString.bransje;
        categorySelectFilter.val(bransje).change();
        $('.section-inspiration-articles').removeClass("show-featured");
    }

    if (queryString.company !== undefined) {
        var company = queryString.company;
        companySelectFilter.val(company).change();
        $('.section-inspiration-articles').removeClass("show-featured");
    }


    if ($(".filter.search-input input").length > 0) {

        var next = 20;

        $(".showmore").click(function () {
            next += 20;

            $("table tr:nth-child(-n+" + next + ")").show();
            //$("table tr:lt(" + next + ")").show();
        });

        if ($(".showmore").length > 0) {
            $("a.sort").click(function () {
                next = 20;
                $("table tr").css("display", "");
            });
        }


        $(".filter.search-input input").on('keyup', function () {
            var search = $(this).val().toLowerCase();
            if ($(".showmore").length > 0) {
                next = 20;
                $("table tr").css("display", "");
            }
            $('.item').removeClass("hidden").not(function () {
                return ($(this).find('.item-title').text().toLowerCase().indexOf(search) != -1);
            }).addClass("hidden");
        });

        $(".contact-page .filter.search-input input").on('keyup', function () {
            var search = $(this).val().toLowerCase();
            $('.contact').removeClass("hidden").not(function () {
                var name = $(this).find(".contact-name");
                var role = $(this).find(".contact-role");
                return (searchMatches(name, search) || searchMatches(role, search));
            }).addClass("hidden");

        });

    }

    if ($(".story-filter.search-input input").length > 0) {

        $("#inspiration-page .story-filter.search-input input").on('keyup', function () {
            var search = $(this).val().toLowerCase();

            if (search.length > 0) {
                $('.section-inspiration-articles').removeClass("show-featured");
            } else {
                $('.section-inspiration-articles').addClass("show-featured");
            }

            var elementsToSearch = $('.item');

            if (categorySelectFilter.length > 0) {
                var selectedCategory = categorySelectFilter.val();

                if (selectedCategory > 0) {
                    elementsToSearch = $('.item[data-category="' + selectedCategory + '"]');
                }
            }

            elementsToSearch.removeClass("hidden").not(function () {
                var titleMatch = ($(this).find('h3').text().toLowerCase().indexOf(search) != -1);
                var ingressMatch = ($(this).data('ingress').toLowerCase().indexOf(search) != -1);
                var bedriftMatch = ($(this).data('company').toLowerCase().indexOf(search) != -1);
                var categoryNameMatch = ($(this).data('category-name').toLowerCase().indexOf(search) != -1);

                return titleMatch || ingressMatch || bedriftMatch || categoryNameMatch;
            }).addClass("hidden");
        });

    }

    $('.location-filter select').on("change", function () {
        var location = this.value;
        if (location != "") {
            $('.item').addClass("hidden");
            $(".item[data-location='" + location + "']").removeClass("hidden");
        } else {
            $('.item').removeClass("hidden");
        }
    });

    $('.date-filter select').on("change", function () {
        var category = this.value;
        if (category >= 0) {
            $('.item').addClass("hidden");
            $(".item[data-category*='" + category + "']").removeClass("hidden");
        } else {
            $('.item').removeClass("hidden");
        }
    });

    $('.kompetanse-filter select').on("change", function () {
        applyAdvisorFilter();
    });

    $('.advisor-open').on("click", function () {
        $(".contact").removeClass("hidden");
        $(this).parent().addClass("hidden");
    });


    $(".index-energies .checkbox").on("click", function () {
        filterProducts();
    });

    filterContacts();


    $(".index-energies-private .radio").on("click", function () {
        var value = $(this).find("input").val();

        if (value == 'all') {
            $("#with_grant").show();
            $("#without_grant").show();
            $("#transport_with_grant").show();
            $("#transport_without_grant").show();
        } else {
            $("#with_grant").hide();
            $("#without_grant").hide();
            $("#transport_with_grant").hide();
            $("#transport_without_grant").hide();
            $("#" + value).show();
        }
    });

    if ($('.index-courses').length) {
        $('.sted-select select').on("change", function () {
            applyCourseFilter();
        });
        $('.date-filter input').on("change", function () {
            applyCourseFilter();
        });
    }
});

function getQueryString() {
    var URIParsed = URI.parse(location.href);
    return URI.parseQuery(URIParsed.query);
}
function setQueryString(key, value) {
    var url = location.href;
    var newUrl = URI(url).setQuery(key, value);
    history.replaceState(null, null, newUrl);
}

function addToQueryString(key, value) {
    var url = location.href;
    var newUrl = URI(url).addSearch(key, value);
    history.replaceState(null, null, newUrl);
}

function removeSpecificValueFromQueryString(key, value) {
    var url = location.href;
    var newUrl = URI(url).removeSearch(key, value);
    history.replaceState(null, null, newUrl);
}

function removeFromQueryString(key) {
    var url = location.href;
    var newUrl = URI(url).removeSearch(key);
    history.replaceState(null, null, newUrl);
}


function applyCourseFilter() {
    var place = $('#sted option:selected').val();
    var dateFrom = $('#from').val();
    var dateTo = $('#to').val();

    var count = 0;

    $(".course").filter(function () {
        var coursePlace = $(this).data("place");
        var courseFrom = $(this).data("from");
        var courseTo = $(this).data("to");
        var hide = true;

        $('.course-body').removeClass("hidden");

        if (place === undefined || place === "all" || place === coursePlace) {
            hide = !inDateRange(dateFrom, courseFrom, dateTo, courseTo);
        }

        console.log("hide", hide);

        if (hide) {
            $(this).addClass("hidden");
        } else {
            $(this).removeClass("hidden");
        }
    });

    count = $(".course:not(.hidden)").length;
    $('.course-count-value').text(count);
}

function inDateRange(dateFromStr, courseFromStr, dateToStr, courseToStr) {
    var dateFrom = Date.parse(dateFromStr);
    var dateTo = Date.parse(dateToStr);
    var courseFrom = Date.parse(courseFromStr);
    var courseTo = Date.parse(courseToStr);

    if (isNaN(dateFrom) && isNaN(dateTo)) {
        return true;
    } else if (dateFrom > dateTo) {
        return false;
    }
    else if (!isNaN(dateFrom) && !isNaN(dateTo)) {
        return dateFrom <= courseTo && dateTo >= courseFrom;
    } else if (!isNaN(dateFrom)) {
        return dateFrom <= courseTo;
    }
    else {
        return dateTo >= courseFrom;
    }
}

function applyAdvisorFilter() {
    var competence = $('.kompetanse-filter option:selected').val();
    var category = [];

    $('.checkbox').each(function () {
        if ($(this).find("input").is(":checked")) {
            category.push($(this).data("category") + "");
        }
    });

    $(".item").filter(function () {
        var itemCategory = $(this).attr("data-category");
        var itemCompetence = $(this).attr("data-competence").split(",");
        var hide = true;

        if (category.length === 0 && competence === "") {
            hide = false;
        } else if (category.length > 0 && competence !== "") {
            if (isFilterMatch(itemCategory, category) && isFilterMatch(competence, itemCompetence)) {
                hide = false;
            }
        }
        else if (category.length > 0 && isFilterMatch(itemCategory, category)) {
            hide = false;
        } else if (competence !== "" && isFilterMatch(competence, itemCompetence)) {
            hide = false;
        }

        if (hide) {
            $(this).addClass("hidden");
        } else {
            $(this).removeClass("hidden");
        }
    });

    $(".hide-on-open").addClass("hidden");
}

function isFilterMatch(element, array) {

    if (element.indexOf(",") !== -1) {
        var elements = element.split(",");
        return findCommonElements3(elements, array);
    }

    return $.inArray(element, array) !== -1 || element === array;
}
function findCommonElements3(arr1, arr2) {
    return arr1.some(item => arr2.includes(item))
}

function addGrayToOddAdvisors() {
    $('tr.contact.odd').removeClass("odd");
    $('tr.contact:not(.hidden)').filter(":odd").addClass("odd");
}

function searchMatches(element, search) {
    return (element.text().toLowerCase().indexOf(search) != -1)
}

function hideUnusedPublicationFilters() {
    $('.index-publications .filter select option').each(function () {
        var category = this.value;
        if ($(".item[data-category='" + category + "']").length == 0) {

            $(this).remove();

        }
    });
}

function filterContacts() {
    $('.contact-page .checkbox').on("click", function () {
        var contactsInCategory = [];

        if ($('.kompetanse-filter').length > 0) {
            applyAdvisorFilter();
        } else {
            $('.contact-page .checkbox').each(function () {
                var category = $(this).attr("data-category");

                var checkbox = $(this).find("input");

                if (checkbox.is(":checked")) {
                    contactsInCategory.push($(".contact[data-category='" + category + "']"));
                }

            });

            if (contactsInCategory.length > 0) {
                $('.contact').addClass("hidden");
                contactsInCategory.forEach(function (element) {
                    $(element).removeClass("hidden");
                });
            } else {
                $('.contact').removeClass("hidden");
            }
        }
    });
}

function filterProducts() {
    var filteredProducts = [];
    var filteredTypes = [];

    var innovationProducts = $(".item[data-category='79']");
    var productsWithInnovation = [4, 21, 75, 76];

    $(".index-energies .type-filter input").each(function () {
        var type = $(this).parent().data("type");
        var checked = $(this).is(":checked");

        if (checked) {
            filteredTypes.push(type);
        }
    });

    $(".item").addClass("hidden");
    if ($(".index-energies .category-filter input:checked").length == 0) {
        if (filteredTypes.length == 1) {
            $(".item[data-type='" + filteredTypes[0] + "']").removeClass("hidden");
        } else {
            $(".item").removeClass("hidden");
        }
    } else {



        $(".index-energies .category-filter input").each(function () {
            var category = $(this).parent().parent().data("category");
            var checked = $(this).is(":checked");


            var products = $(".item[data-category='" + category + "']");

            if (filteredTypes.length == 1) {
                products = $(".item[data-category='" + category + "'][data-type='" + filteredTypes[0] + "']");
            }

            if (checked) {
                filteredProducts.push(products);

                if (productsWithInnovation.includes(category)) {
                    filteredProducts.push(innovationProducts);
                }

                if (category == "79") {
                    filteredProducts.push($(".item[data-techprogram='1']"));
                }
            }
        });

        filteredProducts.forEach(function (product) {
            product.removeClass("hidden");
        });
    }

    if ($('.marketing-programs .item:not(.hidden)').length == 0) {
        $('.marketing-programs').addClass("hidden");
    } else {
        $('.marketing-programs').removeClass("hidden");
    }

    if ($('.technology-programs .item:not(.hidden)').length == 0) {
        $('.technology-programs').addClass("hidden");
    } else {
        $('.technology-programs').removeClass("hidden");
    }
};
Number.prototype.formatMoney = function (c, d, t) {
    var n = this,
        c = isNaN(c = Math.abs(c)) ? 2 : c,
        d = d == undefined ? "." : d,
        t = t == undefined ? "," : t,
        s = n < 0 ? "-" : "",
        i = String(parseInt(n = Math.abs(Number(n) || 0).toFixed(c))),
        j = (j = i.length) > 3 ? j % 3 : 0;
    return s + (j ? i.substr(0, j) + t : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + t) + (c ? d + Math.abs(n - i).toFixed(c).slice(2) : "");
};

var jsondata = "";
var takedata = 10;
var htmlstring = '<tr>';
htmlstring += '<td><span class="item-title">$SID</span></td>';
htmlstring += '<td><span class="item-title">$Prosjekttittel</span><span class="sub-title">$Program</span>$sid-link</td>';
htmlstring += '<td><span class="item-title">$Søker </span><span class="sub-title sub-title-bold">$Kommune $Fylke</span></td>';
htmlstring += '<td><span>$VedtattStøtte</span><span class="sub-title">Vedtatt: $VedtattDato</span></td>';
htmlstring += '<td><span class="single">$Energiresultat kWh</span><span class="spacer">&nbsp;</span> <span class="single">$Klimaresultat kg CO<sub>2</sub></span>&nbsp;</span> </td>';
htmlstring += '</tr>';

var totalGrants = 0;

var teklist = [{ SID: "16/7425", URL: "", Sector: "" }];

$(document).ready(function () {

    if (($("#tiltakvalue").length > 0 || $("#tiltakvalue_mynewsdesk").length > 0) && ($("#stottevalue").length > 0 || $("#stottevalue_mynewsdesk").length > 0)) {
        $.getJSON("/tilsagnJSON.ashx", function (data) {
            jsondata = data;

            var stottearray = _.map(data, 'VedtattStøtte')
            var sum = 0;

            $("#stotte").text(sum);
            $("#stotte_mynewsdesk").text(sum);

            _.each(stottearray, function (value) {
                var toNumber = parseInt(value);
                sum += toNumber;
            });

            var newNumGrants = data.length;
            var newVedtattStotte = LargeNumberFormat(sum, 2);


            if ($("#tiltakvalue").length > 0) {
                animateCount("tiltak", 0, newNumGrants, 0, 1);
                animateCount("stotte", vedtattStotte, newVedtattStotte, 2, 1);
            }

            if ($("#tiltakvalue_mynewsdesk").length > 0) {
                animateCount("tiltak_mynewsdesk", 0, newNumGrants, 0, 1);
                animateCount("stotte_mynewsdesk", vedtattStotte, newVedtattStotte, 2, 1);
            }
        });
    }

    if ($("#grants").length > 0) {
        $.getJSON("/tilsagnJSON.ashx", function (data) {

            var uniqueList = _.uniq(_.map(data, 'Fylke'));
            var lastval = "   ";

            var searchparam = getUrlParams("search");
            if (searchparam) {
                $(".search").val(searchparam);
            }


            _.each(_.sortBy(uniqueList), function (value, key) {
                var thisval = value.replace(/(\r\n|\n|\r)/gm, "");
                if (thisval != lastval && thisval != "") {
                    $("select[name='Fylke']").append('<option value="' + thisval + '">' + thisval + '</option>');
                }
                lastval = thisval;
            });
            var programs = [];

            _.each(data, function (value, key) {
                var program = value.StøtteProgam;
                if (program != null && program.length > 1) {
                    data[key].Program = program;
                    if (!_.includes(programs, program)) {
                        $("select[name='Program']").append('<option value="' + program + '">' + program + '</option>');
                        programs.push(program);
                    }
                }
            });

            $.getJSON('/tekportjson', function (tekdata) {
                teklist = tekdata;

                _.each(data, function (value, key) {
                    var findUrl = _.find(teklist, function (o) {
                        return o.SID == value.Sid;
                    });
                    if (findUrl) {
                        data[key].URL = findUrl.URL;
                    }
                });
            });
            

            addGrantsFilters();

            jsondata = _.filter(data, function (o) {               
                var prosjekttittel = o.Prosjekttittel;
                return prosjekttittel !== undefined && prosjekttittel.toLowerCase().indexOf("elvarebil") === -1;
            });

            jsondata = _.orderBy(jsondata, ['VedtattDato'], ['desc']);


            update_grants();

        });
    }

    if ($('.recent-commitments').length > 0) {
        var programJson = [];

        $.getJSON("/tilsagnJSON.ashx", function (data) {
            programJson = data;

            $('.recent-commitments').each(function () {
                var $this = $(this);
                var program = $this.attr("data-program");
                var result = filterByProgram(programJson, program);
                var numOfGrantsInList = 5;

                totalGrants = result.length;
                updateGrantCount();
                result = _.orderBy(result, ['VedtattDato'], ['desc']);
                result = _.take(result, numOfGrantsInList);

                _.each(result, function (value, key) {
                    var html = getHtmlForSideModule(value);
                    $this.find("ul").append(html);
                });

            });
        });

    }

    if ($('.section-grants-keynumbers').length > 0) {
        var json = [];

        $.getJSON("/tilsagnJSON.ashx", function (data) {
            json = data;
            updateGrantSums(json);
        });

    }
    $(".filter select").change(function () {
        if ($('#index-grants').length > 0) {
            $("#grants tbody").html("");
            //Update query string
            var prop = $(this)[0];
            if (prop.value != prop.name) {
                updateQueryStringParam(prop.name, prop.value);
            } else {
                removeParam(prop.name);
            }

            update_grants();
        }
    });

    $("#index-grants .search-input input.search").on('keyup', function (e) {
        if (e.which == 13) {
            $("#grants tbody").html("");
            update_grants();
        }
    });

    $("#index-grants .search-input button").click(function () {
        $("#grants tbody").html("");
        update_grants();
    });

    $("#index-grants a.read-more").click(function (e) {
        e.preventDefault();
        update_grants();
    });

    $("a.table-sort-grants").click(function (e) {
        takedata = $("#grants tbody tr").length;
        e.preventDefault();
        var sortby = $(this).data("sortby").split(",");
        var direction = [];
        for (s in sortby) {
            direction.push($(this).data("direction"));
        }

        if (sortby[0] === "VedtattStøtte" || sortby[0] === "Energiresultat") {
            if (sortby[0] === "VedtattStøtte") {
                jsondata = _.orderBy(jsondata, function (o) {
                    return parseInt(o.VedtattStøtte.replace(",-"));
                }, direction);
            } else {
                jsondata = _.orderBy(jsondata, function (o) {
                    return parseInt(o.Energiresultat.replace(" kWh"));
                }, direction);
            }
        } else if (sortby[0] === "Prosjekttittel") {
            jsondata = _.orderBy(jsondata, function (o) {
                return o.Prosjekttittel.trim();
            }, direction);
        } else {
            jsondata = _.orderBy(jsondata, sortby, direction);
        }

        $("#grants tbody").html("");
        update_grants();
        $(this).data('direction', $(this).data('direction') == 'asc' ? 'desc' : 'asc');
    });

    $('#export-grants-to-csv').on('click', function () {
        downloadGrantsCsv();
    });

});

function downloadGrantsCsv() {

    var headers = {
        Sid: "Sid",
        Prosjekttittel: "Prosjekttittel",
        Kommune: "Kommune",
        Energiresultat: "Energiresultat",
        Fylke: "Fylke",
        StøtteProgam: "Støtteprogram",
        StøtteProgamId: "StøtteProgramId",
        Søker: "Søker",
        VedtattDato: "VedtattDato",
        VedtattStøtte: "VedtattStøtte",
        Klimaresultat: "Klimaresultat",
    }

    var filetitle = 'Tilskuddsliste';

    $.getJSON('/tilsagnJSON.ashx', function (data) {
        data = _.filter(data, function (o) {
            var prosjekttittel = o.Prosjekttittel;
            return prosjekttittel !== undefined && prosjekttittel.toLowerCase().indexOf("elvarebil") === -1;
        });

        exportCSVFile(headers, data, filetitle);
    });
}

function addGrantsFilters() {
    $(".custom-select").each(function () {
        var filterid = $(this).data("filterid");
        var filtername = $(this).data("filtername");
        var fdatatype = $(this).data("type");

        selected = getUrlParams(filterid);
        if (selected != "") {
            $(this).find('select').val(selected);
        }

    });
}

function updateGrantCount() {
    if ($('#totalGrants').length > 0) {
        var countOptions = {
            useEasing: false,
            useGrouping: true,
            separator: '',
            decimal: '',
            prefix: '',
            suffix: ''
        };

        animateCountIfInViewport("totalGrants", 0, totalGrants, 0, 0.8, countOptions);
    }

}

$(window).bind('scroll touchmove', function (e) {
    if ($(('#totalGrants').length > 0)) {
        if ($('#totalGrants').text() == "0") {
            updateGrantCount();
        }
    }
});



var vedtattStotte = 0;
var numGrants = 0;
var energireduksjon = 0;
var klimareduksjon = 0;

function updateGrantSums(data) {
    var newNumGrants = data.length;
    animateCount("tiltak", numGrants, newNumGrants, 0, 1);
    numGrants = newNumGrants;

    var stottearray = _.map(data, 'VedtattStøtte')
    var sum = 0;
    $("#stotte").text(sum);
    _.each(stottearray, function (value) {
        var toNumber = parseInt(value);
        sum += toNumber;
    });

    var newVedtattStotte = LargeNumberFormat(sum, 2);
    animateCount("stotte", vedtattStotte, newVedtattStotte, 2, 1);
    vedtattStotte = newVedtattStotte;


    if ($('#klimareduksjon').length) {
        var resultatarr = _.map(data, 'Klimaresultat')
        sum = 0;
        _.each(resultatarr, function (value) {

            var toNumber = parseInt(value);
            sum += toNumber;
        });

        var newKlimareduksjon = MediumNumberFormat(sum, 2);
        animateCount("klimareduksjon", klimareduksjon, newKlimareduksjon, 2, 1);
        klimareduksjon = newKlimareduksjon;
    }

    if ($('#energireduksjon').length) {
        var resultatarr = _.map(data, 'Klimaresultat')
        sum = 0;
        _.each(resultatarr, function (value) {

            var toNumber = parseInt(value);
            sum += toNumber;
        });

        //var newEnergireduksjon = LargeNumberFormat(sum, 3);
        var newEnergireduksjon = MediumNumberFormat(sum, 3);
        animateCount("energireduksjon", energireduksjon, newEnergireduksjon, 3, 1);
        energireduksjon = newEnergireduksjon;
    }
}




function filterByProgram(grants, program) {
    program = program.toUpperCase();
    var grantByProgram = _.filter(grants, function (a) {
        if (a.StøtteProgamId != null) {
            return a.StøtteProgamId.toUpperCase() == program;
        } else {
            return false;
        }

    });
    return grantByProgram;
}

function update_grants() {
    var skip = $("#grants tbody tr").length;
    $(".loading-content").hide();
    var filter = {};
    $(".filter select").each(function () {
        var fname = $(this).attr("name");

        var fvalue = $(this).val();
        if (fname != fvalue) {
            filter[fname] = fvalue;
        }
    });

    //var result = _.filter(jsondata, function (o) { return o.Id != 17550; }); //Har tatt bort ett prosjekt pga ønske fra kunde.

    var result = jsondata;

    var search = $("input.search").val();
    if (search) {
        search = search.toLowerCase();
        result = _.filter(result, function (data) {
            if (data.Prosjekttittel != null && data.Søker != null && data.Sid != null) {
                if (_.includes(data.Prosjekttittel.toLowerCase(), search)
                    || _.includes(data.Søker.toLowerCase(), search)
                    || _.includes(data.Sid.toLowerCase(), search)
                )
                    return true;
            }
        });
        updateQueryStringParam("search", search);
    } else {
        removeParam("search");
    }


    if (!_.isEmpty(filter)) {

        result = _.filter(result, function (data) {
            return isDataInFilter(data, filter);
        });

    }
    //Kommentert ut linjen under, pga den gjør at "vis mer" ikke fungerer
    //$("#grants tbody").html("");
    _.each(_.take(_.slice(result, skip), takedata), function (value, key) {
        var html = getHtmlForList(value);
        $("#grants tbody").append(html);
    });

    takedata = 10;

    updateGrantSums(result);

    if (result.length <= takedata || result.length <= (skip + takedata)) {
        $('.read-more').hide();
    } else {
        $('.read-more').show();
    }
}

function getHtmlForList(value) {
    var html = htmlstring.replace("$Prosjekttittel", value.Prosjekttittel);
    html = html.replace("$Program", value.Program);
    html = html.replace("$Søker", value.Søker);
    html = html.replace("$Fylke", value.Fylke != "" ? " | " + value.Fylke : "");
    html = html.replace("$Kommune", value.Kommune);
    html = html.replace("$SID", value.Sid);

    html = html.replace("$VedtattStøtte", value.VedtattStøtte + ",-");

    var gdate = new Date(value.VedtattDato);
    var datestring = getDateString(gdate);
    html = html.replace("$VedtattDato", datestring);

    html = html.replace("$Energiresultat", value.Energiresultat);
    html = html.replace("$Klimaresultat", value.Klimaresultat);

    //SID-link
    var sidLink = "";
    if (value.URL) {
        sidLink = '<a class="readmore" href="' + value.URL + '">Les mer</a>';
    }
    html = html.replace("$sid-link", sidLink);


    return html;
}

function getDateString(date) {
    return ('0' + date.getDate()).slice(-2) + '/'
        + ('0' + (date.getMonth() + 1)).slice(-2) + '/'
        + date.getFullYear();
}

function getHtmlForSideModule(value) {

    var sideModuleGrantHtml = [];

    sideModuleGrantHtml.push("<li>");
    sideModuleGrantHtml.push("<h3 class=\"recipient\">$Søker</h3>");
    sideModuleGrantHtml.push("<div class=\"details\">");
    if (value.Energiresultat == 0) {
        sideModuleGrantHtml.push("<span style=\"display:none;\"></span>");
    }
    sideModuleGrantHtml.push("<span>Støtte: $VedtattStøtte</span>");
    if (value.Energiresultat > 0) {
        sideModuleGrantHtml.push("<span>Resultat: $Energiresultat kWh</span>");
    }
    sideModuleGrantHtml.push("<div>");
    sideModuleGrantHtml.push("<time>$VedtattDato</time>");
    sideModuleGrantHtml.push("</li>");

    var htmlString = sideModuleGrantHtml.join("");

    var html = htmlString.replace("$Prosjekttittel", value.Prosjekttittel);
    html = html.replace("$Program", value.Program);
    html = html.replace("$Søker", value.Søker);
    html = html.replace("$Fylke", value.Fylke);
    html = html.replace("$Kommune", value.Kommune);
    html = html.replace("$SID", value.Sid);


    html = html.replace("$VedtattStøtte", value.VedtattStøtte + ",-");

    var gdate = new Date(value.VedtattDato);
    var datestring = getDateString(gdate);
    html = html.replace("$VedtattDato", datestring);

    html = html.replace("$Energiresultat", value.Energiresultat);
    return html;
}

function isDataInFilter(data, filter) {
    var inFilter = true;
    for (var k in filter) {
        if (filter[k] != "" && data[k] != filter[k])
            inFilter = false;
    }

    return inFilter;
}

function LargeNumberFormat(labelValue, desimals) {
    var d = Math.pow(10, desimals);

    return Math.round((Math.abs(labelValue) / 1.0e+9) * d) / d;
}
function MediumNumberFormat(labelValue, desimals) {
    var d = Math.pow(10, desimals);

    return Math.round((Math.abs(labelValue) / 1.0e+6) * d) / d;
}



var updateQueryStringParam = function (key, value) {
    var baseUrl = [location.protocol, '//', location.host, location.pathname].join(''),
        urlQueryString = document.location.search,
        newParam = key + '=' + value,
        params = '?' + newParam;


    // If the "search" string exists, then build params from it
    if (urlQueryString) {
        keyRegex = new RegExp('([\?&])' + key + '[^&]*');

        // If param exists already, update it
        if (urlQueryString.match(keyRegex) !== null) {
            params = urlQueryString.replace(keyRegex, "$1" + newParam);
        } else { // Otherwise, add it to end of query string
            params = urlQueryString + '&' + newParam;
        }
    }
    window.history.replaceState({}, "", baseUrl + params);
};

function removeParam(key) {
    var baseUrl = [location.protocol, '//', location.host, location.pathname].join(''),
        sourceURL = document.location.search;
    var rtn = sourceURL.split("?")[0],
        param,
        params_arr = [],
        queryString = (sourceURL.indexOf("?") !== -1) ? sourceURL.split("?")[1] : "";
    if (queryString !== "") {
        params_arr = queryString.split("&");
        for (var i = params_arr.length - 1; i >= 0; i -= 1) {
            param = params_arr[i].split("=")[0];
            if (param === key) {
                params_arr.splice(i, 1);
            }
        }
        rtn = rtn + "?" + params_arr.join("&");
        if (rtn == "?")
            rtn = "";
    }

    window.history.replaceState({}, "", baseUrl + rtn);
}

function getUrlParams(prop) {
    var params = {};
    var search = decodeURIComponent(window.location.href.slice(window.location.href.indexOf('?') + 1));
    var definitions = search.split('&');

    definitions.forEach(function (val, key) {
        var parts = val.split('=', 2);
        params[parts[0]] = parts[1];
    });

    return (prop && prop in params) ? params[prop] : "";
};
$(document).ready(function () {

    $(".tablefilter").each(function () {
        var tfid = $(this).attr("id");
        var options = {
            valueNames: new Array()
        };
        $("#" + tfid + " th a").each(function () {
            options.valueNames.push($(this).data("sort"));
        });
        
        var tpList = new List(tfid, options);
        
    });


    //var options = {
    //    valueNames: ['contact-name', 'contactinfo', 'company']
    //};

    //var tpList = new List('advisors', options);



    

});;
var projectlist = [
    {
        "Vedtaksar": 2017,
        "Vedtaksdato": "2017-01-03",
        "SID": "16/7425",
        "Sektor": "Industri",
        "ProsjektTittel": "Energitiltak - Erstatte M25 A og B med BRM 3",
        "Program": "Støtte til energi- og klimatiltak i industrien",
        "Firma": "Benteler Aluminium Systems Norway AS",
        "Fylke": "Oppland",
        "Kommune": "Vestre Toten",
        "KontraktsfestetStotte": 650000,
        "Klimaresultat": 0,
        "Energiresultat": 650000,
        "Effektresultat": 74.1501254848277,
        //"UtlostInnovasjonskapital": 0,
        "Primærformal": "Energi",
        "Kvotepliktig": false
    }];

var tilsagnlist = [
    {
        "Id": 0,
        "Sid": "",
        "Prosjekttittel": "",
        "Kommune": "",
        "Energiresultat": "",
        "Fylke": "",
        "Status": "",
        "StøtteProgam": "",
        "StøtteProgamId": "",
        "Søker": "",
        "VedtattDato": "",
        "VedtattStøtte": ""
    }
];


var selectedlist = projectlist;

var teklist = [{ SID: "16/7425", URL: "", Sector: "" }];
var tekdatalist = [{ SID: "16/7425", data: "", Sector: "" }];

var project_sortby = "ProsjektTittel";

var techportfolio = false;

var programs = [];

$(document).ready(function () {
    if ($("#index-projects").hasClass("techportfolio")) {
        techportfolio = true;
    }

    if ($("#index-projects").length > 0) {


        $.getJSON('/tekportAllData.json', function (data) {
            tekdatalist = data;
        });

        $.getJSON('/prosjektliste_2023.json', function (data) {
            projectlist = data;

            if (techportfolio) {

                $.getJSON('/tilsagnJSON.ashx', function (tilsagnData) {
                    tilsagnlist = tilsagnData;

                    for (var i = 0; i < tekdatalist.length; i++) {
                        var dataElement = tekdatalist[i];

                        var tilsagnElement = _.find(tilsagnlist, function (o) { return o.Sid === dataElement.Sid; });

                        var program = "";
                        if (tilsagnElement !== undefined) {
                            program = tilsagnElement.StøtteProgam;
                            if (program !== "") {
                                programs.push(program);
                            }
                        }

                        if (!_.find(projectlist, { SID: dataElement.Sid })) {

                            var stotte = dataElement.Støtte.replace(/\s/g, '').replace("kr", "");
                            var klimaresultat = dataElement.DirekteKlimaresultatINorge[0].replace(/\s/g, '').replace("CO<sub>2</sub>-ekv/år", "");
                            var energiresultat = dataElement.DirekteEnergiresultat[0].replace(/\s/g, '').replace("CO<sub>2</sub>-ekv/år", "");
                            var effektresultat = dataElement.DirekteEffektresultat[0].replace(/\s/g, '').replace("CO<sub>2</sub>-ekv/år", "");

                            var project = {
                                "Vedtaksar": dataElement.Vedtaksår,
                                "Vedtaksdato": "", // "01.01." + dataElement.Vedtaksår,
                                "SID": dataElement.Sid,
                                "Sektor": dataElement.Sektor,
                                "ProsjektTittel": dataElement.Name,
                                "Program": program,
                                "Firma": dataElement.CustomProjectOwner,
                                "Fylke": dataElement.Fylke,
                                "Kommune": "",
                                "KontraktsfestetStotte": parseInt(stotte),
                                "Klimaresultat": parseInt(klimaresultat),
                                "Energiresultat": parseInt(energiresultat),//dataElement.DirekteEnergiresultat[0],
                                "Effektresultat": parseInt(effektresultat) //dataElement.DirekteEffektresultat[0]
                            };
                            projectlist.push(project);
                        }
                    }

                });

            }

            $.getJSON('/tekportjson', function (tekdata) {

                teklist = tekdata;
                var searchparam = getUrlParams("search");
                if (searchparam) {
                    $(".search").val(searchparam);
                }

                addFilters();
                sortTable();
                filterTable();

                if (programs.length > 0) {
                    $('select[name="Program"] option').addClass("hidden");
                    $('select[name="Program"] option[value=""]').eq(0).removeClass("hidden");
                    programs.forEach(function (program) {
                        $('select[name="Program"] option[value="' + program + '"]').removeClass("hidden");
                    });

                    projectlist.forEach(function (project) {
                        var tekelement = _.find(teklist, ["SID", project.SID]);
                        if (tekelement !== undefined && project.Program !== "") {
                            $('select[name="Program"] option[value="' + project.Program + '"]').removeClass("hidden");
                        }
                    });
                }
            });
        });

        $("div.sort").on('click', function () {
            if ($(this).hasClass("resultsort")) {
                $(".selectsort").show();
            } else {
                $(".selectsort").hide();
                $("a.sort").not(this).removeClass("active");
                $(this).addClass("active");
                project_sortby = $(this).data("sort");
                sortTable();

            }
        });

        $(".project-filter.search-input input").on('keyup', function (e) {
            if (e.which == 13) {
                filterTable();
            }
        });

        $(".project-filter button").click(function () {
            filterTable();
        });

        $("#index-projects").on('change', '.project-filter select', function () {

            //addInnerFilter($(this));
            filterTable();
        });

        $(".export-to-csv").click(function () {
            downloadCSV();
        });

        
    }

});


function addFilters() {

    var selecttmpl = '<select name="{0}" aria-label="Velg {0}" data-type="{2}"><option value="">{1}</option>';
    //var compiled = _.template('<% _.forEach(filterdata, function(fd) { %><option value="<%- fd %>"><%- fd %></option><% }); %>');

    $(".custom-select:not(.tekport-filter)").each(function () {
        var projectfilter_html = "";
        var filterid = $(this).data("filterid");
        var splitid = filterid.split("_");
        var filtername = $(this).data("filtername");
        var fdatatype = $(this).data("type");

        selected = getUrlParams(filterid);



        projectfilter_html += selecttmpl.replace("{0}", filterid).replace("{1}", filtername).replace("{2}", fdatatype);
        filterdata = _.uniq(_.map(projectlist, splitid[0]));

        _.forEach(filterdata.sort(), function (value) {
            projectfilter_html += '<option value="' + value + '"';
            if (selected == value && value.length > 0) {
                projectfilter_html += ' selected="selected"';
            }
            projectfilter_html += '>' + value + '</option>';
        });

        if (filterid == "Sektor") {

            var tpselected = '';
            if (selected == "Tekport" || techportfolio) {
                tpselected = ' selected="selected"';
            }

            projectfilter_html += '<option value="Tekport"' + tpselected + '>Teknologiporteføljen</option>';
        }
        projectfilter_html += "</select>";

        $(this).html(projectfilter_html);

    });

    $('.tekport-filter').each(function () {
        var filterid = $(this).data("filterid");
        var selected = getUrlParams(filterid);
        $('.tekport-filter select').val(selected);
    });
}

function sortTable() {
    var sortfield = $('div[data-sort="' + project_sortby + '"]');

    var sort_direction = sortfield.data("staticdirection");
    if (!sort_direction) {
        var sort_direction = sortfield.data("direction");
        if (sort_direction == "asc") {
            sortfield.data("direction", "desc");
        } else {
            sortfield.data("direction", "asc");
        }
    }
    var sortby = project_sortby.split(",");
    var direction = [];
    for (s in sortby) {
        direction.push(sort_direction);
    }
    if (sortby[0] === "SID") {
        selectedlist = _.orderBy(selectedlist, [function (o) {
            return parseInt(o.SID.split("/")[0]);
        }, function (o) {
            return parseInt(o.SID.split("/")[1]);
        }
        ], [direction, direction]);

        projectlist = _.orderBy(projectlist, [function (o) {
            return parseInt(o.SID.split("/")[0]);
        }, function (o) {
            return parseInt(o.SID.split("/")[1]);
        }
        ], [direction, direction]);
    } else {
        projectlist = _.orderBy(projectlist, sortby, direction);
        selectedlist = _.orderBy(selectedlist, sortby, direction);
    }
    updateTable();
}
var seltekport;

function filterTable() {
    selectedlist = projectlist;
    var search = $("input.search").val().toLowerCase();
    if (search) {
        seltekport = _.map(_.filter(tekdatalist, function (o) { if (o.Sid.toLowerCase().indexOf(search) > -1) { return true; } }), "SID");
        selectedlist = _.filter(selectedlist, function (o) {

            if (o.SID.indexOf(search) > -1
                || o.ProsjektTittel.toLowerCase().indexOf(search) > -1
                || o.Kommune.toLowerCase().indexOf(search) > -1
                || _.indexOf(seltekport, o.SID) > -1
                || (o.Firma !== null && o.Firma.toLowerCase().indexOf(search) > -1)) {
                return true;
            }
        });
        updateQueryStringParam("search", search);
    } else {
        removeParam("search");
    }

    var filterprop = new Object;
    vedtakyear_start = "2012";
    vedtakyear_end = "2023";
    vedtaksyears = "";

    if (techportfolio) {
        vedtakyear_end = new Date().getFullYear();
    }

    $(".filters select").each(function () {
        const sval = $(this).val();
        const sname = $(this).attr("name");
        const sdtype = $(this).data("type");

        if (sval != "") {
            updateQueryStringParam(sname, sval);
        } else {
            removeParam(sname);
        }

        if (sname == "Sektor") {
            if (sval == "Tekport") {
                $('.tekport-filter').removeClass("hidden");
            } else {
                $('.tekport-filter').addClass("hidden");
            }
        }

        if (sname == "Vedtaksar_start" && sval != "") {
            vedtakyear_start = sval;
        }
        if (sname == "Vedtaksar_end" && sval != "") {
            vedtakyear_end = sval;
        }
        if (sval != "") {
            if (sdtype == "number") {
                filterprop[sname] = Number(sval);
            }
            else {
                filterprop[sname] = sval;
            }
        }
    });

    $(".years").text(vedtakyear_start + "-" + vedtakyear_end);

    if (!_.isEmpty(filterprop)) {
        //selectedlist = _.filter(selectedlist, filterprop);
        selectedlist = _.filter(selectedlist, function (o) {

            if (filterprop["Sektor"]) {
                if (filterprop["Sektor"] == "Tekport") {
                    var tekelement = _.find(teklist, ["SID", o.SID]);
                    if (!tekelement) {
                        return false;
                    }

                    if (filterprop["TekportSektor"] && tekelement.Sector != filterprop["TekportSektor"]) {
                        return false;
                    }
                } else if (o.Sektor != filterprop["Sektor"]) {
                    return false;
                }
            }

            if (filterprop["Program"] && o.Program != filterprop["Program"]) {
                return false;
            }

            if (filterprop["Fylke"] && o.Fylke != filterprop["Fylke"]) {
                return false;
            }
            if (filterprop["Vedtaksar_start"] && o.Vedtaksar < filterprop["Vedtaksar_start"]) {
                return false;
            }
            if (filterprop["Vedtaksar_end"] && o.Vedtaksar > filterprop["Vedtaksar_end"]) {
                return false;
            }

            return true;

        });
    }
    var NumGrants = selectedlist.length;
    animateCount("tiltak", 0, NumGrants, 0, 0);

    var stottearray = _.map(selectedlist, 'KontraktsfestetStotte');
    var fsum = 0;
    _.each(stottearray, function (value) {
        fsum += value;
    });

    var KontraktsfestetStotteTotal = LargeNumberFormat(fsum, 2);
    animateCount("stotte", 0, KontraktsfestetStotteTotal, 2, 1);

    var ikkeKvotepliktigeProsjekter = _.filter(selectedlist, function (o) {
        return !o.Kvotepliktig;
    });

    var klimaSum = 0;

    stottearray = _.map(ikkeKvotepliktigeProsjekter, 'Klimaresultat');
    _.each(stottearray, function (value) {
        klimaSum += value;
    });

    var KlimaresultatTotal = MediumNumberFormat(klimaSum, 2);

    //if (KlimaresultatTotal < 0.1) {
    //    $('.klimareduksjon-unit').text("kt CO2");
    //    KlimaresultatTotal = MediumNumberFormat(klimaSum, 0);      
    //} else {
    //    $('.klimareduksjon-unit').text("Mt CO2");  
    //}

    if (KlimaresultatTotal != null) {
        animateCount("klimareduksjon", 0, KlimaresultatTotal, 2, 1);
    }
    updateTable();
}

function updateTable() {


    var max_take = 300;
    var dateoptions = { year: 'numeric', month: '2-digit', day: '2-digit' };
    var thrml = "";

    _.forEach(_.take(selectedlist, max_take), function (item) {
        var url = "";
        var tekelement = _.find(teklist, ["SID", item.SID]);
        if (tekelement) {
            url = tekelement.URL;
        }
        var templatestring = '<tr>';
        templatestring += '<td class="sid right">' + item.SID + '</td>';
        if (url != "") {
            templatestring += '<td class="name left"><a href="' + url + '">' + item.ProsjektTittel + '</a><a class="readmore" href="' + url + '">Les mer</a></td>';
        } else {
            templatestring += '<td class="name left">' + item.ProsjektTittel + '</td>';
        }
        templatestring += '<td class="owner left"><div>' + item.Firma + '</div> <div><span> ';

        if (item.Kommune !== "") {
            templatestring += ' ' + item.Kommune + ', ';
        }


        templatestring += item.Fylke + '</span></div></td>';
        templatestring += '<td class="stotte right">';
        if (item.KontraktsfestetStotte) {
            templatestring += '<div>' + item.KontraktsfestetStotte.formatMoney(0, ",", " ") + ',-</div>';
            if (item.Vedtaksdato && item.Vedtaksdato != "0001-01-01") {
                var vdate = new Date(item.Vedtaksdato);
                templatestring += '<div><span>Vedtatt: ' + vdate.toLocaleDateString('nb-NO', dateoptions) + '</span></div>';
            } else if (item.Vedtaksar) {
                templatestring += '<div><span>Vedtatt: ' + item.Vedtaksar + '</span></div>';
            }

        }
        templatestring += '</td><td class="result right">';
        if (item.Energiresultat) {
            templatestring += '<div>' + item.Energiresultat.formatMoney(0, ",", " ") + ' <span>kWh</span></div>';
        }
        if (item.Klimaresultat) {
            templatestring += '<div>' + item.Klimaresultat.formatMoney(0, ",", " ") + ' <span>kg CO<sub>2</sub></span></div>';
        }
        if (item.Effektresultat) {
            templatestring += '<div>' + item.Effektresultat.formatMoney(0, ",", " ") + ' <span>kW</span></div>';
        }
        //if (item.UtlostInnovasjonskapital) {
        //    templatestring += '<div>' + item.UtlostInnovasjonskapital.formatMoney(0, ",", " ") + ' <span>NOK</span></div>';
        //}

        templatestring += '</td><td class="mobile-header"></td></tr>';
        thrml += templatestring;
    });

    //var templatestring='<tr>';
    //templatestring+='<td class="sid right"><%- item.SID %></td>';
    //templatestring+='<td class="name left"><%- item.ProsjektTittel %></td>';
    //templatestring+='<td class="owner left"><div><%- item.ProsjektTittel %></div><div><span><%- item.Fylke %></span></div></td>';
    //templatestring+='<td class="stotte right"><div><%- item.KontraktsfestetStotte.formatMoney(0, ",", " "),- %></div><div><span>Vedtatt: <%- item.Vedtaksdato %></span></div></td>';
    //templatestring+='<td class="result right"><div><%- item.Energiresultat %> <span>kWh</span></div><div><%- item.Klimaresultat %> <span>CO<sub>2</sub></span></div><div><%- item.Effektresultat %> <span>kW</span></div><div><%- item.UtlostInnovasjonskapital %> <span>NOK</span></div></td>';
    //templatestring+='</tr>';


    //var trtemplate = _.template('<% _.forEach(projectlist, function(item) { %>' + templatestring + '<% }); %>');
    //$("tbody.list").html(trtemplate(_.take(projectlist, max_take)));
    $("tbody.list").html(thrml);
}



function convertToCSV(objArray) {
    var array = typeof objArray != 'object' ? JSON.parse(objArray) : objArray;

    var str = '';
    var headerkeyarr = Object.keys(array[0])

    for (var i = 0; i < array.length; i++) {
        var line = '';
        for (var index in array[i]) {
            if (headerkeyarr.indexOf(index) > -1) {
                if (line != '') line += ';'
                line += array[i][index];
            }
        }

        str += line + '\r\n';
    }

    return str;
}

function exportCSVFile(headers, items, fileTitle) {
    if (headers) {
        items.unshift(headers);
    }

    // Convert Object to JSON
    var jsonObject = JSON.stringify(items);

    jsonObject = jsonObject.replace(/\\n/g, "").replace(/&nbsp;/g, "&").replace(/;/g, ":");

    var csv = convertToCSV(jsonObject);
    var BOM = "\uFEFF";
    var csv = BOM + csv;
    var exportedFilenmae = fileTitle + '.csv' || 'export.csv';

    var blob = new Blob([csv], { type: 'text/csv;charset=utf-8;' });
    if (navigator.msSaveBlob) { // IE 10+
        navigator.msSaveBlob(blob, exportedFilenmae);
    } else {
        var link = document.createElement("a");
        if (link.download !== undefined) { // feature detection
            // Browsers that support HTML5 download attribute
            var url = URL.createObjectURL(blob);
            link.setAttribute("href", url);
            link.setAttribute("download", exportedFilenmae);
            link.style.visibility = 'hidden';
            document.body.appendChild(link);
            link.click();
            document.body.removeChild(link);
        }
    }
}



function downloadCSV() {

    var headers = {
        Vedtaksar: "Vedtaksår",
        Vedtaksdato: "Vedtaksdato",
        SID: "SID",
        Sektor: "Tema",
        ProsjektTittel: "Prosjekttittel",
        Program: "Program",
        Firma: "Firma",
        Fylke: "Fylke",
        Kommune: "Kommune",
        KontraktsfestetStotte: "Kontraktsfestet støtte",
        Klimaresultat: "Klimaresultat",
        Energiresultat: "Energiresultat",
        Effektresultat: "Effektresultat",
        //UtlostInnovasjonskapital: "Utløst innovasjonskapital",
        //Primærformal: "Primærformal"
    }


    var fileTitle = 'Enova_Prosjektliste';
    //csvJsonObject = selectedlist;
    if ($("select[name='Sektor']").val() == "Tekport") {
        fileTitle = 'Enova_Teknologiportefølje';
        headers["CustomProjectOwner"] = "Prosjekteier";
        headers["Name"] = "Navn";
        headers["Ingress"] = "Ingress";
        headers["Teknologileverandører"] = "Teknologileverandører";
        headers["TeknologiskInnovasjon"] = "Teknologisk innovasjon";
        headers["KompetanseUtvikling"] = "Kompetanse utvikling";
        headers["RealisertSpredningAvTeknologi"] = "Realisert spredning av teknologi";
        headers["VidereUtviklingOgVidereSpredning"] = "Videre utvikling og videre spredning";
        headers["Sektor"] = "Sektor";
        headers["Støtte"] = "Støtte";
        headers["DirekteEnergiresultat"] = "Direkte energiresultat";
        headers["DirekteKlimaresultatINorge"] = "Direkte klimaresultat i Norge";
        headers["Prosjektstatus"] = "Prosjektstatus";
        headers["Kontaktperson"] = "Kontaktperson";
        headers["Rolle"] = "Rolle";
        headers["Epost"] = "E-post";
        headers["Telefonnummer"] = "Telefonnummer";
        headers["SistGodkjentDato"] = "Sist godkjent dato";
        headers["Status"] = "Status";

        $.getJSON('/tekportAllData.json', function (data) {

            var joined = selectedlist.map(function (e) {
                return Object.assign({}, e, data.reduce(function (acc, val) {
                    if (val.Sid == e.SID) {
                        return val
                    } else {
                        return acc
                    }
                }, {}))
            });

            exportCSVFile(headers, joined, fileTitle);
        });


    } else {
        exportCSVFile(headers, selectedlist, fileTitle);
    }





    // // call the exportCSVFile() function to process the JSON and trigger the download
}

var updateQueryStringParam = function (key, value) {
    var baseUrl = [location.protocol, '//', location.host, location.pathname].join(''),
        urlQueryString = document.location.search,
        newParam = key + '=' + value,
        params = '?' + newParam;


    // If the "search" string exists, then build params from it
    if (urlQueryString) {
        keyRegex = new RegExp('([\?&])' + key + '[^&]*');

        // If param exists already, update it
        if (urlQueryString.match(keyRegex) !== null) {
            params = urlQueryString.replace(keyRegex, "$1" + newParam);
        } else { // Otherwise, add it to end of query string
            params = urlQueryString + '&' + newParam;
        }
    }
    window.history.replaceState({}, "", baseUrl + params);
};

function removeParam(key) {
    var baseUrl = [location.protocol, '//', location.host, location.pathname].join(''),
        sourceURL = document.location.search;
    var rtn = sourceURL.split("?")[0],
        param,
        params_arr = [],
        queryString = (sourceURL.indexOf("?") !== -1) ? sourceURL.split("?")[1] : "";
    if (queryString !== "") {
        params_arr = queryString.split("&");
        for (var i = params_arr.length - 1; i >= 0; i -= 1) {
            param = params_arr[i].split("=")[0];
            if (param === key) {
                params_arr.splice(i, 1);
            }
        }
        rtn = rtn + "?" + params_arr.join("&");
        if (rtn == "?")
            rtn = "";
    }

    window.history.replaceState({}, "", baseUrl + rtn);
}

function getUrlParams(prop) {
    var params = {};
    var search = decodeURIComponent(window.location.href.slice(window.location.href.indexOf('?') + 1));
    var definitions = search.split('&');

    definitions.forEach(function (val, key) {
        var parts = val.split('=', 2);
        params[parts[0]] = parts[1];
    });

    return (prop && prop in params) ? params[prop] : "";
};
$(document).ready(function () {
    if ($('.mynewsdesk .loader').length) {
        $('.mynewsdesk').each(function () {
            var tags = $(this).data("tags");
            var count = $(this).data("count");
            var container = $(this).find(".loader");

            $.ajax({
                url: "/mynewsdesk/pressroomitems",
                data: {
                    "tags": tags,
                    "count": count
                },
                success: function (data) {
                    var html = [];

                    for (i = 0; i < data.length; i++) {
                        var item = data[i];

                        var type = "Nyhet";

                        if (data.TypeOfMedia == "pressrelease") {
                            type = "Pressemelding";
                        }

                        var itemHtml
                            = [
                                "<div class='info-link-part'>",
                                "<article class='item'>",
                                "<a class='header-link' href='" + item.Url + "'>",
                                "<div class='item-picture-wrapper' style='background:url(" + item.ImageMedium + ") center center no-repeat; background-size: cover;'></div>",
                                "<h3>" + item.Header + "</h3>",                                
                                //"<img src='" + item.ImageMedium + "' alt='" + item.Header + "'/>",
                                "</a>",
                                //"<p class='intro'>",
                                //item.Summary,
                                //"<a href='" + item.Url + "'>Les mer</a>",
                                //"</p>",
                                "</article>",
                                "</div>"
                            ].join("\n");

                        html.push(itemHtml);
                    }

                    container.replaceWith(html.join("\n"));
                }, cache: false
            });



        });
    }
});;

$(document).ready(function () {

    var videoId = $('#front-header').data("video");

    if (videoId == null || videoId == "") {
        var videoId = $('#bannervideo').data("video");
    }

    if (videoId == null || videoId == "") {
        var videoId = $('#player-digital').data("video");

    }

    if (videoId != null && videoId != "") {
        if (videoId != null && videoId != "") {
            initVideoIframe(videoId);

        }
    }

});

function onYouTubeIframeAPIReady() {
    runPlayer();
}
function initVideoIframe(videoId) {
    if (document.getElementById('iframe_api') === null) {
        // this code loads the IFrame Player API code asynchronously.
        var tag = document.createElement('script');

        tag.src = "https://www.youtube.com/iframe_api";
        var firstScriptTag = document.getElementsByTagName('script')[0];
        firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
    } else {
        runPlayer();
    }
}
var player;
function runPlayer() {
    var videoId = $('#front-header').data("video");
    var playerid = "player";
    var height = 500;
    if (videoId == null || videoId == "") {
        var videoId = $('#bannervideo').data("video");
    }
    if (videoId == null || videoId == "") {
        var videoId = $('#player-digital').data("video");
        if (videoId != null && videoId != "") {
            playerid = "player-digital";
            height = 360;
        }
    }
    if (videoId != null && videoId != "") {
        try {
            if (videoId != null && videoId != "") {
                
                initVideoIframe(videoId);
            }
            
            
            player = new YT.Player(playerid, {
                videoId: videoId,
                height:height,
                playerVars: {
                    rel: 0,
                    modestbranding: 1,
                    showinfo: 0
                },
                events: {
                    'onStateChange': onPlayerStateChange
                }
            });
        } catch (err) {

        }

    }
}


function playerSeekTo(seconds) {
    player.seekTo(seconds);
    player.playVideo();
}


// 5. The API calls this function when the player's state changes.
//    The function indicates that when playing a video (state=1),
//    the player should play for six seconds and then stop.
function onPlayerStateChange(event) {
    if (event.data == YT.PlayerState.PLAYING) {
        $('#header-text-wrapper').fadeOut(500);

    } else if (event.data == YT.PlayerState.ENDED) {

        //event.data == YT.PlayerState.PAUSED)
        $('#header-text-wrapper').fadeIn(500);
    } else {
        //setTimeout(function () {
        //    if (event.target.getPlayerState() == 2) {
        //        $('#header-text-wrapper').fadeIn(500);
        //    }
        //}, 1000)
    }

};

$(document).ready(function () {

    if ($('#search-result').length > 0) {

        $('#search-result .item').each(function () {
            //var url = $(this).find("a").attr("href");
            //if (url.substr(-1) != '/') {
            //    $(this).addClass("hidden").hide();
            //}
        });

        var searchCount = $('#search-result .item:not(.hidden)').length;

        $('#search-meta .hits').text(searchCount);
        $('#search .container').show();
    }

});
;
$(document).ready(function () {
    $('.gatekeeper-step').each(function () {
        var step = $(this).data("step");

        if (parseInt(step) > 0) {
            $(this).find('.btn-gatekeeper-answer').on("click", function (e) {
                e.preventDefault();

                var nextStep = parseInt(step) + 1;
                var nextStepContainer = $('.gatekeeper-step[data-step="' + nextStep + '"]');

                $('.gatekeeper-step').addClass("hidden");
                var qualified = $(this).data("qualified") == "True";

                if (qualified) {
                    if (nextStepContainer.length) {
                        $('.gatekeeper-step[data-step="' + nextStep + '"]').removeClass("hidden");
                    } else {
                        $('.gatekeeper-final-step').removeClass("hidden");
                    }
                } else {
                    $('.gatekeeper-unqualified[data-step="' + step + '"]').removeClass("hidden");
                }
            });
        } else {
            $(this).find('.btn-gatekeeper').on("click", function (e) {
                e.preventDefault();
                $('.gatekeeper-step').addClass("hidden");
                $('.gatekeeper-step[data-step="1"]').removeClass("hidden");
            });
        }
    });
});;
(function( $ ) {
  var defaultOptions = {
    selectorForImagemaps: '.image-map-link-wrapper',
    linkClass: '.image-map-link',
    expandedLinkClass: 'image-map-link-expanded',
    infoboxClass: '.image-map-infobox',
    expandedInfoboxClass: 'image-map-infobox-expanded'
  };

  // Close all expanded
  function closeAll() {
    $(defaultOptions.linkClass).removeClass(defaultOptions.expandedLinkClass);
    $(defaultOptions.infoboxClass).removeClass(defaultOptions.expandedInfoboxClass);
  }

  // Add listioner on all buttons
  // Trigger classes on click
  $.fn.imagemap = function() {

    $(this).children(defaultOptions.selectorForImagemaps).children(defaultOptions.linkClass).on('click', function(event) {

    var _target = $(event.target);

    if (!_target.is( "a" )){
       _target = $($(event.target).parent());
    }

      var toggled = _target.hasClass(defaultOptions.expandedLinkClass);

      closeAll();

      if(!toggled) {
        _target.toggleClass(defaultOptions.expandedLinkClass);
        var infobox = _target.siblings()[0] ;
        $(infobox).toggleClass(defaultOptions.expandedInfoboxClass);
      }

    });
  }
  // Close all and remove events
  $.fn.removeImagemap = function(opt) {
    closeAll();
    $(this).children(defaultOptions.selectorForImagemaps).children(defaultOptions.linkClass).off('click');
  }
}( jQuery ));
;
$(document).ready(function(){
  var options = {
    breakpoint: 1141,
    header_target: '.image-map-box',
    slick_slide: '.image-map-link-wrapper',
    slicked_class: 'slicked'
  };

  var $window = $(window);
  var slick_mode = false;
  var map_mode = false;

  var toggle = function () {
    if($window.width() <= options.breakpoint) {
      // Add slick and remove image map
      if(!slick_mode) {
        slick_mode = true;
        map_mode = false;
        $(options.header_target).removeImagemap();

        $(options.header_target).slick({
          dots: true,
          slide: options.slick_slide,
          fade: true,
          arrows:false
        });

        $(options.header_target).addClass(options.slicked_class);
        $(options.header_target).attr("aria-label","Bildegalleri med mulighet for informasjon");

      }
    } else {
      // Remove slick and ann imagemap
      if(!map_mode) {
        if(slick_mode){
          $(options.header_target).slick('unslick');
          $(options.header_target).removeClass(options.slicked_class);
        }

        $(options.header_target).imagemap();
        slick_mode = false;
        map_mode = true;
      }
    }
  };

  // Listen to resize
  $window.on('resize', toggle);

  // Initial
  toggle();
});
;
$(document).ready(function () {
    if ($("#enova-tv").length > 0) {
        $('.stream-btn').on('click', function (e) {
            e.preventDefault();
            var target = $(e.target);
            if (!target.hasClass('stream-btn')) {
                target = target.parent();
                console.log('setting target');
            }
            var videoCode = target.attr('data-target-video-code');
            var videoUrl = "https://www.youtube.com/embed/" + videoCode + "?rel=0&controls=0&showinfo=0";


            $('.stream-btn').removeClass('active');
            target.addClass('active');

            $('#youtube-player').attr('src', videoUrl);
            $(document).scrollTop(0);
        });

        // Initial
        $('.stream-btn').first().click();
    }
});;
// Toggle day function
// Adds first program page on that day active
var myprogram_json = [];

function toggelDay(target) {
    if (target.hasClass('active')) {
        return;
    } else {
        $('.day-link-action').removeClass('active');
        $('.program-link').removeClass('active');
        $('.day-wrapper').hide();

        target.addClass('active');

        var wrapperTarget = $(target.attr('data-target'));
        wrapperTarget.show();

        var programBtn = $(wrapperTarget.children('.program-links').children('.program-link')[0]);
        programBtn.trigger('click');
    }
}

function addProgram(progId) {
    $.ajax({
        dataType: "json",
        method: "GET",
        url: "/enovaprogram/addprogram/",
        data: { progId: progId }
    }).done(function (data) {
        myprogram_json = data;
        showHideAddedProgram(progId, true);

    });
}

function removeProgram(progId) {
    $.ajax({
        dataType: "json",
        method: "GET",
        url: "/enovaprogram/removeprogram/",
        data: { progId: progId }
    }).done(function (data) {
        myprogram_json = data;
        showHideAddedProgram(progId, false);

    });
}

function showHideAddedProgram(progId, show) {
    if (show) {
        $("[data-id='" + progId + "']").find(".add-to-my-program").addClass("add-to-my-program-active");
        $("[data-id='" + progId + "']").find(".add-to-my-program-button").addClass("add-to-my-program-button-active");
        $("[data-id='" + progId + "']").find(".add-to-my-program-label").text("Lagt til i mitt program");
    } else {
        $("[data-id='" + progId + "']").find(".add-to-my-program").removeClass("add-to-my-program-active");
        $("[data-id='" + progId + "']").find(".add-to-my-program-button").removeClass("add-to-my-program-button-active");
        $("[data-id='" + progId + "']").find(".add-to-my-program-label").text("Legg til i mitt program");
    }
}

function showHideMyProgram(show) {

    var timeclass = ".add-to-my-program";
    if (show) {
        timeclass = ".add-to-my-program-active";
    }
    $(".program-entry").hide();
    //if ((myprogram_json.savedPrograms == null || myprogram_json.savedPrograms.length == 0) && show) {

    //} else {
    $(".timeframe").each(function () {
        var sesjoncount = $(this).find(timeclass).length;
        var session_txt = "SESJON";
        var sessions_txt = "SESJONER";
        var par_session_txt = " PARALLELLE SESJONER";
        if ($("#enova-program").data("lang") == "en") {
            session_txt = "SESSION";
            sessions_txt = "SESSIONS";
            par_session_txt = " PARALLEL SESSIONS";
        }
        if (sesjoncount == 0) {
            $(this).find(".timeframe-programs").text("0 " + sessions_txt);
        }
        else if (sesjoncount == 1) {
            $(this).find(".timeframe-programs").text("1 " + session_txt);
            //1 SESJON
        } else {
            $(this).find(".timeframe-programs").text(sesjoncount + par_session_txt);
            //@paralellesesjon_count PARALLELLE SESJONER
        }
        $(this).find(timeclass).each(function () {
            $(this).closest(".program-entry").show();
        });
    });
    //}

}

function showHideSpeaker(targetclass) {
    $(".presenteritem").hide();
    $(targetclass).show();
}

$(document).ready(function () {

    if ($("#conference-speakers").length > 0) {
        if ($(".day-link-speaker-action").length > 1) {
            $(".day-link-speaker-action").first().addClass("active");
            showHideSpeaker($(".day-link-speaker-action").first().data("target"));
            $(".day-link-speaker-action").click(function (e) {
                e.preventDefault();

                if (!$(this).hasClass("active")) {
                    showHideSpeaker($(this).data("target"));
                    $(".day-link-speaker-action").removeClass("active");
                    $(this).addClass("active");
                }
                

            });
        }
    }

    if ($("#enova-program").length > 0) {


        $.ajax({
            dataType: "json",
            method: "GET",
            url: "/enovaprogram/getprogams/"
        }).done(function (data) {
            myprogram_json = data;
            if (myprogram_json.savedPrograms != null) {

                $.each(myprogram_json.savedPrograms, function (key, value) {
                    showHideAddedProgram(value.programId, true);
                });
            }
        });

        // Toggle day button
        $('.day-link-action').on('click', function (e) {
            e.preventDefault();
            var target = $(e.target);
            toggelDay(target);
        });

        // Closes and expands the selected program link
        $('.program-header-left').on('click', function (e) {
            e.preventDefault();
            var closestEntry = $(e.target).closest(".program-entry")
            if (closestEntry.hasClass('program-entry-active')) {
                $('.program-entry').removeClass('program-entry-active');
            } else {
                $('.program-entry').removeClass('program-entry-active');
                closestEntry.addClass('program-entry-active');
                $('html, body').animate({
                    scrollTop: closestEntry.offset().top-50
                }, 2000);
            }
        })

        // Toggle active state on my program button
        $('.add-to-my-program').on('click', function (e) {
            e.preventDefault();
            if (myprogram_json.email != null) {
                if ($(this).hasClass('add-to-my-program-active')) {
                    removeProgram($(this).closest(".program-entry").data("id"));
                } else {
                    addProgram($(this).closest(".program-entry").data("id"));
                }
            } else {
                $(".overlay").show();
            }
            //$(this).toggleClass('add-to-my-program-active');
            //$(this).closest(".program-entry").find(".add-to-my-program-button").toggleClass("add-to-my-program-button-active");

        });

        // Toggle active state on my program button in expanded mode
        $('.add-to-my-program-button').on('click', function (e) {
            e.preventDefault();
            if (myprogram_json.email != null) {
                var target = $(e.target);
                if (target.hasClass('add-to-my-program-label') || target.hasClass('add-to-my-program-icon')) {
                    target = $(target).parent();
                }
                else {
                    target = $(target);
                }

                if (target.hasClass('add-to-my-program-button-active')) {
                    removeProgram(target.closest(".program-entry").data("id"));
                } else {
                    addProgram(target.closest(".program-entry").data("id"));
                }
            } else {
                $(".overlay").show();
            }
            //var target = $(e.target);
            //if (target.hasClass('add-to-my-program-label') || target.hasClass('add-to-my-program-icon')) {
            //    target = $(target).parent();
            //}
            //else {
            //    target = $(target);
            //}
            //target.toggleClass('add-to-my-program-button-active');
        });

        // Toggles a program or my program
        $('.program-link').on('click', function (e) {
            e.preventDefault();

            $('.program-link').removeClass('active');
            $(this).addClass('active');
            if ($(this).attr('data-target') != ".my-program") {
                $('.program-day').show();
                showHideMyProgram(false);
                //$($(this).attr('data-target')).show();
                $('.my-program').hide();
            } else {
                if (myprogram_json.email != null) {
                    $('.program-day').show();
                    $('.my-program').hide();
                    showHideMyProgram(true);
                } else {
                    $('.program-day').hide();
                    $('.my-program').show();
                }
            }

        });

        $(".btn-save-email").click(function (e) {
            e.preventDefault();
            var tt = $(this);
            var semail = tt.prev().val();


            $.ajax({
                dataType: "json",
                method: "GET",
                url: "/enovaprogram/updateemail/",
                data: { email: semail }
            }).done(function (data) {
                myprogram_json = data;


                if (myprogram_json.savedPrograms != null) {

                    $.each(myprogram_json.savedPrograms, function (key, value) {
                        showHideAddedProgram(value.programId, true);
                    });
                }


            }).done(function () {

                if (myprogram_json.email != null) {
                    if (tt.closest(".overlay").length > 0) {
                        $(".overlay").hide();
                    } else {
                        showHideMyProgram(true);
                        $('.program-day').show();
                        $('.my-program').hide();
                    }

                } else {
                    alert("E-post ble ikke lagret!");
                }
            });
        });

        // initial toggle
        toggelDay($($('.day-link-action')[0]));
    }
});;
kayadata = [
    {
        "Year": 1990,
        "CO2e": 51.427,
        "population": 4233116,
        "BNPperPop": 401915,
        "GWh": 199521
    },
    {
        "Year": 1991,
        "CO2e": 49.022,
        "population": 4249830,
        "BNPperPop": 412684,
        "GWh": 196160
    },
    {
        "Year": 1992,
        "CO2e": 47.364,
        "population": 4273634,
        "BNPperPop": 425054,
        "GWh": 196287
    },
    {
        "Year": 1993,
        "CO2e": 49.328,
        "population": 4299167,
        "BNPperPop": 434552,
        "GWh": 201894
    },
    {
        "Year": 1994,
        "CO2e": 51.232,
        "population": 4324815,
        "BNPperPop": 453813,
        "GWh": 208725
    },
    {
        "Year": 1995,
        "CO2e": 51.631,
        "population": 4348410,
        "BNPperPop": 470106,
        "GWh": 218855
    },
    {
        "Year": 1996,
        "CO2e": 54.511,
        "population": 4369957,
        "BNPperPop": 491308,
        "GWh": 225204
    },
    {
        "Year": 1997,
        "CO2e": 54.528,
        "population": 4392714,
        "BNPperPop": 514592,
        "GWh": 228862
    },
    {
        "Year": 1998,
        "CO2e": 54.556,
        "population": 4417599,
        "BNPperPop": 525122,
        "GWh": 236190
    },
    {
        "Year": 1999,
        "CO2e": 55.58,
        "population": 4445329,
        "BNPperPop": 532351,
        "GWh": 237866
    },
    {
        "Year": 2000,
        "CO2e": 54.918,
        "population": 4478497,
        "BNPperPop": 545343,
        "GWh": 230924
    },
    {
        "Year": 2001,
        "CO2e": 56.189,
        "population": 4503436,
        "BNPperPop": 553576,
        "GWh": 240713
    },
    {
        "Year": 2002,
        "CO2e": 55.007,
        "population": 4524066,
        "BNPperPop": 559021,
        "GWh": 234687
    },
    {
        "Year": 2003,
        "CO2e": 55.612,
        "population": 4552252,
        "BNPperPop": 560616,
        "GWh": 235452
    },
    {
        "Year": 2004,
        "CO2e": 56.013,
        "population": 4577457,
        "BNPperPop": 579659,
        "GWh": 239441
    },
    {
        "Year": 2005,
        "CO2e": 54.944,
        "population": 4606363,
        "BNPperPop": 591145,
        "GWh": 237454
    },
    {
        "Year": 2006,
        "CO2e": 54.934,
        "population": 4640219,
        "BNPperPop": 600915,
        "GWh": 237830
    },
    {
        "Year": 2007,
        "CO2e": 56.605,
        "population": 4681134,
        "BNPperPop": 613498,
        "GWh": 242795
    },
    {
        "Year": 2008,
        "CO2e": 55.131,
        "population": 4737171,
        "BNPperPop": 609129,
        "GWh": 244392
    },
    {
        "Year": 2009,
        "CO2e": 52.672,
        "population": 4799252,
        "BNPperPop": 590866,
        "GWh": 232430
    },
    {
        "Year": 2010,
        "CO2e": 54.938,
        "population": 4858199,
        "BNPperPop": 587793,
        "GWh": 248505
    },
    {
        "Year": 2011,
        "CO2e": 53.99,
        "population": 4920305,
        "BNPperPop": 586070,
        "GWh": 240469
    },
    {
        "Year": 2012,
        "CO2e": 53.417,
        "population": 4985870,
        "BNPperPop": 593997,
        "GWh": 241931
    },
    {
        "Year": 2013,
        "CO2e": 53.671,
        "population": 5051275,
        "BNPperPop": 592368,
        "GWh": 242335
    },
    {
        "Year": 2014,
        "CO2e": 54.041,
        "population": 5109056,
        "BNPperPop": 597204,
        "GWh": 238481
    },
    {
        "Year": 2015,
        "CO2e": 54.489,
        "population": 5165802,
        "BNPperPop": 602262,
        "GWh": 242030
    },
    {
        "Year": 2016,
        "CO2e": 53.586,
        "population": 5213985,
        "BNPperPop": 603091,
        "GWh": 244084
    },
    {
        "Year": 2017,
        "CO2e": 52.84,
        "population": 5258317,
        "BNPperPop": 611900,
        "GWh": 246799
    }, 
    {
        "Year": 2018,
        "CO2e": 52.871,
        "population": 5295619,
        "BNPperPop": 614387,
        "GWh": 249577
    },

    {
        "Year": 2019,
        "CO2e": 51.086,
        "population": 5331813,
        "BNPperPop": 615183,
        "GWh": 247649
    },
    {
        "Year": 2020,
        "CO2e": 49.283,
        "population": 5367651,
        "BNPperPop": 606291,
        "GWh": 243264
    },
    {
        "Year": 2021,
        "CO2e": 49.128,
        "population": 5403440,
        "BNPperPop": 627042,
        "GWh": 250537
    },
{ "Year": 2022, "CO2e": null, "population": 5439691, "BNPperPop": null, "GWh": null },
{ "Year": 2023, "CO2e": null, "population": 5476688, "BNPperPop": null, "GWh": null },
{ "Year": 2024, "CO2e": null, "population": 5513747, "BNPperPop": null, "GWh": null },
{ "Year": 2025, "CO2e": null, "population": 5550800, "BNPperPop": null, "GWh": null },
{ "Year": 2026, "CO2e": null, "population": 5587947, "BNPperPop": null, "GWh": null },
{ "Year": 2027, "CO2e": null, "population": 5625119, "BNPperPop": null, "GWh": null },
{ "Year": 2028, "CO2e": null, "population": 5662137, "BNPperPop": null, "GWh": null },
{ "Year": 2029, "CO2e": null, "population": 5698918, "BNPperPop": null, "GWh": null },
{ "Year": 2030, "CO2e": null, "population": 5735441, "BNPperPop": null, "GWh": null },
{ "Year": 2031, "CO2e": null, "population": 5771314, "BNPperPop": null, "GWh": null },
{ "Year": 2032, "CO2e": null, "population": 5806529, "BNPperPop": null, "GWh": null },
{ "Year": 2033, "CO2e": null, "population": 5840790, "BNPperPop": null, "GWh": null },
{ "Year": 2034, "CO2e": null, "population": 5874141, "BNPperPop": null, "GWh": null },
{ "Year": 2035, "CO2e": null, "population": 5906586, "BNPperPop": null, "GWh": null },
{ "Year": 2036, "CO2e": null, "population": 5938181, "BNPperPop": null, "GWh": null },
{ "Year": 2037, "CO2e": null, "population": 5968905, "BNPperPop": null, "GWh": null },
{ "Year": 2038, "CO2e": null, "population": 5998806, "BNPperPop": null, "GWh": null },
{ "Year": 2039, "CO2e": null, "population": 6027894, "BNPperPop": null, "GWh": null },
{ "Year": 2040, "CO2e": null, "population": 6056245, "BNPperPop": null, "GWh": null },
{ "Year": 2041, "CO2e": null, "population": 6083850, "BNPperPop": null, "GWh": null },
{ "Year": 2042, "CO2e": null, "population": 6110733, "BNPperPop": null, "GWh": null },
{ "Year": 2043, "CO2e": null, "population": 6136904, "BNPperPop": null, "GWh": null },
{ "Year": 2044, "CO2e": null, "population": 6162387, "BNPperPop": null, "GWh": null },
{ "Year": 2045, "CO2e": null, "population": 6187238, "BNPperPop": null, "GWh": null },
{ "Year": 2046, "CO2e": null, "population": 6211440, "BNPperPop": null, "GWh": null },
{ "Year": 2047, "CO2e": null, "population": 6235055, "BNPperPop": null, "GWh": null },
{ "Year": 2048, "CO2e": null, "population": 6258105, "BNPperPop": null, "GWh": null },
{ "Year": 2049, "CO2e": null, "population": 6280661, "BNPperPop": null, "GWh": null },
{ "Year": 2050, "CO2e": null, "population": 6302772, "BNPperPop": null, "GWh": null }];



var inputdata = [
    {
        'id': 1,
        'name': 'Befolkning',
        'description': 'SSBs befolkningsframskriving:  <span class="calcvalue_pos"></span>',
        'description_change': '<span class="calcvalue"></span> endring i.f.t. SSBs framskriving',
        'color': "#ffa300",
        'calcvalue': 'befolkning_calc_percent',
        'selectval': 'befolkning_input_value',
        'info': 'Vi har lagt til grunn SSBs befolkningsframskriving fram til 2050 (hovedalternativet MMMM). Du kan legge inn en prosentvis endring som gradvis justerer SSB-framskrivingen fram mot 2050. Befolkningstallene for 1990-2021 er hentet fra SSB. SSBs befolkningsframskriving:  <span class="calcvalue_pos"></span>.'
    },
    {
        'id': 2,
        'name': 'Velstand',
        'description': 'Historisk utvikling: <span class="calcvalue_pos"></span> årlig vekst',
        'description_change': '<span class="calcvalue"></span> årlig endring',
        'color': "#00a3e0",
        'calcvalue': 'velstand_calc_percent',
        'selectval': 'velstand_input_value',
        'info': 'Vi benytter bruttonasjonalprodukt per innbygger som måleverdi for velstand. Vi har beregnet årlig prosentvis endring basert på 1990-2021, men du kan endre denne forutsetningen. Tallene er hentet fra SSB. Historisk utvikling: <span class="calcvalue_pos"></span> årlig vekst.'
    },
    {
        'id': 3,
        'name': 'Energiintensitet',
        'description': 'Historisk utvikling: <span class="calcvalue_pos"></span> årlig nedgang',
        'description_change': '<span class="calcvalue"></span> årlig endring',
        'color': "#ef3340",
        'calcvalue': 'energiintensitet_calc_percent',
        'selectval': 'energiintensitet_input_value',
        'info':'Denne størrelsen beregner vi ved å ta nasjonal energibruk dividert på brutto nasjonalprodukt, slik at vi får et mål på hvor mye energi som benyttes i den norske verdiskapingen (målt som kWh/kr). Vi har beregnet årlig prosentvis endring basert på SSB-tall for 1990-2021, men du kan endre denne forutsetningen. Historisk utvikling: <span class="calcvalue_pos"></span> årlig nedgang.'
    },
    {
        'id': 4,
        'name': 'Utslippsintensitet',
        'description': 'Historisk utvikling: <span class="calcvalue_pos"></span> årlig nedgang',
        'description_change': '<span class="calcvalue"></span> årlig endring',
        'color': "#00b74f",
        'calcvalue': 'utslippsintensitet_calc_percent',
        'selectval': 'utslippsintensitet_input_value',
        'info': 'Denne størrelsen beregner vi ved å ta nasjonale klimagassutslipp dividert på nasjonal energibruk, slik at vi får et mål på hvor mye klimagasser som slippes ut ved bruk av energi (målt som kilo CO2-ekvivalenter/kWh). Vi har beregnet årlig prosentvis endring basert på SSB-tall for 1990-2021, men du kan endre denne forutsetningen. Historisk utvikling: <span class="calcvalue_pos"></span> årlig nedgang.'
    }
];

var startyear = 1990;
var endyear = 2021;
var start_calcyear = endyear + 1;
var end_calcyear = 2050;
var velstand_input_value = 10;
var befolkning_input_value = 10;
var utslippsintensitet_input_value = 10;
var energiintensitet_input_value = 10;
var velstand_after = new Array();
var velstand_before = new Array();
var befolkning_before = new Array();
var befolkning_after = new Array();
var energiintensitet_before = new Array();
var energiintensitet_after = new Array();
var utslippsintensitet_before = new Array();
var utslippsintensitet_after = new Array();
var velstand_calc_percent = 0;
var befolkning_calc_percent = 0;
var utslippsintensitet_calc_percent = 0;
var energiintensitet_calc_percent = 0;
var chart1;
var chart2;

var utslippklimagasser_before = new Array();
var utslippklimagasser_after = new Array();

var responsivewidth = 616;

function update_chart_series() {

    chart1.series[1].update({
        data: velstand_after
    }, true);

    chart1.series[3].update({
        data: befolkning_after
    }, true);

    chart1.series[5].update({
        data: utslippsintensitet_after
    }, true);

    chart1.series[7].update({
        data: energiintensitet_after
    }, true);


    chart1.redraw();

    chart2.series[1].update({
        data: utslippklimagasser_after
    }, true);

    chart2.redraw();

}

function update_calc_percent() {
    velstand_calc_percent = Math.pow(_.last(velstand_before)[1], (1 / (endyear - startyear))) - 1 + ((velstand_input_value - 10) / 200);
    befolkning_calc_percent = (befolkning_input_value - 10) / 20;
    utslippsintensitet_calc_percent = Math.pow(_.last(utslippsintensitet_before)[1], 1 / (endyear - startyear)) - 1 + (utslippsintensitet_input_value - 10) / 200;
    energiintensitet_calc_percent = Math.pow(_.last(energiintensitet_before)[1], 1 / (endyear - startyear)) - 1 + (energiintensitet_input_value - 10) / 200;
}

function recalc_data_after() {
    update_calc_percent();
    velstand_after = [];
    befolkning_after = [];
    utslippsintensitet_after = [];
    energiintensitet_after = [];
    for (year = endyear; year <= end_calcyear; year++) {
        var data_va = 0;
        var data_ba = 0;
        var data_ua = 0;
        var data_ea = 0;
        if (year == endyear) {
            data_va = _.last(velstand_before)[1];
            data_ba = _.last(befolkning_before)[1];
            data_ua = _.last(utslippsintensitet_before)[1];
            data_ea = _.last(energiintensitet_before)[1];
        } else {

            data_va = _.last(velstand_after)[1] * (1 + velstand_calc_percent);
            data_ba = _.find(kayadata, { 'Year': year }).population / kayadata[0].population * (1 + befolkning_calc_percent * (year - endyear) / (end_calcyear - endyear));
            data_ua = _.last(utslippsintensitet_after)[1] * (1 + utslippsintensitet_calc_percent);
            data_ea = _.last(energiintensitet_after)[1] * (1 + energiintensitet_calc_percent);
        }
        velstand_after.push([year, data_va]);
        befolkning_after.push([year, data_ba]);
        utslippsintensitet_after.push([year, data_ua]);
        energiintensitet_after.push([year, data_ea]);
    }
}

function recalc_utslipp_klimagasser() {
    utslippklimagasser_after = [];
    for (year = endyear; year <= end_calcyear; year++) {
        var data_uka = 0;
        if (year == endyear) {
            data_uka = _.last(utslippklimagasser_before)[1];
        } else {
            data_uka = kayadata[0].CO2e * _.find(befolkning_after, [0, year])[1] * _.find(velstand_after, [0, year])[1] * _.find(energiintensitet_after, [0, year])[1] * _.find(utslippsintensitet_after, [0, year])[1]
        }
        utslippklimagasser_after.push([year, data_uka]);
    }
}
var rederedtextarr = new Array();


function drawSeriesNames(chart) {
    var series = chart.series;
    for (i = 0; i < rederedtextarr.length; i++) {
        rederedtextarr[i].destroy();
    }
    rederedtextarr = [];
    if (chart.chartWidth > responsivewidth) {
        for (i = 0; i < series.length; i++) {
            var len = series[i].data.length;
            var point = series[i].data[len - 1];
            
            if (point.category == end_calcyear) {
                var rt = chart.renderer.text(
                  point.series.name,
                  point.plotX + chart.plotLeft + 10,
                  point.plotY + chart.plotTop + 5
                )
                .attr({
                    fill: 'rgba(0,0,0,1)',
                    zIndex: 5
                })
                .add();
                rederedtextarr.push(rt);
            }
        }
    }
}


var rederedtextarr2 = new Array();

function drawSeriesNames2(chart) {
    var series = chart.series;
    for (i = 0; i < rederedtextarr2.length; i++) {
        rederedtextarr2[i].destroy();
    }
    rederedtextarr2 = [];
    if (chart.chartWidth > responsivewidth) {
        for (i = 0; i < series.length; i++) {
            var len = series[i].data.length;
            var point = series[i].data[len - 1];
            if (point.category == end_calcyear) {
                var plotx = point.plotX + chart.plotLeft + 10;
                var ploty = point.plotY + chart.plotTop + 5;
                if (point.series.xData[0] == startyear) {
                    plotx = chart.plotLeft + 15;
                    ploty -= 13;
                }
                seriesname = point.series.name.replace("klimagasser", "<br>klimagasser");
                var rt = chart.renderer.text(
                  seriesname,
                  plotx,
                  ploty

                )
                .attr({
                    fill: 'rgba(0,0,0,1)',
                    zIndex: 5
                })
                .add();
                rederedtextarr2.push(rt);
            }
        }
    }
}


$(document).ready(function () {

    if ($("#graph1").length > 0) {

        //velstand_before (BNP/bef)
        velstand_before = _.map(_.filter(kayadata, function (o) { return o.Year <= endyear; }), function (obj) {

            return [obj.Year, _.divide(obj.BNPperPop, kayadata[0].BNPperPop)];
        });

        befolkning_before = _.map(_.filter(kayadata, function (o) { return o.Year <= endyear; }), function (obj) {

            return [obj.Year, _.divide(obj.population, kayadata[0].population)];
        });

        utslippsintensitet_before = _.map(_.filter(kayadata, function (o) { return o.Year <= endyear; }), function (obj) {

            return [obj.Year, _.divide((obj.CO2e / obj.GWh), (kayadata[0].CO2e / kayadata[0].GWh))];
        });

        energiintensitet_before = _.map(_.filter(kayadata, function (o) { return o.Year <= endyear; }), function (obj) {

            return [obj.Year, _.divide((obj.GWh / (obj.BNPperPop * obj.population / 1000000)), (kayadata[0].GWh / (kayadata[0].BNPperPop * kayadata[0].population / 1000000)))];
        });

        recalc_data_after();



        Highcharts.setOptions({
            lang: {
                decimalPoint: ',',
                thousandsSep: '.'
            },

            tooltip: {
                yDecimals: 2 // If you want to add 2 decimals
            }
        });


        chart1 = Highcharts.chart('graph1', {
            chart: {
                type: 'line',
                margin: [50, 135, 46, 100],
                style: { "fontFamily": "\"National\", sans-serif", "fontSize": "16px" },
                events: {
                    load: function () {
                        var chart = this;
                        drawSeriesNames(chart);
                    },
                    redraw: function () {
                        var chart = this;
                        drawSeriesNames(chart);
                        


                    }
                }
            },
            title: {
                text: 'Drivere for klimagassutslipp',
                style: { "color": "#222222", "fontSize": "20px" }
            },

            //subtitle: {
            //    text: 'Source: thesolarfoundation.com'
            //},
            xAxis: {
                gridLineColor: "#acafbc",
                lineColor: "#acafbc",
                gridLineWidth: 1,
                endOnTick: true,
                startOnTick: true,
                maxPadding: 0,
                tickWidth: 0,
                min: startyear,
                max: end_calcyear,
                tickInterval: 10,
                tickPositioner: function (min, max) {
                    var act = min,
                        ticks = [];
                    
                    while (act <= max) {
                        ticks.push(act);
                        act += this.tickInterval;
                    }
                    return ticks;
                },
                labels: {
                    style: {
                        color: "#222222",
                        fontSize: "16px"
                    }
                }
            },
            yAxis: {
                gridLineColor: "#acafbc",
                lineColor: "#acafbc",
                title: {
                    text: '[Utvikling relativt til 1990-nivå]',
                    style: {
                        color: "#222222",
                        width: 300
                    }
                },
                endOnTick: true,
                startOnTick: true,
                labels: {
                    x: -15,
                    format: "{value:.1f}",
                    style: {
                        color: "#222222",
                        fontSize: "16px"
                    }
                }


            },
            legend: {
                enabled: false



            },

            plotOptions: {
                series: {
                    lineWidth: 2,
                    label: {
                        connectorAllowed: false
                    },
                    pointStart: startyear,
                    marker: {
                        enabled: false
                    },
                    tooltip: {
                        valueDecimals: 2
                    }
                }
            },

            series: [{
                name: 'Velstand',
                data: velstand_before,
                color: '#00a3e0',
                showInLegend: false,
                zIndex: 10
            },
            {
                name: 'Velstand',
                data: velstand_after,
                color: '#00a3e0',
                dashStyle: 'Dot',
                zIndex: 5
            },
            {
                name: 'Befolkning',
                data: befolkning_before,
                color: '#ffa300',
                showInLegend: false,
                zIndex: 10
            },
            {
                name: 'Befolkning',
                data: befolkning_after,
                color: '#ffa300',
                dashStyle: 'Dot',
                zIndex: 5
            },
            {
                name: 'Utslippsintensitet',
                data: utslippsintensitet_before,
                color: '#00b74f',
                showInLegend: false,
                zIndex: 10
            },
            {
                name: 'Utslippsintensitet',
                data: utslippsintensitet_after,
                color: '#00b74f',
                dashStyle: 'Dot',
                zIndex: 5
            },
            {
                name: 'Energiintensitet',
                data: energiintensitet_before,
                color: '#ef3340',
                showInLegend: false,
                zIndex: 10
            },
            {
                name: 'Energiintensitet',
                data: energiintensitet_after,
                color: '#ef3340',
                dashStyle: 'Dot',
                zIndex: 5
            }

            ],

            responsive: {
                rules: [{
                    condition: {
                        maxWidth: responsivewidth
                    },

                    chartOptions: {
                        chart: {
                            margin: [50, 14, 110, 30]
                            
                            //margin: [50, 135, 46, 100],
                        },
                        plotOptions: {
                            series: {
                                lineWidth: 2
                            }
                        },
                        xAxis: {
                            tickInterval: 20,
                            labels: {
                                style: {
                                    fontSize: "14px"
                                }
                            }
                            


                        },
                        yAxis: {
                            showFirstLabel: false,
                            title: {
                                text: null
                            },
                            labels: {
                                x:-5,
                                style: {
                                    fontSize: "14px"
                                }
                            }
                        },
                        legend: {
                            layout: 'vertical',
                            align: 'left',
                            verticalAlign: 'bottom',
                            x:20,
                            enabled:true
                        }
                    }
                }]
            }

        });

        if ($("#graph2").length > 0) {
            utslippklimagasser_before = _.map(_.filter(kayadata, function (o) { return o.Year <= endyear; }), function (obj) {

                return [obj.Year, obj.CO2e];
            });

            recalc_utslipp_klimagasser();
            var to_tredjedeler_innenlands = new Array();
            var mal_lavutslippssammfunnet = new Array();
            var data_tti = kayadata[0].CO2e * (1 - 0.55);
            var data_ml = kayadata[0].CO2e * (1 - 0.95);
            for (year = startyear; year <= end_calcyear; year++) {
                to_tredjedeler_innenlands.push([year, data_tti]);
                mal_lavutslippssammfunnet.push([year, data_ml]);
            }

            chart2 = Highcharts.chart('graph2', {
                chart: {
                    type: 'line',
                    margin: [50, 135, 46, 100],
                    style: { "fontFamily": "\"National\", sans-serif", "fontSize": "16px" },
                    events: {
                        load: function () {
                            var chart = this;
                            drawSeriesNames2(chart);
                        },
                        redraw: function () {
                            var chart = this;
                            drawSeriesNames2(chart);
                        }
                    }
                },
                title: {
                    text: 'Norske utslipp av klimagasser',
                    style: { "color": "#222222", "fontSize": "20px" }
                },

                //subtitle: {
                //    text: 'Source: thesolarfoundation.com'
                //},
                xAxis: {
                    gridLineColor: "#acafbc",
                    lineColor: "#acafbc",
                    gridLineWidth: 1,
                    endOnTick: true,
                    startOnTick: true,
                    maxPadding: 0,
                    tickWidth: 0,
                    min: startyear,
                    max: end_calcyear,
                    tickInterval: 10,
                    tickPositioner: function (min, max) {
                        var act = min,
                            ticks = [];
                        
                        while (act <= max) {
                            ticks.push(act);
                            act += this.tickInterval;
                        }
                        return ticks;
                    },
                    labels: {
                        style: {
                            color: "#222222",
                            fontSize: "16px"
                        }
                    }
                },
                yAxis: {
                    
                    minRange: 70,
                    minTickInterval: 10,
                    tickInterval: 10,
                    gridLineColor: "#acafbc",
                    lineColor: "#acafbc",
                    title: {
                        text: '[Millioner tonn CO2-ekv]',
                        style: {
                            color: "#222222",
                            width: 350
                        }
                    },
                    endOnTick: true,
                    startOnTick: true,
                    labels: {
                        x: -15,
                        style: {
                            color: "#222222",
                            fontSize: "16px"
                        }
                    }
                },
                legend: {
                    enabled: false
                },

                plotOptions: {
                    series: {
                        lineWidth: 2,
                        label: {
                            connectorAllowed: false
                        },
                        pointStart: startyear,
                        marker: {
                            enabled: false
                        },
                        tooltip: {
                            valueDecimals: 2
                        }
                    }
                },

                series: [{
                    name: 'Utslipp av klimagasser',
                    data: utslippklimagasser_before,
                    color: '#021946',
                    showInLegend: false,
                    zIndex: 12
                },
                {
                    name: 'Utslipp av klimagasser',
                    data: utslippklimagasser_after,
                    color: '#021946',
                    dashStyle: 'Dot',
                    zIndex: 11

                }
                ,
                {
                    name: 'Mål 2030 - 55% reduksjon',
                    data: to_tredjedeler_innenlands,
                    color: '#9bda5b',
                    dashStyle: 'Dash',
                    zIndex: 1

                    }
                ,
                {
                    name: 'Mål lavutslippssamfunnet - 95% reduksjon',
                    data: mal_lavutslippssammfunnet,
                    color: '#257FDC',
                    dashStyle: 'Dash',
                    zIndex: 2

                }


                ],

                responsive: {
                    rules: [{
                        condition: {
                            maxWidth: responsivewidth
                        },
                        chartOptions: {
                            chart: {
                                margin: [50, 14, 100, 30]

                                //margin: [50, 135, 46, 100],
                            },
                            plotOptions: {
                                series: {
                                    lineWidth: 2
                                }
                            },
                            xAxis: {
                                tickInterval: 20,
                                labels: {
                                    style: {
                                        fontSize: "14px"
                                    }
                                }
                            },
                            yAxis: {
                                showFirstLabel: false,
                                title: {
                                    text: null
                                },
                                labels: {
                                    x: -5,
                                    style: {
                                        fontSize: "14px"
                                    }
                                }
                            },
                            legend: {
                                layout: 'vertical',
                                align: 'left',
                                verticalAlign: 'bottom',
                                x: 20,
                                enabled: true
                            }
                        }
                    }]
                }

            });



            _.forEach(inputdata, function (obj) {
                var html = '<div data-id="{id}" class="calc_element"><div class="dot" style="background:{color}"></div><div><h3>{name}</h3><div class="showinfo"><a class="openinfo"><img src="/assets/images/ic_question.svg" alt="info"/></a><div class="textinfo">{info}<a class="closeinfo"><img src="/assets/images/ic_close.svg" alt="close"/></a></div></div></div><span class="description start">{description}</span><div class="calcvaluebox" ><span class="calcvalue"></span></div><div class="button btn_val_up"> </div><div class="button btn_val_down"> </div><input type="hidden" value="10"/></div>';

                var description = obj.description;
                html = html.replace("{id}", obj.id).replace("{color}", obj.color).replace("{name}", obj.name).replace("{description}", description).replace("{info}",obj.info);
                $(".kaya-calculations").append(html);
                updateValue(obj.id, 10);
            });

            $(window).click(function () {
                $(".textinfo").hide();
               
            });


            $('.kaya-calculations').on('click', '.textinfo', function (event) {
                event.stopPropagation();
            });
            

            $('.kaya-calculations').on('click', '.openinfo', function (event) {
                event.stopPropagation();
                $(".openinfo").not(this).next().hide();
                $(this).next().toggle();

            });
            $('.kaya-calculations').on('click', '.closeinfo', function () {
                $(this).parent().hide();
            });

            $('.kaya-calculations').on('click', '.button', function () {

                var btnelement = $(this).parent();
                var id = btnelement.data("id");
                
                var count = btnelement.find("input").val();
                
                if ($(this).hasClass("btn_val_down")) {
                    count--;
                } else {
                    count++;
                }
                
                updateValue(id, count);
                update_chart_series();
                // do something
            });

        }
    }


});

function updateValue(id, inputvalue) {
    var dataelement = _.find(inputdata, { 'id': id });
    if (inputvalue > 20)
        inputvalue = 20;
    if (inputvalue < 0)
        inputvalue = 0;
    window[dataelement.selectval] = inputvalue;
    recalc_data_after();
    recalc_utslipp_klimagasser();
    var value_percent = getPercent(window[dataelement.calcvalue]);
    value_percent = value_percent.replace(".", ",");
    var description = $("[data-id='" + id + "']").find(".description");
    
    if (description.hasClass("start")) {
        $("[data-id='" + id + "']").find(".calcvalue_pos").text(value_percent.replace("-",""));
        description.removeClass("start");
    } else {
        description.html(dataelement.description_change);
    }

    $("[data-id='" + id + "']").find(".calcvalue").text(value_percent);
    $("[data-id='" + id + "']").find("input").val(inputvalue);

    
    
}

function getPercent(val) {
    return (val * 100).toFixed(1) + " %";
};
$(document).ready(function () {
    $(".datetimeselect").click(function () {
        if (!$(this).hasClass("booked")) {
            $(".datetimeselect").removeClass("selected");
            $(this).addClass("selected");
            $("#GUID").val($(this).data("guid"));
            $("#C344").focus();
            $(".personinfo").removeClass("hidden");
            $(".cantbook").hide();
            $(".gdprinfo").removeClass("hidden");
        }
    });

});;
$(function () {

    var mySwiper = new Swiper('.swiper-container', {
        speed: 400,
        //autoHeight: true,
        navigation: {
            nextEl: '.swiper-button-next',
            prevEl: '.swiper-button-prev'
        },
        pagination: {
            el: '.swiper-pagination',
            type: 'bullets',
            clickable: true
        }
    });
});
;
$(document).ready(function () {
    if ($('.grant-form').length > 0) {
        var totalCostContainer = $('.grant-form .form-control');
        var slider = $('.grant-form-calculator .slider .range');

        initApiValues();
        initCalcValues();

        totalCostContainer.on('input', function (e) {
            var totalCosts = $(this).val();
            updateValues(totalCosts);
        });

        slider.on("input", function () {
            var totalCosts = this.value;
            updateValues(totalCosts);
        });
    }
    var grantValue = document.getElementById("grant-value");
    var slider = $('#varebil-slider-input');
    var carPictureSmal = $('.varebil-bilde.smal');
    var carPictureMedium = $('.varebil-bilde.medium');
    var carPictureLarge = $('.varebil-bilde.large');

    slider.on("input", function () {
        var sliderInput = slider.val();

        if (sliderInput == 0) {
            grantValue.innerHTML = "15 000,–";
            carPictureSmal.show();
            carPictureMedium.hide();
            carPictureLarge.hide();
        } else if (sliderInput == 1) {
            grantValue.innerHTML = "25 000,–";
            carPictureSmal.hide();
            carPictureMedium.show();
            carPictureLarge.hide();

        } else if (sliderInput == 2) {
            grantValue.innerHTML = "50 000,–";
            carPictureSmal.hide();
            carPictureMedium.hide();
            carPictureLarge.show();


        }
    });
});

$(window).bind('scroll touchmove', function (e) {
    if ($(('#grant-total').length > 0)) {
        if ($('#grant-total').text() == "0") {
            updatCountCalc()
        }
    }
});

function initCalcValues() {
    var totalCostContainer = $('.grant-form .form-control');
    var totalCosts = totalCostContainer.val();
    updateValues(totalCosts);
}

var totaltAntall = 0;

function initApiValues() {
    if ($(".grant-form-results").length > 0) {
        var apiUrl = "/energitiltakTilskuddJSON.ashx?tiltak=" + tiltak;

        $.getJSON(apiUrl, function (data) {
            totaltAntall = data.TotaltAntall;

            if (totaltAntall > 0) {

                $('.grant-form-results').removeClass("hidden");
                updatCountCalc();
            }

        });
    }
}

function updatCountCalc() {
    if ($(('#grant-total').length > 0)) {
        var countOptions = {
            useEasing: false,
            useGrouping: true,
            separator: '',
            decimal: '',
            prefix: '',
            suffix: ''
        };


        animateCountIfInViewport("grant-total", 0, totaltAntall, 0, 1, countOptions);
    }
}

function numberWithCommas(x) {
    if (x === undefined) return;

    x = dotToComma(x);
    return x.replace(/\B(?=(\d{3})+(?!\d))/g, ".");
}

function dotToComma(x) {
    if (x === undefined) return;
    return x.toString().replace(".", ",");
}

function commaToDot(x) {
    if (x === undefined) return;
    return x.toString().replace(",", ".");
}

function updateValues(totalCosts) {
    var totalCostContainer = $('.grant-form .form-control');
    var slider = $('.grant-form-calculator .slider .range');

    totalCosts = commaToDot(totalCosts);

    totalCostContainer.val(totalCosts);
    slider.val(totalCosts);

    var grantFormValueContainer = $('.grant-form-value');
    var grantedValue = totalCosts * percentage;

    if (grantedValue > maxGrantValue) {
        grantedValue = maxGrantValue;
    }
    grantedValue = numberWithCommas(Math.round(grantedValue * 100) / 100);
    grantFormValueContainer.text(grantedValue);
};
$(function () {



    $('#select_kommune').select2({
        placeholder: {
            id: '-1', // the value of the option
            text: 'VELG KOMMUNE'
        }
    });

    var kr = 0;
    var GWh = 0;
   
    $("#select_kommune").change(function () {

        var kWh = $(this).val();

        var kommune = $(this).find("option:selected").text();
        var newKr = Math.ceil(parseInt(kWh) * 0.7);
        if (parseInt(kWh) == 0) {
            $(".result").hide();
            $(".zero-result").show();
        } else if (parseInt(kWh) == 1) {
            $(".et-result").hide();
            $(".et-zero").hide();
            $(".et-pre").show();
            $(".js-toggle-secret").hide();
        } else{ 
            $(".zero-result").hide()

            var krSuffix = " mill. kr.";
            if (parseInt(newKr) < 1000000) {
                krSuffix = " Kroner";
                newKr = numberSeparator(newKr);
            } else {
                newKr = (newKr / 1000000).toFixed(2);
            }

            //Hvis under 1 GWh beregner vi kWh

            energySuffix = " GWh";

            var newGWh = (parseInt(kWh) / 1000000).toFixed(2);

            if (parseInt(kWh) < 1000000) {
                energySuffix = " kWh";
                newGWh = numberSeparator(kWh);
            }

            $(".result").show();            
            $(".kommune").html(kommune);
            $('#money').text(newKr);
            $('#energy').text(newGWh);
            $('.energySuffix').text(energySuffix);
            $('.moneySuffix').text(krSuffix);

            //var moneyOptions = {
            //    useEasing: true,
            //    useGrouping: true,
            //    separator: ' ',
            //    decimal: ' ',
            //    prefix: '',
            //    suffix: ''
            //};

            //var energyOptions = {
            //    useEasing: true,
            //    useGrouping: true,
            //    separator: ',',
            //    decimal: '.',
            //    prefix: '',
            //    suffix: ''
            //};

            //updateFyringsCalcElement("money", kr, newKr, 2, 1, krSuffix, moneyOptions);
            //updateFyringsCalcElement("energy", GWh, newGWh, 2, 1, energySuffix, energyOptions);


            GWh = newGWh;
            kr = newKr;

            $('#select_kommune').select2("close");
        }
    });

 
    $(".toggle-calc-explanation").on("click", function () {
        $('.calc-explanation').toggleClass("hidden");

        var newText = $(this).data("text");
        var oldText = $(this).text();

        $(this).text(newText);
        $(this).data("text", oldText);

    });


});

function numberSeparator(x) {
    return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, " ");
}
function updateKommuneCalcElement(element, startValue, endValue, decimals, speed, options) {

    if ($(("#" + element).length > 0)) {
        animateCount(element, startValue, endValue, decimals, speed, options);
    }
};
$(document).ready(function () {
    if (document.getElementById('vehicle-calc-wrapper')) {
        // Possible values:
        // fuel: electric, hydrogen
        // establish_fuel_station true/false
        // fossil_fuel_type: gasolin, disel
        // zero_emissions_fuel_type: electric/hydrogen

        var buttonToggleValues = {
            zero_emissions_fuel_type: {
                electric: {
                    zero_emissions_fuel_price: '0.91',
                    zero_emissions_fuel_km: '0.09'
                },
                hydrogen: {
                    zero_emissions_fuel_price: '',
                    zero_emissions_fuel_km: ''
                }
            },

            establish_fuelstation: {
                true: {
                    zero_emissions_charge_costs: '14000'
                },
                false: {
                    zero_emissions_charge_costs: '0'
                }
            },

            fossil_fuel_type: {
                gasolin: {
                    fossil_fuel_price: '13.50'
                },
                diesel: {
                    fossil_fuel_price: '11.5'
                }
            }
        };

        var vehicleTypes = {
            van: 'van',
            other: 'other'
        };

        // Default for other than van
        var defaultOtherValues = {
            vehicle_form: {
                vehicle_count: 1,
                vehicle_range: 1,
                vehicle_fuel_cost: 0,
                establish_fuelstation: 'false'
            },

            vehicle_numbers: {
                vehicle_required_return: '0',
            },

            fossil_form: {
                fossil_vehicle_price: 0,
                fossil_life_expectancy: 0,
                fossil_fuel_type: 'diesel',
                fossil_fuel_km: 0,
                fossil_fuel_price: '11.5',
                fossil_operation_costs: 0,
                fossil_parking_and_toll: 0,
                fossil_yearly_fee: 0,
                fossil_maintenance: 0,
                fossil_other_expenses: 0
            },

            zero_emissions_form: {
                zero_emissions_vehicle_price: 0,
                zero_emissions_life_expectancy_vehicle: 0,
                zero_emissions_charge_costs: 0,
                zero_emissions_life_expectancy_charge: 0,
                zero_emissions_fuel_type: 'electric',
                zero_emissions_fuel_km: 0,
                zero_emissions_fuel_price: 0,
                zero_emissions_operation_costs: 0,
                zero_emissions_parking_and_toll: 0,
                zero_emissions_yearly_fee: 0,
                zero_emissions_maintenance: 0,
                zero_emissions_other_expenses: 0
            }
        };

        // Defaults that is set when you select van
        var defaultVanValues = {
            vehicle_form: {
                vehicle_count: 1,
                vehicle_range: 11730,
                vehicle_fuel_cost: 0,
                establish_fuelstation: 'false'
            },

            vehicle_numbers: {
                vehicle_required_return: 7.7
            },

            fossil_form: {
                fossil_vehicle_price: 202500,
                fossil_life_expectancy: 10,
                fossil_fuel_type: 'diesel',
                fossil_fuel_price: '11.5',
                fossil_fuel_km: 0.09,
                fossil_parking_and_toll: 10557,
                fossil_yearly_fee: 3290,
                fossil_maintenance: 3000,
                fossil_other_expenses: 4500
            },

            zero_emissions_form: {
                zero_emissions_vehicle_price: 222000,
                zero_emissions_life_expectancy_vehicle: 10,
                zero_emissions_charge_costs: 14000,
                zero_emissions_life_expectancy_charge: 10,
                zero_emissions_fuel_type: 'electric',
                zero_emissions_fuel_km: 0.21,
                zero_emissions_fuel_price: 0.91,
                zero_emissions_parking_and_toll: 0,
                zero_emissions_yearly_fee: 455,
                zero_emissions_maintenance: 2000,
                zero_emissions_other_expenses: 3000
            }
        };

        // Contains all the data selected
        var selectedValues = {
            vehicle_form: {
                vehicle_count: 0,
                vehicle_range: 0,
                vehicle_fuel_cost: 0,
                establish_fuelstation: ''
            },

            vehicle_numbers: {
                vehicle_required_return: '',
            },

            fossil_form: {
                fossil_vehicle_price: 0,
                fossil_life_expectancy: 0,
                fossil_fuel_type: '',
                fossil_fuel_km: 0,
                fossil_fuel_price: 0,
                fossil_operation_costs: 0,
                fossil_parking_and_toll: 0,
                fossil_yearly_fee: 0,
                fossil_maintenance: 0,
                fossil_other_expenses: 0
            },

            zero_emissions_form: {
                zero_emissions_vehicle_price: 0,
                zero_emissions_life_expectancy_vehicle: 0,
                zero_emissions_charge_costs: 0,
                zero_emissions_life_expectancy_charge: 0,
                zero_emissions_fuel_type: '',
                zero_emissions_fuel_km: 0,
                zero_emissions_fuel_price: 0,
                zero_emissions_operation_costs: 0,
                zero_emissions_parking_and_toll: 0,
                zero_emissions_yearly_fee: 0,
                zero_emissions_maintenance: 0,
                zero_emissions_other_expenses: 0
            },

            result: {
                costs_fossil: 0,
                costs_zero_emissions: 0,
                cash_flow: {},
                present_value: 0,
                investment_costs: 0,
                emission_savings: 0,
                year_investment_turned_positive: 0
            }
        };

        var customLabels = {
            zero_emissions_fuel_km: {
                hydrogen: 'Forbruk ( kg H2/km )',
                electric: 'Forbruk ( kWh/km )'
            },
            zero_emissions_fuel_price: {
                hydrogen: 'Pris i kr ( kg H2/km )',
                electric: 'Pris i kr ( kWh/km )'
            }
        };

        var currentVehicleType = '';

        function lookupField(model, field) {
            return $("[data-model='" + model + "'][data-field='" + field + "']");
        }

        function resetResult() {
            selectedValues.result = {
                costs_fossil: 0,
                costs_zero_emissions: 0,
                cash_flow: {},
                present_value: 0,
                investment_costs: 0,
                emission_savings: 0,
                year_investment_turned_positive: 0
            };
        }

        // Sets defaults
        function setDefaultValues(defaultValues) {
            for (var form in defaultValues) {
                for (var field in defaultValues[form]) {
                    var elm = lookupField(form, field)[0];
                    if (elm && elm.type) {
                        if (elm.type == 'text') {
                            // In ie 9 range show up as text fields for some reason
                            // this will make it work there also.
                            if ($(elm).hasClass('range')) {
                                $(elm).val(defaultValues[form][field].toString()).change();
                                setValue($(elm), defaultValues[form][field]);
                            } else {
                                $(elm).val(defaultValues[form][field].toString());
                                setValue($(elm), defaultValues[form][field].toString());
                            }

                        } else if (elm.type == 'button') {
                            var _elm = $(elm);
                            if (_elm.attr('data-value') != defaultValues[form][field].toString()) {
                                _elm = $(_elm.siblings()[0]);
                            }

                            setValue(_elm, defaultValues[form][field].toString());
                            $(_elm.siblings()[0]).removeClass('btn-active');
                            $(_elm).addClass('btn-active');
                        } else if (elm.type == 'range') {
                            $(elm).val(defaultValues[form][field].toString()).change();
                            setValue($(elm), defaultValues[form][field]);
                        } else { }
                    }
                }
            }
        }

        // kgCO2e
        function calculateEmissionSavings() {
            var co2factor = 2.32;
            if (selectedValues.fossil_form.fossil_fuel_type == 'diesel') {
                co2factor = 2.66;
            }

            selectedValues.result.emission_savings = (
                Number(selectedValues.vehicle_form.vehicle_range)
                * Number(selectedValues.fossil_form.fossil_fuel_km)
                * co2factor
              ).toFixed(2);

            if (isNaN(selectedValues.result.emission_savings)) {
                selectedValues.result.emission_savings = 0;
            }
        }

        // Investment
        function calculateInvestmentCost() {
            selectedValues.result.investment_costs = (
              (
                (Number(selectedValues.zero_emissions_form.zero_emissions_vehicle_price) * Number(selectedValues.vehicle_form.vehicle_count)) +
                Number(selectedValues.zero_emissions_form.zero_emissions_charge_costs)
              )
              - (Number(selectedValues.fossil_form.fossil_vehicle_price) * Number(selectedValues.vehicle_form.vehicle_count))
            ).toFixed(2);
            if (isNaN(selectedValues.result.investment_costs)) {
                selectedValues.result.investment_costs = 0;
            }
        }

        // Present value  / nåverdi
        function calculatePresentValue() {
            var presentValue = 0;
            for (var year in selectedValues.result.cash_flow) {
                var cashFlow = selectedValues.result.cash_flow[year]['zero_emission'];
                var percentage = Number(selectedValues.vehicle_numbers.vehicle_required_return) * 0.01
                presentValue += cashFlow / Math.pow((1 + percentage), year);

                if (presentValue > selectedValues.result.investment_costs && selectedValues.result.year_investment_turned_positive == 0) {
                    selectedValues.result.year_investment_turned_positive = year;
                }
            }

            selectedValues.result.present_value = presentValue.toFixed(2);
        }

        // Generates cashflow used for calculation of present value
        function calculateCashFlow() {
            selectedValues.result.cash_flow = {};
            var numberOfYears = Number(selectedValues.zero_emissions_form.zero_emissions_life_expectancy_vehicle);
            var vehicleCount = Number(selectedValues.vehicle_form.vehicle_count);

            for (var x = 1; x <= numberOfYears; x++) {
                selectedValues.result.cash_flow[x] = {
                    zero_emissions_car: (
                        (Number(selectedValues.result.costs_fossil) * vehicleCount) -
                        (Number(selectedValues.result.costs_zero_emissions) * vehicleCount)
                      ),
                    one_time_cost: 0
                };

                if (x == 1) {
                    selectedValues.result.cash_flow[x]['zero_emissions_car'] += (Number(selectedValues.fossil_form.fossil_vehicle_price) * vehicleCount)
                      - (Number(selectedValues.zero_emissions_form.zero_emissions_vehicle_price) * vehicleCount);
                    selectedValues.result.cash_flow[x]['one_time_cost'] = Number(selectedValues.zero_emissions_form.zero_emissions_charge_costs);
                }

                selectedValues.result.cash_flow[x]['zero_emission'] = selectedValues.result.cash_flow[x]['zero_emissions_car'] - selectedValues.result.cash_flow[x]['one_time_cost'];
            }
        }

        // Fossilcosts, shows in a disabled input on step 3
        function calculateFossilCosts() {

            if (currentVehicleType == vehicleTypes.van) {
                selectedValues.fossil_form.fossil_operation_cost = (Number(selectedValues.vehicle_form.vehicle_range)
                * Number(selectedValues.fossil_form.fossil_fuel_km)
                * Number(selectedValues.fossil_form.fossil_fuel_price)
                ).toFixed(2);
            } else {
                selectedValues.fossil_form.fossil_operation_cost = (Number(selectedValues.vehicle_form.vehicle_fuel_cost)
                * Number(selectedValues.fossil_form.fossil_fuel_km)
                * Number(selectedValues.fossil_form.fossil_fuel_price)
                ).toFixed(2);
            }

            if (isNaN(selectedValues.fossil_form.fossil_operation_cost)) {
                selectedValues.fossil_form.fossil_operation_cost = 0;
            }
        }

        // ZeroEmissionsCosts, shows in a disabled input on step 3
        function calculateZeroEmissionsCosts() {

            if (currentVehicleType == vehicleTypes.van) {
                selectedValues.zero_emissions_form.zero_emissions_operation_costs = (Number(selectedValues.vehicle_form.vehicle_range)
                * Number(selectedValues.zero_emissions_form.zero_emissions_fuel_km)
                * Number(selectedValues.zero_emissions_form.zero_emissions_fuel_price)
                ).toFixed(2);
            } else {
                selectedValues.zero_emissions_form.zero_emissions_operation_costs = (Number(selectedValues.vehicle_form.vehicle_fuel_cost)
                * Number(selectedValues.zero_emissions_form.zero_emissions_fuel_km)
                * Number(selectedValues.zero_emissions_form.zero_emissions_fuel_price)
                ).toFixed(2);
            }

            if (isNaN(selectedValues.zero_emissions_form.zero_emissions_operation_costs)) {
                selectedValues.zero_emissions_form.zero_emissions_operation_costs = 0;
            }
        }

        // Yearly costs fossil
        function calculateFossilOperationCostsPerYear() {
            selectedValues.result.costs_fossil = (
              Number(selectedValues.fossil_form.fossil_operation_cost) +
              Number(selectedValues.fossil_form.fossil_parking_and_toll) +
              Number(selectedValues.fossil_form.fossil_yearly_fee) +
              Number(selectedValues.fossil_form.fossil_maintenance) +
              Number(selectedValues.fossil_form.fossil_other_expenses))
              * Number(selectedValues.vehicle_form.vehicle_count);
        }

        // Yearly costs Zero Emission
        function calculateZeroEmissionsOperationCostsPerYear() {
            selectedValues.result.costs_zero_emissions = (
              Number(selectedValues.zero_emissions_form.zero_emissions_operation_costs) +
              Number(selectedValues.zero_emissions_form.zero_emissions_parking_and_toll) +
              Number(selectedValues.zero_emissions_form.zero_emissions_yearly_fee) +
              Number(selectedValues.zero_emissions_form.zero_emissions_maintenance) +
              Number(selectedValues.zero_emissions_form.zero_emissions_other_expenses))
              * Number(selectedValues.vehicle_form.vehicle_count);
        }

        // Sets value and updates costs field
        // Used by all form elements for setting values
        function setValue(_target, val) {
            var targetModel = _target.attr('data-model');
            var targetField = _target.attr('data-field');

            if (val) {
                var targetValue = val;
            } else {
                var targetValue = _target.attr('data-value');
            }

            selectedValues[targetModel][targetField] = targetValue;
            calculateFossilCosts();
            calculateZeroEmissionsCosts();

            $('#fossil_operation_costs').val(selectedValues.fossil_form.fossil_operation_cost.toString());
            $('#zero_emissions_operation_costs').val(selectedValues.zero_emissions_form.zero_emissions_operation_costs.toString());

        }

        // Used for formatting in slider
        function formatSlider(format, val) {
            switch (format) {
                case 'percentage':
                    return val + " %"
                    break;
                case 'distance':
                    return val + " km"
                    break;
                case 'currency':
                    return val + " kr"
                    break;
                default:
                    return val;
            }
        }

        function formatNumber(number) {
            return number.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1 ");
        }

        // Remove earlier sliders if present
        $('input[type="range"]').rangeslider('destroy');

        // Initalize sliders
        $('input[type="range"]').rangeslider({
            polyfill: false,

            onSlide: function (pos, val) {
                var formatted_val = val;
                formatted_val = formatSlider(this.$element.attr('data-format'), val);
                this.$element.parent().siblings('.slider-output-value').val(formatted_val);
            },

            onSlideEnd: function (pos, val) {
                var _target = this.$element;
                setValue(_target, val);
            }
        });

        // Hide / show form elements for what you have selected
        function toggleFormElements() {
            if (currentVehicleType == vehicleTypes.van) {
                $('.other-form-element').hide();
                $('.van-form-element').show();
            } else {
                $('.other-form-element').show();
                $('.van-form-element').hide();
            }
        }

        // text fields
        $('.text-input').on('blur', function (ev) {
            var _target = $(ev.target);
            // replace comma with correct, so both works
            var val = _target.val();
            if (!val) {
                val = '0';
            } else {
                val = val.replace(',', '.');
            }

            setValue(_target, val);
        });

        // Buttons

        // For toggle of form parts on step 3 for mobile
        $('.btn-form-toggle').on('click', function (ev) {
            var _target = $(ev.target);
            $(_target.siblings()[0]).removeClass('btn-active');
            _target.addClass('btn-active');

            var targetForm = _target.attr('data-value');
            if (targetForm == 'form-calculation-zero_emissions') {
                $('.form-calculation-fossil').addClass('form-calculation-hide');
                $('.form-calculation-zero_emissions').removeClass('form-calculation-hide');
            } else {
                $('.form-calculation-zero_emissions').addClass('form-calculation-hide');
                $('.form-calculation-fossil').removeClass('form-calculation-hide');
            }
        });

        // Buttons used for setting form values
        $('.btn-value-toggle').on('click', function (ev) {
            var _target = $(ev.target);
            setValue(_target, null);

            var targetField = _target.attr('data-field');
            var dataValue = _target.attr('data-value');
            var labelTarget = _target.attr('data-label');

            for (field in buttonToggleValues[targetField][dataValue]) {
                var input_target = $("[name='" + field + "']");
                var input_value = buttonToggleValues[targetField][dataValue][field];
                input_target.val(input_value);
                setValue(input_target, input_value);

                // This kinda sucks, but need to toggle custom label based on field value
                // So this will work for now.
                if (labelTarget) {
                    var labelFields = labelTarget.split(',');
                    for (fieldIndex in labelFields) {
                        var labelName = labelFields[fieldIndex];
                        var labelValue = customLabels[labelName][dataValue];
                        var labelElement = $("[name='" + labelName + "']");
                        $(labelElement.siblings()[0]).text(labelValue);
                    }
                }
            }

            $(_target.siblings()[0]).removeClass('btn-active');
            _target.addClass('btn-active');
        });

        // Navigation
        $('.step2-prev').on('click', function (ev) {
            step1();
        });

        $('.step2-next').on('click', function (ev) {
            step3();
        });

        $('.step3-prev').on('click', function (ev) {
            step2();
        });

        $('.step3-next').on('click', function (ev) {
            step4();
        });

        $('.step3-prev').on('click', function (ev) {
            step2();
        });

        $('.step4-prev').on('click', function (ev) {
            step3();
        });

        // First step choose vehicle type
        $('.vehicle-button').on('click', function (ev) {
            ev.preventDefault();
            _target = $(ev.target);

            if (!_target.is("a")) {
                _target = $($(event.target).parent());
            }

            if (_target.hasClass('vehicle-van')) {
                currentVehicleType = vehicleTypes.van;
                setDefaultValues(defaultVanValues);
                toggleFormElements();
            } else {
                currentVehicleType = vehicleTypes.other;
                setDefaultValues(defaultOtherValues);
                toggleFormElements();
            }
            step2();
        });

        function step1() {
            $('.step').hide();
            $('#vehicle-calc-header').hide()
            $('.step-1').show();
            $('#main-content').removeClass('vehicle-calc-wrapper-gray');
            $(document).scrollTop(0);
        }

        function step2() {
            $('.step').hide();
            $('#vehicle-calc-header').hide()
            $('.step-2').show();
            $('#main-content').addClass('vehicle-calc-wrapper-gray');
            $(document).scrollTop(0);
        }

        function step3() {
            $('.step').hide();
            $('.step-3').show();
            $('#vehicle-calc-header').show()
            $('#main-content').addClass('vehicle-calc-wrapper-purple');
            $('#main-content').removeClass('vehicle-calc-wrapper-purple');
            $(document).scrollTop(0);
        }

        function step4() {
            resetResult();
            $('.step').hide();
            $('.step-4').show();
            $('#vehicle-calc-header').hide()
            $('#main-content').removeClass('vehicle-calc-wrapper-gray');
            $('#main-content').addClass('vehicle-calc-wrapper-purple');

            calculateFossilOperationCostsPerYear();
            calculateZeroEmissionsOperationCostsPerYear();
            calculateInvestmentCost();
            calculateCashFlow();
            calculatePresentValue();
            calculateEmissionSavings();
            // clean up when we acutally know how the calculation should be
            // Set values for result
            $('.result-years').text(selectedValues.zero_emissions_form.zero_emissions_life_expectancy_vehicle);
            $('#result-present-value').text(formatNumber(Math.ceil(selectedValues.result.present_value)));

            $('#result-zero_emissions_operation_costs').text(formatNumber(Math.ceil((selectedValues.result.costs_fossil - selectedValues.result.costs_zero_emissions))));

            $('#result-co2').text(formatNumber(Math.ceil(selectedValues.result.emission_savings)));
            $('#result-investment-cost').text(formatNumber(Math.ceil(selectedValues.result.investment_costs)));
            $('.investment-turned-positive-year').text(selectedValues.result.year_investment_turned_positive);

            // Show correct contact form
            // Toggle class to reflect negative
            if (!selectedValues.result.year_investment_turned_positive == 0 && selectedValues.result.year_investment_turned_positive < Number(selectedValues.zero_emissions_form.zero_emissions_life_expectancy_vehicle)) {
                $('.step-4-contact-positive').show();
                $('.result-header-title').show();
                $('.step-4-contact-negative').hide();
                $('.result-header-title-negative').hide();
                $('.step-4-intro').removeClass('step-4-intro-negative');
                $('.step-4-result').removeClass('step-4-result-negative');
                $('.investment-turned-positive-year-wrapper').show();
            } else {
                $('.step-4-intro').addClass('step-4-intro-negative');
                $('.step-4-result').addClass('step-4-result-negative');
                $('.step-4-contact-negative').show();
                $('.result-header-title-negative').show();
                $('.step-4-contact-positive').hide();
                $('.result-header-title').hide();
                $('.investment-turned-positive-year-wrapper').hide();
            }
            $(document).scrollTop(0);
        }

        step1();
    }
});
;
$(document).ready(function () {
    if ($('.calculator-batteri').length > 0) {

        $(".vessel-filter select").change(function () {
            var value = $(".vessel-filter select").val();
      
            if (parseInt(value) > 0) {
                $('.calculator-batteri .calculate-vessel-support').removeAttr("disabled");
                $('.calculator-batteri .calculator-value-text').removeClass("hidden");
                $('.calculator-batteri .calculator-value').text(value);
                CalculateVesselSupport();
            } else {
                $('.calculator-batteri .calculate-vessel-support').attr("disabled", "disabled");
                $('.calculator-batteri .calculator-value-text').addClass("hidden");
                $('.calculator-batteri .calculator-value').text("");
                $('.calculator-batteri .calculator-support-form-result-box-wrap').addClass("hidden");
                $('.calculator-batteri .calculator-support-disclaimer').addClass("hidden");
            }
        });

        $('.calculate-vessel-support').on("click", function () {          
            CalculateVesselSupport();
        });

            // Select your input element.
        var number = document.getElementById('kWh');

            // Listen for input event on numInput.
            number.onkeydown = function(e) {
                if((e.keyCode == 189 || e.keyCode == 109)) {
                    return false;
                }
            }

    }
});

function CalculateVesselSupport() {
    try {
        var vesselValue = parseInt($('.calculator-batteri .calculator-value').text().replace(" ", ""));
        var kWh = parseFloat($('#kWh').val());

        if (kWh > 0 && vesselValue > 0) {
            var support = parseInt(kWh * vesselValue);

            if (support > 10000000) {
                $('.calculator-batteri .calculator-support-form-result-value').html('Max 10 000 000');
                console.log("over");
            } else {
            $('.calculator-batteri .calculator-support-form-result-value').text(support.toLocaleString("nb-NO"));
                console.log("under");
            }

            $('.calculator-batteri .calculator-support-form-result-box-wrap').removeClass("hidden");
            $('.calculator-batteri .calculator-support-disclaimer').removeClass("hidden");
        } else {
            $('.calculator-batteri .calculator-support-form-result-box-wrap').addClass("hidden");
            $('.calculator-batteri .calculator-support-disclaimer').addClass("hidden");
        }
    } catch (error) {
        console.log(error);
        $('.calculator-batteri .calculator-support-form-result-box-wrap').addClass("hidden");
        $('.calculator-batteri .calculator-support-disclaimer').addClass("hidden");
    }
}
;
// Setup a klimakalkulator object

//var API_URL = 'https://api.ducky.eco/v1/calculator?scope=individual&subCategories=true';
var API_URL = '/api/ducky/climadata/';

var heatSources = {
    'Væske-til-vann-varmepumpe': 'heatSource1',
    'Luft-til-vann-varmepumpe': 'heatSource2',
    'Luft-til-luft-varmepumpe': 'heatSource3',
    'Panelovner': 'heatSource4',
    'Fjernvarme': 'heatSource6',
    'Oljefyr eller oljekamin': 'heatSource7',
    'Vet Ikke': 'heatSource5',
};

var renovateLevels = {
    '2010': 'renovateLevel1',
    '2000': 'renovateLevel2',
    '1990': 'renovateLevel3',
    '1980': 'renovateLevel4',
    '1970': 'renovateLevel5',
    '1960': 'renovateLevel5',
    '1950': 'renovateLevel5',
    '1940': 'renovateLevel5',
    '1930': 'renovateLevel5',
};

var houseAge = "";

var houseTypes = {
    'leilighet': 'apartment',
    'rekkehus': 'row',
    'enebolig': 'detached',
};

var workFrequency = {
    'public': 0,
    'coDrive': 0,
    'vehicleShared': 0,
    'vehicleElectric': 0,
    'vehicleFossil': 0,
    'vehicleHybrid': 0,
    'vehicleMotorbike': 0
};

function resetKlimakalkulator() {
    $(document).on('click', '#reset-klimakalkulator', function (event) {
        event.preventDefault();
        window.klimakalkulator = {};

        var currentStep = $(this).closest('.klimakalkulator');
        var firstStep = $('#step-0');

        firstStep.addClass('show');
        currentStep.removeClass('show');
        currentStep.find('.klimakalkulator-calculator-result').hide();
        currentStep.find('.klimakalkulator-result-action').hide();
        currentStep.find('.klimakalkulator-calculator-result-error').hide();
        currentStep.find('.klimakalkulator-calculator-result-loading').show();

        var adultsWrapper = $('.selected-adults-wrapper');
        var childrenWrapper = $('.selected-children-wrapper');

        if (adultsWrapper) {
            adultsWrapper.empty();
        }

        if (childrenWrapper) {
            childrenWrapper.empty();
        }

        $('.klimakalkulator').each(function (index, el) {
            if ($(this).attr('id') !== 'step-0') {
                var form = $(this).find('form')[0];

                if (form) {
                    form.reset();
                }

                $(this).find('.klimakalkulator-action-button').addClass('disabled');
            }
        });
    });
}

function fetchResult(inputs) {
    return new Promise(function (resolve, reject) {
        $.ajax({
            type: 'POST',
            url: API_URL,
            dataType: 'json',
            contentType: 'application/json; charset=utf-8',
            data: JSON.stringify(inputs),
            success: function (data, textStatus, jQxhr) {
                resolve(data);
            },

            error: function (jqXhr, textStatus, errorThrown) {
                reject(errorThrown);
            },
            prosessData: false
        });
    });
};

function formatHouseType() {
    var key = Object
        .keys(houseTypes)
        .filter(function (key) {
            return houseTypes[key] === window.klimakalkulator.household.type
        })[0];

    if (key === 'hybel') {
        $('#comparison-type').text('på ' + key);
    } else {
        $('#comparison-type').text('i ' + key);
    }
};

function drawMainChart(data) {
    $('#main-chart-result-value').text(numeral(data.totalCo2Kg).format('0,0'));
    mainResultChart.data.datasets[0].data[0] = data.categories.energy.percent;
    mainResultChart.data.datasets[0].data[1] = data.categories.food.percent;
    mainResultChart.data.datasets[0].data[2] = data.categories.transport.percent;
    mainResultChart.data.datasets[0].data[3] = data.categories.consumption.percent;
    mainResultChart.data.datasets[0].data[4] = data.categories.public.percent;

    mainResultChart.update();
    $('#klimakalkulator-main-chart-legends').html(mainResultChart.generateLegend());
};

function drawSubCharts(element, data) {
    var subChartValue = $(element).find('#sub-chart-result-value');
    var subChartPercent = $(element).find('#sub-chart-result-value-percent');
    var subCategories = data.categories.energy.subCategories;

    houseConsumptionChart.data.datasets[0].data[0] = subCategories.heat.percent;
    houseConsumptionChart.data.datasets[0].data[1] = 100 - subCategories.heat.percent;
    houseConsumptionChart.update();

    waterConsumptionChart.data.datasets[0].data[0] = subCategories.water.percent;
    waterConsumptionChart.data.datasets[0].data[1] = 100 - subCategories.water.percent;
    waterConsumptionChart.update();

    var lightAndElectronics = subCategories.electronics.percent + subCategories.light.percent;

    electricityConsumptionChart.data.datasets[0].data[0] = lightAndElectronics;
    electricityConsumptionChart.data.datasets[0].data[1] = 100 - lightAndElectronics;
    electricityConsumptionChart.update();

    if ($(element).data('chart-data-type')) {
        var subcategoryType = $(element).data('chart-data-type');
        var energySubCategory = data.categories.energy.subCategories[subcategoryType];
        var coKg = energySubCategory.coKg;
        var percent = energySubCategory.percent;

        if (subcategoryType == "electronics") {
            coKg += data.categories.energy.subCategories["light"].coKg;
            percent += data.categories.energy.subCategories["light"].percent;
        }

        subChartValue.text(numeral(coKg).format('0'));
        subChartPercent.text(percent + '%')
    }
};

function getHouseAgeId() {

    //59	Bolig bygd før 1960
    //60	Bolig bygd mellom 1960 og 1987
    //63	Bolig bygd etter 1987

    if (houseAge == 1930 || houseAge == 1940 || houseAge == 1950) {
        return 59;
    } else if (houseAge == 1960 || houseAge == 1970 || houseAge == 1980) {
        return 60;
    } else if (houseAge == 1990 || houseAge == 2000 || houseAge == 2010) {
        return 63;
    } else {
        return 63;
    }

}

function getHeatSourceExcludeId(heatSource) {

    switch (heatSource) {
        case "heatSource1":
            return 70;
            break;
        case "heatSource2":
            return 71;
            break;
        case "heatSource3":
            return 72;
            break;
        case "heatSource4":
            return 73;
            break;
        case "heatSource6":
            return 74;
            break;
        default:
            return 0;
            break;
    }

}

function showTipsList() {
    var houseAgeId = getHouseAgeId();
    var houseType = window.klimakalkulator.household.type;
    var heatSource = window.klimakalkulator.energy.heatSource;
    var excludeArticlesByHeatSource = getHeatSourceExcludeId(heatSource);

    if (houseType == "apartment") {
        houseType = "Leilighet";
    } else if (houseType == "row") {
        houseType = "Rekkehus";
    } else if (houseType = "detached") {
        houseType = "Enebolig";
    }

    $('.klimakalkulator-result-articles .item[data-house-type="' + houseType + '"][data-house-age="' + houseAgeId + '"]').removeClass("hidden");
    $('.klimakalkulator-result-articles .item[data-house-type="' + houseType + '"][data-house-age="0"]').removeClass("hidden");
    $('.klimakalkulator-result-articles .item[data-house-type="0"][data-house-age="' + houseAgeId + '"]').removeClass("hidden");


    //Hide excluded articles
    if (excludeArticlesByHeatSource != 0) {
        $('.klimakalkulator-result-articles .item[data-exclude*="' + excludeArticlesByHeatSource + '"]').addClass("hidden");
    }

    //Remove duplicate articles
    $('.klimakalkulator-result-articles .item:not(.hidden)').each(function () {
        var id = $(this).data("id");
        $('.klimakalkulator-result-articles .item[data-id="' + id + '"]').addClass("hidden")
        $('.klimakalkulator-result-articles .item[data-id="' + id + '"]:first').removeClass("hidden")
    });

}

function showResult() {
    $('.klimakalkulator-calculator-result-loading').hide();
    $('.klimakalkulator-calculator-result').show();
};

function hideOilSection() {
    $('.klimakalkulator-sub-charts.oil').hide();
};

function showError() {
    $('.klimakalkulator-calculator-result-loading').hide();
    $('.klimakalkulator-calculator-result-error')
        .html('Kunne ikke laste resultatene. Vær så snill, <a href="#" id="reset-klimakalkulator">prøv på nytt.</a>')
        .show();
};

$(function () {
    resetKlimakalkulator();

    window.klimakalkulator = {};
    var buttonOption = $('.klimakalkulator-form-calculator-body.options .klimakalkulator-form-option');

    $(buttonOption).click(function (event) {
        event.preventDefault();
        var name = $(this).attr('name');
        var model = $(this).data('model');

        if (window.klimakalkulator[model] === undefined) {
            window.klimakalkulator[model] = {};
        }

        if (heatSources[$(this).text().trim()]) {
            window.klimakalkulator[model][name] = heatSources[$(this).text().trim()];
        } else if (houseTypes[$(this).text().trim()]) {
            window.klimakalkulator[model][name] = houseTypes[$(this).text().trim()];
        } else if (name === 'workFrequency') {
            var fieldValue = $(this).data('value');
            var workFrequencyModified = Object.assign({}, workFrequency);
            workFrequencyModified[fieldValue] = 5;
            window.klimakalkulator[model][name] = workFrequencyModified;
        } else {
            window.klimakalkulator[model][name] = $(this).text().trim();
        }
    });

    $(document).on('click', '.klimakalkulator-action-button', function (event) {
        event.preventDefault();
        var isForm = $(this).data('form');
        var isSubmit = $(this).data('submit');

        if (isForm) {
            var form = $(this).closest('.klimakalkulator-body').find('form');
            var model = $(form).data('model');
            var nestedModel = $(form).data('nested-model');

            $(form).find('input').each(function (index, el) {
                var name = $(el).attr('name');

                if (window.klimakalkulator[model] === undefined) {
                    window.klimakalkulator[model] = {};
                }

                if (nestedModel) {
                    if (window.klimakalkulator[model][nestedModel] === undefined) {
                        window.klimakalkulator[model][nestedModel] = {};
                    }
                    window.klimakalkulator[model][nestedModel][name] = parseInt($(el).val());
                } else {
                    if (renovateLevels[$(el).val()]) {
                        houseAge = $(el).val();
                        window.klimakalkulator[model][name] = renovateLevels[$(el).val()];
                    } else {
                        window.klimakalkulator[model][name] = parseInt($(el).val());
                    }
                }
            });
        }

        if (isSubmit) {
            var heatSource4Percent;
            var heatSource4Value;
            var averageValue;
            var currentPromise;

            function drawCharts(data) {
                if (window.klimakalkulator.energy.heatSource === 'heatSource7') {
                    var heatSource7Value = data.categories.energy.subCategories.heat.coKg;
                    var reduction = numeral(((heatSource4Value) / heatSource7Value) * 100).format('0');
                    $('#sub-chart-oil-result-value-percent').text(reduction + '%');
                    $('#sub-chart-oil-result-value').text(numeral(heatSource4Value).format('0'));
                    var carRides = (heatSource7Value - heatSource4Value) / 127;
                    $('#sub-chart-result-value-times').text(numeral(carRides).format('0'));
                    $('.klimakalkulator-sub-charts.oil').show();
                    $('.klimakalkulator-result-articles').hide();
                    $('.klimakalkulator-result-action').show();
                } else {
                    hideOilSection();
                    $('.klimakalkulator-result-more-content').hide();
                    $('.klimakalkulator-result-action').show();
                    $('.klimakalkulator-result-articles').show();
                }

                if (averageValue > data.totalCo2Kg) {
                    var totalPercent = (averageValue / data.totalCo2Kg) * 100;
                    var postiveDifference = totalPercent - 100;
                    $('#comparison-value')
                        .text(numeral(postiveDifference)
                            .format('0') + '% mindre enn');

                    $('#klimakalkulator-chart-result-icon')
                        .attr('src', '/assets/images/thumbs-up-icon.svg');
                } else if (data.totalCo2Kg > averageValue) {
                    var totalPercent = (data.totalCo2Kg / averageValue) * 100;
                    var negativeDifference = totalPercent - 100;

                    $('#comparison-value')
                        .text(numeral(negativeDifference)
                            .format('0') + '% mer enn');
                }

                formatHouseType();
                drawMainChart(data);

                $('.klimakalkulator-sub-chart-item').each(function (index, el) {
                    drawSubCharts(this, data);
                });

                showTipsList();

                showResult();
            }

            var averageInputs = {
                household: {
                    members: {
                        adults: window.klimakalkulator.household.members.adults,
                        children: window.klimakalkulator.household.members.children,
                    },
                    sqm: 110,
                    income: window.klimakalkulator.household.income,
                    type: 'row',
                },
            };

            fetchResult(averageInputs).then(function (averageData) {
                averageValue = averageData.totalCo2Kg;

                if (window.klimakalkulator.energy.heatSource === 'heatSource7') {
                    var heatSource4 = $.extend(true, {}, window.klimakalkulator);
                    heatSource4.energy.heatSource = 'heatSource4';

                    fetchResult(heatSource4).then(function (oilData) {
                        heatSource4Percent = oilData.categories.energy.subCategories.heat.percent;
                        heatSource4Value = oilData.categories.energy.subCategories.heat.coKg;

                        fetchResult(window.klimakalkulator).then(function (data) {
                            drawCharts(data)
                        }).catch(function (error) {
                            showError();
                        });
                    }).catch(function (error) {
                        showError();
                    });
                } else {
                    fetchResult(window.klimakalkulator).then(function (data) {
                        drawCharts(data);
                    }).catch(function (error) {
                        showError();
                    });
                }
            }).catch(function (error) {
                showError();
            });
        }
    });
});
;
// Handles navigation between steps

$(function () {
    $(document).on('click', '.klimakalkulator-action-button', function (event) {
        event.preventDefault();
        var nextStep = document.getElementById($(this).data('next'));
        var isForm = document.getElementById($(this).data('form'));

        if (nextStep) {
            $(this).closest('.klimakalkulator').removeClass('show');
            $(nextStep).addClass('show');
        }
    });

    $(document).on('click', '.klimakalkulator-form-option', function (event) {
        event.preventDefault();
        var currentStep = $(this).closest('.klimakalkulator');
        var navButton = currentStep.find('.klimakalkulator-action-button');
        var nextStep = document.getElementById($(navButton).data('next'));

        if (nextStep) {
            currentStep.removeClass('show');
            $(nextStep).addClass('show');
        }
    });
});
;
var naringsbyggchart,
    type = 'column',
    selectedYear,
    selectedCategory,
    selectedValue,
    selectedTemperaturAvhengigAndel,
    calculatedGraddagstall,
    calculatedValue;

var gradientStart = '#FFA201';
var gradientMiddle = '#F3522E';
var gradientEnd = '#EF3340';
var years = [];
var sliderArea = 0;
var sliderEnergy = 0;

$(function () {

    if ($(".naringskalkulator-form-calculator").length) {
        var obj = $(".naringskalkulator-form-calculator").data("json");
        years = obj.years;

        if (typeof (years) !== 'undefined') {
            if (years.length > 0) {

                calculatedValue = 0;
                calculatedGraddagstall = 0;
                selectedTemperaturAvhengigAndel = 0,

                    $(".naringskalkulator-form-calculator .year-filter select").change(function () {
                        SetSelectedValue();
                    });

                $(".naringskalkulator-form-calculator .category-filter select").change(function () {
                    SetSelectedValue();
                });


                $.ajax({
                    type: 'GET',
                    url: '/met/all_locations/'
                }).then(function (data) {

                    $('.location-filter select').select2({
                        placeholder: "Skriv inn et sted",
                        dropdownCssClass: "location-dropdown",
                        language: 'no',
                        disabled: true
                    });

                    var locations = JSON.parse(data);

                    for (var i = 0; i < locations.length; i++) {
                        var location = locations[i];
                        var coordinates = location.geometry.coordinates;

                        if (coordinates.length > 0) {
                            var lng = coordinates[0];
                            var lat = coordinates[1];

                            var count = _.filter(locations, function (o) { if (o.name === location.name) return o }).length;

                            var optionText = location.name;
                            if (count > 1) {
                                var feature = location.feature;

                                var N = lat.toString().split(".")[0];
                                var Ø = lng.toString().split(".")[0];

                                optionText += " (N" + N + " " + "Ø" + Ø + ")";
                            }



                            var newOption = new Option(optionText, location.name, false, false);

                            newOption.setAttribute("data-lng", lng);
                            newOption.setAttribute("data-lat", lat);
                            $('.location-filter select').append(newOption).trigger('change');

                        }

                        if (i == locations.length - 1) {
                            $('.naringskalkulator-form-calculator .loader').addClass("hidden");
                            $('.location-filter select').removeAttr('disabled');
                        }
                    }

                    $('.location-filter select').on('select2:select', function (e) {
                        var data = e.params.data;

                        var lng = $('.location-filter select option:selected').data("lng");
                        var lat = $('.location-filter select option:selected').data("lat");

                        var postObject = { lng, lat };

                        $('.naringskalkulator-form-calculator .graph-aside .naringskalkulator-graph').addClass("hidden");

                        if (selectedTemperaturAvhengigAndel > 0 && lat > 0 && lng > 0) {
                            $('.naringskalkulator-form-calculator .graph-aside .loader').removeClass("hidden");
                        }

                        if (lat > 0 && lng > 0) {
                            $('.location-error').addClass("hidden");

                            $.ajax({
                                type: 'POST',
                                url: '/met/graddag/',
                                data: JSON.stringify(postObject),
                                dataType: "json",
                                contentType: "application/json; charset=utf-8"
                            }).then(function (result) {
                                $('.naringskalkulator-form-calculator .graph-aside .loader').addClass("hidden");
                                if (calculatedValue > 0 || selectedTemperaturAvhengigAndel > 0) {
                                    $('.naringskalkulator-form-calculator .graph-aside .naringskalkulator-graph').removeClass("hidden");
                                }
                                calculatedGraddagstall = result;
                                SetCalculatedValue();

                                if (calculatedGraddagstall == 0) {
                                    $('.naringskalkulator-form-calculator .graph-aside .naringskalkulator-graph').addClass("hidden");
                                    $('.location-error').removeClass("hidden");
                                }
                            });
                        }

                    });

                });

                $('.naringskalkulator-graph').highcharts({
                    chart: {
                        type: type,
                        backgroundColor: 'transparent',
                        style: {
                            fontFamily: 'National'
                        }
                    },
                    credits:
                    {
                        enabled: false
                    },
                    legend: {
                        enabled: true
                    },
                    title: {
                        text: ''
                    },
                    subTitle: {
                        text: ''
                    },
                    tooltip: {
                        shared: false,
                        crosshairs: false,
                        enabled: false
                    },
                    plotOptions: {
                        series: {
                            dataLabels: {
                                align: 'center',
                                enabled: true,
                                useHTML: true,
                                overflow: 'allow',
                                crop: false,
                                formatter: function () {

                                    var html = "<div class='datalabel'><div class='datalabel-value'>" + Math.round(this.y) + "</div><div>kWh/oppvarmet<br/>bruksareal m<sup>2</sup></div></div>";

                                    if (this.series.name == "Ditt bygg" && isFinite(calculatedValue) && this.y > 0 && selectedValue > 0) {

                                        var infoBubbleVal = 0;
                                        var infoBubbleTxt = "";
                                        var infoBubbleTmp = "mer";

                                        var roundedCalculatedValue = Math.round(calculatedValue);
                                        var roundedSelectedValue = Math.round(selectedValue);

                                        if (roundedCalculatedValue > roundedSelectedValue) {
                                            infoBubbleVal = roundedCalculatedValue - roundedSelectedValue;
                                            infoBubbleTmp = "mer";
                                        } else {
                                            infoBubbleVal = roundedSelectedValue - roundedCalculatedValue
                                            infoBubbleTmp = "mindre";
                                        }

                                        infoBubbleVal = Math.round(infoBubbleVal);
                                        infoBubbleTxt = infoBubbleVal + " kWh/m<sup>2</sup> " + infoBubbleTmp;

                                        html += "<div class='naringskalkulator-graph-infobubble'>Du bruker <span>" + infoBubbleTxt + "</span> enn snittet for din bygningskategori.</div>";
                                    }
                                    return html;
                                }
                            },
                            enableMouseTracking: false,
                            states: {
                                inactive: {
                                    opacity: 1
                                }
                            },
                            events: {
                                legendItemClick: function () {
                                    return false;
                                }
                            },
                            pointPadding: 0.2,
                            borderRadius: '10'
                        }
                    },
                    yAxis: {
                        visible: false,
                        min: -5,
                        startOnTick: false
                    },
                    xAxis: {
                        categories: [''],
                        visible: true,
                        offset: 20
                    },
                    series: [{
                        name: '"Normalbygg"',
                        data: [0],
                        color: '#FFF',
                        borderColor: '#000'
                    },
                    {
                        name: 'Ditt bygg',
                        color: {
                            linearGradient: { x1: 0, x2: 0, y1: 0, y2: 1 },
                            stops: [
                                [0, gradientStart],
                                [0.5, gradientMiddle],
                                [1, gradientEnd]
                            ]
                        },
                        dataLabels: {
                            className: 'calculated-label'
                        },
                        data: [0]
                    }
                    ]
                });

                naringsbyggchart = $('.naringskalkulator-graph').highcharts();

                var areaSlider = $('.area-slider .range');
                var energySlider = $('.energy-slider .range');

                MoveOutput(areaSlider);
                MoveOutput(energySlider);


                sliderArea = $(".naringskalkulator-form-calculator").data("slider-area");
                sliderEnergy = $(".naringskalkulator-form-calculator").data("slider-energy");
                
                areaSlider.on("input", function () {
                    sliderArea = this.value;
                    $('.area-output').val(sliderArea);
                    SetCalculatedValue();
                    MoveOutput($(this));
                });

                energySlider.on("input", function () {
                    sliderEnergy = this.value;
                    $('.energy-output').val(sliderEnergy);
                    SetCalculatedValue();

                    MoveOutput($(this));

                });
            }

            $('.location-help').on("click", function (e) {
                e.preventDefault();
                $(this).toggleClass("active");
                $('.location-help-text').toggleClass("hidden");
            });

            $('.bygg-help').on("click", function (e) {
                e.preventDefault();
                $(this).toggleClass("active");
                $('.bygg-help-text').toggleClass("hidden");
            });
        }
    }
});


function MoveOutput(slider) {
    var control = slider,
        controlMin = control.attr('min'),
        controlMax = control.attr('max'),
        controlVal = control.val();

    var range = controlMax - controlMin;

    var output = control.parent().find('output');
    var controlThumbWidth = 26; //output.width();

    var position = ((controlVal - controlMin) / range) * 100;
    var positionOffset = Math.round(controlThumbWidth * position / 100) - (controlThumbWidth / 2);// - (output.width() / 2);

    var hideMinRange = 0.1;
    var hideMaxRange = 0.8;

    if ($(window).width() < 500) {
        hideMinRange = 0.2;
        hideMaxRange = 0.6;
    }

    if (controlVal < controlMax * hideMinRange) {
        control.parent().find(".slider-min").hide();
    } else {
        control.parent().find(".slider-min").show();
    }


    if (controlVal > controlMax * hideMaxRange) {
        control.parent().find(".slider-max").hide();
    } else {
        control.parent().find(".slider-max").show();
    }

    var formattedVal = Number(controlVal).toLocaleString('nb');

    output
        .css('left', 'calc(' + position + '% - ' + positionOffset + 'px)')
        .text(formattedVal);
}

function SetSelectedValue() {
    selectedYear = parseInt($(".naringskalkulator-form-calculator .year-filter select").val());
    selectedCategory = $(".naringskalkulator-form-calculator .category-filter select").val();

    if (selectedYear > 0 && selectedCategory != "-1") {

        var selectedYearArr = years.filter(function (x) {
            if (x.year == selectedYear) {
                return x;
            }
        });
        if (selectedYearArr.length > 0) {
            var selectedCategoryArr = selectedYearArr[0].categories.filter(function (y) {

                if (y.name == selectedCategory) {
                    return y;
                }
            });

            if (selectedCategoryArr.length > 0) {

                selectedValue = selectedCategoryArr[0].value;
                selectedTemperaturAvhengigAndel = selectedCategoryArr[0].temperaturavhengigandel;

                naringsbyggchart.series[0].setData([selectedValue]);
                if (selectedValue > 0) {
                    $('.naringskalkulator-graph').removeClass("hidden");
                    SetCalculatedValue();
                }
            }
        }

    }
}

function SetCalculatedValue() {

    if (calculatedGraddagstall > 0 && selectedTemperaturAvhengigAndel > 0) {
        var normalgradTallOslo = 4052;
        var energiBruk = parseInt(sliderEnergy)
        var graddagsKorrigertEnergibruk = energiBruk * ((selectedTemperaturAvhengigAndel * normalgradTallOslo / calculatedGraddagstall) + (1 - selectedTemperaturAvhengigAndel));

        calculatedValue = graddagsKorrigertEnergibruk / parseInt(sliderArea);


        naringsbyggchart.series[1].setData([calculatedValue]);

        if (calculatedValue > 0) {
            $('.naringskalkulator-graph').removeClass("hidden");
        }
    }

    ChangeGraphColor();
}

function ChangeGraphColor() {

    var roundedCalculatedValue = Math.round(calculatedValue);
    var roundedSelectedValue = Math.round(selectedValue);

    if (roundedCalculatedValue > roundedSelectedValue || selectedValue == undefined) {
        $('.calculated-label').addClass("exceeding");
    } else {
        $('.calculated-label').removeClass("exceeding");
    }

    if (isFinite(calculatedValue) && calculatedValue > 0 && selectedValue > 0) {

        if (roundedCalculatedValue > roundedSelectedValue) {
            gradientStart = '#FFA201';
            gradientMiddle = '#F3522E';
            gradientEnd = '#EF3340';

        } else {
            gradientStart = '#00B74F';
            gradientMiddle = '#0C7C4C';
            gradientEnd = '#201947';
        }


        naringsbyggchart.series[1].update({
            color: {
                linearGradient: { x1: 0, x2: 0, y1: 0, y2: 1 },
                stops: [
                    [0, gradientStart],
                    [0.5, gradientMiddle],
                    [1, gradientEnd]
                ]
            }
        });
    }


}
;
numeral.register('locale', 'no', {
    delimiters: {
        thousands: ' ',
        decimal: ','
    },
    abbreviations: {
        thousand: 'k',
        million: 'm',
        billion: 'b',
        trillion: 't'
    },
    //ordinal: function (number) {
    //    return number === 1 ? 'er' : '�me';
    //},
    currency: {
        symbol: 'NOK'
    }
});

// switch between locales
numeral.locale('no');

var nnvarr0;
var nnvarr1;

$(document).ready(function () {
    if (document.getElementById('industrikalkulator-step-1')) {
        window.industrikalkulator = {};
        $.applyDataMask();

        $("input.form-control").each(function () {
            saveInputValue($(this).attr('name'), $(this).data("value"));
        });

        // Navigation through back/forward buttons
        //history.replaceState({ step: 'industrikalkulator-step-1' }, null, '?step=1');
        $(window).bind('popstate', function (event) {
            $('.industrikalkulator').removeClass('show');

            if (!event.originalEvent.state) {
                $('#industrikalkulator-step-1').addClass('show');
            } else {
                $('#' + event.originalEvent.state['step']).addClass('show');
            }

            $(document).scrollTop(0);
        });

        // Handles navigation between steps
        $(document).on('click', '.industrikalkulator-action-button', function (event) {
            event.preventDefault();

            var nextStepId = $(this).data('next');
            var nextStepNumber = nextStepId.match(/\d/)[0];
            var nextStep = document.getElementById(nextStepId);

            if (nextStep) {
                $(this).closest('.industrikalkulator').removeClass('show');
                $(nextStep).addClass('show');

                //history.pushState({ step: nextStepId }, null, '?step=' + nextStepNumber);
            }

            $(document).scrollTop(0);
        });

        // Page 1
        $(document).on('click', '.industrikalkulator-energy-measure-btn', function (event) {
            event.preventDefault();

            $('#industrikalkulator-step-1-action-button').removeClass('disabled');

            var measureType = $(this).attr('name');
            window.industrikalkulator['measure_type'] = measureType;

            switch (window.industrikalkulator['measure_type']) {
                case 'effectiveness':
                    $('span.industrikalkulator-measure-type-title').html('effektiviseringstiltak');
                    $('label.industrikalkulator-measure-type-price-label').html('Energipris');
                    $('div.industrikalkulator-energy-amount-result-label').html('Redusert energibruk');
                    break;
                case 'conversion':
                    $('span.industrikalkulator-measure-type-title').html('konverteringstiltak');
                    $('label.industrikalkulator-measure-type-price-label').html('Prisdifferanse <span class="industrikalkulator-tip-icon">?</span>');
                    $('div.industrikalkulator-energy-amount-result-label').html('Konvertert eller gjenvunnet mengde energi');
                    break;
                case 'production':
                    $('span.industrikalkulator-measure-type-title').html('energiproduksjon');
                    $('label.industrikalkulator-measure-type-price-label').html('Energipris');
                    $('div.industrikalkulator-energy-amount-result-label').html('Produsert mengde energi');
                    break;
            }

            $('.industrikalkulator-energy-measure-btn').removeClass('active')
            $(this).addClass('active');

            $('.industrikalkulator-form-select').hide();
            $('.industrikalkulator-form-select[data-type="' + measureType + '"]').toggle();
        });

        $(document).on('input', '.industrikalkulator-form-calculator input[type="text"]', function () {
            var rawValue = $(this).cleanVal();
            var slider = $(event.target).siblings('.slider').find('input');

            if (rawValue != "") {
                slider.val(rawValue);
                slider.rangeslider('update', true, false);
                saveInputValue($(this).attr('name'), rawValue);

                calculateRevenuePerYear();
            }
        });

        // Validation on energy amount field
        $(document).on('input', '.industrikalkulator-form-calculator input[name="energy_amount"]', function () {
            var minEnergyAmount = 100000;

            if (window.industrikalkulator['energy_amount'] < minEnergyAmount) {
                $(this).addClass('invalid');
                $(this).parent().find('.industrikalkulator-tip-text').show();
                $('#industrikalkulator-step-2-action-button').addClass('disabled');
            } else {
                $(this).removeClass('invalid');
                $(this).parent().find('.industrikalkulator-tip-text').hide();
                $('#industrikalkulator-step-2-action-button').removeClass('disabled');
            }
        });

        // Page 2
        // Remove earlier sliders if present
        $('input[type="range"]').rangeslider('destroy');

        // Initalize sliders
        $('input[type="range"]').rangeslider({
            polyfill: false,

            onSlide: function (pos, val) {
                // if step is float number
                if (Number(this.step) === this.step && this.step % 1 !== 0) {
                    val = val.toFixed(1);
                }

                var input = this.$element.parent().siblings('input');
                var maskedValue = input.masked(val);

                input.val(maskedValue);
                saveInputValue(input.attr('name'), val);

                calculateRevenuePerYear();
            }
        });

        $(document).on('click', '.industrikalkulator-tip-icon', function (event) {
            $(this).parent().parent().find('.industrikalkulator-tip-text').toggleClass('show');
        });

        // Page 3 (results)
        $(document).on('click', '#industrikalkulator-step-2-action-button', function (event) {
            var finance = new Finance();

            var resultsElement = $('.industrikalkulator-results');
            //console.log(window.industrikalkulator);

            var moreThanFortyPercentInvestment = window.industrikalkulator['enova_investment_cost'] / (window.industrikalkulator['current_cost'] - window.industrikalkulator['alternative_cost']) > 0.4

            var energyAmount = window.industrikalkulator['energy_amount'];
            var costOfInvestment = window.industrikalkulator['current_cost'] - window.industrikalkulator['alternative_cost'];
            var enovaInvestmentCost = window.industrikalkulator['enova_investment_cost'];
            var returnRequirement = window.industrikalkulator['return_requirement'];

            if (moreThanFortyPercentInvestment) {
                enovaInvestmentCost = (window.industrikalkulator['current_cost'] - window.industrikalkulator['alternative_cost']) * 0.4;
            }
            var maintenance_costs = 0;
            if (window.industrikalkulator['maintenance_costs']) {
                maintenance_costs = window.industrikalkulator['maintenance_costs'];
            }
            var cashFlowWithoutSupport = window.industrikalkulator['revenue_per_year'] - maintenance_costs;

            var cashFlowsWithoutSupport = [-costOfInvestment];

            var cashFlowWithSupport = window.industrikalkulator['revenue_per_year'] - maintenance_costs;
            var cashFlowsWithSupport = [enovaInvestmentCost - costOfInvestment];
            var cashFlowMaxinvestment = [0];
            //console.log(window.industrikalkulator['alternative_cost'] + enovaInvestmentCost - window.industrikalkulator['current_cost']);
            //console.log(enovaInvestmentCost - costOfInvestment);

            for (var i = 0; i < window.industrikalkulator['project_timespan']; i++) {
                cashFlowsWithoutSupport.push(cashFlowWithoutSupport);
                cashFlowsWithSupport.push(cashFlowWithSupport);
                cashFlowMaxinvestment.push(cashFlowWithoutSupport);
            }

            var interestWithoutSupport = null;
            var interestWithSupport = null;

            var netPresentValueWithoutSupport = null;
            var netPresentValueWithSupport = null;
            var netPresentValueMaxInvestment=null;
            nnvarr0 = cashFlowsWithoutSupport;
            nnvarr1 = cashFlowsWithSupport;

            try {
                interestWithoutSupport = finance.IRR.apply(null, cashFlowsWithoutSupport);
            } catch (error) {
                interestWithoutSupport = 0;
            }
            try {
                interestWithSupport = finance.IRR.apply(null, cashFlowsWithSupport);
            } catch (error) {
                interestWithSupport = 0;
            }
            try {
                netPresentValueWithoutSupport = finance.NPV.apply(null, [returnRequirement].concat(cashFlowsWithoutSupport));
            } catch (error) {
                netPresentValueWithoutSupport = 0;
            }
            try {

                netPresentValueWithSupport = finance.NPV.apply(null, [returnRequirement].concat(cashFlowsWithSupport));
            } catch (error) {
                netPresentValueWithSupport = 0;
            }

            try {
                console.log(cashFlowMaxinvestment);
                netPresentValueMaxInvestment = finance.NPV.apply(null, [returnRequirement].concat(cashFlowMaxinvestment));
            } catch (error) {
                netPresentValueMaxInvestment = 0;
            }

            resultsElement.find('#result-energy_amount').text(numeral(energyAmount).format('0,0'));
            resultsElement.find('#result-additional_cost_of_investment').text(numeral(costOfInvestment).format('0,0'));
            resultsElement.find('#result-enova_investment_cost').text(numeral(enovaInvestmentCost).format('0,0'));
            resultsElement.find('#result-interest_without_support').text(numeral(interestWithoutSupport).format('0.00'));
            resultsElement.find('#result-interest_with_support').text(numeral(interestWithSupport).format('0.00'));
            resultsElement.find('#result-net_present_value_without_support').text(numeral(netPresentValueWithoutSupport).format('0,0'));
            resultsElement.find('#result-net_present_value_with_support').text(numeral(netPresentValueWithSupport).format('0,0'));

            if (moreThanFortyPercentInvestment) {
                $('.industrikalkulator-forty-percent-rule').show();
            } else {
                $('.industrikalkulator-forty-percent-rule').hide();
            }

            const maxInterest = 10;
            

            if (interestWithSupport < 0) { //implisitt at interestWithoutSupport <0
                //ikke l�nnsomt
                $(".result-max-investment").text(numeral(netPresentValueMaxInvestment).format('0,0'));
                $('.industrikalkulator-results-description-negative.version-1').hide();
                $('.industrikalkulator-results-description-negative.version-2').show();
                $('.industrikalkulator-results-description-negative.version-3').hide();
                $('.industrikalkulator-results-description-positive').hide();
                
                //if (interestWithoutSupport > returnRequirement) {
            } else if (interestWithSupport > 0 && interestWithSupport <= maxInterest) {
                $('.industrikalkulator-results-description-negative').hide();
                $(".version-2-topositive").hide();
                if (interestWithSupport < returnRequirement) {
                    $('.industrikalkulator-results-description-positive.version-1').show();
                    $('.industrikalkulator-results-description-positive.version-2').hide();
                } else {
                    $('.industrikalkulator-results-description-positive.version-1').hide();
                    $('.industrikalkulator-results-description-positive.version-2').show();
                    //if (interestWithoutSupport > returnRequirement)
                    //    $(".version-2-topositive").show();

                }
                
                
                    
            }
            else if(interestWithoutSupport<0){
                $('.industrikalkulator-results-description-negative.version-1').hide();
                $('.industrikalkulator-results-description-negative.version-2').hide();
                $('.industrikalkulator-results-description-negative.version-3').show();
                $('.industrikalkulator-results-description-positive').hide();
            }
            else {
                $('.industrikalkulator-results-description-negative.version-1').show();
                $('.industrikalkulator-results-description-negative.version-2').hide();
                $('.industrikalkulator-results-description-negative.version-3').hide();
                $('.industrikalkulator-results-description-positive').hide();
            }

            //else if (interestWithoutSupport > maxInterest) {
            //    //Dette prosjektet er s� l�nnsomt at du ikke trenger v�r st�tte
            //    $('.industrikalkulator-results-description-negative').show();
            //    $('.industrikalkulator-results-description-positive.version-1').hide();
            //    $('.industrikalkulator-results-description-positive.version-2').hide();
            //}
            //else if (interestWithSupport <= returnRequirement && interestWithSupport>0) {
            //    //Tiltaket er l�nnsomt men ikke i henhold til ditt avkastningskrav
            //    $('.industrikalkulator-results-description-negative').hide();
            //    $('.industrikalkulator-results-description-positive.version-1').show();
            //    $('.industrikalkulator-results-description-positive.version-2').hide();
            //} else{
            //    //Dette ser interessant ut, du bes kontakte Enova for mer informasjon.
            //    $('.industrikalkulator-results-description-negative').hide();
            //    $('.industrikalkulator-results-description-positive.version-1').hide();
            //    $('.industrikalkulator-results-description-positive.version-2').show();
            //    if (interestWithoutSupport > returnRequirement) {

            //    }

            //}
        });

        // PDF export
        $(document).on('click', '.industrikalkulator-pdf-button button', function (event) {
            var page = $('#main-content').get(0);

            // hide some elements so they're not present in PDF
            $('.industrikalkulator-action-buttons').css('visibility', 'hidden');
            $('.industrikalkulator-pdf-button').hide()
            $('.industrikalkulator-results').css('margin-left', '50px');

            html2pdf(page, { margin: [-20, 0], image: { type: 'png' } })

            //Then show them again.
            $('.industrikalkulator-action-buttons').css('visibility', 'visible');
            $('.industrikalkulator-pdf-button').show()
            $('.industrikalkulator-results').css('margin-left', '0');
        });

        function saveInputValue(name, val) {
            //if (name == "return_requirement")
            //    val = val / 100;
            window.industrikalkulator[name] = Number(val);
        }

        function calculateRevenuePerYear() {
            var revenuePerYear = (window.industrikalkulator['energy_price'] * window.industrikalkulator['energy_amount']) / 100
            window.industrikalkulator['revenue_per_year'] = revenuePerYear;

            var revenuePerYear = numeral(revenuePerYear).format('0,0');
            $('.industrikalkulator-form-input-revenue-per-year').html(revenuePerYear + " Kr");
        }
    }
});
;
$(document).ready(function () {
    if ($('.calculator-landstrom').length > 0) {

        $(".landstrom-filter select").change(function () {
            var value = $(".landstrom-filter select").val();
            var frekvens = $(".landstrom-filter select option:selected").data("frekvens");

            if (parseInt(value) > 0) {
                $('.calculator-landstrom .calculator-value-text').removeClass("hidden");
                $('.calculator-landstrom-tilvalg').removeClass("hidden");
                $('.calculator-landstrom .calculator-value').text(value + " kr");

                $('.frekvens-value').text(frekvens + " kr");

                CalculateLandstromSupport();
            } else {
                $('.calculator-landstrom .calculator-value-text').addClass("hidden");
                $('.calculator-landstrom .calculator-value').text(" ");
                $('.calculator-landstrom-tilvalg').addClass("hidden");
                $('.calculator-landstrom .calculator-support-form-result-box-wrap').addClass("hidden");
                $('.calculator-landstrom .calculator-support-disclaimer').addClass("hidden");
            }
        });

        $(".calculator-landstrom input[type='checkbox']").on("click", function () {
            CalculateLandstromSupport();
            $(this).parent().parent().find(".tilvalg-value").toggleClass("selected");
        });

    }
});

function CalculateLandstromSupport() {
    try {
        var calculatorValue = parseInt($('.calculator-landstrom .calculator-value').text().replace(" ", ""));


        if (calculatorValue > 0) {
            var support = parseInt(calculatorValue);

            if ($('#PMS').is(":checked")) {
                support += parseInt($('#PMS').data("value"));
            }

            if ($('#Kobling').is(":checked")) {
                support += parseInt($('#Kobling').data("value"));
            }

            if ($('#Frekvensomformer').is(":checked")) {
                var frekvens = $(".landstrom-filter select option:selected").data("frekvens");
                support += parseInt(frekvens.replace(" ", ""));
            }

            $('.calculator-landstrom .calculator-support-form-result-value').text(support.toLocaleString("nb-NO"));
            $('.calculator-landstrom .calculator-support-form-result-box-wrap').removeClass("hidden");
            $('.calculator-landstrom .calculator-support-disclaimer').removeClass("hidden");
        } else {
            $('.calculator-landstrom .calculator-support-form-result-box-wrap').addClass("hidden");
            $('.calculator-landstrom .calculator-support-disclaimer').addClass("hidden");
        }
    } catch (error) {
        console.log(error);
        $('.calculator-landstrom .calculator-support-form-result-box-wrap').addClass("hidden");
        $('.calculator-landstrom .calculator-support-disclaimer').addClass("hidden");
    }
}
;
var varebiler = [];

$(document).ready(function () {

    if($('#varebil').length){
        $.get('/varebil/support/', function (data) {
            var varebiler = JSON.parse(data);

            $('.loader').addClass("hidden");
            $('.varebil-content').removeClass("hidden");

            var mappedData = $.map(varebiler, function (item) {
                return {
                    text: item.ESF_car_make + " - " + item.ESF_car_model + " " + item.ESF_car_version,
                    support: item.ESF_calc_support.toLocaleString("nb-NO"),
                    ESF_pred_price_no_vat: item.ESF_pred_price_no_vat,
                    image: item.ESF_photopath,
                    id: item.ESF_car_id
                }
            });

            $('#varebil').select2({
                //ajax: {
                //    url: '/varebil/support/',
                //    dataType: 'json',
                //    processResults: function (data) {
                //        return {

                //        };
                //    }
                //},
                data: mappedData,
                dropdownCssClass: 'varebil-select2',
                placeholder: 'Bilmodell',
                sorter: data => data.sort((a, b) => a.text.toLowerCase() > b.text.toLowerCase() ? 0 : -1)
            });

            $('#varebil').on('select2:select', function (e) {
                var data = e.params.data;
                $('.varebil-nosupport-lackdata').addClass("hidden");
                $('.varebil-nosupport-difference').addClass("hidden");

                var selectedSupport = data.support;
                var selectedImg = data.image;

                if (selectedSupport == undefined) {
                    $('#varebil-value').text("?");
                    $('.varebil-bilde').attr("src", "https://sslphotos.jato.com/PHOTO300/NSCN/MERCEDES/VITO/2020/4PV.JPG");
                } else {
                    $('#varebil-value').text(selectedSupport + ",–");
                    $('.varebil-bilde').attr("src", selectedImg);

                    if (selectedSupport == 0) {
                        $('#varebil-value').html(selectedSupport + ",–<span>*</span>");



                        if (data.ESF_pred_price_no_vat == null) {
                            $('.varebil-nosupport-lackdata').removeClass("hidden");
                        } else {
                            $('.varebil-nosupport-difference').removeClass("hidden");
                        }
                    }
                }

            });


        });

        $.get('/varebil/stats/', function (data) {
            var antall = Number(data.AntallElvarebilerSokt).toLocaleString('nb');
            $('.antall-elektriske-varebiler').text(antall);
        });
    }


});
;
$(document).ready(function () {
    if ($('.calculator-tiltak').length > 0) {

        $(".tiltak-filter select").change(function () {
            var id = $(".tiltak-filter select").val();
            $('.tiltak-accordion').hide();

            if (id > 0) {
                $('.tiltak-accordions > img').hide();
                $('.tiltak-accordion[data-id="' + id + '"]').show();
            } else {
                $('.tiltak-accordions > img').show();
            }
        });
    }

});
;
(function ($) {

    $(function () {

        $('.excel-report').each(function () {
            var filterCategory = $(this).find('.project-filter-category');
            var filterTechnology = $(this).find('.project-filter-technology');
            var filterSearch = $(this).find('.project-filter-search');

            var tbody = $(this).find('tbody');
            var dataRows = $(tbody).find('tr[data-project]');
            var infoRows = $(tbody).find('tr[data-belongs-to]');
            var sortableHeaders = $(this).find('td[data-sort]');

            var iconAsc = 'lni-sort-amount-asc';
            var iconDesc = 'lni-sort-amount-dsc';

            function dataClick(evt) {
                var sid = $(this).data('sid');
                var open = $(this).data('open');

                if (!open) {

                    var infoRow = $(infoRows).filter(function () {
                        return $(this).data('belongs-to') == sid;
                    });

                    infoRow.insertAfter($(this));
                    infoRow.attr('data-color', $(this).data('color'));

                    $(this).data('open', true);

                    return;
                }

                $(tbody).find('[data-belongs-to="' + sid + '"]').remove();
                $(this).data('open', false);
            }

            function draw() {
                var rows = dataRows.filter(function () {
                    return $(this).data('show');
                });

                tbody.children().detach();
                tbody.append(rows);

                rows.each(function (index) {
                    var color = index % 2 == 0;
                    $(this).data('color', color);
                    $(this).attr('data-color', color);
                });
            }

            function inArray(arr, target) {
                if (arr.length == 0) {
                    return true;
                }

                return target.filter(function (item) {
                    return $.inArray(item.Text, arr) > -1;
                }).length == arr.length;
            }

            function change() {
                //dataRows.hide();

                var categories = filterCategory.select2('data').map(function (selected) {
                    return selected.text;
                });

                var technologies = filterTechnology.select2('data').map(function (selected) {
                    return selected.text;
                });

                dataRows.each(function () {
                    $(this).data('show', false);
                    
                    var project = $(this).data('project');

                    var hasSearchWord = project.Sid.includes(filterSearch.val());
                    var hasCategories = inArray(categories, project.Categories);               
                    var hasTechnologies = inArray(technologies, project.Technologies);

                    if (hasCategories && hasTechnologies && hasSearchWord) {
                        $(this).data('show', true);
                    }
                });

                draw();
            }

            function sort(target) {
                var dir = $(target).data('sort-dir') == 'asc' ? 'desc' : 'asc';
                var key = $(target).data('sort');

                $(target).find('.lni').toggleClass([iconAsc, iconDesc])

                dataRows.sort(function (a, b) {
                    
                    var projectA = $(a).data('project');
                    var projectB = $(b).data('project');

                    var valA = projectA[key];
                    var valB = projectB[key];
                    if (!valA) {
                        valA = "";
                    }

                    if (!valB) {
                        valB = "";
                    }

                    if (dir == "asc") {
                        if (valA < valB) {
                            return -1;
                        }
                        if (valA > valB) {
                            return 1;
                        }

                        return 0;
                    }

                    if (valA > valB) {
                        return -1;
                    }
                    if (valA < valB) {
                        return 1;
                    }

                    return 0;
                });

                $(target).data('sort-dir', dir);

                draw();
            }

            dataRows.each(function () {
                $(this).data('show', true);
                $(this).on('click', dataClick);
            });

            filterTechnology.select2({
                allowClear: false,
                placeholder: 'Velg teknologi'
            }).on('change', change);

            filterCategory.select2({
                allowClear: false,
                placeholder: 'Velg tema'
            }).on('change', change);

            sortableHeaders.each(function () {
                $(this).append('<i class="lni ' + iconDesc  + '"></i>');
                $(this).on('click', function () {
                    sort($(this));
                });
            });
            sortableHeaders

            var searchTimer;
            filterSearch.on('keyup', function (evt) {
                clearTimeout(searchTimer);

                searchTimer = setTimeout(function () {
                    change(evt);
                }, 100)
                
            });
        });
    });
})(jQuery);;
