PageSourceSearch

https://www.accountant.nl/static/accountant/js/accountant.js?v=UnNEkaYB2wNYN5qEedf0a6_1PFxi-A6V374Dly6bJwU

js accountant.nl collected 2026-10-02 04:10:27 UTC 39,898 bytes, 951 lines download raw bytes

1// Cannot be minified because of Recaptch-related code.
2$.ajaxSetup({ cache: false });
3
4var accountant = accountant || {};
5
6var accountant = (function () {
7
8    // http://stackoverflow.com/questions/3514784/what-is-the-best-way-to-detect-a-mobile-device-in-jquery
9    var isMobile = false; //initiate as false
10    // device detection
11    if (/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|ipad|iris|kindle|Android|Silk|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(navigator.userAgent)
12        || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(navigator.userAgent.
12substr(0, 4))) isMobile = true;
13
14    var _filter = function (element, elementToSearch) {
15        var value = $(element).val().toLowerCase();
16
17        $(elementToSearch).each(function () {
18            if ($(this).text().toLowerCase().search(value) > -1) {
19                $(this).show();
20            } else {
21                $(this).hide();
22            }
23        });
24    },
25        _loadReactions = function (take, url) {
26            $.ajax({
27                url: url + "?reactions-take=" + take,
28            }).done(function (data) {
29                var reactions = $("#reactions-container", data);
30                $('#reactions-container').html(reactions);
31                recheckScrollColumns();
32            });
33
34            return false;
35        },
36        _loadMoreArticles = function (loadMoreButton, loadMoreUrl, htmlSelector, articleSelector, scroll) {
37            var loadMoreContainer = loadMoreButton.attr('data-container-class');
38            var parsedTake = parseInt(loadMoreButton.attr('data-take'));
39
40            $.ajax({
41                url: loadMoreUrl,
42            }).done(function (data) {
43                var articlesHtml = $(htmlSelector, data);
44                var articlesCount = articlesHtml.length;
45
46                if (articleSelector != undefined) {
47                    articlesCount = $(articleSelector, articlesHtml).length
48                }
49
50                /* We retrieved one extra article to determine if we need to hide the load more button */
51                if (articlesCount > parsedTake) {
52                    articlesHtml = articlesHtml.slice(0, articlesHtml.length - 1);
53                }
54                else {
55                    loadMoreButton.hide();
56                }
57
58                $(loadMoreContainer).append(articlesHtml);
59                $(window).scrollTop(scroll);
60            });
61        },
62        _initializeLoadMoreButton = function () {
63            $("a.jsShowMoreArticles").on('click', function (event) {
64                event.preventDefault();
65
66                var scroll = $(window).scrollTop();
67                var loadMoreButton = $(this);
68                var parsedTake = parseInt($(this).attr('data-take'));
69                var parsedSkip = parseInt($(this).attr('data-skip'));
70                var loadMoreUrl = $(this).attr('data-url') +
71                    "loadmorearticles?take=" + (parsedTake + 1) +
72                    "&skip=" + parsedSkip +
73                    "&folderid=" + $(this).attr('data-folder-id') +
74                    "&format=" + $(this).attr('data-format');
75                var htmlSelector = $(this).attr('data-html-selector');
76                var articleSelector = $(this).attr('data-article-selector');
77
78                accountant.loadMoreArticles(loadMoreButton, loadMoreUrl, htmlSelector, articleSelector, scroll);
79
80                $(this).attr('data-skip', parsedSkip + parsedTake);
81            });
82        },
83        _loadDisciplinaries = function (url, year) {
84            $.ajax({
85                url: url + "?year=" + year,
86            }).done(function (data) {
87                var disciplinaries = $(".block-list-results", data);
88
89                $('.block-list-results').html(disciplinaries);
90
91                accountant.initializeDisciplinaryButtons();
92
93                $('html, body').animate({
94                    scrollTop: $('.block-list-results').position().top
95                }, 100, function () {
96                    $(".scroll-column-2").attr("style", "padding-top:0px");
97                    recheckScrollColumns();
98                });
99            });
100
101            return false;
102        },
103        _initializeDisciplinaryButtons = function () {
104            $("a.jsShowMoreCases").on('click', function (event) {
105                event.preventDefault();
106
107                var loadMoreButton = $(this);
108                var parsedTake = parseInt($(this).attr('data-take'));
109                var parsedSkip = parseInt($(this).attr('data-skip'));
110                var loadMoreUrl = $(this).attr('data-url') +
111                    "loadmorearticles?take=" + (parsedTake + 1) +
112                    "&skip=" + parsedSkip +
113                    "&folderid=" + $(this).attr('data-folder-id') +
114                    "&year=" + $(this).attr('data-year');
115                var htmlSelector = $(this).attr('data-html-selector');
116                var articleSelector = $(this).attr('data-article-selector');
117
118                accountant.loadMoreArticles(loadMoreButton, loadMoreUrl, htmlSelector, articleSelector);
119
120                loadMoreButton.attr('data-skip', parsedSkip + parsedTake);
121            });
122
123            $("a.year-disciplinaries").on('click', function (event) {
124                event.preventDefault();
125
126                var self = $(this);
127
128                var url = self.data('url');
129                var year = self.data('year');
130
131                accountant.loadDisciplinaries(url, year);
132            });
133        },
134        _loadDossierResults = function (folder, url) {
135            var querystring = "?folder=" + folder;
136
137            $.ajax({
138                url: url + querystring,
139            }).done(function (data) {
140                var dossierArticles = $(".content-left-column", data);
141                $('.content-left-column').html(dossierArticles[0].innerHTML);
142
143                accountant.initializeLoadMoreButton();
144
145                recheckScrollColumns();
146            });
147
148            return false;
149        },
150        _extractErrors = function (jqXhr, element) {
151            var data = JSON.parse(jqXhr.responseText);
152
153            if (data.hasOwnProperty('ModelState')) {
154                $(element).next().empty();
155
156                $.each(data.ModelState, function (key, value) {
157                    $(element).next().append($('<li>').text(value[0]));
158                });
159            }
160        },
161        _loadComments = function (pageId) {
162            var markup = "<article class='reaction'>" +
163                "<h1>${Name} <time class='left-line'>${Date}</time></h1>" +
164                "<p>{{html Text}}</p>" +
165                "</article>";
166
167            $.template("commentTemplate", markup);
168
169            $.ajax({
170                url: "/api/comments/" + pageId,
171                type: "GET",
172                accept: "application/json;charset=utf-8",
173                jsonp: "$callback",
174                success: showComments,
175                error: function (jqXhr, status, errorThrown) {
176                    $("#reactions-list").html("<p>Het laden van de reacties is niet gelukt.</p>");
177                }
178            });
179
180            function returnDateFromString(dateValue) {
181                if (isNaN(Date.parse(dateValue))) {
182                    dateValue = dateValue + "0";
183                    if (isNaN(Date.parse(dateValue))) {
184                        return new Date();
185                    }
186                }
187                return new Date(dateValue);
188            }
189
190            function showComments(data) {
191                // replace the line breaks with the break html element otherwise it won't be displayed correctly
192                $.each(data, function (item) {
193                    data[item].Text = data[item].Text.replace(/(\r\n|\n\r|\r|\n)/g, '<br />');
194                });
195                $("#reactions-list").empty();
196
197                $.tmpl("commentTemplate", data)
198                    .appendTo("#reactions-list");
199
200                $(".article-react-count").text(data.length);
201
202                var reactText = data.length == 1 ? "reactie" : "reacties";
203                $(".article-react-text").text(reactText);
204
205                var test = "";
206                var dates = $("#reactions-list time");
207                $.each(dates, function (index, date) {
208                    var dateValue = $(date).text();
209                    var parsedDate = returnDateFromString(dateValue); //new Date(dateValue);
210                    test += dateValue + " - " + parsedDate + "\n";
211
212                    $(date).text(parsedDate.getDate() + " " + parsedDate.getMonthName() + " " + parsedDate.getFullYear());
213                });
214
215                $.each($("#reactions-list article.reaction"), function (index, item) {
216                    var storeId = $(item).find(".rating a.positive").data("storeid");
217                    if (storeId != null) {
218                        var commentVoted = accountant.getCookie(accountant.ALREADY_VOTED + storeId);
219                        if (undefined != commentVoted) {
220                            $(item).find(".rating").addClass("voted");
221                            if (commentVoted == "up") {
222                                $(item).find(".rating a.positive").addClass("voted");
223                            } else {
224                                $(item).find(".rating a.negative").addClass("voted");
225                            }
226                        }
227                    }
228                });
229                recheckScrollColumns();
230                window.mtcaptcha?.resetUI();
231            };
232        },
233        _search = function (event, pagetype, sortorder) {
234            event.preventDefault();
235
236            function showResults(data) {
237                $("#search-results").empty();
238
239                $.tmpl("searchResultsTemplate", data.Results)
240                    .appendTo("#search-results");
241            };
242
243            function showResultsWithoutTemplate(data) {
244                $("#search-results").empty();
245                if (data.Results.length > 0) {
246                    $.each(data.Results, function (key, value) {
247                        var result = "<article class='block-general no-shadow'>" +
248                            "<a href='" + value.FriendlyUrl + "' ctype='c' class='article'>" +
249                            "<span class='blocktype'>" + value.PageHead + "<time datetime='" + value.StartPublish + "' class='left-line'>" + value.StartPublishString + "</time></span>" +
250                            "<h1>" + value.Title + "</h1>" +
251                            "<p>" + value.IntroText + "<i class='icon-text-arrow-right'></i></p></a></article>";
252                        $("#search-results").append($.parseHTML(result, null, false));
253                    });
254                }
255                else { $("#search-results").html("<article class='block-general no-shadow'><span class='article'><p>Er zijn geen resultaten gevonden.</p></span></article>"); }
256
257            };
258
259            var markup = "<article class='block-general no-shadow'>" +
260                "<a href='${FriendlyUrl}' ctype='c' class='article'>" +
261                "<span class='blocktype'>${PageHead} <time datetime='${StartPublish}' class='left-line'>${StartPublish}</time></span>" +
262                "<h1>${Title}</h1>" +
263                "<p>${IntroText}<i class='icon-text-arrow-right'></i></p>" +
264                "</a>" +
265                "</article>";
266
267            $.template("searchResultsTemplate", markup);
268
269            var query = {
270                SearchText: $("#query").val(),
271                SortOrder: ""
272            };
273
274
275            if (pagetype == null || pagetype == '') {
276                var selectedPageTypes = [];
277                var elements = $('.search-wrapper .form-links a.active');
278                $.each(elements, function () {
279                    selectedPageTypes.push($(this).data("pagetype"));
280                });
281                query.PageTypes = selectedPageTypes;
282            }
283
284            if (sortorder === undefined || sortorder === null || sortorder === "") {
285
286                var selectedSortorder = $(".search-wrapper .form-sortorder a.active");
287
288                $.each(selectedSortorder, function () {
289                    query.SortOrder = $(this).data("sortorder");
290                });
291
292                if (query.SortOrder == undefined || query.SortOrder == null) {
293                    query.SortOrder = "Relevance";
294                }
295            }
296
297            if (query.SearchText) {
298                $.ajax({
299                    url: "/api/accsearch",
300                    type: "POST",
301                    data: JSON.stringify(query),
302                    contentType: "application/json;charset=utf-8",
303                    dataType: "json",
304                    jsonp: "$callback",
305                    success: showResultsWithoutTemplate,
306                    error: function (x, y, z) {
307                        $("#search-results").html("<article class='block-general no-shadow'><span class='article'><p>Er zijn geen resultaten gevonden.</p></span></article>");
308                    }
309                });
310            }
311
312        },
313        _searchDisciplinary = function (event) {
314            event.preventDefault();
315
316            function showResultsWithoutTemplate(data) {
317                $("#jsSearchDisciplinaryResults").empty();
318
319                $.each(data, function (key, value) {
320                    var result = "<a href='" + value.FriendlyUrl + "' class='result-row'>" +
321                        "<time datetime='" + value.StatementDate + "' class='width-20'>" + value.StatementDateString + "</time>" +
322                        "<span class='width-55'>" + value.Title + "</span>" +
323                        "<span class='width-25'>" + value.CaseNumber + "</span></a>";
324
325                    $("#jsSearchDisciplinaryResults").append(result);
326                });
327            };
328
329            var query = {
330                SearchText: $("#disciplinary-search-value").val(),
331                PageType: "DisciplinaryPageType"
332            };
333
334            $.ajax({
335                url: "/api/accsearch/disciplinary",
336                type: "POST",
337                data: JSON.stringify(query),
338                contentType: "application/json;charset=utf-8",
339                dataType: "json",
340                jsonp: "$callback",
341                success: showResultsWithoutTemplate,
342                error: function (x, y, z) {
343                    $("#jsSearchDisciplinaryResults").append("<div class='result-row'>Er zijn geen resultaten gevonden.</div>");
344                }
345            });
346        },
347        _setCookie = function (name, value, exdays) {
348            var exdate = new Date();
349            exdate.setDate(exdate.getDate() + exdays);
350            var cookieValue = escape(value) + ((exdays == null) ? "" : "; path=/; expires=" + exdate.toUTCString());
351            document.cookie = name + "=" + cookieValue;
352        },
353        _getCookie = function (name) {
354            var i, x, y, cookies = document.cookie.split(";");
355            for (i = 0; i < cookies.length; i++) {
356                x = cookies[i].substr(0, cookies[i].indexOf("="));
357                y = cookies[i].substr(cookies[i].indexOf("=") + 1);
358                x = x.replace(/^\s+|\s+$/g, "");
359                if (x == name) {
360                    return unescape(y);
361                }
362            }
363        },      
364        _setSessionValue = function (name, value) {
365            sessionStorage.setItem(name, value);
366        },
367        _getSessionValue = function (name) {
368            return sessionStorage.getItem(name);
369        },
370        _getTheorumResults = function (id) {
371            $.ajax({
372                url: "/api/votes/" + id,
373                type: "GET",
374                async: false,
375                success: function (data, textStatus, jqXhr) {
376                    var elementsNumber = $(".theorum-results-number span strong");
377                    $(elementsNumber[0]).text(data["Yes"]);
378                    $(elementsNumber[1]).text(data["No"]);
379                    $(elementsNumber[2]).text(data["Maybe"]);
380                    var elementsPercentage = $(".theorum-results-percentage span span");
381                    $(elementsPercentage[0]).text("(" + data["YesPercentage"] + "%)");
382                    $(elementsPercentage[1]).text("(" + data["NoPercentage"] + "%)");
383                    $(elementsPercentage[2]).text("(" + data["MaybePercentage"] + "%)");
384                }
385            });
386        },
387        _updateQueryStringParameter = function (uri, key, value) {
388            var re = new RegExp("([?&])" + key + "=.*?(&|$)", "i");
389            var separator = uri.indexOf('?') !== -1 ? "&" : "?";
390            if (uri.match(re)) {
391                return uri.replace(re, '$1' + key + "=" + value + '$2');
392            }
393            else {
394                return uri + separator + key + "=" + value;
395            }
396        },
397        _getQueryStringParameter = function (paramName) {
398            var searchString = window.location.search.substring(1),
399                i, val, params = searchString.split("&");
400
401            for (i = 0; i < params.length; i++) {
402                val = params[i].split("=");
403                if (val[0] == paramName) {
404                    return val[1];
405                }
406            }
407            return null;
408        },
409
410        // Constants
411        _theorumAlreadyVoted = "theorum-already-voted",
412        _theorumId = "theorum-id",
413        _alreadyVoted = "already-voted-";
414
415    return {
416        extractErrors: _extractErrors,
417        filter: _filter,
418        loadReactions: _loadReactions,
419        loadComments: _loadComments,
420        loadDossierResults: _loadDossierResults,
421        search: _search,
422        searchDisciplinary: _searchDisciplinary,
423        loadMoreArticles: _loadMoreArticles,
424        initializeLoadMoreButton: _initializeLoadMoreButton,
425        loadDisciplinaries: _loadDisciplinaries,
426        initializeDisciplinaryButtons: _initializeDisciplinaryButtons,
427        setCookie: _setCookie,
428        getCookie: _getCookie,
429        setSessionValue: _setSessionValue,
430        getSessionValue: _getSessionValue,
431        getTheorumResults: _getTheorumResults,
432        updateQueryStringParameter: _updateQueryStringParameter,
433        getQueryStringParameter: _getQueryStringParameter,
434
435        ISMOBILE: isMobile,
436
437        // Constants
438        THEORUM_ALREADY_VOTED: _theorumAlreadyVoted,
439        THEORUM_ID: _theorumId,
440        ALREADY_VOTED: _alreadyVoted
441    };
442})();
443
444
445$(function () {
446    // Check whether to disable the vote buttons on the Theorum block
447    var theorumBlocksContainer = $(".theorum-buttons");
448    if (theorumBlocksContainer.length > 0) {
449        var theorumBlocks = theorumBlocksContainer.find("a[data-vote-type='TheorumBlock']");
450        var theorumBlock_VoteId = theorumBlocks.data('vote-id');
451
452        var theorumAlreadyVoted = accountant.getCookie(accountant.THEORUM_ALREADY_VOTED + theorumBlock_VoteId);
453
454        if (theorumAlreadyVoted) {
455            $(".theorum-buttons").hide();
456            accountant.getTheorumResults(theorumBlock_VoteId);
457            $(".theorum-results-number").show();
458            $(".theorum-results-percentage").show();
459        } else {
460            $(".theorum-buttons").show();
461            $(".theorum-results-number").hide();
462            $(".theorum-results-percentage").hide();
463        }
464    }
465
466    //Check to highlight the vote on opinion
467    var opinionId = $("#articleId").val();
468    if (undefined != opinionId) {
469        var opinionVoted = accountant.getCookie(accountant.ALREADY_VOTED + opinionId);
470
471        if (undefined != opinionVoted) {
472            $("div.judgement").addClass("voted");
473            if (opinionVoted == "yes") {
474                $("div.judgement a.positive").addClass("voted");
475
476            } else {
477                $("div.judgement a.negative").addClass("voted");
478            }
479        }
480    }
481
482    // Check if comments need to be loaded
483    if ($("#article-react-pageid").length == 1) {
484        var pageId = $("#article-react-pageid").val();
485        accountant.loadComments(pageId);
486    }
487
488    // Check to see if the search bar needs to be opened
489    var fromSearch = accountant.getQueryStringParameter("search");
490    if (undefined != fromSearch) {
491
492        // open search bar
493        //$('.site-header .icon-search').trigger('click');
494    }
495
496    // Capture the search form submit
497    $(document).on('submit', '.site-search form', function (e) {
498        e.preventDefault();
499        accountant.search(e, null, null);
500    });
501
502    $("#disciplinary-search button").on('click', function (e) {
503        e.preventDefault();
504        $("#jsSearchDisciplinaryResults").empty();
505        accountant.searchDisciplinary(e);
506    });
507
508    var delay = (function () {
509        var timer = 0;
510        return function (callback, ms) {
511            clearTimeout(timer);
512            timer = setTimeout(callback, ms);
513        }
514    })();
515
516    $(document).on('keyup', '.search-wrapper form :text', function (e) {
517        e.preventDefault();
518        var textbox = $(this);
519        delay(function () {
520            accountant.search(e, null, null);
521
522            var self = $(this);
523            accountant.setSessionValue('search-query', textbox.val());
524        }, 1000);
525    });
526
527    $(".search-wrapper .form-sortorder a").on('click', function (e) {
528        e.preventDefault();
529
530        //var sortorder = $(this).attr('data-sortorder');
531
532        $(".search-wrapper .form-sortorder a[data-sortorder = 'Relevance']").removeClass('active');
533        $(".search-wrapper .form-sortorder a[data-sortorder = 'Date']").removeClass('active');
534
535        $(this).addClass('active');
536
537        accountant.search(e, null, null);
538    });
539
540    $("#search-results article").on('click', function (e) {
541        e.preventDefault();
542
543        var link = $('a', this);
544        var uri = link.attr('href');
545
546        window.location = accountant.updateQueryStringParameter(uri, "search", "true");
547    });
548
549    $(".comment-vote").on('click', function (e) {
550        e.preventDefault();
551
552        var self = $(this);
553
554        var storeId = $(this).attr('data-storeid');
555        var vote = $(this).attr('data-vote');
556
557        var hasAlreadyVoted = accountant.getCookie(accountant.ALREADY_VOTED + storeId);
558        if (undefined != hasAlreadyVoted) return false;
559
560        self.addClass("voted");
561        self.parent().addClass("voted");
562
563        var commentVote = {
564            storeId: storeId,
565            vote: vote
566        };
567
568        $.ajax({
569            url: "/api/comments/vote",
570            type: "POST",
571            contentType: "application/json;charset=utf-8",
572            data: JSON.stringify(commentVote),
573            success: function (data) {
574                var parent = $(self).parent();
575                $(parent).find('.positive span.number').text(data.Upvote);
576                $(parent).find('.negative span.number').text(data.Downvote);
577
578                accountant.setCookie(accountant.ALREADY_VOTED + storeId, vote, 365);
579            }
580        });
581
582        return false;
583
584    });
585
586    $(".vote").on('click', function (e) {
587        e.preventDefault();
588
589        var self = $(this);
590        var voteId = self.data('vote-id');
591        var value = self.data('vote-value');
592        var voteType = self.data('vote-type');
593
594
595        if (voteType == "TheorumBlock") {
596
597            var cookieName = accountant.THEORUM_ALREADY_VOTED + voteId;
598            accountant.setCookie(cookieName, true, 365);
599
600            $(".theorum-buttons").hide();
601            accountant.getTheorumResults(voteId);
602            $(".theorum-results-number").show()
603            $(".theorum-results-percentage").show()
604        }
605        else {
606            var cookieName = accountant.ALREADY_VOTED + voteId;
607
608            var hasAlreadyVoted = accountant.getCookie(accountant.ALREADY_VOTED + voteId);
609            if (undefined != hasAlreadyVoted) return false;
610
611            accountant.setCookie(cookieName, value, 365);
612            self.addClass("voted");
613            self.parent().addClass("voted");
614        }
615
616        var voteItem = {
617            id: voteId,
618            vote: value,
619            voteType: voteType
620        }
621
622        $.ajax({
623            url: "/api/votes",
624            type: "POST",
625            contentType: "application/json;charset=utf-8",
626            data: JSON.stringify(voteItem),
627            success: function (data) {
628                if (voteType == "TheorumBlock") {
629                    var items = $(self).parent().parent();
630                    var elementsNumber = (items).find(".theorum-results-number span strong");
631                    $(elementsNumber[0]).text(data["Yes"]);
632                    $(elementsNumber[1]).text(data["No"]);
633                    $(elementsNumber[2]).text(data["Maybe"]);
634                    var elementsPercentage = (items).find(".theorum-results-percentage span span");
635                    $(elementsPercentage[0]).text("(" + data["YesPercentage"] + "%)");
636                    $(elementsPercentage[1]).text("(" + data["NoPercentage"] + "%)");
637                    $(elementsPercentage[2]).text("(" + data["MaybePercentage"] + "%)");
638                }
639                else {
640                    if ($(self).hasClass("positive")) {
641                        $(self).find(".icon-thumbs-up").text(" " + data.Yes);
642                    }
643                    else {
644                        $(self).find(".icon-thumbs-down").text(" " + data.No);
645                    }
646                }
647            }
648        });
649
650        return false;
651    });
652
653    $(".newsletter-form form").on("submit", function (event) {
654        var newsLetterItem = {
655            email: $(".newsletter-form form input[name='email']").val(),
656            token: $(".newsletter-form form input[name='mtcaptcha-verifiedtoken']").val()
657        };
658        $.ajax({
659            url: "/api/newsletter/",
660            type: "POST",
661            contentType: "application/json;charset=utf-8",
662            data: JSON.stringify(newsLetterItem),
663            success: function (data, textStatus, jqXhr) {
664                $('.newsletter-form form .text').removeClass("error");
665                $('.newsletter-form form .error-notice').hide();
666                $(".newsletter-form form input[name='email']").val("");
667                var newDoc = document.open("text/html", "replace");
668                newDoc.write(data);
669                newDoc.close();
670                window.mtcaptcha?.resetUI();
671            },
672            error: function (jqXhr, status, errorThrown) {
673                $('.newsletter-form form .text').addClass("error");
674                var errorMessage = $(".newsletter-form form input[name='email']").data('error-message');
675                $('.newsletter-form form .error-notice').empty();
676                $('.newsletter-form form .error-notice').append(errorMessage);
677                $('.newsletter-form form .error-notice').show();
678                window.mtcaptcha?.resetUI();
679            }
680        });
681
682        return false;
683
684    });
685
686    $("#send-page-form").on("submit", function (event) {
687        var sendPage = {
688            toEmailAddress: $('#toEmail').val(),
689            toName: $('#toName').val(),
690            fromEmailAddress: $('#fromEmail').val(),
691            fromName: $('#fromName').val(),
692            bodyText: $('#bodyText').val(),
693            url: $(this).data("pageurl"),
694            pageTitle: $(this).data("pagetitle")
695        };
696        $.ajax({
697            url: "/api/sendpage/",
698            type: "POST",
699            contentType: "application/json;charset=utf-8",
700            data: JSON.stringify(sendPage),
701            success: function (data) {
702                $('#toEmail').val('');
703                $('#toName').val('');
704                $('#fromEmail').val('');
705                $('#fromName').val('');
706                $('#bodyText').val('');
707
708                checkPlaceholders();
709
710                $('.block-email-form').toggleClass('visible');
711            },
712            error: function (jqXhr, status, errorThrown) {
713                $("#send-page-form .form-group span").removeClass('error');
714                if (jqXhr.responseJSON != null) {
715                    var modelState = jqXhr.responseJSON.ModelState;
716                    if (modelState != null) {
717                        if (modelState.hasOwnProperty('sendPageEmail.ToName')) {
718                            $('#toName').parent().addClass('error');
719                        }
720                        if (modelState.hasOwnProperty('sendPageEmail.ToEmailAddress')) {
721                            $('#toEmail').parent().addClass('error');
722                        }
723                        if (modelState.hasOwnProperty('sendPageEmail.FromName')) {
724                            $('#fromName').parent().addClass('error');
725                        }
726                        if (modelState.hasOwnProperty('sendPageEmail.FromEmailAddress')) {
727                            $('#fromEmail').parent().addClass('error');
728                        }
729                        if (modelState.hasOwnProperty('sendPageEmail.BodyText')) {
730                            $('#bodyText').parent().addClass('error');
731                        }
732                    }
733                }
734            }
735        });
736        return false;
737    });
738
739    $("#article-react-form").on("submit", function (event) {
740        var commentItem = {
741            pageId: $('#article-react-pageid').val(),
742            name: $('#article-react-name').pVal(),
743            email: $('#article-react-email').pVal(),
744            notify: $('#article-react-notify').is(':checked'),
745            comment: $('#article-react-comment').pVal(),
746            token: $(".article-react input[name='mtcaptcha-verifiedtoken']").val()
747        };
748
749        $.ajax({
750            url: "/api/comments/",
751            type: "POST",
752            contentType: "application/json;charset=utf-8",
753            data: JSON.stringify(commentItem),
754            success: function (data, textStatus, jqXhr) {
755                $('.form-errors').empty();
756                $('#article-react-name').val("");
757                $('#article-react-email').val("");
758                $('#article-react-comment').val("");
759                window.mtcaptcha?.resetUI();
760
761                checkPlaceholders();
762
763                // Clear all errors
764                $(".site-reactions form input").removeClass('error');
765                $(".site-reactions form div.error-notice").empty();
766
767
768                var pageId = $('#article-react-pageid').val();
769                accountant.loadComments(pageId);
770
771                $('.site-reactions').animate({
772                    scrollTop: $('#reactions-list').position().top + 50
773                });
774
775                if (data.IsVerifiedEmail == false) {
776                    $("#EmailConfirmationNotification").show();
777                }
778            },
779            error: function (jqXhr, status, errorThrown) {
780
781                // Clear all errors
782                $(".site-reactions form input").removeClass('error');
783                $(".site-reactions form div.error-notice").empty();
784
785                // Set errors
786                var errorMessage = "";
787                var element = "#article-react-form";
788                var data = JSON.parse(jqXhr.responseText);
789                if (data.hasOwnProperty('errors') || data.hasOwnProperty('NumberOfReactions')) {
790                    $(element).next().empty();
791                }
792
793                if (data.hasOwnProperty('errors')) {
794                    if (data.errors.hasOwnProperty('Name')) {
795                        errorMessage = data.errors['Name'][0];
796                        $('#article-react-name').addClass('error');
797                        $('#article-react-name').next('div.error-notice').append(errorMessage);
798                    }
799
800                    if (data.errors.hasOwnProperty('Email')) {
801                        errorMessage = data.errors['Email'][0];
802                        $('#article-react-email').addClass('error');
803                        $('#article-react-email').next('div.error-notice').append(errorMessage);
804                    }
805
806                    if (data.errors.hasOwnProperty('Comment')) {
807                        errorMessage = data.errors['Comment'][0];
808                        $('#article-react-comment').next('div.error-notice').append(errorMessage);
809                    }
810
811                    if (data.errors.hasOwnProperty('Token')) {
812                        $('#article-react-captcha').addClass('error');
813                        $('#article-react-captcha').next('div.error-notice').append("De captcha is vereist");
814                    }
815
816                    if (data.errors.hasOwnProperty('Captcha')) {
817                        $('#article-react-captcha').addClass('error');
818                        $('#article-react-captcha').next('div.error-notice').append("De captcha is niet correct");
819                        window.mtcaptcha?.resetUI();
820                    }
821                }
822
823                if (data.hasOwnProperty('NumberOfReactions')) {
824                    $('div.number-of-reactions.error-notice').append("Uw mag maximaal drie reacties geven bij een artikel");
825                }
826            }
827        });
828
829        return false;
830    });
831
832    $("a.more-reactions").on('click', function (event) {
833        event.preventDefault();
834        var take = $("a.more-reactions").attr('data-take');
835        var number = $("a.more-reactions").attr('data-number');
836        var url = $("a.more-reactions").attr('data-url');
837
838        accountant.loadReactions(take, url);
839
840        take = parseInt(take) + parseInt(number);
841        $("a.more-reactions").attr('data-take', take);
842
843        accountant.loadReactions(take, url);
844    });
845
846    $("div.theme-filters a").on('click', function (event) {
847        event.preventDefault();
848
849        var self = $(this);
850
851        var folder = self.data('folder');
852        var url = self.data('url');
853
854        accountant.loadDossierResults(folder, url);
855
856        /* Remove all active classes on the links and set the active on the clicked link */
857        $("div.theme-filters a").removeClass("active");
858        self.addClass("active");
859    });
860
861    accountant.initializeLoadMoreButton();
862
863    accountant.initializeDisciplinaryButtons();
864
865    $("#job-search-block button").on('click', function (e) {
866        e.preventDefault();
867        var query = $.trim($("#jobSearch").val());
868        var template = $("#job-search-form").attr('data-search-url');
869        if (!query || !template) {
870            return;
871        }
872        var url = template.replace('{{searchterm}}', encodeURIComponent(query));
873        window.open(url, '_blank');
874    });
875
876    /* Specific binds for salary calculator */
877    $(".block-salary-widget .next-step").on('click', function (e) {
878        e.preventDefault();
879
880        var nextStep = 1;
881        var currentStep = 0;
882        if (!$(this).hasClass('first-step')) {
883            nextStep = $(this).parent().find("a.active").data('next-question');
884            currentStep = $(this).parent().find("a.active").data('current-question');
885        }
886
887        if (nextStep == undefined) {
888            return;
889        }
890
891        $(".block-salary-widget").data('current-step', currentStep);
892        $('.block-salary-widget .step-block:visible').fadeOut(500, function () {
893            $('.block-salary-widget .step-' + nextStep).fadeIn();
894        });
895    });
896
897    $(".block-salary-widget .prev-step").on('click', function (e) {
898        e.preventDefault();
899
900        var prevStep = 0;
901        if (!$(this).hasClass('last-step')) {
902            prevStep = $(".block-salary-widget").data('current-step');
903        }
904
905        $(".block-salary-widget").data('current-step', prevStep - 1);
906        $('.block-salary-widget .step-block:visible').fadeOut(500, function () {
907            $('.block-salary-widget .step-' + prevStep).fadeIn();
908        });
909    });
910
911    $(".block-salary-widget .answer").on('click', function (e) {
912        e.preventDefault();
913        $(this).parent().find('.answer').removeClass('active');
914        $(this).addClass('active');
915    });
916
917    $(document).on('touchend', '.article-page-prev, .article-page-next', function (e) {
918        var $this = $(this);
919        if (!$this.hasClass('hover')) {
920            e.preventDefault();
921            $this.addClass('hover');
922        }
923    });
924
925    Date.prototype.getMonthName = function (lang) {
926        lang = lang && (lang in Date.locale) ? lang : 'nl';
927        return Date.locale[lang].month_names[this.getMonth()];
928    };
929
930    Date.prototype.getShortMonthName = function (lang) {
931        lang = lang && (lang in Date.locale) ? lang : 'nl';
932        return Date.locale[lang].month_names_short[this.getMonth()];
933    };
934
935    Date.locale = {
936        nl: {
937            month_names: ['januari', 'februari', 'maart', 'april', 'mei', 'juni', 'juli', 'augustus', 'september', 'oktober', 'november', 'december'],
938            month_names_short: ['jan', 'feb', 'mar', 'apr', 'mei', 'jun', 'jul', 'aug', 'sep', 'oct', 'nov', 'dec']
939        }
940    };
941});
942
943// Helper methods (from: http://stackoverflow.com/a/11208765)
944$.fn.pVal = function () {
945    var $this = $(this),
946        val = $this.eq(0).val();
947    if (val === $this.attr("placeholder"))
948        return undefined;
949    else
950        return val;
951}

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.