PageSourceSearch

https://www.manifestescapes.com/content/js/calendar.js

js manifestescapes.com collected 2026-10-09 00:30:19 UTC 33,820 bytes, 794 lines download raw bytes

1/**
2 * Zabuto Calendar
3 *
4 * Dependencies
5 * - jQuery (2.0.3)
6 * - Twitter Bootstrap (3.0.2)
7 */
8
9if (typeof jQuery == 'undefined') {
10    throw new Error('jQuery is not loaded');
11}
12
13/**
14 * Create calendar
15 *
16 * @param options
17 * @returns {*}
18 */
19$.fn.zabuto_calendar = function (options) {
20    var opts = $.extend({}, $.fn.zabuto_calendar_defaults(), options);
21    var languageSettings = $.fn.zabuto_calendar_language(opts.language);
22    opts = $.extend({}, opts, languageSettings);
23
24    this.each(function () {
25        var $calendarElement = $(this);
26        $calendarElement.attr('id', "zabuto_calendar_" + Math.floor(Math.random() * 99999).toString(36));
27
28        $calendarElement.data('initYear', opts.year);
29        $calendarElement.data('initMonth', opts.month);
30        $calendarElement.data('monthLabels', opts.month_labels);
31        $calendarElement.data('weekStartsOn', opts.weekstartson);
32        $calendarElement.data('navIcons', opts.nav_icon);
33        $calendarElement.data('dowLabels', opts.dow_labels);
34        $calendarElement.data('showToday', opts.today);
35        $calendarElement.data('showDays', opts.show_days);
36        $calendarElement.data('showPrevious', opts.show_previous);
37        $calendarElement.data('showNext', opts.show_next);
38        $calendarElement.data('cellBorder', opts.cell_border);
39        $calendarElement.data('jsonData', opts.data);
40        $calendarElement.data('ajaxSettings', opts.ajax);
41        $calendarElement.data('legendList', opts.legend);
42        $calendarElement.data('actionFunction', opts.action);
43        $calendarElement.data('actionNavFunction', opts.action_nav);
44        $calendarElement.data('disabledDays', opts.disabled_days);
45        $calendarElement.data('disabledDates', opts.disabled_dates);
46
47        drawCalendar();
48
49        function drawCalendar() {
50            var dateInitYear = parseInt($calendarElement.data('initYear'));
51            var dateInitMonth = parseInt($calendarElement.data('initMonth')) - 1;
52            var dateInitObj = new Date(dateInitYear, dateInitMonth, 1, 0, 0, 0, 0);
53            $calendarElement.data('initDate', dateInitObj);
54
55            var tableClassHtml = ($calendarElement.data('cellBorder') === true) ? ' table-bordered' : '';
56
57            var $tableObj = $('<table class="table' + tableClassHtml + '"></table>');
58            $tableObj = drawTable($calendarElement, $tableObj, dateInitObj.getFullYear(), dateInitObj.getMonth());
59
60            var $legendObj = drawLegend($calendarElement);
61
62            var $containerHtml = $('<div class="zabuto_calendar"></div>');
63            $containerHtml.append($tableObj);
64            $containerHtml.append($legendObj);
65
66            $calendarElement.append($containerHtml);
67
68            var jsonData = $calendarElement.data('jsonData');
69            if (false !== jsonData) {
70                checkEvents($calendarElement, dateInitObj.getFullYear(), dateInitObj.getMonth());
71            }
72        }
73
74        function drawTable($calendarElement, $tableObj, year, month) {
75            var dateCurrObj = new Date(year, month, 1, 0, 0, 0, 0);
76            $calendarElement.data('currDate', dateCurrObj);
77
78            $tableObj.empty();
79            $tableObj = appendMonthHeader($calendarElement, $tableObj, year, month);
80            $tableObj = appendDayOfWeekHeader($calendarElement, $tableObj);
81            $tableObj = appendDaysOfMonth($calendarElement, $tableObj, year, month);
82            checkEvents($calendarElement, year, month);
83            return $tableObj;
84        }
85
86        function drawLegend($calendarElement) {
87            var $legendObj = $('<div class="legend" id="' + $calendarElement.attr('id') + '_legend"></div>');
88            var legend = $calendarElement.data('legendList');
89
90            /* Add in disabled legend if there are any days/dates*/
91            if ($calendarElement.data('disabledDays').length || $calendarElement.data('disabledDates').length) {
92                if (!legend.length) {
93                    legend = [];
94                }
95
96                legend.push({ type: "block", label: "Disabled", classname: "dow-disabled" });
97            }
98
99            if (typeof (legend) == 'object' && legend.length > 0) {
100                $(legend).each(function (index, item) {
101                    if (typeof (item) == 'object') {
102                        if ('type' in item) {
103                            var itemLabel = '';
104                            if ('label' in item) {
105                                itemLabel = item.label;
106                            }
107
108                            switch (item.type) {
109                                case 'text':
110                                    if (itemLabel !== '') {
111                                        var itemBadge = '';
112                                        if ('badge' in item) {
113                                            if (typeof (item.classname) === 'undefined') {
114                                                var badgeClassName = 'badge-event';
115                                            } else {
116                                                var badgeClassName = item.classname;
117                                            }
118                                            itemBadge = '<span class="badge ' + badgeClassName + '">' + item.badge + '</span> ';
119                                        }
120                                        $legendObj.append('<span class="legend-' + item.type + '">' + itemBadge + itemLabel + '</span>');
121                                    }
122                                    break;
123                                case 'block':
124                                    if (itemLabel !== '') {
125                                        itemLabel = '<span>' + itemLabel + '</span>';
126                                    }
127                                    if (typeof (item.classname) === 'undefined') {
128                                        var listClassName = 'event';
129                                    } else {
130                                        var listClassName = 'event-styled ' + item.classname;
131                                    }
132                                    $legendObj.append('<span class="legend-' + item.type + '"><ul class="legend"><li class="' + listClassName + '"></li></ul>' + itemLabel + '</span>');
133                                    break;
134                                case 'list':
135                                    if ('list' in item && typeof (item.list) == 'object' && item.list.length > 0) {
136                                        var $legendUl = $('<ul class="legend"></ul>');
137                                        $(item.list).each(function (listIndex, listClassName) {
138                                            $legendUl.append('<li class="' + listClassName + '"></li>');
139                                        });
140                                        $legendObj.append($legendUl);
141                                    }
142                                    break;
143                                case 'spacer':
144                                    $legendObj.append('<span class="legend-' + item.type + '"> </span>');
145                                    break;
146
147                            }
148                        }
149                    }
150                });
151            }
152
153            return $legendObj;
154        }
155
156        function appendMonthHeader($calendarElement, $tableObj, year, month) {
157            var navIcons = $calendarElement.data('navIcons');
158            var $prevMonthNavIcon = $('<span><span class="glyphicon glyphicon-chevron-left"></span></span>');
159            var $nextMonthNavIcon = $('<span><span class="glyphicon glyphicon-chevron-right"></span></span>');
160            if (typeof (navIcons) === 'object') {
161                if ('prev' in navIcons) {
162                    $prevMonthNavIcon.html(navIcons.prev);
163                }
164                if ('next' in navIcons) {
165                    $nextMonthNavIcon.html(navIcons.next);
166                }
167            }
168
169            var prevIsValid = $calendarElement.data('showPrevious');
170            if (typeof (prevIsValid) === 'number' || prevIsValid === false) {
171                prevIsValid = checkMonthLimit($calendarElement.data('showPrevious'), true);
172            }
173
174            var $prevMonthNav = $('<div class="calendar-month-navigation"></div>');
175            $prevMonthNav.attr('id', $calendarElement.attr('id') + '_nav-prev');
176            $prevMonthNav.data('navigation', 'prev');
177            if (prevIsValid !== false) {
178                var prevMonth = (month - 1);
179                var prevYear = year;
180                if (prevMonth == -1) {
181                    prevYear = (prevYear - 1);
182                    prevMonth = 11;
183                }
184                $prevMonthNav.data('to', { year: prevYear, month: (prevMonth + 1) });
185                $prevMonthNav.append($prevMonthNavIcon);
186                if (typeof ($calendarElement.data('actionNavFunction')) === 'function') {
187                    $prevMonthNav.click($calendarElement.data('actionNavFunction'));
188                }
189                $prevMonthNav.click(function (e) {
190                    drawTable($calendarElement, $tableObj, prevYear, prevMonth);
191                });
192            }
193
194            var nextIsValid = $calendarElement.data('showNext');
195            if (typeof (nextIsValid) === 'number' || nextIsValid === false) {
196                nextIsValid = checkMonthLimit($calendarElement.data('showNext'), false);
197            }
198
199            var $nextMonthNav = $('<div class="calendar-month-navigation"></div>');
200            $nextMonthNav.attr('id', $calendarElement.attr('id') + '_nav-next');
201            $nextMonthNav.data('navigation', 'next');
202            if (nextIsValid !== false) {
203                var nextMonth = (month + 1);
204                var nextYear = year;
205                if (nextMonth == 12) {
206                    nextYear = (nextYear + 1);
207                    nextMonth = 0;
208                }
209                $nextMonthNav.data('to', { year: nextYear, month: (nextMonth + 1) });
210                $nextMonthNav.append($nextMonthNavIcon);
211                if (typeof ($calendarElement.data('actionNavFunction')) === 'function') {
212                    $nextMonthNav.click($calendarElement.data('actionNavFunction'));
213                }
214                $nextMonthNav.click(function (e) {
215                    drawTable($calendarElement, $tableObj, nextYear, nextMonth);
216                });
217            }
218
219            var monthLabels = $calendarElement.data('monthLabels');
220
221            var $prevMonthCell = $('<td></td>').append($prevMonthNav);
222            var $nextMonthCell = $('<td></td>').append($nextMonthNav);
223
224            var $currMonthLabel = $('<span>' + monthLabels[month] + ' ' + year + '</span>');
225            $currMonthLabel.dblclick(function () {
226                var dateInitObj = $calendarElement.data('initDate');
227                drawTable($calendarElement, $tableObj, dateInitObj.getFullYear(), dateInitObj.getMonth());
228            });
229
230            var $currMonthCell = $('<td colspan="5"></td>');
231            $currMonthCell.append($currMonthLabel);
232
233            var $monthHeaderRow = $('<tr class="calendar-month-header"></tr>');
234            $monthHeaderRow.append($prevMonthCell, $currMonthCell, $nextMonthCell);
235
236            $tableObj.append($monthHeaderRow);
237            return $tableObj;
238        }
239
240        function appendDayOfWeekHeader($calendarElement, $tableObj) {
241            if ($calendarElement.data('showDays') === true) {
242                var weekStartsOn = $calendarElement.data('weekStartsOn');
243                var dowLabels = $calendarElement.data('dowLabels');
244                if (weekStartsOn === 0) {
245                    var dowFull = $.extend([], dowLabels);
246                    var sunArray = new Array(dowFull.pop());
247                    dowLabels = sunArray.concat(dowFull);
248                }
249
250                var $dowHeaderRow = $('<tr class="calendar-dow-header"></tr>');
251                $(dowLabels).each(function (index, value) {
252                    $dowHeaderRow.append('<th>' + value + '</th>');
253                });
254                $tableObj.append($dowHeaderRow);
255            }
256            return $tableObj;
257        }
258
259        function appendDaysOfMonth($calendarElement, $tableObj, year, month) {
260            var ajaxSettings = $calendarElement.data('ajaxSettings');
261            var weeksInMonth = calcWeeksInMonth(year, month);
262            var lastDayinMonth = calcLastDayInMonth(year, month);
263            var firstDow = calcDayOfWeek(year, month, 1);
264            var lastDow = calcDayOfWeek(year, month, lastDayinMonth);
265            var currDayOfMonth = 1;
266
267            var weekStartsOn = $calendarElement.data('weekStartsOn');
268            if (weekStartsOn === 0) {
269                if (lastDow == 6) {
270                    weeksInMonth++;
271                }
272                if (firstDow == 6 && (lastDow == 0 || lastDow == 1 || lastDow == 5)) {
273                    weeksInMonth--;
274                }
275                firstDow++;
276                if (firstDow == 7) {
277                    firstDow = 0;
278                }
279            }
280
281            for (var wk = 0; wk < weeksInMonth; wk++) {
282                var $dowRow = $('<tr class="calendar-dow"></tr>');
283                for (var dow = 0; dow < 7; dow++) {
284                    if (dow < firstDow || currDayOfMonth > lastDayinMonth) {
285                        $dowRow.append('<td></td>');
286                    } else {
287                        /* Days are enabled by default*/
288                        var dayDisabled = false;
289
290                        /* Check to see if the day is in the disabled days array*/
291                        if ($calendarElement.data('disabledDays').indexOf(dow) >= 0) {
292                            dayDisabled = true;
293                        }
294
295                        /* Check to see if the date is in the disabled dates array*/
296                        if (!dayDisabled && $calendarElement.data('disabledDates').indexOf(dateAsString(year, month, currDayOfMonth)) >= 0) {
297                            dayDisabled = true;
298                        }
299
300                        var dateId = $calendarElement.attr('id') + '_' + dateAsString(year, month, currDayOfMonth);
301                        var dayId = dateId + '_day';
302
303                        var $dayElement = $('<div id="' + dayId + '" class="day" >' + currDayOfMonth + '</div>');
304                        $dayElement.data('day', currDayOfMonth);
305
306                        if (isToday(year, month, currDayOfMonth)) {
307                            $dayElement.addClass('today');
308                            if ($calendarElement.data('showToday') === true) {
309                                $dayElement.html('<span class="badge badge-today">' + currDayOfMonth + '</span>');
310                            }
311                        }
312
313                        var $dowElement = $('<td id="' + dateId + '"></td>');
314                        $dowElement.append($dayElement);
315
316                        $dowElement.data('date', dateAsString(year, month, currDayOfMonth));
317                        $dowElement.data('hasEvent', false);
318
319                        if (!dayDisabled) {
320                            if (typeof ($calendarElement.data('actionFunction')) === 'function') {
321                                $dowElement.addClass('dow-clickable');
322                                $dowElement.click(function () {
323                                    $calendarElement.data('selectedDate', $(this).data('date'));
324                                });
325                                $dowElement.click($calendarElement.data('actionFunction'));
326                            }
327                        } else {
328                            $dowElement.addClass('dow-disabled');
329                        }
330
331                        $dowRow.append($dowElement);
332
333                        currDayOfMonth++;
334                    }
335                    if (dow == 6) {
336                        firstDow = 0;
337                    }
338                }
339
340                $tableObj.append($dowRow);
341            }
342            return $tableObj;
343        }
344
345        /* ----- Modal functions ----- */
346
347        function createModal(id, title, body, footer) {
348            var $modalHeaderButton = $('<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>');
349            var $modalHeaderTitle = $('<h4 class="modal-title" id="' + id + '_modal_title">' + title + '</h4>');
350
351            var $modalHeader = $('<div class="modal-header"></div>');
352            $modalHeader.append($modalHeaderButton);
353            $modalHeader.append($modalHeaderTitle);
354
355            var $modalBody = $('<div class="modal-body" id="' + id + '_modal_body">' + body + '</div>');
356
357            var $modalFooter = $('<div class="modal-footer" id="' + id + '_modal_footer"></div>');
358            if (typeof (footer) !== 'undefined') {
359                var $modalFooterAddOn = $('<div>' + footer + '</div>');
360                $modalFooter.append($modalFooterAddOn);
361            }
362
363            var $modalContent = $('<div class="modal-content"></div>');
364            $modalContent.append($modalHeader);
365            $modalContent.append($modalBody);
366            $modalContent.append($modalFooter);
367
368            var $modalDialog = $('<div class="modal-dialog"></div>');
369            $modalDialog.append($modalContent);
370
371            var $modalFade = $('<div class="modal fade" id="' + id + '_modal" tabindex="-1" role="dialog" aria-labelledby="' + id + '_modal_title" aria-hidden="true"></div>');
372            $modalFade.append($modalDialog);
373
374            $modalFade.data('dateId', id);
375            $modalFade.attr("dateId", id);
376
377            return $modalFade;
378        }
379
380        /* ----- Event functions ----- */
381
382        function checkEvents($calendarElement, year, month) {
383            var jsonData = $calendarElement.data('jsonData');
384            var ajaxSettings = $calendarElement.data('ajaxSettings');
385
386            $calendarElement.data('events', false);
387
388            if (false !== jsonData) {
389                return jsonEvents($calendarElement);
390            } else if (false !== ajaxSettings) {
391                return ajaxEvents($calendarElement, year, month);
392            }
393
394            return true;
395        }
396
397        function jsonEvents($calendarElement) {
398            var jsonData = $calendarElement.data('jsonData');
399            $calendarElement.data('events', jsonData);
400            drawEvents($calendarElement, 'json');
401            return true;
402        }
403
404        function ajaxEvents($calendarElement, year, month) {
405            var ajaxSettings = $calendarElement.data('ajaxSettings');
406
407            if (typeof (ajaxSettings) != 'object' || typeof (ajaxSettings.url) == 'undefined') {
408                alert('Invalid calendar event settings');
409                return false;
410            }
411
412            var data = { year: year, month: (month + 1) };
413
414            $.ajax({
415                type: 'GET',
416                url: ajaxSettings.url,
417                data: data,
418                dataType: 'json'
419            }).done(function (response) {
420                var events = [];
421                $.each(response, function (k, v) {
422                    events.push(response[k]);
423                });
424                $calendarElement.data('events', events);
425                drawEvents($calendarElement, 'ajax');
426            });
427
428            return true;
429        }
430
431        function drawEvents($calendarElement, type) {
432            var jsonData = $calendarElement.data('jsonData');
433            var ajaxSettings = $calendarElement.data('ajaxSettings');
434
435            var events = $calendarElement.data('events');
436            if (events !== false) {
437                $(events).each(function (index, value) {
438                    var id = $calendarElement.attr('id') + '_' + value.date;
439                    var $dowElement = $('#' + id);
440                    var $dayElement = $('#' + id + '_day');
441
442                    if ($dowElement.hasClass('dow-disabled')) {
443                        $dowElement.data('hasEvent', false);
444                    } else {
445                        $dowElement.data('hasEvent', true);
446
447                        if (typeof (value.title) !== 'undefined') {
448                            $dowElement.attr('title', value.title);
449                        }
450
451                        if (typeof (value.classname) === 'undefined') {
452                            $dowElement.addClass('event');
453                        } else {
454                            $dowElement.addClass('event-styled');
455                            $dayElement.addClass(value.classname);
456                        }
457
458                        if (typeof (value.badge) !== 'undefined' && value.badge !== false) {
459                            var badgeClass = (value.badge === true) ? '' : ' badge-' + value.badge;
460                            var dayLabel = $dayElement.data('day');
461                            $dayElement.html('<span class="badge badge-event' + badgeClass + '">' + dayLabel + '</span>');
462                        }
463
464                        if (typeof (value.body) !== 'undefined') {
465                            var modalUse = false;
466                            if (type === 'json' && typeof (value.modal) !== 'undefined' && value.modal === true) {
467                                modalUse = true;
468                            } else if (type === 'ajax' && 'modal' in ajaxSettings && ajaxSettings.modal === true) {
469                                modalUse = true;
470                            }
471
472                            if (modalUse === true) {
473                                $dowElement.addClass('event-clickable');
474
475                                var $modalElement = createModal(id, value.title, value.body, value.footer);
476                                $('body').append($modalElement);
477
478                                $('#' + id).click(function () {
479                                    $('#' + id + '_modal').modal();
480                                });
481                            }
482                        }
483                    }
484
485                });
486            }
487        }
488
489        /* ----- Helper functions ----- */
490
491        function isToday(year, month, day) {
492            var todayObj = new Date();
493            var dateObj = new Date(year, month, day);
494            return (dateObj.toDateString() == todayObj.toDateString());
495        }
496
497        function dateAsString(year, month, day) {
498            var m, d;
499            d = (day < 10) ? '0' + day : day;
500            m = month + 1;
501            m = (m < 10) ? '0' + m : m;
502            return year + '-' + m + '-' + d;
503        }
504
505        function calcDayOfWeek(year, month, day) {
506            var dateObj = new Date(year, month, day, 0, 0, 0, 0);
507            var dow = dateObj.getDay();
508            if (dow == 0) {
509                dow = 6;
510            } else {
511                dow--;
512            }
513            return dow;
514        }
515
516        function calcLastDayInMonth(year, month) {
517            var day = 28;
518            while (checkValidDate(year, month + 1, day + 1)) {
519                day++;
520            }
521            return day;
522        }
523
524        function calcWeeksInMonth(year, month) {
525            var daysInMonth = calcLastDayInMonth(year, month);
526            var firstDow = calcDayOfWeek(year, month, 1);
527            var lastDow = calcDayOfWeek(year, month, daysInMonth);
528            var days = daysInMonth;
529            var correct = (firstDow - lastDow);
530            if (correct > 0) {
531                days += correct;
532            }
533            return Math.ceil(days / 7);
534        }
535
536        function checkValidDate(y, m, d) {
537            return m > 0 && m < 13 && y > 0 && y < 32768 && d > 0 && d <= (new Date(y, m, 0)).getDate();
538        }
539
540        function checkMonthLimit(count, invert) {
541            if (count === false) {
542                count = 0;
543            }
544            var d1 = $calendarElement.data('currDate');
545            var d2 = $calendarElement.data('initDate');
546
547            var months;
548            months = (d2.getFullYear() - d1.getFullYear()) * 12;
549            months -= d1.getMonth() + 1;
550            months += d2.getMonth();
551
552            if (invert === true) {
553                if (months < (parseInt(count) - 1)) {
554                    return true;
555                }
556            } else {
557                if (months >= (0 - parseInt(count))) {
558                    return true;
559                }
560            }
561            return false;
562        }
563    }); 
564
565    return this;
566};
567
568/**
569 * Default settings
570 *
571 * @returns object
572 *   language:          string,
573 *   year:              integer,
574 *   month:             integer,
575 *   show_previous:     boolean|integer,
576 *   show_next:         boolean|integer,
577 *   cell_border:       boolean,
578 *   today:             boolean,
579 *   show_days:         boolean,
580 *   weekstartson:      integer (0 = Sunday, 1 = Monday),
581 *   nav_icon:          object: prev: string, next: string
582 *   ajax:              object: url: string, modal: boolean,
583 *   legend:            object array, [{type: string, label: string, classname: string}]
584 *   action:            function
585 *   action_nav:        function
586 */
587$.fn.zabuto_calendar_defaults = function () {
588    var now = new Date();
589    var year = now.getFullYear();
590    var month = now.getMonth() + 1;
591    var settings = {
592        language: false,
593        year: year,
594        month: month,
595        show_previous: true,
596        show_next: true,
597        cell_border: false,
598        today: false,
599        show_days: true,
600        weekstartson: 1,
601        nav_icon: true,
602        data: false,
603        ajax: false,
604        legend: false,
605        action: false,
606        action_nav: false,
607        disabled_days: [],
608        disabled_dates: []
609    };
610    return settings;
611};
612
613/**
614 * Language settings
615 *
616 * @param lang
617 * @returns {{month_labels: Array, dow_labels: Array}}
618 */
619$.fn.zabuto_calendar_language = function (lang) {
620    if (typeof (lang) == 'undefined' || lang === false) {
621        lang = 'en';
622    }
623
624    switch (lang.toLowerCase()) {
625        case 'ar':
626            return {
627                month_labels: ["يناير", "فبراير", "مارس", "أبريل", "مايو", "يونيو", "يوليو", "أغسطس", "سبتمبر", "أكتوبر", "نوفمبر", "ديسمبر"],
628                dow_labels: ["أثنين", "ثلاثاء", "اربعاء", "خميس", "جمعه", "سبت", "أحد"]
629            };
630            break;
631
632        case "az":
633            return {
634                month_labels: ["Yanvar", "Fevral", "Mart", "Aprel", "May", "İyun", "İyul", "Avqust", "Sentyabr", "Oktyabr", "Noyabr", "Dekabr"],
635                dow_labels: ["B.e", "Ç.A", "Çərş", "C.A", "Cümə", "Şən", "Baz"]
636            };
637            break;
638
639        case "cn":
640            return {
641                month_labels: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"],
642                dow_labels: ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"]
643            };
644            break;
645
646        case "cs":
647            return {
648                month_labels: ["Leden", "Únor", "Březen", "Duben", "Květen", "Červen", "Červenec", "Srpen", "Září", "Říjen", "Listopad", "Prosinec"],
649                dow_labels: ["Po", "Út", "St", "Čt", "Pá", "So", "Ne"]
650            };
651            break;
652
653        case 'de':
654            return {
655                month_labels: ["Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"],
656                dow_labels: ["Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"]
657            };
658            break;
659
660        case 'en':
661            return {
662                month_labels: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "
662November", "December"],
663                dow_labels: ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]
664            };
665            break;
666
667        case 'he':
668            return {
669                month_labels: ["ינואר", "פברואר", "מרץ", "אפריל", "מאי", "יוני", "יולי", "אוגוסט", "ספטמבר", "אוקטובר", "נובמבר", "דצמבר"],
670                dow_labels: ["ב", "ג", "ד", "ה", "ו", "ש", "א"]
671            };
672            break;
673
674        case 'es':
675            return {
676                month_labels: ["Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"],
677                dow_labels: ["Lu", "Ma", "Mi", "Ju", "Vi", "Sá", "Do"]
678            };
679            break;
680
681        case 'fi':
682            return {
683                month_labels: ["Tammikuu", "Helmikuu", "Maaliskuu", "Huhtikuu", "Toukokuu", "Kesäkuu", "Heinäkuu", "Elokuu", "Syyskuu", "Lokakuu", "Marraskuu", "Joulukuu"],
684                dow_labels: ["Ma", "Ti", "Ke", "To", "Pe", "La", "Su"]
685            };
686            break;
687
688        case 'fr':
689            return {
690                month_labels: ["Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre"],
691                dow_labels: ["Lun", "Mar", "Mer", "Jeu", "Ven", "Sam", "Dim"]
692            };
693            break;
694
695        case 'hu':
696            return {
697                month_labels: ["Január", "Február", "Március", "Április", "Május", "Június", "Július", "Augusztus", "Szeptember", "Október", "November", "December"],
698                dow_labels: ["Hé", "Ke", "Sze", "Cs", "Pé", "Szo", "Va"]
699            };
700            break;
701
702        case 'id':
703            return {
704                month_labels: ["Januari", "Februari", "Maret", "April", "Mei", "Juni", "Juli", "Agustus", "September", "Oktober", "November", "Desember"],
705                dow_labels: ["Senin", "Selasa", "Rabu", "Kamis", "Jum'at", "Sabtu", "Minggu"]
706            };
707            break;
708
709        case 'it':
710            return {
711                month_labels: ["Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre"],
712                dow_labels: ["Lun", "Mar", "Mer", "Gio", "Ven", "Sab", "Dom"]
713            };
714            break;
715
716        case 'jp':
717            return {
718                month_labels: ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"],
719                dow_labels: ["月", "火", "水", "木", "金", "土", "日"]
720            };
721            break;
722
723        case 'kr':
724            return {
725                month_labels: ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"],
726                dow_labels: ["월", "화", "수", "목", "금", "토", "일"]
727            };
728            break;
729
730        case 'nl':
731            return {
732                month_labels: ["Januari", "Februari", "Maart", "April", "Mei", "Juni", "Juli", "Augustus", "September", "Oktober", "November", "December"],
733                dow_labels: ["Ma", "Di", "Wo", "Do", "Vr", "Za", "Zo"]
734            };
735            break;
736
737        case 'no':
738            return {
739                month_labels: ["Januar", "Februar", "Mars", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Desember"],
740                dow_labels: ["Ma", "Ti", "On", "To", "Fr", "L\u00f8", "S\u00f8"]
741            };
742            break;
743
744        case 'pl':
745            return {
746                month_labels: ["Styczeń", "Luty", "Marzec", "Kwiecień", "Maj", "Czerwiec", "Lipiec", "Sierpień", "Wrzesień", "Październik", "Listopad", "Grudzień"],
747                dow_labels: ["pon.", "wt.", "śr.", "czw.", "pt.", "sob.", "niedz."]
748            };
749            break;
750
751        case 'pt':
752            return {
753                month_labels: ["Janeiro", "Fevereiro", "Marco", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"],
754                dow_labels: ["S", "T", "Q", "Q", "S", "S", "D"]
755            };
756            break;
757
758        case 'ru':
759            return {
760                month_labels: ["Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь"],
761                dow_labels: ["Пн", "Вт", "Ср", "Чт", "Пт", "Сб", "Вск"]
762            };
763            break;
764
765        case 'se':
766            return {
767                month_labels: ["Januari", "Februari", "Mars", "April", "Maj", "Juni", "Juli", "Augusti", "September", "Oktober", "
767November", "December"],
768                dow_labels: ["Mån", "Tis", "Ons", "Tor", "Fre", "Lör", "Sön"]
769            };
770            break;
771
772        case 'sk':
773            return {
774                month_labels: ["Január", "Február", "Marec", "Apríl", "Máj", "Jún", "Júl", "August", "September", "Október", "November", "December"],
775                dow_labels: ["Po", "Ut", "St", "Å t", "Pi", "So", "Ne"]
776            };
777            break;
778
779        case 'tr':
780            return {
781                month_labels: ["Ocak", "Şubat", "Mart", "Nisan", "Mayıs", "Haziran", "Temmuz", "Ağustos", "Eylül", "Ekim", "Kasım", "Aralık"],
782                dow_labels: ["Pts", "Salı", "Çar", "Per", "Cuma", "Cts", "Paz"]
783            };
784            break;
785
786        case 'ua':
787            return {
788                month_labels: ["Січень", "Лютий", "Березень", "Квітень", "Травень", "Червень", "Липень", "Серпень", "Вересень", "Жовтень", "Листопад", "Грудень"],
789                dow_labels: ["Пн", "Вт", "Ср", "Чт", "Пт", "Сб", "Нд"]
790            };
791            break;
792    }
793
794};

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.