PageSourceSearch

https://www.birchmeier.com/web/scripts/js/duesen.js

js birchmeier.com collected 2026-09-26 11:20:56 UTC 25,397 bytes, 892 lines download raw bytes

1function rgb2hex(rgb) {
2	if (/^#[0-9A-F]{6}$/i.test(rgb)) return rgb;
3
4	rgb = rgb.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);
5	function hex(x) {
6		return ("0" + parseInt(x).toString(16)).slice(-2);
7	}
8	return "#" + hex(rgb[1]) + hex(rgb[2]) + hex(rgb[3]);
9}
10
11var graphActive = false
12
13var graphData;
14var graphAreaData;
15
16
17function renderGraphsJetDetail() {
18	if (!graphActive) {
19
20		$('#graph_line').each(function () {
21			$(this).css('display', 'block');
22
23			var xAxis = $(this).attr('data-graph-x').split(";");
24			var yValues = $(this).attr('data-graph-y').split(";");
25			var yMax = 0;
26			var data = [];
27			var printGraph = false;
28
29			for (var i = 0; i < xAxis.length; i++) {
30				var newDataPoint = { 'x': xAxis[i] }
31				if (yValues[i]) {
32					newDataPoint['y'] = yValues[i];
33					yMax = Math.max(yMax, yValues[i]);
34				}
35				data.push(newDataPoint);
36			}
37
38			var labels = [$(this).attr('data-label')];
39
40			var labelAdditionalData = {
41				'titleX': $(this).attr('data-title-x'),
42				'titleY': $(this).attr('data-title-y'),
43				'measureX': $(this).attr('data-measure-x'),
44				'measureY': $(this).attr('data-measure-y'),
45			}
46
47			if (yMax > 9) {
48				var numLines = Math.ceil(yMax / 2) + 1;
49			}
50			else if (yMax > 1) {
51				var numLines = Math.ceil(yMax) + 1;
52			}
53			else {
54				var numLines = 5;
55			}
56
57			new Morris.Line({
58				element: 'graph_line',								// ID of the element in which to draw the chart.
59				data: data, 		// Chart data records -- each entry in this array corresponds to a point on the chart.
60				xkey: 'x', 									// The name of the data record attribute that contains x-values.
61				ykeys: ['y'],					// A list of names of data record attributes that contain y-values.
62				labels: labels,		// Labels for the ykeys -- will be displayed when you hover over the chart.
63				parseTime: false,
64				ymax: Math.ceil(yMax),
65				postUnits: ' l/min',
66				ymin: 0,
67				hideHover: true,
68				labelAdditionalData: labelAdditionalData,
69
70				numLines: numLines,
71
72				yLabelFormat: function (y) {
73					if (typeof y !== 'undefined') {
74						if (yMax > 1) {
75							return Math.round(y);
76						}
77						return  (Math.round(y * 100)/100).toFixed(2);
78					}
79				},
80				hoverCallback: function (index, options, content, row) {
81					if (typeof row.y !== 'undefined') {
82
83						var html = '<p>' + options.labelAdditionalData.titleX + ': ' + row.x + ' ' + options.labelAdditionalData.measureX + '</p>';
84
85						html += '<p><strong>' + options.labelAdditionalData.titleY + ': ' + row.y + ' ' + options.labelAdditionalData.measureY + '</strong></p>';
86					}
87					return html;
88				}
89			});
90		});
91
92		$('#graph_area').each(function () {
93			$(this).css('display', 'block');
94			var xAxis = $(this).attr('data-graph-x').split(";");
95			var yValuesMin = $(this).attr('data-graph-y-min').split(";");
96			var yValuesMax = $(this).attr('data-graph-y-max').split(";");
97			var yMax = 0;
98			var data = [];
99			var printGraph = false;
100
101			for (var i = 0; i < xAxis.length; i++) {
102				var newDataPoint = { 'x': xAxis[i] }
103				if (yValuesMin[i]) {
104					newDataPoint['yMin'] = yValuesMin[i];
105					yMax = Math.max(yMax, yValuesMin[i]);
106				}
107				if (yValuesMax[i]) {
108					newDataPoint['yMax'] = yValuesMax[i];
109					yMax = Math.max(yMax, yValuesMax[i]);
110				}
111				data.push(newDataPoint);
112			}
113
114			var labels = [$(this).attr('data-label')];
115
116			var labelAdditionalData = {
117				'titleY': $(this).attr('data-title-y'),
118				'titleYmin': $(this).attr('data-title-y-min'),
119				'titleYmax': $(this).attr('data-title-y-max'),
120				'measureX': $(this).attr('data-measure-x'),
121				'measureY': $(this).attr('data-measure-y')
122			};
123
124			if (yMax > 9) {
125				var numLines = Math.ceil(yMax / 2) + 1;
126			}
127			else if (yMax > 1) {
128				var numLines = Math.ceil(yMax) + 1;
129			}
130			else {
131				var numLines = 5;
132			}
133
134			new Morris.Area({
135				element: 'graph_area',								// ID of the element in which to draw the chart.
136				data: data, 		// Chart data records -- each entry in this array corresponds to a point on the chart.
137				xkey: 'x', 									// The name of the data record attribute that contains x-values.
138				ykeys: ['yMax', 'yMin'],					// A list of names of data record attributes that contain y-values.
139				labels: labels,		// Labels for the ykeys -- will be displayed when you hover over the chart.
140				parseTime: false,
141				ymax: Math.ceil(yMax),
142				numLines: numLines,
143				postUnits: ' l/min',
144				ymin: 0,
145				hideHover: true,
146				behaveLikeLine: true,
147
148				fillOpacity: 1,
149				labelAdditionalData: labelAdditionalData,
150				lineColors: ["#0b62a4", '#000000'],
151				pointFillColors: ["#0b62a4", "#0b62a4"],
152
153				yLabelFormat: function (y) {
154					if (typeof y !== 'undefined') {
155						if (yMax > 1) {
156							return Math.round(y);
157						}
158						return  (Math.round(y * 100)/100).toFixed(2);
159					}
160				},
161				hoverCallback: function (index, options, content, row) {
162
163					if (typeof row.yMax !== 'undefined' || typeof row.yMin !== 'undefined') {
164						var html = '<p><strong>' + options.labelAdditionalData.titleY + ' ' + row.x + ' ' + options.labelAdditionalData.measureX + '</strong></p>';
165
166					}
167
168					if (typeof row.yMax !== 'undefined') {
169						html += '<p>' + options.labelAdditionalData.titleYmax + ': ' + row.yMax + ' ' + options.labelAdditionalData.measureY + '</p>';
170					}
171
172					if (typeof row.yMin !== 'undefined') {
173						html += '<p>' + options.labelAdditionalData.titleYmin + ': ' + row.yMin + ' ' + options.labelAdditionalData.measureY + '</p>';
174					}
175
176					return html;
177				}
178			});
179
180
181			$('path[fill="#000000"]').attr('fill', $('#graph_area').parents('.products-tech-full').css('background-color'));
182			$('path[stroke="#000000"]').attr('stroke', '#0b62a4');
183
184
185			$('#graph_area path[stroke="#aaaaaa"]').each(function () {
186				$(this).parent().append(this);
187			});
188
189		});
190
191		graphActive = true;
192
193	}
194}
195
196
197
198function renderGraphs() {
199	for (graph in graphData.graphs) {
200
201		//var yMax = Math.max( graphData.yMax, graphAreaData.yMax );
202		var yMax = 0;
203		for (key in graphData.graphs[graph].data) {
204			var arr = graphData.graphs[graph].data[key];
205			if ( parseFloat( arr['y'] ) > yMax) {
206				yMax = parseFloat( arr['y'] );
207			}
208		}
209
210		if (yMax > 9) {
211			var numLines = Math.ceil(yMax / 2) + 1;
212		}
213		else if (yMax > 1) {
214			var numLines = Math.ceil(yMax) + 1;
215		}
216		else {
217			var numLines = 5;
218		}
219
220		new Morris.Line({
221			element: graph,								// ID of the element in which to draw the chart.
222			data: graphData.graphs[graph].data, 		// Chart data records -- each entry in this array corresponds to a point on the chart.
223			xkey: 'x', 									// The name of the data record attribute that contains x-values.
224			ykeys: ['y'],					// A list of names of data record attributes that contain y-values.
225			labels: graphData.graphs[graph].labels,		// Labels for the ykeys -- will be displayed when you hover over the chart.
226			parseTime: false,
227			ymax: Math.ceil(yMax),
228			numLines: numLines,
229			postUnits: ' l/min',
230			ymin: 0,
231			hideHover: true,
232			labelAdditionalData: graphData.graphs[graph].labelAdditionalData,
233
234			yLabelFormat: function (y) {
235				if (typeof y !== 'undefined') {
236					if (yMax > 1) {
237						return Math.round(y);
238					}
239					return  (Math.round(y * 100)/100).toFixed(2);
240				}
241			},
242			hoverCallback: function (index, options, content, row) {
243				if (typeof row.y !== 'undefined') {
244					var html = '<p>' + options.labelAdditionalData.titleX + ': ' + row.x + ' ' + options.labelAdditionalData.measureX + '</p>';
245					html += '<p><strong>' + options.labelAdditionalData.titleY + ': ' + row.y + ' ' + options.labelAdditionalData.measureY + '</strong></p>';
246				}
247				return html;
248			}
249		});
250
251		delete graphData.graphs[graph];
252	}
253
254
255	for (graph in graphAreaData.graphs) {
256
257		var yMax = 0;
258		for (key in graphAreaData.graphs[graph].data) {
259			var arr = graphAreaData.graphs[graph].data[key];
260			if ( parseFloat( arr['yMax'] ) > yMax) {
261				yMax = parseFloat( arr['yMax'] );
262			}
263		}
264		//var yMax = Math.max( graphData.yMax, graphAreaData.yMax );
265
266		//var yMax = graphAreaData.yMax;
267
268		if (yMax > 9) {
269			var numLines = Math.ceil(yMax / 2) + 1;
270		}
271		else if (yMax > 1) {
272			var numLines = Math.ceil(yMax) + 1;
273		}
274		else {
275			var numLines = 5;
276		}
277
278		new Morris.Area({
279			element: graph,								// ID of the element in which to draw the chart.
280			data: graphAreaData.graphs[graph].data, 		// Chart data records -- each entry in this array corresponds to a point on the chart.
281			xkey: 'x', 									// The name of the data record attribute that contains x-values.
282			ykeys: ['yMax', 'yMin'],					// A list of names of data record attributes that contain y-values.
283			labels: graphAreaData.graphs[graph].labels,		// Labels for the ykeys -- will be displayed when you hover over the chart.
284			parseTime: false,
285			ymax: Math.ceil(yMax),
286			postUnits: ' l/min',
287			ymin: 0,
288			hideHover: true,
289			behaveLikeLine: true,
290			numLines: numLines,
291			fillOpacity: 1,
292			labelAdditionalData: graphAreaData.graphs[graph].labelAdditionalData,
293
294
295			lineColors: ["#0b62a4", '#000000'],
296
297			pointFillColors: ["#0b62a4", "#0b62a4"],
298
299			yLabelFormat: function (y) {
300				if (typeof y !== 'undefined') {
301					if (yMax > 1) {
302						return Math.round(y);
303					}
304					return  (Math.round(y * 100)/100).toFixed(2);
305				}
306			},
307			hoverCallback: function (index, options, content, row) {
308
309				if (typeof row.yMax !== 'undefined' || typeof row.yMin !== 'undefined') {
310					var html = '<p><strong>' + options.labelAdditionalData.titleY + ' ' + row.x + ' ' + options.labelAdditionalData.measureX + '</strong></p>';
311
312				}
313
314				if (typeof row.yMax !== 'undefined') {
315					html += '<p>' + options.labelAdditionalData.titleYmax + ': ' + row.yMax + ' ' + options.labelAdditionalData.measureY + '</p>';
316				}
317
318				if (typeof row.yMin !== 'undefined') {
319					html += '<p>' + options.labelAdditionalData.titleYmin + ': ' + row.yMin + ' ' + options.labelAdditionalData.measureY + '</p>';
320				}
321
322				return html;
323			}
324		});
325
326
327		$('path[fill="#000000"]').attr('fill', $('#' + graph).parents('[data-duese]').css('background-color'));
328		$('path[stroke="#000000"]').attr('stroke', '#0b62a4');
329
330
331		$('#' + graph + ' path[stroke="#aaaaaa"]').each(function () {
332			$(this).parent().append(this);
333		});
334
335
336		delete graphAreaData.graphs[graph];
337	}
338}
339
340
341
342
343
344$(document).ready(function () {
345
346
347
348
349
350
351
352
353
354
355
356
357	$('[data-toggle]').click(function () {
358		var toggleObject = $('#' + $(this).attr('data-toggle'));
359		if (toggleObject.hasClass('active')) {
360			toggleObject.removeClass('active');
361		} else {
362			toggleObject.addClass('active');
363		}
364	});
365
366
367
368
369	$('[data-enlarge-graph-detail]').click(function () {
370
371
372		$('body').append('<div class="graph-overlay"><div class="graph-large"><div class="graph-title">' + $(this).parent().find('.graph-title').text() + '</div><a class="close-graph-overlay" data-close-graph></a><div id="graph-large" class="large"></div></div></div>');
373
374		if ($(this).attr('data-enlarge-graph-detail') == 'line') {
375
376
377			var xAxis = $('#graph_line').attr('data-graph-x').split(";");
378			var yValues = $('#graph_line').attr('data-graph-y').split(";");
379
380			var yMax = 0;
381
382			var data = [];
383			var printGraph = false;
384
385			for (var i = 0; i < xAxis.length; i++) {
386
387				var newDataPoint = { 'x': xAxis[i] }
388
389				if (yValues[i]) {
390					newDataPoint['y'] = yValues[i];
391					yMax = Math.max(yMax, yValues[i]);
392				}
393
394				data.push(newDataPoint);
395			}
396
397			var labels = [$('#graph_line').attr('data-label')];
398
399			var labelAdditionalData = {
400				'titleX': $('#graph_line').attr('data-title-x'),
401				'titleY': $('#graph_line').attr('data-title-y'),
402				'measureX': $('#graph_line').attr('data-measure-x'),
403				'measureY': $('#graph_line').attr('data-measure-y'),
404			}
405
406			if (yMax > 9) {
407				var numLines = Math.ceil(yMax / 2) + 1;
408			}
409			else if (yMax > 1) {
410				var numLines = Math.ceil(yMax) + 1;
411			}
412			else {
413				var numLines = 5;
414			}
415
416			new Morris.Line({
417				element: 'graph-large',								// ID of the element in which to draw the chart.
418				data: data, 		// Chart data records -- each entry in this array corresponds to a point on the chart.
419				xkey: 'x', 									// The name of the data record attribute that contains x-values.
420				ykeys: ['y'],					// A list of names of data record attributes that contain y-values.
421				labels: labels,		// Labels for the ykeys -- will be displayed when you hover over the chart.
422				parseTime: false,
423				ymax: Math.ceil(yMax),
424				postUnits: ' l/min',
425				ymin: 0,
426				hideHover: true,
427				labelAdditionalData: labelAdditionalData,
428				numLines: numLines,
429				yLabelFormat: function (y) {
430					if (typeof y !== 'undefined') {
431						if (yMax > 1) {
432							return Math.round(y);
433						}
434						return  (Math.round(y * 100)/100).toFixed(2);
435					}
436				},
437				hoverCallback: function (index, options, content, row) {
438					if (typeof row.y !== 'undefined') {
439
440						var html = '<p>' + options.labelAdditionalData.titleX + ': ' + row.x + ' ' + options.labelAdditionalData.measureX + '</p>';
441
442						html += '<p><strong>' + options.labelAdditionalData.titleY + ': ' + row.y + ' ' + options.labelAdditionalData.measureY + '</strong></p>';
443					}
444					return html;
445				}
446			});
447
448
449		} else {
450
451			$('#graph_area').css('display', 'block');
452			var xAxis = $('#graph_area').attr('data-graph-x').split(";");
453
454			var yValuesMin = $('#graph_area').attr('data-graph-y-min').split(";");
455			var yValuesMax = $('#graph_area').attr('data-graph-y-max').split(";");
456
457			var yMax = 0;
458
459			var data = [];
460			var printGraph = false;
461
462			for (var i = 0; i < xAxis.length; i++) {
463
464				var newDataPoint = { 'x': xAxis[i] }
465
466				if (yValuesMin[i]) {
467					newDataPoint['yMin'] = yValuesMin[i];
468					yMax = Math.max(yMax, yValuesMin[i]);
469				}
470
471
472				if (yValuesMax[i]) {
473					newDataPoint['yMax'] = yValuesMax[i];
474					yMax = Math.max(yMax, yValuesMax[i]);
475				}
476
477				data.push(newDataPoint);
478
479			}
480
481			var labels = [$('#graph_area').attr('data-label')];
482
483			var labelAdditionalData = {
484				'titleY': $('#graph_area').attr('data-title-y'),
485				'titleYmin': $('#graph_area').attr('data-title-y-min'),
486				'titleYmax': $('#graph_area').attr('data-title-y-max'),
487				'measureX': $('#graph_area').attr('data-measure-x'),
488				'measureY': $('#graph_area').attr('data-measure-y')
489			};
490
491			if (yMax > 9) {
492				var numLines = Math.ceil(yMax / 2) + 1;
493			}
494			else if (yMax > 1) {
495				var numLines = Math.ceil(yMax) + 1;
496			}
497			else {
498				var numLines = 5;
499			}
500
501			new Morris.Area({
502				element: 'graph-large',								// ID of the element in which to draw the chart.
503				data: data, 		// Chart data records -- each entry in this array corresponds to a point on the chart.
504				xkey: 'x', 									// The name of the data record attribute that contains x-values.
505				ykeys: ['yMax', 'yMin'],					// A list of names of data record attributes that contain y-values.
506				labels: labels,		// Labels for the ykeys -- will be displayed when you hover over the chart.
507				parseTime: false,
508				ymax: Math.ceil(yMax),
509				postUnits: ' l/min',
510				ymin: 0,
511				hideHover: true,
512				behaveLikeLine: true,
513				numLines: numLines,
514				fillOpacity: 1,
515				labelAdditionalData: labelAdditionalData,
516				lineColors: ["#0b62a4", '#000000'],
517				pointFillColors: ["#0b62a4", "#0b62a4"],
518
519				yLabelFormat: function (y) {
520					if (typeof y !== 'undefined') {
521						if (yMax > 1) {
522							return Math.round(y);
523						}
524						return  (Math.round(y * 100)/100).toFixed(2);
525					}
526				},
527				hoverCallback: function (index, options, content, row) {
528
529					if (typeof row.yMax !== 'undefined' || typeof row.yMin !== 'undefined') {
530						var html = '<p><strong>' + options.labelAdditionalData.titleY + ' ' + row.x + ' ' + options.labelAdditionalData.measureX + '</strong></p>';
531
532					}
533
534					if (typeof row.yMax !== 'undefined') {
535						html += '<p>' + options.labelAdditionalData.titleYmax + ': ' + row.yMax + ' ' + options.labelAdditionalData.measureY + '</p>';
536					}
537
538					if (typeof row.yMin !== 'undefined') {
539						html += '<p>' + options.labelAdditionalData.titleYmin + ': ' + row.yMin + ' ' + options.labelAdditionalData.measureY + '</p>';
540					}
541
542					return html;
543				}
544			});
545
546
547			$('path[fill="#000000"]').attr('fill', $('#graph_area').parents('.products-tech-full').css('background-color'));
548			$('path[stroke="#000000"]').attr('stroke', '#0b62a4');
549
550
551			$('#graph_area path[stroke="#aaaaaa"]').each(function () {
552				$(this).parent().append(this);
553			});
554
555
556
557
558
559
560
561		}
562
563
564
565
566
567	});
568
569
570
571
572
573
574
575
576
577
578	$('[data-enlarge-graph]').click(function () {
579
580
581		$('body').append('<div class="graph-overlay"><div class="graph-large"><div class="graph-title">' + $(this).parent().find('.graph-title').text() + '</div><a class="close-graph-overlay" data-close-graph></a><div id="graph-large" class="large"></div></div></div>');
582
583
584
585
586		if ($(this).attr('data-enlarge-graph') == '8') {
587			var graphDataHolder = $(this).parent().find('[data-graph-holder]');
588
589			var xAxis = graphDataHolder.attr('data-graph-x').split(";");
590			var yValues = graphDataHolder.attr('data-graph-y').split(";");
591			var data = [];
592			var yMax = 0;
593
594			$('.graph-large').append('<div class="graph-large-x-label">' + graphDataHolder.attr('data-measure-x') + '</div>');
595
596			for (var i = 0; i < xAxis.length; i++) {
597
598
599				if (yValues[i]) {
600
601					var newDataPoint = { 'x': xAxis[i] }
602
603					newDataPoint['y'] = yValues[i];
604					yMax = Math.max(graphData.yMax, yValues[i]);
605
606					data.push(newDataPoint);
607
608				}
609
610
611			}
612
613			var labels = [graphDataHolder.attr('data-label')];
614
615			var labelAdditionalData = {
616				'titleX': graphDataHolder.attr('data-title-x'),
617				'titleY': graphDataHolder.attr('data-title-y'),
618				'measureX': graphDataHolder.attr('data-measure-x'),
619				'measureY': graphDataHolder.attr('data-measure-y'),
620			}
621
622			if (yMax > 9) {
623				var numLines = Math.ceil(yMax / 2) + 1;
624			}
625			else if (yMax > 1) {
626				var numLines = Math.ceil(yMax) + 1;
627			}
628			else {
629				var numLines = 5;
630			}
631
632			new Morris.Line({
633				element: 'graph-large',								// ID of the element in which to draw the chart.
634				data: data, 		// Chart data records -- each entry in this array corresponds to a point on the chart.
635				xkey: 'x', 									// The name of the data record attribute that contains x-values.
636				ykeys: ['y'],					// A list of names of data record attributes that contain y-values.
637				labels: labels,		// Labels for the ykeys -- will be displayed when you hover over the chart.
638				parseTime: false,
639				ymax: Math.ceil(yMax),
640				numLines: numLines,
641				postUnits: ' l/min',
642				ymin: 0,
643				hideHover: true,
644				fillOpacity: 1,
645				labelAdditionalData: labelAdditionalData,
646				yLabelFormat: function (y) {
647					if (typeof y !== 'undefined') {
648						if (yMax > 1) {
649							return Math.round(y);
650						}
651						return  (Math.round(y * 100)/100).toFixed(2);
652					}
653				},
654				hoverCallback: function (index, options, content, row) {
655					if (typeof row.y !== 'undefined') {
656
657						var html = '<p>' + options.labelAdditionalData.titleX + ': ' + row.x + ' ' + options.labelAdditionalData.measureX + '</p>';
658
659						html += '<p><strong>' + options.labelAdditionalData.titleY + ': ' + row.y + ' ' + options.labelAdditionalData.measureY + '</strong></p>';
660					}
661					return html;
662				}
663			});
664		}
665
666
667		if ($(this).attr('data-enlarge-graph') == '11') {
668			var graphDataHolder = $(this).parent().find('[data-graph-area-holder]');
669
670			var xAxis = graphDataHolder.attr('data-graph-x').split(";");
671			var yValuesMin = graphDataHolder.attr('data-graph-y-min').split(";");
672			var yValuesMax = graphDataHolder.attr('data-graph-y-max').split(";");
673			var data = [];
674			var yMax = 0;
675
676			$('.graph-large').append('<div class="graph-large-x-label">' + graphDataHolder.attr('data-measure-x') + '</div>');
677
678			for (var i = 0; i < xAxis.length; i++) {
679
680				if (yValuesMin[i] || yValuesMax[i]) {
681					var newDataPoint = { 'x': xAxis[i] }
682
683					if (yValuesMin[i]) {
684						newDataPoint['yMin'] = yValuesMin[i];
685						yMax = Math.max(yMax, yValuesMin[i]);
686					}
687
688					if (yValuesMax[i]) {
689						newDataPoint['yMax'] = yValuesMax[i];
690						yMax = Math.max(yMax, yValuesMax[i]);
691					}
692
693					data.push(newDataPoint);
694				}
695			}
696
697			var labels = [graphDataHolder.attr('data-label')];
698			var labelAdditionalData = {
699				'titleY': graphDataHolder.attr('data-title-y'),
700				'titleYmin': graphDataHolder.attr('data-title-y-min'),
701				'titleYmax': graphDataHolder.attr('data-title-y-max'),
702				'measureX': graphDataHolder.attr('data-measure-x'),
703				'measureY': graphDataHolder.attr('data-measure-y')
704			}
705
706			if (yMax > 9) {
707				var numLines = Math.ceil(yMax / 2) + 1;
708			}
709			else if (yMax > 1) {
710				var numLines = Math.ceil(yMax) + 1;
711			}
712			else {
713				var numLines = 5;
714			}
715
716			new Morris.Area({
717				element: 'graph-large',								// ID of the element in which to draw the chart.
718				data: data, 		// Chart data records -- each entry in this array corresponds to a point on the chart.
719				xkey: 'x', 									// The name of the data record attribute that contains x-values.
720				ykeys: ['yMax', 'yMin'],					// A list of names of data record attributes that contain y-values.
721				labels: labels,		// Labels for the ykeys -- will be displayed when you hover over the chart.
722				parseTime: false,
723				ymax: Math.ceil(yMax),
724				numLines: numLines,
725				postUnits: ' l/min',
726				ymin: 0,
727				hideHover: true,
728				behaveLikeLine: true,
729
730				fillOpacity: 1,
731				labelAdditionalData: labelAdditionalData,
732
733
734				lineColors: ["#0b62a4", '#000000'],
735
736				pointFillColors: ["#0b62a4", "#0b62a4"],
737
738				yLabelFormat: function (y) {
739					if (typeof y !== 'undefined') {
740						if (yMax > 1) {
741							return Math.round(y);
742						}
743						return  (Math.round(y * 100)/100).toFixed(2);
744					}
745				},
746				hoverCallback: function (index, options, content, row) {
747
748					if (typeof row.yMax !== 'undefined' || typeof row.yMin !== 'undefined') {
749						var html = '<p><strong>' + options.labelAdditionalData.titleY + ' ' + row.x + ' ' + options.labelAdditionalData.measureX + '</strong></p>';
750					}
751
752					if (typeof row.yMax !== 'undefined') {
753						html += '<p>' + options.labelAdditionalData.titleYmax + ': ' + row.yMax + ' ' + options.labelAdditionalData.measureY + '</p>';
754					}
755
756					if (typeof row.yMin !== 'undefined') {
757						html += '<p>' + options.labelAdditionalData.titleYmin + ': ' + row.yMin + ' ' + options.labelAdditionalData.measureY + '</p>';
758					}
759
760					return html;
761				}
762			});
763
764			$('path[fill="#000000"]').attr('fill', $('#graph-large').parents('.graph-large').
764css('background-color'));
765			$('path[stroke="#000000"]').attr('stroke', '#0b62a4');
766
767
768			$('#graph-large path[stroke="#aaaaaa"]').each(function () {
769				$(this).parent().append(this);
770			});
771		}
772	});
773
774	$('[data-close-graph]').live('click', function () { $('.graph-overlay').remove() });
775
776	graphData = {};
777
778	graphData.graphs = {};
779	graphData.yMax = 0;
780
781	var axisconcat = [];
782	$('[data-graph-x]').each(function () {
783		var newaxis = $(this).attr('data-graph-x').split(';');
784		axisconcat = axisconcat.concat(newaxis);
785	});
786	graphData.xAxis = axisconcat.filter(function (item, pos) { return axisconcat.indexOf(item) == pos });
787
788
789
790
791	//			graphData.xAxis = [1,2,3,4,5,6,7,8,9,10,25];
792
793	$('[data-graph-holder]').each(function () {
794		$(this).css('display', 'block');
795
796		var xAxis = $(this).attr('data-graph-x').split(";");
797
798		var yValues = $(this).attr('data-graph-y').split(";");
799
800
801		var data = [];
802		var printGraph = false;
803
804		for (var i = 0; i < graphData.xAxis.length; i++) {
805
806			var newDataPoint = { 'x': graphData.xAxis[i] }
807
808			if (yValues[i]) {
809				newDataPoint['y'] = yValues[i];
810				graphData.yMax = Math.max(graphData.yMax, yValues[i]);
811			}
812
813			data.push(newDataPoint);
814
815		}
816
817		graphData.graphs[$(this).attr('id')] = {
818			'labels': [$(this).attr('data-label')],
819			'labelAdditionalData': {
820				'titleX': $(this).attr('data-title-x'),
821				'titleY': $(this).attr('data-title-y'),
822				'measureX': $(this).attr('data-measure-x'),
823				'measureY': $(this).attr('data-measure-y')
824			},
825			'data': data
826		};
827	});
828
829	graphAreaData = {};
830
831	graphAreaData.graphs = {};
832	graphAreaData.yMax = 0;
833
834
835	$('[data-graph-area-holder]').each(function () {
836		$(this).css('display', 'block');
837
838		var xAxis = $(this).attr('data-graph-x').split(";");
839
840		var yValuesMin = $(this).attr('data-graph-y-min').split(";");
841		var yValuesMax = $(this).attr('data-graph-y-max').split(";");
842
843
844		var data = [];
845		var printGraph = false;
846
847		for (var i = 0; i < graphData.xAxis.length; i++) {
848
849			var newDataPoint = { 'x': graphData.xAxis[i] }
850
851			if (yValuesMin[i]) {
852				newDataPoint['yMin'] = yValuesMin[i];
853				graphAreaData.yMax = Math.max(graphAreaData.yMax, yValuesMin[i]);
854			}
855
856
857			if (yValuesMax[i]) {
858				newDataPoint['yMax'] = yValuesMax[i];
859				graphAreaData.yMax = Math.max(graphAreaData.yMax, yValuesMax[i]);
860			}
861
862			data.push(newDataPoint);
863
864		}
865
866		graphAreaData.graphs[$(this).attr('id')] = {
867			'labels': [$(this).attr('data-label')],
868			labelAdditionalData: {
869				'titleY': $(this).attr('data-title-y'),
870				'titleYmin': $(this).attr('data-title-y-min'),
871				'titleYmax': $(this).attr('data-title-y-max'),
872				'measureX': $(this).attr('data-measure-x'),
873				'measureY': $(this).attr('data-measure-y')
874			},
875			'data': data
876		};
877	});
878
879});
880
881
882$('[data-filter-duesen]').click(function () {
883	$('[data-filter-duesen]').removeClass('active');
884	$(this).addClass('active');
885
886	if ($(this).attr('data-filter-duesen') == 'all') {
887		$('[data-duese]').removeClass('hidden');
888	} else {
889		$('[data-duese]').addClass('hidden');
890		$('[data-duese="' + $(this).attr('data-filter-duesen') + '"]').removeClass('hidden');
891	}
892});

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.