/* Minification failed. Returning unminified contents.
(1412,21-22): run-time error JS1014: Invalid character: `
(1412,22-23): run-time error JS1195: Expected expression: <
(1412,175-176): run-time error JS1195: Expected expression: <
(1412,226-227): run-time error JS1195: Expected expression: <
(1412,232-233): run-time error JS1014: Invalid character: `
(1427,17-18): run-time error JS1014: Invalid character: `
(1427,18-19): run-time error JS1195: Expected expression: <
(1427,51-56): run-time error JS1197: Too many errors. The file might not be a JavaScript file: input
(1371,1-33): run-time error JS1301: End of file encountered before function is properly closed: function RenderFastaFilter(data)
(1427,73-77): run-time error JS1004: Expected ';': name
(1427,91-96): run-time error JS1004: Expected ';': value
(1427,103-107): run-time error JS1004: Expected ';': data
(1427,125-126): run-time error JS5008: Illegal assignment: =
(1427,126-130): run-time error JS1197: Too many errors. The file might not be a JavaScript file: "Ja"
 */
//   ____   _  _      _                       _                     _               
//  |  _ \ (_)| |    | |                     (_)                   (_)              
//  | |_) | _ | |  __| | _ __    __ _ __   __ _   __ _   ___  _ __  _  _ __    __ _ 
//  |  _ < | || | / _` || '_ \  / _` |\ \ / /| | / _` | / _ \| '__|| || '_ \  / _` 
//  | |_) || || || (_| || | | || (_| | \ V / | || (_| ||  __/| |   | || | | || (_| |
//  |____/ |_||_| \__,_||_| |_| \__,_|  \_/  |_| \__, | \___||_|   |_||_| |_| \__, |
//                                                __/ |                        __/ |
//                                               |___/                        |___/ 



var bildnavigeringSida = 1;
var bildnavigeringTotaltAntalProdukter;
//var kategorierPlatt;
var kategorierPlatt2;
var currentKategoriId = 0;
var activeFilters = []; // styr kortlistan "aktiva filter" ovanför listan med valbara filter.


function initieraBildnavigering() { // körs från index.html on page load

    // initiera paging / sorting

    var sort = getCookie('sort');

    if ($("#sorteraProdukter option[value='" + sort + "']").length == 0) {
        // cookie value not in list of selectables
        sort = $("#sorteraProdukter option:first").val(); // Kjells beslut 2020-05-04
    }
    $('#sorteraProdukter').val(sort);


    var pagesize = getCookie('pagesize');
    if ($('input[name = "pagesize"][value = "' + pagesize + '"]').length == 0) {
        // cookie value not in list of selectables
        pagesize = 50; // $('input[name = "pagesize"]:first').val(); Kjells beslut 2020-05-04
    }
    $('input[name = "pagesize"][value = "' + pagesize + '"]').prop('checked', true);
    $('input[name = "pagesize2"][value = "' + pagesize + '"]').prop('checked', true);


    //    $('#instock').prop('checked', (getCookie('instock') == "true"));
    $('input[name=instock]').val([getCookie('instock') == "true" ? 'endastilager' : 'alla']);



    var viewType = getCookie('view-type');
    if (viewType == "") viewType = "card-view";
    $('.main-sektion').removeClass("table-view").removeClass("list-view").removeClass("card-view").addClass(viewType);

    var tempId = params("id");

    // läs ?id=xx från parameter i URL om vi kommer från annan sida
    if (tempId != undefined) {
        //        currentKategoriId = qd["id"][0];
        currentKategoriId = tempId;
    }

    // läs ?artnr=xx från parameter i URL om vi kommer från annan sida
    var tempArtnr = params("artnr");


    if (tempArtnr == "" || tempArtnr == null) { // undvika loggning av kategori och produkt samtidigt

        if (tempId == null || tempId == "") tempId = 1;

        //if ((tempId == null || tempId == "") /*&& (tempArtnr == "" || tempArtnr == null)*/) {
        //    window.document.title = "Bildnavigering | Elektroskandia Sverige AB";
        //    // track category load from url
        //    console.log('track bildnavigering from url', window.document.title);
        //    window.dataLayer = window.dataLayer || [];
        //    window.dataLayer.push({
        //        'event': 'pageview-category',
        //        'pagetype' : 'category',
        //        'pageview-title': window.document.title,
        //        'pageview-url': '/bildnavigering'
        //    });



        //} else {
        // track category load from url
        console.log('track category load from url', tempId, window.document.title);
        window.dataLayer = window.dataLayer || [];
        window.dataLayer.push({
            'event': 'pageview-category',
            'pagetype': 'category',
            'pageview-title': window.document.title,
            'pageview-url': '/bildnavigering?id=' + tempId
        });
        console.log('setting canonical' + '/bildnavigering?id=' + tempId);
        $('head link[rel=canonical]').remove();
        $('head').append('<link rel="canonical" href="/bildnavigering?id=' + tempId + '" />');
        //}

    } else {
        // vi visar artikel, gör ingenting, loggningen av artikelvisningen sker i ProduktBN.js
        //        tempArtnr = tempArtnr.replace(/\D/g, ''); // ta bort alla tecken som inte är siffror

        var htmlRegexG = /<(?:"[^"]*"['"]*|'[^']*'['"]*|[^'">])+>/g; // kill html
        if (tempArtnr) tempArtnr = tempArtnr.replace(htmlRegexG, '');


    }




    // ska vi kanske vänta med detta i fallet att vi laddar en enstaka produkt från urlen?
    getProductsAndFilters(true, tempArtnr);



    getCategoriesData2(true); // kategoritradet renderas av razor men vi behöver datat för bla navigeringen. TODO: Går detta att lägga senare?

    // temporärt, rendera produkt med razor istället


    if (tempArtnr != undefined) {

        selectProduct(null, tempArtnr, "loadfromurl");
    } else {
        visaSenasteProdukt(); //denna funktion körs ändå av produktvisningen hå hoppa över om vi visar produkt, dvs artnr!=null   KOMMENTAR666
    }




    // sätt upp alla EVENTS

    //VYVAL
    $('.view-type > .list-view').click(function () {
        $('.main-sektion').removeClass("table-view").removeClass("card-view").addClass("list-view");
        setCookie('view-type', 'list-view', 3650);
    });
    $('.view-type > .card-view').click(function () {
        $('.main-sektion').removeClass("table-view").removeClass("list-view").addClass("card-view");
        setCookie('view-type', 'card-view', 3650);
    });
    $('.view-type > .table-view').click(function () {
        $('.main-sektion').removeClass("list-view").removeClass("card-view").addClass("table-view");
        setCookie('view-type', 'table-view', 3650);
    });

    //LÄGG TILL I SHOPPING BASKET
    $(".js-bildnav-produkter").on('click', '.js-open-miniform', function (e) {
        e.preventDefault();
        $(this).closest('.js-show-shop').toggleClass("show-shop");
        return false;
    });

    $(".js-bildnav-produkter").on('click', '.js-close-shop', function (e) {
        e.preventDefault();
        $(this).closest('.js-show-shop').removeClass("show-shop");
    });


    // LAGERSALDO BUTIKER ska vi ha denna???

    $(".js-bildnav-produkter").on('click', '.js-visaSaldo-in-list', function (e) {
        e.preventDefault();
        $(this).closest('.js-show-shop').toggleClass("show-shop");
        return false;
    });



    //KATEGORINAVIGERING I TRÄD (avstängt, trädet kommer färdigpopulerat)
    $(".bildnavigering-kategorier-panel").on('click', '.expander.collapsed', function (e) {

        // todo

        //var target = $(this).attr('data-target');
        //var container = $(target);
        //var len = container.children().length;

        //if (len == 0) {
        //    var id = $(this).attr('data-rubrikid');
        //    console.log("get children to " + id);   

        //    var node = searchCategoryTree(kategoriTrad.ChildrenRubrikDto, id, 1);

        //    console.log("node", node);

        //    if (node != undefined) {
        //        for (var i = 0; i < node.ChildrenRubrikDto.length; i++) {
        //            console.log("child ", node.ChildrenRubrikDto[i]);
        //        }
        //    }

        //}
    });


    //PAGING, SORTING, PAGESIZE
    $('.js-sida-next').click(function (e) {
        var pagesize = $('input[name = "pagesize"]:checked').val();
        var antalsidor = Math.floor(bildnavigeringTotaltAntalProdukter / pagesize) + 1;

        //console.log(antalsidor, pagesize, bildnavigeringTotaltAntalProdukter, bildnavigeringSida);

        if (bildnavigeringSida < antalsidor) {
            bildnavigeringSida++;
            getProductsAndFilters();
        }
    });
    $('.js-sida-prev').click(function (e) {
        if (bildnavigeringSida > 1) {
            bildnavigeringSida--;
            getProductsAndFilters();
        }
    });

    $('#sorteraProdukter').change(function (e) {
        var sort = $('#sorteraProdukter').val();

        //console.log("sortera lagra ajax", sort);

        var requestData = {
            anvid: GenerellInformation.anvandarId,
            sokning: '',
            bildnavigering: sort
        };

        $.ajax({
            type: "POST",
            data: requestData,
            url: "/InternWebApi/UppdateraSortering"
        });

        //console.log("sortera lagra cookie", sort);

        setCookie('sort', sort, 3650); // spara cookien också, användaren kanske inte är inloggad nästa gång
        bildnavigeringSida = 1;
        getProductsAndFilters();
    });

    $('.js-pagesize input[name = "pagesize"]').click(function (e) {
        var pagesize = $('input[name = "pagesize"]:checked').val();
        $('input[name = "pagesize2"][value = "' + pagesize + '"]').prop('checked', true);
        setCookie('pagesize', pagesize, 3650);
        window.scrollTo({ top: 0, behavior: 'smooth' });
        bildnavigeringSida = 1;
        getProductsAndFilters();
    });
    $('.js-pagesize input[name = "pagesize2"]').click(function (e) {
        var pagesize = $('input[name = "pagesize2"]:checked').val();
        $('input[name = "pagesize"][value = "' + pagesize + '"]').prop('checked', true);
        setCookie('pagesize', pagesize, 3650);
        window.scrollTo({ top: 0, behavior: 'smooth' });
        bildnavigeringSida = 1;
        getProductsAndFilters();
    });
    $(".js-bildnav-paging").on('click', '.js-sida.nummer', function (event) {
        window.scrollTo({ top: 0, behavior: 'smooth' });
        bildnavigeringSida = parseInt(this.innerHTML, 10);
        getProductsAndFilters();
    });
    $(".js-bildnav-produkter-filter").on('click', 'input[type=checkbox]', function (e) {
        bildnavigeringSida = 1;
        getProductsAndFilters();
    });
    $('.js-instock input[type=radio]').click(function (e) {

        //        $('input[name="instock"]:checked').val()
        setCookie('instock', $('input[name="instock"]:checked').val() == 'endastilager', 3650);
        bildnavigeringSida = 1;
        getProductsAndFilters();
    });

    //KATEGORI, klicka i träd, eller i sidan
    $(".bildnavigering-kategorier-panel").on('click', '.js-namn', function (e) {
        $('.bildnavigering-kategorier-panel').removeClass("show");
        bildnavigeringSida = 1;
        var id = $(this).parent().find('.expander').attr('data-rubrikid');
        history.pushState('', '', '?id=' + id);
        selectCategory(id);

        window.scrollTo({ top: 0, behavior: 'smooth' });

        return false;
    });
    $(".bildnavigering-kategorier-inner-container").on('click', '.js-bildnav-kategori', function (e) {

        $('.bildnavigering-kategorier-panel').removeClass("show");

        bildnavigeringSida = 1;
        var id = $(this).attr('data-rubrikid');
        history.pushState('', '', '?id=' + id);
        selectCategory(id);

        window.scrollTo({ top: 0, behavior: 'smooth' });

        return false;
    });

    $('.js-alla2').click(function (e) {
        $(this).closest(".sidebar-collapse-innehall").css('max-height', '');
        $(this).closest(".sidebar-collapse-innehall").addClass("open2");
    });
    $('.js-farre2').click(function (e) {
        $(this).closest(".sidebar-collapse-innehall").css('max-height', '116px');
        $(this).closest(".sidebar-collapse-innehall").removeClass("open2");
    });

    //BREADCRUMB
    $(".js-breadcrumbs").on('click', '.smula:not(.static)', function (e) {


        if ($(this).hasClass('js-category-leaf')) {
            backToProductList();
            return false;
        }

        $('.bildnavigering-kategorier-panel').removeClass("show");

        bildnavigeringSida = 1;
        var id = $(this).attr('data-rubrikid');
        history.pushState('', '', '?id=' + id);

        console.log('selectCategory id', id);
        selectCategory(id);
        return false;
    });

    // BACK BACK BACK BACK...magic backknappsevent
    $(window).on('popstate', function (event) {

        var nyKategori = params("id");
        var nyProdukt = params("artnr");

        this.console.log("BACK id", nyKategori, "artnr", nyProdukt);



        if (nyKategori != null && !isNaN(nyKategori)) {
            //            alert("back selectCategory" + currentKategoriId);
            if (currentKategoriId != nyKategori) {
                selectCategory(nyKategori);
            } else {
                hideProduct();
            }
            //return;
        }
        if (nyProdukt != null && !isNaN(nyProdukt)) {
            selectProduct(event, nyProdukt, "back");
            return;
        }


        if (nyKategori == "" || nyKategori == undefined) nyKategori = 1;
    });


    // FILTER, checkboxar
    $(".filter-list").on('change', '.filter-namn input[type=checkbox]', function (e) { // klickat på checkboxar

        var element = $(this).closest('.filter-item');

        if (this.checked) { // check fallet, lägg till filtret
            var typ = element.find('.egenskap-typ').text();
            activeFilters.push({ id: this.value.split("|")[0], name: typ, value: this.value, valuedisplayname: $(this).attr('data-value-displayname') });
        } else { // uncheck fallet, ta bort filtret
            //        activeFilters = activeFilters.filter(item => item.value !== this.value); // ie11 gillar inte denna

            // vi kör iesnäll version istället
            var remove = this.value;
            activeFilters = activeFilters.filter(function (item) {
                if (item.value !== remove) return item;
            }); // end ie11 snäll version

        }
        RenderActiveFilters();

        getProductsAndFilters();


    });

    // FILTER, klick på activa filter, dvs ta bort



    $(".js-active-filters").on('click', '.active-filter', function (e) {  // klick på aktivt filter, ta bort det och avkryssa motsvarande filter

        var value = $(this).attr('data-value');
        var id = $(this).attr('data-id');

        //activeFilters = activeFilters.filter(item => item.value !== value); // ie11 gillar inte denna

        activeFilters = activeFilters.filter(function (item) {
            if (item.value !== value) return item;
        }); // end ie11 snäll version


        $("input[type=checkbox][value='" + value + "']").prop('checked', false);


        // reset corresponding slider
        var $slider = $(".filter-item[data-id='" + id + "'] .slider-range");
        if ($slider.length > 0) {

            var sliderData = $slider.attr("data-selectables").split(",");
            var sliderDataEnhet = $slider.attr("data-enhet");
            //console.log("sliderDataEnhet", sliderDataEnhet);

            $slider.slider("values", 0, 0);
            $slider.slider("values", 1, sliderData.length);
            $slider.parent().find(".slider-value").text(sliderData[0] + "-" + sliderData[sliderData.length - 1] + " " + sliderDataEnhet);
        }

        RenderActiveFilters();

        getProductsAndFilters();



    });


    $('.bildnav-egenskaper-header .js-expander').click(function () {

        $(this).toggleClass("open");

        $(".filter-list").animate({
            height: "toggle"
        }, 500, function () {
            // Animation complete.
        });


    });


    $('.js-bildnav-panel-opener').click(function () {

        $('.bildnavigering-kategorier-panel').toggleClass("show");

    });


    $('.js-toggle-pris2').click(function () {
        $('.main-sektion').toggleClass("hide-pris");
        $.ajax({
            type: "POST",
            data: { visa: !$('.main-sektion').hasClass('hide-pris') },
            url: "/InternWebApi/VisaNettopriser"
        }).done(function (data) {
            // nah
        });


    });






    // INITIERA PRODUKTVY

    $(".js-toggle-pris-produkt").click(function () {
        $('.main-sektion').toggleClass('hide-pris');
        $.ajax({
            type: "POST",
            data: { visa: !$('.main-sektion').hasClass('hide-pris') },
            url: "/InternWebApi/VisaNettopriser"
        }).done(function (data) {
            // nah
        });
    });

    $(".js-dela-produkt").click(function () {
        $('#js-modal-favorit-artikel').hide();
        $("#produktfelrapp").addClass("hidden");

        $('.js-produkt-dela-container').toggle();
    });
    $(".js-produkt-dela-container").on("click", function () {
        $('.js-modal-favorit-artikel').hide();

        copyToClipboard(window.location.href);
        $('.js-produkt-dela-container').hide();
    });


    $(".js-produkt-anteckning-btn").on('click', function () {

        var tempArtnr = params("artnr");
        ant = $('#Anteck').val().trim(),
            sparaArtikelAnteckning(tempArtnr, ant);
    });

    $(".js-felrapp-artnr-visa").on('click', function () {

        $('.js-produkt-dela-container').hide();
        $('#js-modal-favorit-artikel').hide();
        $("#produktfelrapp").toggleClass("hidden");

    });

    $(".js-felrapp-artnr-spara-btn").on('click', function () {
        var tempArtnr = params("artnr");
        var ant = $("#Anteckfel").val().trim(),
            nyant = ant.replace(/["'{}?:\/\\]/g, ' ');
        sparaArtikelRapporteraFel(tempArtnr, nyant);
    });

    $(".js-product-view .js-favorit-artnr").on("click", function () {

        var artnr = params("artnr");

        $('.js-produkt-dela-container').hide();
        $('#js-modal-favorit-artikel').hide();
        $("#produktfelrapp").addClass("hidden");

        SparaFavoritArtikelForbered($(this), $("#ListHallare"), artnr);
        $("#js-modal-favorit-artikel").modal("show");
    });
    $(".js-bildnav-produkter").on("click", ".js-favorit-artnr-in-list", function () {

        var artnr = $(this).parent().find(".artnr").text();

        $(this).removeClass("fa-star").addClass("fa-star").addClass("aktiv"); // FEL ZZZ
        //SparaFavoritArtikelForbered($(this), $("#ListHallare"), $(".produkt-artnr").html());
        SparaFavoritArtikelForbered($(this), $("#ListHallare"), artnr);
        $("#js-modal-favorit-artikel").modal("show");
    });

    $(".js-product-view .js-jamfor-artnr").on("click", function () {

        var tempArtnr = params("artnr");

        if ($(this).find("i").hasClass("aktiv")) {
            TaBortArtikelForJamforelse(tempArtnr); // $(".produkt-artnr").html());
            $(this).find("i").removeClass("fa aktiv").addClass("fal");
        } else {
            LaggTillArtikelForJamforelse(tempArtnr);// $(".produkt-artnr").html());
            $(this).find("i").removeClass("fal").addClass("aktiv fa");
        }
        return false;
    });

    $(".js-bildnav-produkter").on("click", ".js-jamfor-artnr-in-list", function () {

        var artnr = $(this).parent().parent().find(".artnr").text();

        if ($(this).hasClass("aktiv")) {
            TaBortArtikelForJamforelse(artnr); // $(".produkt-artnr").html());
            $(this).removeClass("aktiv");
        } else {
            LaggTillArtikelForJamforelse(artnr);// $(".produkt-artnr").html());
            $(this).addClass("aktiv");
        }
        return false;
    });






    $(".js-konfigurator-artnr").on("click", function () {
        //if (enkonf.indexOf('http')) {
        //    window.open(enkonf);
        //} else {
        document.location.href = enkonf;
        //}
    });

}

function hideProductDialogs() {
    $('.js-produkt-dela-container').hide();
    $('#js-modal-favorit-artikel').hide();
    $("#produktfelrapp").addClass("hidden");
}




var enkonf;
var enkonftitle;

function getCategoriesData2() { // hämta alla kategoridata, spara för framtida navigering
    //$.ajax({
    //    type: "POST",
    //    data: '', //requestData,
    //    url: "/InternWebApi/KategorierPlatt2"
    //}).done(function (data) {

    //    kategorierPlatt2 = data;

    //    //if (select == true) {
    //    //    selectCategory(currentKategoriId); // enabla den här om man vill ladda kategorierna med ajax istället för razor
    //    //}

    //});
}


//function getCategoriesData(select) { // hämta alla kategoridata, spara för framtida navigering
//    $.ajax({
//        type: "POST",
//        data: '', //requestData,
//        url: "/InternWebApi/KategorierPlatt"
//    }).done(function (data) {

//        kategorierPlatt = data;

//        console.log("data", data);
//        console.log("kategorierPlatt", kategorierPlatt);

//        //if (select == true) {
//        //    selectCategory(currentKategoriId); // enabla den här om man vill ladda kategorierna med ajax istället för razor
//        //}

//    });
//}

function ResetFilters() { // tex vid kategoribyten
    activeFilters = [];
    RenderActiveFilters();
    // clear checkboxes


}


function selectCategory(id) { ///...and render


    hideProduct();

    console.log('setting canonical' + '/bildnavigering?id=' + id);
    $('head link[rel=canonical]').remove();
    $('head').append('<link rel="canonical" href="/bildnavigering?id=' + id + '" />');


    if (isNaN(id)) {
        alert("ogiltigt kategori id");
        return;
    }
    var children = getChildren(id);

    // render category - main window

    var container = $('.bildnavigering-kategorier-inner-container');
    container.empty();

    for (var i = 0; i < children.length; i++) {
        var child = children[i];

        var namn = child.Namn;
        //if (id == 1) // tvätta bort kategorinumren på första nivån. Bortkommenterat, vi ska alltid ta bort kategorinumret
        namn = kategoryNameWithoutPrefix(namn);

        var bild = (child.Bild != null) ? child.Bild : "/Content/Images/noImg_large.png";

        container.append("<a class='bildnav-kategori js-bildnav-kategori' data-rubrikid=" + child.Id + "  href='/bildnavigering?id=" + child.Id + "'>" +
            '<div class="img-frame">' +
            "<img src='" + bild + "'>" +
            '</div>' +
            "<div class='text'>" + namn + "</div></a> ");
    }

    var kategorinamn = openBranchesMarkNodesAndRenderBreadcrumbs(id);
    window.document.title = kategorinamn + ' | Elektroskandia';

    // track category change
    console.log('track category change to id', id, window.document.title);
    window.dataLayer = window.dataLayer || [];
    window.dataLayer.push({
        'event': 'pageview-category',
        'pagetype': 'category',
        'pageview-title': window.document.title,
        'pageview-url': '/bildnavigering?id=' + id
    });


    // ja just det, vi ska visa produktlista också:

    getProductsAndFilters(true);

    return false;

}

function openBranchesMarkNodesAndRenderBreadcrumbs(id) {
    // visa smulor i trädet och öppna rätt noder
    $('.kategori-namn a').removeClass('crumb'); // remove all crumb markings in tree (fetstil)


    //alert("here openBranchesMarkNodesAndRenderBreadcrumbs id=" + id);

    tempId = id;
    var tempNamn;
    var breadcrumbs = [];


    var n = 8;
    while (tempId != 1 && n > 0) { // spring upp för trädet och fetmarkera alla noderna
        n--;

        if (tempId == undefined) {
            return '';
        }



        var tempNode = $('.kategori-namn a[data-rubrikid="' + tempId + '"]');


        tempNode.addClass('crumb');

        //        if (tempId != id) if (tempNode.hasClass('collapsed')) tempNode.click(); // ta bort första ifsatsen om man vill att även den fysiskt klickade noden ska öppnas
        if (tempNode.hasClass('collapsed')) tempNode.click();

        tempNamn = tempNode.attr('data-rubriknamn');

        breadcrumbs.push({ id: tempId, name: tempNamn }); // spara smulorna, vi kommer använda dem strax

        tempId = tempNode.attr('data-parentrubrikid'); // nästa överliggande 
    }



    //return '';



    breadcrumbs.reverse();

    // stäng alla noder som inte är fetmarkerade

    $.each($('.expander:not(.collapsed):not(.crumb)'), function (key, value) {
        //        value.click();
        setTimeout(function () { value.click(); }, 600);
    });


    // rendera brödsmulor i main window

    var bread = $('.js-breadcrumbs');
    bread.empty(); // throw away old bread

    bread.append("<a class='smula root static' href='/bildnavigering'><span>Kategorier</span></a>\n");



    for (var i = 0; i < breadcrumbs.length - 1; i++) {
        bread.append("<a class='smula' data-rubrikid='" + breadcrumbs[i].id + "' href='/bildnavigering?id=" + breadcrumbs[i].id + "' title='" + kategoryNameWithoutPrefix(breadcrumbs[i].name, i) + "'><span>" + kategoryNameWithoutPrefix(replaceAll(breadcrumbs[i].name, ' ', '\xa0'), i) + "</span></a>\n");
    }
    //    if (breadcrumbs.length > 0) bread.append("<a class='leaf js-category-leaf' href='javascript:backToProductList();'>" + kategoryNameWithoutPrefix(breadcrumbs[breadcrumbs.length - 1].name, breadcrumbs.length - 1) + "</a>\n");
    if (breadcrumbs.length > 0) bread.append("<a class='leaf js-category-leaf' data-rubrikid=" + id + " xxxhref='/bildnavigering?id=" + id + "' >" + kategoryNameWithoutPrefix(breadcrumbs[breadcrumbs.length - 1].name, breadcrumbs.length - 1) + "</a>\n");

    var tempArtnr = params("artnr");


    //    if (tempArtnr != "") window.document.title = breadcrumbs[breadcrumbs.length - 1].name;

    currentKategoriId = id; // spara valda categorin som nuvarande kategori /current id


    return breadcrumbs[breadcrumbs.length - 1] ? breadcrumbs[breadcrumbs.length - 1].name : '';
}





function getChildren(id) {
    var children = [];

    $('#rubrik' + id + ' > .kategori-namn > a.expander').each(function (index, value) {
        var childId = $(this).attr('data-rubrikid');
        var childNamn = $(this).attr('data-rubriknamn');
        var childBild = $(this).attr('data-rubrikbild');
        children.push({ Id: childId, Namn: childNamn, Mum: id, Bild: childBild });
    });

    return children;
}

var allaArtiklar = [];

function getProductsAndFilters(initial, artnr/*, fromProductDetail*/) {

    //if (!fromProductDetail && artnr) {
    //    console.log("getProductsAndFilters exit", initial, artnr);
    //    return;
    //}

    $('.js-bildnav-produkter .bildnav-produkt-container').remove(); // radera alla synliga produkter (och inga produkter meddelande)

    if (initial == true) {
        $('.egenskaper-filter-list').empty();
        $('.varumarkenochproduktlinjer-filter-list').empty();
    }

    // get data needed to make request

    var id = currentKategoriId;
    if (id == 0) {
        AvblockeraUI();
        return;
    }

    var pagesize = $('input[name = "pagesize"]:checked').val();
    var sortBy = $('#sorteraProdukter option:checked').val();

    //console.log("pagesize, sortBy:", pagesize, sortBy);
    if (pagesize == undefined) {
        pagesize = 20;
    }
    if (sortBy == undefined || sortBy == '') {
        sortBy = "artnrAsc";
    }

    var filterVarumarke2 = [];
    $.each($("input[type=checkbox][name=filter-varumarken]:checked"), function (i, val) {
        filterVarumarke2.push(val.value);
    });

    var filterProduktlinje2 = [];
    $.each($("input[type=checkbox][name=filter-produktlinje]:checked"), function (i, val) {
        filterProduktlinje2.push(val.value);
    });

    var filterMinaButiker = [];
    $.each($("input[type=checkbox][name=filter-minabutiker]:checked"), function (i, val) {
        filterMinaButiker.push(val.value);
    });


    var EtimList = [];
    var EtimRangeList = [];
    var EtimGrupper = {};
    $.each($(".filter-namn input[type=checkbox][name=filter-egenskap]:checked"), function (i, val) {
        var value = $(this).val();
        var EtimFeatureId = $(this).attr("data-value-filter");
        EtimList.push({ Varde: value, EtimFeatureId: EtimFeatureId });
        EtimGrupper[EtimFeatureId] = true; // räknar grupperna distinct
    });


    $.each($(".slider-range"), function (i, val) {

        $slider = $(this);

        var etimranges = $slider.hasClass('has-etim-ranges');

        var EtimFeatureId = $slider.closest(".filter-item").attr("data-id");
        var translatingTable = $slider.attr("data-selectables").split(",");

        var lowerIndex = $slider.slider("values", 0);
        var upperIndex = $slider.slider("values", 1);


        if (lowerIndex > 0 || upperIndex < translatingTable.length - 1) { // om slidern är inställd på ändlägen, filtrera inte

            //if (false && etimranges) { // dvs etim har inte ett värde utan ett interval tex 10..20
            //    console.log('slider-range lowerIndex', lowerIndex, 'upperIndex', upperIndex);
            //    console.log('translatingTable', translatingTable);

            //    // skicka alla mellanliggande värden på gamla sättet
            //    for (var j = lowerIndex; j <= upperIndex; j++) {
            //        EtimList.push({ Varde: translatingTable[j], EtimFeatureId: EtimFeatureId });
            //        console.log('Varde: ', translatingTable[j], 'EtimFeatureId: ', EtimFeatureId );

            //        EtimGrupper[EtimFeatureId] = true; // räknar grupperna distinct
            //    }

            //} else {
            //// gamla versionen som skickar alla mellanliggande värden

            //for (var j = lowerIndex; j <= upperIndex; j++) {
            //    EtimList.push({ Varde: translatingTable[j], EtimFeatureId: EtimFeatureId });
            //    EtimGrupper[EtimFeatureId] = true; // räknar grupperna distinct
            //}

            // nya versionen som skickar range

            EtimRangeList.push({ VardeLowerLimit: translatingTable[lowerIndex], VardeUpperLimit: translatingTable[upperIndex], EtimFeatureId: EtimFeatureId });

            //}




        }
    });

    var lagerfores = $('input[name="instock"]:checked').val() == 'endastilager';
    //    var lagerfores = $(".instock input[type=checkbox]:checked").val() == "on";


    let bvb = $('input[name="filter-bvb"]').is(':checked'); // true är filtrera på, false är filtrera inte på
    let greenoffer = $('input[name="filter-greenoffer"]').is(':checked'); // true är filtrera på, false är filtrera inte på

//    let minabutiker = $('input[name="filter-minabutiker"]').is(':checked'); // true är filtrera på, false är filtrera inte på


    var requestData = {
        id: id,
        sida: bildnavigeringSida,
        artpersida: pagesize,
        sort: sortBy,
        varumarken: filterVarumarke2,
        produktlinjer: filterProduktlinje2,
        AntalEtimGrupper: Object.keys(EtimGrupper).length + EtimRangeList.length,
        EtimList: EtimList,
        EtimRangeList: EtimRangeList,
        lagerfores: lagerfores,
        bvb: bvb,
        greenoffer: greenoffer
        ,minabutiker: filterMinaButiker
    };

    //console.log("requestData ", requestData);



    $.ajax({
        type: "POST",
        timeout: 70000,
        data: requestData,
        url: "/internwebapi/bildnavigering"
    }).done(function (data) {
        //console.log('Bildnavigering data', data);


        RenderPaging(data.AntalArtiklarTotalt, pagesize);
        $('.js-antal-artiklar-totalt').text("(" + data.AntalArtiklarTotalt + " st)");



        // förbered för visning av enskild produkt
        allaArtiklar = data.AllaArtiklar; // spara undan, vi behöver sen för produktvisningen


        renderInProductNavigering(artnr);



        //console.log("allaArtiklar", allaArtiklar);



        // ta bort utgråning av egenskaper, varumärken och produktlinjer
        $('.noll-produkter2').removeClass('noll-produkter2');
        $('.noll-produkter').removeClass('noll-produkter');
        $('.varumarkenochproduktlinjer-filter-list .filter-namn').removeClass("noll-produkter");


        if (data.AntalArtiklarTotalt > 0) {
            $('.paging-sorting-layout').show();
            $('.bildnav-filter').show();

            $('.js-bildnav-produkter-filter').show();
            $('.js-bildnav-produkter').show();


            if (initial == true) {

                activeFilters = [];
                RenderActiveFilters();
                var eL = $('.filter-list');
                eL.empty();

                // omvandla data, gruppera per egenskapnamn
                var dictEgenskaper = {};
                $.each(data.EtimegenskaperGroupBY, function (key, item) {
                    (dictEgenskaper[item.Beskrivning] = dictEgenskaper[item.Beskrivning] || []).push({ EtimFeatureId: item.EtimFeatureId, Varde: item.Varde, Enhet: item.Enhet, Antal: item.Antal, Format: item.Format });
                });

                RenderEgenskaper2(dictEgenskaper);

                RenderFastaFilter(data);
            } else {

                //// gråa ut alla egenskapvärden som har 0 produkter

                //RenderGreyOuts(data.EtimegenskaperGroupBY, data.VarumarkenGroupBY, data.ProduktlinjeGroupBY);

            }

        }
        else {

            if (initial == true) {
                //console.log("no articles, del filter");

                activeFilters = [];
                RenderActiveFilters();
                var eL = $('.filter-list');
                eL.empty();


                $('.egenskaper-filter-list .filter-item').addClass("noll-produkter");


                if ($('.bildnavigering-kategorier-inner-container').children().length == 0) {
                    $('.paging-sorting-layout').show();
                    $('.bildnav-filter').show();

                    $('.js-bildnav-produkter-filter').show();
                    $('.js-bildnav-produkter').show();
                }
                else {
                    $('.paging-sorting-layout').hide();
                    $('.bildnav-filter').hide();

                    $('.js-bildnav-produkter-filter').hide();
                    $('.js-bildnav-produkter').hide();
                }
            }
        }

        // gråa ut alla egenskapvärden som har 0 produkter

        RenderGreyOuts(data.EtimegenskaperGroupBY, data.VarumarkenGroupBY, data.ProduktlinjeGroupBY);


        var artiklarPrisforfragan = RenderProducts(data.ArtikelDtos);

        RenderPriser(artiklarPrisforfragan);

        AvblockeraUI();
    });
}


function RenderGreyOuts(EtimegenskaperGroupBY, VarumarkenGroupBY, ProduktlinjeGroupBY) {

    var dictEgenskaperEtim = {};
    $.each(EtimegenskaperGroupBY, function (key, item) {
        (dictEgenskaperEtim[item.EtimFeatureId] = dictEgenskaperEtim[item.EtimFeatureId] || []).push({ EtimFeatureId: item.EtimFeatureId, Varde: item.Varde, Enhet: item.Enhet, Antal: item.Antal });
    });


    // loopa igenom alla egenskaper i DOM, gråa ut alla som inte är med i dictEgenskaperEtim
    $('.egenskaper-filter-list .filter-item').each(function (key, item) {
        var etim = $(this).attr('data-id');
        if (dictEgenskaperEtim[etim] == undefined) {
            $(this).addClass("noll-produkter");
        }
    });


    // loopa igenom alla egenskapers värden i DOM, gråa ut alla som inte är med i dictEgenskaperEtim
    $('.egenskaper-filter-list .filter-item:not(.noll-produkter) input[name=filter-egenskap]').each(function (key, item) {
        var value = $(this).attr('value');
        var etim = $(this).attr('data-value-filter');


        var result = dictEgenskaperEtim[etim].filter(function (item) {
            if (item.Varde == value) return item;
        });

        //console.log("egenskapvalue", etim, value, result.length, dictEgenskaperEtim[etim]);


        if (result.length == 0) {
            $(this).closest('.filter-namn').addClass("noll-produkter2");
        }


    });


    // varumärken, grey out
    //console.log("varumarken to gray", $('.varumarkenochproduktlinjer-filter-list .varumarken .filter-namn'), VarumarkenGroupBY.length);


    if (VarumarkenGroupBY.length == 0) {
        $('.varumarkenochproduktlinjer-filter-list .varumarken').addClass('noll-produkter');
    } else {
        $('.varumarkenochproduktlinjer-filter-list .varumarken .filter-namn').each(function (key, item) {
            var varumarke = $(this).find("input").attr('value').trim();
            //console.log("varumarke", varumarke, VarumarkenGroupBY);
            //console.log(varumarke in VarumarkenGroupBY);

            var result = VarumarkenGroupBY.filter(function (item) {
                if (item.Key != null && item.Key.trim() == varumarke) return item;
            });
            //console.log("result", result.length);

            if (result.length == 0) {
                //console.log("grey out", key);
                $(this).addClass("noll-produkter");
            }

            //if (!(varumarke in data.VarumarkenGroupBY)) {
            //    console.log("grey out" , key);
            //    $(this).addClass("noll-produkter");
            //}
        });

    }


    // TODO: Om alla grå, gråa ut hela varumarken istället. Dito produktlinjer nedan


    // produktlinjer, grey out

    //console.log("produktlinjer to gray", $('.varumarkenochproduktlinjer-filter-list .produktlinjer .filter-namn'), ProduktlinjeGroupBY.length);

    if (ProduktlinjeGroupBY.length == 0) {
        $('.varumarkenochproduktlinjer-filter-list .produktlinjer').addClass('noll-produkter');
    } else {
        $('.varumarkenochproduktlinjer-filter-list .produktlinjer .filter-namn').each(function (key, item) {
            var produktlinje = $(this).find("input").attr('value').trim();

            var result = ProduktlinjeGroupBY.filter(function (item) {
                if (item.Key.trim() == produktlinje) return item;
            });
            //console.log("result", result.length);

            if (result.length == 0) {
                //console.log("grey out", key);
                $(this).addClass("noll-produkter");

            }

            //if (!(varumarke in data.VarumarkenGroupBY)) {
            //    console.log("grey out" , key);
            //    $(this).addClass("noll-produkter");
            //}
        });
    }

}




function RenderPaging(totaltAntalProdukter, pagesize) {

    // RENDER PAGING
    bildnavigeringTotaltAntalProdukter = totaltAntalProdukter;
    var antalsidor = Math.floor(bildnavigeringTotaltAntalProdukter / pagesize) + 1;

    // TÄNK EFTER TVÅ GÅNGER INNAN DU ÄNDRAR I DENNA FUNKTION, det är många fall.

    // paging 1 2 3 4 5 ... 99.  [] nedan markerar nuvarande sida
    $('.js-bildnav-paging  .js-sida').remove();

    if (antalsidor < 10) { // visa alla 9: 1 2 3 4 5 6 7 8 9
        for (var i = 1; i <= antalsidor; i++) {
            $('.js-bildnav-paging .js-sida-container').append("<span class='js-sida nummer " + ((bildnavigeringSida == i) ? "selected" : "") + "' data-page=" + i + ">" + i + "</span>");
        }
    } else if (bildnavigeringSida < 4) { // 1 2 [3] 4 5 ... 99
        for (var i = 1; i <= 5; i++) {
            $('.js-bildnav-paging .js-sida-container').append("<span class='js-sida nummer " + ((bildnavigeringSida == i) ? "selected" : "") + "' data-page=" + i + ">" + i + "</span>");
        }
        $('.js-bildnav-paging .js-sida-container').append("<span class='js-sida dottar'>...</span>");
        $('.js-bildnav-paging .js-sida-container').append("<span class='js-sida nummer' data-page=" + antalsidor + ">" + antalsidor + "</span>");
    }
    else if (antalsidor - bildnavigeringSida < 3) { // 1 ... 67 68 [69] 70 71
        $('.js-bildnav-paging .js-sida-container').append("<span class='js-sida nummer' data-page=" + 1 + ">" + 1 + "</span>");
        $('.js-bildnav-paging .js-sida-container').append("<span class='js-sida dottar'>...</span>");
        for (var i = (+antalsidor - 4); i <= antalsidor; i++) { // notera + för att det ska tolkas som nummer
            $('.js-bildnav-paging .js-sida-container').append("<span class='js-sida nummer " + ((bildnavigeringSida == i) ? "selected" : "") + "' data-page=" + i + ">" + i + "</span>");
        }
    } else { // 1 ...66 67 [68] 69 70 ...99
        $('.js-bildnav-paging .js-sida-container').append("<span class='js-sida nummer' data-page=" + 1 + ">" + 1 + "</span>");
        $('.js-bildnav-paging .js-sida-container').append("<span class='js-sida dottar'>...</span>");
        for (var i = (+bildnavigeringSida - 2); i <= (+bildnavigeringSida + 2); i++) {
            $('.js-bildnav-paging .js-sida-container').append("<span class='js-sida nummer " + ((bildnavigeringSida == i) ? "selected" : "") + "' data-page=" + i + ">" + i + "</span>");
        }
        $('.js-bildnav-paging .js-sida-container').append("<span class='js-sida dottar'>...</span>");
        $('.js-bildnav-paging .js-sida-container').append("<span class='js-sida nummer' data-page=" + antalsidor + ">" + antalsidor + "</span>");
    }

    $('.total-count .value').text(totaltAntalProdukter + " st");

}


function RenderProducts(produktLista) {
    $('.articleError').remove();

    var ac = $('.js-bildnav-produkter');
    var artiklarPrisforfragan = [];

    if (produktLista != undefined && produktLista.length > 0) {
        $.each(produktLista, function (key, item) {

            artiklarPrisforfragan.push(item.ArtNr + ", " + 1 + ", " + artiklarPrisforfragan.length);

            var bild = "/Content/Images/noImg_large.png";

            var liknande = false;


            if (item.ArtikelBildernaPIM.length > 0 && item.ArtikelBildernaPIM[0].Bild != null) {
                bild = "https://resurs.elektroskandia.se" + item.ArtikelBildernaPIM[0].Sokvag + "NORMAL/" + item.ArtikelBildernaPIM[0].Bild;
            }

            var prisenhet = (item.MinMult === 1) ? "" : ("/" + item.SortKod.toLowerCase());

            //console.log("RenderProducts item", item);


            ac.append(
                "<div class='bildnav-produkt-container js-show-shop' data-lagerfores='" + item.LagerFores + "'  id='artnr" + (isNaN(item.ArtNr) ? "" : "E") + item.ArtNr + "'>" +  // lägg på E om numeriskt
                "<div class='zoom'>" +
                "<div class='prod-mini-form'>" +
                "<span class='miniform-left-container'>" +
                "<span class='ledtext'>Lägg till i kundvagn </span>" +
                "<span class='form-part'><label>Antal</label>" +
                "<input type='text' class='antal antal-input' value='" + item.MinMult + "' />" +
                "<ul class='dropdown-menu dropdown-menu-right kabeldropdownPRODUKT'></ul>" +
                "<span class='enhet'>" + item.SortKod + "</span>" +
                "</span></span>" +

                "<button type='button' class='btn btn-md btn-important ' onclick=\"bildnavigeringClickMiniformVagn(event, '" + item.ArtNr + "'); \"   ><i class='fa fa-shopping-cart'></i> Lägg i kundvagn</button>" +
                "<span class='close-shop fa fa-close js-close-shop' title='Stäng'></span>" +
                "</div>" +

                "<a class='bildnav-produkt js-bildnav-produkt' target='_blank' onclick='selectProduct(event, \"" + item.ArtNr + "\", \"click\")'  href='/bildnavigering?id=" + currentKategoriId + "&artnr=" + item.ArtNr + "'>" +
                "<div class='produkt-bild " + (liknande ? "xprodukt-watermark" : "") + " '><img src='" + bild + "'  loading=\"lazy\"  /></div>" +


                (
                    item.CO2Total ? '<img src="' + '/Content/Images/GreenOffer_' + item.GreenOfferKlass + '.svg" class="green-offer" alt="' + item.CO2Total + '" />' : ''
                )

                +
                (
                    (item.GladGubbe || item.GladGubbeGBGEnergi || item.TummenUpp) ?
                        '<div class="" style="position:absolute; background-color: #f8f8f8;right:0;padding-right: 5px;padding-left: 5px;">' +
                        (item.GladGubbe || item.GladGubbeGBGEnergi ? '<i class="fal fa-thin fa-smile"></i> ' : '')
                        +
                        (item.TummenUpp ? '<i class="fal fa-thin fa-thumbs-up"></i>' : '')
                        +
                        '</div>'
                        :
                        ''
                )
                +
                "<div class='text'>" +
                "<div class='benamning'><span class='label'>Benämning</span><span class='innertext'> " + item.ArtBen + " <span></div>" +
                "<div class='artikelnummer'><span class='label'>ArtNr</span><span class='artnr'>" + item.ArtNr + "</span></div>" +
                ((GenerellInformation.inloggad) ?
                    ("<div class='pris initial-hide'><span class='label'>Pris</span>" + (item.GrundNettoPris != 0 ? "<span class='netto'><span class='prisvarde'></span><span class='prisenhet'>" + prisenhet + "</span></span><span class='grund'><span class='prisvarde'>" + asPrice(item.GrundNettoPris) + "</span><span class='prisenhet'>" + prisenhet + "</span></span>" : "") + "</div>") :
                    "<div class='pris'>&nbsp;</div>") +
                "<div class='varumarke'><span class='label'>Varumärke</span><span class='innertext'> " + ((item.Varumarke == null) ? "<i>saknas</i>" : item.Varumarke) + " </span></div>" +
                "<div class='lagerstatus'><span class='label'>Lagerföres</span> </div>" +
                ((item.ArtikelText == null) ? "<i class='artikeltext'>beskrivning saknas</i>" :
                    ("<div class='artikeltext'><span class='label'>ArtikelText</span><span class='innertext'> " + (((item.ArtikelText + "").length > 200) ? (item.ArtikelText + "").substr(0, 199) + "</span><b>...läs mer</b>" : (item.ArtikelText + "")) + " </div>")) +
                "</div>" +
                "</a>" +

                "<i class='vagn fa fa-shopping-cart js-open-miniform'  " + ((GenerellInformation.inloggad) ? "" : "style=display:none") + "    ></i>" +

                // FEL ZZZ
                '<i class=" ' + (item.FinnsIFavorit ? "fa fa-star aktiv" : "fal fa-star") + ' js-favorit-artnr-in-list" ' + ((GenerellInformation.inloggad) ? "" : "style=display:none") + '></i>' + // måste vara efter för att ligga över utan att använda z-index som vi inte kan använda här
                '<i class="js-jamfor-artnr-in-list ' + (item.FinnsIJamforelse ? 'fa fa-balance-scale aktiv' : 'fal fa-balance-scale') + '" ' + ((GenerellInformation.inloggad) ? "" : "style=display:none") + '></i>' +
                "<img class='lagerstatus js-visaSaldo-in-list js-open-miniform' onclick=\"visaSaldoModal('" + item.ArtNr + "')\"  src='/Content/Images/SaldoFull.svg' alt='I lager' " + ((GenerellInformation.inloggad) ? "" : "style=display:none") + "    >" +

                "</div>" +
                "</div>"
            );

        });
    } else {

        ac.append("<div class='bildnav-produkt-container inga-produkter-hittade'><p>Inga artiklar hittade.</p> <p>Om du har filtrerat, <b>ändra filter och/eller lagerföres</b></p><br></div>");
    }
    return artiklarPrisforfragan;
}


function RenderPriser(artiklarPrisforfragan) {


    if (artiklarPrisforfragan.length > 0 && GenerellInformation.inloggad) {
        var lastXhr = $.ajax({
            type: "POST",
            url: "/InternWebApi/PrisOchSaldofraga",
            data: JSON.stringify({ artnrantlista: artiklarPrisforfragan.join("|") }), // 6990770, 1, 0|1625454, 1, 1|1625455, 1, 2
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (data) {
                //console.log("prisförf", data);
                if (data.Status === "OK") {
                    for (var i = 0; i < data.saldoPrisfragaSvarLista.length; i++) {

                        $('#artnr' + data.saldoPrisfragaSvarLista[i].ArtNr + ' .pris').removeClass("initial-hide");

                        if (data.saldoPrisfragaSvarLista[i].Kundnetto === 0) {

                            $('#artnr' + data.saldoPrisfragaSvarLista[i].ArtNr + ' .netto').text("Pris på begäran");
                            $('#artnr' + data.saldoPrisfragaSvarLista[i].ArtNr + ' .pris').addClass("on-demand");
                        } else {
                            $('#artnr' + data.saldoPrisfragaSvarLista[i].ArtNr + ' .netto .prisvarde').text(GenerellInformation.kundnetto ? asPrice(data.saldoPrisfragaSvarLista[i].Kundnetto) : '');
                        }

                        var saldo = data.saldoPrisfragaSvarLista[i].LagerSaldo;

                        //console.log("data.saldoPrisfragaSvarLista[i].LagerSaldo", data.saldoPrisfragaSvarLista[i].LagerSaldo);

                        var titel = "Lagerstatus: " + saldo;
                        var ikon = 'SaldoFull.svg';

                        var lagerfores = $('#artnr' + data.saldoPrisfragaSvarLista[i].ArtNr).attr("data-lagerfores");


                        if (lagerfores == "true") {
                            //console.log('lagerfores == "true")');
                            if (saldo <= 0) {
                                ikon = 'SaldoTom.svg';
                            } else if (saldo <= 10) {
                                ikon = 'SaldoLag.svg';
                            } else {
                                ikon = 'SaldoFull.svg';
                            }
                        } else {
                            ikon = 'saldoAnskaffning.svg';
                            titel = 'Anskaffningsvara\nOBS Lagerstatus\ncentrallager: ' + saldo;

                            //if (saldo > 0) {
                            //    ikon = 'saldoAnskaffningFinnsILager.svg';
                            //} else {
                            //    ikon = 'saldoAnskaffning.svg';
                            //    titel = 'Anskaffningsvara\nOBS Lagerstatus\nC - lager: ' + saldo;
                            //}
                        }
                        $('#artnr' + data.saldoPrisfragaSvarLista[i].ArtNr + ' .lagerstatus').attr('src', '/Content/Images/' + ikon).attr('title', titel);
                    }
                }
                else {
                    $('.pris .netto').remove();
                }
            },
            error: function (xmlHttpRequest, textStatus) {
            }
        });


        var lastXhr2 = $.ajax({
            type: "POST",
            url: "/InternWebApi/PrisOchSaldofraga2",
            data: JSON.stringify({ artnrantlista: artiklarPrisforfragan.join("|") }), // 6990770, 1, 0|1625454, 1, 1|1625455, 1, 2
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (data) {

                //console.log("request pris förfrågan", artiklarPrisforfragan.join("|"));
                //console.log("prisförf", data);
            },
            error: function (xmlHttpRequest, textStatus) {
            }
        });

    }

}

function kategori(id) {
    // placeholder. Do nothing for now. Den visar vilken kategori vid mouse over av länk "javascript:kategori(2526)"
}


// LABB


function RenderFastaFilter(data) {
    let varumarken = data.VarumarkenGroupBY;
    let produktlinjer = data.ProduktlinjeGroupBY


    var eL = $('.varumarkenochproduktlinjer-filter-list');

    eL.empty();

    var html = "";
    if (varumarken.length > 0) {    // varumärken

        html = '<div class="filter-item varumarken"><div class="zooma">';
        html += '<div class="egenskap-typ">Varumärken</div>';
        html += '<div class="egenskap-value-list">';

        //if (varumarken.length > 1) {
        //    html += "<div class='filter-more-indicator'><span class='checked-count'></span>v</div>";
        //}

        $.each(varumarken, function (key, item) {
            html += "<div class='filter-namn' ><label><input type='checkbox' name='filter-varumarken'   value='" + item.Key + "' data-value-displayname='" + item.Key + "' /> " + item.Key + "<span class='antal'>" + item.Value + " st</span>" +
                "</label></div>";
        });

        html += '</div>';
        html += '</div zoom></div egenskapsitem>'; // egenskapitem
    }

    if (produktlinjer.length > 0) {        // produktlinjer

        html += '<div class="filter-item produktlinjer"><div class="zooma">';
        html += '<div class="egenskap-typ">Produktlinjer</div>';
        html += '<div class="egenskap-value-list">';

        //if (produktlinjer.length > 1) {
        //    html += "<div class='filter-more-indicator'><span class='checked-count'></span>v</div>";
        //}

        $.each(produktlinjer, function (key, item) {
            //            html += "<div class='filter-namn' ><label><input type='checkbox' name='filter-produktlinje' value='" + item.Key + "' data-value-displayname='" + item.Key + "' /> " + item.Key + "<span class='antal'>" + item.Value + " st</span></label></div>";
            html += `<div class="filter-namn"><label><input type="checkbox" name="filter-produktlinje" value="${item.Key}" data-value-displayname="${item.Key}" /> ${item.Key}<span class="antal">${item.Value} st</span></label></div>`;
        });

        html += '</div>';
        html += '</div zoom></div egenskapsitem>'; // egenskapitem

    }



    if (data.BvbTotaltAntal) {        // byggvarubedömd
        html += '<div class="filter-item bvb"><div class="zooma">';
        html += '<div class="egenskap-typ">Byggvarubedömning</div>';
        html += '<div class="egenskap-value-list">';

        html += `<div class="filter-namn"><label><input type="checkbox" name="filter-bvb" value="bvb" data-value-displayname="Ja" />Ja<span class="antal">${data.BvbTotaltAntal} st</span></label></div>`;

        html += '</div>';
        html += '</div zoom></div>';
    }

    if (data.GreenOfferClassTotaltAntal) {        // green offer, kolla att man HAR green offer
        html += '<div class="filter-item green-offer"><div class="zooma">';
        html += '<div class="egenskap-typ">Green offer</div>';
        html += '<div class="egenskap-value-list">';

        html += `<div class="filter-namn"><label><input type="checkbox" name="filter-greenoffer" value="greenoffer" data-value-displayname="Ja" />Ja<span class="antal">${data.GreenOfferClassTotaltAntal} st</span></label></div>`;

        html += '</div>';
        html += '</div zoom></div>';
    }

    if (GenerellInformation.inloggad) {        // butiksfilter

        if (data.MinaButiker.length>0) {
            html += '<div class="filter-item butiker"><div class="zooma">';
            html += '<div class="egenskap-typ" title="Finns i mina butiker (Se Mina sidor/Mina Butiker)">Mina butiker</div>';
            html += '<div class="egenskap-value-list">';

            $.each(data.MinaButiker, function (key, item) {
                console.log('item', item);
                html += `<div class="filter-namn"><label><input type="checkbox" name="filter-minabutiker" value="${item.Value}" data-value-displayname="${item.Key}" /> ${item.Key}</label></div>`;
            });


            html += '</div>';
            html += '</div zoom></div>';
        } else {
            html += '<div class="filter-item butiker"><div class="zooma">';
            html += '<div class="egenskap-typ">Mina butiker</div>';
            html += '<div class="egenskap-value-list">Du har inte valt några butiker.<br><a href="/minabutiker">Lägg till egna butiker här</a>.</div>';
            html += '</div>';
            html += '</div zoom></div>';
        }

    }



    eL.append(html);
}






function RenderEgenskaper2(bildnavFilter) { // döp om till RenderFilters när gamla RenderFilter kastas
    var eL = $('.egenskaper-filter-list');
    var index = 0;

    eL.empty();
    // TODO: ta hänsyn till state?

    // bildnavFilter format = R och N - de är rangekandidater

    console.log('bildnavFilter', bildnavFilter);

    $.each(bildnavFilter, function (filternamn, itemlist) {
        //console.log("1. Egenskap filternamn", filternamn);
        //console.log("egenskap itemlist", itemlist);
        //console.log("egenskap itemlist.length", itemlist.length);

        index++;

        var id = itemlist[0].EtimFeatureId;
        //var exempelvarde = itemlist[0].Varde;

        var allValuesAreNumeric = true;
        var allValuesAreNumericOrInterval = true;
        itemlist.forEach(function (item) {
            if (isNaN(item.Varde)) allValuesAreNumeric = false;
            var v = (item.Varde + '').replace(/./g, "");
            //console.log(v);
            if (isNaN(v)) allValuesAreNumericOrInterval = false;
        });

        var format = itemlist[0].Format; // R och N tillåter slider
        var enhet = itemlist[0].Enhet;
        if (enhet == null) enhet = "";

        var html = "<div class='filter-item' id='filternummer_" + index + "' data-id='" + id + "'><div class=zooma>"; // TODO: ta bort index
        html += "<div class='egenskap-typ'>" + filternamn + "</div>";

        html += "<div class='egenskap-value-list'>";

        //console.log(filternamn, "allValuesAreNumeric", allValuesAreNumeric, "allValuesAreNumericOrInterval", allValuesAreNumericOrInterval);

        // om värdena är rent numeriska, sortera om numeriskt
        if (allValuesAreNumeric) itemlist.sort(function (a, b) { return a.Varde - b.Varde; });
        else if (allValuesAreNumericOrInterval) itemlist.sort(function (a, b) {
            //console.log(a, b, a.Varde.replace('..', '...').split('...')[0], b.Varde.replace('..', '...').split('...')[0])
            return +((a.Varde + '').replace('..', '...').split('...')[0]) - +((b.Varde + '').replace('..', '...').split('...')[0]);
        });


        var addSlider = (format == 'N' || format == 'R') && itemlist.length > 4 && allValuesAreNumeric && enhet != "";

        //console.log('  allValuesAreNumeric', allValuesAreNumeric, '  allValuesAreNumericOrInterval', allValuesAreNumericOrInterval, 'format', format, 'addSlider', addSlider);

        var addSliderForIntervalEtim = (allValuesAreNumericOrInterval && !allValuesAreNumeric && (format == 'N' || format == 'R'));


        // Visa egenskapen som slider eller checkbox, eller slider for intervaletim 
        if (addSlider) {
            var sliderValues = [];
            $.each(itemlist, function (key, item) {
                sliderValues.push(item.Varde);
            });

            html += '<div class="filter-slider" > <div class="slider-range" data-enhet="' + enhet + '"  data-selectables="' + sliderValues.join() + '"></div><div class="slider-value">' + sliderValues[0] + "-" + sliderValues[sliderValues.length - 1] + " " + enhet + '</div></div>'; // TODO: lägg till thin space
        } else if (addSliderForIntervalEtim) {
            var sliderValues = [];
            $.each(itemlist, function (key, item) {
                //console.log('item.Varde', item.Varde);
                if (item.Varde.indexOf('...') > -1) {
                    //console.log('item.Varde', item.Varde, 'item.Varde.split...]', item.Varde.split['...']);
                    sliderValues.push(item.Varde.split('...')[0]);
                    sliderValues.push(item.Varde.split('...')[1]);
                } else {
                    sliderValues.push(item.Varde);
                }
                // ta bort dubletter, 5 kan ju förekomma i 5, 5..10, 1..5
                //sliderValues = [...new Set(sliderValues)];

                sliderValues = sliderValues.filter(function (c, index) {
                    return sliderValues.indexOf(c) === index;
                });

                // sortera
                sliderValues.sort(function (a, b) {
                    return a - b
                });

            });
            html += '<div class="filter-slider" > <div class="slider-range has-etim-ranges" data-enhet="' + enhet + '"  data-selectables="' + sliderValues.join() + '"></div><div class="slider-value">' + sliderValues[0] + "-" + sliderValues[sliderValues.length - 1] + " " + enhet + '</div></div>';

        } else { // lista checkboxar


            $.each(itemlist, function (key, item) {
                html += "<div class='filter-namn' ><label><input type='checkbox' name='filter-egenskap' value='" + item.Varde + "' data-value-displayname='" + item.Varde + " " + enhet + "' data-value-filter='" + id + "' /> " + item.Varde + " " + enhet + "<span class='antal'>" + item.Antal + " st<span></label></div>";
            });

        }


        html += "</div>";
        html += "</div zoom></div>";

        eL.append(html);

        if (addSliderForIntervalEtim) {
            var selectorid = "#filternummer_" + index;
            var el = $(selectorid + " .slider-range");
            var translatingTable = el.attr("data-selectables").split(",");

            var count = translatingTable.length;

            $("#filternummer_" + index + " .slider-range").slider({
                range: true,
                min: 0,
                max: count - 1,
                step: 1,
                values: [0, count - 1],
                slide: function (event, ui) {
                    // SLIDER EVENT
                    var lowerIndex = ui.values[0];
                    var upperIndex = ui.values[1];
                    var lower = translatingTable[lowerIndex].toString();
                    var upper = translatingTable[upperIndex].toString();

                    $(selectorid + " .slider-value").text(lower + "-" + upper + " " + enhet);

                    // ADD TO or UPDATE active filter list

                    // exist? Then just update it
                    var alreadyExisting = false;
                    for (var i = 0; i < activeFilters.length; i++) {
                        if (activeFilters[i].id == id) {
                            alreadyExisting = true;
                            activeFilters[i].value = lower + "," + upper;
                            activeFilters[i].valuedisplayname = lower + "-" + upper + " " + enhet;
                        }
                    }
                    if (!alreadyExisting) {
                        activeFilters.push({ id: id, name: filternamn, value: lower + "," + upper, valuedisplayname: lower + "-" + upper + " " + enhet });
                    }
                    RenderActiveFilters();

                    clearTimeout(timerGetProductsAndFilters);

                    timerGetProductsAndFilters = setTimeout(function () { getProductsAndFilters(); }, 1000); // TODO: kortare

                }
            });

        }

        if (addSlider) {
            var selectorid = "#filternummer_" + index;
            var el = $(selectorid + " .slider-range");
            if (el && el.attr("data-selectables")) {
                var translatingTable = el.attr("data-selectables").split(",");

                var count = translatingTable.length;

                $("#filternummer_" + index + " .slider-range").slider({
                    range: true,
                    min: 0,
                    max: count - 1,
                    step: 1,
                    values: [0, count - 1],
                    slide: function (event, ui) {
                        // SLIDER EVENT
                        var lowerIndex = ui.values[0];
                        var upperIndex = ui.values[1];
                        var lower = translatingTable[lowerIndex].toString();
                        var upper = translatingTable[upperIndex].toString();

                        $(selectorid + " .slider-value").text(lower + "-" + upper + " " + enhet);

                        // ADD TO or UPDATE active filter list

                        // exist? Then just update it
                        var alreadyExisting = false;
                        for (var i = 0; i < activeFilters.length; i++) {
                            if (activeFilters[i].id == id) {
                                alreadyExisting = true;
                                activeFilters[i].value = lower + "," + upper;
                                activeFilters[i].valuedisplayname = lower + "-" + upper + " " + enhet;
                            }
                        }
                        if (!alreadyExisting) {
                            activeFilters.push({ id: id, name: filternamn, value: lower + "," + upper, valuedisplayname: lower + "-" + upper + " " + enhet });
                        }
                        RenderActiveFilters();

                        clearTimeout(timerGetProductsAndFilters);

                        timerGetProductsAndFilters = setTimeout(function () { getProductsAndFilters(); }, 1000); // TODO: kortare

                    }
                });


            }

        }


    });
}

var timerGetProductsAndFilters;

//var delayedGetProductsAndFiltersOnGoing = false;

//function delayedGetProductsAndFilters() {
//    console.log("delayed_getProductsAndFilters");

////    getProductsAndFilters();

//}







function RenderActiveFilters() {

    $(".js-active-filters .active-filter").remove();

    var eL = $(".js-active-filters");

    $.each(activeFilters, function (key, item) {
        var html = "<div title='Ta bort filter'  class='active-filter' data-id='" + item.id + "' data-value='" + item.value + "'  ><span class='name'>" + item.name + "</span><span class='value'>" + item.valuedisplayname + "</span></div>";
        eL.append(html);
    });
}


function selectProduct(event, artnr, action) { // dubblett! TODO gör namnet unikt

    console.log('selectProduct action', action);

    hideProductDialogs();

    if (event != null) event.preventDefault();

    if (action != "back" && action != 'loadfromurl') history.pushState('', '', '?id=' + currentKategoriId + '&artnr=' + artnr);

    $('.js-product-view').show();
    $('.js-product-nav-and-list').hide(); // produktlistan
    $('.bildnavigering-kategorier-inner-container').hide(); // kategorlistan som består av bilder

    //    $('#artnr .text').text(artnr);
    $('.produkt-artnr').text(artnr);


    // scroll to 
    var el = document.getElementById("produkt-bild");
    if (el && !isElementInViewport(el)) {
        //el.scrollIntoView();
        document.body.scrollTop = 0; // For Safari
        document.documentElement.scrollTop = 0; // For Chrome, Firefox, IE and Opera
    }


    // det är ingen ide att göra detta om vi laddar från URL, det finns inga data här ännu
    if (action == "click") {
        // förladda lite data medans vi väntar så användaren får lite produktdata att titta på

        // förladda några data vi redan har
        var cssid = "#artnr" + (isNaN(artnr) ? "" : "E") + artnr;  // from
    }


    // Denna sats kräver att bildnavigering.allaArtiklar-listan finns och det gör den inte ännu
    //om vi öppnar från url dvs "loadfromurl".Då laddar vi istället next - prev navigeringen när bildnavigeringsanropet besvarats
    if (action != 'loadfromurl') {


        renderInProductNavigering(artnr);
    }



    // ladda produktdata
    LaddaRenderaProdukt(artnr);



    if (GenerellInformation.inloggad) {

        var tempArtnr = params("artnr");
        var artnrantlista = tempArtnr + ", " + 1 + ", " + 0 + "|";

        $.ajax({
            type: "POST",
            url: "/InternWebApi/Prisfraga",
            data: JSON.stringify({ artnrantlista: artnrantlista }),
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (data) {

                if (data.saldoPrisfragaSvarLista.length > 0) {
                    var pris = data.saldoPrisfragaSvarLista[0].Kundnetto;


                    if (pris == 0) {
                        $('.artikel-priser-kundnettopris').text("Pris på begäran");
                    } else {
                        $('.artikel-priser-kundnettopris .prisvarde').text(GenerellInformation.kundnetto ? asPrice(pris) : '');
                    }
                }
            },
            error: function (xmlHttpRequest, textStatus) {
                alert("Ett fel inträffade (" + textStatus + ")", "Fel");
            }
        });
    }

    return false;

}

function renderInProductNavigering(artnr) {

    var index = allaArtiklar.indexOf(artnr);

    if (index > 0) {
        $('.js-prev-prod').attr('onclick', 'selectProduct(event, "' + allaArtiklar[index - 1] + '", "click")'); //  ...klick
        $('.js-prev-prod').attr('href', "bildnavigering?id=" + currentKategoriId + "&artnr=" + allaArtiklar[index - 1]); // ...url
    } else {
        $('.js-prev-prod').removeAttr('href');
        $('.js-prev-prod').removeAttr('onclick');
    }
    if (index < allaArtiklar.length - 1) {
        $('.js-next-prod').attr('onclick', 'selectProduct(event, "' + allaArtiklar[index + 1] + '", "click")'); //  ...klick
        $('.js-next-prod').attr('href', "bildnavigering?id=" + currentKategoriId + "&artnr=" + allaArtiklar[index + 1]); // ...url
    } else {
        $('.js-next-prod').removeAttr('href');
        $('.js-next-prod').removeAttr('onclick');
    }

}




function backToProductList() {
    history.pushState('', '', '?id=' + currentKategoriId);

    hideProduct();

    return false;
}

function hideProduct(e) {

    $('.js-product-view').hide();
    $('.js-product-nav-and-list').show();
    $('.bildnavigering-kategorier-inner-container').show();

    // återställ breadcrumb
    $('.js-product-leaf').remove();
    $('.js-category-leaf.smula').removeClass('smula').addClass('leaf');

    // återställ title
    window.document.title = $('.js-category-leaf.leaf').text();


    // från: js-category-leaf smula till:  leaf js-category-leaf
    return false;
}

function visaBild(src) {
    $(".js-modal-bild").find(".js-modal-bild-wrap").html('<img class="img-fluid" src="' + src + '"/>');
    var srcRoot = src.replace("large/", "").replace("Large/", "");
    $(".js-modal-bild").find(".js-modal-lank-wrap a").attr("href", srcRoot);
    $(".js-modal-bild").modal("show");
}

function visaBild2(src) {
    $(".js-modal-bild2").find(".js-modal-bild-wrap").html('<img class="img-fluid" src="' + src.replace('large/', '') + '"/>');
    var srcRoot = src.replace("large/", "").replace("Large/", "");
    //    $(".js-modal-bild2").find(".js-modal-lank-wrap a").attr("href", srcRoot);
    $(".js-modal-bild2").find(".js-modal-lank-wrap a").attr("href", "javascript:downloadPic('" + srcRoot + "')");


    $(".js-modal-bild2").find('.modal-content')
        //.css({
        //    width: '100%',
        //    height: '80vh'
        //})
        .resizable({
            minWidth: 400,
            minHeight: 400,
            handles: 'n, e, s, w, ne, sw, se, nw',
        })
        .draggable({
            handle: '.modal-header'
        });

    var slideShowPics = document.querySelectorAll('.slick-slide:not(.slick-cloned) .produkt-slide-bild > .img-fluid[onclick]');
    $(".js-modal-bild2 .slick-arrow").toggle(slideShowPics.length != 1);

    $(".js-modal-bild2").modal("show");

}
function changePic(forward) {
    var currentPicEl = document.querySelector('.js-modal-bild2 .js-modal-bild-wrap.modal-bild img');
    var currentPicName = currentPicEl.src.split('/').pop();

    var slideShowPics = document.querySelectorAll('.slick-slide:not(.slick-cloned) .produkt-slide-bild > .img-fluid[onclick]');

    var currentIndex;
    slideShowPics.forEach(function (pic, i) {
        var name = pic.src.split('/').pop();
        if (name == currentPicName) currentIndex = i;
    });
    var newIndex = (currentIndex + (forward ? 1 : -1) + slideShowPics.length) % slideShowPics.length;
    var newPic = slideShowPics[newIndex].src.replace('large/', '');
    currentPicEl.src = newPic;
    //    $(".js-modal-bild2").find(".js-modal-lank-wrap a").attr("href", newPic);

    $(".js-modal-bild2").find(".js-modal-lank-wrap a").attr("href", "javascript:downloadPic('" + newPic + "')");



}

function downloadPic(pic) {
    //    alert(pic);
    //    var pic = pic.replace('https://', 'http://');

    var x = new XMLHttpRequest();
    x.open("GET", pic, true);
    //    x.setRequestHeader('content-disposition', 'attachment');
    x.responseType = 'blob';
    x.onload = function (e) { download(x.response, pic.split('/').pop(), "image/jpg"); }
    x.send();


    //var link = document.createElement('a');
    //link.href = pic;
    //link.download = pic.split('/').pop();
    //document.body.appendChild(link);
    //link.click();
    //document.body.removeChild(link);
}
//let oldX = 0, oldY = 0;

//function captureMouseMove($event) {
//    let directionX = "", directionY = "", diffX = 0, diffY = 0;
//    //if ($event.pageX < oldX) {
//    //    directionX = "left";
//    //    diffX = oldX - $event.pageX;
//    //} else if ($event.pageX > oldX) {
//    //    directionX = "right";
//    //    diffX = $event.pageX - oldX;
//    //}

//    if ($event.pageY < oldY - 50) {
//        directionY = "going-up";
//        diffY = oldY - $event.pageY;
//        $(".bildnav-filter").removeClass("going-up").addClass("going-down");
//        oldY = $event.pageY;
//    } else if ($event.pageY > oldY + 50) {
//        directionY = "going-down";
//        diffY = $event.pageY - oldY;
//        $(".bildnav-filter").removeClass("going-down").addClass("going-up");
//        oldY = $event.pageY;
//    }

//    //oldX = $event.pageX;
//}

//$(".varumarkenochproduktlinjer-filter-list.filter-list").on("mousemove", ".filter-namn", function ($event) {
//    console.log($event.pageY);
//    $('.undermeny-mina-sidor').text($event.pageY);
//});


//window.addEventListener('mousemove', captureMouseMove);



//window.onload = function () {
//    try {
//        //BlockeraUI("Laddar...");
//        initieraBildnavigering();
//        //initBN();
//        console.log('normal init');
//    } catch { // för google
//        console.log('fördröjt');
//        setTimeout(initieraBildnavigering, 1000);
//    }
//};
;


function LaddaRenderaProdukt(artnr, isFromSok) {


    var requestData = {
        artnr: artnr
    };
    $.ajax({
        type: "GET",
        data: requestData,
        url: "/produkt/hamtamodel",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (data) {

            AvblockeraUI();

            if (data.Artikeln == null) {
//                $('.js-product-view').empty();
                $('.js-product-view').hide();
                document.querySelector('.js-product-view').outerHTML += `<div class="articleError">Artikel ${artnr} kunde inte hittas</div>`;
                return;
            } else {
                $('.js-product-view').show();
                $('.articleError').remove();
            }
                
            var artben = data.Artikeln.ArtBen;
            window.document.title = artnr + " | " + artben;

            var kategoriID = (data.rubrikerMedIdKvp.length == 0) ? 1 : data.rubrikerMedIdKvp[data.rubrikerMedIdKvp.length - 1].Key;

            console.log('setting canonical' + '/bildnavigering?id=' + kategoriID + '&artnr=' + artnr);
            $('head link[rel=canonical]').remove();
//            $('head').append('<link rel="canonical" href="/bildnavigering?id=' + kategoriID + '&artnr=' + artnr + '" />');
            $('head').append('<link rel="canonical" href="/bildnavigering?artnr=' + artnr + '" />');


            if (currentKategoriId == 0) {

                // öppna trädets grenar och peka ut rätt nod. Spara den funna kategorin

                openBranchesMarkNodesAndRenderBreadcrumbs(kategoriID); // sätter också currentKategoriId

                // uppdatera URL med den funna kategorin
                // Detta ska bara göras om vi är i bildnavigeringen
                if (!isFromSok && kategoriID) history.replaceState('', '', '?id=' + kategoriID + '&artnr=' + artnr);
            }


            var loggbild = "";
            if (data.Artikeln.ArtikelBildernaPIM.length > 0) {
                loggbild = "https://resurs.elektroskandia.se" + data.Artikeln.ArtikelBildernaPIM[0].Sokvag + "/NORMAL/" + data.Artikeln.ArtikelBildernaPIM[0].Bild;
            } else {
//                bild = "https://resurs.elektroskandia.se/Content/Images/noImg_large.png";
                loggbild = "/Content/Images/noImg_large.png";
            }

            loggaVisadProdukt(artnr, artben, kategoriID, loggbild);

            visaSenasteProdukt(); // KOMMENTAR666


            $('.js-prev-next-desc').text(data.rubriker[data.rubriker.length - 1]);



            $(".ersatts-av").empty();

            if (data.ArtikelRelRader != null && data.ArtikelRelRader.length > 0) {
                data.ArtikelRelRader.forEach(function (a) {
                    if (a.RelationsTyp == "Ersätts av") {
                        $(".ersatts-av").append('<a href="/bildnavigering?artnr=' + a.ArtNr + '" class="">Ersätts av ' + a.ArtNr + '</a><br/>'); 
                    }
                    if (a.RelationsTyp.toLowerCase() == "ersätts närmast av") {
                        $(".ersatts-av").append('<a href="/bildnavigering?artnr=' + a.ArtNr + '" class="">Ersätts närmast av ' + a.ArtNr + '</a><br/>'); 
                    }
                });
            }



            // delete old nodes
            $(".produkt-spec-lista").empty();

            // artikelnummer
            $(".produkt-spec-lista").append('<dt class="artikel-artnr">Artnr</dt><dd class="artikel-artnr">' + artnr + '</dd>');


            if (data.Artikeln.ArtikelExternt != null && data.Artikeln.ArtikelExternt.length > 0) {
                var extartnr = data.Artikeln.ArtikelExternt[0].ArtNrExternt;
                $(".produkt-spec-lista").append('<dt class="kundensartnr">Kundartnr</dt><dd>' + extartnr + '</dd>');
            }


            //if (data.Artikeln.ArtNrExternt != null && data.Artikeln.ArtNrExternt.length>2) $(".produkt-spec-lista").append('<dt class="kundensartnr">Kundens artnr</dt><dd>' + data.Artikeln.ArtNrExternt + '</dd>');

            var artNrEndastForPDFlank = formateraArtikelNummerForDatabas(artnr); 

            $('.pdflank').empty().append('<a href="/produktbladpdf?artnr=' + artNrEndastForPDFlank + '&amp;utanpris=false" class="print-pdf" download="produktblad.pdf"><i class="fa fa-print"></i> Skriv ut / PDF</a>');
            $('.pdflank').append('<a href="/produktbladpdf?artnr=' + artNrEndastForPDFlank + '&amp;utanpris=true" class="print-pdf" download="produktblad.pdf"><i class="fa fa-print"></i> Skriv ut / PDF utan pris</a>');



            $('#benamning h1').text(data.Artikeln.ArtBen);
            $('#produkt-rubrik h1').text(data.Artikeln.ArtBen);

            

            $('.js-product-leaf').remove();
            $('.js-breadcrumbs').append('<a class="leaf js-product-leaf" href="javascript:void(0)">' + data.Artikeln.ArtBen + '</a>');

            $('.js-breadcrumbs .js-category-leaf').removeClass('leaf').addClass("smula");




            // knappstatusar

            $('#benamning .js-favorit-artnr i').removeClass("fa fal").addClass((data.finnsSomFavorit ? "fa" : "fal")); // FEL ZZZ
            $('#benamning .js-jamfor-artnr i').removeClass("aktiv fa fal").addClass(data.finnsIJamforelse ? "fa aktiv" : "fal");


            $('.js-produkt-dela-container .utanpris').attr("href", "/produktbladpdf?artnr=" + artNrEndastForPDFlank + "&utanpris=false");
            $('.js-produkt-dela-container .medpris').attr("href", "/produktbladpdf?artnr=" + artNrEndastForPDFlank + "&utanpris=true");



            if (data.Artikeln.KonfiguratorFinns && data.Artikeln.ArtikelKonfiguratorer.length > 0) {

                if (data.Artikeln.ArtikelKonfiguratorer.length > 1) {

                    var html = '<div id="jq-dropdown-1" class="jq-dropdown jq-dropdown-tip jq-dropdown-anchor-right"><ul class="jq-dropdown-menu">';
                    data.Artikeln.ArtikelKonfiguratorer.forEach(function (af) {
                        console.log("af", af);

                        if (af.KonfiguratorUrl.indexOf('?') > 0) {
                            html += '<li><a href="' + af.KonfiguratorUrl + '&artnr=' + af.Artnr + '" >' + af.KonfiguratorNamn + ' </a></li>';
                        } else {
                            html += '<li><a href="' + af.KonfiguratorUrl + '?artnr=' + af.Artnr + '" >' + af.KonfiguratorNamn + ' </a></li>';
                        }
                    });


                    html += "</ul></div>";

                    $("body").append(html);

                }
                if (data.Artikeln.ArtikelKonfiguratorer.length == 1) {

                    $('.js-konfigurator-artnr1').show();
                    $('.js-konfigurator-artnr2').hide();

                    if (data.Artikeln.ArtikelKonfiguratorer.length > 0) {
                        enkonf = data.Artikeln.ArtikelKonfiguratorer[0].KonfiguratorUrl;

                        if (enkonf.indexOf("http")) { // Startswith
                            if (enkonf.indexOf("?") > 0) {
                                enkonf = enkonf + "&artnr=" + data.Artikeln.ArtNr;
                            }
                            else {
                                enkonf = enkonf + "?artnr=" + data.Artikeln.ArtNr;
                            }
                        }
                        enkonftitle = "Konfigurator: " + data.Artikeln.ArtikelKonfiguratorer[0].KonfiguratorNamn;
                    }
                } else {
                    $('.js-konfigurator-artnr1').hide();
                    $('.js-konfigurator-artnr2').show();
                }
            } else {
                $('.js-konfigurator-artnr1').hide();
                $('.js-konfigurator-artnr2').hide();
            }


        

            $('#Anteck').val(data.ArtikelAnteckningen || "");


            var prisenhet = (data.Artikeln.MinMult === 1) ? "" : ("/" + data.Artikeln.SortKod.toLowerCase());

            $('.js-product-view .prisenhet').text(prisenhet);


            $('.js-product-view .artikel-priser-grundnettopris .prisvarde').text(asPrice(data.Artikeln.GrundNettoPris));

            $('.js-product-view #antalTextBox').val(data.Artikeln.MinMult);
            $('.js-product-view .input-group-addon').text(data.Artikeln.SortKod);



            //console.log("data.Artikeln", data.Artikeln.ArtikelDatas);

            $('#cylinda-text').empty();
            if (data.Artikeln.ArtikelDatas.length > 0 && data.Artikeln.ArtikelDatas[0].Typ == "CylindaText") {
                $('#cylinda-text').text(data.Artikeln.ArtikelDatas[0].Varde);
            } 

            // produktbild, slideshow
            if (data.produktBilder == 0) {
                //                    $('#produkt-bild img').attr("src", "/Content/Images/noImg.png");
            }
            if ($('.js-produkt-bild').hasClass('slick-initialized')) {
                try {
                    $('.js-produkt-bild').slick('unslick');
                } catch (e) { ; }
            }
            if ($('.js-produkt-bildSpel').hasClass('slick-initialized')) {
                try {
                    $('.js-produkt-bildSpel').slick('unslick');
                } catch (e) { ; }

            }


            $('.js-produkt-bild').empty();
            $('.js-produkt-bildSpel').empty();

            var bildflagga = false;
            data.Artikeln.ArtikelBildernaPIM.forEach(function (bilderDto) {
                if (bilderDto.BildTyp == 2) {

                    bildflagga = true;

                    // huvudbild
                    $('.js-produkt-bild').append(
                        '<div class="produkt-slide-bild ' + (bilderDto.Liknande ? 'xprodukt-watermark' : '') + '  "><img class="img-fluid" src="https://resurs.elektroskandia.se' + bilderDto.Sokvag + "large/" + bilderDto.Bild + '" onError="imgError(this)" onclick="visaBild2(\'https://resurs.elektroskandia.se/' + bilderDto.Sokvag + "large/" + bilderDto.Bild + '\')" /></div>'
                    );
                    // tumnaglar i slideshow
                    if (data.produktBilder > 1) $('.js-produkt-bildSpel').append(
                        '<div class="produkt-slide-bild"><img class="img-fluid" src="https://resurs.elektroskandia.se/' + bilderDto.Sokvag + "large/" + bilderDto.Bild + '" onError="imgError(this)" /></div>'
                    );
                }
            });


            if (bildflagga == false) {
                // huvudbild

                $('.js-produkt-bild').append(
                    '<div class="produkt-slide-bild"><img class="img-fluid" src="/Content/Images/noImg_large.png"  /></div>'
                );

            }

            try {

                $(".js-produkt-bild").slick({
                    slidesToShow: 1,
                    slidesToScroll: 1,
                    arrows: false,
                    fade: true,
                    asNavFor: '.js-produkt-bildSpel'
                });
                $(".js-produkt-bildSpel").slick({
                    slidesToShow: 3, // TODO: .length
                    slidesToScroll: 1,
                    asNavFor: '.js-produkt-bild',
                    focusOnSelect: true
                    //,arrows: true
                });

            } catch (e) { }


            var butiker = [];
            data.ButikLista.forEach(function (butik) {
                butiker.push({ ButikId: butik.BuikId, ButikBen: butik.ButikBen, Adress: butik.Adress });
            });


            data.Artikeln.ArtikelLeverantor.forEach(function (a) {
                $(".produkt-spec-lista").append('<dt>Lev. artnr</dt><dd>' + a.ArtNrLeverantor + '</dd>');
                $(".produkt-spec-lista").append('<dt>Lev. typbet</dt><dd>' + a.Typbeteckning + '</dd>');
            });


            if (data.Artikeln.UNSPSC != null) $(".produkt-spec-lista").append('<dt>UNSPSC</dt><dd>' + data.Artikeln.UNSPSC + '</dd>');
            if (data.Artikeln.EANkod != null) $(".produkt-spec-lista").append('<dt>GTIN</dt><dd>' + data.Artikeln.EANkod + '</dd>');
            $(".produkt-spec-lista").append('<dt>Varumärke</dt><dd>' + (data.Artikeln.Varumarke != null ? data.Artikeln.Varumarke : '<i>saknas</i>') + '</dd>');


            var fp = [data.Artikeln.Forpackning1, data.Artikeln.Forpackning2, data.Artikeln.Forpackning3, data.Artikeln.Forpackning4].filter(function (value, index, arr) {return value != 0;});


            fp.sort((a, b) => a - b);

            //console.log('fp', fp, 'data.Artikeln', data.Artikeln);



            // exkludera de som har MG som börjar på 1,2,3 utom om de är i listan includes
            var mg;
            var mgInitial = (mg = data.Artikeln.MatrielGrupp)[0];

            var mgInclude = ['2E1', '2E2', '2EA', '2EB', '2F1', '2F2', '2F3', '2F4', '2F5', '2F6', '2F7', '2FA', '2FB', '3JA', '3JB', '3KA', '3KB']; 
            if (mgInitial != '1' && mgInitial != '2' && mgInitial != '3'
                || mgInclude.includes(mg)) {
                var tempHtml = '';

                fp = [...new Set(fp)]; // ta bort dubletter

                fp.forEach(function (f) {
                    if (f != 1 /*&& f != data.Artikeln.StandardForpackning*/) tempHtml += '<span class=fp>' + f + ' ' + data.Artikeln.SortKod.toLowerCase() + '</span>';
                });

                if (tempHtml != '' /*&& !(fp.length == 1 && fp[0] == 1)*/) $(".produkt-spec-lista").append('<dt class=fptext>Övriga förp.storlekar</dt><dd class=fpvalue>' + tempHtml + '</dd>');

            }




            if (data.Artikeln.SortKod != null && data.Artikeln.SortKod == "FP" && data.Artikeln.AntSort > 0) {
                $(".produkt-spec-lista").append('<dt class="text-dangerx">Säljes i</dt><dd class="text-dangerx"><strong>' + data.Artikeln.MinMult + ' FP (om ' + data.Artikeln.AntSort + ')</strong></dd>');
            }
            else {
                if (data.Artikeln.SortKod != null && data.Artikeln.SortKod.trim() == "M" && data.Artikeln.StandardForpackning > 0) {
                    $(".produkt-spec-lista").append('<dt class="text-dangerx">Säljes i </dt><dd class="text-dangerx"><strong>' + data.Artikeln.MinMult + 'm (FP = ' + data.Artikeln.StandardForpackning + 'm)</strong></dd>');
                }
            }

            // produktlinje

            if (data.Artikeln.ArtikelDatas != null && data.Artikeln.ArtikelDatas.length > 0) {
                var linjer = "";
                data.Artikeln.ArtikelDatas.forEach(function (dto) {

                    if (dto.Typ == 'PRODUKTLINJE' && dto.Varde != 'undefined') {
                        linjer += (linjer == "" ? dto.Varde : ", " + dto.Varde);
                    }
                });
                if (linjer != "") {
                    $(".produkt-spec-lista").append('<dt>Produktlinje</dt><dd>' + linjer + '</dd>');
                }
            }

            if (data.Artikeln.Basta) $(".produkt-spec-lista").append('<dt>Basta</dt><dd>Ja</dd>');
            if (data.Artikeln.Svanen) $(".produkt-spec-lista").append('<dt>Svanen</dt><dd>Ja</dd>');
            if (data.Artikeln.Sundahus) $(".produkt-spec-lista").append('<dt>SundaHus</dt><dd>' +  data.Artikeln.Sundahus + '</dd>');

            if (data.CO2Total >= 0) $(".produkt-spec-lista").append('<dt><a href="/Information/1058" >CO<sub>2</sub>&nbsp;-avtryck</a></dt><dd>' + (data.GreenOfferKlass > "" ? '<img src="' + '/Content/Images/GreenOffer_' + data.GreenOfferKlass + '.svg" class="green-offer" alt="' + '' + '" onError="this.onerror=null; this.style.margin=0;" style="margin-right: 5px;" />' : "") + data.CO2Total + ' kg' + '</dd>');

            if (GenerellInformation.inloggad && (data.Artikeln.GladGubbe || data.Artikeln.GladGubbeGBGEnergi || data.Artikeln.TummenUpp)) $(".produkt-spec-lista").append('<dt>Rekommenderas</dt><dd>' +
                (data.Artikeln.GladGubbe || data.Artikeln.GladGubbeGBGEnergi ? '<i class="fal fa-thin fa-smile"></i> ' : '') +
                (data.Artikeln.TummenUpp ? '<i class="fal fa-thin fa-thumbs-up"></i>' : '') +
                '</dd>');

            if (data.Artikeln.BVBLank === "Rekommenderas") {
                $(".produkt-spec-lista").append('<dt><a href="/Information/Index/1065" target="_blank">Byggvarubedömning</a></dt><dd><img class="bvb" src="https://byggvarubedomningen.se/globalassets/bilder-api/bvb-green.svg"></dd>');
            } else if (data.Artikeln.BVBLank === "Accepteras") {
                $(".produkt-spec-lista").append('<dt><a href="/Information/Index/1065" target="_blank">Byggvarubedömning</a></dt><dd><img class="bvb" src="https://byggvarubedomningen.se/globalassets/bilder-api/bvb-yellow.svg"></dd>');
            } else if (data.Artikeln.BVBLank === "Undviks") {
                $(".produkt-spec-lista").append('<dt><a href="/Information/Index/1065" target="_blank">Byggvarubedömning</a></dt><dd><img class="bvb" src="https://byggvarubedomningen.se/globalassets/bilder-api/bvb-red.svg"></dd>');
            }

            //if (data.Artikeln.BVBLank === "Rekommenderas") {
            //    $(".produkt-spec-lista").append('<dt><a href="/Information/Index/1065" target="_blank">Byggvarubedömning</a></dt><dd><img class="bvb" src="https://byggvarubedomningen.se/globalassets/bilder-api/bvb-green.svg"> Rekommenderas</dd>');
            //} else if (data.Artikeln.BVBLank === "Accepteras") {
            //    $(".produkt-spec-lista").append('<dt><a href="/Information/Index/1065" target="_blank">Byggvarubedömning</a></dt><dd><img class="bvb" src="https://byggvarubedomningen.se/globalassets/bilder-api/bvb-yellow.svg"> Accepteras</dd>');
            //} else if (data.Artikeln.BVBLank === "Undviks") {
            //    $(".produkt-spec-lista").append('<dt><a href="/Information/Index/1065" target="_blank">Byggvarubedömning</a></dt><dd><img class="bvb" src="https://byggvarubedomningen.se/globalassets/bilder-api/bvb-red.svg"> Undviks</dd>');
            //}


            // produkt-spec-info
            $('.produkt-spec-info .btn-group').empty();


            if (data.Artikeln.LeverantorUrl != null) $('.produkt-spec-info .btn-group').append('<a href="' + data.Artikeln.LeverantorUrl + '" target="_blank" title="Leverantörsinformation " class="btn btn-secondary"><i class="fa fa-info"></i></a>');
            if (data.Artikeln.HarMiljoDokument) $('.produkt-spec-info .btn-group').append('<a href="#" target="_blank" title="Miljödokument" class="btn btn-secondary js-miljodokument"><i class="fa fa-leaf"></i></a>');
            if (data.Artikeln.MyPaperPublikationId) $('.produkt-spec-info .btn-group').append('<a href="https://www.mypaper.se/show/elektroskandia/findArticlePage.asp?pid=' + data.Artikeln.MyPaperPublikationId + '&artnr=' + data.Artikeln.ArtNr + '" target="_blank" class="btn btn-secondary"><i class="fa fa-book"></i></a>');


            // ej-forlangd-ansvarstid-och-kemikalie-skatt
            $('#ej-forlangd-ansvarstid-och-kemikalie-skatt').empty();
            if (data.Artikeln.EjForlangdAnsvarstid) $('#ej-forlangd-ansvarstid-och-kemikalie-skatt').append('<p class="small xxm-t-1" style="margin-bottom: 0px;"><i class="fa fa-exclamation" style="padding-right: 3px; padding-left: 4px;" ></i > Ej förlängd ansvarstid enl.Alem 09, punkt 38, andra stycket.</p >');
            if (data.Artikeln.KemikalieSkatt) {
                if (data.Artikeln.KemikalieSkattBelopp > 0) {
                    $('#ej-forlangd-ansvarstid-och-kemikalie-skatt').append('<p class="small xxm-t-1"><i class="fa fa-flask"></i> Kemikalieskatt tillkommer med ' + data.Artikeln.KemikalieSkattBelopp + ' kr.</p>');
                } else {
                    $('#ej-forlangd-ansvarstid-och-kemikalie-skatt').append('<p class="small xxm-t-1"><i class="fa fa-flask"></i> Kemikalieskatt tillkommer.</p>');
                }
            }
            $("#distributionsavgift").empty();
            if (data.Artikeln.DistributionsavgiftKod !== null) {
                $("#distributionsavgift").append('<p class="small xxm-t-1">Distributionsavgift kan tillkomma.</p>');
            }

            if (GenerellInformation.inloggad) {
                $('#Anteck').val(data.Artikeln.AnteckningsText || "");
            }


            $('.produkt-artikeltext').text(data.Artikeln.ArtikelText);


            //if (data.Artikeln.USP) {
            //    let tempHTML = '';

            //    let x = data.Artikeln.USP.split(/[\n•.,|]/);

            //    x.forEach(function (u) {
            //        u = u.trim();
            //        u= u.charAt(0).toUpperCase() + u.slice(1).toLowerCase();
            //        if (u) tempHTML += '<li>' + u + '</li>';
            //    });

            //    document.getElementById('unique-selling-points').innerHTML = '<ul>' + tempHTML + '</ul>';



            //} else {
            //    $('#unique-selling-points').text('');
            //}

            


            $('.js-jamfor-artnr').toggle(data.Artikeln.Artikeltyp != 'T');
            $('.js-produkt-butiker').toggle(data.Artikeln.Artikeltyp != 'T');


            $('#produkt-egenskaper-container').toggle(data.Artikeln.Artikeltyp != 'T');

            // övriga bilder / dokument
            $('#document-list').empty();
            if (data.Artikeln.ArtikelBildernaPIM.length - data.produktBilder > 0) {
                var html = '<ul class="">';
                data.Artikeln.ArtikelBildernaPIM.forEach(function (bilderDto) {
                    if (bilderDto.BildTyp == 19) {
                        html += '<li><a class="produkt-slide-bild produkt-bild-fil" href="https://resurs.elektroskandia.se/' + bilderDto.Sokvag + bilderDto.Bild + '" target="_blank">';
                        html += '<i class="fa fa-file-o"></i>' + bilderDto.Forklaring + '</a></li>';
                    }
                    else if (bilderDto.BildTyp == 24) {
                        if (bilderDto.Bild.toLowerCase().startsWith('www.')) bilderDto.Bild = 'http://' + bilderDto.Bild;
                        html += '<li><a class="produkt-slide-bild produkt-bild-fil" href="' + bilderDto.Bild + '" target="_blank"><i class="fa fa-file-o"></i> ' + bilderDto.Forklaring + '</a></li>';
                    }
                    else if (bilderDto.BildTyp == 9) {
                        html += '<li><a class="produkt-slide-bild produkt-bild-fil" href="https://resurs.elektroskandia.se/' + bilderDto.Sokvag + bilderDto.Bild + '" download()>';
                        html += '<i class="fa fa-file-o"></i>' + " " + bilderDto.Forklaring + '</a></li>';
                    }
                });
                html += '</ul>';
                $('#document-list').append(html);
            }


            // egenskaperna
            $('.produkt-egenskaper').empty();
            if (data.Artikeln.EtimEgenskaperna.length > 0) {
                data.Artikeln.EtimEgenskaperna.forEach(function (egenskap) {
                    if (egenskap.Varde!= 0) $('.produkt-egenskaper').append("<span class='produkt-egenskap'><span class='label'>" + egenskap.Beskrivning + "</span><span class='value'>" + egenskap.Varde + " " + egenskap.Enhet + "</span></span>");
                });
            } else {
                $('.produkt-egenskaper').append('<p class="text-xs-centertext-muted"><em>Det finns inga produktegenskaper för denna produkt</em></p>');
            }

            //beräknat leveransdatum
            $(".js-produkt-butiker .next-delivery").remove();

            const pad = function(number) {
                if (number < 10) {
                    return '0' + number;
                }
                return number;
            }

            var dateStringIN = data.Artikeln.Inleveransdatum;
            var dateString = dateStringIN.replace("/Date(", "").replace(")/", ""); // "/Date(-62135596800000)/"
            var javascriptdate = new Date(parseInt(dateString));
            var today = new Date(); 

//            var displaydate = javascriptdate.toISOString().slice(0, 10);

            var displaydate = javascriptdate.getFullYear() +
                '-' + pad(javascriptdate.getMonth() + 1) +
                '-' + pad(javascriptdate.getDate());

            if (javascriptdate >= today) {
                $(".js-produkt-butiker").prepend("<div class='next-delivery'>Nästa lev till centrallagret beräknas: " + displaydate + " .</div>");
            }


            // relaterade-artiklar
            var foundRelaterade = false;
            $('#relaterade-artiklar-container').show().empty();
            if (data.ArtikelRelRader.length > 0) {

                var relateradeArtiklarAttKollaPrisFor = [];

                var html = '<section><div class="relaterade-artiklar" style="margin-top:30px;">';
                var reltyp = "xyz";
                data.ArtikelRelRader.forEach(function (relArt) { // todo sort .OrderBy(x => x.Sortering).Where(x => x.VisSomRelaterad))

                    if (relArt.ArtBen != null) {

                        relateradeArtiklarAttKollaPrisFor.push(relArt.ArtNr + ", " + 1 + ", " + relateradeArtiklarAttKollaPrisFor.length);

                        //console.log("relArt", relArt);
                        foundRelaterade = true;
                        if (relArt.RelationsTyp != reltyp) html += '<h2 class="relaterade-rubrik">' + relArt.RelationsTyp + '</h2>';

                        html += '<article class="relaterade-artikel" data-artnr=' + relArt.ArtNr + ' data-lagerfores=' + relArt.Lagerfores + ' >';
                        html += '<a target="_blank" onclick="selectProduct(event, \'' + relArt.ArtNr + '\', \'click\')" href="/bildnavigering?artnr=' + relArt.ArtNr + '" class="produkt-thumb">';
                        if (relArt.Bild != null) html += '<div class="produkt-thumb-bild"><img src="' + relArt.Bild + '" alt="' + relArt.ArtNr + '" onError="this.onerror=null;this.src=\'/Content/Images/noImg_large.png\';"  /></div>';
                        html += '<div class="produkt-thumb-detaljer"><span class="rubrik">' + relArt.ArtNr + '</span><h4 class="eNr">' + relArt.ArtBen + '</h4></div>';
                        html += '</a>';

                        if (GenerellInformation.inloggad) {
                            html += '<div class="rel-products-logged-in-row">';
                            html += '<span class="price-part"><span class=nettopris></span><span class=grundpris>' + asPrice(relArt.GrundNettoPris) + '</span><span class=lagersaldo onclick=visaSaldoModal("' + relArt.ArtNr + '") ><img /></span></span>';
                            html += '<span class="form-part"><label></label><input type="text" class="tillbehor-antal antal-input" value="' + relArt.Antal + '" /><ul class="dropdown-menu dropdown-menu-right kabeldropdownPRODUKT" style="display: none;"></ul><span class="enhet">' + relArt.SortKod + ' </span><button type="button" value="" class="button fa fa-shopping-cart" onclick="productClickMiniformVagn(event, \'' + relArt.ArtNr + '\')" ></button></span>';
                            html += '</div>';
                        }


                        html += '</article>';
                        reltyp = relArt.RelationsTyp;
                    }

                });
                $('#relaterade-artiklar-container').append(html);

                GetAndRender_PriserRelateradeProdukter(relateradeArtiklarAttKollaPrisFor);


            }
            if (foundRelaterade == false) {
                $('#relaterade-artiklar-container').hide();
            }

            // liknande artiklar
            $('#liknande-artiklar-container').empty();
            if (data.Artikeln.ArtikelLiknandeProdukter.length > 0 /*&& data.femetimbeskrivningarna != null && data.femetimbeskrivningarna.length > 4*/) {

                var html = '<h2>Liknande artiklar</h2>';

                var artiklarAttKollaPrisFor = [];

                var liveColumn = [false, false, false, false, false];
                data.Artikeln.ArtikelLiknandeProdukter.forEach(function (art) {
                    art.EtimEgenskaperna.forEach(function (egenskap, c) {
                        if (egenskap.Varde != '') liveColumn[c] = true;
                    });
                });

                html += "<table>";
                html += "<tr><th></th><th></th>";


                var numberOfColumns = 5; // max antal datakolumner att loopa genom
                var displayNumberOfColumns = 3; // max antal att visa

                for (var i = 0, j = 0; i < numberOfColumns && j < displayNumberOfColumns; i++) {
                    if (liveColumn[i]) {
                        j++;
                        html += '<th class=egenskapskolumn>' + data.femetimbeskrivningarna[i].EtimFeatureBeskrivning + '</th>';
                    }
                }
                html += "</tr>";


                data.Artikeln.ArtikelLiknandeProdukter.forEach(function (art) {

                    if (art.EtimEgenskaperna.length > 0) { 

                        artiklarAttKollaPrisFor.push(art.ArtNr + ", " + 1 + ", " + artiklarAttKollaPrisFor.length);

                        html += '<tr class="liknande-artikel " data-artnr=' + art.ArtNr + ' data-lagerfores=' + art.LagerFores + '>';

                        var pics = art.ArtikelBildernaPIM.filter(function (b) { return b.BildTyp === 2 });
                        if (pics && pics.length > 0) {
                            html += '<td><span class=image-part><img src="https://resurs.elektroskandia.se' + art.ArtikelBildernaPIM[0].Sokvag + 'small/' + art.ArtikelBildernaPIM[0].Bild + '" /></span></td>';
                        } else {
                            html += '<td></td>';
                        }

                        html += '<td><span class=prod-part><a onclick="selectProduct(event, \'' + art.ArtNr + '\', \'click\')"  href="/bildnavigering?artnr=' + art.ArtNr + '"><div class=artikelnummer>' + art.ArtNr + '</div><div class=artikelbenamning>' + art.ArtBen + '</div></a></span></td>';

                        for (var i = 0, j = 0; i < numberOfColumns && j < displayNumberOfColumns; i++) {
                            if (liveColumn[i]) {
                                j++;
                                html += '<td class=egenskapskolumn><div class=egenskap><span class=value>' + art.EtimEgenskaperna[i].Varde + '&nbsp; ' + (art.EtimEgenskaperna[i].Enhet !== null ? art.EtimEgenskaperna[i].Enhet : '') + '</span></div></td>';
                            }
                        }


                        if (GenerellInformation.inloggad) {
                            html += '<td><span class=price-part-container>';
                            html += '<div class=price-part><span class=nettopris>pris</span><span class=grundpris>' + asPrice(art.GrundNettoPris) + '</span></div>';
                            html += '<div class="form-part"><span class=lagersaldo onclick=visaSaldoModal("' + art.ArtNr + '") ><img /></span><input type="text" class="tillbehor-antal antal-input" value="' + art.MinMult + '"><ul class="dropdown-menu dropdown-menu-right kabeldropdownPRODUKT" style="display: none;"></ul><span class="enhet">' + art.SortKod + ' </span><button type="button" value="" class="button fa fa-shopping-cart" onclick="productClickMiniformVagn(event, \'' + art.ArtNr + '\')" ></button></div>';
                            html += '</span></td>';
                        }



                    }
                });

                html += "</table>";


                $('#liknande-artiklar-container').append(html);

                GetAndRender_PriserRelateradeProdukter(artiklarAttKollaPrisFor);

            }
            if (artnr == 'TAU0002') {
                $('.product-view').addClass('type-kul');
                $('.product-kul-container').show();
            } else {
                $('.product-view').removeClass('type-kul');
                $('.product-kul-container').hide();
            }

            if (artnr.startsWith('TAC000')) {
                $('.product-view').addClass('type-hyrcontainer');
                $('.produkt-hyrcontainer-container').show();
                $('.produkt-hyrcontainer-container-bekräftat').hide();
            } else {
                $('.product-view').removeClass('type-hyrcontainer');
            }




            if (data.Artikeln.Artikeltyp == 'T') {
                $('.product-view').addClass('type-service');

            } else {
                $('.product-view').removeClass('type-service');
            }

            if (GenerellInformation.inloggad) {

                $('.js-produkt-butiker').toggle(data.Artikeln.Artikeltyp != 'T');
                //$(".js-produkt-butiker").show();

                var levnr = "";
                if (data.Artikeln.ArtikelLeverantor.length > 0 && data.Artikeln.ArtikelLeverantor[0].Huvudleverantor) {
                    if (data.Artikeln.ArtikelLeverantor[0].LevNr==="49303") {
                        levnr = "49303";
                    }
                    else if (data.Artikeln.ArtikelLeverantor[0].LevNr==="48669") {
                        levnr = "48669";
                    }
                }
                artikelSaldoMinaPlatser(artnr, GenerellInformation.anvandarId, $(".js-saldo-lista"),levnr);

            } else {
                $(".js-produkt-butiker").hide();
            }

            if (data.LankLjusberakning !== null) {
                var bild = "https://resurs.elektroskandia.se/" + data.Artikeln.ArtikelBildernaPIM[0].Sokvag + "large/" + data.Artikeln.ArtikelBildernaPIM[0].Bild;
                var ldt = data.LankLjusberakning;
                var susp = "0.1";

                //$("#ljusberakning-container").show();
                $(".js-VisaLjusberakningBtn-div ").removeClass("hidden");
                $("#ljuskalkyl").find("iframe").attr("height", "800").attr("width", "100%");


                var form = $("<form/>").attr({
                    method: "post",
                    action: "https://www.dialux-plugins.com/FastCalc/",
                    target: "resultFrame"
                })
                    .append($('<input/>').attr({
                        type: 'hidden',
                        name: 'eulumdat',
                        value: ldt
                    }))
                    .append($('<input/>').attr({
                        type: 'hidden',
                        name: 'picture',
                        value: bild
                    }))
                    // suspension must be defined in meters
                    .append($('<input/>').attr({
                        type: 'hidden',
                        name: 'suspension',
                        value: susp
                    }))
                    .append($('<input/>').attr({
                        type: 'hidden',
                        name: 'lcid',
                        value: 1053
                    }))
                    .append($('<input/>').attr({
                        type: 'hidden',
                        name: 'st',
                        value: '28733f758f9fb20e467bceb3695619a0'
                    })
                    );
                $('body').append(form);
                form.submit().remove();

            } else {
                $(".js-VisaLjusberakningBtn-div ").addClass("hidden");
            }

            ////////////////////////////////////////////////////////////////////////////////////////////
            // here is a good place to track product stuff GA Google Analytics Tag manager TAGMANAGER
            ////////////////////////////////////////////////////////////////////////////////////////////

            //alert('track ' + artnr);
            console.log('track prod details ' + artnr + ' ' + window.document.title, 'varumärke:' + data.Artikeln.Varumarke);

            window.dataLayer = window.dataLayer || [];
            window.dataLayer.push({
                'event': 'pageview-productdetail',
                'pagetype': 'product',
                'brand': data.Artikeln.Varumarke,
                'pageview-title': window.document.title,
                'pageview-url': '/artnr/' + artnr
            });


            //// ladda produktlistan i backgrounden
            //console.log('ladda produktlistan i backgrounden');
            //getProductsAndFilters(true, artnr, true);
 
        }


    });
}

function VisaLjusberakning() {
    $("#ljusberakning-container").modal("show");
}


function productClickMiniformVagn(event, artnr) {
    var parent = event.target.parentElement;
    var antal = parent.querySelector('.antal-input').value;

    LaggArtikelIKundvagn(event, artnr, antal, "Product miniform 1");
}




function asPrice(p) {
    return p.toFixed(2).replace(".00", "").replace(".", ",") + "\u2009kr";

    //    return p.toFixed(2).toLocaleString('sv') + "\u2009kr"; // thin space

}

function GetAndRender_PriserRelateradeProdukter(artiklarPrisforfragan) {

    //console.log("GetAndRender_PriserRelateradeProdukter artiklarPrisforfragan", artiklarPrisforfragan);

    if (artiklarPrisforfragan.length > 0 && GenerellInformation.inloggad) {
        var lastXhr = $.ajax({
            type: "POST",
            url: "/InternWebApi/PrisOchSaldofraga",
            data: JSON.stringify({ artnrantlista: artiklarPrisforfragan.join("|") }), // 6990770, 1, 0|1625454, 1, 1|1625455, 1, 2
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (data) {
                //console.log("prisförf getandrender", data);
                if (data.Status === "OK") {
                    for (var i = 0; i < data.saldoPrisfragaSvarLista.length; i++) {
                        var art = data.saldoPrisfragaSvarLista[i].ArtNr.replace('E', '');

                        if (data.saldoPrisfragaSvarLista[i].Kundnetto === 0) {
                            $('.product-view *[data-artnr=' + art + '] .nettopris').text("Pris på begäran");
                        } else {
                            $('.product-view *[data-artnr=' + art + '] .nettopris').text(asPrice(data.saldoPrisfragaSvarLista[i].Kundnetto));
                        }

                        var saldo = data.saldoPrisfragaSvarLista[i].LagerSaldo;
                        var titel = "Lagerstatus: " + saldo;
                        var ikon = 'SaldoFull.svg';

                        var lagerfores = $('.product-view *[data-artnr=' + art + ']').attr("data-lagerfores"); // * kan vara <tr> och <article>


                        if (lagerfores == "true") {
                            if (saldo <= 0) {
                                ikon = 'SaldoTom.svg';
                            } else if (saldo <= 10) {
                                ikon = 'SaldoLag.svg';
                            } else {
                                ikon = 'SaldoFull.svg';
                            }
                        } else {
                            ikon = 'saldoAnskaffning.svg';
                            titel = 'Anskaffningsvara\nOBS Lagerstatus\ncentrallager: ' + saldo;
                        }
                        $('*[data-artnr=' + art + '] .lagersaldo img').attr('src', '/Content/Images/' + ikon).attr('title', titel);
                    }
                }
                else {
                    $('.pris .netto').remove();
                }
            },
            error: function (xmlHttpRequest, textStatus) {
                console.log("textStatus", textStatus);
            }
        });
    }

}


//function GetAndRender_PriserRelateradeProdukter2(artiklarPrisforfragan) { // tex tillbehör

//    console.log("artiklarPrisforfragan2", artiklarPrisforfragan);

//    if (artiklarPrisforfragan.length > 0 && GenerellInformation.inloggad) {
//        var lastXhr = $.ajax({
//            type: "POST",
//            url: "/InternWebApi/PrisOchSaldofraga",
//            data: JSON.stringify({ artnrantlista: artiklarPrisforfragan.join("|") }), // 6990770, 1, 0|1625454, 1, 1|1625455, 1, 2
//            contentType: "application/json; charset=utf-8",
//            dataType: "json",
//            success: function (data) {
//                console.log("prisförf getandrender2", data);
//                if (data.Status === "OK") {
//                    for (var i = 0; i < data.saldoPrisfragaSvarLista.length; i++) {
//                        var art = data.saldoPrisfragaSvarLista[i].ArtNr.replace('E', '');

//                        if (data.saldoPrisfragaSvarLista[i].Kundnetto === 0) {
//                            $('article[data-artnr=' + art + '] .nettopris').text("Pris på begäran");
//                        } else {
//                            $('article[data-artnr=' + art + '] .nettopris').text(asPrice(data.saldoPrisfragaSvarLista[i].Kundnetto));
//                        }

//                        var saldo = data.saldoPrisfragaSvarLista[i].LagerSaldo;
//                        var titel = "Lagerstatus: " + saldo;
//                        var ikon = 'SaldoFull.svg';

//                        var lagerfores = $('article[data-artnr=' + art + ']').attr("data-lagerfores");

//                        console.log("here lagerfores", lagerfores);

//                        if (lagerfores == "true") {
//                            if (saldo <= 0) {
//                                ikon = 'SaldoTom.svg';
//                            } else if (saldo <= 10) {
//                                ikon = 'SaldoLag.svg';
//                            } else {
//                                ikon = 'SaldoFull.svg';
//                            }
//                        } else {
//                            if (saldo > 0) {
//                                ikon = 'saldoAnskaffningFinnsILager.svg';
//                            } else {
//                                ikon = 'saldoAnskaffning.svg';
//                                titel = 'Anskaffningsvara\nOBS Lagerstatus\nC - lager: ' + saldo;
//                            }
//                        }
//                        $('article[data-artnr=' + art + '] .lagersaldo img').attr('src', '/Content/Images/' + ikon).attr('title', titel);
//                    }
//                }
//                else {
//                    $('.pris .netto').remove();
//                }
//            },
//            error: function (xmlHttpRequest, textStatus) {
//                console.log("textStatus", textStatus);
//            }
//        });
//    }

//}
;
/*
 * Globla funktioner
 * ---
 */

function template(el, templateid, data) { // mata mig med ett Objekt och en mall och jag byter ut alla {egenskap} mot värdet av Objekt.egenskap
    // försök använda templateHTML istället
    let $h = '';

    if (typeof data == 'string') {

        $h = $(document.getElementById(templateid).innerHTML
            .replace(/{item}/g, data));

    //    el.append(
    //        $h
    //    //    document.getElementById(templateid).innerHTML
    //    //        .replace(/{item}/g, data)
    //    );
    } else {

        $h = $(document.getElementById(templateid).innerHTML
            .replace(
                /{(\w*)}/g,
                function (m, key) {
                    return data.hasOwnProperty(key) ? (data[key] + '').trim() : "";
                }
            ).replace('safesrc=', 'src='));


    //    el.append(
    //        $h
    //    //    document.getElementById(templateid).innerHTML
    //    //        .replace(
    //    //            /{(\w*)}/g,
    //    //            function (m, key) {
    //    //                return data.hasOwnProperty(key) ? (data[key] + '').trim() : "";
    //    //            }
    //    //        ).replace('safesrc=', 'src=')
    //    );
    }
    $h.appendTo(el);

    return $h;

}

function templateHTML(templateid, data) { // som ovan men returnerar HTML-koden, försök använda denna, den använder mindre resurser än ovan
    let h = '';
    if (typeof data == 'string') {
        h = document.getElementById(templateid).innerHTML
            .replace(/{item}/g, data);
    } else {
        h = document.getElementById(templateid).innerHTML
            .replace(
                /{(\w*)}/g,
                function (m, key) {
                    return data.hasOwnProperty(key) ? (data[key] + '').trim() : "";
                }
            ).replace('safesrc=', 'src=');
    }
    return h;
}


/**
 * Initiera sidan
 * -- 
 * Gör saker för varje sidladdning
 */



function init() {


    // Om sökresultat finns - visa den tabben, annars visa start-tabben.
    if ($(".js-sokresultat").length) {
        $(".js-tab-sokresultat").tab('show');
    } else {
        try {
            $(".js-tab-start").tab('show');
        } catch (e) {

        }
    }

    // Populera antal artiklar i kundvagn
    $(".js-hamta-kundvagn-data").html(GenerellInformation.kundvagnAntal);

    // Mitt konto ikonens initiala visning eller ej i sidomenyn
    $(".sidebar-meny-admin").is(':visible') ? $(".sidebar-meny-admin").closest(".js-sidebar").find(".js-visa-sidebar-ikon").addClass("hidden") : $(".sidebar-meny-admin").closest(".js-sidebar").find(".js-visa-sidebar-ikon").removeClass("hidden");


    uppdateraJamforelse();


    // kabel i längd

    // svart menyval, använd det av kunden angivna metertalet. Ingerabatt
    $(document).on('click', '.js-lagg-i-kundvagn2', function (event) {

        var antal = $(this).attr('data-langd') || $("#antalTextBox").val();
        var tempArtnr = $(this).parent().parent().attr('data-artnr') || params("artnr");

        LaggArtikelIKundvagnVisuellFeedback($(this));
        LaggArtikelIKundvagn(event, tempArtnr, antal, "bnproddetalj");

        $('.kabeldropdownPRODUKT').hide();
        $('.kabeldropdownSOK').hide()

    });

    // rött menyval, använd ett av de röda rabatteradde värdena
    $(document).on('click', '.js-lagg-i-kundvagn-kabel-langder2', function () {

        var antal = $(this).attr('data-langd') || $("#antalTextBox").val();
        var tempArtnr = $(this).parent().parent().attr('data-artnr') || params("artnr");

        LaggArtikelIKundvagnVisuellFeedback($(this));
        LaggKabelLangdIKundvagn(tempArtnr, antal, "kil");

        $('.kabeldropdownPRODUKT').hide();
        $('.kabeldropdownSOK').hide()
        autoCompleteClose(); // för det fallet vi har gjort kabel i längd i autocompleten

    });

    if (GenerellInformation.inloggad)    UppdateraAttGöraIMeny();

}




/**
 * Uppdaterar jämförelse-ikonen i menyn och bestämmer om den ska visas eller ej.
 */
function uppdateraJamforelse() {
    var $wrap = $(".js-jamfor-wrap"),
        $antal = $(".js-jamfor-antal");
    // Visa jämför-ikonen om det finns artiklar att jämföra
    if (GenerellInformation.jamforAntal > 0) {
        $wrap.removeClass("hidden");
        $antal.html(GenerellInformation.jamforAntal);
    } else {
        $wrap.addClass("hidden");
        $antal.html(GenerellInformation.jamforAntal);
    }
}

/**
 * Lägger till artikel i jämförelse-arrayen
 * 
 * @param {string} Artikelnr
 */
function uppdateraJamforelseLaggTill(artnr) {
    GenerellInformation.jamforArtiklar.push(JSON.stringify(artnr));
    uppdateraJamforelse();
}

/**
 * Tar bort artikel i jämförelse-arrayen
 * 
 * @param {string} Artikelnr
 */
function uppdateraJamforelseTaBort(artnr) {
    var lista = GenerellInformation.jamforArtiklar,
        listaStorlek = lista.length,
        traff;

    for (var i = 0; i < listaStorlek; i++) {
        if (artnr === parseInt(lista[i])) {
            traff = i;
        }
    }
    if (traff) {
        GenerellInformation.jamforArtiklar = lista.splice(traff, 1);
        uppdateraJamforelse();
    }
}


/**
 * Visar alert
 * 
 * @param {string} Meddelande
 */
function showAlert(medd) {
    alert(medd);
}

/**
 * Lägger in meddelande i messageHolder-containern
 * 
 * @param {string} Meddelande
 * @param {int} RensaTidigare = Javascript-tillagda (1=rensa)
 */
function AdderaMeddelande(medd, rensatidigare) {

    if (rensatidigare === 1) {
        $("#messageHolder").find(".js-tillagda").remove();
    }
    $("<span class='js-tillagda'>" + medd + "</span>").appendTo($("#messageHolder"));
    $("#messageHolder").removeClass("hidden");
}


/**
 * Öppnar en overlay med ett meddelande
 * 
 * @param {string} Meddelande
 */
function BlockeraUI(medd) {
    var $overlay = $(".js-overlay");
    if (medd !== undefined) {
        $overlay.find("#MeddelandeSpan").html(medd);
    }
    $overlay.removeClass("hidden").addClass("js-aktiv");
}

/**
 * Stänger overlay
 * 
 */
function AvblockeraUI() {
    var $overlay = $(".js-overlay");
    $overlay.removeClass("js-aktiv").addClass("hidden");
    $overlay.find("#MeddelandeSpan").html("Laddar ...");
}

/**
 * Funktion för att konvertera en sträng eller int till formaterad valuta sträng
 * 
 * @param {(string | number)} Värde
 * @return {string} Värde
 */
function konverteraTillValuta(varde) {
    if (isNaN(varde)) {
        varde = varde.replace(',', '.').replace(' ', '');
    }

    // Testa om webbläsaren förstår "toLocaleString"
    if (testaSupportToLocalseString()) {
        varde = parseFloat(varde).toLocaleString('sv-SE', {
            style: 'currency',
            currency: 'SEK'
        });
    } else {
        // Failsafe för webbläsare som inte förstår toLocaleString.
        varde = varde + " kr";
    }

    return varde;
}

/**
 * Funktion för att konvertera en sträng eller int till formaterat nummer
 * 
 * @param {(string | number)} Värde
 * @return {number} Värde
 */
function konverteraTillNummer(varde) {
    if (isNaN(varde)) {
        varde = varde.replace(',', '.').replace(' ', '');
    }

    // Testa om webbläsaren förstår "toLocaleString", annars skriv ut en "Failsafe".
    testaSupportToLocalseString() ? varde = parseFloat(varde).toLocaleString() : varde = varde;

    return varde;
}

/**
 * Testfunktion för funktionen "toLocalseString"
 * 
 * @return {Boolean}
 */
function testaSupportToLocalseString() {
    var number = 0;
    try {
        number.toLocaleString('i');
    } catch (e) {
        return e.name === 'RangeError';
    }
    return false;
}

/**
 * Sidebar toggling
 */
$(".js-visa-sidebar").on("click", function () {
    var $sidebar = $(".js-sidebar");
    $sidebar.hasClass("js-sidebar-indragen") ? $sidebar.removeClass("js-sidebar-indragen") : $sidebar.addClass("js-sidebar-indragen");
    // Mitt konto ikonens i sidomenyn ska endast visas i kollapsat läge
    $sidebar.find(".sidebar-meny-admin").is(':visible') ? $sidebar.find(".js-visa-sidebar-ikon").addClass("hidden") : $sidebar.find(".js-visa-sidebar-ikon").removeClass("hidden");

    if ($(".js-karusell").length > 0) {
        // Måste uppdatera alla karusellers position efter att man togglat sidebar.
        setTimeout(function () {
            $(".js-karusell").slick('setPosition');
        }, 250);
    }
});

$(".js-visa-sidebar-2").on("click", function () {
    var $sidebar = $(".js-sidebar");

    if (!$sidebar.find(".lank-collapse-chevron").find(".js-text").is(':visible')) {
        $sidebar.hasClass("js-sidebar-indragen") ? $sidebar.removeClass("js-sidebar-indragen") : $sidebar.addClass("js-sidebar-indragen");
    }

    if ($(".js-karusell").length > 0) {
        // Måste uppdatera alla karusellers position efter att man togglat sidebar.
        setTimeout(function () {
            $(".js-karusell").slick('setPosition');
        }, 250);
    }
});

/***************************************************
 *  Triggas när sidan är laddad (document.ready)
 ***************************************************/


$(function () {
    init();

    if (!GenerellInformation.inloggad) {

        // ersatt av cookiebot 2021-10-19. / Ola
    //    var cookiebanner = getCookie('cookie-banner');

    //    if (cookiebanner === "hide") {
    //    } else {
    //        $('.cookie-banner').show();
    //        $('body').prepend('<div class="cookie-banner"><span class="cookie-banner-text" onclick="closeCookieBanner()">Vi använder cookies för sajtens funktion och trafikmätning.</span><span class="cookie-banner-action"><button onclick="closeCookieBanner()">Jag förstår</button><a href="/Information/Index/1049">Integritetspolicy</a></span></div>');
    //    }
    }

    if (GenerellInformation.inloggad && !GenerellInformation.verifieradEpost) {

        $('.epost-banner').show();
        $('body').prepend('<div class="epost-banner"><span class="epost-banner-text">Din epostadress är inte verifierad.</span><span class="cookie-banner-action"><button onclick="verifieraEpostBanner()">Skicka verifieringslänk</button></span></div>');
    }

    $(".dropdown-item[href='Kassa']").on("click", function () {
        BlockeraUI("Uppdaterar information");
    });




    /* 
     * Ändring av objekt i headern
     */
    $('.js-andra-sokmotor div').onClick

    // gammal ersätts av bytKundObjekt()
    $(".sid-top-objekt select").on("change", function () {
        $.ajax({
            type: "POST",
            url: "/InternWebApi/BytDefaultKundObjekt",
            data: "{'kundobjektid':'" + $(this).val() + "' }",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (data) {
                alert(data.Meddelande);

                location.reload();

                //// Rensa bort tidigare kundnettopris och ladda om vid ny fråga.
                //if ($(".js-harKundNetto")) {
                //    $(".js-harKundNetto").removeClass("js-harKundNetto");
                //    $(".artikel-priser-kundnettopris").empty();
                //}

            },
            error: function (xmlHttpRequest, textStatus) {
                showAlert("Ett fel inträffade (" + textStatus + ")", "Fel");
            },
            complete: function () {
                //ResetCursor();
            }
        });
    });

    
    // gammal, ersättas av bytSokmotor() nedan
    $(".sid-top-sokmotor select").on("change", function () {
        $.ajax({
            type: "POST",
            url: "/InternWebApi/BytDefaultSokmotor",
            data: "{'sokmotor':'" + $(this).val() + "' }",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (data) {
                alert(data.Meddelande);
                document.location.href = "/";
                return;
            },
            error: function (xmlHttpRequest, textStatus) {
                showAlert("Ett fel inträffade (" + textStatus + ")", "Fel");
            },
            complete: function () {
                //ResetCursor();
            }
        });
    });

    $(".js-hamta-kundvagn-data").on('click', function () {
        var status = $(this).attr("aria-expanded");

        // För att inte trigga hämtningen även när man stänger så kolla status på expanderaren.
        if (status === "false") {
            HamtaArtiklarIKundvagn();
        }
    });


    /**
     * Generell datepicker (jQuery UI komponent)
     * 
     * För att använda en "egen" variant så måste byter du ut klassen från "js-datepicker" till annat lämpligt namn.
     */

    // Sätt default settings för datepicker (generella regler som gäller för alla datepickers)
    $.datepicker.setDefaults({
        dateFormat: "yy-mm-dd",
        changeMonth: true,
        changeYear: true,
        yearRange: "-60:+20",
        defaultDate: new Date()
    }, $.datepicker.regional["sv"]);

    // Trigga generell datepicker
    $(".js-datepicker").datepicker();


    /**
     * Submit av sitens sökformulär
     */
    $(".js-undermeny-sok").submit(function () {

        // nya sök
        var $s = $("#s").val();

        // ex E13 777 21 och 13 777 21
        if ($s.split(' ').length - 1 == 2) { // måste ha två mellanslag
            var resten = $s.replaceAll(' ', ''); // ta bort de två mellanslagen
            if (resten.toLowerCase().startsWith('e')) resten = resten.substring(1); // ta bort inledande e
            if (!isNaN(resten) && resten.length == '1377721'.length) $s = resten; // om numeriskt och rätt längd, använd artikelnumret utan e och utan de två mellanslagen
        }


        var $kategori = $(".undermeny-sok-kategori").val();
        var $kategoritext = $(".undermeny-sok-kategori option:selected").text();

        var url = '/s?s=' + encodeURIComponent($s);
        if ($kategori != 0 && $kategori != null) url += "&k=" + encodeURIComponent($kategori) + "&kt=" + encodeURIComponent($kategoritext);

        document.location = url;

        return false;

    });


    /***********************************************************************************
     *                  Produktkategorilista submeny
     * Här samlas bara funktioner som har med Produktkategorilistan att göra.
     ***********************************************************************************/

    // Göm menyn när man klickar utanför menyn eller dess "barn".
    $(document).on("click", function (e) {
        var $meny = $(".meny-produkter");
        if ($meny.hasClass("js-visa")) {
            var $button = $(".js-toggle-meny-produkter");
            if (!$meny.is(e.target) && $meny.has(e.target).length === 0 && !$button.is(e.target)) {
                doljProduktSubmeny();
            }
        }
    });

    // Händelsetrigger för klick på Produktkategorilist-knappen
    $(".js-toggle-meny-produkter").on("click", function () {
        toggleProduktSubmeny();
    });


    // Händelsetrigger för klick på Produktkategorilist-kategori
    $(".js-meny-expandera").on("click", function (e) {
        e.preventDefault();
        var $this = $(this),
            $container = $this.closest(".meny-produkter-grupp");

        if ($container.hasClass("js-visa") && 1 == 2) {
            $container.removeClass("js-visa");
        } else {
            // Stäng alla aktiva på samma nivå och under
            $container.parent().children(".meny-produkter-grupp").removeClass("js-visa");

            // Visa klickade nivå
            $container.addClass("js-visa");

            var newHeight = $container.find('.meny-produkter-list').height();

            $(".undermeny-wrapper2").animate({
                height: newHeight
            }, 500, function () {
                // Animation complete.
            });
            $(".meny-produkter").animate({
                left: "-=300"
            }, 500, function () {
                // Animation complete.
            });
        }
    });
    $(".meny-rubrik-backlink .fa").on("click", function (e) {


        var elem = $(this).parents('.meny-produkter-list').parents('.meny-produkter-list');
        if (elem.length == 0) elem = $(this).parents('.meny-produkter-list').parents('.meny-produkter'); // special, topnivån heter inte likadant
        var newHeight = elem.height();

        var hideMeWhenAnimationDone = $(this).closest('.meny-produkter-grupp');
        $(".undermeny-wrapper2").animate({
            height: newHeight
        }, 500, function () {
            hideMeWhenAnimationDone.removeClass('js-visa');
        });

        $(".meny-produkter").animate({
            left: "+=300"
        }, 500, function () {
            // Animation complete.
        });
    });
    $(".meny-rubrik-backlink2").on("click", function (e) {

        var elem = $(this).parents('.meny-produkter-list').parents('.meny-produkter-list').parents('.meny-produkter-list');
        if (elem.length == 0) elem = $(this).parents('.meny-produkter-list').parents('.meny-produkter-list').parents('.meny-produkter'); // special, topnivån heter inte likadant
        var newHeight = elem.height();

        var hideMeWhenAnimationDone = $(this).closest('.meny-produkter-grupp');

        $(".undermeny-wrapper2").animate({
            height: newHeight
        }, 500, function () {
            hideMeWhenAnimationDone.removeClass('js-visa');
            hideMeWhenAnimationDone.parent().parent().closest('.meny-produkter-grupp').removeClass('js-visa');
        });
        $(".meny-produkter").animate({
            left: "+=600"
        }, 500, function () {
            // Animation complete.
        });
    });
    $(".meny-rubrik-backlink3").on("click", function (e) {
        var elem = $(this).parents('.meny-produkter-list').parents('.meny-produkter-list').parents('.meny-produkter-list').parents('.meny-produkter-list');
        if (elem.length == 0) elem = $(this).parents('.meny-produkter-list').parents('.meny-produkter-list').parents('.meny-produkter-list').parents('.meny-produkter'); // special, topnivån heter inte likadant
        var newHeight = elem.height();

        $(".undermeny-wrapper2").animate({
            height: newHeight
        }, 500, function () {
            // Animation complete.
        });
        $(".meny-produkter").animate({
            left: "+=900"
        }, 500, function () {
            // Animation complete.
        });
    });



    // Händelsetrigger för klick på Produktkategorilist-länk
    $(".js-meny-produkt-lank").on("click", function (e) {

        e.preventDefault();
        var $this = $(this),
            rubrikId = $this.data("rubrikid"),
            rubrikNiva = $this.data("rubrikniva"),
            rubrikNamn = $this.data("rubrik");

        //        var id = rubrikId.split('/');
        //        window.location = "/bildnavigering?id=" + id[id.length - 1];
        doljProduktSubmeny();
        produktMenySok(rubrikId, rubrikNamn, rubrikNiva);
    });

    // Händelsetrigger för klick på Produktkategorilist-länk-sokmotor
    $(".js-meny-produkt-lank-sokmotor").on("click", function (e) {
        e.preventDefault();
        var $this = $(this);
        var sokmotor = $this.data("sokmotor");
        $.ajax({
            type: "POST",
            url: "/InternWebApi/BytDefaultSokmotor",
            data: "{'sokmotor':'" + sokmotor + "' }",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (data) {
                //alert(data.Meddelande);
                document.location.href = "/";
                return;
            },
            error: function (xmlHttpRequest, textStatus) {
                showAlert("Ett fel inträffade (" + textStatus + ")", "Fel");
            },
            complete: function () {
                //ResetCursor();
            }
        });
    });


    // Om sidan har en sido-alert så kolla höjden på den 
    if ($(".sido-alert")) {
        var alertHojd = $(".sido-alert").outerHeight();
        if (alertHojd > 150) {
            alertHojd = 150;
        }
        $(".sida").css("marginTop", alertHojd);
    }


    $('form.js-logoutform').submit(function (e) {
        console.log('submit');

        //$('#send-email').click(function () {
        //    $('#email-form').attr('action', '/home/emailaccounting');
        //});
        var $btn = $(document.activeElement);



        if (document.querySelector('#anvnamnimp')) {
            $btn.data("namn", document.querySelector('#anvnamnimp').value);
        }
        //console.log('aaaa $btn', $btn, 'data', $btn.attr('name'), $btn.attr('id'));

//        if (true) {
//            $('#anvnamnlogoff').val(anvnamnimp.value);
//            $('form.js-logoutform').attr('action', '/home/changeuser');
////            e.preventDefault();
//            return;
//        }


        var nm = $btn.data("namn");
        var ny = $btn.data("nyckel");
        $('#anvnamnlogoff').val(nm);
        $('#nyckellogoff').val(ny);

        //alert("Ska subba" + $('form.js-logoutform').attr('action'));
        $('form.js-logoutform').attr('action', '/home/changeuser');
        // alert("Ska subba end");
        /*
        if ($(this).hasClass('form-submitted')) {
            e.preventDefault();
            return;
        }
        $(this).addClass('form-submitted');
        */
    });

    if ($(".js-andra-anvandare")[0]) {
        $.ajax({
            type: "POST",
            url: "/InternWebApi/HamtaAnvandareKopplade",
            data: "{'anvandarid':'" + GenerellInformation.anvandarId + "'}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (data) {

                for (var i = 0; i < data.length; i++) {
                    var r = "<button type='submit' data-namn='" + data[i].AnvandarnamnNya + "' data-nyckel='kalle anka' class='dropdown-item btn btn-link btn-sm'>(" + data[i].KundNr + ") " + data[i].Namn + "</button>";
                    $(".js-andra-anvandare").append(r);
                }

                return;
            },
            error: function (xmlHttpRequest, textStatus) {
                //showAlert("Ett fel inträffade (" + textStatus + ")", "Fel");
            },
            complete: function () {
                //ResetCursor();
            }
        });
    }

    //Kolla om ANVÄNDARE KOPPLA FINNS Anvandare.Multianvandare, då läser vi upp dessa
    //och lägger till dem i loginpartial användarnamn, logout
    // var r= $('<input type="button" value="new button"/>');
    // var r = <button type="submit" data-namn="krylbo.elmontage" data-nyckel="kalle anka" class="dropdown-item btn btn-link btn-sm ">** RIKSHEM KAROLINEN KOMMANDITBOLAG ** 00031 - petter-00031-20181111121212</button>
    // $(".js-andra-anvandare").append(r);



//    $(".js-senaste-visade").on("click", ".closer", function (e) { // ta bort produkt från "senast visade"

//        var artnr = $(this).parent().attr("data-artnr");

//        // plocka bort från cookien
//        var produkterText = getCookie(_LOGGAVISADEPRODUKTERCOOKIE);
//        var produkter = (produkterText == "") ? [] : produkterText.split(",");
//        produkter = produkter.filter(function (value, index, arr) {
//            return value != artnr && value != 'E' + artnr;
//        });
//        setCookie(_LOGGAVISADEPRODUKTERCOOKIE, produkter.join(","), 3650);

//        // plocka bort från vårt data
//        senastVisade = senastVisade.filter(function (value, index, arr) { return value.artnr != artnr });

//        renderVisaSenasteProdukter();

//        return false;
//    });

    $(document).ready(function () {
        console.log('onload');

        let aiFråga = document.getElementById('aiFråga');
        if (aiFråga) aiFråga.addEventListener("keypress", function (event) {
            if (event.key === "Enter") {
                event.preventDefault();
                skickaFråga(aiFråga.value);
            }
        });
        let aiSkickaFråga = document.getElementById('aiSkickaFråga');
        if (aiSkickaFråga) aiSkickaFråga.scrollIntoView(true);
    });


});

function taBortTidigareVisadProdukt(artnr) {
    let produkterText = getCookie(_LOGGAVISADEPRODUKTERCOOKIE);
    let produkter = (produkterText == "") ? [] : produkterText.split(",");
    produkter = produkter.filter(function (value, index, arr) { return value != artnr && value != 'E' + artnr; });

    setCookie(_LOGGAVISADEPRODUKTERCOOKIE, produkter.join(","), 3650);

    // plocka bort från vårt data
    senastVisade = senastVisade.filter(function (value, index, arr) { return value.artnr != artnr });

    renderVisaSenasteProdukter();

    $('#sradid_' + artnr).remove();



}


var cache = {}, lastXhr;

//Autocomplete på Artikelnummer function
$("input.js-autocomplete-artnr").autocomplete({

    minLength: 2,
    position: {
        offset: "0 -6"
    },
    source: function (request, response) {

        var term = request.term;
        if (term in cache) {
            response(cache[term]);
            return;
        }
        var rotUrl = "/";

        var kundkod = "";  //GenerellInformation.Kundkod; typ

        lastXhr = $.ajax({
            type: "POST",
            url: rotUrl + "InternWebApi/SokArtikelnummerForAutocomplete",
            data: "{'artNr':'" + term + "', 'kundkod':'" + kundkod + "'}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (data, status, xhr) {
                cache[term] = data;
                if (xhr === lastXhr) {
                    response(data);
                }
            },
            error: function (xmlHttpRequest, textStatus) {
                showAlert("Ett fel inträffade (" + textStatus + ")", "Fel");
            }
        });
    }
});



function artiklarNettoPris(artnrantlista) {
    var lastXhr;


    //BlockeraUI('Vg vänta ...');
    lastXhr = $.ajax({
        type: "POST",
        url: "/InternWebApi/Prisfraga",
        data: JSON.stringify({ artnrantlista: artnrantlista }),
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (data) {

            if (data.Status === "OK") {

                if (data.saldoPrisfragaSvarLista.length > 1) {
                    for (var i = 0; i < data.saldoPrisfragaSvarLista.length; i++) {
                        if (data.saldoPrisfragaSvarLista[i].Kundnetto === 0) {

                            $("#art-" + data.saldoPrisfragaSvarLista[i].RadId).find(".artikel-priser-kundnettopris")
                                .css('font-size', '.65em');
                            $("#art-" + data.saldoPrisfragaSvarLista[i].RadId).find(".artikel-priser-kundnettopris")
                                .html("Pris på begäran");

                        } else {
                            $("#art-" + data.saldoPrisfragaSvarLista[i].RadId).find(".artikel-priser-kundnettopris")
                                .html(konverteraTillValuta(data.saldoPrisfragaSvarLista[i].Kundnetto));

                            $("#art-" + data.saldoPrisfragaSvarLista[i].RadId)
                                .data("prissort", data.saldoPrisfragaSvarLista[i].Kundnetto);
                        }


                    }
                } else {
                    if (data.saldoPrisfragaSvarLista[0].Kundnetto === 0) {
                        $(".artikel-priser-kundnettopris").css('font-size', '.65em');
                        $(".artikel-priser-kundnettopris").html("Pris på begäran");
                    } else {
                        $(".artikel-priser-kundnettopris").html(konverteraTillValuta(data.saldoPrisfragaSvarLista[0].Kundnetto));
                    }
                }
            }
            else {
                showAlert(data.Meddelande);
            }

            // Ta bort väntsidan
            //AvblockeraUI();

            //showAlert(data.Meddelande);
        },
        error: function (xmlHttpRequest, textStatus) {
            // Ta bort väntsidan
            //AvblockeraUI();
            //showAlert("Ett fel inträffade (" + textStatus + ")", "Fel");
        }
    });
}


/**
 * Hämta artikelsaldo på produkt från angiven butik.
 * 
 * @param {string} Artikelnummer
 * @param {string} Butiks id
 * @param Element
 */
function artikelSaldo(artnr, butikId, $element) {
    $.ajax({
        type: "POST",
        url: "/InternWebApi/HamtaArtikelSaldo",
        data: "{'artnr':'" + artnr + "', 'butikid':'" + butikId + "' }",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (data) {
            visaSaldo($element, data.Butik, data.SaldoButik, data.LagerforesCentrallager, data.LagerforesLeverantor);
        },
        error: function (xmlHttpRequest, textStatus) {
            showAlert("Ett fel inträffade (" + textStatus + ")", "Fel");
        },
        complete: function () {
            //ResetCursor();
        }
    });
}


/**
 * Hämta saldo för artikel från alla mina platser, C-lager, butiker, KULager
 * 
 * @param {number} Artikelnummer
 * @param {number} AnvändarID
 * @param Element
 * 
 * @returns {object}
 */
function artikelSaldoMinaPlatser(artnr, anvandarId, $el, levnr, calllbackfunktion) {

    //console.log("artikelSaldoMinaPlatser artnr", artnr);

    if (anvandarId) {
        $.ajax({
            type: "POST",
            url: "/InternWebApi/HamtaArtikelSaldoMinaPlatser",
            data: "{'artnr':'" + artnr + "', 'anvandarid':'" + anvandarId + "' }",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (d) {
                if (d.Status === "TID") {
                    alert("Tiden har gått ut, din kaka har blivit uppäten, du har blivit utloggad!");
                    document.location.href = "/";
                    return;
                } else {
                    visaArtikelSaldoMinaPlatser(d, $el, artnr);
                    if (calllbackfunktion !== undefined) {
                        calllbackfunktion();
                    }
                }

            },
            error: function (xmlHttpRequest, textStatus) {
                showAlert("Ett fel inträffade (" + textStatus + ")", "Fel");
            },
            complete: function () {
                if (levnr==="49303") {
                    artikelSaldoLeverantor(artnr,levnr, $el);    
                }
                if (levnr==="48669") {
                    artikelSaldoLeverantor(artnr,levnr, $el);    
                }
            }
        });
    } else {
        //console.warn("AnvändarId är inte giltigt. Är du inloggad?");
    }
}


function artikelSaldoLeverantor(artnr,levnr, $el) {

        $.ajax({ type: "POST",
            url: "/InternWebApi/HamtaArtikelSaldoLeverantor",
            data: "{'artnr':'" + artnr + "','levnr':'" + levnr +  "' }",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (d) {
                if (d.Status === "TID") {
                    alert("Tiden har gått ut, din kaka har blivit uppäten, du har blivit utloggad!");
                    document.location.href = "/";
                    return;
                } else {
                    visaArtikelSaldoLeverantor(d, $el, artnr);
                }
            },
            error: function (xmlHttpRequest, textStatus) {
                showAlert("Ett fel inträffade (" + textStatus + ")", "Fel");
            },
            complete: function () {

            }
        });

}

function visaArtikelSaldoLeverantor(data, $el, artnr) {
    var $el = $el,
        saldo = data.antal,
        resultat = '';

    var bild;

    // Returnerar rätt bild baserat på saldo
    if (saldo > 10) {
        bild = 'saldoFull.svg';
    } else if (saldo > 0) {
        bild = 'saldoLag.svg';
    } else {
        return;
        bild = 'saldoTom.svg';
    }

    //Finns L sen tidigare
    var finnsden = $('.js-saldo-lista .typ_L .saldo-rad-antal').html();

    if (finnsden != undefined) {
        $('.js-saldo-lista .typ_L .saldo-rad-antal').html(saldo);
    } else {
        //Positionera efter andra
        var resultat = '<div class="saldo-rad typ_L">';
        resultat += '   <div class="saldo-rad-ikon js-saldo-ikon"><img src="/Content/Images/' + bild + '" width="20" height="20" /></div>';
        resultat += '   <div class="saldo-rad-lokal">Leverantör</div>';
        resultat += '   <div class="saldo-rad-antal">' + saldo + '</div>';
        resultat += '</div>';
        //$el.find(".js-saldo-resultat").html(resultat);

        $(resultat).insertAfter('.js-saldo-resultat .typ_C');


        //$('.js-saldo-resultat .typ_C').append(resultat);

    }



}



function sparaEpostSaldoPaminnelse(email, artnr) {


    $.ajax({
        type: "POST",
        url: "/InternWebApi/SparaEpostPaminnelse",
        data: '{"artnr":"' + artnr + '","email":"' + email + '"}',
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (data) {
            if (data === "OK") {
                var $modal = $(".js-modal-saldo");
                $modal.modal("hide");
                alert('Du kommer att få ett mail när artikeln återigen finns i lager.');
                HamtaNuvarandeSaldoPaminnelser(artnr);
            }
            else if (data === "DUBLETT") {
                alert('Epostadressen du angivit är redan använd för påminnelse angående denna artikel.');
            }
            else {
                alert('Något gick fel. Försök igen!');
            }
        },
        error: function (xmlHttpRequest, textStatus) {
            showAlert("Fel i ajaxanrop: " + textStatus, "Fel");
        }
    });

}

/**
 * Rendera artikelsaldo (triggas efter fråga gjorts)
 * 
 * @param {object} SaldoObjekt
 */
function visaArtikelSaldoMinaPlatser(data, $el, artnr) {

    //console.log("visaArtikelSaldoMinaPlatser", data);

    var $el = $el,
        platser = data.Lagersaldon,
        resultat = '';

    // Returnerar rätt bild baserat på lagerstatus och saldo
    var saldoIkon = function (lagerfores, saldo) {
        if (lagerfores === 'J') {
            if (saldo > 10) {
                return 'saldoFull';
            } else if (saldo > 0) {
                return 'saldoLag';
            } else {
                return 'saldoTom';
            }
        }
        return 'saldoAnskaffning';
    };
    var saldoIkonTitle = function (lagerfores, saldo) {
        if (lagerfores === 'J') {
            if (saldo > 10) {
                return '&gt;10';
            } else if (saldo > 0) {
                return '&gt;0';
            } else {
                return 'Slut';
            }
        }
        return 'Lagerföres&nbsp;ej';
    };


    var lagertyp = "xxxx";
    var rad = "xxx";

    var centrallager = platser.filter(function (p) { return p.LagerId === "001" });
    for (var i = 0; i < platser.length; i++) {
        var bild = saldoIkon(platser[i].Lagerfores, platser[i].Saldo);
        var title = saldoIkonTitle(platser[i].Lagerfores, platser[i].Saldo);
        rad = skapaArtikelSaldorad(bild, platser[i].Benamning, platser[i].Saldo, platser[i].Meddelande, platser[i].LagerTyp, title);
        resultat += rad;
    }

    resultat += "<div class='saldo-rad lagg-till-fler-butiker' ><a href='/minabutiker'>Lägg till fler butiker</a></div>";
    resultat += "<input type='hidden' class='js-paminnelse-artnr' value='" + artnr + "'/>";

    //console.log("platser[0].Lagerfores", platser[0].Lagerfores);

    if (centrallager[0].Saldo <= 0 && platser[0].Lagerfores === "J") {
        resultat += "<div class='mail-notifiering' >";
        resultat += "<div class='mail-notifiering-text'>Maila mig när denna vara är tillbaka i centrallagret!</div>";
        resultat += "<div class='mail-notifiering-form'>";
        resultat += "<input class='js-epost-paminnelse' type='text' id='epostPaminnelse' name='epostPaminnelse' placeholder='Epostadress' value=" + GenerellInformation.email + " />";
        resultat += "<button type='button' class='btn btn-secondary btn-sm js-epost-paminnelse-knapp' onclick='epostPaminnelseAterLager()'>Skicka</button>";
        resultat += "</div>";
        resultat += "</div>";

        HamtaNuvarandeSaldoPaminnelser(artnr);
    }










    //resultat += "<div class='modal-footer'><button type='button' class='btn btn-secondary btn-sm' data-dismiss='modal'>Stäng</button></div>"; // footern bör inte ligga i body

    $el.find(".js-saldo-resultat").html(resultat);


}

function HamtaNuvarandeSaldoPaminnelser(artnr) {

    $.ajax({
        type: "POST",
        url: "/InternWebApi/HamtaSaldoPaminnelserPaAnvId",
        data: "{'artnr':'" + artnr + "', 'anvandarid':'" + GenerellInformation.anvandarId + "' }",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (d) {

            if (d !== "TOM") {
                $(".mail-notifiering-text").text("");
                $(".mail-notifiering-text").text("Du har redan bett om påminnelse för när denna artikel åter finns i lager med mailadressen/-erna");

                var html = "<ul>";
                for (var x = 0; x < d.length; x++) {
                    html += "<li>" + d[x] + "</li>";
                }
                html += "</ul>";
                $(".mail-notifiering-text").append(html);
            }
        },
        error: function (xmlHttpRequest, textStatus) {
            showAlert("Ett fel inträffade (" + textStatus + ")", "Fel");
        },
        complete: function () {

        }
    });

}


/**
 * Hämta saldo för artikel i mina butiker
 * 
 * @param {number} Artikelnummer
 * @param {number} AnvändarID
 * @param Element
 * 
 * @returns {object}
 */
function artikelSaldoMinaButiker(artnr, anvandarId, $el) {

    if (anvandarId) {
        $.ajax({
            type: "POST",
            url: "/InternWebApi/HamtaArtikelSaldoMinaButiker",
            data: "{'artnr':'" + artnr + "', 'anvandarid':'" + anvandarId + "' }",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (d) {
                if (d.Status === "TID") {
                    alert("Tiden har gått ut, din kaka har blivit uppäten, du har blivit utloggad!");
                    document.location.href = "/";
                    return;
                } else {
                    visaArtikelSaldoMinaButiker(d, $el);
                }
            },
            error: function (xmlHttpRequest, textStatus) {
                showAlert("Ett fel inträffade (" + textStatus + ")", "Fel");
            },
            complete: function () {

            }
        });
    } else {
        //console.warn("AnvändarId är inte giltigt. Är du inloggad?");
    }
}



/**
 * Rendera artikelsaldo (triggas efter fråga gjorts)
 * 
 * @param {object} SaldoObjekt
 */
function visaArtikelSaldoMinaButiker(data, $el) {
    var $el = $el,
        butiker = data.Butiker,
        resultat = '';

    // Returnerar rätt bild baserat på lagerstatus och saldo
    var saldoIkon = function (lagerfores, saldo) {
        if (lagerfores === 'J') {
            if (saldo > 10) {
                return 'saldoFull';
            } else if (saldo > 0) {
                return 'saldoLag';
            } else {
                return 'saldoTom';
            }
        }
        return 'saldoAnskaffning';
    }

    var centrallagerBild = saldoIkon(data.CentrallagerLagerfores, data.CentrallagerSaldo);

    resultat += '<hr/>';
    resultat += skapaArtikelSaldorad(centrallagerBild, "Centrallager", data.CentrallagerSaldo, data.CentrallagerMeddelande);
    resultat += skapaArtikelSaldorad("saldoLeverantor", "Leverantör", data.LeverantorSaldo, data.LeverantorMeddelande);
    resultat += '<hr/>';

    for (var i = 0; i < butiker.length; i++) {
        var bild = saldoIkon(butiker[i].Lagerfores, butiker[i].Saldo);
        resultat += skapaArtikelSaldorad(bild, butiker[i].Namn, butiker[i].Saldo, butiker[i].Meddelande);
    }
    $el.find(".js-saldo-resultat").html(resultat);
}

/**
 * Rendera generellt artikelsaldo
 * 
 * @param {object} SaldoObjekt
 * @param Element
 */
function visaArtikelSaldoGenerell(data, $el) {
    var $el = $el,
        resultat = '';

    // Returnerar rätt bild baserat på lagerstatus och saldo
    var saldoIkon = function (lagerfores, saldo) {
        if (lagerfores === 'J') {
            if (saldo > 10) {
                return 'saldoFull';
            } else if (saldo > 0) {
                return 'saldoLag';
            } else {
                return 'saldoTom';
            }
        }
        return 'saldoAnskaffning';
    }

    var centrallagerBild = saldoIkon(data.CentrallagerLagerfores, data.CentrallagerSaldo);

    resultat += '<hr/>';
    resultat += skapaArtikelSaldorad(centrallagerBild, "Centrallager", data.CentrallagerSaldo, data.CentrallagerMeddelande);
    resultat += skapaArtikelSaldorad("saldoLeverantor", "Leverantör", data.LeverantorSaldo, data.LeverantorMeddelande);
    resultat += '<hr/>';

    $el.find(".js-saldo-resultat").html(resultat);
}


/**
 * Skapa en saldorad i modalfönstret
 * 
 * @param {string} Bildnamn
 * @param {string} Butiksnamn
 * @param {number} Saldo
 * @param {string} Meddelande
 * 
 * @returns {string} HTML
 */
function skapaArtikelSaldorad(bild, namn, saldo, msg, typ, title) {
    var resultat = '';

    if (msg === null) {
        msg = "";
    }

    if (msg) {
        msg = '<small> (' + msg + ')</small>';
    }
    if (namn === "Leverantör" && saldo === 0) {

    } else {
        resultat += '<div class="saldo-rad typ_' + typ + '">';
        resultat += '   <div class="saldo-rad-ikon js-saldo-ikon"><img src="/Content/Images/' + bild + '.svg" width="20" height="20" title=' + title + ' /></div>';
        resultat += '   <div class="saldo-rad-lokal">' + namn + msg + '</div>';
        resultat += '   <div class="saldo-rad-antal">' + saldo + '</div>';
        resultat += '</div>';
    }
    return resultat;
}


/**
 * Hämta artikelsaldo samt kundnettorpis på produkt från angiven butik.
 * 
 * @param {string} Artikelnummer
 * @param {string} Antal
 * @param {string} Butiks id
 * @param Element
 */
function artikelSaldoNettoPris(artnr, antal, butik, $el) {

    // TODO: Bör ha kundnr/objektnr för att specificera priset
    if (GenerellInformation.inloggad) {
        $.ajax({
            type: "POST",
            url: "/InternWebApi/HamtaArtikelSaldoPris",
            data: "{'artnr':'" + artnr + "', 'kvantitet':" + antal + ", 'butikid':" + butik + " }",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (data) {
                visaSaldo($el, data.Butik, data.SaldoButik, data.LagerforesCentrallager, data.LagerforesLeverantor);
                if (data.Kundnetto) {
                    visaKundNettoPris($el, data.Kundnetto);
                }
            },
            error: function (xmlHttpRequest, textStatus) {
                showAlert("Ett fel inträffade (" + textStatus + ")", "Fel");
            },
            complete: function () {

            }
        });
    }
}

function visaSaldoModal(artnr) {
    var $modal = $(".js-modal-saldo");
    artikelSaldoMinaPlatser(artnr, GenerellInformation.anvandarId, $(".js-modal-saldo"),"", visaSaldoModalModal);
    return false;
}
function visaSaldoModalModal() {
    var $modal = $(".js-modal-saldo");
    $modal.modal("show");
}

//$(".js-modal-saldo").on("click", ".js-epost-paminnelse-knapp", function () {

//    var epost = $(".js-epost-paminnelse").val();

//    var artNr = $(".js-paminnelse-artnr").val();
//    console.log(artNr);

//    if (valideraEpostForPaminnelse(epost)) {
//        sparaEpostSaldoPaminnelse(epost, artNr);
//    }
//    else {
//        alert('Epostadressen du angivit är inte giltig. Var god försök igen');
//    }

//});

function epostPaminnelseAterLager() {
    var epost = $(".js-epost-paminnelse").val();

    var artNr = $(".js-paminnelse-artnr").val();
    //console.log(artNr);

    if (valideraEpostForPaminnelse(epost)) {
        sparaEpostSaldoPaminnelse(epost, artNr);
    }
    else {
        alert('Epostadressen du angivit är inte giltig. Var god försök igen');
    }
    return false;

}

function valideraEpostForPaminnelse(epost) {
    var userinput = epost;
    var pattern = /^\b[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b$/i;

    if (!pattern.test(userinput)) {
        return false;
    }
    else {
        return true;
    }
}


/**
 * Rendera ut kundnettorpis i angivet element
 * 
 * @param Element
 * @param {string} Pris
 */
function visaKundNettoPris($el, pris) {
    $el.find(".artikel-priser").addClass("js-harKundNetto").find(".artikel-priser-kundnettopris").text(konverteraTillValuta(pris));
}

/**
 * Rendera ut saldo i angivet element
 * 
 * @param Element
 * @param {number} ButikId
 * @param {number} Saldo - Saldo för angiven butik
 * @param {string} Centrallager - Lagerföres på Centrallager
 * @param {string} Leverantörlager - Lagerföres hos Leverantör
 */
function visaSaldo($el, butik, saldoButik, lagerforesCentral, lagerforesLev) {
    // Skriv ut antalet artiklar som butiken har i saldo.
    $el.find(".js-saldo-antal").html(saldoButik);

    var $saldoIkon = $el.find(".js-saldo-ikon img");

    /* Om artikeln är en anskaffningsvara så ändra ikonen, 
     * annars om den ska finnas i lager men saldot är 0 så ändra till "tom"-ikonen. */
    if (butik === 4) {
        if (lagerforesCentral === "N") {
            $saldoIkon.prop("src", "/Content/Images/saldoAnskaffning.svg");
        } else {
            if (saldoButik > 10) {
                $saldoIkon.prop("src", "/Content/Images/saldoFull.svg");
            } else if (saldoButik > 0) {
                $saldoIkon.prop("src", "/Content/Images/saldoLag.svg");
            } else if (saldoButik === 0) {
                $saldoIkon.prop("src", "/Content/Images/saldoTom.svg");
                if (lagerforesLev === "J") {
                    $saldoIkon.prop("src", "/Content/Images/saldoLeverantor.svg");
                }
            }
        }
    } else {
        if (saldoButik > 0) {
            $saldoIkon.prop("src", "/Content/Images/saldoButikJa.svg");
        } else if (saldoButik === 0) {
            $saldoIkon.prop("src", "/Content/Images/saldoButikNej.svg");
        }
    }
}

/**
 * Lägg EN artikel i kundvagn
 * 
 * @param {string} Artikelnummer
 * @param {number} Antal
 */
function LaggArtikelIKundvagn(e, artnr, antal, origin) {

    var $div = $(e.target);
    var offset = $div.offset();

    if (antal > 0) {
        $.ajax({
            type: "POST",
            url: "/InternWebApi/LaggIKundvagn",
            data: '{"artnr":"' + artnr + '","antal":"' + antal + '","origin":"' + origin + '"}',
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (data) {
                if (data.status === "OK") {
                    GenerellInformation.kundvagnAntal = data.antalIKundvagn;
                    $("#visaKundvagnDropdown").html(data.antalIKundvagn);
                    console.info(data.statusMessage);
                }
                $('.js-kundvagn-meddelande').text(data.statusMessage);;
                $('.js-kundvagn-meddelande').stop().dequeue(); // stoppa utifall förra köpet inte har animerat färdigt
                $('.js-kundvagn-meddelande').show(); // stoppa utifall förra köpet inte har animerat färdigt


                // flytta meddelanderutan till nära där kunden klickade


                //var $div = $(e.target); // e dödas så det måste köras tidigare
                //var offset = $div.offset();


                var left = offset.left + $div.outerWidth() + 20;
                var offScreenX = $(window).outerWidth() - (left + 200 + 20); // 200 är bredden på js-kundvagn-meddelande, 20 är lite marginal
                if (offScreenX > 0) {
                    // meddelandet hamnade utanför skärmen till höger
                    $('.js-kundvagn-meddelande').css({ opacity: 1, top: offset.top - 20, left: offset.left + $div.width() + 20 });
                }
                else {
                    $('.js-kundvagn-meddelande').css({ opacity: 1, top: offset.top - 20, left: offset.left - 220 });
                }


                $('.js-kundvagn-meddelande').delay(2000).fadeTo(1000, 0, function () {
                    // Animation complete.
                    //$('.js-kundvagn-meddelande').hide();
                });

                $('.js-kundvagn-meddelande').click(function () {
                    $('.js-kundvagn-meddelande').dequeue().stop().hide();
                });

                //alert(data.statusMessage); // det här var det gamla sättet

                var sPath = window.location.pathname;
                var sPage = sPath.substring(sPath.lastIndexOf('/') + 1);
                if (sPage.toLowerCase() == "kundvagn") {
                    document.location = '/kundvagn';
                }


            },
            error: function (xmlHttpRequest, textStatus) {
                showAlert("Fel i ajaxanrop: " + textStatus, "Fel");
            }
        });
    } else {
        showAlert("Fel kvantitet!");
    }
}



/**
 * Lägg EN KabelLängd i kundvagn
 * 
 * @param {string} Artikelnummer
 * @param {number} Antal
 * @param {bool} trumpris
 */
function LaggKabelLangdIKundvagn(artnr, antal) {

    if (antal > 0) {
        $.ajax({
            type: "POST",
            url: "/InternWebApi/LaggKabelLangdIKundvagn",
            data: '{"artnr":"' + artnr + '","antal":"' + antal + '"}',
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (data) {
                if (data.status === "OK") {
                    GenerellInformation.kundvagnAntal = data.antalIKundvagn;
                    $("#visaKundvagnDropdown").html(data.antalIKundvagn);
                    console.info(data.statusMessage);
                }
                alert(data.statusMessage);
            },
            error: function (xmlHttpRequest, textStatus) {
                showAlert("Fel i ajaxanrop: " + textStatus, "Fel");
            }
        });
    } else {
        showAlert("Fel kvantitet!");
    }
}
/**
 * Lägg EN KX artikel i kundvagn
 * 
 * @param {string} Artikelben
 * @param {string} Antal
 * @param {string} Lev
 */
function LaggKXArtikelIKundvagn(artben, antal, lev) {

    if (antal > 0) {
        $.ajax({
            type: "POST",
            url: "/InternWebApi/LaggKXIKundvagn",
            data: '{"artben":"' + artben + '","antal":"' + antal + '","lev":"' + lev + '"}',
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (data) {
                if (data.status === "OK") {
                    GenerellInformation.kundvagnAntal = data.antalIKundvagn;
                    $("#visaKundvagnDropdown").html(data.antalIKundvagn);
                    console.info(data.statusMessage);
                }
                alert(data.statusMessage);
            },
            error: function (xmlHttpRequest, textStatus) {
                showAlert("Fel i ajaxanrop: " + textStatus, "Fel");
            }
        });
    }
}

function ArtikelFranLevartnrIKundvagn(levnr, artnr, kvant, origin) {
    $.ajax({
        type: "POST",
        url: "/InternWebApi/ArtikelFranLevartnrIKundvagn",
        data: '{"levnr":"' + levnr + '","artnr":"' + artnr + '","kvantitet":"' + kvant + '","origin":"' + origin + '"}',
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        async: false,
        success: function (data) {
            if (data.status === "OK") {
                GenerellInformation.kundvagnAntal = data.antalIKundvagn;
                $("#visaKundvagnDropdown").html(data.antalIKundvagn);
                console.info(data.statusMessage);
                alert(data.statusMessage);
            } else {
                alert(data.statusMessage);
            }
        },
        error: function (xmlHttpRequest, textStatus) {
            showAlert("Fel i ajaxanrop: " + textStatus, "Fel");

        }

    });
}


function LevArtikel(nr, qty, origin) {
    this.rownumber = 0;
    this.artnumber = nr;
    this.quantity = qty;
    this.origin = origin;
}


function ArtiklarFranLevartnrIKundvagn(levnr, artiklar, origin) {

    var levartikellista = [];
    for (var i = 0; i < artiklar.length; i++) {
        var leva = new LevArtikel(artiklar[i].reference, artiklar[i].quantity, origin);
        levartikellista.push(leva);
    }

    var utdata = JSON.stringify({ levnummer: levnr, levartikellistan: levartikellista });


    $.ajax({
        type: "POST",
        url: "/InternWebApi/ArtiklarFranLevartnrIKundvagn",
        data: { indata: utdata },
        dataType: "json",
        async: false,
        success: function (data) {
            if (data.status === "OK") {
                GenerellInformation.kundvagnAntal = data.antalIKundvagn;
                $("#visaKundvagnDropdown").html(data.antalIKundvagn);
                console.info(data.statusMessage);
                alert(data.statusMessage);
            } else {
                alert(data.statusMessage);
            }
        },
        error: function (xmlHttpRequest, textStatus) {
            showAlert("Fel i ajaxanrop: " + textStatus, "Fel");

        }

    });
}

/**
 * Visuell feedback för lagd produkt i kundvagn
 * 
 * @param Element
 */
function LaggArtikelIKundvagnVisuellFeedback($el) {
    $el.addClass("js-kopFeedback");
    $el.prop("disabled", true);
    setTimeout(function () {
        $el.prop("disabled", false).removeClass("js-kopFeedback");


    }, 2000);



}


/**
 * Lägg FLERA artiklar i kundvagn
 *         
 * Gör följande, deklarera en array, skapa en/flera Artikel, lägg till den i arrayen (push)
 * omvandla arrayen till en JSON-string och skicka in den till LaggArtiklarIKundvagn
 * OBS antingen så går alla artiklar in i kundvagnen eller inga
 * 
 * var artikellista = [];
 * var aa = new Artikel("1400800", "11");
 * artikellista.push(aa);
 * aa = new Artikel("1400820", "1");
 * artikellista.push(aa);
 * aa = new Artikel("1400860", "6");
 * artikellista.push(aa);
 * var ut = JSON.stringify({ artikellistan: artikellista });
 * 
 * 
 * @param {} nr 
 * @param {} qty 
 * @returns {} 
 */

function Artikel(nr, qty) {
    this.nr = nr;
    this.qty = qty;
}


function LaggArtiklarIKundvagn(artlist) {
    var lastXhr;

    lastXhr = $.ajax({
        type: "POST",
        url: "/InternWebApi/LaggArtiklarIKundvagn",
        //data: artlist,
        data: { indata: artlist },
        //contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (data) {
            if (data.status === "OK") {
                GenerellInformation.kundvagnAntal = data.antalIKundvagn;
                $("#visaKundvagnDropdown").html(data.antalIKundvagn);
                console.info(data.statusMessage);



            }
            alert(data.statusMessage);
        },
        error: function (xmlHttpRequest, textStatus) {
            showAlert("Ett fel inträffade (" + textStatus + ")", "Fel");
        }
    });

}





function HamtaArtiklarIKundvagn() {
    $.ajax({
        type: "POST",
        url: "/internwebapi/hamtaartiklarikundvagn",
        data: "",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (data) {
            if (data.status == "OK") {
                var artiklar = data.artiklar,
                    artiklarAntal = artiklar.length,
                    lista = '';
                if (artiklarAntal > 0) {
                    for (i = 0; i < artiklarAntal; i++) {
                        lista += '<div class="undermeny-kundvagn-rad">';
                        lista += '<div class="undermeny-kundvagn-kvant">' + artiklar[i].Kvantitet + ' ' + artiklar[i].Sortkod + '</div>';
                        if (artiklar[i].ArtNr.length == 5) {
                            lista += '<div class="undermeny-kundvagn-artnr"><label>' + artiklar[i].ArtNr + '</label></div>';
                        }
                        else {
                            lista += '<div class="undermeny-kundvagn-artnr"><a target="_blank" href="/bildnavigering?artnr=' + artiklar[i].ArtNr + '">' + artiklar[i].ArtNr + '</a></div>';
                        }
                        lista += '<div class="undermeny-kundvagn-namn">' + artiklar[i].ArtBen + '</div>';
                        lista += '</div>';
                    }
                    $(".js-kundvagn-data-tom").addClass("hidden");
                    $(".js-kundvagn-data").html(lista);
                } else {
                    $(".js-kundvagn-data-tom").removeClass("hidden");
                    lista = '<p class="text-muted m-a-1 text-xs-center small js-kundvagn-data-tom"><em>Din varukorg är tom</em></p>';
                    $(".js-kundvagn-data").html(lista);
                }
            }
            else {
                alert(data.meddelande);
            }
        },
        error: function (xmlHttpRequest, textStatus) {
            showAlert("Fel i ajaxanrop: " + textStatus, "Fel");
        }
    });
}


/***********************************************************************************
 *                  SÖK (GLOBALA FUNKTIONER)
 * Här samlas bara funktioner som har med den generella söken att göra.
 * Specifika sök-funktioner som bara triggas på/från söksidan ska läggas i sok.js
 ***********************************************************************************/

// Sökobjekt som skickas in i AJAX-anropet vid produktsök
var sokObj = {
    parameters: {
        FreeSearch: "",
        PageIndex: 1,
        PageRubrikIndex: 1,
        PageSize: GenerellInformation.antalTraffarISoken,
        Facets: [],
        SortField: "-",
        SortDirection: "-"
        //SortField: "Relevans",
        //SortDirection: "Desc"
    },
    onlyCr: 0,
    isOnBelysningsPage: false,
    onlyLagerforda: GenerellInformation.endastLagerforda

    //    onlyLagerforda: false
}

/**
 * Textuell sökning, när de skriver något i sökfältet och trycker på sökknappen
 * 
 * @param {string} Söksträng
 * @param {string} Kategori
 */
function textSok(varde, kategori) {

    //20190131 BNY
    //$("#js-sokresultatsorterarb2 option[selected='selected']").removeAttr('selected');
    //$("#js-sokresultatsorterarb2 option:first").attr('selected', 'selected');


    //20190201 BNY Kolla om det finns på skärmen
    var sort = $('#js-sokresultatsorterarb2').val();
    if (sort !== undefined) {
        var sortField = sort.split('|')[0];
        var SortDirection = sort.split('|')[1];
        console.log("sortField", sortField);
        console.log("SortDirection", SortDirection);
        sokObj.parameters.SortField = sortField;
        sokObj.parameters.SortDirection = SortDirection;
    }


    var obj = sokObj,
        sokStrang = varde,
        lagligRegex = /[']/g,
        fasett = '',
        fasettlagerfores = '';

    // Om kategori är vald, lägg till denna i objektet.
    if (kategori.varde !== "0") {
        fasett = {
            Faltnyckel: 'RubrikID_2',   // Rubrikid är alltid 2 i detta fall
            Faltnamn: 'Kategori',       // Presentativa namnet på Kategorin
            Vardenamn: kategori.namn,   // Presentativa namnet på värdet
            Vardenyckel: '1/' + kategori.varde // Börja med Webshop (1) och sedan resten som behövs.
        };

        obj.parameters.Facets = [fasett]; // Lägg in som en fasett
    } else {
        obj.parameters.Facets = []; // Textsök ska inte ha några fasetteringar, så töm den.
    }

    if (sokObj.onlyLagerforda) {
        fasettlagerfores = {
            Faltnyckel: 'Lagerfores',
            Faltnamn: 'Lagerförs på centrallagret',
            Vardenamn: 'Ja',
            Vardenyckel: 'true'
        };
        if (obj.parameters.Facets.length === 0) {
            obj.parameters.Facets = [fasettlagerfores]; // Lägg in som en fasett
        } else {
            obj.parameters.Facets.push(fasettlagerfores); // Lägg in som en fasett
        }
    }

    sokStrang = sokStrang.replace(lagligRegex, '').trim();  // Rensa upp söksträngen
    obj.parameters.FreeSearch = sokStrang;                  // Lägg in värdet i söket

    if (sokStrang.length > 1) {
        if (window.location.pathname === "/sok") {
            // Gör ett sök
            produktSok(obj); // Funktion hittas i "Scripts/Sok/sok.js"
        } else {
            // Spara som localStorage och gå till sök-sidan
            localStorage.setItem("TEMP_esSearch", JSON.stringify(obj));
            document.location.href = "/sok";
        }
    } else {
        //console.warn('Söktermen "' + sokStrang + '" är för kort.');
    }
}

/**
 * Sökning på produktmeny, uppe till vänster, när de väljer förstoringsglaset
 * 
 * - Om inte på söksidan så lägg in sökobjektet i en localStorage-fil och navigera till sök-sidan och gör en sök därifrån.

 * @param {string} id - ie: 1/192/168
 * @param {string} namn
 * @param {string} niva - ie: 1,2,3,4
 */
function produktMenySok(id, namn, niva, srch) { //, autocompleteThread) {


    if (srch == "" || srch == undefined) srch = "*";  // Fritext kan inte vara tom så lägg in en asterisk-sök *

    var obj = sokObj,
        fasett = {
            Faltnyckel: 'RubrikID_' + niva, // Rubriknivå
            Faltnamn: 'Kategori',           // Presentativt namn på kategori
            Vardenamn: namn,                // Presentativt namn på värde
            Vardenyckel: id                 // Länknivå
        },
        fasettlagerfores = '';

    obj.parameters.Facets = [fasett];   // lägg in fasettobjektet i sökobjektet

    if (sokObj.onlyLagerforda) {
        fasettlagerfores = {
            Faltnyckel: 'Lagerfores',
            Faltnamn: 'Lagerförs på centrallagret',
            Vardenamn: 'Ja',
            Vardenyckel: 'true'
        };
        if (obj.parameters.Facets.length === 0) {
            obj.parameters.Facets = [fasettlagerfores]; // Lägg in som en fasett
        } else {
            obj.parameters.Facets.push(fasettlagerfores); // Lägg in som en fasett
        }
    }

    obj.parameters.FreeSearch = srch;    // Fritext kan inte vara tom så lägg in en asterisk-sök *

    if (window.location.pathname === "/sok") {
        // Gör sök
        //console.log("produktMenySok. calling produktSok med: ", autocompleteThread);

        produktSok(obj); // Funktion hittas i "Scripts/Sok/sok.js"
        //        produktSok(obj, autocompleteThread); // Funktion hittas i "Scripts/Sok/sok.js"
    } else {
        // Spara som localStorage-fil och gå till sök
        localStorage.setItem("TEMP_esSearch", JSON.stringify(obj));
        document.location.href = "/sok";
    }

}

/***********************************************************************************/

/**
 * Rensa bort objekt som är dubbletter från en array
 * 
 * @param {array} Array - En array med objekt.
 * 
 * @returns {array} Array - En städad array med objekt.
 */
function rensaDubbletter(objArr) {
    var obj = {};

    for (var i = objArr.length - 1; i >= 0; i--) {
        var so = JSON.stringify(objArr[i]);
        obj[so] ? objArr.splice(i, 1) : (obj[so] = true);
    }

    return objArr;
}

/**
 * Paginering
 * 
 * @param {object} Pagineringsobjekt
 * 
 * @returns {string} HTML
 */
function paginering(obj) {
    // Säkerställer att objektet har data
    var obj = {
        storlek: obj.storlek || 1,  // Totalt antal pagineringar
        sida: obj.sida || 1,        // Aktiv sida
        steg: obj.steg || 2         // Antal pagineringsalternativ som ska visas < [steg][sida][steg] >
    },
        paginering = '',
        prev = (obj.sida - 1 === 0 ? 1 : obj.sida - 1),
        next = (obj.sida + 1 > obj.storlek ? obj.storlek : obj.sida + 1),
        showPrev = (obj.sida > 1 ? true : false),
        showNext = (obj.sida < obj.storlek ? true : false);

    // Visa inte paginering om det bara är ensida
    if (obj.storlek > 1) {

        paginering += '<ol class="paginering">';
        if (showPrev) {
            paginering += '<li class="paginering-item"><a class="paginering-link" onclick="pagineraTill(' +
                prev +
                ')"><i class="fa fa-angle-left"></i></a></li>';
        }

        if (obj.storlek < obj.steg * 2 + 6) {
            // Behöver inte traversera
            paginering += pagineringSidor(1, obj.storlek + 1, obj.sida);
        } else if (obj.sida < obj.steg * 2 + 1) {
            // Aktiva sidan ligger i början av pagineringen
            paginering += pagineringSidor(1, obj.steg * 2 + 4, obj.sida);
            paginering +=
                '<li class="paginering-sep">&#8230;</li><li class="paginering-item"><a class="paginering-link" onclick="pagineraTill(' +
                obj.storlek +
                ')">' +
                obj.storlek +
                '</a></li>';
        } else if (obj.sida > obj.storlek - obj.steg * 2) {
            // Aktiva sidan ligger i slutet av pagineringen
            paginering +=
                '<li class="paginering-item"><a class="paginering-link" onclick="pagineraTill(1)">1</a></li><li class="paginering-sep">&#8230;</li>';
            paginering += pagineringSidor(obj.storlek - obj.steg * 2 - 2, obj.storlek + 1, obj.sida);
        } else {
            // Aktiva sidan ligger i mitten av pagineringen
            paginering +=
                '<li class="paginering-item"><a class="paginering-link" onclick="pagineraTill(1)">1</a></li><li class="paginering-sep">&#8230;</li>';
            paginering += pagineringSidor(obj.sida - obj.steg, obj.sida + obj.steg + 1, obj.sida);
            paginering +=
                '<li class="paginering-sep">&#8230;</li><li class="paginering-item"><a class="paginering-link" onclick="pagineraTill(' +
                obj.storlek +
                ')">' +
                obj.storlek +
                '</a></li>';
        }

        if (showNext) {
            paginering += '<li class="paginering-item"><a class="paginering-link" onclick="pagineraTill(' +
                next +
                ')"><i class="fa fa-angle-right"></i></a></li>';
        }
        paginering += '</ol>';

        // OBS: Funktionen pagineraTill(n) ska läggas lokalt där pagineringen används.

    }
    return paginering;
}


/**
 * Loopa igenom pagineringsalternativ (stödfunktion till "paginering()").
 * 
 * @param {number} Startnummer
 * @param {number} Slutnummer
 * @param {number} Nuvarande
 * 
 * @returns {string} HTML
 */
function pagineringSidor(start, slut, nuvarande) {
    var resultat = '',
        aktiv = '';
    for (var i = start; i < slut; i++) {
        aktiv = (i === nuvarande ? 'active' : ''); // Är denna sida den aktiva sidan - visa som aktiv.
        resultat += '<li class="paginering-item ' + aktiv + '"><a class="paginering-link" onclick="pagineraTill(' + i + ')">' + i + '</a></li>';
    }
    return resultat;
}

/*
* $this stjärnan man klickat på
* $el platshållare
*/
function SparaFavoritArtikelForbered($this, $el, artnr) {

    //    lastXhr = $.ajax({
    //        type: "POST",
    //        url: "/InternWebApi/HamtaMinaFavoritListor",
    // ...



    lastXhr = $.ajax({
        type: "POST",
        url: "/InternWebApi/HamtaMinaFavoritlistorForTillagg",
        data: "{'artnr':'" + artnr + "'}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (data) {
            if (data.status === "OK") {

                $($el).html(data.htmlstrang);

                $("#ValdKatalogId").on('change', function () {
                    $("#Listnamn").addClass("hidden");
                    $("#LaggTillFavoritartikelGruppDiv").removeClass("hidden");
                    $("#ValtGruppId").removeClass("hidden");
                    $("#Gruppnamn").addClass("hidden");

                    if ($("#ValdKatalogId").val() === "") {
                        alert("Du måste välja en lista alternativt välja '- Skapa ny lista' och ange ett namn");
                    }
                    else if ($("#ValdKatalogId").val() === "x") {   //Dvs Ny lista vald vilket även innebär att ny grupp ska skrivas i
                        $("#Listnamn").removeClass("hidden");
                        $("#ValtGruppId").val("");
                        $("#ValtGruppId").addClass("hidden");
                        $("#Gruppnamn").removeClass("hidden");
                    }
                    else {  // Ladda in alla grupper för vald katalog
                        $("#ValtGruppId").empty();

                        var jsonstrang = "";

                        var katalogid = $("#ValdKatalogId").val();

                        lastXhr = $.ajax({
                            type: "POST",
                            url: "/InternWebApi/HamtaMinaFavoritlistaGrupperForTillagg",
                            data: "{'katalogid':'" + katalogid + "'}",
                            contentType: "application/json; charset=utf-8",
                            dataType: "json",
                            success: function (data) {
                                if (data.status === "OK") {
                                    jsonstrang = data.htmlstrang;
                                    $("#ValtGruppId").append(jsonstrang);
                                    $("#ValtGruppId").append("<option value='x'> - Skapa ny grupp</option>");
                                }
                                else {
                                    alert(data.meddelande);
                                }
                            },
                            error: function (xmlHttpRequest, textStatus) {
                                showAlert("Ett fel inträffade (" + textStatus + ")", "Fel");
                            },
                            complete: function () {
                            }
                        });


                    }
                });

                $("#ValtGruppId").on('change', function () {
                    $("#Gruppnamn").addClass("hidden");

                    if ($("#ValtGruppId").val() === "") {
                        alert("Du måste välja en grupp alternativt välja ' - Skapa ny grupp' och ange ett namn");
                    }
                    else if ($("#ValtGruppId").val() === "x") {
                        $("#Gruppnamn").val("");
                        $("#Gruppnamn").removeClass("hidden");
                    }

                });


                $("#LaggTillFavoritartikel").on('click', function () {

                    SparaFavoritArtikel($this, $el);

                });
            }
            else {
                alert(data.meddelande);
            }
        },
        error: function (xmlHttpRequest, textStatus) {
            showAlert("Ett fel inträffade (" + textStatus + ")", "Fel");
        },
        complete: function () {
        }
    });

}

function HamtaFavoritGrupper(katalogid) {

    var jsonstrang = "";

    lastXhr = $.ajax({
        type: "POST",
        url: "/InternWebApi/HamtaMinaFavoritlistaGrupperForTillagg",
        data: "{'katalogid':'" + katalogid + "'}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (data) {
            if (data.status === "OK") {
                jsonstrang = data.htmlstrang;
            }
            else {
                alert(data.meddelande);
            }
        },
        error: function (xmlHttpRequest, textStatus) {
            showAlert("Ett fel inträffade (" + textStatus + ")", "Fel");
        },
        complete: function () {
        }
    });

    //jsonstrang = "<option value='123'>KatalogId=" + katalogid + "</option>";

    return jsonstrang;
}

function HamtaMinaFavoritListor() {

    var jsonstrang = "";

    lastXhr = $.ajax({
        type: "POST",
        url: "/InternWebApi/HamtaMinaFavoritListor",
        data: "{'katalogid':'" + katalogid + "'}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (data) {
            console.log("InternWebApi/HamtaMinaFavoritListor", data);

            //if (data.status === "OK") {
            //    jsonstrang = data.htmlstrang;
            //}
            //else {
            //    alert(data.meddelande);
            //}
        },
        error: function (xmlHttpRequest, textStatus) {
            showAlert("Ett fel inträffade (" + textStatus + ")", "Fel");
        },
        complete: function () {
        }
    });

    return jsonstrang;
}



/*
* $el platshållare
*/
function SparaFavoritArtikel($this, $el) {
    if ($("#ValtGruppId").val() === "" && $("#Gruppnamn").val() === "") {
        alert("Du har inte valt någon lista/grupp att spara i");
    }
    else {
        var artnr = $("#LaggTillFavoritartikelDiv").find("#FavoritlistaArtnr").val();
        //        if (artnr == undefined) artnr = params("artnr")

        var listnamn = "";
        var gruppnamn = "";

        if ($("#Listnamn").val() !== undefined) {
            listnamn = $("#Listnamn").val();
            gruppnamn = $("#Gruppnamn").val();
        }
        listnamn = listnamn.replace(/<[^>]*>/g, "");
        gruppnamn = gruppnamn.replace(/<[^>]*>/g, "");

        lastXhr = $.ajax({
            type: "POST",
            url: "/InternWebApi/LaggTillFavoritartikel",
            data: "{'artnr':'" + artnr + "', 'katalogid':'" + $("#ValdKatalogId").val() + "', 'gruppid':'" + $("#ValtGruppId").val() + "', 'listnamn':'" + listnamn + "', 'gruppnamn':'" + gruppnamn + "' }",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (data) {

                if (data.status === "OK") {
                    $($el).closest("aside").modal("hide");
                    $($el).html("");
                    $($this).find("i").removeClass("fal").addClass("fa aktiv"); // FEL ZZZ
                    renderFavoritmenyn(data);

                }
                else {

                    alert(data.statusMessage);
                }
            },
            error: function (xmlHttpRequest, textStatus) {
                showAlert("Ett fel inträffade (" + textStatus + ")", "Fel");
                $($el).closest("aside").modal("hide");
            },
            complete: function () {
            }
        });
    }
}

function renderFavoritmenyn(data) {
    //console.log("renderFavoritmenyn.Favoritlistor", data.Favoritlistor);

    var $el = $('.undermeny-favoriter .dropdown-menu');
    $el.empty();

    data.Favoritlistor.forEach(function (lista) {
        console.log("lista", lista);


        $el.append('<a class="dropdown-item favoritlista" href="/bestallningslista?favoritlista=' + lista.id + '" title="Lista: ' + lista.namn + '">' + lista.namn.replace(/<[^>]*>/g, "") + '</a>');

        Object.keys(lista.Grupper).forEach(function (key) {
            $el.append('<a class="dropdown-item grupp" href="/bestallningslista?favoritlista=' + lista.id + '&grupp=' + key + '" title="Grupp: ' + lista.Grupper[key] + ' i Lista: test">' + lista.Grupper[key].replace(/<[^>]*>/g, "") + '</a>');

            //console.log(key, lista.Grupper[key], lista.Grupper[key].value);
        });

    });

}


setTimeout(function () { ArtikelJamforelseHamtaDataOchUppdateraIkon(); }, 100);

function ArtikelJamforelseHamtaDataOchUppdateraIkon() {

    if (GenerellInformation.inloggad) {
        $.ajax({
            type: "POST",
            url: "/InternWebApi/ArtikelJamforelseHamtaFlera",
            dataType: "json",
            success: function (data) {
                GenerellInformation.jamforAntal = data.length;
                uppdateraJamforelse();
            }
        });     
    }
}



function LaggTillArtikelForJamforelse(artnr) {
    if (artnr !== "") {
        BlockeraUI("Lägger artikel för jämförelse");
        lastXhr = $.ajax({
            type: "POST",
            url: "/InternWebApi/LaggTillArtikelForJamforelse",
            data: "{'artnr':'" + artnr + "'}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (data) {

                if (data.status !== "OK") {
                    alert(data.statusMessage);
                } else {
                    GenerellInformation.jamforAntal += 1;
                    uppdateraJamforelseLaggTill(artnr);
                }
            },
            error: function (xmlHttpRequest, textStatus) {
                showAlert("Ett fel inträffade (" + textStatus + ")", "Fel");
            },
            complete: function () {
                AvblockeraUI();
            }
        });

    }
}

function TaBortArtikelForJamforelse(artnr) {
    if (artnr !== "") {
        BlockeraUI("Tar bort artikel för jämförelse");
        lastXhr = $.ajax({
            type: "POST",
            url: "/InternWebApi/TaBortArtikelForJamforelse",
            data: "{'artnr':'" + artnr + "'}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (data) {
                if (data.status === "OK") {
                    GenerellInformation.jamforAntal = (GenerellInformation.jamforAntal - 1);
                    uppdateraJamforelseTaBort(artnr);

                    uppdateraJamforelse(); // denna borde gjorts i förra funktionen

                }
                else {
                    alert(data.statusMessage);
                }
            },
            error: function (xmlHttpRequest, textStatus) {
                showAlert("Ett fel inträffade (" + textStatus + ")", "Fel");
            },
            complete: function () {
                AvblockeraUI();
            }
        });

    }
}

function sparaArtikelAnteckning(artnr, ant) {

    var nyant = ant.replace(/"/g, ' ').replace(/'/g, ' ');
    nyant = nyant.replace(/{/g, ' ').replace(/}/g, ' ');
    nyant = nyant.replace(/:/g, ' ').replace(/\//g, ' ');
    nyant = nyant.replace(/\\/g, ' ').replace(/\?/g, ' ');

    $.ajax({
        type: "POST",
        url: "/InternWebApi/SparaArtikelAnteckning",
        data: "{'artnr':'" + artnr + "', 'anteckning':'" + nyant + "' }",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (data) {
            alert(data.meddelande);
        },
        error: function (xmlHttpRequest, textStatus) {
            showAlert("Ett fel inträffade (" + textStatus + ")", "Fel");
        },
        complete: function () {
        }
    });
}

function sparaArtikelRapporteraFel(artnr, ant) {
    var anvid = "";
    if (GenerellInformation.inloggad) {
        anvid = GenerellInformation.anvandarId;
    }
    var nyant = ant.replace(/"/g, ' ').replace(/'/g, ' ');
    nyant = nyant.replace(/{/g, ' ').replace(/}/g, ' ');
    nyant = nyant.replace(/:/g, ' ').replace(/\//g, ' ');
    nyant = nyant.replace(/\\/g, ' ').replace(/\?/g, ' ');

    $.ajax({
        type: "POST",
        url: "/InternWebApi/ArtikelRapporteraFel",
        data: "{'artnr':'" + artnr + "', 'anvandarid':'" + anvid + "' ,'anteckning':'" + nyant + "' }",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (data) {
            alert(data.meddelande);
            $("#Anteckfel").val("");
            $("#produktfelrapp").addClass("hidden");
        },
        error: function (xmlHttpRequest, textStatus) {
            showAlert("Ett fel inträffade (" + textStatus + ")", "Fel");
        },
        complete: function () {
        }
    });
}


function sokNullTraffMeddelande(s, meddelande, frivilligEmail, filter) {
    var anvid = "";
    if (GenerellInformation.inloggad) {
        anvid = GenerellInformation.anvandarId;
    }
    //var nyant = ant.replace(/"/g, ' ').replace(/'/g, ' ');
    //nyant = nyant.replace(/{/g, ' ').replace(/}/g, ' ');
    //nyant = nyant.replace(/:/g, ' ').replace(/\//g, ' ');
    //nyant = nyant.replace(/\\/g, ' ').replace(/\?/g, ' ');


    $.ajax({
        type: "POST",
        url: "/InternWebApi/SokNullTraffMeddelande",
        data: "{'s':'" + s + "', 'anvandarid':'" + anvid + "' ,'meddelandeFranAnvandare':'" + meddelande + "','frivilligEmail':'" + frivilligEmail + "','filter':'" + filter + "' }",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (data) {
            alert(data.meddelande);
            //$("#Anteckfel").val("");
            //$("#produktfelrapp").addClass("hidden");
        },
        error: function (xmlHttpRequest, textStatus) {
            showAlert("Ett fel inträffade (" + textStatus + ")", "Fel");
        },
        complete: function () {
        }
    });
}




/**
 * Toggla Produktsubmeny
 */
function toggleProduktSubmeny() {
    var $meny = $(".meny-produkter");

    $meny.hasClass("js-visa") ? doljProduktSubmeny() : visaProduktSubmeny();
}


/**
 * Dölj Produktsubmeny
 */
function doljProduktSubmeny() {
    var $meny = $(".meny-produkter"),
        $button = $(".js-toggle-meny-produkter");

    $meny.find(".js-visa").removeClass("js-visa");

    $meny.removeClass("js-visa");
    $(".undermeny-wrapper2").removeClass("js-visa-parent");
    $(".undermeny-produkter-pil").removeClass("js-visa");

    $button.prop("aria-expanded", false);
}


/**
 * Visa Produktsubmeny
 */
function visaProduktSubmeny() {
    var $meny = $(".meny-produkter"),
        $button = $(".js-toggle-meny-produkter");

    $meny.addClass("js-visa");

    $(".undermeny-wrapper2").addClass("js-visa-parent");
    $(".undermeny-produkter-pil").addClass("js-visa");

    $button.prop("aria-expanded", true);

    var tmpHeight = $('.meny-produkter').height();
    $('.undermeny-wrapper2').css({ height: tmpHeight });


}

/***********************************************************************************/

/**
 * Hanterare för bilder som inte hittas eller blir fel
 * 
 * @param {object}
 */
function imgError(image) {
    image.onerror = '';
    image.src = '/Content/Images/noImg_large.png';
    return true;
}

///////////////////////
// popupsök
///////////////////////

//// Scroll detector
//var didScroll;
//var didResize;
//var lastScrollTop = 0;
//var delta = 10; // minimum scroll för att trigga


//// lägg bara till eventen om vi tillåter poppupsök
//if ($('.allow-pop-search').length > 0) {
//    $(window).scroll(function (event) {
//        didScroll = true;
//    });
//    $(window).resize(function (event) {
//        didResize = true;
//    });

//    // interval för att inte sänka prestandan
//    setInterval(function () {
//        if (didResize) {
//            didScroll = false;
//            didResize = false;
//        }
//        if (didScroll) {
//            hasScrolled();
//            didScroll = false;
//        }
//    }, 250);
//}

function hasScrolled() {
    var st = $(this).scrollTop();
    var diff = lastScrollTop - st;
    if (Math.abs(lastScrollTop - st) <= delta) return;
    lastScrollTop = st;
    if (diff > 0 && st > 150) {
        $(".js-popme-container").addClass("up");
    } else {
        $(".js-popme-container").removeClass("up");
    }
}

////////////////////////////
// menyfixar
////////////////////////////

$('.nav-link.dropdown-toggle').click(function () { // dölj prodmenyn om någon av de andra menyerna öppnas
    $('.meny-produkter.js-visa').removeClass('js-visa');
    $(".undermeny-wrapper2").removeClass("js-visa-parent");
    $(".undermeny-produkter-pil").removeClass("js-visa");

    // varför inte doljProduktSubmeny()?

});




$('.js-toggle-meny-produkter').click(function () {
    $('.meny-produkter').css({ left: '0' });
    $('.undermeny-wrapper2').css({ height: '100vh' });
});
$('.btn.btn-secondary.js-etimInfo').click(function () {
    //var id = ($('.tooltip.fade.bs-tooltip-right.show').attr("id"));
    $('.tooltip.fade.bs-tooltip-right.show').remove();
});

////////////////////////////
// autocomplete
////////////////////////////



//var dummy, dE, dUi, d2, we;
var preventClose = false;
var itemType;
var previousItemType = '';


function hilite(txt, repl) {
    var pos = txt.toLowerCase().indexOf(repl.toLowerCase());
    return pos == -1 ? txt :
        txt.substr(0, pos) + "<b>" + txt.substr(pos, repl.length) + "</b>" + txt.substr(pos + repl.length);
};

var ev, el;
function autocompleteClickAntal(event, element) {
    preventClose = true;
    ev = event;
    el = element;


    setTimeout(function () { element.select(); }, 300);
}
function autocompleteClickLabel(event, artnr, kategoriID) {
    preventClose = true;
    //    window.open("/produkt?artnr=" + id + "&pl=3"); // new tab
    if (!kategoriID) kategoriID = 1;
    document.location = "/bildnavigering?id=" + kategoriID + "&artnr=" + artnr;

    var srch = $("#s").val();
    loggaSök(srch);
}

function autocompleteClickKategori(event, value, label, level) {
    var srch = $("#s").val();
    loggaSök(srch);
    produktMenySok(value, label, level, srch, true);
    autoCompleteClose();

}

function autocompleteClickVagn(event, artnr) {


    var parent = event.target.parentElement;
    var antal = parent.querySelector('.antal').value;

    preventClose = true; //

    var ul = $(event.target).parent().find('.kabeldropdownPRODUKT');

    //    setTimeout(function () { element.select(); }, 300);


    hamtaKabelLangder2(event, artnr, antal, ul);


    //LaggArtikelIKundvagn(id, antal, "Autocomplete 1");


}

function bildnavigeringClickMiniformVagn(event, artnr) {
    var parent = event.target.parentElement;
    var antal = parent.querySelector('.antal').value;

    var ul = $(event.target).parent().find('.kabeldropdownPRODUKT');

    preventClose = false; // no need to keep menu open
    hamtaKabelLangder2(event, artnr, antal, ul);


    //    LaggArtikelIKundvagn(id, antal, "Bildnavigering miniform 1");
}

function visaAllaProdukter() {
    $('.knapp-sok').click();
}

function autoCompleteClose() {
    $('.ska_autocomplete-container').hide();

//    $('.ska_autocomplete').remove();
//    $('.ska_autocomplete_search').remove();
}


$(document).click(function (event) {
    setTimeout(function () {

        event = event || window.event;

        // om man klickat på textboxen, eller om det är kabel i längd ska menyn inte stängas
        var target = $(event.target);
        //console.log("target", target, "body?", target.is("body"));
        //console.log("2", event.target.classList);
        //console.log("here", target.parent().find('ul li').length);
        //console.log(event.target.classList.contains('js-autocomplete-cart'));

        if (target.is("body")) {
            $('.kabeldropdownPRODUKT').hide();
            $('.kabeldropdownSOK').hide();
        }

        if (event.target.classList.contains('ta-bort') ||   // stäng inte
            event.target.classList.contains('selectBox') ||
            event.target.classList.contains('option') ||
            event.target.classList.contains('optionCheckbox') ||
            event.target.classList.contains('antal') ||
            event.target.classList.contains('visa-fler-senast-visade') ||
            event.target.classList.contains('clear-search-list') ||
            event.target.classList.contains('visa-fler-kategorier') ||
            (event.target.classList.contains('js-autocomplete-cart') && target.parent().find('ul li').length > 0)) {


        } else {
            autoCompleteClose();
            $('.multiselect .options').hide();
        }
    }, 200);

})


$('input').bind('keydown', function (e) { // fixa så att inte markören i inputfält flyttas fram och tillbaka när man pilar upp och ner
    if (e.keyCode == '38' || e.keyCode == '40') {
        e.preventDefault();
    }
});

var arrowIndex = 0;

function AutocompleteForslagSok(s) {
    $("#s").val(s);
    $('.knapp-sok').click();
}

function loggaSök(s) {
    if ((s+'').trim() == '') return; // ta bort null, och mellanslagssökningar

    let historik = localStorage.getItem('sokhistorik');

    s = s.replaceAll('|', '');

    if (!historik) {
        localStorage.setItem('sokhistorik', s);
    } else {
        let h = historik.split('|');
        h = h.slice(0, 100); // spara 100, men vi visar bara 20, kan vara bra för framtiden att ha fler
        h = h.filter(function (value, index, arr) {
            return value != s;
        });

        h.unshift(s);

        localStorage.setItem('sokhistorik', h.join('|'));
    }
}



var autoCompleteEnterPressed = false;
$("#s").keydown(function (e) {
    console.log('sok');
    if (e.which == 13 && arrowIndex > 0) { // Enter
        e.stopPropagation();
        e.preventDefault();
        $("#s").blur();

        autoCompleteEnterPressed = true;

        $(".ska_autocomplete li:nth-child(" + arrowIndex + ") .js-autocomplete-product").click(); // produkt
        $(".ska_autocomplete li:nth-child(" + arrowIndex + ")").click(); // kategori

        return false;
    }



    setTimeout(function () {

        var s = $("#s").val();
        var ignoreKeys = [16, 17, 18, 32]; // shift, alt, control, space

        if (ignoreKeys.indexOf(e.which) > -1) return;

        if (e.which == 27) { // esc
            autoCompleteClose();
            return;
        }


        // todo: navigering med pilar, 
        //if (e.which == 40 || e.which == 38) { // 40 - arrow down 38 = arrow up
        //    //e.preventDefault();


        //    if ($(".ska_autocomplete").length == 0) return;

        //    $(".ska_autocomplete li").removeClass("keySelected")

        //    var countLi = $(".ska_autocomplete li").length;


        //    if (e.which == 40) arrowIndex++;
        //    if (e.which == 38 && arrowIndex > 0) arrowIndex--;

        //    if (arrowIndex == 0) {
        //        $(window).scrollTop(0);
        //        return;
        //    }

        //    $(".ska_autocomplete li:nth-child(" + arrowIndex + ")").addClass("keySelected");

        //    var el = document.querySelector(".ska_autocomplete li:nth-child(" + arrowIndex + ")");

        //    if (!elementEntirelyInViewport(el)) {

        //        el.scrollIntoView();

        //        window.scrollBy(0, (e.which == 38) ? -500 : -140);
        //    }

        //    return false;
        //}


        // NEW AUTOCOMPLETE SEARCH
        //autoCompleteClose();
        arrowIndex = 0;


        //    if (s.length > (isNaN(s) ? 2 : 4)) { /// sök på aaa, a12, 12345 men inte på 123, 1234
        if (s.length < 3) {
            autoCompleteClose(); // behövs om användaren ta bort tecken
        } else { /// sök när användaren skrivit in tre tecken eller mer


            // ex E13 777 21 och 13 777 21
            if (s.split(' ').length - 1 == 2) { // måste ha två mellanslag
                var resten = s.replaceAll(' ', ''); // ta bort de två mellanslagen
                if (resten.toLowerCase().startsWith('e')) resten = resten.substring(1); // ta bort inledande e
                if (!isNaN(resten) && resten.length == '1377721'.length) {
                    s = resten; // om numeriskt och rätt längd, använd artikelnumret utan e och utan de två mellanslagen
//                    console.log('söker på ' + resten + ' i stället');
                }
            }

            let historik = localStorage.getItem('sokhistorik');

            let acs = $('#ac_tidigare_sokningar');
            acs.empty();

            if (!historik) {
                $('.ska_autocomplete_search .header').hide(historik);
                $('.ska_autocomplete_search .clear-search-list').hide(historik);
            } else {
                let h = historik.split('|');

                //var filtered = h.filter(function (value, index, arr) {
                //    return value != '*' && value.trim() != '';
                //});

                $('.ska_autocomplete_search .header').toggle(h.length>0);
                $('.ska_autocomplete_search .clear-search-list').toggle(h.length > 0);


                h.forEach(function (item, i) {
                    var htmlRegexG = /<(?:"[^"]*"['"]*|'[^']*'['"]*|[^'">])+>/g; // kill html
                    if (item) item = item.replace(htmlRegexG, '');

                    let o = {
                        item: item,
                        itemForUrl: encodeURI(item),
                        displayItem: hilite(item, s),
                        more: i < 15 ? '' : 'more'
                    };

                    if (item != '*' && item.trim() != '') template(acs, 'ac_tidigare_sokningar_mall', o);
                });
            }




            $.getJSON(
                "/sok/sokautocomplete/?id=" + encodeURIComponent(s),

                function (data) {

                    // todo: kolla i svaret istället om man är inloggad
                    $('.ska_autocomplete-container').show().toggleClass('inloggad', GenerellInformation.inloggad);

                    //console.log('SokAutocomplete data', data);

                    var $el = $('#ac_forslag');
                    $el.empty();

                    $('#ac_forslag_container .header').toggle(data.ForslagLista.length > 0);

                    $.each(data.ForslagLista, function (key, item) {
                        template($el, 'ac_forslag_mall', item);
                    });


                    var $el = $('#ac_senast_visade_produkter');
                    $el.empty();
                    //var $el2 = $('#senast_visade_produkter');
                    //$el2.empty();


                    data.SenastVisadeProdukter.forEach(function (item, i) {
                        if (item.artben) item.artben = casing(item.artben);
                        item.artben = hilite(item.artben, s);
                        item.sokvag = 'https://resurs.elektroskandia.se' + item.sokvag + 'normal/';
                        item.more = i < 10 ? '' : 'more';

                        //template($el2, 'ac_senast_visade_produkter_mall', item);
                        template($el, 'ac_senast_visade_produkter_mall', item);
                    });

                    if (data.SenastVisadeProdukter.length == 0) $('.ska_autocomplete_senaste .inga-senast-visade').show();
                    if (data.SenastVisadeProdukter.length >= 10) $('.ska_autocomplete_senaste .visa-fler-senast-visade').show();


                    let maxNumberOfProducts = 10;

                    var $el = $('#ac_produkter');
                    $el.empty();

                    $('#ac_produkter_container .header').toggle(data.ProduktLista.length>0);
                    $('#ac_visa-alla-produkter').toggle(data.ProduktLista.length > 0 /*maxNumberOfProducts*/).prop('href', '/s?s=' + s);
                    $('#ac_visa-alla-produkter .antal').text(data.ProduktLista.length);
                    $('.ac_sökord').text(s);
                    $('#ac_hittade-inga-produkter').toggle(data.ProduktLista.length == 0);



                    data.ProduktLista.forEach(function (item, i) {
                        item.Label = casing(item.Label);
                        item.Label = hilite(item.Label, s);
                        if (item.Icon.includes('saknas.jpg')) item.Icon = '/Content/Images/noImg_large.png';

                        if (item.GladGubbe || item.GladGubbeGBGEnergi) item.GladGubbe = 'glad-gubbe';
                        if (item.TummenUpp) item.TummenUpp = 'tummen-upp';
                        if (i < maxNumberOfProducts) template($el, 'ac_produkter_mall', item);
                    });

                    $('#ac_kategorier_container .header').toggle(data.KategoriLista.length > 0);

                    var $el = $('#ac_kategorier');
                    $el.empty();

                    let itemCount = 0;

                    data.KategoriLista.forEach(function (item, i) {

                        //var katid = item.Url.split(/[/ ]+/).pop();
                        //var vardenyckel = item.Url;

                        item.s = encodeURI(s);
                        item.LabelForUrl = encodeURI(item.Label);
                        item.LabelHilite = hilite(item.Label, s);
                        item.more = itemCount++ < 25 ? '' : 'more';

                        //let $nyKategori = template

                        template($el, 'ac_kategorier_mall', item);

                        item.UnderKategoriLista.forEach(function (item, j) {
                            //var katid = item.Url.split(/[/ ]+/).pop();
                            //var vardenyckel = item.Url;

                            item.s = encodeURI(s);
                            item.LabelForUrl = encodeURI(item.Label);
                            item.LabelHilite = hilite(item.Label, s);
                            item.more = itemCount++ < 25 ? '' : 'more';

                            /*if (j < 20)*/ template($el/*$nyKategori*/, 'ac_subkategorier_mall', item);
                        });

                    });
                    $('.visa-fler-kategorier').toggle(itemCount>=25);

                });
        }
    }, 200);
});

function rensaSökhistorik() {
    localStorage.removeItem('sokhistorik');
    $('.ska_autocomplete_search').empty();
}
function taBortTidigareSökning(s) {
    if (!s) return;

    let historik = localStorage.getItem('sokhistorik');

    let h = historik.split('|');
    h = h.filter(function (value, index, arr) {
        return value != s;
    });

    localStorage.setItem('sokhistorik', h.join('|'));


    $('.sökrad[data-sök="' + s + '"]').remove();
}


function kategoryNameWithoutPrefix(name, level) {
    name = name.trim();

    if (name.indexOf(" - ") > 0 && level != 1) {
        return name.substring(name.indexOf(" - ") + 3);
    }
    else if (name.indexOf("(") > 0 && level != 1) {
        return name.substring(0, name.indexOf("(") - 1);
    }
    else {
        return name;
    }
}



function fixNameErrors(u) {
/*    u = replaceAll(u, " ", "\\ "); */
    return u;
}
function replaceAll(str, find, replace) {
    return str.replace(new RegExp(find, 'g'), replace);
}
function isElementInViewport(el) {
    var rect = el.getBoundingClientRect();

    return rect.bottom > 0 &&
        rect.right > 0 &&
        rect.left < (window.innerWidth || document.documentElement.clientWidth) /* or $(window).width() */ &&
        rect.top < (window.innerHeight || document.documentElement.clientHeight) /* or $(window).height() */;
}
function elementEntirelyInViewport(el) {
    var top = el.offsetTop;
    var left = el.offsetLeft;
    var width = el.offsetWidth;
    var height = el.offsetHeight;

    while (el.offsetParent) {
        el = el.offsetParent;
        top += el.offsetTop;
        left += el.offsetLeft;
    }

    return (
        top >= window.pageYOffset &&
        left >= window.pageXOffset &&
        (top + height) <= (window.pageYOffset + window.innerHeight) &&
        (left + width) <= (window.pageXOffset + window.innerWidth)
    );
}



function loggaklick(fromurl, handelse, information) {
    $.ajax({
        type: "POST",
        url: "/InternWebApi/KlickLogga",
        data: "{'platsurl':'" + fromurl + "', 'handelse':'" + handelse + "', 'information':'" + information + "' }",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (data) {
            //visaSaldo($element, data.Butik, data.SaldoButik, data.LagerforesCentrallager, data.LagerforesLeverantor);
        },
        error: function (xmlHttpRequest, textStatus) {
            //showAlert("Ett fel inträffade (" + textStatus + ")", "Fel");
        },
        complete: function () {
            //ResetCursor();
        }
    });
}





// querystring helper
// url?id = 296  ger  qd["id"] = 296
//var qd = {};
//if (location.search) location.search.substr(1).split("&").forEach(function (item) { var s = item.split("="), k = s[0], v = s[1] && decodeURIComponent(s[1]); (qd[k] = qd[k] || []).push(v) });

//function params(id) {
//    var qd2 = {};
//    alert("location.search",window.location.search);
//    // hämta på nytt, document location kan ha ändrats
//    if (window.location.search) window.location.search.substr(1).split("&").forEach(function (item) { var s = item.split("="), k = s[0], v = s[1] && decodeURIComponent(s[1]); (qd2[k] = qd2[k] || []).push(v) });
//    return qd2[id];
//}

function params(name) {
    var url = window.location.href;
    name = name.replace(/[\[\]]/g, '\\$&');
    var regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'),
        results = regex.exec(url);
    if (!results) return null;
    if (!results[2]) return '';
    return decodeURIComponent(results[2].replace(/\+/g, ' '));
}

// cookie helper
function getCookie(cname) {
    var name = cname + "=";
    var decodedCookie = decodeURIComponent(document.cookie);
    var ca = decodedCookie.split(';');
    for (var i = 0; i < ca.length; i++) {
        var c = ca[i];
        while (c.charAt(0) == ' ') {
            c = c.substring(1);
        }
        if (c.indexOf(name) == 0) {
            return c.substring(name.length, c.length);
        }
    }
    return "";
}
function setCookie(cname, cvalue, exdays) {
    var d = new Date();
    d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));
    var expires = "expires=" + d.toUTCString();
    document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
}

const _LOGMAXPRODUCTS = 25;
const _LOGGAVISADEPRODUKTERCOOKIE = "visadeprodukter";

function loggaVisadProdukt(artnr, artben, kategoriID, bild) {

    artnr = artnr.replace('E', '');

    // uppdatera cookien
    var produkterText = getCookie(_LOGGAVISADEPRODUKTERCOOKIE);

    var produkter = (produkterText == "") ? [] : produkterText.split(",");

    produkter = produkter.filter(function (value, index, arr) { // om redan i listan, ta bort för vi vill ha den sist
        return value != artnr;
    });

    produkter.push(artnr);

    if (produkter.length >= _LOGMAXPRODUCTS) produkter = produkter.slice(produkter.length - _LOGMAXPRODUCTS, produkter.length);

    setCookie(_LOGGAVISADEPRODUKTERCOOKIE, produkter.join(","), 3650);
    // uppdatera datalistan

    // ...men först plocka bort från vårt data om den redan finns


    senastVisade = senastVisade.filter(function (value, index, arr) { return value.artnr != artnr });

    senastVisade.push({ artnr: artnr, artben: artben, kategoriID: kategoriID, bild: bild });

}


var senastVisade = [];
function visaSenasteProdukt(isSlideshow) {

    //    return false; // XXX666

    var produkterText = getCookie(_LOGGAVISADEPRODUKTERCOOKIE);


    if (produkterText == "") {
        $('.js-inga-senast-visade').show();
        return;
    }

    //$('.js-inga-senast-visade').hide();

    var requestData = {
        //        artnrlista: "0004310,0004315" // produkterText
        artnrlista: produkterText
    };

    $.ajax({
        type: "GET",
        data: requestData,
        url: "/produkt/senastvisadeartiklar",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (data) {
            //console.log("SenastVisadeArtiklar", data);

            senastVisade = [];

            data.forEach(function (p, i) {
                //console.log("produkt nya ", p);

                var artnr = p.artnr;
                var artben = p.artben;
                var kategoriID = p.kategoriID;

                var bild = (p.bild == "") ? "/Content/Images/noImg_large.png" : "https://resurs.elektroskandia.se" + p.sokvag + "NORMAL/" + p.bild;

                senastVisade.push({ artnr: artnr, artben: artben, kategoriID: kategoriID, bild: bild });
            });

            //if (isSlideshow) {
            //    renderVisaSenasteProdukterKarusell();

            //} else {
            renderVisaSenasteProdukter();

            //}

        }
    });

}

function renderVisaSenasteProdukter() {


    var $el2 = $('#senast_visade_produkter');
    $el2.empty();
    //console.log('senastVisade', senastVisade);
    senastVisade.forEach(function (item, i) {

        if (item.artben) item.artben = casing(item.artben);
        item.more = i < 10 ? '' : 'more';

        template($el2, 'ac_senast_visade_produkter_mall', item);
    });

    //if (senastVisade.length == 0) $('.ac_senast_visade_produkter .inga-senast-visade').show();
    if (senastVisade.length >= 10) $('.visa-fler-senast-visade2').show();


//    $('.js-senaste-visade .js-list').empty();
//    if (senastVisade.length > 0) {
//        for (var i = 0; i < 8 && i < senastVisade.length; i++) {
//            var p = senastVisade[senastVisade.length - 1 - i];
//            $('.js-senaste-visade .js-list').append("<a data-artnr=" + p.artnr +
//                "   href='/bildnavigering?id=" + p.kategoriID + "&artnr=" + p.artnr + "' class='senast-visad'>" +
//                "<span class='bild'><img src='" + p.bild + "' onerror='imgError(this)'></span>" +
//                "<span class='text'><div class='artnr'>" + p.artnr + "</div>" + p.artben + "</span>" +
//                "<span class='closer' title='Ta bort från Senast visade'></span></a>");
//        }
//        $('.js-inga-senast-visade').hide();
//    } else {
//        $('.js-inga-senast-visade').show();
//    }
}




function isElementInViewport(el) {
    //special bonus for those using jQuery
    if (typeof jQuery !== 'undefined' && el instanceof jQuery) el = el[0];

    var rect = el.getBoundingClientRect();
    var windowHeight = (window.innerHeight || document.documentElement.clientHeight);
    var windowWidth = (window.innerWidth || document.documentElement.clientWidth);

    return (
        (rect.left >= 0)
        && (rect.top >= 0)
        && ((rect.left + rect.width) <= windowWidth)
        && ((rect.top + rect.height) <= windowHeight)
    );

}

function copyToClipboard(text) {

    var textArea = document.createElement("textarea");
    textArea.value = text;
    document.body.appendChild(textArea);

    textArea.select();

    try {
        var successful = document.execCommand('copy');
        var msg = successful ? 'successful' : 'unsuccessful';
        console.log('Copying text command was ' + msg);
    } catch (err) {
        console.log('Oops, unable to copy');
    }

    document.body.removeChild(textArea);
}

function formateraArtikelNummerForDatabas(artikelnummer)
// specialare för PDF-sidan ProduktbladPdf som inte klarar E och L i URLen. 
//Bygger på FormateraArtikelNummerFörDatabas. 
//Jag föreslår att ProduktbladPdf skrivs om att klara E-nummer, folk kommer för eller senare länka till PDF-sidan med E-nummer.
// Warning: Funktionen kan svara med inledande nollor vilket kan tolkas oktalt av javascript.
{
    if (artikelnummer == null) return "";

    artikelnummer = artikelnummer.trim().toUpperCase();

    if (artikelnummer.trim().length == 0) return "";

    if (artikelnummer[0] == 'E') artikelnummer = artikelnummer.replace("e", "");

    if (artikelnummer[0] == 'L') artikelnummer = artikelnummer.replace("l", "");

    //        artikelnummer = artikelnummer.PadLeft(7, '0');

    artikelnummer = ('000000' + artikelnummer).slice(-7);

    return artikelnummer;
}

// Kabel i längd

//Hämta Kabellangder, från bildnav proddetalj samt nya sök, prod detalj
function hamtaKabelLangder(e) {

    var artnr = params("artnr");

    //    $('#antalTextBox').dropdown('toggle');
    //    $('#dropdownMenu2').dropdown('toggle');
    var antal = $("#antalTextBox").val();

    hamtaKabelLangder2(e, artnr, antal); // i global.js
}



function hamtaKabelLangder2(e, artnrnu, antal, ul) {

    $.ajax({
        type: "POST",
        url: "/InternWebApi/HamtaKabelLangder",
        data: "{'Artnr':'" + artnrnu + "','Antal':'" + antal + "' }",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (data) {

            if (data.Status === "OK") {

                var html = '';
                html += '<li class="dropdown-header KIL-header-produkt">Köp fast längd till samma meterpris som <br /> för hel trumma, gäller endast vid webborder</li>';

                if (![data.Dispsaldo1, data.Dispsaldo2, data.Dispsaldo3, data.Dispsaldo4, data.Dispsaldo5].includes(+antal)) {
                    html += '<li class="dropdown-divider"></li>';
                    html += '<li><button class="dropdown-item js-lagg-i-kundvagn2 kabeldropfont 1" data-langd="' +
                        antal + '" type="button" style="text-align:right;">' +
                        antal + ' m</button></li>';
                }

                [data.Dispsaldo1, data.Dispsaldo2, data.Dispsaldo3, data.Dispsaldo4, data.Dispsaldo5].forEach(function (saldo) {
                    if (saldo > 0) {
                        html += '<li class="dropdown-divider"></li>'
                        html += '<li><button class="dropdown-item js-lagg-i-kundvagn-kabel-langder2 kabeldropfont" data-langd="' +
                            saldo + '" type="button" style="color:red;text-align:right;">' +
                            saldo + ' m</button></li>';
                    }
                });



                $("#antalTextBox").next("ul").html(html);
                if (ul != undefined) { // bildnavigering prodlista
                    ul.attr("data-artnr", artnrnu);
                    ul.html(html);
                    ul.show();

                } else { // bildnavigering produktvisning
                    //                    var antal = parent.querySelector('.antal').value;
                    $('.kabeldropdownPRODUKT').show();
                }

            }
            if (data.Status === "TID") {
                //                alert("Tiden har gått ut, din kaka har blivit uppäten, du har blivit utloggad!");
                //document.location.href = "/";
                return;
            }

            if (data.Status === "TOM") {



                console.log("Kabel i längd svar TOM");

                LaggArtikelIKundvagnVisuellFeedback($(this));

                LaggArtikelIKundvagn(e, artnrnu, antal, "sok det");








            }
        },
        error: function (xmlHttpRequest, textStatus) {
            alert("error" + textStatus);

            // Dessa funktioner finns i /Scripts/globalaScript.js
            // LaggArtikelIKundvagnVisuellFeedback($(this));
            //  LaggArtikelIKundvagn(artnr, antal,"n/a");
        }
    });


}


function TomAktuellKundvagn() {
    $.ajax({
        type: "POST",
        url: "/InternWebApi/TomAktuellkundvagn",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (data) {
            if (data.status === "OK") {
                $("#visaKundvagnDropdown").html(0);
            }
        },
        error: function (xmlHttpRequest, textStatus) {
            showAlert("Fel i ajaxanrop: " + textStatus, "Fel");
        }
    });

}



//function closeCookieBanner() {
//    $('.cookie-banner').slideUp();
//    setCookie('cookie-banner', "hide", 30);
//    return false;
//}

function verifieraEpostBanner() {
    $('.epost-banner').slideUp();
    $.ajax({
        type: "POST",
        url: "/InternWebApi/SkickaEpostBekräftelse",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (data) {
            if (data === "OK") {
                showAlert("Ett mail med en verifieringslänk har skickats till den epostadress du angav vid registrering.");
            }
        },
        error: function (xmlHttpRequest, textStatus) {
            showAlert("Fel i ajaxanrop: " + textStatus, "Fel");
        }
    });
}
// POLYFILL fix for internet explorer

if (!Array.prototype.includes) {
    Object.defineProperty(Array.prototype, "includes", {
        enumerable: false,
        value: function (obj) {
            var newArr = this.filter(function (el) {
                return el == obj;
            });
            return newArr.length > 0;
        }
    });
}


String.prototype.includes = function (str) {
    var returnValue = false;

    if (this.indexOf(str) !== -1) {
        returnValue = true;
    }

    return returnValue;
}

function bytSokmotor(sm) {
    $.ajax({
        type: "POST",
        url: "/InternWebApi/BytDefaultSokmotor",
        data: "{'sokmotor':'" + sm + "' }",
        contentType: "application/json; charset=utf-8",
        success: function (data) {
            alert(data.Meddelande);
            document.location.href = "/";
        },
        error: function (xmlHttpRequest, textStatus) {
            showAlert("Ett fel inträffade (" + textStatus + ")", "Fel");
        }
    });
}

function bytKundObjekt(ko) {

    $.ajax({
        type: "POST",
        url: "/InternWebApi/BytDefaultKundObjekt",
        data: "{'kundobjektid':'" + ko + "' }",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (data) {
            alert(data.Meddelande);
            location.reload();
        },
        error: function (xmlHttpRequest, textStatus) {
            showAlert("Ett fel inträffade (" + textStatus + ")", "Fel");
        }
    });
}


// polyfill
function tusen(n) {
    return n.toString().replace(/\B(?=(\d{3})+\b)/g, " ");
}

const casing = function (name) {
    return name;

//    if (!name) {
//        return '';
//    }
//    let words = name.split(' ');
//    words.forEach((word, i) => {
//        if (/\d/.test(word)) { // contain numbers?
//            // do nothing, for now
//        } else {
//            words[i] = word.toLowerCase();
//        }
//    });
//    name2 = words.join(' ');
//    name2 = name2.charAt(0).toUpperCase() + name2.substring(1);
//    return name2;
};

//window.onload = function () {
//    loadTableSorter();
//};
//function loadTableSorter() {
//    try {
//        $(".tablesorter").tablesorter();
//    } catch (e) {
//    }
//};

$(function () {
    try {
        $(".tablesorter").tablesorter();
    } catch (e) {
    }
});;
/*
     _ _      _       _
 ___| (_) ___| | __  (_)___
/ __| | |/ __| |/ /  | / __|
\__ \ | | (__|   < _ | \__ \
|___/_|_|\___|_|\_(_)/ |___/
                   |__/

 Version: 1.9.0
  Author: Ken Wheeler
 Website: http://kenwheeler.github.io
    Docs: http://kenwheeler.github.io/slick
    Repo: http://github.com/kenwheeler/slick
  Issues: http://github.com/kenwheeler/slick/issues

 */
(function(i){"use strict";"function"==typeof define&&define.amd?define(["jquery"],i):"undefined"!=typeof exports?module.exports=i(require("jquery")):i(jQuery)})(function(i){"use strict";var e=window.Slick||{};e=function(){function e(e,o){var s,n=this;n.defaults={accessibility:!0,adaptiveHeight:!1,appendArrows:i(e),appendDots:i(e),arrows:!0,asNavFor:null,prevArrow:'<button class="slick-prev" aria-label="Previous" type="button">Previous</button>',nextArrow:'<button class="slick-next" aria-label="Next" type="button">Next</button>',autoplay:!1,autoplaySpeed:3e3,centerMode:!1,centerPadding:"50px",cssEase:"ease",customPaging:function(e,t){return i('<button type="button" />').text(t+1)},dots:!1,dotsClass:"slick-dots",draggable:!0,easing:"linear",edgeFriction:.35,fade:!1,focusOnSelect:!1,focusOnChange:!1,infinite:!0,initialSlide:0,lazyLoad:"ondemand",mobileFirst:!1,pauseOnHover:!0,pauseOnFocus:!0,pauseOnDotsHover:!1,respondTo:"window",responsive:null,rows:1,rtl:!1,slide:"",slidesPerRow:1,slidesToShow:1,slidesToScroll:1,speed:500,swipe:!0,swipeToSlide:!1,touchMove:!0,touchThreshold:5,useCSS:!0,useTransform:!0,variableWidth:!1,vertical:!1,verticalSwiping:!1,waitForAnimate:!0,zIndex:1e3},n.initials={animating:!1,dragging:!1,autoPlayTimer:null,currentDirection:0,currentLeft:null,currentSlide:0,direction:1,$dots:null,listWidth:null,listHeight:null,loadIndex:0,$nextArrow:null,$prevArrow:null,scrolling:!1,slideCount:null,slideWidth:null,$slideTrack:null,$slides:null,sliding:!1,slideOffset:0,swipeLeft:null,swiping:!1,$list:null,touchObject:{},transformsEnabled:!1,unslicked:!1},i.extend(n,n.initials),n.activeBreakpoint=null,n.animType=null,n.animProp=null,n.breakpoints=[],n.breakpointSettings=[],n.cssTransitions=!1,n.focussed=!1,n.interrupted=!1,n.hidden="hidden",n.paused=!0,n.positionProp=null,n.respondTo=null,n.rowCount=1,n.shouldClick=!0,n.$slider=i(e),n.$slidesCache=null,n.transformType=null,n.transitionType=null,n.visibilityChange="visibilitychange",n.windowWidth=0,n.windowTimer=null,s=i(e).data("slick")||{},n.options=i.extend({},n.defaults,o,s),n.currentSlide=n.options.initialSlide,n.originalSettings=n.options,"undefined"!=typeof document.mozHidden?(n.hidden="mozHidden",n.visibilityChange="mozvisibilitychange"):"undefined"!=typeof document.webkitHidden&&(n.hidden="webkitHidden",n.visibilityChange="webkitvisibilitychange"),n.autoPlay=i.proxy(n.autoPlay,n),n.autoPlayClear=i.proxy(n.autoPlayClear,n),n.autoPlayIterator=i.proxy(n.autoPlayIterator,n),n.changeSlide=i.proxy(n.changeSlide,n),n.clickHandler=i.proxy(n.clickHandler,n),n.selectHandler=i.proxy(n.selectHandler,n),n.setPosition=i.proxy(n.setPosition,n),n.swipeHandler=i.proxy(n.swipeHandler,n),n.dragHandler=i.proxy(n.dragHandler,n),n.keyHandler=i.proxy(n.keyHandler,n),n.instanceUid=t++,n.htmlExpr=/^(?:\s*(<[\w\W]+>)[^>]*)$/,n.registerBreakpoints(),n.init(!0)}var t=0;return e}(),e.prototype.activateADA=function(){var i=this;i.$slideTrack.find(".slick-active").attr({"aria-hidden":"false"}).find("a, input, button, select").attr({tabindex:"0"})},e.prototype.addSlide=e.prototype.slickAdd=function(e,t,o){var s=this;if("boolean"==typeof t)o=t,t=null;else if(t<0||t>=s.slideCount)return!1;s.unload(),"number"==typeof t?0===t&&0===s.$slides.length?i(e).appendTo(s.$slideTrack):o?i(e).insertBefore(s.$slides.eq(t)):i(e).insertAfter(s.$slides.eq(t)):o===!0?i(e).prependTo(s.$slideTrack):i(e).appendTo(s.$slideTrack),s.$slides=s.$slideTrack.children(this.options.slide),s.$slideTrack.children(this.options.slide).detach(),s.$slideTrack.append(s.$slides),s.$slides.each(function(e,t){i(t).attr("data-slick-index",e)}),s.$slidesCache=s.$slides,s.reinit()},e.prototype.animateHeight=function(){var i=this;if(1===i.options.slidesToShow&&i.options.adaptiveHeight===!0&&i.options.vertical===!1){var e=i.$slides.eq(i.currentSlide).outerHeight(!0);i.$list.animate({height:e},i.options.speed)}},e.prototype.animateSlide=function(e,t){var o={},s=this;s.animateHeight(),s.options.rtl===!0&&s.options.vertical===!1&&(e=-e),s.transformsEnabled===!1?s.options.vertical===!1?s.$slideTrack.animate({left:e},s.options.speed,s.options.easing,t):s.$slideTrack.animate({top:e},s.options.speed,s.options.easing,t):s.cssTransitions===!1?(s.options.rtl===!0&&(s.currentLeft=-s.currentLeft),i({animStart:s.currentLeft}).animate({animStart:e},{duration:s.options.speed,easing:s.options.easing,step:function(i){i=Math.ceil(i),s.options.vertical===!1?(o[s.animType]="translate("+i+"px, 0px)",s.$slideTrack.css(o)):(o[s.animType]="translate(0px,"+i+"px)",s.$slideTrack.css(o))},complete:function(){t&&t.call()}})):(s.applyTransition(),e=Math.ceil(e),s.options.vertical===!1?o[s.animType]="translate3d("+e+"px, 0px, 0px)":o[s.animType]="translate3d(0px,"+e+"px, 0px)",s.$slideTrack.css(o),t&&setTimeout(function(){s.disableTransition(),t.call()},s.options.speed))},e.prototype.getNavTarget=function(){var e=this,t=e.options.asNavFor;return t&&null!==t&&(t=i(t).not(e.$slider)),t},e.prototype.asNavFor=function(e){var t=this,o=t.getNavTarget();null!==o&&"object"==typeof o&&o.each(function(){var t=i(this).slick("getSlick");t.unslicked||t.slideHandler(e,!0)})},e.prototype.applyTransition=function(i){var e=this,t={};e.options.fade===!1?t[e.transitionType]=e.transformType+" "+e.options.speed+"ms "+e.options.cssEase:t[e.transitionType]="opacity "+e.options.speed+"ms "+e.options.cssEase,e.options.fade===!1?e.$slideTrack.css(t):e.$slides.eq(i).css(t)},e.prototype.autoPlay=function(){var i=this;i.autoPlayClear(),i.slideCount>i.options.slidesToShow&&(i.autoPlayTimer=setInterval(i.autoPlayIterator,i.options.autoplaySpeed))},e.prototype.autoPlayClear=function(){var i=this;i.autoPlayTimer&&clearInterval(i.autoPlayTimer)},e.prototype.autoPlayIterator=function(){var i=this,e=i.currentSlide+i.options.slidesToScroll;i.paused||i.interrupted||i.focussed||(i.options.infinite===!1&&(1===i.direction&&i.currentSlide+1===i.slideCount-1?i.direction=0:0===i.direction&&(e=i.currentSlide-i.options.slidesToScroll,i.currentSlide-1===0&&(i.direction=1))),i.slideHandler(e))},e.prototype.buildArrows=function(){var e=this;e.options.arrows===!0&&(e.$prevArrow=i(e.options.prevArrow).addClass("slick-arrow"),e.$nextArrow=i(e.options.nextArrow).addClass("slick-arrow"),e.slideCount>e.options.slidesToShow?(e.$prevArrow.removeClass("slick-hidden").removeAttr("aria-hidden tabindex"),e.$nextArrow.removeClass("slick-hidden").removeAttr("aria-hidden tabindex"),e.htmlExpr.test(e.options.prevArrow)&&e.$prevArrow.prependTo(e.options.appendArrows),e.htmlExpr.test(e.options.nextArrow)&&e.$nextArrow.appendTo(e.options.appendArrows),e.options.infinite!==!0&&e.$prevArrow.addClass("slick-disabled").attr("aria-disabled","true")):e.$prevArrow.add(e.$nextArrow).addClass("slick-hidden").attr({"aria-disabled":"true",tabindex:"-1"}))},e.prototype.buildDots=function(){var e,t,o=this;if(o.options.dots===!0&&o.slideCount>o.options.slidesToShow){for(o.$slider.addClass("slick-dotted"),t=i("<ul />").addClass(o.options.dotsClass),e=0;e<=o.getDotCount();e+=1)t.append(i("<li />").append(o.options.customPaging.call(this,o,e)));o.$dots=t.appendTo(o.options.appendDots),o.$dots.find("li").first().addClass("slick-active")}},e.prototype.buildOut=function(){var e=this;e.$slides=e.$slider.children(e.options.slide+":not(.slick-cloned)").addClass("slick-slide"),e.slideCount=e.$slides.length,e.$slides.each(function(e,t){i(t).attr("data-slick-index",e).data("originalStyling",i(t).attr("style")||"")}),e.$slider.addClass("slick-slider"),e.$slideTrack=0===e.slideCount?i('<div class="slick-track"/>').appendTo(e.$slider):e.$slides.wrapAll('<div class="slick-track"/>').parent(),e.$list=e.$slideTrack.wrap('<div class="slick-list"/>').parent(),e.$slideTrack.css("opacity",0),e.options.centerMode!==!0&&e.options.swipeToSlide!==!0||(e.options.slidesToScroll=1),i("img[data-lazy]",e.$slider).not("[src]").addClass("slick-loading"),e.setupInfinite(),e.buildArrows(),e.buildDots(),e.updateDots(),e.setSlideClasses("number"==typeof e.currentSlide?e.currentSlide:0),e.options.draggable===!0&&e.$list.addClass("draggable")},e.prototype.buildRows=function(){var i,e,t,o,s,n,r,l=this;if(o=document.createDocumentFragment(),n=l.$slider.children(),l.options.rows>0){for(r=l.options.slidesPerRow*l.options.rows,s=Math.ceil(n.length/r),i=0;i<s;i++){var d=document.createElement("div");for(e=0;e<l.options.rows;e++){var a=document.createElement("div");for(t=0;t<l.options.slidesPerRow;t++){var c=i*r+(e*l.options.slidesPerRow+t);n.get(c)&&a.appendChild(n.get(c))}d.appendChild(a)}o.appendChild(d)}l.$slider.empty().append(o),l.$slider.children().children().children().css({width:100/l.options.slidesPerRow+"%",display:"inline-block"})}},e.prototype.checkResponsive=function(e,t){var o,s,n,r=this,l=!1,d=r.$slider.width(),a=window.innerWidth||i(window).width();if("window"===r.respondTo?n=a:"slider"===r.respondTo?n=d:"min"===r.respondTo&&(n=Math.min(a,d)),r.options.responsive&&r.options.responsive.length&&null!==r.options.responsive){s=null;for(o in r.breakpoints)r.breakpoints.hasOwnProperty(o)&&(r.originalSettings.mobileFirst===!1?n<r.breakpoints[o]&&(s=r.breakpoints[o]):n>r.breakpoints[o]&&(s=r.breakpoints[o]));null!==s?null!==r.activeBreakpoint?(s!==r.activeBreakpoint||t)&&(r.activeBreakpoint=s,"unslick"===r.breakpointSettings[s]?r.unslick(s):(r.options=i.extend({},r.originalSettings,r.breakpointSettings[s]),e===!0&&(r.currentSlide=r.options.initialSlide),r.refresh(e)),l=s):(r.activeBreakpoint=s,"unslick"===r.breakpointSettings[s]?r.unslick(s):(r.options=i.extend({},r.originalSettings,r.breakpointSettings[s]),e===!0&&(r.currentSlide=r.options.initialSlide),r.refresh(e)),l=s):null!==r.activeBreakpoint&&(r.activeBreakpoint=null,r.options=r.originalSettings,e===!0&&(r.currentSlide=r.options.initialSlide),r.refresh(e),l=s),e||l===!1||r.$slider.trigger("breakpoint",[r,l])}},e.prototype.changeSlide=function(e,t){var o,s,n,r=this,l=i(e.currentTarget);switch(l.is("a")&&e.preventDefault(),l.is("li")||(l=l.closest("li")),n=r.slideCount%r.options.slidesToScroll!==0,o=n?0:(r.slideCount-r.currentSlide)%r.options.slidesToScroll,e.data.message){case"previous":s=0===o?r.options.slidesToScroll:r.options.slidesToShow-o,r.slideCount>r.options.slidesToShow&&r.slideHandler(r.currentSlide-s,!1,t);break;case"next":s=0===o?r.options.slidesToScroll:o,r.slideCount>r.options.slidesToShow&&r.slideHandler(r.currentSlide+s,!1,t);break;case"index":var d=0===e.data.index?0:e.data.index||l.index()*r.options.slidesToScroll;r.slideHandler(r.checkNavigable(d),!1,t),l.children().trigger("focus");break;default:return}},e.prototype.checkNavigable=function(i){var e,t,o=this;if(e=o.getNavigableIndexes(),t=0,i>e[e.length-1])i=e[e.length-1];else for(var s in e){if(i<e[s]){i=t;break}t=e[s]}return i},e.prototype.cleanUpEvents=function(){var e=this;e.options.dots&&null!==e.$dots&&(i("li",e.$dots).off("click.slick",e.changeSlide).off("mouseenter.slick",i.proxy(e.interrupt,e,!0)).off("mouseleave.slick",i.proxy(e.interrupt,e,!1)),e.options.accessibility===!0&&e.$dots.off("keydown.slick",e.keyHandler)),e.$slider.off("focus.slick blur.slick"),e.options.arrows===!0&&e.slideCount>e.options.slidesToShow&&(e.$prevArrow&&e.$prevArrow.off("click.slick",e.changeSlide),e.$nextArrow&&e.$nextArrow.off("click.slick",e.changeSlide),e.options.accessibility===!0&&(e.$prevArrow&&e.$prevArrow.off("keydown.slick",e.keyHandler),e.$nextArrow&&e.$nextArrow.off("keydown.slick",e.keyHandler))),e.$list.off("touchstart.slick mousedown.slick",e.swipeHandler),e.$list.off("touchmove.slick mousemove.slick",e.swipeHandler),e.$list.off("touchend.slick mouseup.slick",e.swipeHandler),e.$list.off("touchcancel.slick mouseleave.slick",e.swipeHandler),e.$list.off("click.slick",e.clickHandler),i(document).off(e.visibilityChange,e.visibility),e.cleanUpSlideEvents(),e.options.accessibility===!0&&e.$list.off("keydown.slick",e.keyHandler),e.options.focusOnSelect===!0&&i(e.$slideTrack).children().off("click.slick",e.selectHandler),i(window).off("orientationchange.slick.slick-"+e.instanceUid,e.orientationChange),i(window).off("resize.slick.slick-"+e.instanceUid,e.resize),i("[draggable!=true]",e.$slideTrack).off("dragstart",e.preventDefault),i(window).off("load.slick.slick-"+e.instanceUid,e.setPosition)},e.prototype.cleanUpSlideEvents=function(){var e=this;e.$list.off("mouseenter.slick",i.proxy(e.interrupt,e,!0)),e.$list.off("mouseleave.slick",i.proxy(e.interrupt,e,!1))},e.prototype.cleanUpRows=function(){var i,e=this;e.options.rows>0&&(i=e.$slides.children().children(),i.removeAttr("style"),e.$slider.empty().append(i))},e.prototype.clickHandler=function(i){var e=this;e.shouldClick===!1&&(i.stopImmediatePropagation(),i.stopPropagation(),i.preventDefault())},e.prototype.destroy=function(e){var t=this;t.autoPlayClear(),t.touchObject={},t.cleanUpEvents(),i(".slick-cloned",t.$slider).detach(),t.$dots&&t.$dots.remove(),t.$prevArrow&&t.$prevArrow.length&&(t.$prevArrow.removeClass("slick-disabled slick-arrow slick-hidden").removeAttr("aria-hidden aria-disabled tabindex").css("display",""),t.htmlExpr.test(t.options.prevArrow)&&t.$prevArrow.remove()),t.$nextArrow&&t.$nextArrow.length&&(t.$nextArrow.removeClass("slick-disabled slick-arrow slick-hidden").removeAttr("aria-hidden aria-disabled tabindex").css("display",""),t.htmlExpr.test(t.options.nextArrow)&&t.$nextArrow.remove()),t.$slides&&(t.$slides.removeClass("slick-slide slick-active slick-center slick-visible slick-current").removeAttr("aria-hidden").removeAttr("data-slick-index").each(function(){i(this).attr("style",i(this).data("originalStyling"))}),t.$slideTrack.children(this.options.slide).detach(),t.$slideTrack.detach(),t.$list.detach(),t.$slider.append(t.$slides)),t.cleanUpRows(),t.$slider.removeClass("slick-slider"),t.$slider.removeClass("slick-initialized"),t.$slider.removeClass("slick-dotted"),t.unslicked=!0,e||t.$slider.trigger("destroy",[t])},e.prototype.disableTransition=function(i){var e=this,t={};t[e.transitionType]="",e.options.fade===!1?e.$slideTrack.css(t):e.$slides.eq(i).css(t)},e.prototype.fadeSlide=function(i,e){var t=this;t.cssTransitions===!1?(t.$slides.eq(i).css({zIndex:t.options.zIndex}),t.$slides.eq(i).animate({opacity:1},t.options.speed,t.options.easing,e)):(t.applyTransition(i),t.$slides.eq(i).css({opacity:1,zIndex:t.options.zIndex}),e&&setTimeout(function(){t.disableTransition(i),e.call()},t.options.speed))},e.prototype.fadeSlideOut=function(i){var e=this;e.cssTransitions===!1?e.$slides.eq(i).animate({opacity:0,zIndex:e.options.zIndex-2},e.options.speed,e.options.easing):(e.applyTransition(i),e.$slides.eq(i).css({opacity:0,zIndex:e.options.zIndex-2}))},e.prototype.filterSlides=e.prototype.slickFilter=function(i){var e=this;null!==i&&(e.$slidesCache=e.$slides,e.unload(),e.$slideTrack.children(this.options.slide).detach(),e.$slidesCache.filter(i).appendTo(e.$slideTrack),e.reinit())},e.prototype.focusHandler=function(){var e=this;e.$slider.off("focus.slick blur.slick").on("focus.slick","*",function(t){var o=i(this);setTimeout(function(){e.options.pauseOnFocus&&o.is(":focus")&&(e.focussed=!0,e.autoPlay())},0)}).on("blur.slick","*",function(t){i(this);e.options.pauseOnFocus&&(e.focussed=!1,e.autoPlay())})},e.prototype.getCurrent=e.prototype.slickCurrentSlide=function(){var i=this;return i.currentSlide},e.prototype.getDotCount=function(){var i=this,e=0,t=0,o=0;if(i.options.infinite===!0)if(i.slideCount<=i.options.slidesToShow)++o;else for(;e<i.slideCount;)++o,e=t+i.options.slidesToScroll,t+=i.options.slidesToScroll<=i.options.slidesToShow?i.options.slidesToScroll:i.options.slidesToShow;else if(i.options.centerMode===!0)o=i.slideCount;else if(i.options.asNavFor)for(;e<i.slideCount;)++o,e=t+i.options.slidesToScroll,t+=i.options.slidesToScroll<=i.options.slidesToShow?i.options.slidesToScroll:i.options.slidesToShow;else o=1+Math.ceil((i.slideCount-i.options.slidesToShow)/i.options.slidesToScroll);return o-1},e.prototype.getLeft=function(i){var e,t,o,s,n=this,r=0;return n.slideOffset=0,t=n.$slides.first().outerHeight(!0),n.options.infinite===!0?(n.slideCount>n.options.slidesToShow&&(n.slideOffset=n.slideWidth*n.options.slidesToShow*-1,s=-1,n.options.vertical===!0&&n.options.centerMode===!0&&(2===n.options.slidesToShow?s=-1.5:1===n.options.slidesToShow&&(s=-2)),r=t*n.options.slidesToShow*s),n.slideCount%n.options.slidesToScroll!==0&&i+n.options.slidesToScroll>n.slideCount&&n.slideCount>n.options.slidesToShow&&(i>n.slideCount?(n.slideOffset=(n.options.slidesToShow-(i-n.slideCount))*n.slideWidth*-1,r=(n.options.slidesToShow-(i-n.slideCount))*t*-1):(n.slideOffset=n.slideCount%n.options.slidesToScroll*n.slideWidth*-1,r=n.slideCount%n.options.slidesToScroll*t*-1))):i+n.options.slidesToShow>n.slideCount&&(n.slideOffset=(i+n.options.slidesToShow-n.slideCount)*n.slideWidth,r=(i+n.options.slidesToShow-n.slideCount)*t),n.slideCount<=n.options.slidesToShow&&(n.slideOffset=0,r=0),n.options.centerMode===!0&&n.slideCount<=n.options.slidesToShow?n.slideOffset=n.slideWidth*Math.floor(n.options.slidesToShow)/2-n.slideWidth*n.slideCount/2:n.options.centerMode===!0&&n.options.infinite===!0?n.slideOffset+=n.slideWidth*Math.floor(n.options.slidesToShow/2)-n.slideWidth:n.options.centerMode===!0&&(n.slideOffset=0,n.slideOffset+=n.slideWidth*Math.floor(n.options.slidesToShow/2)),e=n.options.vertical===!1?i*n.slideWidth*-1+n.slideOffset:i*t*-1+r,n.options.variableWidth===!0&&(o=n.slideCount<=n.options.slidesToShow||n.options.infinite===!1?n.$slideTrack.children(".slick-slide").eq(i):n.$slideTrack.children(".slick-slide").eq(i+n.options.slidesToShow),e=n.options.rtl===!0?o[0]?(n.$slideTrack.width()-o[0].offsetLeft-o.width())*-1:0:o[0]?o[0].offsetLeft*-1:0,n.options.centerMode===!0&&(o=n.slideCount<=n.options.slidesToShow||n.options.infinite===!1?n.$slideTrack.children(".slick-slide").eq(i):n.$slideTrack.children(".slick-slide").eq(i+n.options.slidesToShow+1),e=n.options.rtl===!0?o[0]?(n.$slideTrack.width()-o[0].offsetLeft-o.width())*-1:0:o[0]?o[0].offsetLeft*-1:0,e+=(n.$list.width()-o.outerWidth())/2)),e},e.prototype.getOption=e.prototype.slickGetOption=function(i){var e=this;return e.options[i]},e.prototype.getNavigableIndexes=function(){var i,e=this,t=0,o=0,s=[];for(e.options.infinite===!1?i=e.slideCount:(t=e.options.slidesToScroll*-1,o=e.options.slidesToScroll*-1,i=2*e.slideCount);t<i;)s.push(t),t=o+e.options.slidesToScroll,o+=e.options.slidesToScroll<=e.options.slidesToShow?e.options.slidesToScroll:e.options.slidesToShow;return s},e.prototype.getSlick=function(){return this},e.prototype.getSlideCount=function(){var e,t,o,s,n=this;return s=n.options.centerMode===!0?Math.floor(n.$list.width()/2):0,o=n.swipeLeft*-1+s,n.options.swipeToSlide===!0?(n.$slideTrack.find(".slick-slide").each(function(e,s){var r,l,d;if(r=i(s).outerWidth(),l=s.offsetLeft,n.options.centerMode!==!0&&(l+=r/2),d=l+r,o<d)return t=s,!1}),e=Math.abs(i(t).attr("data-slick-index")-n.currentSlide)||1):n.options.slidesToScroll},e.prototype.goTo=e.prototype.slickGoTo=function(i,e){var t=this;t.changeSlide({data:{message:"index",index:parseInt(i)}},e)},e.prototype.init=function(e){var t=this;i(t.$slider).hasClass("slick-initialized")||(i(t.$slider).addClass("slick-initialized"),t.buildRows(),t.buildOut(),t.setProps(),t.startLoad(),t.loadSlider(),t.initializeEvents(),t.updateArrows(),t.updateDots(),t.checkResponsive(!0),t.focusHandler()),e&&t.$slider.trigger("init",[t]),t.options.accessibility===!0&&t.initADA(),t.options.autoplay&&(t.paused=!1,t.autoPlay())},e.prototype.initADA=function(){var e=this,t=Math.ceil(e.slideCount/e.options.slidesToShow),o=e.getNavigableIndexes().filter(function(i){return i>=0&&i<e.slideCount});e.$slides.add(e.$slideTrack.find(".slick-cloned")).attr({"aria-hidden":"true",tabindex:"-1"}).find("a, input, button, select").attr({tabindex:"-1"}),null!==e.$dots&&(e.$slides.not(e.$slideTrack.find(".slick-cloned")).each(function(t){var s=o.indexOf(t);if(i(this).attr({role:"tabpanel",id:"slick-slide"+e.instanceUid+t,tabindex:-1}),s!==-1){var n="slick-slide-control"+e.instanceUid+s;i("#"+n).length&&i(this).attr({"aria-describedby":n})}}),e.$dots.attr("role","tablist").find("li").each(function(s){var n=o[s];i(this).attr({role:"presentation"}),i(this).find("button").first().attr({role:"tab",id:"slick-slide-control"+e.instanceUid+s,"aria-controls":"slick-slide"+e.instanceUid+n,"aria-label":s+1+" of "+t,"aria-selected":null,tabindex:"-1"})}).eq(e.currentSlide).find("button").attr({"aria-selected":"true",tabindex:"0"}).end());for(var s=e.currentSlide,n=s+e.options.slidesToShow;s<n;s++)e.options.focusOnChange?e.$slides.eq(s).attr({tabindex:"0"}):e.$slides.eq(s).removeAttr("tabindex");e.activateADA()},e.prototype.initArrowEvents=function(){var i=this;i.options.arrows===!0&&i.slideCount>i.options.slidesToShow&&(i.$prevArrow.off("click.slick").on("click.slick",{message:"previous"},i.changeSlide),i.$nextArrow.off("click.slick").on("click.slick",{message:"next"},i.changeSlide),i.options.accessibility===!0&&(i.$prevArrow.on("keydown.slick",i.keyHandler),i.$nextArrow.on("keydown.slick",i.keyHandler)))},e.prototype.initDotEvents=function(){var e=this;e.options.dots===!0&&e.slideCount>e.options.slidesToShow&&(i("li",e.$dots).on("click.slick",{message:"index"},e.changeSlide),e.options.accessibility===!0&&e.$dots.on("keydown.slick",e.keyHandler)),e.options.dots===!0&&e.options.pauseOnDotsHover===!0&&e.slideCount>e.options.slidesToShow&&i("li",e.$dots).on("mouseenter.slick",i.proxy(e.interrupt,e,!0)).on("mouseleave.slick",i.proxy(e.interrupt,e,!1))},e.prototype.initSlideEvents=function(){var e=this;e.options.pauseOnHover&&(e.$list.on("mouseenter.slick",i.proxy(e.interrupt,e,!0)),e.$list.on("mouseleave.slick",i.proxy(e.interrupt,e,!1)))},e.prototype.initializeEvents=function(){var e=this;e.initArrowEvents(),e.initDotEvents(),e.initSlideEvents(),e.$list.on("touchstart.slick mousedown.slick",{action:"start"},e.swipeHandler),e.$list.on("touchmove.slick mousemove.slick",{action:"move"},e.swipeHandler),e.$list.on("touchend.slick mouseup.slick",{action:"end"},e.swipeHandler),e.$list.on("touchcancel.slick mouseleave.slick",{action:"end"},e.swipeHandler),e.$list.on("click.slick",e.clickHandler),i(document).on(e.visibilityChange,i.proxy(e.visibility,e)),e.options.accessibility===!0&&e.$list.on("keydown.slick",e.keyHandler),e.options.focusOnSelect===!0&&i(e.$slideTrack).children().on("click.slick",e.selectHandler),i(window).on("orientationchange.slick.slick-"+e.instanceUid,i.proxy(e.orientationChange,e)),i(window).on("resize.slick.slick-"+e.instanceUid,i.proxy(e.resize,e)),i("[draggable!=true]",e.$slideTrack).on("dragstart",e.preventDefault),i(window).on("load.slick.slick-"+e.instanceUid,e.setPosition),i(e.setPosition)},e.prototype.initUI=function(){var i=this;i.options.arrows===!0&&i.slideCount>i.options.slidesToShow&&(i.$prevArrow.show(),i.$nextArrow.show()),i.options.dots===!0&&i.slideCount>i.options.slidesToShow&&i.$dots.show()},e.prototype.keyHandler=function(i){var e=this;i.target.tagName.match("TEXTAREA|INPUT|SELECT")||(37===i.keyCode&&e.options.accessibility===!0?e.changeSlide({data:{message:e.options.rtl===!0?"next":"previous"}}):39===i.keyCode&&e.options.accessibility===!0&&e.changeSlide({data:{message:e.options.rtl===!0?"previous":"next"}}))},e.prototype.lazyLoad=function(){function e(e){i("img[data-lazy]",e).each(function(){var e=i(this),t=i(this).attr("data-lazy"),o=i(this).attr("data-srcset"),s=i(this).attr("data-sizes")||r.$slider.attr("data-sizes"),n=document.createElement("img");n.onload=function(){e.animate({opacity:0},100,function(){o&&(e.attr("srcset",o),s&&e.attr("sizes",s)),e.attr("src",t).animate({opacity:1},200,function(){e.removeAttr("data-lazy data-srcset data-sizes").removeClass("slick-loading")}),r.$slider.trigger("lazyLoaded",[r,e,t])})},n.onerror=function(){e.removeAttr("data-lazy").removeClass("slick-loading").addClass("slick-lazyload-error"),r.$slider.trigger("lazyLoadError",[r,e,t])},n.src=t})}var t,o,s,n,r=this;if(r.options.centerMode===!0?r.options.infinite===!0?(s=r.currentSlide+(r.options.slidesToShow/2+1),n=s+r.options.slidesToShow+2):(s=Math.max(0,r.currentSlide-(r.options.slidesToShow/2+1)),n=2+(r.options.slidesToShow/2+1)+r.currentSlide):(s=r.options.infinite?r.options.slidesToShow+r.currentSlide:r.currentSlide,n=Math.ceil(s+r.options.slidesToShow),r.options.fade===!0&&(s>0&&s--,n<=r.slideCount&&n++)),t=r.$slider.find(".slick-slide").slice(s,n),"anticipated"===r.options.lazyLoad)for(var l=s-1,d=n,a=r.$slider.find(".slick-slide"),c=0;c<r.options.slidesToScroll;c++)l<0&&(l=r.slideCount-1),t=t.add(a.eq(l)),t=t.add(a.eq(d)),l--,d++;e(t),r.slideCount<=r.options.slidesToShow?(o=r.$slider.find(".slick-slide"),e(o)):r.currentSlide>=r.slideCount-r.options.slidesToShow?(o=r.$slider.find(".slick-cloned").slice(0,r.options.slidesToShow),e(o)):0===r.currentSlide&&(o=r.$slider.find(".slick-cloned").slice(r.options.slidesToShow*-1),e(o))},e.prototype.loadSlider=function(){var i=this;i.setPosition(),i.$slideTrack.css({opacity:1}),i.$slider.removeClass("slick-loading"),i.initUI(),"progressive"===i.options.lazyLoad&&i.progressiveLazyLoad()},e.prototype.next=e.prototype.slickNext=function(){var i=this;i.changeSlide({data:{message:"next"}})},e.prototype.orientationChange=function(){var i=this;i.checkResponsive(),i.setPosition()},e.prototype.pause=e.prototype.slickPause=function(){var i=this;i.autoPlayClear(),i.paused=!0},e.prototype.play=e.prototype.slickPlay=function(){var i=this;i.autoPlay(),i.options.autoplay=!0,i.paused=!1,i.focussed=!1,i.interrupted=!1},e.prototype.postSlide=function(e){var t=this;if(!t.unslicked&&(t.$slider.trigger("afterChange",[t,e]),t.animating=!1,t.slideCount>t.options.slidesToShow&&t.setPosition(),t.swipeLeft=null,t.options.autoplay&&t.autoPlay(),t.options.accessibility===!0&&(t.initADA(),t.options.focusOnChange))){var o=i(t.$slides.get(t.currentSlide));o.attr("tabindex",0).focus()}},e.prototype.prev=e.prototype.slickPrev=function(){var i=this;i.changeSlide({data:{message:"previous"}})},e.prototype.preventDefault=function(i){i.preventDefault()},e.prototype.progressiveLazyLoad=function(e){e=e||1;var t,o,s,n,r,l=this,d=i("img[data-lazy]",l.$slider);d.length?(t=d.first(),o=t.attr("data-lazy"),s=t.attr("data-srcset"),n=t.attr("data-sizes")||l.$slider.attr("data-sizes"),r=document.createElement("img"),r.onload=function(){s&&(t.attr("srcset",s),n&&t.attr("sizes",n)),t.attr("src",o).removeAttr("data-lazy data-srcset data-sizes").removeClass("slick-loading"),l.options.adaptiveHeight===!0&&l.setPosition(),l.$slider.trigger("lazyLoaded",[l,t,o]),l.progressiveLazyLoad()},r.onerror=function(){e<3?setTimeout(function(){l.progressiveLazyLoad(e+1)},500):(t.removeAttr("data-lazy").removeClass("slick-loading").addClass("slick-lazyload-error"),l.$slider.trigger("lazyLoadError",[l,t,o]),l.progressiveLazyLoad())},r.src=o):l.$slider.trigger("allImagesLoaded",[l])},e.prototype.refresh=function(e){var t,o,s=this;o=s.slideCount-s.options.slidesToShow,!s.options.infinite&&s.currentSlide>o&&(s.currentSlide=o),s.slideCount<=s.options.slidesToShow&&(s.currentSlide=0),t=s.currentSlide,s.destroy(!0),i.extend(s,s.initials,{currentSlide:t}),s.init(),e||s.changeSlide({data:{message:"index",index:t}},!1)},e.prototype.registerBreakpoints=function(){var e,t,o,s=this,n=s.options.responsive||null;if("array"===i.type(n)&&n.length){s.respondTo=s.options.respondTo||"window";for(e in n)if(o=s.breakpoints.length-1,n.hasOwnProperty(e)){for(t=n[e].breakpoint;o>=0;)s.breakpoints[o]&&s.breakpoints[o]===t&&s.breakpoints.splice(o,1),o--;s.breakpoints.push(t),s.breakpointSettings[t]=n[e].settings}s.breakpoints.sort(function(i,e){return s.options.mobileFirst?i-e:e-i})}},e.prototype.reinit=function(){var e=this;e.$slides=e.$slideTrack.children(e.options.slide).addClass("slick-slide"),e.slideCount=e.$slides.length,e.currentSlide>=e.slideCount&&0!==e.currentSlide&&(e.currentSlide=e.currentSlide-e.options.slidesToScroll),e.slideCount<=e.options.slidesToShow&&(e.currentSlide=0),e.registerBreakpoints(),e.setProps(),e.setupInfinite(),e.buildArrows(),e.updateArrows(),e.initArrowEvents(),e.buildDots(),e.updateDots(),e.initDotEvents(),e.cleanUpSlideEvents(),e.initSlideEvents(),e.checkResponsive(!1,!0),e.options.focusOnSelect===!0&&i(e.$slideTrack).children().on("click.slick",e.selectHandler),e.setSlideClasses("number"==typeof e.currentSlide?e.currentSlide:0),e.setPosition(),e.focusHandler(),e.paused=!e.options.autoplay,e.autoPlay(),e.$slider.trigger("reInit",[e])},e.prototype.resize=function(){var e=this;i(window).width()!==e.windowWidth&&(clearTimeout(e.windowDelay),e.windowDelay=window.setTimeout(function(){e.windowWidth=i(window).width(),e.checkResponsive(),e.unslicked||e.setPosition()},50))},e.prototype.removeSlide=e.prototype.slickRemove=function(i,e,t){var o=this;return"boolean"==typeof i?(e=i,i=e===!0?0:o.slideCount-1):i=e===!0?--i:i,!(o.slideCount<1||i<0||i>o.slideCount-1)&&(o.unload(),t===!0?o.$slideTrack.children().remove():o.$slideTrack.children(this.options.slide).eq(i).remove(),o.$slides=o.$slideTrack.children(this.options.slide),o.$slideTrack.children(this.options.slide).detach(),o.$slideTrack.append(o.$slides),o.$slidesCache=o.$slides,void o.reinit())},e.prototype.setCSS=function(i){var e,t,o=this,s={};o.options.rtl===!0&&(i=-i),e="left"==o.positionProp?Math.ceil(i)+"px":"0px",t="top"==o.positionProp?Math.ceil(i)+"px":"0px",s[o.positionProp]=i,o.transformsEnabled===!1?o.$slideTrack.css(s):(s={},o.cssTransitions===!1?(s[o.animType]="translate("+e+", "+t+")",o.$slideTrack.css(s)):(s[o.animType]="translate3d("+e+", "+t+", 0px)",o.$slideTrack.css(s)))},e.prototype.setDimensions=function(){var i=this;i.options.vertical===!1?i.options.centerMode===!0&&i.$list.css({padding:"0px "+i.options.centerPadding}):(i.$list.height(i.$slides.first().outerHeight(!0)*i.options.slidesToShow),i.options.centerMode===!0&&i.$list.css({padding:i.options.centerPadding+" 0px"})),i.listWidth=i.$list.width(),i.listHeight=i.$list.height(),i.options.vertical===!1&&i.options.variableWidth===!1?(i.slideWidth=Math.ceil(i.listWidth/i.options.slidesToShow),i.$slideTrack.width(Math.ceil(i.slideWidth*i.$slideTrack.children(".slick-slide").length))):i.options.variableWidth===!0?i.$slideTrack.width(5e3*i.slideCount):(i.slideWidth=Math.ceil(i.listWidth),i.$slideTrack.height(Math.ceil(i.$slides.first().outerHeight(!0)*i.$slideTrack.children(".slick-slide").length)));var e=i.$slides.first().outerWidth(!0)-i.$slides.first().width();i.options.variableWidth===!1&&i.$slideTrack.children(".slick-slide").width(i.slideWidth-e)},e.prototype.setFade=function(){var e,t=this;t.$slides.each(function(o,s){e=t.slideWidth*o*-1,t.options.rtl===!0?i(s).css({position:"relative",right:e,top:0,zIndex:t.options.zIndex-2,opacity:0}):i(s).css({position:"relative",left:e,top:0,zIndex:t.options.zIndex-2,opacity:0})}),t.$slides.eq(t.currentSlide).css({zIndex:t.options.zIndex-1,opacity:1})},e.prototype.setHeight=function(){var i=this;if(1===i.options.slidesToShow&&i.options.adaptiveHeight===!0&&i.options.vertical===!1){var e=i.$slides.eq(i.currentSlide).outerHeight(!0);i.$list.css("height",e)}},e.prototype.setOption=e.prototype.slickSetOption=function(){var e,t,o,s,n,r=this,l=!1;if("object"===i.type(arguments[0])?(o=arguments[0],l=arguments[1],n="multiple"):"string"===i.type(arguments[0])&&(o=arguments[0],s=arguments[1],l=arguments[2],"responsive"===arguments[0]&&"array"===i.type(arguments[1])?n="responsive":"undefined"!=typeof arguments[1]&&(n="single")),"single"===n)r.options[o]=s;else if("multiple"===n)i.each(o,function(i,e){r.options[i]=e});else if("responsive"===n)for(t in s)if("array"!==i.type(r.options.responsive))r.options.responsive=[s[t]];else{for(e=r.options.responsive.length-1;e>=0;)r.options.responsive[e].breakpoint===s[t].breakpoint&&r.options.responsive.splice(e,1),e--;r.options.responsive.push(s[t])}l&&(r.unload(),r.reinit())},e.prototype.setPosition=function(){var i=this;i.setDimensions(),i.setHeight(),i.options.fade===!1?i.setCSS(i.getLeft(i.currentSlide)):i.setFade(),i.$slider.trigger("setPosition",[i])},e.prototype.setProps=function(){var i=this,e=document.body.style;i.positionProp=i.options.vertical===!0?"top":"left",
"top"===i.positionProp?i.$slider.addClass("slick-vertical"):i.$slider.removeClass("slick-vertical"),void 0===e.WebkitTransition&&void 0===e.MozTransition&&void 0===e.msTransition||i.options.useCSS===!0&&(i.cssTransitions=!0),i.options.fade&&("number"==typeof i.options.zIndex?i.options.zIndex<3&&(i.options.zIndex=3):i.options.zIndex=i.defaults.zIndex),void 0!==e.OTransform&&(i.animType="OTransform",i.transformType="-o-transform",i.transitionType="OTransition",void 0===e.perspectiveProperty&&void 0===e.webkitPerspective&&(i.animType=!1)),void 0!==e.MozTransform&&(i.animType="MozTransform",i.transformType="-moz-transform",i.transitionType="MozTransition",void 0===e.perspectiveProperty&&void 0===e.MozPerspective&&(i.animType=!1)),void 0!==e.webkitTransform&&(i.animType="webkitTransform",i.transformType="-webkit-transform",i.transitionType="webkitTransition",void 0===e.perspectiveProperty&&void 0===e.webkitPerspective&&(i.animType=!1)),void 0!==e.msTransform&&(i.animType="msTransform",i.transformType="-ms-transform",i.transitionType="msTransition",void 0===e.msTransform&&(i.animType=!1)),void 0!==e.transform&&i.animType!==!1&&(i.animType="transform",i.transformType="transform",i.transitionType="transition"),i.transformsEnabled=i.options.useTransform&&null!==i.animType&&i.animType!==!1},e.prototype.setSlideClasses=function(i){var e,t,o,s,n=this;if(t=n.$slider.find(".slick-slide").removeClass("slick-active slick-center slick-current").attr("aria-hidden","true"),n.$slides.eq(i).addClass("slick-current"),n.options.centerMode===!0){var r=n.options.slidesToShow%2===0?1:0;e=Math.floor(n.options.slidesToShow/2),n.options.infinite===!0&&(i>=e&&i<=n.slideCount-1-e?n.$slides.slice(i-e+r,i+e+1).addClass("slick-active").attr("aria-hidden","false"):(o=n.options.slidesToShow+i,t.slice(o-e+1+r,o+e+2).addClass("slick-active").attr("aria-hidden","false")),0===i?t.eq(t.length-1-n.options.slidesToShow).addClass("slick-center"):i===n.slideCount-1&&t.eq(n.options.slidesToShow).addClass("slick-center")),n.$slides.eq(i).addClass("slick-center")}else i>=0&&i<=n.slideCount-n.options.slidesToShow?n.$slides.slice(i,i+n.options.slidesToShow).addClass("slick-active").attr("aria-hidden","false"):t.length<=n.options.slidesToShow?t.addClass("slick-active").attr("aria-hidden","false"):(s=n.slideCount%n.options.slidesToShow,o=n.options.infinite===!0?n.options.slidesToShow+i:i,n.options.slidesToShow==n.options.slidesToScroll&&n.slideCount-i<n.options.slidesToShow?t.slice(o-(n.options.slidesToShow-s),o+s).addClass("slick-active").attr("aria-hidden","false"):t.slice(o,o+n.options.slidesToShow).addClass("slick-active").attr("aria-hidden","false"));"ondemand"!==n.options.lazyLoad&&"anticipated"!==n.options.lazyLoad||n.lazyLoad()},e.prototype.setupInfinite=function(){var e,t,o,s=this;if(s.options.fade===!0&&(s.options.centerMode=!1),s.options.infinite===!0&&s.options.fade===!1&&(t=null,s.slideCount>s.options.slidesToShow)){for(o=s.options.centerMode===!0?s.options.slidesToShow+1:s.options.slidesToShow,e=s.slideCount;e>s.slideCount-o;e-=1)t=e-1,i(s.$slides[t]).clone(!0).attr("id","").attr("data-slick-index",t-s.slideCount).prependTo(s.$slideTrack).addClass("slick-cloned");for(e=0;e<o+s.slideCount;e+=1)t=e,i(s.$slides[t]).clone(!0).attr("id","").attr("data-slick-index",t+s.slideCount).appendTo(s.$slideTrack).addClass("slick-cloned");s.$slideTrack.find(".slick-cloned").find("[id]").each(function(){i(this).attr("id","")})}},e.prototype.interrupt=function(i){var e=this;i||e.autoPlay(),e.interrupted=i},e.prototype.selectHandler=function(e){var t=this,o=i(e.target).is(".slick-slide")?i(e.target):i(e.target).parents(".slick-slide"),s=parseInt(o.attr("data-slick-index"));return s||(s=0),t.slideCount<=t.options.slidesToShow?void t.slideHandler(s,!1,!0):void t.slideHandler(s)},e.prototype.slideHandler=function(i,e,t){var o,s,n,r,l,d=null,a=this;if(e=e||!1,!(a.animating===!0&&a.options.waitForAnimate===!0||a.options.fade===!0&&a.currentSlide===i))return e===!1&&a.asNavFor(i),o=i,d=a.getLeft(o),r=a.getLeft(a.currentSlide),a.currentLeft=null===a.swipeLeft?r:a.swipeLeft,a.options.infinite===!1&&a.options.centerMode===!1&&(i<0||i>a.getDotCount()*a.options.slidesToScroll)?void(a.options.fade===!1&&(o=a.currentSlide,t!==!0&&a.slideCount>a.options.slidesToShow?a.animateSlide(r,function(){a.postSlide(o)}):a.postSlide(o))):a.options.infinite===!1&&a.options.centerMode===!0&&(i<0||i>a.slideCount-a.options.slidesToScroll)?void(a.options.fade===!1&&(o=a.currentSlide,t!==!0&&a.slideCount>a.options.slidesToShow?a.animateSlide(r,function(){a.postSlide(o)}):a.postSlide(o))):(a.options.autoplay&&clearInterval(a.autoPlayTimer),s=o<0?a.slideCount%a.options.slidesToScroll!==0?a.slideCount-a.slideCount%a.options.slidesToScroll:a.slideCount+o:o>=a.slideCount?a.slideCount%a.options.slidesToScroll!==0?0:o-a.slideCount:o,a.animating=!0,a.$slider.trigger("beforeChange",[a,a.currentSlide,s]),n=a.currentSlide,a.currentSlide=s,a.setSlideClasses(a.currentSlide),a.options.asNavFor&&(l=a.getNavTarget(),l=l.slick("getSlick"),l.slideCount<=l.options.slidesToShow&&l.setSlideClasses(a.currentSlide)),a.updateDots(),a.updateArrows(),a.options.fade===!0?(t!==!0?(a.fadeSlideOut(n),a.fadeSlide(s,function(){a.postSlide(s)})):a.postSlide(s),void a.animateHeight()):void(t!==!0&&a.slideCount>a.options.slidesToShow?a.animateSlide(d,function(){a.postSlide(s)}):a.postSlide(s)))},e.prototype.startLoad=function(){var i=this;i.options.arrows===!0&&i.slideCount>i.options.slidesToShow&&(i.$prevArrow.hide(),i.$nextArrow.hide()),i.options.dots===!0&&i.slideCount>i.options.slidesToShow&&i.$dots.hide(),i.$slider.addClass("slick-loading")},e.prototype.swipeDirection=function(){var i,e,t,o,s=this;return i=s.touchObject.startX-s.touchObject.curX,e=s.touchObject.startY-s.touchObject.curY,t=Math.atan2(e,i),o=Math.round(180*t/Math.PI),o<0&&(o=360-Math.abs(o)),o<=45&&o>=0?s.options.rtl===!1?"left":"right":o<=360&&o>=315?s.options.rtl===!1?"left":"right":o>=135&&o<=225?s.options.rtl===!1?"right":"left":s.options.verticalSwiping===!0?o>=35&&o<=135?"down":"up":"vertical"},e.prototype.swipeEnd=function(i){var e,t,o=this;if(o.dragging=!1,o.swiping=!1,o.scrolling)return o.scrolling=!1,!1;if(o.interrupted=!1,o.shouldClick=!(o.touchObject.swipeLength>10),void 0===o.touchObject.curX)return!1;if(o.touchObject.edgeHit===!0&&o.$slider.trigger("edge",[o,o.swipeDirection()]),o.touchObject.swipeLength>=o.touchObject.minSwipe){switch(t=o.swipeDirection()){case"left":case"down":e=o.options.swipeToSlide?o.checkNavigable(o.currentSlide+o.getSlideCount()):o.currentSlide+o.getSlideCount(),o.currentDirection=0;break;case"right":case"up":e=o.options.swipeToSlide?o.checkNavigable(o.currentSlide-o.getSlideCount()):o.currentSlide-o.getSlideCount(),o.currentDirection=1}"vertical"!=t&&(o.slideHandler(e),o.touchObject={},o.$slider.trigger("swipe",[o,t]))}else o.touchObject.startX!==o.touchObject.curX&&(o.slideHandler(o.currentSlide),o.touchObject={})},e.prototype.swipeHandler=function(i){var e=this;if(!(e.options.swipe===!1||"ontouchend"in document&&e.options.swipe===!1||e.options.draggable===!1&&i.type.indexOf("mouse")!==-1))switch(e.touchObject.fingerCount=i.originalEvent&&void 0!==i.originalEvent.touches?i.originalEvent.touches.length:1,e.touchObject.minSwipe=e.listWidth/e.options.touchThreshold,e.options.verticalSwiping===!0&&(e.touchObject.minSwipe=e.listHeight/e.options.touchThreshold),i.data.action){case"start":e.swipeStart(i);break;case"move":e.swipeMove(i);break;case"end":e.swipeEnd(i)}},e.prototype.swipeMove=function(i){var e,t,o,s,n,r,l=this;return n=void 0!==i.originalEvent?i.originalEvent.touches:null,!(!l.dragging||l.scrolling||n&&1!==n.length)&&(e=l.getLeft(l.currentSlide),l.touchObject.curX=void 0!==n?n[0].pageX:i.clientX,l.touchObject.curY=void 0!==n?n[0].pageY:i.clientY,l.touchObject.swipeLength=Math.round(Math.sqrt(Math.pow(l.touchObject.curX-l.touchObject.startX,2))),r=Math.round(Math.sqrt(Math.pow(l.touchObject.curY-l.touchObject.startY,2))),!l.options.verticalSwiping&&!l.swiping&&r>4?(l.scrolling=!0,!1):(l.options.verticalSwiping===!0&&(l.touchObject.swipeLength=r),t=l.swipeDirection(),void 0!==i.originalEvent&&l.touchObject.swipeLength>4&&(l.swiping=!0,i.preventDefault()),s=(l.options.rtl===!1?1:-1)*(l.touchObject.curX>l.touchObject.startX?1:-1),l.options.verticalSwiping===!0&&(s=l.touchObject.curY>l.touchObject.startY?1:-1),o=l.touchObject.swipeLength,l.touchObject.edgeHit=!1,l.options.infinite===!1&&(0===l.currentSlide&&"right"===t||l.currentSlide>=l.getDotCount()&&"left"===t)&&(o=l.touchObject.swipeLength*l.options.edgeFriction,l.touchObject.edgeHit=!0),l.options.vertical===!1?l.swipeLeft=e+o*s:l.swipeLeft=e+o*(l.$list.height()/l.listWidth)*s,l.options.verticalSwiping===!0&&(l.swipeLeft=e+o*s),l.options.fade!==!0&&l.options.touchMove!==!1&&(l.animating===!0?(l.swipeLeft=null,!1):void l.setCSS(l.swipeLeft))))},e.prototype.swipeStart=function(i){var e,t=this;return t.interrupted=!0,1!==t.touchObject.fingerCount||t.slideCount<=t.options.slidesToShow?(t.touchObject={},!1):(void 0!==i.originalEvent&&void 0!==i.originalEvent.touches&&(e=i.originalEvent.touches[0]),t.touchObject.startX=t.touchObject.curX=void 0!==e?e.pageX:i.clientX,t.touchObject.startY=t.touchObject.curY=void 0!==e?e.pageY:i.clientY,void(t.dragging=!0))},e.prototype.unfilterSlides=e.prototype.slickUnfilter=function(){var i=this;null!==i.$slidesCache&&(i.unload(),i.$slideTrack.children(this.options.slide).detach(),i.$slidesCache.appendTo(i.$slideTrack),i.reinit())},e.prototype.unload=function(){var e=this;i(".slick-cloned",e.$slider).remove(),e.$dots&&e.$dots.remove(),e.$prevArrow&&e.htmlExpr.test(e.options.prevArrow)&&e.$prevArrow.remove(),e.$nextArrow&&e.htmlExpr.test(e.options.nextArrow)&&e.$nextArrow.remove(),e.$slides.removeClass("slick-slide slick-active slick-visible slick-current").attr("aria-hidden","true").css("width","")},e.prototype.unslick=function(i){var e=this;e.$slider.trigger("unslick",[e,i]),e.destroy()},e.prototype.updateArrows=function(){var i,e=this;i=Math.floor(e.options.slidesToShow/2),e.options.arrows===!0&&e.slideCount>e.options.slidesToShow&&!e.options.infinite&&(e.$prevArrow.removeClass("slick-disabled").attr("aria-disabled","false"),e.$nextArrow.removeClass("slick-disabled").attr("aria-disabled","false"),0===e.currentSlide?(e.$prevArrow.addClass("slick-disabled").attr("aria-disabled","true"),e.$nextArrow.removeClass("slick-disabled").attr("aria-disabled","false")):e.currentSlide>=e.slideCount-e.options.slidesToShow&&e.options.centerMode===!1?(e.$nextArrow.addClass("slick-disabled").attr("aria-disabled","true"),e.$prevArrow.removeClass("slick-disabled").attr("aria-disabled","false")):e.currentSlide>=e.slideCount-1&&e.options.centerMode===!0&&(e.$nextArrow.addClass("slick-disabled").attr("aria-disabled","true"),e.$prevArrow.removeClass("slick-disabled").attr("aria-disabled","false")))},e.prototype.updateDots=function(){var i=this;null!==i.$dots&&(i.$dots.find("li").removeClass("slick-active").end(),i.$dots.find("li").eq(Math.floor(i.currentSlide/i.options.slidesToScroll)).addClass("slick-active"))},e.prototype.visibility=function(){var i=this;i.options.autoplay&&(document[i.hidden]?i.interrupted=!0:i.interrupted=!1)},i.fn.slick=function(){var i,t,o=this,s=arguments[0],n=Array.prototype.slice.call(arguments,1),r=o.length;for(i=0;i<r;i++)if("object"==typeof s||"undefined"==typeof s?o[i].slick=new e(o[i],s):t=o[i].slick[s].apply(o[i].slick,n),"undefined"!=typeof t)return t;return o}});;
/*! tablesorter (FORK) - updated 02-15-2016 (v2.25.4)*/
!function(a){"function"==typeof define&&define.amd?define(["jquery"],a):"object"==typeof module&&"object"==typeof module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){return function(a){"use strict";var b=a.tablesorter={version:"2.25.4",parsers:[],widgets:[],defaults:{theme:"default",widthFixed:!1,showProcessing:!1,headerTemplate:"{content}",onRenderTemplate:null,onRenderHeader:null,cancelSelection:!0,tabIndex:!0,dateFormat:"mmddyyyy",sortMultiSortKey:"shiftKey",sortResetKey:"ctrlKey",usNumberFormat:!0,delayInit:!1,serverSideSorting:!1,resort:!0,headers:{},ignoreCase:!0,sortForce:null,sortList:[],sortAppend:null,sortStable:!1,sortInitialOrder:"asc",sortLocaleCompare:!1,sortReset:!1,sortRestart:!1,emptyTo:"bottom",stringTo:"max",duplicateSpan:!0,textExtraction:"basic",textAttribute:"data-text",textSorter:null,numberSorter:null,widgets:[],widgetOptions:{zebra:["even","odd"]},initWidgets:!0,widgetClass:"widget-{name}",initialized:null,tableClass:"",cssAsc:"",cssDesc:"",cssNone:"",cssHeader:"",cssHeaderRow:"",cssProcessing:"",cssChildRow:"tablesorter-childRow",cssInfoBlock:"tablesorter-infoOnly",cssNoSort:"tablesorter-noSort",cssIgnoreRow:"tablesorter-ignoreRow",cssIcon:"tablesorter-icon",cssIconNone:"",cssIconAsc:"",cssIconDesc:"",pointerClick:"click",pointerDown:"mousedown",pointerUp:"mouseup",selectorHeaders:"> thead th, > thead td",selectorSort:"th, td",selectorRemove:".remove-me",debug:!1,headerList:[],empties:{},strings:{},parsers:[]},css:{table:"tablesorter",cssHasChild:"tablesorter-hasChildRow",childRow:"tablesorter-childRow",colgroup:"tablesorter-colgroup",header:"tablesorter-header",headerRow:"tablesorter-headerRow",headerIn:"tablesorter-header-inner",icon:"tablesorter-icon",processing:"tablesorter-processing",sortAsc:"tablesorter-headerAsc",sortDesc:"tablesorter-headerDesc",sortNone:"tablesorter-headerUnSorted"},language:{sortAsc:"Ascending sort applied, ",sortDesc:"Descending sort applied, ",sortNone:"No sort applied, ",sortDisabled:"sorting is disabled",nextAsc:"activate to apply an ascending sort",nextDesc:"activate to apply a descending sort",nextNone:"activate to remove the sort"},regex:{templateContent:/\{content\}/g,templateIcon:/\{icon\}/g,templateName:/\{name\}/i,spaces:/\s+/g,nonWord:/\W/g,formElements:/(input|select|button|textarea)/i,chunk:/(^([+\-]?(?:\d*)(?:\.\d*)?(?:[eE][+\-]?\d+)?)?$|^0x[0-9a-f]+$|\d+)/gi,chunks:/(^\\0|\\0$)/,hex:/^0x[0-9a-f]+$/i,comma:/,/g,digitNonUS:/[\s|\.]/g,digitNegativeTest:/^\s*\([.\d]+\)/,digitNegativeReplace:/^\s*\(([.\d]+)\)/,digitTest:/^[\-+(]?\d+[)]?$/,digitReplace:/[,.'"\s]/g},string:{max:1,min:-1,emptymin:1,emptymax:-1,zero:0,none:0,"null":0,top:!0,bottom:!1},keyCodes:{enter:13},dates:{},instanceMethods:{},setup:function(c,d){if(!c||!c.tHead||0===c.tBodies.length||c.hasInitialized===!0)return void(d.debug&&(c.hasInitialized?console.warn("Stopping initialization. Tablesorter has already been initialized"):console.error("Stopping initialization! No table, thead or tbody",c)));var e="",f=a(c),g=a.metadata;c.hasInitialized=!1,c.isProcessing=!0,c.config=d,a.data(c,"tablesorter",d),d.debug&&(console[console.group?"group":"log"]("Initializing tablesorter"),a.data(c,"startoveralltimer",new Date)),d.supportsDataObject=function(a){return a[0]=parseInt(a[0],10),a[0]>1||1===a[0]&&parseInt(a[1],10)>=4}(a.fn.jquery.split(".")),d.emptyTo=d.emptyTo.toLowerCase(),d.stringTo=d.stringTo.toLowerCase(),d.last={sortList:[],clickedIndex:-1},/tablesorter\-/.test(f.attr("class"))||(e=""!==d.theme?" tablesorter-"+d.theme:""),d.table=c,d.$table=f.addClass(b.css.table+" "+d.tableClass+e).attr("role","grid"),d.$headers=f.find(d.selectorHeaders),d.namespace?d.namespace="."+d.namespace.replace(b.regex.nonWord,""):d.namespace=".tablesorter"+Math.random().toString(16).slice(2),d.$table.children().children("tr").attr("role","row"),d.$tbodies=f.children("tbody:not(."+d.cssInfoBlock+")").attr({"aria-live":"polite","aria-relevant":"all"}),d.$table.children("caption").length&&(e=d.$table.children("caption")[0],e.id||(e.id=d.namespace.slice(1)+"caption"),d.$table.attr("aria-labelledby",e.id)),d.widgetInit={},d.textExtraction=d.$table.attr("data-text-extraction")||d.textExtraction||"basic",b.buildHeaders(d),b.fixColumnWidth(c),b.addWidgetFromClass(c),b.applyWidgetOptions(c),b.setupParsers(d),d.totalRows=0,d.delayInit||b.buildCache(d),b.bindEvents(c,d.$headers,!0),b.bindMethods(d),d.supportsDataObject&&"undefined"!=typeof f.data().sortlist?d.sortList=f.data().sortlist:g&&f.metadata()&&f.metadata().sortlist&&(d.sortList=f.metadata().sortlist),b.applyWidget(c,!0),d.sortList.length>0?b.sortOn(d,d.sortList,{},!d.initWidgets):(b.setHeadersCss(d),d.initWidgets&&b.applyWidget(c,!1)),d.showProcessing&&f.unbind("sortBegin"+d.namespace+" sortEnd"+d.namespace).bind("sortBegin"+d.namespace+" sortEnd"+d.namespace,function(a){clearTimeout(d.timerProcessing),b.isProcessing(c),"sortBegin"===a.type&&(d.timerProcessing=setTimeout(function(){b.isProcessing(c,!0)},500))}),c.hasInitialized=!0,c.isProcessing=!1,d.debug&&(console.log("Overall initialization time: "+b.benchmark(a.data(c,"startoveralltimer"))),d.debug&&console.groupEnd&&console.groupEnd()),f.triggerHandler("tablesorter-initialized",c),"function"==typeof d.initialized&&d.initialized(c)},bindMethods:function(c){var d=c.$table,e=c.namespace,f="sortReset update updateRows updateAll updateHeaders addRows updateCell updateComplete sorton appendCache updateCache applyWidgetId applyWidgets refreshWidgets destroy mouseup mouseleave ".split(" ").join(e+" ");d.unbind(f.replace(b.regex.spaces," ")).bind("sortReset"+e,function(a,c){a.stopPropagation(),b.sortReset(this.config,c)}).bind("updateAll"+e,function(a,c,d){a.stopPropagation(),b.updateAll(this.config,c,d)}).bind("update"+e+" updateRows"+e,function(a,c,d){a.stopPropagation(),b.update(this.config,c,d)}).bind("updateHeaders"+e,function(a,c){a.stopPropagation(),b.updateHeaders(this.config,c)}).bind("updateCell"+e,function(a,c,d,e){a.stopPropagation(),b.updateCell(this.config,c,d,e)}).bind("addRows"+e,function(a,c,d,e){a.stopPropagation(),b.addRows(this.config,c,d,e)}).bind("updateComplete"+e,function(){this.isUpdating=!1}).bind("sorton"+e,function(a,c,d,e){a.stopPropagation(),b.sortOn(this.config,c,d,e)}).bind("appendCache"+e,function(c,d,e){c.stopPropagation(),b.appendCache(this.config,e),a.isFunction(d)&&d(this)}).bind("updateCache"+e,function(a,c,d){a.stopPropagation(),b.updateCache(this.config,c,d)}).bind("applyWidgetId"+e,function(a,c){a.stopPropagation(),b.applyWidgetId(this,c)}).bind("applyWidgets"+e,function(a,c){a.stopPropagation(),b.applyWidget(this,c)}).bind("refreshWidgets"+e,function(a,c,d){a.stopPropagation(),b.refreshWidgets(this,c,d)}).bind("removeWidget"+e,function(a,c,d){a.stopPropagation(),b.removeWidget(this,c,d)}).bind("destroy"+e,function(a,c,d){a.stopPropagation(),b.destroy(this,c,d)}).bind("resetToLoadState"+e,function(d){d.stopPropagation(),b.removeWidget(this,!0,!1),c=a.extend(!0,b.defaults,c.originalSettings),this.hasInitialized=!1,b.setup(this,c)})},bindEvents:function(c,d,e){c=a(c)[0];var f,g=c.config,h=g.namespace,i=null;e!==!0&&(d.addClass(h.slice(1)+"_extra_headers"),f=a.fn.closest?d.closest("table")[0]:d.parents("table")[0],f&&"TABLE"===f.nodeName&&f!==c&&a(f).addClass(h.slice(1)+"_extra_table")),f=(g.pointerDown+" "+g.pointerUp+" "+g.pointerClick+" sort keyup ").replace(b.regex.spaces," ").split(" ").join(h+" "),d.find(g.selectorSort).add(d.filter(g.selectorSort)).unbind(f).bind(f,function(c,e){var f,h,j,k=a(c.target),l=" "+c.type+" ";if(!(1!==(c.which||c.button)&&!l.match(" "+g.pointerClick+" | sort | keyup ")||" keyup "===l&&c.which!==b.keyCodes.enter||l.match(" "+g.pointerClick+" ")&&"undefined"!=typeof c.which||l.match(" "+g.pointerUp+" ")&&i!==c.target&&e!==!0)){if(l.match(" "+g.pointerDown+" "))return i=c.target,j=k.jquery.split("."),void("1"===j[0]&&j[1]<4&&c.preventDefault());if(i=null,b.regex.formElements.test(c.target.nodeName)||k.hasClass(g.cssNoSort)||k.parents("."+g.cssNoSort).length>0||k.parents("button").length>0)return!g.cancelSelection;g.delayInit&&b.isEmptyObject(g.cache)&&b.buildCache(g),f=a.fn.closest?a(this).closest("th, td"):/TH|TD/.test(this.nodeName)?a(this):a(this).parents("th, td"),j=d.index(f),g.last.clickedIndex=0>j?f.attr("data-column"):j,h=g.$headers[g.last.clickedIndex],h&&!h.sortDisabled&&b.initSort(g,h,c)}}),g.cancelSelection&&d.attr("unselectable","on").bind("selectstart",!1).css({"user-select":"none",MozUserSelect:"none"})},buildHeaders:function(c){var d,e,f,g;for(c.headerList=[],c.headerContent=[],c.sortVars=[],c.debug&&(f=new Date),c.columns=b.computeColumnIndex(c.$table.children("thead, tfoot").children("tr")),e=c.cssIcon?'<i class="'+(c.cssIcon===b.css.icon?b.css.icon:c.cssIcon+" "+b.css.icon)+'"></i>':"",c.$headers=a(a.map(c.$table.find(c.selectorHeaders),function(d,f){var g,h,i,j,k,l=a(d);if(!l.parent().hasClass(c.cssIgnoreRow))return g=b.getColumnData(c.table,c.headers,f,!0),c.headerContent[f]=l.html(),""===c.headerTemplate||l.find("."+b.css.headerIn).length||(j=c.headerTemplate.replace(b.regex.templateContent,l.html()).replace(b.regex.templateIcon,l.find("."+b.css.icon).length?"":e),c.onRenderTemplate&&(h=c.onRenderTemplate.apply(l,[f,j]),h&&"string"==typeof h&&(j=h)),l.html('<div class="'+b.css.headerIn+'">'+j+"</div>")),c.onRenderHeader&&c.onRenderHeader.apply(l,[f,c,c.$table]),i=parseInt(l.attr("data-column"),10),d.column=i,k=b.getData(l,g,"sortInitialOrder")||c.sortInitialOrder,c.sortVars[i]={count:-1,order:b.getOrder(k)?[1,0,2]:[0,1,2],lockedOrder:!1},k=b.getData(l,g,"lockedOrder")||!1,"undefined"!=typeof k&&k!==!1&&(c.sortVars[i].lockedOrder=!0,c.sortVars[i].order=b.getOrder(k)?[1,1,1]:[0,0,0]),c.headerList[f]=d,l.addClass(b.css.header+" "+c.cssHeader).parent().addClass(b.css.headerRow+" "+c.cssHeaderRow).attr("role","row"),c.tabIndex&&l.attr("tabindex",0),d})),c.$headerIndexed=[],g=0;g<c.columns;g++)b.isEmptyObject(c.sortVars[g])&&(c.sortVars[g]={}),d=c.$headers.filter('[data-column="'+g+'"]'),c.$headerIndexed[g]=d.length?d.not(".sorter-false").length?d.not(".sorter-false").filter(":last"):d.filter(":last"):a();c.$table.find(c.selectorHeaders).attr({scope:"col",role:"columnheader"}),b.updateHeader(c),c.debug&&(console.log("Built headers:"+b.benchmark(f)),console.log(c.$headers))},addInstanceMethods:function(c){a.extend(b.instanceMethods,c)},setupParsers:function(a,c){var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r=a.table,s=0,t={};if(a.$tbodies=a.$table.children("tbody:not(."+a.cssInfoBlock+")"),p="undefined"==typeof c?a.$tbodies:c,q=p.length,0===q)return a.debug?console.warn("Warning: *Empty table!* Not building a parser cache"):"";for(a.debug&&(o=new Date,console[console.group?"group":"log"]("Detecting parsers for each column")),e={extractors:[],parsers:[]};q>s;){if(d=p[s].rows,d.length)for(h=0,g=a.columns,i=0;g>i;i++){if(j=a.$headerIndexed[h],j&&j.length&&(k=b.getColumnData(r,a.headers,h),n=b.getParserById(b.getData(j,k,"extractor")),m=b.getParserById(b.getData(j,k,"sorter")),l="false"===b.getData(j,k,"parser"),a.empties[h]=(b.getData(j,k,"empty")||a.emptyTo||(a.emptyToBottom?"bottom":"top")).toLowerCase(),a.strings[h]=(b.getData(j,k,"string")||a.stringTo||"max").toLowerCase(),l&&(m=b.getParserById("no-parser")),n||(n=!1),m||(m=b.detectParserForColumn(a,d,-1,h)),a.debug&&(t["("+h+") "+j.text()]={parser:m.id,extractor:n?n.id:"none",string:a.strings[h],empty:a.empties[h]}),e.parsers[h]=m,e.extractors[h]=n,f=j[0].colSpan-1,f>0))for(h+=f,g+=f;f+1>0;)e.parsers[h-f]=m,e.extractors[h-f]=n,f--;h++}s+=e.parsers.length?q:1}a.debug&&(b.isEmptyObject(t)?console.warn("  No parsers detected!"):console[console.table?"table":"log"](t),console.log("Completed detecting parsers"+b.benchmark(o)),console.groupEnd&&console.groupEnd()),a.parsers=e.parsers,a.extractors=e.extractors},addParser:function(a){var c,d=b.parsers.length,e=!0;for(c=0;d>c;c++)b.parsers[c].id.toLowerCase()===a.id.toLowerCase()&&(e=!1);e&&b.parsers.push(a)},getParserById:function(a){if("false"==a)return!1;var c,d=b.parsers.length;for(c=0;d>c;c++)if(b.parsers[c].id.toLowerCase()===a.toString().toLowerCase())return b.parsers[c];return!1},detectParserForColumn:function(c,d,e,f){for(var g,h,i,j=b.parsers.length,k=!1,l="",m=!0;""===l&&m;)e++,i=d[e],i&&50>e?i.className.indexOf(b.cssIgnoreRow)<0&&(k=d[e].cells[f],l=b.getElementText(c,k,f),h=a(k),c.debug&&console.log("Checking if value was empty on row "+e+", column: "+f+': "'+l+'"')):m=!1;for(;--j>=0;)if(g=b.parsers[j],g&&"text"!==g.id&&g.is&&g.is(l,c.table,k,h))return g;return b.getParserById("text")},getElementText:function(c,d,e){if(!d)return"";var f,g=c.textExtraction||"",h=d.jquery?d:a(d);return"string"==typeof g?"basic"===g&&"undefined"!=typeof(f=h.attr(c.textAttribute))?a.trim(f):a.trim(d.textContent||h.text()):"function"==typeof g?a.trim(g(h[0],c.table,e)):"function"==typeof(f=b.getColumnData(c.table,g,e))?a.trim(f(h[0],c.table,e)):a.trim(h[0].textContent||h.text())},getParsedText:function(a,c,d,e){"undefined"==typeof e&&(e=b.getElementText(a,c,d));var f=""+e,g=a.parsers[d],h=a.extractors[d];return g&&(h&&"function"==typeof h.format&&(e=h.format(e,a.table,c,d)),f="no-parser"===g.id?"":g.format(""+e,a.table,c,d),a.ignoreCase&&"string"==typeof f&&(f=f.toLowerCase())),f},buildCache:function(c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B=c.table,C=c.parsers;if(c.$tbodies=c.$table.children("tbody:not(."+c.cssInfoBlock+")"),l="undefined"==typeof e?c.$tbodies:e,c.cache={},c.totalRows=0,!C)return c.debug?console.warn("Warning: *Empty table!* Not building a cache"):"";for(c.debug&&(q=new Date),c.showProcessing&&b.isProcessing(B,!0),k=0;k<l.length;k++){for(u=[],f=c.cache[k]={normalized:[]},r=l[k]&&l[k].rows.length||0,i=0;r>i;++i)if(s={child:[],raw:[]},m=a(l[k].rows[i]),n=[],m.hasClass(c.cssChildRow)&&0!==i)for(z=f.normalized.length-1,t=f.normalized[z][c.columns],t.$row=t.$row.add(m),m.prev().hasClass(c.cssChildRow)||m.prev().addClass(b.css.cssHasChild),o=m.children("th, td"),z=t.child.length,t.child[z]=[],w=0,y=c.columns,j=0;y>j;j++)p=o[j],p&&(t.child[z][j]=b.getParsedText(c,p,j),v=o[j].colSpan-1,v>0&&(w+=v,y+=v)),w++;else{for(s.$row=m,s.order=i,w=0,y=c.columns,j=0;y>j;++j){if(p=m[0].cells[j],p&&w<c.columns&&(x="undefined"!=typeof C[w],!x&&c.debug&&console.warn("No parser found for row: "+i+", column: "+j+'; cell containing: "'+a(p).text()+'"; does it have a header?'),g=b.getElementText(c,p,w),s.raw[w]=g,h=b.getParsedText(c,p,w,g),n[w]=h,x&&"numeric"===(C[w].type||"").toLowerCase()&&(u[w]=Math.max(Math.abs(h)||0,u[w]||0)),v=p.colSpan-1,v>0)){for(A=0;v>=A;)s.raw[w+A]=c.duplicateSpan||0===A?g:"",n[w+A]=c.duplicateSpan||0===A?g:"",A++;w+=v,y+=v}w++}n[c.columns]=s,f.normalized.push(n)}f.colMax=u,c.totalRows+=f.normalized.length}if(c.showProcessing&&b.isProcessing(B),c.debug){for(z=Math.min(5,c.cache[0].normalized.length),console[console.group?"group":"log"]("Building cache for "+c.totalRows+" rows (showing "+z+" rows in log)"+b.benchmark(q)),g={},j=0;j<c.columns;j++)for(w=0;z>w;w++)g["row: "+w]||(g["row: "+w]={}),g["row: "+w][c.$headerIndexed[j].text()]=c.cache[0].normalized[w][j];console[console.table?"table":"log"](g),console.groupEnd&&console.groupEnd()}a.isFunction(d)&&d(B)},getColumnText:function(c,d,e,f){c=a(c)[0];var g,h,i,j,k,l,m,n,o,p,q="function"==typeof e,r="all"===d,s={raw:[],parsed:[],$cell:[]},t=c.config;if(!b.isEmptyObject(t)){for(k=t.$tbodies.length,g=0;k>g;g++)for(i=t.cache[g].normalized,l=i.length,h=0;l>h;h++)j=i[h],(!f||j[t.columns].$row.is(f))&&(p=!0,n=r?j.slice(0,t.columns):j[d],j=j[t.columns],m=r?j.raw:j.raw[d],o=r?j.$row.children():j.$row.children().eq(d),q&&(p=e({tbodyIndex:g,rowIndex:h,parsed:n,raw:m,$row:j.$row,$cell:o})),p!==!1&&(s.parsed.push(n),s.raw.push(m),s.$cell.push(o)));return s}t.debug&&console.warn("No cache found - aborting getColumnText function!")},setHeadersCss:function(c){var d,e,f,g=c.sortList,h=g.length,i=b.css.sortNone+" "+c.cssNone,j=[b.css.sortAsc+" "+c.cssAsc,b.css.sortDesc+" "+c.cssDesc],k=[c.cssIconAsc,c.cssIconDesc,c.cssIconNone],l=["ascending","descending"],m=c.$table.find("tfoot tr").children("td, th").add(a(c.namespace+"_extra_headers")).removeClass(j.join(" "));for(c.$headers.removeClass(j.join(" ")).addClass(i).attr("aria-sort","none").find("."+b.css.icon).removeClass(k.join(" ")).addClass(k[2]),e=0;h>e;e++)if(2!==g[e][1]&&(d=c.$headers.filter(function(a){for(var d=!0,e=c.$headers.eq(a),f=parseInt(e.attr("data-column"),10),g=f+c.$headers[a].colSpan;g>f;f++)d=d?d||b.isValueInArray(f,c.sortList)>-1:!1;return d}),d=d.not(".sorter-false").filter('[data-column="'+g[e][0]+'"]'+(1===h?":last":"")),d.length)){for(f=0;f<d.length;f++)d[f].sortDisabled||d.eq(f).removeClass(i).addClass(j[g[e][1]]).attr("aria-sort",l[g[e][1]]).find("."+b.css.icon).removeClass(k[2]).addClass(k[g[e][1]]);m.length&&m.filter('[data-column="'+g[e][0]+'"]').removeClass(i).addClass(j[g[e][1]])}for(h=c.$headers.length,e=0;h>e;e++)b.setColumnAriaLabel(c,c.$headers.eq(e))},setColumnAriaLabel:function(c,d,e){if(d.length){var f=parseInt(d.attr("data-column"),10),g=d.hasClass(b.css.sortAsc)?"sortAsc":d.hasClass(b.css.sortDesc)?"sortDesc":"sortNone",h=a.trim(d.text())+": "+b.language[g];d.hasClass("sorter-false")||e===!1?h+=b.language.sortDisabled:(e=c.sortVars[f].order[(c.sortVars[f].count+1)%(c.sortReset?3:2)],h+=b.language[0===e?"nextAsc":1===e?"nextDesc":"nextNone"]),d.attr("aria-label",h)}},updateHeader:function(a){var c,d,e,f,g=a.table,h=a.$headers.length;for(c=0;h>c;c++)e=a.$headers.eq(c),f=b.getColumnData(g,a.headers,c,!0),d="false"===b.getData(e,f,"sorter")||"false"===b.getData(e,f,"parser"),b.setColumnSort(a,e,d)},setColumnSort:function(a,b,c){var d=a.table.id;b[0].sortDisabled=c,b[c?"addClass":"removeClass"]("sorter-false").attr("aria-disabled",""+c),a.tabIndex&&(c?b.removeAttr("tabindex"):b.attr("tabindex","0")),d&&(c?b.removeAttr("aria-controls"):b.attr("aria-controls",d))},updateHeaderSortCount:function(c,d){var e,f,g,h,i,j,k,l,m=d||c.sortList,n=m.length;for(c.sortList=[],h=0;n>h;h++)if(k=m[h],e=parseInt(k[0],10),e<c.columns){switch(c.sortVars[e].order||(l=c.sortVars[e].order=b.getOrder(c.sortInitialOrder)?[1,0,2]:[0,1,2],c.sortVars[e].count=0),l=c.sortVars[e].order,f=(""+k[1]).match(/^(1|d|s|o|n)/),f=f?f[0]:""){case"1":case"d":f=1;break;case"s":f=i||0;break;case"o":j=l[(i||0)%(c.sortReset?3:2)],f=0===j?1:1===j?0:2;break;case"n":f=l[++c.sortVars[e].count%(c.sortReset?3:2)];break;default:f=0}i=0===h?f:i,g=[e,parseInt(f,10)||0],c.sortList.push(g),f=a.inArray(g[1],l),c.sortVars[e].count=f>=0?f:g[1]%(c.sortReset?3:2)}},updateAll:function(a,c,d){var e=a.table;e.isUpdating=!0,b.refreshWidgets(e,!0,!0),b.buildHeaders(a),b.bindEvents(e,a.$headers,!0),b.bindMethods(a),b.commonUpdate(a,c,d)},update:function(a,c,d){var e=a.table;e.isUpdating=!0,b.updateHeader(a),b.commonUpdate(a,c,d)},updateHeaders:function(a,c){a.table.isUpdating=!0,b.buildHeaders(a),b.bindEvents(a.table,a.$headers,!0),b.resortComplete(a,c)},updateCell:function(c,d,e,f){if(b.isEmptyObject(c.cache))return b.updateHeader(c),void b.commonUpdate(c,e,f);c.table.isUpdating=!0,c.$table.find(c.selectorRemove).remove();var g,h,i,j,k,l,m=c.$tbodies,n=a(d),o=m.index(a.fn.closest?n.closest("tbody"):n.parents("tbody").filter(":first")),p=c.cache[o],q=a.fn.closest?n.closest("tr"):n.parents("tr").filter(":first");if(d=n[0],m.length&&o>=0){if(i=m.eq(o).find("tr").index(q),k=p.normalized[i],l=q[0].cells.length,l!==c.columns)for(j=0,g=!1,h=0;l>h;h++)g||q[0].cells[h]===d?g=!0:j+=q[0].cells[h].colSpan;else j=n.index();g=b.getElementText(c,d,j),k[c.columns].raw[j]=g,g=b.getParsedText(c,d,j,g),k[j]=g,k[c.columns].$row=q,"numeric"===(c.parsers[j].type||"").toLowerCase()&&(p.colMax[j]=Math.max(Math.abs(g)||0,p.colMax[j]||0)),g="undefined"!==e?e:c.resort,g!==!1?b.checkResort(c,g,f):b.resortComplete(c,f)}else c.debug&&console.error("updateCell aborted, tbody missing or not within the indicated table"),c.table.isUpdating=!1},addRows:function(c,d,e,f){var g,h,i,j,k,l,m,n,o,p,q,r,s="string"==typeof d&&1===c.$tbodies.length&&/<tr/.test(d||""),t=c.table;if(s)d=a(d),c.$tbodies.append(d);else if(!(d&&d instanceof jQuery&&(a.fn.closest?d.closest("table")[0]:d.parents("table")[0])===c.table))return c.debug&&console.error("addRows method requires (1) a jQuery selector reference to rows that have already been added to the table, or (2) row HTML string to be added to a table with only one tbody"),!1;if(t.isUpdating=!0,b.isEmptyObject(c.cache))b.updateHeader(c),b.commonUpdate(c,e,f);else{for(k=d.filter("tr").attr("role","row").length,i=c.$tbodies.index(d.parents("tbody").filter(":first")),c.parsers&&c.parsers.length||b.setupParsers(c),j=0;k>j;j++){for(n=0,m=d[j].cells.length,p=[],o={child:[],raw:[],$row:d.eq(j),order:c.cache[i].normalized.length},l=0;m>l;l++)q=d[j].cells[l],g=b.getElementText(c,q,n),o.raw[n]=g,h=b.getParsedText(c,q,n,g),p[n]=h,"numeric"===(c.parsers[n].type||"").toLowerCase()&&(c.cache[i].colMax[n]=Math.max(Math.abs(h)||0,c.cache[i].colMax[n]||0)),r=q.colSpan-1,r>0&&(n+=r),n++;p[c.columns]=o,c.cache[i].normalized.push(p)}b.checkResort(c,e,f)}},updateCache:function(a,c,d){a.parsers&&a.parsers.length||b.setupParsers(a,d),b.buildCache(a,c,d)},appendCache:function(a,c){var d,e,f,g,h,i,j,k=a.table,l=a.widgetOptions,m=a.$tbodies,n=[],o=a.cache;if(b.isEmptyObject(o))return a.appender?a.appender(k,n):k.isUpdating?a.$table.triggerHandler("updateComplete",k):"";for(a.debug&&(j=new Date),i=0;i<m.length;i++)if(f=m.eq(i),f.length){for(g=b.processTbody(k,f,!0),d=o[i].normalized,e=d.length,h=0;e>h;h++)n.push(d[h][a.columns].$row),a.appender&&(!a.pager||a.pager.removeRows&&l.pager_removeRows||a.pager.ajax)||g.append(d[h][a.columns].$row);b.processTbody(k,g,!1)}a.appender&&a.appender(k,n),a.debug&&console.log("Rebuilt table"+b.benchmark(j)),c||a.appender||b.applyWidget(k),k.isUpdating&&a.$table.triggerHandler("updateComplete",k)},commonUpdate:function(a,c,d){a.$table.find(a.selectorRemove).remove(),b.setupParsers(a),b.buildCache(a),b.checkResort(a,c,d)},initSort:function(c,d,e){if(c.table.isUpdating)return setTimeout(function(){b.initSort(c,d,e)},50);var f,g,h,i,j,k,l,m=!e[c.sortMultiSortKey],n=c.table,o=c.$headers.length,p=parseInt(a(d).attr("data-column"),10),q=c.sortVars[p].order;if(c.$table.triggerHandler("sortStart",n),c.sortVars[p].count=e[c.sortResetKey]?2:(c.sortVars[p].count+1)%(c.sortReset?3:2),c.sortRestart)for(h=0;o>h;h++)l=c.$headers.eq(h),k=parseInt(l.attr("data-column"),10),p!==k&&(m||l.hasClass(b.css.sortNone))&&(c.sortVars[k].count=-1);if(m){if(c.sortList=[],c.last.sortList=[],null!==c.sortForce)for(f=c.sortForce,g=0;g<f.length;g++)f[g][0]!==p&&c.sortList.push(f[g]);if(i=q[c.sortVars[p].count],2>i&&(c.sortList.push([p,i]),d.colSpan>1))for(g=1;g<d.colSpan;g++)c.sortList.push([p+g,i]),c.sortVars[p+g].count=a.inArray(i,q)}else if(c.sortList=a.extend([],c.last.sortList),b.isValueInArray(p,c.sortList)>=0)for(g=0;g<c.sortList.length;g++)k=c.sortList[g],k[0]===p&&(k[1]=q[c.sortVars[p].count],2===k[1]&&(c.sortList.splice(g,1),c.sortVars[p].count=-1));else if(i=q[c.sortVars[p].count],2>i&&(c.sortList.push([p,i]),d.colSpan>1))for(g=1;g<d.colSpan;g++)c.sortList.push([p+g,i]),c.sortVars[p+g].count=a.inArray(i,q);if(c.last.sortList=a.extend([],c.sortList),c.sortList.length&&c.sortAppend&&(f=a.isArray(c.sortAppend)?c.sortAppend:c.sortAppend[c.sortList[0][0]],!b.isEmptyObject(f)))for(g=0;g<f.length;g++)if(f[g][0]!==p&&b.isValueInArray(f[g][0],c.sortList)<0){if(i=f[g][1],j=(""+i).match(/^(a|d|s|o|n)/))switch(k=c.sortList[0][1],j[0]){case"d":i=1;break;case"s":i=k;break;case"o":i=0===k?1:0;break;case"n":i=(k+1)%(c.sortReset?3:2);break;default:i=0}c.sortList.push([f[g][0],i])}c.$table.triggerHandler("sortBegin",n),setTimeout(function(){b.setHeadersCss(c),b.multisort(c),b.appendCache(c),c.$table.triggerHandler("sortBeforeEnd",n),c.$table.triggerHandler("sortEnd",n)},1)},multisort:function(a){var c,d,e,f,g=a.table,h=0,i=a.textSorter||"",j=a.sortList,k=j.length,l=a.$tbodies.length;if(!a.serverSideSorting&&!b.isEmptyObject(a.cache)){for(a.debug&&(d=new Date),c=0;l>c;c++)e=a.cache[c].colMax,f=a.cache[c].normalized,f.sort(function(c,d){var f,l,m,n,o,p,q;for(f=0;k>f;f++){if(m=j[f][0],n=j[f][1],h=0===n,a.sortStable&&c[m]===d[m]&&1===k)return c[a.columns].order-d[a.columns].order;if(l=/n/i.test(b.getSortType(a.parsers,m)),l&&a.strings[m]?(l="boolean"==typeof b.string[a.strings[m]]?(h?1:-1)*(b.string[a.strings[m]]?-1:1):a.strings[m]?b.string[a.strings[m]]||0:0,o=a.numberSorter?a.numberSorter(c[m],d[m],h,e[m],g):b["sortNumeric"+(h?"Asc":"Desc")](c[m],d[m],l,e[m],m,a)):(p=h?c:d,q=h?d:c,o="function"==typeof i?i(p[m],q[m],h,m,g):"object"==typeof i&&i.hasOwnProperty(m)?i[m](p[m],q[m],h,m,g):b["sortNatural"+(h?"Asc":"Desc")](c[m],d[m],m,a)),o)return o}return c[a.columns].order-d[a.columns].order});a.debug&&console.log("Applying sort "+j.toString()+b.benchmark(d))}},resortComplete:function(b,c){b.table.isUpdating&&b.$table.triggerHandler("updateComplete",b.table),a.isFunction(c)&&c(b.table)},checkResort:function(c,d,e){var f=a.isArray(d)?d:c.sortList,g="undefined"==typeof d?c.resort:d;g===!1||c.serverSideSorting||c.table.isProcessing?(b.resortComplete(c,e),b.applyWidget(c.table,!1)):f.length?b.sortOn(c,f,function(){b.resortComplete(c,e)},!0):b.sortReset(c,function(){b.resortComplete(c,e),b.applyWidget(c.table,!1)})},sortOn:function(c,d,e,f){var g=c.table;c.$table.triggerHandler("sortStart",g),b.updateHeaderSortCount(c,d),b.setHeadersCss(c),c.delayInit&&b.isEmptyObject(c.cache)&&b.buildCache(c),c.$table.triggerHandler("sortBegin",g),b.multisort(c),b.appendCache(c,f),c.$table.triggerHandler("sortBeforeEnd",g),c.$table.triggerHandler("sortEnd",g),b.applyWidget(g),a.isFunction(e)&&e(g)},sortReset:function(c,d){c.sortList=[],b.setHeadersCss(c),b.multisort(c),b.appendCache(c),a.isFunction(d)&&d(c.table)},getSortType:function(a,b){return a&&a[b]?a[b].type||"":""},getOrder:function(a){return/^d/i.test(a)||1===a},sortNatural:function(a,c){if(a===c)return 0;var d,e,f,g,h,i,j=b.regex;if(j.hex.test(c)){if(d=parseInt(a.match(j.hex),16),e=parseInt(c.match(j.hex),16),e>d)return-1;if(d>e)return 1}for(d=a.replace(j.chunk,"\\0$1\\0").replace(j.chunks,"").split("\\0"),e=c.replace(j.chunk,"\\0$1\\0").replace(j.chunks,"").split("\\0"),i=Math.max(d.length,e.length),h=0;i>h;h++){if(f=isNaN(d[h])?d[h]||0:parseFloat(d[h])||0,g=isNaN(e[h])?e[h]||0:parseFloat(e[h])||0,isNaN(f)!==isNaN(g))return isNaN(f)?1:-1;if(typeof f!=typeof g&&(f+="",g+=""),g>f)return-1;if(f>g)return 1}return 0},sortNaturalAsc:function(a,c,d,e){if(a===c)return 0;var f=b.string[e.empties[d]||e.emptyTo];return""===a&&0!==f?"boolean"==typeof f?f?-1:1:-f||-1:""===c&&0!==f?"boolean"==typeof f?f?1:-1:f||1:b.sortNatural(a,c)},sortNaturalDesc:function(a,c,d,e){if(a===c)return 0;var f=b.string[e.empties[d]||e.emptyTo];return""===a&&0!==f?"boolean"==typeof f?f?-1:1:f||1:""===c&&0!==f?"boolean"==typeof f?f?1:-1:-f||-1:b.sortNatural(c,a)},sortText:function(a,b){return a>b?1:b>a?-1:0},getTextValue:function(a,b,c){if(c){var d,e=a?a.length:0,f=c+b;for(d=0;e>d;d++)f+=a.charCodeAt(d);return b*f}return 0},sortNumericAsc:function(a,c,d,e,f,g){if(a===c)return 0;var h=b.string[g.empties[f]||g.emptyTo];return""===a&&0!==h?"boolean"==typeof h?h?-1:1:-h||-1:""===c&&0!==h?"boolean"==typeof h?h?1:-1:h||1:(isNaN(a)&&(a=b.getTextValue(a,d,e)),isNaN(c)&&(c=b.getTextValue(c,d,e)),a-c)},sortNumericDesc:function(a,c,d,e,f,g){if(a===c)return 0;var h=b.string[g.empties[f]||g.emptyTo];return""===a&&0!==h?"boolean"==typeof h?h?-1:1:h||1:""===c&&0!==h?"boolean"==typeof h?h?1:-1:-h||-1:(isNaN(a)&&(a=b.getTextValue(a,d,e)),isNaN(c)&&(c=b.getTextValue(c,d,e)),c-a)},sortNumeric:function(a,b){return a-b},addWidget:function(a){b.widgets.push(a)},hasWidget:function(b,c){return b=a(b),b.length&&b[0].config&&b[0].config.widgetInit[c]||!1},getWidgetById:function(a){var c,d,e=b.widgets.length;for(c=0;e>c;c++)if(d=b.widgets[c],d&&d.id&&d.id.toLowerCase()===a.toLowerCase())return d},applyWidgetOptions:function(c){var d,e,f=c.config,g=f.widgets.length;if(g)for(d=0;g>d;d++)e=b.getWidgetById(f.widgets[d]),e&&e.options&&(f.widgetOptions=a.extend(!0,{},e.options,f.widgetOptions))},addWidgetFromClass:function(a){var c,d,e=a.config,f="^"+e.widgetClass.replace(b.regex.templateName,"(\\S+)+")+"$",g=new RegExp(f,"g"),h=(a.className||"").split(b.regex.spaces);if(h.length)for(c=h.length,d=0;c>d;d++)h[d].match(g)&&e.widgets.push(h[d].replace(g,"$1"))},applyWidgetId:function(c,d,e){c=a(c)[0];var f,g,h,i=c.config,j=i.widgetOptions,k=b.getWidgetById(d);k&&(h=k.id,f=!1,a.inArray(h,i.widgets)<0&&i.widgets.push(h),i.debug&&(g=new Date),(e||!i.widgetInit[h])&&(i.widgetInit[h]=!0,c.hasInitialized&&b.applyWidgetOptions(c),"function"==typeof k.init&&(f=!0,i.debug&&console[console.group?"group":"log"]("Initializing "+h+" widget"),k.init(c,k,i,j))),e||"function"!=typeof k.format||(f=!0,i.debug&&console[console.group?"group":"log"]("Updating "+h+" widget"),k.format(c,i,j,!1)),i.debug&&f&&(console.log("Completed "+(e?"initializing ":"applying ")+h+" widget"+b.benchmark(g)),console.groupEnd&&console.groupEnd()))},applyWidget:function(c,d,e){c=a(c)[0];var f,g,h,i,j,k=c.config,l=[];if(d===!1||!c.hasInitialized||!c.isApplyingWidgets&&!c.isUpdating){if(k.debug&&(j=new Date),b.addWidgetFromClass(c),clearTimeout(k.timerReady),k.widgets.length){for(c.isApplyingWidgets=!0,k.widgets=a.grep(k.widgets,function(b,c){return a.inArray(b,k.widgets)===c}),h=k.widgets||[],g=h.length,f=0;g>f;f++)i=b.getWidgetById(h[f]),i&&i.id&&(i.priority||(i.priority=10),l[f]=i);for(l.sort(function(a,b){return a.priority<b.priority?-1:a.priority===b.priority?0:1}),g=l.length,k.debug&&console[console.group?"group":"log"]("Start "+(d?"initializing":"applying")+" widgets"),f=0;g>f;f++)i=l[f],i&&i.id&&b.applyWidgetId(c,i.id,d);k.debug&&console.groupEnd&&console.groupEnd(),d||"function"!=typeof e||e(c)}k.timerReady=setTimeout(function(){c.isApplyingWidgets=!1,a.data(c,"lastWidgetApplication",new Date),k.$table.triggerHandler("tablesorter-ready")},10),k.debug&&(i=k.widgets.length,console.log("Completed "+(d===!0?"initializing ":"applying ")+i+" widget"+(1!==i?"s":"")+b.benchmark(j)))}},removeWidget:function(c,d,e){c=a(c)[0];var f,g,h,i,j=c.config;if(d===!0)for(d=[],i=b.widgets.length,h=0;i>h;h++)g=b.widgets[h],g&&g.id&&d.push(g.id);else d=(a.isArray(d)?d.join(","):d||"").toLowerCase().split(/[\s,]+/);for(i=d.length,f=0;i>f;f++)g=b.getWidgetById(d[f]),h=a.inArray(d[f],j.widgets),h>=0&&e!==!0&&j.widgets.splice(h,1),g&&g.remove&&(j.debug&&console.log((e?"Refreshing":"Removing")+' "'+d[f]+'" widget'),g.remove(c,j,j.widgetOptions,e),j.widgetInit[d[f]]=!1)},refreshWidgets:function(c,d,e){c=a(c)[0];var f,g,h=c.config,i=h.widgets,j=b.widgets,k=j.length,l=[],m=function(b){a(b).triggerHandler("refreshComplete")};for(f=0;k>f;f++)g=j[f],g&&g.id&&(d||a.inArray(g.id,i)<0)&&l.push(g.id);b.removeWidget(c,l.join(","),!0),e!==!0?(b.applyWidget(c,d||!1,m),d&&b.applyWidget(c,!1,m)):m(c)},benchmark:function(a){return" ( "+((new Date).getTime()-a.getTime())+"ms )"},log:function(){console.log(arguments)},isEmptyObject:function(a){for(var b in a)return!1;return!0},isValueInArray:function(a,b){var c,d=b&&b.length||0;for(c=0;d>c;c++)if(b[c][0]===a)return c;return-1},formatFloat:function(c,d){if("string"!=typeof c||""===c)return c;var e,f=d&&d.config?d.config.usNumberFormat!==!1:"undefined"!=typeof d?d:!0;return c=f?c.replace(b.regex.comma,""):c.replace(b.regex.digitNonUS,"").replace(b.regex.comma,"."),b.regex.digitNegativeTest.test(c)&&(c=c.replace(b.regex.digitNegativeReplace,"-$1")),e=parseFloat(c),isNaN(e)?a.trim(c):e},isDigit:function(a){return isNaN(a)?b.regex.digitTest.test(a.toString().replace(b.regex.digitReplace,"")):""!==a},computeColumnIndex:function(b,c){var d,e,f,g,h,i,j,k,l,m,n=c&&c.columns||0,o=[],p=new Array(n);for(d=0;d<b.length;d++)for(i=b[d].cells,e=0;e<i.length;e++){for(h=i[e],j=h.parentNode.rowIndex,k=h.rowSpan||1,l=h.colSpan||1,"undefined"==typeof o[j]&&(o[j]=[]),f=0;f<o[j].length+1;f++)if("undefined"==typeof o[j][f]){m=f;break}for(n&&h.cellIndex===m||(h.setAttribute?h.setAttribute("data-column",m):a(h).attr("data-column",m)),f=j;j+k>f;f++)for("undefined"==typeof o[f]&&(o[f]=[]),
p=o[f],g=m;m+l>g;g++)p[g]="x"}return p.length},fixColumnWidth:function(c){c=a(c)[0];var d,e,f,g,h,i=c.config,j=i.$table.children("colgroup");if(j.length&&j.hasClass(b.css.colgroup)&&j.remove(),i.widthFixed&&0===i.$table.children("colgroup").length){for(j=a('<colgroup class="'+b.css.colgroup+'">'),d=i.$table.width(),f=i.$tbodies.find("tr:first").children(":visible"),g=f.length,h=0;g>h;h++)e=parseInt(f.eq(h).width()/d*1e3,10)/10+"%",j.append(a("<col>").css("width",e));i.$table.prepend(j)}},getData:function(b,c,d){var e,f,g="",h=a(b);return h.length?(e=a.metadata?h.metadata():!1,f=" "+(h.attr("class")||""),"undefined"!=typeof h.data(d)||"undefined"!=typeof h.data(d.toLowerCase())?g+=h.data(d)||h.data(d.toLowerCase()):e&&"undefined"!=typeof e[d]?g+=e[d]:c&&"undefined"!=typeof c[d]?g+=c[d]:" "!==f&&f.match(" "+d+"-")&&(g=f.match(new RegExp("\\s"+d+"-([\\w-]+)"))[1]||""),a.trim(g)):""},getColumnData:function(b,c,d,e,f){if("undefined"!=typeof c&&null!==c){b=a(b)[0];var g,h,i=b.config,j=f||i.$headers,k=i.$headerIndexed&&i.$headerIndexed[d]||j.filter('[data-column="'+d+'"]:last');if(c[d])return e?c[d]:c[j.index(k)];for(h in c)if("string"==typeof h&&(g=k.filter(h).add(k.find(h)),g.length))return c[h]}},isProcessing:function(c,d,e){c=a(c);var f=c[0].config,g=e||c.find("."+b.css.header);d?("undefined"!=typeof e&&f.sortList.length>0&&(g=g.filter(function(){return this.sortDisabled?!1:b.isValueInArray(parseFloat(a(this).attr("data-column")),f.sortList)>=0})),c.add(g).addClass(b.css.processing+" "+f.cssProcessing)):c.add(g).removeClass(b.css.processing+" "+f.cssProcessing)},processTbody:function(b,c,d){if(b=a(b)[0],d)return b.isProcessing=!0,c.before('<colgroup class="tablesorter-savemyplace"/>'),a.fn.detach?c.detach():c.remove();var e=a(b).find("colgroup.tablesorter-savemyplace");c.insertAfter(e),e.remove(),b.isProcessing=!1},clearTableBody:function(b){a(b)[0].config.$tbodies.children().detach()},characterEquivalents:{a:"áàâãäąå",A:"ÁÀÂÃÄĄÅ",c:"çćč",C:"ÇĆČ",e:"éèêëěę",E:"ÉÈÊËĚĘ",i:"íìİîïı",I:"ÍÌİÎÏ",o:"óòôõöō",O:"ÓÒÔÕÖŌ",ss:"ß",SS:"ẞ",u:"úùûüů",U:"ÚÙÛÜŮ"},replaceAccents:function(a){var c,d="[",e=b.characterEquivalents;if(!b.characterRegex){b.characterRegexArray={};for(c in e)"string"==typeof c&&(d+=e[c],b.characterRegexArray[c]=new RegExp("["+e[c]+"]","g"));b.characterRegex=new RegExp(d+"]")}if(b.characterRegex.test(a))for(c in e)"string"==typeof c&&(a=a.replace(b.characterRegexArray[c],c));return a},restoreHeaders:function(c){var d,e,f=a(c)[0].config,g=f.$table.find(f.selectorHeaders),h=g.length;for(d=0;h>d;d++)e=g.eq(d),e.find("."+b.css.headerIn).length&&e.html(f.headerContent[d])},destroy:function(c,d,e){if(c=a(c)[0],c.hasInitialized){b.removeWidget(c,!0,!1);var f,g=a(c),h=c.config,i=h.debug,j=g.find("thead:first"),k=j.find("tr."+b.css.headerRow).removeClass(b.css.headerRow+" "+h.cssHeaderRow),l=g.find("tfoot:first > tr").children("th, td");d===!1&&a.inArray("uitheme",h.widgets)>=0&&(g.triggerHandler("applyWidgetId",["uitheme"]),g.triggerHandler("applyWidgetId",["zebra"])),j.find("tr").not(k).remove(),f="sortReset update updateRows updateAll updateHeaders updateCell addRows updateComplete sorton appendCache updateCache applyWidgetId applyWidgets refreshWidgets removeWidget destroy mouseup mouseleave "+"keypress sortBegin sortEnd resetToLoadState ".split(" ").join(h.namespace+" "),g.removeData("tablesorter").unbind(f.replace(b.regex.spaces," ")),h.$headers.add(l).removeClass([b.css.header,h.cssHeader,h.cssAsc,h.cssDesc,b.css.sortAsc,b.css.sortDesc,b.css.sortNone].join(" ")).removeAttr("data-column").removeAttr("aria-label").attr("aria-disabled","true"),k.find(h.selectorSort).unbind("mousedown mouseup keypress ".split(" ").join(h.namespace+" ").replace(b.regex.spaces," ")),b.restoreHeaders(c),g.toggleClass(b.css.table+" "+h.tableClass+" tablesorter-"+h.theme,d===!1),c.hasInitialized=!1,delete c.config.cache,"function"==typeof e&&e(c),i&&console.log("tablesorter has been removed")}}};a.fn.tablesorter=function(c){return this.each(function(){var d=this,e=a.extend(!0,{},b.defaults,c,b.instanceMethods);e.originalSettings=c,!d.hasInitialized&&b.buildTable&&"TABLE"!==this.nodeName?b.buildTable(d,e):b.setup(d,e)})},window.console&&window.console.log||(b.logs=[],console={},console.log=console.warn=console.error=console.table=function(){var a=arguments.length>1?arguments:arguments[0];b.logs.push({date:Date.now(),log:a})}),b.addParser({id:"no-parser",is:function(){return!1},format:function(){return""},type:"text"}),b.addParser({id:"text",is:function(){return!0},format:function(c,d){var e=d.config;return c&&(c=a.trim(e.ignoreCase?c.toLocaleLowerCase():c),c=e.sortLocaleCompare?b.replaceAccents(c):c),c},type:"text"}),b.regex.nondigit=/[^\w,. \-()]/g,b.addParser({id:"digit",is:function(a){return b.isDigit(a)},format:function(c,d){var e=b.formatFloat((c||"").replace(b.regex.nondigit,""),d);return c&&"number"==typeof e?e:c?a.trim(c&&d.config.ignoreCase?c.toLocaleLowerCase():c):c},type:"numeric"}),b.regex.currencyReplace=/[+\-,. ]/g,b.regex.currencyTest=/^\(?\d+[\u00a3$\u20ac\u00a4\u00a5\u00a2?.]|[\u00a3$\u20ac\u00a4\u00a5\u00a2?.]\d+\)?$/,b.addParser({id:"currency",is:function(a){return a=(a||"").replace(b.regex.currencyReplace,""),b.regex.currencyTest.test(a)},format:function(c,d){var e=b.formatFloat((c||"").replace(b.regex.nondigit,""),d);return c&&"number"==typeof e?e:c?a.trim(c&&d.config.ignoreCase?c.toLocaleLowerCase():c):c},type:"numeric"}),b.regex.urlProtocolTest=/^(https?|ftp|file):\/\//,b.regex.urlProtocolReplace=/(https?|ftp|file):\/\//,b.addParser({id:"url",is:function(a){return b.regex.urlProtocolTest.test(a)},format:function(c){return c?a.trim(c.replace(b.regex.urlProtocolReplace,"")):c},parsed:!0,type:"text"}),b.regex.dash=/-/g,b.regex.isoDate=/^\d{4}[\/\-]\d{1,2}[\/\-]\d{1,2}/,b.addParser({id:"isoDate",is:function(a){return b.regex.isoDate.test(a)},format:function(a,c){var d=a?new Date(a.replace(b.regex.dash,"/")):a;return d instanceof Date&&isFinite(d)?d.getTime():a},type:"numeric"}),b.regex.percent=/%/g,b.regex.percentTest=/(\d\s*?%|%\s*?\d)/,b.addParser({id:"percent",is:function(a){return b.regex.percentTest.test(a)&&a.length<15},format:function(a,c){return a?b.formatFloat(a.replace(b.regex.percent,""),c):a},type:"numeric"}),b.addParser({id:"image",is:function(a,b,c,d){return d.find("img").length>0},format:function(b,c,d){return a(d).find("img").attr(c.config.imgAttr||"alt")||b},parsed:!0,type:"text"}),b.regex.dateReplace=/(\S)([AP]M)$/i,b.regex.usLongDateTest1=/^[A-Z]{3,10}\.?\s+\d{1,2},?\s+(\d{4})(\s+\d{1,2}:\d{2}(:\d{2})?(\s+[AP]M)?)?$/i,b.regex.usLongDateTest2=/^\d{1,2}\s+[A-Z]{3,10}\s+\d{4}/i,b.addParser({id:"usLongDate",is:function(a){return b.regex.usLongDateTest1.test(a)||b.regex.usLongDateTest2.test(a)},format:function(a,c){var d=a?new Date(a.replace(b.regex.dateReplace,"$1 $2")):a;return d instanceof Date&&isFinite(d)?d.getTime():a},type:"numeric"}),b.regex.shortDateTest=/(^\d{1,2}[\/\s]\d{1,2}[\/\s]\d{4})|(^\d{4}[\/\s]\d{1,2}[\/\s]\d{1,2})/,b.regex.shortDateReplace=/[\-.,]/g,b.regex.shortDateXXY=/(\d{1,2})[\/\s](\d{1,2})[\/\s](\d{4})/,b.regex.shortDateYMD=/(\d{4})[\/\s](\d{1,2})[\/\s](\d{1,2})/,b.convertFormat=function(a,c){a=(a||"").replace(b.regex.spaces," ").replace(b.regex.shortDateReplace,"/"),"mmddyyyy"===c?a=a.replace(b.regex.shortDateXXY,"$3/$1/$2"):"ddmmyyyy"===c?a=a.replace(b.regex.shortDateXXY,"$3/$2/$1"):"yyyymmdd"===c&&(a=a.replace(b.regex.shortDateYMD,"$1/$2/$3"));var d=new Date(a);return d instanceof Date&&isFinite(d)?d.getTime():""},b.addParser({id:"shortDate",is:function(a){return a=(a||"").replace(b.regex.spaces," ").replace(b.regex.shortDateReplace,"/"),b.regex.shortDateTest.test(a)},format:function(a,c,d,e){if(a){var f=c.config,g=f.$headerIndexed[e],h=g.length&&g.data("dateFormat")||b.getData(g,b.getColumnData(c,f.headers,e),"dateFormat")||f.dateFormat;return g.length&&g.data("dateFormat",h),b.convertFormat(a,h)||a}return a},type:"numeric"}),b.regex.timeTest=/^([1-9]|1[0-2]):([0-5]\d)(\s[AP]M)$|^((?:[01]\d|[2][0-4]):[0-5]\d)$/i,b.regex.timeMatch=/([1-9]|1[0-2]):([0-5]\d)(\s[AP]M)|((?:[01]\d|[2][0-4]):[0-5]\d)/i,b.addParser({id:"time",is:function(a){return b.regex.timeTest.test(a)},format:function(a,c){var d,e=(a||"").match(b.regex.timeMatch),f=new Date(a),g=a&&(null!==e?e[0]:"00:00 AM"),h=g?new Date("2000/01/01 "+g.replace(b.regex.dateReplace,"$1 $2")):g;return h instanceof Date&&isFinite(h)?(d=f instanceof Date&&isFinite(f)?f.getTime():0,d?parseFloat(h.getTime()+"."+f.getTime()):h.getTime()):a},type:"numeric"}),b.addParser({id:"metadata",is:function(){return!1},format:function(b,c,d){var e=c.config,f=e.parserMetadataName?e.parserMetadataName:"sortValue";return a(d).metadata()[f]},type:"numeric"}),b.addWidget({id:"zebra",priority:90,format:function(b,c,d){var e,f,g,h,i,j,k,l=new RegExp(c.cssChildRow,"i"),m=c.$tbodies.add(a(c.namespace+"_extra_table").children("tbody:not(."+c.cssInfoBlock+")"));for(i=0;i<m.length;i++)for(g=0,e=m.eq(i).children("tr:visible").not(c.selectorRemove),k=e.length,j=0;k>j;j++)f=e.eq(j),l.test(f[0].className)||g++,h=g%2===0,f.removeClass(d.zebra[h?1:0]).addClass(d.zebra[h?0:1])},remove:function(a,c,d,e){if(!e){var f,g,h=c.$tbodies,i=(d.zebra||["even","odd"]).join(" ");for(f=0;f<h.length;f++)g=b.processTbody(a,h.eq(f),!0),g.children().removeClass(i),b.processTbody(a,g,!1)}}})}(jQuery),function(a,b,c){"use strict";var d=a.tablesorter||{};d.storage=function(d,e,f,g){d=a(d)[0];var h,i,j,k=!1,l={},m=d.config,n=m&&m.widgetOptions,o=g&&g.useSessionStorage||n&&n.storage_useSessionStorage?"sessionStorage":"localStorage",p=a(d),q=g&&g.id||p.attr(g&&g.group||n&&n.storage_group||"data-table-group")||n&&n.storage_tableId||d.id||a(".tablesorter").index(p),r=g&&g.url||p.attr(g&&g.page||n&&n.storage_page||"data-table-page")||n&&n.storage_fixedUrl||m&&m.fixedUrl||b.location.pathname;if(o in b)try{b[o].setItem("_tmptest","temp"),k=!0,b[o].removeItem("_tmptest")}catch(s){m&&m.debug&&console.warn(o+" is not supported in this browser")}return a.parseJSON&&(k?l=a.parseJSON(b[o][e]||"null")||{}:(i=c.cookie.split(/[;\s|=]/),h=a.inArray(e,i)+1,l=0!==h?a.parseJSON(i[h]||"null")||{}:{})),(f||""===f)&&b.JSON&&JSON.hasOwnProperty("stringify")?(l[r]||(l[r]={}),l[r][q]=f,k?b[o][e]=JSON.stringify(l):(j=new Date,j.setTime(j.getTime()+31536e6),c.cookie=e+"="+JSON.stringify(l).replace(/\"/g,'"')+"; expires="+j.toGMTString()+"; path=/"),void 0):l&&l[r]?l[r][q]:""}}(jQuery,window,document),function(a){"use strict";var b=a.tablesorter||{};b.themes={bootstrap:{table:"table table-bordered table-striped",caption:"caption",header:"bootstrap-header",sortNone:"",sortAsc:"",sortDesc:"",active:"",hover:"",icons:"",iconSortNone:"bootstrap-icon-unsorted",iconSortAsc:"icon-chevron-up glyphicon glyphicon-chevron-up",iconSortDesc:"icon-chevron-down glyphicon glyphicon-chevron-down",filterRow:"",footerRow:"",footerCells:"",even:"",odd:""},jui:{table:"ui-widget ui-widget-content ui-corner-all",caption:"ui-widget-content",header:"ui-widget-header ui-corner-all ui-state-default",sortNone:"",sortAsc:"",sortDesc:"",active:"ui-state-active",hover:"ui-state-hover",icons:"ui-icon",iconSortNone:"ui-icon-carat-2-n-s",iconSortAsc:"ui-icon-carat-1-n",iconSortDesc:"ui-icon-carat-1-s",filterRow:"",footerRow:"",footerCells:"",even:"ui-widget-content",odd:"ui-state-default"}},a.extend(b.css,{wrapper:"tablesorter-wrapper"}),b.addWidget({id:"uitheme",priority:10,format:function(c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r=b.themes,s=d.$table.add(a(d.namespace+"_extra_table")),t=d.$headers.add(a(d.namespace+"_extra_headers")),u=d.theme||"jui",v=r[u]||{},w=a.trim([v.sortNone,v.sortDesc,v.sortAsc,v.active].join(" ")),x=a.trim([v.iconSortNone,v.iconSortDesc,v.iconSortAsc].join(" "));for(d.debug&&(i=new Date),s.hasClass("tablesorter-"+u)&&d.theme===d.appliedTheme&&e.uitheme_applied||(e.uitheme_applied=!0,n=r[d.appliedTheme]||{},q=!a.isEmptyObject(n),o=q?[n.sortNone,n.sortDesc,n.sortAsc,n.active].join(" "):"",p=q?[n.iconSortNone,n.iconSortDesc,n.iconSortAsc].join(" "):"",q&&(e.zebra[0]=a.trim(" "+e.zebra[0].replace(" "+n.even,"")),e.zebra[1]=a.trim(" "+e.zebra[1].replace(" "+n.odd,"")),d.$tbodies.children().removeClass([n.even,n.odd].join(" "))),v.even&&(e.zebra[0]+=" "+v.even),v.odd&&(e.zebra[1]+=" "+v.odd),s.children("caption").removeClass(n.caption||"").addClass(v.caption),l=s.removeClass((d.appliedTheme?"tablesorter-"+(d.appliedTheme||""):"")+" "+(n.table||"")).addClass("tablesorter-"+u+" "+(v.table||"")).children("tfoot"),d.appliedTheme=d.theme,l.length&&l.children("tr").removeClass(n.footerRow||"").addClass(v.footerRow).children("th, td").removeClass(n.footerCells||"").addClass(v.footerCells),t.removeClass((q?[n.header,n.hover,o].join(" "):"")||"").addClass(v.header).not(".sorter-false").unbind("mouseenter.tsuitheme mouseleave.tsuitheme").bind("mouseenter.tsuitheme mouseleave.tsuitheme",function(b){a(this)["mouseenter"===b.type?"addClass":"removeClass"](v.hover||"")}),t.each(function(){var c=a(this);c.find("."+b.css.wrapper).length||c.wrapInner('<div class="'+b.css.wrapper+'" style="position:relative;height:100%;width:100%"></div>')}),d.cssIcon&&t.find("."+b.css.icon).removeClass(q?[n.icons,p].join(" "):"").addClass(v.icons||""),s.hasClass("hasFilters")&&s.children("thead").children("."+b.css.filterRow).removeClass(q?n.filterRow||"":"").addClass(v.filterRow||"")),f=0;f<d.columns;f++)j=d.$headers.add(a(d.namespace+"_extra_headers")).not(".sorter-false").filter('[data-column="'+f+'"]'),k=b.css.icon?j.find("."+b.css.icon):a(),m=t.not(".sorter-false").filter('[data-column="'+f+'"]:last'),m.length&&(j.removeClass(w),k.removeClass(x),m[0].sortDisabled?k.removeClass(v.icons||""):(g=v.sortNone,h=v.iconSortNone,m.hasClass(b.css.sortAsc)?(g=[v.sortAsc,v.active].join(" "),h=v.iconSortAsc):m.hasClass(b.css.sortDesc)&&(g=[v.sortDesc,v.active].join(" "),h=v.iconSortDesc),j.addClass(g),k.addClass(h||"")));d.debug&&console.log("Applying "+u+" theme"+b.benchmark(i))},remove:function(a,c,d,e){if(d.uitheme_applied){var f=c.$table,g=c.appliedTheme||"jui",h=b.themes[g]||b.themes.jui,i=f.children("thead").children(),j=h.sortNone+" "+h.sortDesc+" "+h.sortAsc,k=h.iconSortNone+" "+h.iconSortDesc+" "+h.iconSortAsc;f.removeClass("tablesorter-"+g+" "+h.table),d.uitheme_applied=!1,e||(f.find(b.css.header).removeClass(h.header),i.unbind("mouseenter.tsuitheme mouseleave.tsuitheme").removeClass(h.hover+" "+j+" "+h.active).filter("."+b.css.filterRow).removeClass(h.filterRow),i.find("."+b.css.icon).removeClass(h.icons+" "+k))}}})}(jQuery),function(a){"use strict";var b=a.tablesorter||{};b.addWidget({id:"columns",priority:30,options:{columns:["primary","secondary","tertiary"]},format:function(c,d,e){var f,g,h,i,j,k,l,m,n=d.$table,o=d.$tbodies,p=d.sortList,q=p.length,r=e&&e.columns||["primary","secondary","tertiary"],s=r.length-1;for(l=r.join(" "),g=0;g<o.length;g++)f=b.processTbody(c,o.eq(g),!0),h=f.children("tr"),h.each(function(){if(j=a(this),"none"!==this.style.display&&(k=j.children().removeClass(l),p&&p[0]&&(k.eq(p[0][0]).addClass(r[0]),q>1)))for(m=1;q>m;m++)k.eq(p[m][0]).addClass(r[m]||r[s])}),b.processTbody(c,f,!1);if(i=e.columns_thead!==!1?["thead tr"]:[],e.columns_tfoot!==!1&&i.push("tfoot tr"),i.length&&(h=n.find(i.join(",")).children().removeClass(l),q))for(m=0;q>m;m++)h.filter('[data-column="'+p[m][0]+'"]').addClass(r[m]||r[s])},remove:function(c,d,e){var f,g,h=d.$tbodies,i=(e.columns||["primary","secondary","tertiary"]).join(" ");for(d.$headers.removeClass(i),d.$table.children("tfoot").children("tr").children("th, td").removeClass(i),f=0;f<h.length;f++)g=b.processTbody(c,h.eq(f),!0),g.children("tr").each(function(){a(this).children().removeClass(i)}),b.processTbody(c,g,!1)}})}(jQuery),function(a){"use strict";var b,c,d=a.tablesorter||{},e=d.css,f=d.keyCodes;a.extend(e,{filterRow:"tablesorter-filter-row",filter:"tablesorter-filter",filterDisabled:"disabled",filterRowHide:"hideme"}),a.extend(f,{backSpace:8,escape:27,space:32,left:37,down:40}),d.addWidget({id:"filter",priority:50,options:{filter_childRows:!1,filter_childByColumn:!1,filter_childWithSibs:!0,filter_columnFilters:!0,filter_columnAnyMatch:!0,filter_cellFilter:"",filter_cssFilter:"",filter_defaultFilter:{},filter_excludeFilter:{},filter_external:"",filter_filteredRow:"filtered",filter_formatter:null,filter_functions:null,filter_hideEmpty:!0,filter_hideFilters:!1,filter_ignoreCase:!0,filter_liveSearch:!0,filter_onlyAvail:"filter-onlyAvail",filter_placeholder:{search:"",select:""},filter_reset:null,filter_resetOnEsc:!0,filter_saveFilters:!1,filter_searchDelay:300,filter_searchFiltered:!0,filter_selectSource:null,filter_startsWith:!1,filter_useParsedData:!1,filter_serversideFiltering:!1,filter_defaultAttrib:"data-value",filter_selectSourceSeparator:"|"},format:function(a,c,d){c.$table.hasClass("hasFilters")||b.init(a,c,d)},remove:function(b,c,f,g){var h,i,j=c.$table,k=c.$tbodies,l="addRows updateCell update updateRows updateComplete appendCache filterReset filterEnd search ".split(" ").join(c.namespace+"filter ");if(j.removeClass("hasFilters").unbind(l.replace(d.regex.spaces," ")).find("."+e.filterRow).remove(),!g){for(h=0;h<k.length;h++)i=d.processTbody(b,k.eq(h),!0),i.children().removeClass(f.filter_filteredRow).show(),d.processTbody(b,i,!1);f.filter_reset&&a(document).undelegate(f.filter_reset,"click"+c.namespace+"filter")}}}),b=d.filter={regex:{regex:/^\/((?:\\\/|[^\/])+)\/([mig]{0,3})?$/,child:/tablesorter-childRow/,filtered:/filtered/,type:/undefined|number/,exact:/(^[\"\'=]+)|([\"\'=]+$)/g,operators:/[<>=]/g,query:"(q|query)",wild01:/\?/g,wild0More:/\*/g,quote:/\"/g,isNeg1:/(>=?\s*-\d)/,isNeg2:/(<=?\s*\d)/},types:{or:function(d,e,f){if((c.orTest.test(e.iFilter)||c.orSplit.test(e.filter))&&!c.regex.test(e.filter)){var g,h,i,j,k=a.extend({},e),l=e.filter.split(c.orSplit),m=e.iFilter.split(c.orSplit),n=l.length;for(g=0;n>g;g++){k.nestedFilters=!0,k.filter=""+(b.parseFilter(d,l[g],e)||""),k.iFilter=""+(b.parseFilter(d,m[g],e)||""),i="("+(b.parseFilter(d,k.filter,e)||"")+")";try{if(j=new RegExp(e.isMatch?i:"^"+i+"$",d.widgetOptions.filter_ignoreCase?"i":""),h=j.test(k.exact)||b.processTypes(d,k,f))return h}catch(o){return null}}return h||!1}return null},and:function(d,e,f){if(c.andTest.test(e.filter)){var g,h,i,j,k,l=a.extend({},e),m=e.filter.split(c.andSplit),n=e.iFilter.split(c.andSplit),o=m.length;for(g=0;o>g;g++){l.nestedFilters=!0,l.filter=""+(b.parseFilter(d,m[g],e)||""),l.iFilter=""+(b.parseFilter(d,n[g],e)||""),j=("("+(b.parseFilter(d,l.filter,e)||"")+")").replace(c.wild01,"\\S{1}").replace(c.wild0More,"\\S*");try{k=new RegExp(e.isMatch?j:"^"+j+"$",d.widgetOptions.filter_ignoreCase?"i":""),i=k.test(l.exact)||b.processTypes(d,l,f),h=0===g?i:h&&i}catch(p){return null}}return h||!1}return null},regex:function(a,b){if(c.regex.test(b.filter)){var d,e=b.filter_regexCache[b.index]||c.regex.exec(b.filter),f=e instanceof RegExp;try{f||(b.filter_regexCache[b.index]=e=new RegExp(e[1],e[2])),d=e.test(b.exact)}catch(g){d=!1}return d}return null},operators:function(e,f){if(c.operTest.test(f.iFilter)&&""!==f.iExact){var g,h,i,j=e.table,k=f.parsed[f.index],l=d.formatFloat(f.iFilter.replace(c.operators,""),j),m=e.parsers[f.index]||{},n=l;return(k||"numeric"===m.type)&&(i=a.trim(""+f.iFilter.replace(c.operators,"")),h=b.parseFilter(e,i,f,!0),l="number"!=typeof h||""===h||isNaN(h)?l:h),!k&&"numeric"!==m.type||isNaN(l)||"undefined"==typeof f.cache?(i=isNaN(f.iExact)?f.iExact.replace(d.regex.nondigit,""):f.iExact,g=d.formatFloat(i,j)):g=f.cache,c.gtTest.test(f.iFilter)?h=c.gteTest.test(f.iFilter)?g>=l:g>l:c.ltTest.test(f.iFilter)&&(h=c.lteTest.test(f.iFilter)?l>=g:l>g),h||""!==n||(h=!0),h}return null},notMatch:function(d,e){if(c.notTest.test(e.iFilter)){var f,g=e.iFilter.replace("!",""),h=b.parseFilter(d,g,e)||"";return c.exact.test(h)?(h=h.replace(c.exact,""),""===h?!0:a.trim(h)!==e.iExact):(f=e.iExact.search(a.trim(h)),""===h?!0:!(d.widgetOptions.filter_startsWith?0===f:f>=0))}return null},exact:function(d,e){if(c.exact.test(e.iFilter)){var f=e.iFilter.replace(c.exact,""),g=b.parseFilter(d,f,e)||"";return e.anyMatch?a.inArray(g,e.rowArray)>=0:g==e.iExact}return null},range:function(a,e){if(c.toTest.test(e.iFilter)){var f,g,h,i,j=a.table,k=e.index,l=e.parsed[k],m=e.iFilter.split(c.toSplit);return g=m[0].replace(d.regex.nondigit,"")||"",h=d.formatFloat(b.parseFilter(a,g,e),j),g=m[1].replace(d.regex.nondigit,"")||"",i=d.formatFloat(b.parseFilter(a,g,e),j),(l||"numeric"===a.parsers[k].type)&&(f=a.parsers[k].format(""+m[0],j,a.$headers.eq(k),k),h=""===f||isNaN(f)?h:f,f=a.parsers[k].format(""+m[1],j,a.$headers.eq(k),k),i=""===f||isNaN(f)?i:f),!l&&"numeric"!==a.parsers[k].type||isNaN(h)||isNaN(i)?(g=isNaN(e.iExact)?e.iExact.replace(d.regex.nondigit,""):e.iExact,f=d.formatFloat(g,j)):f=e.cache,h>i&&(g=h,h=i,i=g),f>=h&&i>=f||""===h||""===i}return null},wild:function(a,d){if(c.wildOrTest.test(d.iFilter)){var e=""+(b.parseFilter(a,d.iFilter,d)||"");!c.wildTest.test(e)&&d.nestedFilters&&(e=d.isMatch?e:"^("+e+")$");try{return new RegExp(e.replace(c.wild01,"\\S{1}").replace(c.wild0More,"\\S*"),a.widgetOptions.filter_ignoreCase?"i":"").test(d.exact)}catch(f){return null}}return null},fuzzy:function(a,d){if(c.fuzzyTest.test(d.iFilter)){var e,f=0,g=d.iExact.length,h=d.iFilter.slice(1),i=b.parseFilter(a,h,d)||"";for(e=0;g>e;e++)d.iExact[e]===i[f]&&(f+=1);return f===i.length}return null}},init:function(f,g,h){d.language=a.extend(!0,{},{to:"to",or:"or",and:"and"},d.language);var i,j,k,l,m,n,o,p,q;if(g.$table.addClass("hasFilters"),g.lastSearch=[],h.filter_searchTimer=null,h.filter_initTimer=null,h.filter_formatterCount=0,h.filter_formatterInit=[],h.filter_anyColumnSelector='[data-column="all"],[data-column="any"]',h.filter_multipleColumnSelector='[data-column*="-"],[data-column*=","]',o="\\{"+c.query+"\\}",a.extend(c,{child:new RegExp(g.cssChildRow),filtered:new RegExp(h.filter_filteredRow),alreadyFiltered:new RegExp("(\\s+("+d.language.or+"|-|"+d.language.to+")\\s+)","i"),toTest:new RegExp("\\s+(-|"+d.language.to+")\\s+","i"),toSplit:new RegExp("(?:\\s+(?:-|"+d.language.to+")\\s+)","gi"),andTest:new RegExp("\\s+("+d.language.and+"|&&)\\s+","i"),andSplit:new RegExp("(?:\\s+(?:"+d.language.and+"|&&)\\s+)","gi"),orTest:new RegExp("(\\||\\s+"+d.language.or+"\\s+)","i"),orSplit:new RegExp("(?:\\s+(?:"+d.language.or+")\\s+|\\|)","gi"),iQuery:new RegExp(o,"i"),igQuery:new RegExp(o,"ig"),operTest:/^[<>]=?/,gtTest:/>/,gteTest:/>=/,ltTest:/</,lteTest:/<=/,notTest:/^\!/,wildOrTest:/[\?\*\|]/,wildTest:/\?\*/,fuzzyTest:/^~/,exactTest:/[=\"\|!]/}),o=g.$headers.filter(".filter-false, .parser-false").length,h.filter_columnFilters!==!1&&o!==g.$headers.length&&b.buildRow(f,g,h),k="addRows updateCell update updateRows updateComplete appendCache filterReset filterEnd search ".split(" ").join(g.namespace+"filter "),g.$table.bind(k,function(c,d){return o=h.filter_hideEmpty&&a.isEmptyObject(g.cache)&&!(g.delayInit&&"appendCache"===c.type),g.$table.find("."+e.filterRow).toggleClass(h.filter_filteredRow,o),/(search|filter)/.test(c.type)||(c.stopPropagation(),b.buildDefault(f,!0)),"filterReset"===c.type?(g.$table.find("."+e.filter).add(h.filter_$externalFilters).val(""),b.searching(f,[])):"filterEnd"===c.type?b.buildDefault(f,!0):(d="search"===c.type?d:"updateComplete"===c.type?g.$table.data("lastSearch"):"",/(update|add)/.test(c.type)&&"updateComplete"!==c.type&&(g.lastCombinedFilter=null,g.lastSearch=[]),b.searching(f,d,!0)),!1}),h.filter_reset&&(h.filter_reset instanceof a?h.filter_reset.click(function(){g.$table.triggerHandler("filterReset")}):a(h.filter_reset).length&&a(document).undelegate(h.filter_reset,"click"+g.namespace+"filter").delegate(h.filter_reset,"click"+g.namespace+"filter",function(){g.$table.triggerHandler("filterReset")})),h.filter_functions)for(m=0;m<g.columns;m++)if(p=d.getColumnData(f,h.filter_functions,m))if(l=g.$headerIndexed[m].removeClass("filter-select"),q=!(l.hasClass("filter-false")||l.hasClass("parser-false")),i="",p===!0&&q)b.buildSelect(f,m);else if("object"==typeof p&&q){for(j in p)"string"==typeof j&&(i+=""===i?'<option value="">'+(l.data("placeholder")||l.attr("data-placeholder")||h.filter_placeholder.select||"")+"</option>":"",o=j,k=j,j.indexOf(h.filter_selectSourceSeparator)>=0&&(o=j.split(h.filter_selectSourceSeparator),k=o[1],o=o[0]),i+="<option "+(k===o?"":'data-function-name="'+j+'" ')+'value="'+o+'">'+k+"</option>");g.$table.find("thead").find("select."+e.filter+'[data-column="'+m+'"]').append(i),k=h.filter_selectSource,p="function"==typeof k?!0:d.getColumnData(f,k,m),p&&b.buildSelect(g.table,m,"",!0,l.hasClass(h.filter_onlyAvail))}b.buildDefault(f,!0),b.bindSearch(f,g.$table.find("."+e.filter),!0),h.filter_external&&b.bindSearch(f,h.filter_external),h.filter_hideFilters&&b.hideFilters(g),g.showProcessing&&(k="filterStart filterEnd ".split(" ").join(g.namespace+"filter "),g.$table.unbind(k.replace(d.regex.spaces," ")).bind(k,function(b,c){l=c?g.$table.find("."+e.header).filter("[data-column]").filter(function(){return""!==c[a(this).data("column")]}):"",d.isProcessing(f,"filterStart"===b.type,c?l:"")})),g.filteredRows=g.totalRows,k="tablesorter-initialized pagerBeforeInitialized ".split(" ").join(g.namespace+"filter "),g.$table.unbind(k.replace(d.regex.spaces," ")).bind(k,function(){var a=this.config.widgetOptions;n=b.setDefaults(f,g,a)||[],n.length&&(g.delayInit&&""===n.join("")||d.setFilters(f,n,!0)),g.$table.triggerHandler("filterFomatterUpdate"),setTimeout(function(){a.filter_initialized||b.filterInitComplete(g)},100)}),g.pager&&g.pager.initialized&&!h.filter_initialized&&(g.$table.triggerHandler("filterFomatterUpdate"),setTimeout(function(){b.filterInitComplete(g)},100))},formatterUpdated:function(a,b){var c=a&&a.closest("table")[0].config.widgetOptions;c&&!c.filter_initialized&&(c.filter_formatterInit[b]=1)},filterInitComplete:function(c){var d,e,f=c.widgetOptions,g=0,h=function(){f.filter_initialized=!0,c.$table.triggerHandler("filterInit",c),b.findRows(c.table,c.$table.data("lastSearch")||[])};if(a.isEmptyObject(f.filter_formatter))h();else{for(e=f.filter_formatterInit.length,d=0;e>d;d++)1===f.filter_formatterInit[d]&&g++;clearTimeout(f.filter_initTimer),f.filter_initialized||g!==f.filter_formatterCount?f.filter_initialized||(f.filter_initTimer=setTimeout(function(){h()},500)):h()}},processFilters:function(a,b){var c,d=b?encodeURIComponent:decodeURIComponent,e=a.length;for(c=0;e>c;c++)a[c]&&(a[c]=d(a[c]));return a},setDefaults:function(c,e,f){var g,h,i,j,k,l=d.getFilters(c)||[];if(f.filter_saveFilters&&d.storage&&(h=d.storage(c,"tablesorter-filters")||[],g=a.isArray(h),g&&""===h.join("")||!g||(l=b.processFilters(h))),""===l.join(""))for(k=e.$headers.add(f.filter_$externalFilters).filter("["+f.filter_defaultAttrib+"]"),i=0;i<=e.columns;i++)j=i===e.columns?"all":i,l[i]=k.filter('[data-column="'+j+'"]').attr(f.filter_defaultAttrib)||l[i]||"";return e.$table.data("lastSearch",l),l},parseFilter:function(a,b,c,d){return d||c.parsed[c.index]?a.parsers[c.index].format(b,a.table,[],c.index):b},buildRow:function(c,f,g){var h,i,j,k,l,m,n,o,p,q=g.filter_cellFilter,r=f.columns,s=a.isArray(q),t='<tr role="row" class="'+e.filterRow+" "+f.cssIgnoreRow+'">';for(j=0;r>j;j++)f.$headerIndexed[j].length&&(p=f.$headerIndexed[j]&&f.$headerIndexed[j][0].colSpan||0,t+=p>1?'<td data-column="'+j+"-"+(j+p-1)+'" colspan="'+p+'"':'<td data-column="'+j+'"',t+=s?q[j]?' class="'+q[j]+'"':"":""!==q?' class="'+q+'"':"",t+="></td>");for(f.$filters=a(t+="</tr>").appendTo(f.$table.children("thead").eq(0)).children("td"),j=0;r>j;j++)m=!1,k=f.$headerIndexed[j],k&&k.length&&(h=b.getColumnElm(f,f.$filters,j),o=d.getColumnData(c,g.filter_functions,j),l=g.filter_functions&&o&&"function"!=typeof o||k.hasClass("filter-select"),i=d.getColumnData(c,f.headers,j),m="false"===d.getData(k[0],i,"filter")||"false"===d.getData(k[0],i,"parser"),l?t=a("<select>").appendTo(h):(o=d.getColumnData(c,g.filter_formatter,j),o?(g.filter_formatterCount++,t=o(h,j),t&&0===t.length&&(t=h.children("input")),t&&(0===t.parent().length||t.parent().length&&t.parent()[0]!==h[0])&&h.append(t)):t=a('<input type="search">').appendTo(h),t&&(p=k.data("placeholder")||k.attr("data-placeholder")||g.filter_placeholder.search||"",t.attr("placeholder",p))),t&&(n=(a.isArray(g.filter_cssFilter)?"undefined"!=typeof g.filter_cssFilter[j]?g.filter_cssFilter[j]||"":"":g.filter_cssFilter)||"",t.addClass(e.filter+" "+n).attr("data-column",h.attr("data-column")),m&&(t.attr("placeholder","").addClass(e.filterDisabled)[0].disabled=!0)))},bindSearch:function(c,e,g){if(c=a(c)[0],e=a(e),e.length){var h,i=c.config,j=i.widgetOptions,k=i.namespace+"filter",l=j.filter_$externalFilters;g!==!0&&(h=j.filter_anyColumnSelector+","+j.filter_multipleColumnSelector,j.filter_$anyMatch=e.filter(h),l&&l.length?j.filter_$externalFilters=j.filter_$externalFilters.add(e):j.filter_$externalFilters=e,d.setFilters(c,i.$table.data("lastSearch")||[],g===!1)),h="keypress keyup keydown search change input ".split(" ").join(k+" "),e.attr("data-lastSearchTime",(new Date).getTime()).unbind(h.replace(d.regex.spaces," ")).bind("keydown"+k,function(a){return a.which!==f.escape||j.filter_resetOnEsc?void 0:!1}).bind("keyup"+k,function(d){var e=parseInt(a(this).attr("data-column"),10);if(a(this).attr("data-lastSearchTime",(new Date).getTime()),d.which===f.escape)this.value=j.filter_resetOnEsc?"":i.lastSearch[e];else{if(j.filter_liveSearch===!1)return;if(""!==this.value&&("number"==typeof j.filter_liveSearch&&this.value.length<j.filter_liveSearch||d.which!==f.enter&&d.which!==f.backSpace&&(d.which<f.space||d.which>=f.left&&d.which<=f.down)))return}b.searching(c,!0,!0)}).bind("search change keypress input ".split(" ").join(k+" "),function(d){var e=parseInt(a(this).attr("data-column"),10);(j.filter_initialized&&(d.which===f.enter||"search"===d.type||"change"===d.type&&this.value!==i.lastSearch[e])||"input"===d.type&&""===this.value)&&(d.preventDefault(),a(this).attr("data-lastSearchTime",(new Date).getTime()),b.searching(c,"keypress"!==d.type,!0))})}},searching:function(a,c,d){var e=a.config.widgetOptions;clearTimeout(e.filter_searchTimer),"undefined"==typeof c||c===!0?e.filter_searchTimer=setTimeout(function(){b.checkFilters(a,c,d)},e.filter_liveSearch?e.filter_searchDelay:10):b.checkFilters(a,c,d)},checkFilters:function(c,f,g){var h=c.config,i=h.widgetOptions,j=a.isArray(f),k=j?f:d.getFilters(c,!0),l=(k||[]).join("");return a.isEmptyObject(h.cache)?void(h.delayInit&&h.pager&&h.pager.initialized&&d.updateCache(h,function(){b.checkFilters(c,!1,g)})):(j&&(d.setFilters(c,k,!1,g!==!0),i.filter_initialized||(h.lastCombinedFilter="")),i.filter_hideFilters&&h.$table.find("."+e.filterRow).triggerHandler(""===l?"mouseleave":"mouseenter"),h.lastCombinedFilter!==l||f===!1?(f===!1&&(h.lastCombinedFilter=null,h.lastSearch=[]),k=k||[],k=Array.prototype.map?k.map(String):k.join("�").split("�"),i.filter_initialized&&h.$table.triggerHandler("filterStart",[k]),h.showProcessing?void setTimeout(function(){return b.findRows(c,k,l),!1},30):(b.findRows(c,k,l),!1)):void 0)},hideFilters:function(b,c){var f,g=(c||b.$table).find("."+e.filterRow).addClass(e.filterRowHide);g.bind("mouseenter mouseleave",function(c){var d=c,g=a(this);clearTimeout(f),f=setTimeout(function(){/enter|over/.test(d.type)?g.removeClass(e.filterRowHide):a(document.activeElement).closest("tr")[0]!==g[0]&&""===b.lastCombinedFilter&&g.addClass(e.filterRowHide)},200)}).find("input, select").bind("focus blur",function(c){var g=c,h=a(this).closest("tr");clearTimeout(f),f=setTimeout(function(){clearTimeout(f),""===d.getFilters(b.$table).join("")&&h.toggleClass(e.filterRowHide,"focus"!==g.type)},200)})},defaultFilter:function(b,d){if(""===b)return b;var e=c.iQuery,f=d.match(c.igQuery).length,g=f>1?a.trim(b).split(/\s/):[a.trim(b)],h=g.length-1,i=0,j=d;for(1>h&&f>1&&(g[1]=g[0]);e.test(j);)j=j.replace(e,g[i++]||""),e.test(j)&&h>i&&""!==(g[i]||"")&&(j=d.replace(e,j));return j},getLatestSearch:function(b){return b?b.sort(function(b,c){return a(c).attr("data-lastSearchTime")-a(b).attr("data-lastSearchTime")}):b||a()},findRange:function(a,b,c){var d,e,f,g,h,i,j,k,l,m=[];if(/^[0-9]+$/.test(b))return[parseInt(b,10)];
if(!c&&/-/.test(b))for(e=b.match(/(\d+)\s*-\s*(\d+)/g),l=e?e.length:0,k=0;l>k;k++){for(f=e[k].split(/\s*-\s*/),g=parseInt(f[0],10)||0,h=parseInt(f[1],10)||a.columns-1,g>h&&(d=g,g=h,h=d),h>=a.columns&&(h=a.columns-1);h>=g;g++)m.push(g);b=b.replace(e[k],"")}if(!c&&/,/.test(b))for(i=b.split(/\s*,\s*/),l=i.length,j=0;l>j;j++)""!==i[j]&&(k=parseInt(i[j],10),k<a.columns&&m.push(k));if(!m.length)for(k=0;k<a.columns;k++)m.push(k);return m},getColumnElm:function(c,d,e){return d.filter(function(){var d=b.findRange(c,a(this).attr("data-column"));return a.inArray(e,d)>-1})},multipleColumns:function(c,d){var e=c.widgetOptions,f=e.filter_initialized||!d.filter(e.filter_anyColumnSelector).length,g=a.trim(b.getLatestSearch(d).attr("data-column")||"");return b.findRange(c,g,!f)},processTypes:function(c,d,e){var f,g=null,h=null;for(f in b.types)a.inArray(f,e.excludeMatch)<0&&null===h&&(h=b.types[f](c,d,e),null!==h&&(g=h));return g},processRow:function(e,f,g){var h,i,j,k,l,m=e.widgetOptions,n=!0,o=m.filter_$anyMatch&&m.filter_$anyMatch.length?b.multipleColumns(e,m.filter_$anyMatch):[];if(f.$cells=f.$row.children(),f.anyMatchFlag&&o.length>1){if(f.anyMatch=!0,f.isMatch=!0,f.rowArray=f.$cells.map(function(b){return a.inArray(b,o)>-1?(f.parsed[b]?l=f.cacheArray[b]:(l=f.rawArray[b],l=a.trim(m.filter_ignoreCase?l.toLowerCase():l),e.sortLocaleCompare&&(l=d.replaceAccents(l))),l):void 0}).get(),f.filter=f.anyMatchFilter,f.iFilter=f.iAnyMatchFilter,f.exact=f.rowArray.join(" "),f.iExact=m.filter_ignoreCase?f.exact.toLowerCase():f.exact,f.cache=f.cacheArray.slice(0,-1).join(" "),g.excludeMatch=g.noAnyMatch,i=b.processTypes(e,f,g),null!==i)n=i;else if(m.filter_startsWith)for(n=!1,o=Math.min(e.columns,f.rowArray.length);!n&&o>0;)o--,n=n||0===f.rowArray[o].indexOf(f.iFilter);else n=(f.iExact+f.childRowText).indexOf(f.iFilter)>=0;if(f.anyMatch=!1,f.filters.join("")===f.filter)return n}for(o=0;o<e.columns;o++)f.filter=f.filters[o],f.index=o,g.excludeMatch=g.excludeFilter[o],f.filter&&(f.cache=f.cacheArray[o],h=f.rawArray[o]||"",f.exact=e.sortLocaleCompare?d.replaceAccents(h):h,f.iExact=!c.type.test(typeof f.exact)&&m.filter_ignoreCase?f.exact.toLowerCase():f.exact,f.isMatch=e.$headerIndexed[f.index].hasClass("filter-match"),h=n,k=m.filter_columnFilters?e.$filters.add(e.$externalFilters).filter('[data-column="'+o+'"]').find("select option:selected").attr("data-function-name")||"":"",e.sortLocaleCompare&&(f.filter=d.replaceAccents(f.filter)),m.filter_defaultFilter&&c.iQuery.test(g.defaultColFilter[o])&&(f.filter=b.defaultFilter(f.filter,g.defaultColFilter[o])),f.iFilter=m.filter_ignoreCase?(f.filter||"").toLowerCase():f.filter,j=g.functions[o],i=null,j&&(j===!0?i=f.isMatch?(""+f.iExact).search(f.iFilter)>=0:f.filter===f.exact:"function"==typeof j?i=j(f.exact,f.cache,f.filter,o,f.$row,e,f):"function"==typeof j[k||f.filter]&&(l=k||f.filter,i=j[l](f.exact,f.cache,f.filter,o,f.$row,e,f))),null===i?(i=b.processTypes(e,f,g),null!==i?h=i:(l=(f.iExact+f.childRowText).indexOf(b.parseFilter(e,f.iFilter,f)),h=!m.filter_startsWith&&l>=0||m.filter_startsWith&&0===l)):h=i,n=h?n:!1);return n},findRows:function(e,f,g){if(e.config.lastCombinedFilter!==g&&e.config.widgetOptions.filter_initialized){var h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F=a.extend([],f),G=e.config,H=G.widgetOptions,I={anyMatch:!1,filters:f,filter_regexCache:[]},J={noAnyMatch:["range","notMatch","operators"],functions:[],excludeFilter:[],defaultColFilter:[],defaultAnyFilter:d.getColumnData(e,H.filter_defaultFilter,G.columns,!0)||""};for(I.parsed=[],p=0;p<G.columns;p++)I.parsed[p]=H.filter_useParsedData||G.parsers&&G.parsers[p]&&G.parsers[p].parsed||d.getData&&"parsed"===d.getData(G.$headerIndexed[p],d.getColumnData(e,G.headers,p),"filter")||G.$headerIndexed[p].hasClass("filter-parsed"),J.functions[p]=d.getColumnData(e,H.filter_functions,p)||G.$headerIndexed[p].hasClass("filter-select"),J.defaultColFilter[p]=d.getColumnData(e,H.filter_defaultFilter,p)||"",J.excludeFilter[p]=(d.getColumnData(e,H.filter_excludeFilter,p,!0)||"").split(/\s+/);for(G.debug&&(console.log("Filter: Starting filter widget search",f),v=new Date),G.filteredRows=0,G.totalRows=0,g=(F||[]).join(""),n=0;n<G.$tbodies.length;n++){if(o=d.processTbody(e,G.$tbodies.eq(n),!0),p=G.columns,i=G.cache[n].normalized,k=a(a.map(i,function(a){return a[p].$row.get()})),""===g||H.filter_serversideFiltering)k.removeClass(H.filter_filteredRow).not("."+G.cssChildRow).css("display","");else{if(k=k.not("."+G.cssChildRow),h=k.length,(H.filter_$anyMatch&&H.filter_$anyMatch.length||"undefined"!=typeof f[G.columns])&&(I.anyMatchFlag=!0,I.anyMatchFilter=""+(f[G.columns]||H.filter_$anyMatch&&b.getLatestSearch(H.filter_$anyMatch).val()||""),H.filter_columnAnyMatch)){for(A=I.anyMatchFilter.split(c.andSplit),B=!1,x=0;x<A.length;x++)C=A[x].split(":"),C.length>1&&(D=parseInt(C[0],10)-1,D>=0&&D<G.columns&&(f[D]=C[1],A.splice(x,1),x--,B=!0));B&&(I.anyMatchFilter=A.join(" && "))}if(z=H.filter_searchFiltered,s=G.lastSearch||G.$table.data("lastSearch")||[],z)for(x=0;p+1>x;x++)w=f[x]||"",z||(x=p),z=z&&s.length&&0===w.indexOf(s[x]||"")&&!c.alreadyFiltered.test(w)&&!c.exactTest.test(w)&&!(c.isNeg1.test(w)||c.isNeg2.test(w))&&!(""!==w&&G.$filters&&G.$filters.filter('[data-column="'+x+'"]').find("select").length&&!G.$headerIndexed[x].hasClass("filter-match"));for(y=k.not("."+H.filter_filteredRow).length,z&&0===y&&(z=!1),G.debug&&console.log("Filter: Searching through "+(z&&h>y?y:"all")+" rows"),I.anyMatchFlag&&(G.sortLocaleCompare&&(I.anyMatchFilter=d.replaceAccents(I.anyMatchFilter)),H.filter_defaultFilter&&c.iQuery.test(J.defaultAnyFilter)&&(I.anyMatchFilter=b.defaultFilter(I.anyMatchFilter,J.defaultAnyFilter),z=!1),I.iAnyMatchFilter=H.filter_ignoreCase&&G.ignoreCase?I.anyMatchFilter.toLowerCase():I.anyMatchFilter),m=0;h>m;m++)if(E=k[m].className,q=m&&c.child.test(E),!(q||z&&c.filtered.test(E))){if(I.$row=k.eq(m),I.cacheArray=i[m],j=I.cacheArray[G.columns],I.rawArray=j.raw,I.childRowText="",!H.filter_childByColumn){for(E="",r=j.child,x=0;x<r.length;x++)E+=" "+r[x].join(" ")||"";I.childRowText=H.filter_childRows?H.filter_ignoreCase?E.toLowerCase():E:""}if(t=!1,u=b.processRow(G,I,J),l=j.$row,w=u?!0:!1,r=j.$row.filter(":gt(0)"),H.filter_childRows&&r.length){if(H.filter_childByColumn)for(H.filter_childWithSibs||(r.addClass(H.filter_filteredRow),l=l.eq(0)),x=0;x<r.length;x++)I.$row=r.eq(x),I.cacheArray=j.child[x],I.rawArray=I.cacheArray,w=b.processRow(G,I,J),t=t||w,!H.filter_childWithSibs&&w&&r.eq(x).removeClass(H.filter_filteredRow);t=t||u}else t=w;l.toggleClass(H.filter_filteredRow,!t)[0].display=t?"":"none"}}G.filteredRows+=k.not("."+H.filter_filteredRow).length,G.totalRows+=k.length,d.processTbody(e,o,!1)}G.lastCombinedFilter=g,G.lastSearch=F,G.$table.data("lastSearch",F),H.filter_saveFilters&&d.storage&&d.storage(e,"tablesorter-filters",b.processFilters(F,!0)),G.debug&&console.log("Completed filter widget search"+d.benchmark(v)),H.filter_initialized&&(G.$table.triggerHandler("filterBeforeEnd",G),G.$table.triggerHandler("filterEnd",G)),setTimeout(function(){d.applyWidget(G.table)},0)}},getOptionSource:function(c,e,f){c=a(c)[0];var g=c.config,h=g.widgetOptions,i=!1,j=h.filter_selectSource,k=g.$table.data("lastSearch")||[],l="function"==typeof j?!0:d.getColumnData(c,j,e);if(f&&""!==k[e]&&(f=!1),l===!0)i=j(c,e,f);else{if(l instanceof a||"string"===a.type(l)&&l.indexOf("</option>")>=0)return l;a.isArray(l)?i=l:"object"===a.type(j)&&l&&(i=l(c,e,f))}return i===!1&&(i=b.getOptions(c,e,f)),b.processOptions(c,e,i)},processOptions:function(b,c,e){if(!a.isArray(e))return!1;b=a(b)[0];var f,g,h,i,j,k,l=b.config,m="undefined"!=typeof c&&null!==c&&c>=0&&c<l.columns,n=[];if(e=a.grep(e,function(b,c){return b.text?!0:a.inArray(b,e)===c}),m&&l.$headerIndexed[c].hasClass("filter-select-nosort"))return e;for(i=e.length,h=0;i>h;h++)g=e[h],k=g.text?g.text:g,j=(m&&l.parsers&&l.parsers.length&&l.parsers[c].format(k,b,[],c)||k).toString(),j=l.widgetOptions.filter_ignoreCase?j.toLowerCase():j,g.text?(g.parsed=j,n.push(g)):n.push({text:g,parsed:j});for(f=l.textSorter||"",n.sort(function(a,e){var g=a.parsed,h=e.parsed;return m&&"function"==typeof f?f(g,h,!0,c,b):m&&"object"==typeof f&&f.hasOwnProperty(c)?f[c](g,h,!0,c,b):d.sortNatural?d.sortNatural(g,h):!0}),e=[],i=n.length,h=0;i>h;h++)e.push(n[h]);return e},getOptions:function(b,c,e){b=a(b)[0];var f,g,h,i,j,k,l,m,n=b.config,o=n.widgetOptions,p=[];for(g=0;g<n.$tbodies.length;g++)for(j=n.cache[g],h=n.cache[g].normalized.length,f=0;h>f;f++)if(i=j.row?j.row[f]:j.normalized[f][n.columns].$row[0],!e||!i.className.match(o.filter_filteredRow))if(o.filter_useParsedData||n.parsers[c].parsed||n.$headerIndexed[c].hasClass("filter-parsed")){if(p.push(""+j.normalized[f][c]),o.filter_childRows&&o.filter_childByColumn)for(m=j.normalized[f][n.columns].$row.length-1,k=0;m>k;k++)p.push(""+j.normalized[f][n.columns].child[k][c])}else if(p.push(j.normalized[f][n.columns].raw[c]),o.filter_childRows&&o.filter_childByColumn)for(m=j.normalized[f][n.columns].$row.length,k=1;m>k;k++)l=j.normalized[f][n.columns].$row.eq(k).children().eq(c),p.push(""+d.getElementText(n,l,c));return p},buildSelect:function(d,f,g,h,i){if(d=a(d)[0],f=parseInt(f,10),d.config.cache&&!a.isEmptyObject(d.config.cache)){var j,k,l,m,n,o,p,q=d.config,r=q.widgetOptions,s=q.$headerIndexed[f],t='<option value="">'+(s.data("placeholder")||s.attr("data-placeholder")||r.filter_placeholder.select||"")+"</option>",u=q.$table.find("thead").find("select."+e.filter+'[data-column="'+f+'"]').val();if(("undefined"==typeof g||""===g)&&(g=b.getOptionSource(d,f,i)),a.isArray(g)){for(j=0;j<g.length;j++)if(p=g[j],p.text){p["data-function-name"]="undefined"==typeof p.value?p.text:p.value,t+="<option";for(k in p)p.hasOwnProperty(k)&&"text"!==k&&(t+=" "+k+'="'+p[k]+'"');p.value||(t+=' value="'+p.text+'"'),t+=">"+p.text+"</option>"}else""+p!="[object Object]"&&(l=p=(""+p).replace(c.quote,"&quot;"),k=l,l.indexOf(r.filter_selectSourceSeparator)>=0&&(m=l.split(r.filter_selectSourceSeparator),k=m[0],l=m[1]),t+=""!==p?"<option "+(k===l?"":'data-function-name="'+p+'" ')+'value="'+k+'">'+l+"</option>":"");g=[]}n=(q.$filters?q.$filters:q.$table.children("thead")).find("."+e.filter),r.filter_$externalFilters&&(n=n&&n.length?n.add(r.filter_$externalFilters):r.filter_$externalFilters),o=n.filter('select[data-column="'+f+'"]'),o.length&&(o[h?"html":"append"](t),a.isArray(g)||o.append(g).val(u),o.val(u))}},buildDefault:function(a,c){var e,f,g,h=a.config,i=h.widgetOptions,j=h.columns;for(e=0;j>e;e++)f=h.$headerIndexed[e],g=!(f.hasClass("filter-false")||f.hasClass("parser-false")),(f.hasClass("filter-select")||d.getColumnData(a,i.filter_functions,e)===!0)&&g&&b.buildSelect(a,e,"",c,f.hasClass(i.filter_onlyAvail))}},c=b.regex,d.getFilters=function(c,d,f,g){var h,i,j,k,l=!1,m=c?a(c)[0].config:"",n=m?m.widgetOptions:"";if(d!==!0&&n&&!n.filter_columnFilters||a.isArray(f)&&f.join("")===m.lastCombinedFilter)return a(c).data("lastSearch");if(m&&(m.$filters&&(i=m.$filters.find("."+e.filter)),n.filter_$externalFilters&&(i=i&&i.length?i.add(n.filter_$externalFilters):n.filter_$externalFilters),i&&i.length))for(l=f||[],h=0;h<m.columns+1;h++)k=h===m.columns?n.filter_anyColumnSelector+","+n.filter_multipleColumnSelector:'[data-column="'+h+'"]',j=i.filter(k),j.length&&(j=b.getLatestSearch(j),a.isArray(f)?(g&&j.length>1&&(j=j.slice(1)),h===m.columns&&(k=j.filter(n.filter_anyColumnSelector),j=k.length?k:j),j.val(f[h]).trigger("change"+m.namespace)):(l[h]=j.val()||"",h===m.columns?j.slice(1).filter('[data-column*="'+j.attr("data-column")+'"]').val(l[h]):j.slice(1).val(l[h])),h===m.columns&&j.length&&(n.filter_$anyMatch=j));return 0===l.length&&(l=!1),l},d.setFilters=function(c,e,f,g){var h=c?a(c)[0].config:"",i=d.getFilters(c,!0,e,g);return"undefined"==typeof f&&(f=!0),h&&f&&(h.lastCombinedFilter=null,h.lastSearch=[],b.searching(h.table,e,g),h.$table.triggerHandler("filterFomatterUpdate")),!!i}}(jQuery),function(a,b){"use strict";var c=a.tablesorter||{};a.extend(c.css,{sticky:"tablesorter-stickyHeader",stickyVis:"tablesorter-sticky-visible",stickyHide:"tablesorter-sticky-hidden",stickyWrap:"tablesorter-sticky-wrapper"}),c.addHeaderResizeEvent=function(b,c,d){if(b=a(b)[0],b.config){var e={timer:250},f=a.extend({},e,d),g=b.config,h=g.widgetOptions,i=function(a){var b,c,d,e,f,i,j=g.$headers.length;for(h.resize_flag=!0,c=[],b=0;j>b;b++)d=g.$headers.eq(b),e=d.data("savedSizes")||[0,0],f=d[0].offsetWidth,i=d[0].offsetHeight,(f!==e[0]||i!==e[1])&&(d.data("savedSizes",[f,i]),c.push(d[0]));c.length&&a!==!1&&g.$table.triggerHandler("resize",[c]),h.resize_flag=!1};return i(!1),clearInterval(h.resize_timer),c?(h.resize_flag=!1,!1):void(h.resize_timer=setInterval(function(){h.resize_flag||i()},f.timer))}},c.addWidget({id:"stickyHeaders",priority:60,options:{stickyHeaders:"",stickyHeaders_attachTo:null,stickyHeaders_xScroll:null,stickyHeaders_yScroll:null,stickyHeaders_offset:0,stickyHeaders_filteredToTop:!0,stickyHeaders_cloneId:"-sticky",stickyHeaders_addResizeEvent:!0,stickyHeaders_includeCaption:!0,stickyHeaders_zIndex:2},format:function(d,e,f){if(!(e.$table.hasClass("hasStickyHeaders")||a.inArray("filter",e.widgets)>=0&&!e.$table.hasClass("hasFilters"))){var g,h,i,j,k=e.$table,l=a(f.stickyHeaders_attachTo),m=e.namespace+"stickyheaders ",n=a(f.stickyHeaders_yScroll||f.stickyHeaders_attachTo||b),o=a(f.stickyHeaders_xScroll||f.stickyHeaders_attachTo||b),p=k.children("thead:first"),q=p.children("tr").not(".sticky-false").children(),r=k.children("tfoot"),s=isNaN(f.stickyHeaders_offset)?a(f.stickyHeaders_offset):"",t=s.length?s.height()||0:parseInt(f.stickyHeaders_offset,10)||0,u=k.parent().closest("."+c.css.table).hasClass("hasStickyHeaders")?k.parent().closest("table.tablesorter")[0].config.widgetOptions.$sticky.parent():[],v=u.length?u.height():0,w=f.$sticky=k.clone().addClass("containsStickyHeaders "+c.css.sticky+" "+f.stickyHeaders+" "+e.namespace.slice(1)+"_extra_table").wrap('<div class="'+c.css.stickyWrap+'">'),x=w.parent().addClass(c.css.stickyHide).css({position:l.length?"absolute":"fixed",padding:parseInt(w.parent().parent().css("padding-left"),10),top:t+v,left:0,visibility:"hidden",zIndex:f.stickyHeaders_zIndex||2}),y=w.children("thead:first"),z="",A=0,B=function(a,c){var d,e,f,g,h,i=a.filter(":visible"),j=i.length;for(d=0;j>d;d++)g=c.filter(":visible").eq(d),h=i.eq(d),"border-box"===h.css("box-sizing")?e=h.outerWidth():"collapse"===g.css("border-collapse")?b.getComputedStyle?e=parseFloat(b.getComputedStyle(h[0],null).width):(f=parseFloat(h.css("border-width")),e=h.outerWidth()-parseFloat(h.css("padding-left"))-parseFloat(h.css("padding-right"))-f):e=h.width(),g.css({width:e,"min-width":e,"max-width":e})},C=function(){t=s.length?s.height()||0:parseInt(f.stickyHeaders_offset,10)||0,A=0,x.css({left:l.length?parseInt(l.css("padding-left"),10)||0:k.offset().left-parseInt(k.css("margin-left"),10)-o.scrollLeft()-A,width:k.outerWidth()}),B(k,w),B(q,j)},D=function(b){if(k.is(":visible")){v=u.length?u.offset().top-n.scrollTop()+u.height():0;var d=k.offset(),e=a.isWindow(n[0]),f=a.isWindow(o[0]),g=(l.length?e?n.scrollTop():n.offset().top:n.scrollTop())+t+v,h=k.height()-(x.height()+(r.height()||0)),i=g>d.top&&g<d.top+h?"visible":"hidden",j={visibility:i};l.length&&(j.top=e?g-l.offset().top:l.scrollTop()),f&&(j.left=k.offset().left-parseInt(k.css("margin-left"),10)-o.scrollLeft()-A),u.length&&(j.top=(j.top||0)+t+v),x.removeClass(c.css.stickyVis+" "+c.css.stickyHide).addClass("visible"===i?c.css.stickyVis:c.css.stickyHide).css(j),(i!==z||b)&&(C(),z=i)}};if(l.length&&!l.css("position")&&l.css("position","relative"),w.attr("id")&&(w[0].id+=f.stickyHeaders_cloneId),w.find("thead:gt(0), tr.sticky-false").hide(),w.find("tbody, tfoot").remove(),w.find("caption").toggle(f.stickyHeaders_includeCaption),j=y.children().children(),w.css({height:0,width:0,margin:0}),j.find("."+c.css.resizer).remove(),k.addClass("hasStickyHeaders").bind("pagerComplete"+m,function(){C()}),c.bindEvents(d,y.children().children("."+c.css.header)),k.after(x),e.onRenderHeader)for(i=y.children("tr").children(),h=i.length,g=0;h>g;g++)e.onRenderHeader.apply(i.eq(g),[g,e,w]);o.add(n).unbind("scroll resize ".split(" ").join(m).replace(/\s+/g," ")).bind("scroll resize ".split(" ").join(m),function(a){D("resize"===a.type)}),e.$table.unbind("stickyHeadersUpdate"+m).bind("stickyHeadersUpdate"+m,function(){D(!0)}),f.stickyHeaders_addResizeEvent&&c.addHeaderResizeEvent(d),k.hasClass("hasFilters")&&f.filter_columnFilters&&(k.bind("filterEnd"+m,function(){var d=a(document.activeElement).closest("td"),g=d.parent().children().index(d);x.hasClass(c.css.stickyVis)&&f.stickyHeaders_filteredToTop&&(b.scrollTo(0,k.position().top),g>=0&&e.$filters&&e.$filters.eq(g).find("a, select, input").filter(":visible").focus())}),c.filter.bindSearch(k,j.find("."+c.css.filter)),f.filter_hideFilters&&c.filter.hideFilters(e,w)),k.triggerHandler("stickyHeadersInit")}},remove:function(d,e,f){var g=e.namespace+"stickyheaders ";e.$table.removeClass("hasStickyHeaders").unbind("pagerComplete filterEnd stickyHeadersUpdate ".split(" ").join(g).replace(/\s+/g," ")).next("."+c.css.stickyWrap).remove(),f.$sticky&&f.$sticky.length&&f.$sticky.remove(),a(b).add(f.stickyHeaders_xScroll).add(f.stickyHeaders_yScroll).add(f.stickyHeaders_attachTo).unbind("scroll resize ".split(" ").join(g).replace(/\s+/g," ")),c.addHeaderResizeEvent(d,!1)}})}(jQuery,window),function(a,b){"use strict";var c=a.tablesorter||{};a.extend(c.css,{resizableContainer:"tablesorter-resizable-container",resizableHandle:"tablesorter-resizable-handle",resizableNoSelect:"tablesorter-disableSelection",resizableStorage:"tablesorter-resizable"}),a(function(){var b="<style>body."+c.css.resizableNoSelect+" { -ms-user-select: none; -moz-user-select: -moz-none;-khtml-user-select: none; -webkit-user-select: none; user-select: none; }."+c.css.resizableContainer+" { position: relative; height: 1px; }."+c.css.resizableHandle+" { position: absolute; display: inline-block; width: 8px;top: 1px; cursor: ew-resize; z-index: 3; user-select: none; -moz-user-select: none; }</style>";a(b).appendTo("body")}),c.resizable={init:function(b,d){if(!b.$table.hasClass("hasResizable")){b.$table.addClass("hasResizable");var e,f,g,h,i,j=b.$table,k=j.parent(),l=parseInt(j.css("margin-top"),10),m=d.resizable_vars={useStorage:c.storage&&d.resizable!==!1,$wrap:k,mouseXPosition:0,$target:null,$next:null,overflow:"auto"===k.css("overflow")||"scroll"===k.css("overflow")||"auto"===k.css("overflow-x")||"scroll"===k.css("overflow-x"),storedSizes:[]};for(c.resizableReset(b.table,!0),m.tableWidth=j.width(),m.fullWidth=Math.abs(k.width()-m.tableWidth)<20,m.useStorage&&m.overflow&&(c.storage(b.table,"tablesorter-table-original-css-width",m.tableWidth),i=c.storage(b.table,"tablesorter-table-resized-width")||"auto",c.resizable.setWidth(j,i,!0)),d.resizable_vars.storedSizes=h=(m.useStorage?c.storage(b.table,c.css.resizableStorage):[])||[],c.resizable.setWidths(b,d,h),c.resizable.updateStoredSizes(b,d),d.$resizable_container=a('<div class="'+c.css.resizableContainer+'">').css({top:l}).insertBefore(j),g=0;g<b.columns;g++)f=b.$headerIndexed[g],i=c.getColumnData(b.table,b.headers,g),e="false"===c.getData(f,i,"resizable"),e||a('<div class="'+c.css.resizableHandle+'">').appendTo(d.$resizable_container).attr({"data-column":g,unselectable:"on"}).data("header",f).bind("selectstart",!1);c.resizable.setHandlePosition(b,d),c.resizable.bindings(b,d)}},updateStoredSizes:function(a,b){var c,d,e=a.columns,f=b.resizable_vars;for(f.storedSizes=[],c=0;e>c;c++)d=a.$headerIndexed[c],f.storedSizes[c]=d.is(":visible")?d.width():0},setWidth:function(a,b,c){a.css({width:b,"min-width":c?b:"","max-width":c?b:""})},setWidths:function(b,d,e){var f,g,h=d.resizable_vars,i=a(b.namespace+"_extra_headers"),j=b.$table.children("colgroup").children("col");if(e=e||h.storedSizes||[],e.length){for(f=0;f<b.columns;f++)c.resizable.setWidth(b.$headerIndexed[f],e[f],h.overflow),i.length&&(g=i.eq(f).add(j.eq(f)),c.resizable.setWidth(g,e[f],h.overflow));g=a(b.namespace+"_extra_table"),g.length&&!c.hasWidget(b.table,"scroller")&&c.resizable.setWidth(g,b.$table.outerWidth(),h.overflow)}},setHandlePosition:function(b,d){var e,f=c.hasWidget(b.table,"scroller"),g=b.$table.height(),h=d.$resizable_container.children(),i=Math.floor(h.width()/2);f&&(g=0,b.$table.closest("."+c.css.scrollerWrap).children().each(function(){var b=a(this);g+=b.filter('[style*="height"]').length?b.height():b.children("table").height()})),e=b.$table.position().left,h.each(function(){var c=a(this),f=parseInt(c.attr("data-column"),10),h=b.columns-1,j=c.data("header");j&&(j.is(":visible")?(h>f||f===h&&d.resizable_addLastColumn)&&c.css({display:"inline-block",height:g,left:j.position().left-e+j.outerWidth()-i}):c.hide())})},toggleTextSelection:function(b,d,e){var f=b.namespace+"tsresize";d.resizable_vars.disabled=e,a("body").toggleClass(c.css.resizableNoSelect,e),e?a("body").attr("unselectable","on").bind("selectstart"+f,!1):a("body").removeAttr("unselectable").unbind("selectstart"+f)},bindings:function(d,e){var f=d.namespace+"tsresize";e.$resizable_container.children().bind("mousedown",function(b){var f,g=e.resizable_vars,h=a(d.namespace+"_extra_headers"),i=a(b.target).data("header");f=parseInt(i.attr("data-column"),10),g.$target=i=i.add(h.filter('[data-column="'+f+'"]')),g.target=f,g.$next=b.shiftKey||e.resizable_targetLast?i.parent().children().not(".resizable-false").filter(":last"):i.nextAll(":not(.resizable-false)").eq(0),f=parseInt(g.$next.attr("data-column"),10),g.$next=g.$next.add(h.filter('[data-column="'+f+'"]')),g.next=f,g.mouseXPosition=b.pageX,c.resizable.updateStoredSizes(d,e),c.resizable.toggleTextSelection(d,e,!0)}),a(document).bind("mousemove"+f,function(a){var b=e.resizable_vars;b.disabled&&0!==b.mouseXPosition&&b.$target&&(e.resizable_throttle?(clearTimeout(b.timer),b.timer=setTimeout(function(){c.resizable.mouseMove(d,e,a)},isNaN(e.resizable_throttle)?5:e.resizable_throttle)):c.resizable.mouseMove(d,e,a))}).bind("mouseup"+f,function(){e.resizable_vars.disabled&&(c.resizable.toggleTextSelection(d,e,!1),c.resizable.stopResize(d,e),c.resizable.setHandlePosition(d,e))}),a(b).bind("resize"+f+" resizeEnd"+f,function(){c.resizable.setHandlePosition(d,e)}),d.$table.bind("columnUpdate"+f,function(){c.resizable.setHandlePosition(d,e)}).find("thead:first").add(a(d.namespace+"_extra_table").find("thead:first")).bind("contextmenu"+f,function(){var a=0===e.resizable_vars.storedSizes.length;return c.resizableReset(d.table),c.resizable.setHandlePosition(d,e),e.resizable_vars.storedSizes=[],a})},mouseMove:function(b,d,e){if(0!==d.resizable_vars.mouseXPosition&&d.resizable_vars.$target){var f,g=0,h=d.resizable_vars,i=h.$next,j=h.storedSizes[h.target],k=e.pageX-h.mouseXPosition;if(h.overflow){if(j+k>0){for(h.storedSizes[h.target]+=k,c.resizable.setWidth(h.$target,h.storedSizes[h.target],!0),f=0;f<b.columns;f++)g+=h.storedSizes[f];c.resizable.setWidth(b.$table.add(a(b.namespace+"_extra_table")),g)}i.length||(h.$wrap[0].scrollLeft=b.$table.width())}else h.fullWidth?(h.storedSizes[h.target]+=k,h.storedSizes[h.next]-=k,c.resizable.setWidths(b,d)):(h.storedSizes[h.target]+=k,c.resizable.setWidths(b,d));h.mouseXPosition=e.pageX,b.$table.triggerHandler("stickyHeadersUpdate")}},stopResize:function(a,b){var d=b.resizable_vars;c.resizable.updateStoredSizes(a,b),d.useStorage&&(c.storage(a.table,c.css.resizableStorage,d.storedSizes),c.storage(a.table,"tablesorter-table-resized-width",a.$table.width())),d.mouseXPosition=0,d.$target=d.$next=null,a.$table.triggerHandler("stickyHeadersUpdate")}},c.addWidget({id:"resizable",priority:40,options:{resizable:!0,resizable_addLastColumn:!1,resizable_widths:[],resizable_throttle:!1,resizable_targetLast:!1,resizable_fullWidth:null},init:function(a,b,d,e){c.resizable.init(d,e)},remove:function(b,d,e,f){if(e.$resizable_container){var g=d.namespace+"tsresize";d.$table.add(a(d.namespace+"_extra_table")).removeClass("hasResizable").children("thead").unbind("contextmenu"+g),e.$resizable_container.remove(),c.resizable.toggleTextSelection(d,e,!1),c.resizableReset(b,f),a(document).unbind("mousemove"+g+" mouseup"+g)}}}),c.resizableReset=function(b,d){a(b).each(function(){var a,e,f=this.config,g=f&&f.widgetOptions,h=g.resizable_vars;if(b&&f&&f.$headerIndexed.length){for(h.overflow&&h.tableWidth&&(c.resizable.setWidth(f.$table,h.tableWidth,!0),h.useStorage&&c.storage(b,"tablesorter-table-resized-width","auto")),a=0;a<f.columns;a++)e=f.$headerIndexed[a],g.resizable_widths&&g.resizable_widths[a]?c.resizable.setWidth(e,g.resizable_widths[a],h.overflow):e.hasClass("resizable-false")||c.resizable.setWidth(e,"",h.overflow);f.$table.triggerHandler("stickyHeadersUpdate"),c.storage&&!d&&c.storage(this,c.css.resizableStorage,{})}})}}(jQuery,window),function(a){"use strict";var b=a.tablesorter||{};b.addWidget({id:"saveSort",priority:20,options:{saveSort:!0},init:function(a,b,c,d){b.format(a,c,d,!0)},format:function(c,d,e,f){var g,h,i=d.$table,j=e.saveSort!==!1,k={sortList:d.sortList};d.debug&&(h=new Date),i.hasClass("hasSaveSort")?j&&c.hasInitialized&&b.storage&&(b.storage(c,"tablesorter-savesort",k),d.debug&&console.log("saveSort widget: Saving last sort: "+d.sortList+b.benchmark(h))):(i.addClass("hasSaveSort"),k="",b.storage&&(g=b.storage(c,"tablesorter-savesort"),k=g&&g.hasOwnProperty("sortList")&&a.isArray(g.sortList)?g.sortList:"",d.debug&&console.log('saveSort: Last sort loaded: "'+k+'"'+b.benchmark(h)),i.bind("saveSortReset",function(a){a.stopPropagation(),b.storage(c,"tablesorter-savesort","")})),f&&k&&k.length>0?d.sortList=k:c.hasInitialized&&k&&k.length>0&&b.sortOn(d,k))},remove:function(a,c){c.$table.removeClass("hasSaveSort"),b.storage&&b.storage(a,"tablesorter-savesort","")}})}(jQuery),a.tablesorter});;
