PageSourceSearch

https://www.taxoffice.at/common/scripts/85_infolisten_at_reisekosten.js

js taxoffice.at collected 2026-10-10 02:21:52 UTC 26,500 bytes, 681 lines download raw bytes

1// INFOLISTEN AT: DIAGRAMM (MAP CHART)
2// Wird verwendet für Reisekosten (infolist_list_content)
3// -------------------------------------------------------------------------------------------------
4
5// Datensammlung
6
7(function(document) {
8    var MapChartData = function($map_chart) {
9        this.$map_chart  = $map_chart;
10    };
11
12    MapChartData.prototype = {
13        init: function() {
14            var $countries    = this.$map_chart.querySelectorAll('path');
15            var country_codes = {
16                'AC': 'Ascension',
17                'AD': 'Andorra',
18                'AE': 'Vereinigte Arabische Emirate',
19                'AF': 'Afghanistan',
20                'AG': 'Antigua und Barbuda',
21                'AI': 'Anguilla',
22                'AL': 'Albanien',
23                'AM': 'Armenien',
24                'AN': 'Niederländische Antillen',
25                'AO': 'Angola',
26                'AQ': 'Antarktika',
27                'AR': 'Argentinien',
28                'AS': 'Amerikanisch-Samoa',
29                'AT': 'Österreich',
30                'AU': 'Australien',
31                'AW': 'Aruba',
32                'AX': 'Åland',
33                'AZ': 'Aserbaidschan',
34                'BA': 'Bosnien - Herzegowina',
35                'BB': 'Barbados',
36                'BD': 'Bangladesch',
37                'BE': 'Belgien',
38                'BF': 'Burkina Faso',
39                'BG': 'Bulgarien',
40                'BH': 'Bahrain',
41                'BI': 'Burundi',
42                'BJ': 'Benin',
43                'BL': 'Saint-Barthélemy',
44                'BM': 'Bermuda',
45                'BN': 'Brunei',
46                'BO': 'Bolivien',
47                'BQ': 'Bonaire, Sint Eustatius und Saba(Niederlande)',
48                'BR': 'Brasilien',
49                'BS': 'Bahamas',
50                'BT': 'Bhutan',
51                'BU': 'Burma (Myanmar)',
52                'BV': 'Bouvetinsel',
53                'BW': 'Botswana',
54                'BY': 'Belarus',
55                'BZ': 'Belize',
56                'CA': 'Kanada',
57                'CC': 'Kokosinseln',
58                'CD': 'Demokrat. Republik Kongo',
59                'CE': 'Europäische Gemeinschaft',
60                'CF': 'Zentralafrikanische Republik',
61                'CG': 'Republik Kongo',
62                'CH': 'Schweiz',
63                'CI': 'Côte d`lvoire',
64                'CK': 'Cookinseln',
65                'CL': 'Chile',
66                'CM': 'Kamerun',
67                'CN': 'China',
68                'CO': 'Kolumbien',
69                'CP': 'Clipperton',
70                'CR': 'Costa Rica',
71                'CS': 'Tschechoslowakei (ehemalig)',
72                'CU': 'Kuba',
73                'CV': 'Kap Verde',
74                'CW': 'Curaçao',
75                'CX': 'Weihnachtsinsel',
76                'CY': 'Zypern',
77                'CZ': 'Tschechien',
78                'DE': 'Deutschland und österreichische Zollausschlussgebiete',
79                'DG': 'Diego Garcia',
80                'DJ': 'Dschibuti',
81                'DK': 'Dänemark',
82                'DM': 'Dominica',
83                'DO': 'Dominikanische Republik',
84                'DZ': 'Algerien',
85                'EA': 'Ceuta, Melilla',
86                'EC': 'Ecuador',
87                'EE': 'Estland',
88                'EG': 'Ägypten',
89                'EH': 'Westsahara',
90                'ER': 'Eritrea',
91                'ES': 'Spanien',
92                'ET': 'Äthiopien',
93                'EU': 'Europäische Union',
94                'FI': 'Finnland',
95                'FJ': 'Fidschi',
96                'FK': 'Falklandinseln',
97                'FM': 'Mikronesien',
98                'FO': 'Färöer',
99                'FR': 'Frankreich',
100                'FX': 'Frankreich, France métropolitaine',
101                'GA': 'Gabun',
102                'GB': 'Großbritannien und Nordirland',
103                'GD': 'Grenada',
104                'GE': 'Georgien',
105                'GF': 'Französisch-Guayana',
106                'GG': 'Guernsey (Kanalinsel)',
107                'GH': 'Ghana',
108                'GI': 'Gibraltar',
109                'GL': 'Grönland',
110                'GM': 'Gambia',
111                'GN': 'Guinea',
112                'GP': 'Guadeloupe',
113                'GQ': 'Äquatorialguinea',
114                'GR': 'Griechenland',
115                'GS': 'Südgeorgien und die Südlichen Sandwichinseln',
116                'GT': 'Guatemala',
117                'GU': 'Guam',
118                'GW': 'Guinea-Bissau',
119                'GY': 'Guyana',
120                'HK': 'Hongkong',
121                'HM': 'Heard und McDonaldinseln',
122                'HN': 'Honduras',
123                'HR': 'Kroatien',
124                'HT': 'Haiti',
125                'HU': 'Ungarn',
126                'IC': 'Kanarische Inseln',
127                'ID': 'Indonesien',
128                'IE': 'Irland',
129                'IL': 'Israel',
130                'IM': 'Insel Man',
131                'IN': 'Indien',
132                'IO': 'Britisches Territorium im Indischen Ozean',
133                'IQ': 'Irak',
134                'IR': 'Iran',
135                'IS': 'Island',
136                'IT': 'Italien',
137                'JE': 'Jersey (Kanalinsel)',
138                'JM': 'Jamaika',
139                'JO': 'Jordanien',
140                'JP': 'Japan',
141                'KE': 'Kenia',
142                'KG': 'Kirgisistan',
143                'KH': 'Kambodscha',
144                'KI': 'Kiribati',
145                'KM': 'Komoren',
146                'KN': 'St. Kitts und Nevis',
147                'KP': 'Korea, Demokratische Volksrepublik',
148                'KR': 'Korea, Republik',
149                'KW': 'Kuwait',
150                'KY': 'Kaimaninseln',
151                'KZ': 'Kasachstan',
152                'LA': 'Laos',
153                'LB': 'Libanon',
154                'LC': 'St. Lucia',
155                'LI': 'Liechtenstein',
156                'LK': 'Sri Lanka',
157                'LR': 'Liberia',
158                'LS': 'Lesotho',
159                'LT': 'Litauen',
160                'LU': 'Luxemburg',
161                'LV': 'Lettland',
162                'LY': 'Libyen',
163                'MA': 'Marokko',
164                'MC': 'Monaco',
165                'MD': 'Moldawien (Republik Moldau)',
166                'ME': '"Jugoslawien"',
167                'MF': 'Saint-Martin (franz. Teil)',
168                'MG': 'Madagaskar',
169                'MH': 'Marshallinseln',
170                'MK': 'Mazedonien, ehem. jugoslawische Republik',
171                'ML': 'Mali',
172                'MM': 'Myanmar',
173                'MN': 'Mongolei',
174                'MO': 'Macao',
175                'MP': 'Nördliche Marianen',
176                'MQ': 'Martinique',
177                'MR': 'Mauretanien',
178                'MS': 'Montserrat',
179                'MT': 'Malta',
180                'MU': 'Mauritius',
181                'MV': 'Malediven',
182                'MW': 'Malawi',
183                'MX': 'Mexiko',
184                'MY': 'Malaysia',
185                'MZ': 'Mosambik',
186                'NA': 'Namibia',
187                'NC': 'Neukaledonien',
188                'NE': 'Niger',
189                'NF': 'Norfolkinsel',
190                'NG': 'Nigeria',
191                'NI': 'Nicaragua',
192                'NL': 'Niederlande',
193                'NO': 'Norwegen',
194                'NP': 'Nepal',
195                'NR': 'Nauru',
196                'NT': 'Neutrale Zone',
197                'NU': 'Niue',
198                'NZ': 'Neuseeland',
199                'OM': 'Oman',
200                'PA': 'Panama',
201                'PE': 'Peru',
202                'PF': 'Französisch-Polynesien',
203                'PG': 'Papua-Neuguinea',
204                'PH': 'Philippinen',
205                'PK': 'Pakistan',
206                'PL': 'Polen',
207                'PM': 'Saint-Pierre und Miquelon',
208                'PN': 'Pitcairninseln',
209                'PR': 'Puerto Rico',
210                'PS': 'Palästinensische Autonomiegebiete',
211                'PT': 'Portugal',
212                'PW': 'Palau',
213                'PY': 'Paraguay',
214                'QA': 'Katar',
215                'RE': 'Réunion',
216                'RO': 'Rumänien',
217                'RS': '"Jugoslawien"',
218                'RU': 'Russische Föderation',
219                'RW': 'Ruanda',
220                'SA': 'Saudi-Arabien',
221                'SB': 'Salomonen',
222                'SC': 'Seychellen',
223                'SD': 'Sudan',
224                'SE': 'Schweden',
225                'SG': 'Singapur',
226                'SH': 'St. Helena',
227                'SI': 'Slowenien',
228                'SJ': 'Svalbard und Jan Mayen',
229                'SK': 'Slowakei',
230                'SL': 'Sierra Leone',
231                'SM': 'San Marino',
232                'SN': 'Senegal',
233                'SO': 'Somalia',
234                'SR': 'Suriname',
235                'SS': 'Südsudan',
236                'ST': 'São Tomé und Príncipe',
237                'SU': 'UdSSR (jetzt: Russische Föderation)',
238                'SV': 'El Salvador',
239                'SX': 'Sint Maarten (niederl. Teil)',
240                'SY': 'Syrien',
241                'SZ': 'Swasiland',
242                'TA': 'Tristan da Cunha (verwaltet von St. Helena, reserviert für UPU)',
243                'TC': 'Turks- und Caicosinseln',
244                'TD': 'Tschad',
245                'TF': 'Französische Süd- und Antarktisgebiete',
246                'TG': 'Togo',
247                'TH': 'Thailand',
248                'TJ': 'Tadschikistan',
249                'TK': 'Tokelau',
250                'TL': 'Osttimor (Timor-Leste)',
251                'TM': 'Turkmenistan',
252                'TN': 'Tunesien',
253                'TO': 'Tonga',
254                'TR': 'Türkei',
255                'TT': 'Trinidad und Tobago',
256                'TV': 'Tuvalu',
257                'TW': 'Taiwan',
258                'TZ': 'Tansania',
259                'UA': 'Ukraine',
260                'UG': 'Uganda',
261                'UM': 'United States Minor Outlying Islands',
262                'US': 'USA',
263                'UY': 'Uruguay',
264                'UZ': 'Usbekistan',
265                'VA': 'Vatikanstadt',
266                'VC': 'St. Vincent und die Grenadinen',
267                'VE': 'Venezuela',
268                'VG': 'Britische Jungferninseln',
269                'VI': 'Amerikanische Jungferninseln',
270                'VN': 'Vietnam',
271                'VU': 'Vanuatu',
272                'WF': 'Wallis und Futuna',
273                'WS': 'Samoa',
274                'YE': 'Jemen',
275                'YT': 'Mayotte',
276                'YU': '"Jugoslawien"',
277                'ZA': 'Südafrika',
278                'ZM': 'Sambia',
279                'ZR': 'Zaire (jetzt Demokratische Republik Kongo)',
280                'ZW': 'Simbabwe'
281            };
282
283            var $sections             = document.querySelectorAll('.infolist_section table tbody tr'),
284                costs_by_country_name = {},
285                country_codes_by_name = {},
286                parent_country;
287
288            for (var code in country_codes) {
289                if (country_codes.hasOwnProperty(code)) {
290                    country_codes_by_name[country_codes[code]] = code;
291                }
292            }
293
294            for (var i = 0; i < $sections.length; i++) {
295                var tds     = $sections[i].children,
296                    country = '',
297                    daily_fee,
298                    nightly_fee;
299
300
301                if (tds.length > 2) { // Tabellenzeile hat 3 Spalten mit Land, Tag- und Nachtgeld
302                    country     = tds[0].textContent;
303                    daily_fee   = tds[1].textContent;
304                    nightly_fee = tds[2].textContent;
305
306                    if (country in country_codes_by_name) {
307                        parent_country = country;
308
309                        costs_by_country_name[country] = {
310                            'additional_values' : '',
311                            'daily_fee'         : daily_fee,
312                            'nightly_fee'       : nightly_fee,
313                            'total'             : parseInt(parseInt(daily_fee.split('€')[1], 10) + parseInt(nightly_fee.split('€')[1], 10))
314                        };
315                    }
316                    else if (country[0] === '-' && parent_country) {
317                        var additional_values = '<br>' + '<strong>' + country + '</strong><br>Tagesgebühr: ' + daily_fee + '<br>Nachtgebühr: ' + nightly_fee;
318                        costs_by_country_name[parent_country].additional_values += additional_values;
319                    }
320                }
321            }
322
323            for (var h = 0; h < $countries.length; h++) {
324                if (costs_by_country_name[country_codes[$countries[h].getAttribute('id')]]) {
325                    $countries[h].country_name = country_codes[$countries[h].getAttribute('id')];
326                    $countries[h].costs = costs_by_country_name[$countries[h].country_name];
327                }
328            }
329        }
330    };
331
332    var $map_chart  = document.getElementById('map_chart');
333
334    if ($map_chart) {
335        new MapChartData($map_chart).init();
336    }
337})(document);
338
339// User-Interface
340
341(function(document) {
342    var MapChart = function($map_chart) {
343
344        var _this = this;
345        _this.$map_chart         = $map_chart;
346        _this.$map_chart_image   = _this.$map_chart.querySelector('svg');
347        _this.$zoom_in           = _this.$map_chart.querySelector('.zoom_in');
348        _this.$zoom_out          = _this.$map_chart.querySelector('.zoom_out');
349        _this.$drag_area         = _this.$map_chart.querySelector('.drag_area');
350        _this.$countries         = _this.$map_chart.querySelectorAll('path');
351        _this.$output            = _this.$map_chart.querySelector('.output');
352        _this.$touch_info        = _this.$map_chart.querySelector('.touch_info');
353        _this.$switch_view       = document.querySelector('.switch_view');
354        _this.$infolist_section  = document.querySelectorAll('.infolist_section');
355        _this.zoom               = 1.00;
356        _this.zoom_increase      = 1.3;
357        _this.min_zoom           = 1;
358        _this.max_zoom           = 10;
359        _this.x_offset           = 0;
360        _this.y_offset           = 0;
361        _this.start_event;
362        _this.old_event;
363    };
364
365    MapChart.prototype = {
366
367        init: function() {
368            var _this = this;
369
370            _this.$zoom_in.addEventListener('click', function(event) { // Zoom-In-Button: Click
371                _this._zoom_in(event);
372            });
373
374            _this.$zoom_in.addEventListener('touchstart', function(event) { // Zoom-In-Button: Touch
375                _this._zoom_in(event);
376            });
377
378            _this.$zoom_out.addEventListener('click', function(event) { // Zoom-Out-Button: Click
379                _this._zoom_out(event);
380            });
381
382            _this.$zoom_out.addEventListener('touchstart', function(event) { // Zoom-Out-Button: Touch
383                _this._zoom_out(event);
384            });
385
386            _this.$map_chart.addEventListener('mousedown', function(event) { // Start moving map with mousedown
387                event.preventDefault();
388                _this.old_event = event;
389                _this.$drag_area.classList.add('visible');
390
391                _this.$drag_area.addEventListener('mousemove', function(event) {
392                    _this._drag(event, _this);
393                });
394            }, false);
395
396            document.addEventListener('mouseup', function() { // End moving map (with mouseup)
397                _this.$drag_area.classList.remove('visible');
398
399                _this.$drag_area.removeEventListener('mousemove', function(event) {
400                    _this._drag(event);
401                });
402            }, false);
403
404            document.addEventListener('resize', function() {
405                _this.$output.classList.remove('show');
406            }, false);
407
408            // Scrollen in Karte mittels touch
409            _this.$map_chart.addEventListener('touchstart', function(event) { // Start moving map on touch-device
410                if (!event.touches || event.touches.length > 1) {
411                    event.preventDefault();
412                }
413
414                _this.old_event = event;
415                _this.start_event = event;
416                _this.$drag_area.classList.remove('visible');
417
418                _this.$map_chart.addEventListener('touchmove', function(event) { // Moving map on touch-device
419                    _this._drag(event);
420                });
421            }, false);
422
423            _this.$map_chart.addEventListener('touchend', function() { // End moving map on touch-device
424                _this.$touch_info.classList.add('hideme');
425            }, false);
426
427            _this.$switch_view.addEventListener('click', function(event) { // Switch between table-view and map-view
428                event.preventDefault();
429                var i;
430
431                if (this.classList.contains('data')) {
432                    _this.$map_chart.classList.remove('hideme');
433
434                    for (i = 0; i < _this.$infolist_section.length; i++) {
435                        _this.$infolist_section[i].classList.add('visible_for_screen_reader');
436                    }
437
438                    this.classList.remove('data');
439                    this.querySelector('.text').innerHTML = 'zur Tabellenansicht';
440                }
441                else {
442                    _this.$map_chart.classList.add('hideme');
443
444                    for (i = 0; i < _this.$infolist_section.length; i++) {
445                        _this.$infolist_section[i].classList.remove('visible_for_screen_reader');
446                    }
447
448                    this.classList.add('data');
449                    this.querySelector('.text').innerHTML = 'zur grafischen Ansicht';
450                }
451            }, false);
452
453            _this._setup_map_chart();
454        },
455
456        _zoom_in: function(event) {
457            event.preventDefault();
458            var _this = this;
459
460            _this.$map_chart_image.style.transition = 'transform 0.2s';
461            _this.$map_chart_image.addEventListener('transitionend', function() {
462                this.style.transition = 'none';
463            }, false);
464
465            if (_this.zoom <= _this.max_zoom) {
466                _this.zoom = _this.zoom * _this.zoom_increase;
467                _this._update_map_chart();
468            }
469        },
470
471        _zoom_out: function(event) {
472            event.preventDefault();
473            var _this = this;
474
475            _this.$map_chart_image.style.transition = 'transform 0.2s';
476            _this.$map_chart_image.addEventListener('transitionend', function() {
477                this.style.transition = 'none';
478            }, false);
479
480            if (_this.zoom > _this.min_zoom) {
481                _this.zoom = _this.zoom / _this.zoom_increase;
482                _this._update_map_chart();
483            }
484        },
485
486        _proof_zoom: function() { // checks zoom-parameters
487            var _this = this;
488
489            if (_this.zoom <= _this.min_zoom) {
490                _this.zoom = _this.min_zoom;
491                _this.$zoom_out.classList.add('disabled');
492                _this.x_offset = 0;
493                _this.y_offset = 0;
494            }
495            else {
496                _this.$zoom_in.classList.remove('disabled');
497            }
498
499            if (_this.zoom >= _this.max_zoom) {
500                _this.zoom = _this.max_zoom;
501                _this.$zoom_in.classList.add('disabled');
502            }
503            else if (_this.zoom > _this.min_zoom) {
504                _this.$zoom_out.classList.remove('disabled');
505            }
506        },
507
508        _proof_offest: function() { // Checks, if map is in frame
509            var _this = this;
510
511            if (_this.x_offset > 70 * _this.zoom) {
512                _this.x_offset = 70 * _this.zoom;
513            }
514
515            if (_this.x_offset < -70 * _this.zoom) {
516                _this.x_offset = -70 * _this.zoom;
517            }
518
519            if (_this.y_offset > 45 * _this.zoom) {
520                _this.y_offset = 45 * _this.zoom;
521            }
522
523            if (_this.y_offset < -45 * _this.zoom) {
524                _this.y_offset = -45 * _this.zoom;
525            }
526        },
527
528        _update_map_chart: function() {
529            var _this = this;
530
531            _this._proof_offest();
532            _this._proof_zoom();
533            _this.$map_chart_image.style.transform = 'scale(' + _this.zoom + ') translateX(' + _this.x_offset + 'px) translateY(' + _this.y_offset + 'px)';
534            _this.$map_chart_image.style.WebkitTransform = 'scale(' + _this.zoom + ') translateX(' + _this.x_offset + 'px) translateY(' + _this.y_offset + 'px)';
535            _this.$map_chart_image.style.msTransform = 'scale(' + _this.zoom + ') translateX(' + _this.x_offset + 'px) translateY(' + _this.y_offset + 'px)';
536        },
537
538        _convert_event: function(event) {
539            var result;
540
541            if (event.changedTouches) {
542                result = {
543                    x:event.changedTouches[0].pageX,
544                    y:event.changedTouches[0].pageY
545                };
546            } else {
547                result = {
548                    x:event.pageX,
549                    y:event.pageY
550                };
551            }
552
553            return result;
554        },
555
556        _calc_offset_for_drag: function(event) {
557            var _this = this;
558
559            _this.x_offset = _this.x_offset + (-_this._convert_event(_this.old_event)['x'] + _this._convert_event(event)['x'])  / _this.zoom;
560            _this.y_offset = _this.y_offset + (-_this._convert_event(_this.old_event)['y'] + _this._convert_event(event)['y']) / _this.zoom;
561        },
562
563        _drag: function(event) {
564            event.preventDefault();
565            var _this = this;
566
567            if (event.touches) { // Touch
568                if (event.touches.length <= 1) { // 1 Finger
569                    _this.$touch_info.classList.remove('hideme');
570                    _this.$output.classList.remove('show');
571                }
572                else { // > 1 Finger
573                    _this._manage_touch_interaction(event);
574                    _this.$output.classList.remove('show');
575                }
576            }
577            else { // Mouse
578                _this._calc_offset_for_drag(event);
579            }
580
581            _this._update_map_chart();
582            _this.old_event = event;
583        },
584
585        _manage_touch_interaction: function(event) {
586            var _this            = this,
587                hypotenuse_now   = Math.sqrt(Math.pow(event.touches[0].pageX - event.touches[1].pageX, 2) +
588                                   Math.pow(event.touches[0].pageY - event.touches[1].pageY, 2)),
589                hypotenuse_start = Math.sqrt(Math.pow(_this.start_event.touches[0].pageX -  _this.start_event.touches[1].pageX, 2) +
590                                   Math.pow(_this.start_event.touches[0].pageY -  _this.start_event.touches[1].pageY, 2));
591
592            if (hypotenuse_now < 40) {
593                _this._calc_offset_for_drag(event);
594                return;
595            }
596
597            if (hypotenuse_now > hypotenuse_start - 30 && Math.abs(event.touches[0].pageX - event.touches[1].pageX) < Math.abs(_this.start_event.touches[0].pageX - _this.start_event.touches[1].pageX) + 30) {
598                _this._calc_offset_for_drag(event);
599                return;
600            }
601
602            if (hypotenuse_now > hypotenuse_start - 30 && Math.abs(event.touches[0].pageY - event.touches[1].pageY) < Math.abs(_this.start_event.touches[0].pageY - _this.start_event.touches[1].pageY) + 30) {
603                _this._calc_offset_for_drag(event);
604                return;
605            }
606            if (hypotenuse_now > 400) {
607                hypotenuse_now = 400;
608            }
609
610            if (hypotenuse_now < hypotenuse_start) {
611                hypotenuse_now = -hypotenuse_now;
612            }
613
614            _this.zoom = _this.zoom + hypotenuse_now / 50000;
615        },
616
617        _setup_map_chart: function() { // set styling and classes
618            var _this = this;
619
620            for (var i = 0; i < _this.$countries.length; i++) {
621                var $country = _this.$countries[i];
622
623                $country.style.removeProperty('fill');
624
625                if ($country.costs && $country.costs['total']) {
626
627                    // IE11-Fallback (don't likes classList.add on 
627svgs)
628                    $country.setAttribute('class', 'hasData');
629                    $country.style.fillOpacity = ($country.costs['total'] - 20) / 100;
630
631                    $country.addEventListener('mousemove', function(event) { // Infobox moves with mouse
632                        _this._show_output(event);
633                    });
634
635                    $country.addEventListener('mouseleave', function() {
636                        this.style.fillOpacity = (this.costs['total'] - 20) / 100;
637                    }, false);
638
639                    _this.$map_chart.addEventListener('mouseleave', function() {
640                        _this.$output.classList.remove('show');
641                    }, false);
642
643                    $country.addEventListener('touchstart', function(event) {
644                        _this._show_output(event);
645                    }, false);
646
647                }
648                else {
649                    $country.setAttribute('class', 'noData');
650                }
651            }
652        },
653
654        _show_output: function(event) { // Shows country-information-box
655            var _this = this,
656                $country = event.target,
657                offsetTop = _this.$map_chart.offsetTop + _this.$map_chart.offsetParent.offsetTop,
658                offsetLeft = _this.$map_chart.offsetLeft + _this.$map_chart.offsetParent.offsetLeft;
659
660            _this.$output.innerHTML = '<strong>' + $country.country_name + '</strong><br>Tagesgebühr: ' + $country.costs['daily_fee'] + '<br>Nachtgebühr: ' + $country.costs['nightly_fee'] + $country.costs['additional_values'];
661
662            if (_this._convert_event(event)['x'] + _this.$output.offsetWidth > _this.$map_chart.offsetWidth + offsetLeft - 15) {
663                _this.$output.style.left = _this.$map_chart.offsetWidth - _this.$output.offsetWidth  - 15 + 'px';
664            }
665            else {
666                _this.$output.style.left = _this._convert_event(event)['x'] - offsetLeft + 15 + 'px';
667            }
668
669            _this.$output.style.top = _this._convert_event(event)['y'] - offsetTop  + 15 + 'px';
670            _this.$output.classList.add('show');
671            $country.style.fillOpacity = ($country.costs['total'] - 20) / 100 + 0.3;
672
673        }
674    };
675
676    var $map_chart  = document.getElementById('map_chart');
677
678    if ($map_chart) {
679        new MapChart($map_chart).init();
680    }
681})(document);

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.