/* Highcharts JS v3.0.6 (2013-10-04) (c) 2009-2013 Torstein Hønsi License: www.highcharts.com/license */ (function (j, C) { function J(a, b, c) { this.init.call(this, a, b, c); } function K(a, b, c) { a.call(this, b, c); if (this.chart.polar) (this.closeSegment = function (a) { var c = this.xAxis.center; a.push('L', c[0], c[1]); }), (this.closedStacks = !0); } function L(a, b) { var c = this.chart, d = this.options.animation, g = this.group, f = this.markerGroup, e = this.xAxis.center, i = c.plotLeft, n = c.plotTop; if (c.polar) { if (c.renderer.isSVG) if ((d === !0 && (d = {}), b)) { if ( ((c = { translateX: e[0] + i, translateY: e[1] + n, scaleX: 0.001, scaleY: 0.001 }), g.attr(c), f) ) (f.attrSetters = g.attrSetters), f.attr(c); } else (c = { translateX: i, translateY: n, scaleX: 1, scaleY: 1 }), g.animate(c, d), f && f.animate(c, d), (this.animate = null); } else a.call(this, b); } var P = j.arrayMin, Q = j.arrayMax, s = j.each, F = j.extend, p = j.merge, R = j.map, r = j.pick, v = j.pInt, m = j.getOptions().plotOptions, h = j.seriesTypes, x = j.extendClass, M = j.splat, o = j.wrap, N = j.Axis, u = j.Tick, z = j.Series, q = h.column.prototype, t = Math, D = t.round, A = t.floor, S = t.max, w = function () {}; F(J.prototype, { init: function (a, b, c) { var d = this, g = d.defaultOptions; d.chart = b; if (b.angular) g.background = {}; d.options = a = p(g, a); (a = a.background) && s([].concat(M(a)).reverse(), function (a) { var b = a.backgroundColor, a = p(d.defaultBackgroundOptions, a); if (b) a.backgroundColor = b; a.color = a.backgroundColor; c.options.plotBands.unshift(a); }); }, defaultOptions: { center: ['50%', '50%'], size: '85%', startAngle: 0 }, defaultBackgroundOptions: { shape: 'circle', borderWidth: 1, borderColor: 'silver', backgroundColor: { linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, stops: [ [0, '#FFF'], [1, '#DDD'], ], }, from: Number.MIN_VALUE, innerRadius: 0, to: Number.MAX_VALUE, outerRadius: '105%', }, }); var G = N.prototype, u = u.prototype, T = { getOffset: w, redraw: function () { this.isDirty = !1; }, render: function () { this.isDirty = !1; }, setScale: w, setCategories: w, setTitle: w, }, O = { isRadial: !0, defaultRadialGaugeOptions: { labels: { align: 'center', x: 0, y: null }, minorGridLineWidth: 0, minorTickInterval: 'auto', minorTickLength: 10, minorTickPosition: 'inside', minorTickWidth: 1, plotBands: [], tickLength: 10, tickPosition: 'inside', tickWidth: 2, title: { rotation: 0 }, zIndex: 2, }, defaultRadialXOptions: { gridLineWidth: 1, labels: { align: null, distance: 15, x: 0, y: null }, maxPadding: 0, minPadding: 0, plotBands: [], showLastLabel: !1, tickLength: 0, }, defaultRadialYOptions: { gridLineInterpolation: 'circle', labels: { align: 'right', x: -3, y: -2 }, plotBands: [], showLastLabel: !1, title: { x: 4, text: null, rotation: 90 }, }, setOptions: function (a) { this.options = p(this.defaultOptions, this.defaultRadialOptions, a); }, getOffset: function () { G.getOffset.call(this); this.chart.axisOffset[this.side] = 0; }, getLinePath: function (a, b) { var c = this.center, b = r(b, c[2] / 2 - this.offset); return this.chart.renderer.symbols.arc(this.left + c[0], this.top + c[1], b, b, { start: this.startAngleRad, end: this.endAngleRad, open: !0, innerR: 0, }); }, setAxisTranslation: function () { G.setAxisTranslation.call(this); if ( this.center && ((this.transA = this.isCircular ? (this.endAngleRad - this.startAngleRad) / (this.max - this.min || 1) : this.center[2] / 2 / (this.max - this.min || 1)), this.isXAxis) ) this.minPixelPadding = this.transA * this.minPointOffset + (this.reversed ? (this.endAngleRad - this.startAngleRad) / 4 : 0); }, beforeSetTickPositions: function () { this.autoConnect && (this.max += (this.categories && 1) || this.pointRange || this.closestPointRange || 0); }, setAxisSize: function () { G.setAxisSize.call(this); if (this.isRadial) (this.center = this.pane.center = h.pie.prototype.getCenter.call(this.pane)), (this.len = this.width = this.height = this.isCircular ? (this.center[2] * (this.endAngleRad - this.startAngleRad)) / 2 : this.center[2] / 2); }, getPosition: function (a, b) { if (!this.isCircular) (b = this.translate(a)), (a = this.min); return this.postTranslate(this.translate(a), r(b, this.center[2] / 2) - this.offset); }, postTranslate: function (a, b) { var c = this.chart, d = this.center, a = this.startAngleRad + a; return { x: c.plotLeft + d[0] + Math.cos(a) * b, y: c.plotTop + d[1] + Math.sin(a) * b }; }, getPlotBandPath: function (a, b, c) { var d = this.center, g = this.startAngleRad, f = d[2] / 2, e = [r(c.outerRadius, '100%'), c.innerRadius, r(c.thickness, 10)], i = /%$/, n, l = this.isCircular; this.options.gridLineInterpolation === 'polygon' ? (d = this.getPlotLinePath(a).concat(this.getPlotLinePath(b, !0))) : (l || ((e[0] = this.translate(a)), (e[1] = this.translate(b))), (e = R(e, function (a) { i.test(a) && (a = (v(a, 10) * f) / 100); return a; })), c.shape === 'circle' || !l ? ((a = -Math.PI / 2), (b = Math.PI * 1.5), (n = !0)) : ((a = g + this.translate(a)), (b = g + this.translate(b))), (d = this.chart.renderer.symbols.arc(this.left + d[0], this.top + d[1], e[0], e[0], { start: a, end: b, innerR: r(e[1], e[0] - e[2]), open: n, }))); return d; }, getPlotLinePath: function (a, b) { var c = this.center, d = this.chart, g = this.getPosition(a), f, e, i; this.isCircular ? (i = ['M', c[0] + d.plotLeft, c[1] + d.plotTop, 'L', g.x, g.y]) : this.options.gridLineInterpolation === 'circle' ? (a = this.translate(a)) && (i = this.getLinePath(0, a)) : ((f = d.xAxis[0]), (i = []), (a = this.translate(a)), (c = f.tickPositions), f.autoConnect && (c = c.concat([c[0]])), b && (c = [].concat(c).reverse()), s(c, function (c, b) { e = f.getPosition(c, a); i.push(b ? 'L' : 'M', e.x, e.y); })); return i; }, getTitlePosition: function () { var a = this.center, b = this.chart, c = this.options.title; return { x: b.plotLeft + a[0] + (c.x || 0), y: b.plotTop + a[1] - { high: 0.5, middle: 0.25, low: 0 }[c.align] * a[2] + (c.y || 0), }; }, }; o(G, 'init', function (a, b, c) { var k; var d = b.angular, g = b.polar, f = c.isX, e = d && f, i, n; n = b.options; var l = c.pane || 0; if (d) { if ((F(this, e ? T : O), (i = !f))) this.defaultRadialOptions = this.defaultRadialGaugeOptions; } else if (g) F(this, O), (this.defaultRadialOptions = (i = f) ? this.defaultRadialXOptions : p(this.defaultYAxisOptions, this.defaultRadialYOptions)); a.call(this, b, c); if (!e && (d || g)) { a = this.options; if (!b.panes) b.panes = []; this.pane = ((k = b.panes[l] = b.panes[l] || new J(M(n.pane)[l], b, this)), (l = k)); l = l.options; b.inverted = !1; n.chart.zoomType = null; this.startAngleRad = b = ((l.startAngle - 90) * Math.PI) / 180; this.endAngleRad = n = ((r(l.endAngle, l.startAngle + 360) - 90) * Math.PI) / 180; this.offset = a.offset || 0; if ((this.isCircular = i) && c.max === C && n - b === 2 * Math.PI) this.autoConnect = !0; } }); o(u, 'getPosition', function (a, b, c, d, g) { var f = this.axis; return f.getPosition ? f.getPosition(c) : a.call(this, b, c, d, g); }); o(u, 'getLabelPosition', function (a, b, c, d, g, f, e, i, n) { var l = this.axis, k = f.y, h = f.align, j = (((l.translate(this.pos) + l.startAngleRad + Math.PI / 2) / Math.PI) * 180) % 360; l.isRadial ? ((a = l.getPosition(this.pos, l.center[2] / 2 + r(f.distance, -25))), f.rotation === 'auto' ? d.attr({ rotation: j }) : k === null && (k = v(d.styles.lineHeight) * 0.9 - d.getBBox().height / 2), h === null && ((h = l.isCircular ? j > 20 && j < 160 ? 'left' : j > 200 && j < 340 ? 'right' : 'center' : 'center'), d.attr({ align: h })), (a.x += f.x), (a.y += k)) : (a = a.call(this, b, c, d, g, f, e, i, n)); return a; }); o(u, 'getMarkPath', function (a, b, c, d, g, f, e) { var i = this.axis; i.isRadial ? ((a = i.getPosition(this.pos, i.center[2] / 2 + d)), (b = ['M', b, c, 'L', a.x, a.y])) : (b = a.call(this, b, c, d, g, f, e)); return b; }); m.arearange = p(m.area, { lineWidth: 1, marker: null, threshold: null, tooltip: { pointFormat: '{series.name}: {point.low} - {point.high}
', }, trackByArea: !0, dataLabels: { verticalAlign: null, xLow: 0, xHigh: 0, yLow: 0, yHigh: 0 }, }); h.arearange = j.extendClass(h.area, { type: 'arearange', pointArrayMap: ['low', 'high'], toYData: function (a) { return [a.low, a.high]; }, pointValKey: 'low', getSegments: function () { var a = this; s(a.points, function (b) { if (!a.options.connectNulls && (b.low === null || b.high === null)) b.y = null; else if (b.low === null && b.high !== null) b.y = b.high; }); z.prototype.getSegments.call(this); }, translate: function () { var a = this.yAxis; h.area.prototype.translate.apply(this); s(this.points, function (b) { var c = b.low, d = b.high, g = b.plotY; d === null && c === null ? (b.y = null) : c === null ? ((b.plotLow = b.plotY = null), (b.plotHigh = a.translate(d, 0, 1, 0, 1))) : d === null ? ((b.plotLow = g), (b.plotHigh = null)) : ((b.plotLow = g), (b.plotHigh = a.translate(d, 0, 1, 0, 1))); }); }, getSegmentPath: function (a) { var b, c = [], d = a.length, g = z.prototype.getSegmentPath, f, e; e = this.options; var i = e.step; for ( b = HighchartsAdapter.grep(a, function (a) { return a.plotLow !== null; }); d--; ) (f = a[d]), f.plotHigh !== null && c.push({ plotX: f.plotX, plotY: f.plotHigh }); a = g.call(this, b); if (i) i === !0 && (i = 'left'), (e.step = { left: 'right', center: 'center', right: 'left' }[i]); c = g.call(this, c); e.step = i; e = [].concat(a, c); c[0] = 'L'; this.areaPath = this.areaPath.concat(a, c); return e; }, drawDataLabels: function () { var a = this.data, b = a.length, c, d = [], g = z.prototype, f = this.options.dataLabels, e, i = this.chart.inverted; if (f.enabled || this._hasPointLabels) { for (c = b; c--; ) (e = a[c]), (e.y = e.high), (e.plotY = e.plotHigh), (d[c] = e.dataLabel), (e.dataLabel = e.dataLabelUpper), (e.below = !1), i ? ((f.align = 'left'), (f.x = f.xHigh)) : (f.y = f.yHigh); g.drawDataLabels.apply(this, arguments); for (c = b; c--; ) (e = a[c]), (e.dataLabelUpper = e.dataLabel), (e.dataLabel = d[c]), (e.y = e.low), (e.plotY = e.plotLow), (e.below = !0), i ? ((f.align = 'right'), (f.x = f.xLow)) : (f.y = f.yLow); g.drawDataLabels.apply(this, arguments); } }, alignDataLabel: h.column.prototype.alignDataLabel, getSymbol: h.column.prototype.getSymbol, drawPoints: w, }); m.areasplinerange = p(m.arearange); h.areasplinerange = x(h.arearange, { type: 'areasplinerange', getPointSpline: h.spline.prototype.getPointSpline, }); m.columnrange = p(m.column, m.arearange, { lineWidth: 1, pointRange: null }); h.columnrange = x(h.arearange, { type: 'columnrange', translate: function () { var a = this, b = a.yAxis, c; q.translate.apply(a); s(a.points, function (d) { var g = d.shapeArgs, f = a.options.minPointLength, e; d.plotHigh = c = b.translate(d.high, 0, 1, 0, 1); d.plotLow = d.plotY; e = c; d = d.plotY - c; d < f && ((f -= d), (d += f), (e -= f / 2)); g.height = d; g.y = e; }); }, trackerGroups: ['group', 'dataLabels'], drawGraph: w, pointAttrToOptions: q.pointAttrToOptions, drawPoints: q.drawPoints, drawTracker: q.drawTracker, animate: q.animate, getColumnMetrics: q.getColumnMetrics, }); m.gauge = p(m.line, { dataLabels: { enabled: !0, y: 15, borderWidth: 1, borderColor: 'silver', borderRadius: 3, style: { fontWeight: 'bold' }, verticalAlign: 'top', zIndex: 2, }, dial: {}, pivot: {}, tooltip: { headerFormat: '' }, showInLegend: !1, }); u = { type: 'gauge', pointClass: j.extendClass(j.Point, { setState: function (a) { this.state = a; }, }), angular: !0, drawGraph: w, fixedBox: !0, trackerGroups: ['group', 'dataLabels'], translate: function () { var a = this.yAxis, b = this.options, c = a.center; this.generatePoints(); s(this.points, function (d) { var g = p(b.dial, d.dial), f = (v(r(g.radius, 80)) * c[2]) / 200, e = (v(r(g.baseLength, 70)) * f) / 100, i = (v(r(g.rearLength, 10)) * f) / 100, n = g.baseWidth || 3, l = g.topWidth || 1, k = a.startAngleRad + a.translate(d.y, null, null, null, !0); b.wrap === !1 && (k = Math.max(a.startAngleRad, Math.min(a.endAngleRad, k))); k = (k * 180) / Math.PI; d.shapeType = 'path'; d.shapeArgs = { d: g.path || [ 'M', -i, -n / 2, 'L', e, -n / 2, f, -l / 2, f, l / 2, e, n / 2, -i, n / 2, 'z', ], translateX: c[0], translateY: c[1], rotation: k, }; d.plotX = c[0]; d.plotY = c[1]; }); }, drawPoints: function () { var a = this, b = a.yAxis.center, c = a.pivot, d = a.options, g = d.pivot, f = a.chart.renderer; s(a.points, function (c) { var b = c.graphic, g = c.shapeArgs, l = g.d, k = p(d.dial, c.dial); b ? (b.animate(g), (g.d = l)) : (c.graphic = f[c.shapeType](g) .attr({ stroke: k.borderColor || 'none', 'stroke-width': k.borderWidth || 0, fill: k.backgroundColor || 'black', rotation: g.rotation, }) .add(a.group)); }); c ? c.animate({ translateX: b[0], translateY: b[1] }) : (a.pivot = f .circle(0, 0, r(g.radius, 5)) .attr({ 'stroke-width': g.borderWidth || 0, stroke: g.borderColor || 'silver', fill: g.backgroundColor || 'black', }) .translate(b[0], b[1]) .add(a.group)); }, animate: function (a) { var b = this; if (!a) s(b.points, function (a) { var d = a.graphic; d && (d.attr({ rotation: (b.yAxis.startAngleRad * 180) / Math.PI }), d.animate({ rotation: a.shapeArgs.rotation }, b.options.animation)); }), (b.animate = null); }, render: function () { this.group = this.plotGroup( 'group', 'series', this.visible ? 'visible' : 'hidden', this.options.zIndex, this.chart.seriesGroup, ); h.pie.prototype.render.call(this); this.group.clip(this.chart.clipRect); }, setData: h.pie.prototype.setData, drawTracker: h.column.prototype.drawTracker, }; h.gauge = j.extendClass(h.line, u); m.boxplot = p(m.column, { fillColor: '#FFFFFF', lineWidth: 1, medianWidth: 2, states: { hover: { brightness: -0.3 } }, threshold: null, tooltip: { pointFormat: '{series.name}
Maximum: {point.high}
Upper quartile: {point.q3}
Median: {point.median}
Lower quartile: {point.q1}
Minimum: {point.low}
', }, whiskerLength: '50%', whiskerWidth: 2, }); h.boxplot = x(h.column, { type: 'boxplot', pointArrayMap: ['low', 'q1', 'median', 'q3', 'high'], toYData: function (a) { return [a.low, a.q1, a.median, a.q3, a.high]; }, pointValKey: 'high', pointAttrToOptions: { fill: 'fillColor', stroke: 'color', 'stroke-width': 'lineWidth' }, drawDataLabels: w, translate: function () { var a = this.yAxis, b = this.pointArrayMap; h.column.prototype.translate.apply(this); s(this.points, function (c) { s(b, function (b) { c[b] !== null && (c[b + 'Plot'] = a.translate(c[b], 0, 1, 0, 1)); }); }); }, drawPoints: function () { var a = this, b = a.points, c = a.options, d = a.chart.renderer, g, f, e, i, n, l, k, h, j, m, o, H, p, E, I, q, w, t, v, u, z, y, x = a.doQuartiles !== !1, B = parseInt(a.options.whiskerLength, 10) / 100; s(b, function (b) { j = b.graphic; z = b.shapeArgs; o = {}; E = {}; q = {}; y = b.color || a.color; if (b.plotY !== C) if ( ((g = b.pointAttr[b.selected ? 'selected' : '']), (w = z.width), (t = A(z.x)), (v = t + w), (u = D(w / 2)), (f = A(x ? b.q1Plot : b.lowPlot)), (e = A(x ? b.q3Plot : b.lowPlot)), (i = A(b.highPlot)), (n = A(b.lowPlot)), (o.stroke = b.stemColor || c.stemColor || y), (o['stroke-width'] = r(b.stemWidth, c.stemWidth, c.lineWidth)), (o.dashstyle = b.stemDashStyle || c.stemDashStyle), (E.stroke = b.whiskerColor || c.whiskerColor || y), (E['stroke-width'] = r(b.whiskerWidth, c.whiskerWidth, c.lineWidth)), (q.stroke = b.medianColor || c.medianColor || y), (q['stroke-width'] = r(b.medianWidth, c.medianWidth, c.lineWidth)), (k = (o['stroke-width'] % 2) / 2), (h = t + u + k), (m = ['M', h, e, 'L', h, i, 'M', h, f, 'L', h, n, 'z']), x && ((k = (g['stroke-width'] % 2) / 2), (h = A(h) + k), (f = A(f) + k), (e = A(e) + k), (t += k), (v += k), (H = ['M', t, e, 'L', t, f, 'L', v, f, 'L', v, e, 'L', t, e, 'z'])), B && ((k = (E['stroke-width'] % 2) / 2), (i += k), (n += k), (p = ['M', h - u * B, i, 'L', h + u * B, i, 'M', h - u * B, n, 'L', h + u * B, n])), (k = (q['stroke-width'] % 2) / 2), (l = D(b.medianPlot) + k), (I = ['M', t, l, 'L', v, l, 'z']), j) ) b.stem.animate({ d: m }), B && b.whiskers.animate({ d: p }), x && b.box.animate({ d: H }), b.medianShape.animate({ d: I }); else { b.graphic = j = d.g().add(a.group); b.stem = d.path(m).attr(o).add(j); if (B) b.whiskers = d.path(p).attr(E).add(j); if (x) b.box = d.path(H).attr(g).add(j); b.medianShape = d.path(I).attr(q).add(j); } }); }, }); m.errorbar = p(m.boxplot, { color: '#000000', grouping: !1, linkedTo: ':previous', tooltip: { pointFormat: m.arearange.tooltip.pointFormat }, whiskerWidth: null, }); h.errorbar = x(h.boxplot, { type: 'errorbar', pointArrayMap: ['low', 'high'], toYData: function (a) { return [a.low, a.high]; }, pointValKey: 'high', doQuartiles: !1, getColumnMetrics: function () { return ( (this.linkedParent && this.linkedParent.columnMetrics) || h.column.prototype.getColumnMetrics.call(this) ); }, }); m.waterfall = p(m.column, { lineWidth: 1, lineColor: '#333', dashStyle: 'dot', borderColor: '#333', }); h.waterfall = x(h.column, { type: 'waterfall', upColorProp: 'fill', pointArrayMap: ['low', 'y'], pointValKey: 'y', init: function (a, b) { b.stacking = !0; h.column.prototype.init.call(this, a, b); }, translate: function () { var a = this.options, b = this.yAxis, c, d, g, f, e, i, n, l, k; c = a.threshold; a = (a.borderWidth % 2) / 2; h.column.prototype.translate.apply(this); l = c; g = this.points; for (d = 0, c = g.length; d < c; d++) { f = g[d]; e = f.shapeArgs; i = this.getStack(d); k = i.points[this.index]; if (isNaN(f.y)) f.y = this.yData[d]; n = S(l, l + f.y) + k[0]; e.y = b.translate(n, 0, 1); f.isSum || f.isIntermediateSum ? ((e.y = b.translate(k[1], 0, 1)), (e.height = b.translate(k[0], 0, 1) - e.y)) : (l += i.total); e.height < 0 && ((e.y += e.height), (e.height *= -1)); f.plotY = e.y = D(e.y) - a; e.height = D(e.height); f.yBottom = e.y + e.height; } }, processData: function (a) { var b = this.yData, c = this.points, d, g = b.length, f = this.options.threshold || 0, e, i, h, l, k, j; i = e = h = l = f; for (j = 0; j < g; j++) (k = b[j]), (d = c && c[j] ? c[j] : {}), k === 'sum' || d.isSum ? (b[j] = i) : k === 'intermediateSum' || d.isIntermediateSum ? ((b[j] = e), (e = f)) : ((i += k), (e += k)), (h = Math.min(i, h)), (l = Math.max(i, l)); z.prototype.processData.call(this, a); this.dataMin = h; this.dataMax = l; }, toYData: function (a) { if (a.isSum) return 'sum'; else if (a.isIntermediateSum) return 'intermediateSum'; return a.y; }, getAttribs: function () { h.column.prototype.getAttribs.apply(this, arguments); var a = this.options, b = a.states, c = a.upColor || this.color, a = j.Color(c).brighten(0.1).get(), d = p(this.pointAttr), g = this.upColorProp; d[''][g] = c; d.hover[g] = b.hover.upColor || a; d.select[g] = b.select.upColor || c; s(this.points, function (a) { if (a.y > 0 && !a.color) (a.pointAttr = d), (a.color = c); }); }, getGraphPath: function () { var a = this.data, b = a.length, c = (D(this.options.lineWidth + this.options.borderWidth) % 2) / 2, d = [], g, f, e; for (e = 1; e < b; e++) (f = a[e].shapeArgs), (g = a[e - 1].shapeArgs), (f = ['M', g.x + g.width, g.y + c, 'L', f.x, g.y + c]), a[e - 1].y < 0 && ((f[2] += g.height), (f[5] += g.height)), (d = d.concat(f)); return d; }, getExtremes: w, getStack: function (a) { var b = this.yAxis.stacks, c = this.stackKey; this.processedYData[a] < this.options.threshold && (c = '-' + c); return b[c][a]; }, drawGraph: z.prototype.drawGraph, }); m.bubble = p(m.scatter, { dataLabels: { inside: !0, style: { color: 'white', textShadow: '0px 0px 3px black' }, verticalAlign: 'middle', }, marker: { lineColor: null, lineWidth: 1 }, minSize: 8, maxSize: '20%', tooltip: { pointFormat: '({point.x}, {point.y}), Size: {point.z}' }, turboThreshold: 0, zThreshold: 0, }); h.bubble = x(h.scatter, { type: 'bubble', pointArrayMap: ['y', 'z'], trackerGroups: ['group', 'dataLabelsGroup'], pointAttrToOptions: { stroke: 'lineColor', 'stroke-width': 'lineWidth', fill: 'fillColor' }, applyOpacity: function (a) { var b = this.options.marker, c = r(b.fillOpacity, 0.5), a = a || b.fillColor || this.color; c !== 1 && (a = j.Color(a).setOpacity(c).get('rgba')); return a; }, convertAttribs: function () { var a = z.prototype.convertAttribs.apply(this, arguments); a.fill = this.applyOpacity(a.fill); return a; }, getRadii: function (a, b, c, d) { var g, f, e, i = this.zData, h = []; for (f = 0, g = i.length; f < g; f++) (e = b - a), (e = e > 0 ? (i[f] - a) / (b - a) : 0.5), h.push(t.ceil(c + e * (d - c)) / 2); this.radii = h; }, animate: function (a) { var b = this.options.animation; if (!a) s(this.points, function (a) { var d = a.graphic, a = a.shapeArgs; d && a && (d.attr('r', 1), d.animate({ r: a.r }, b)); }), (this.animate = null); }, translate: function () { var a, b = this.data, c, d, g = this.radii; h.scatter.prototype.translate.call(this); for (a = b.length; a--; ) (c = b[a]), (d = g ? g[a] : 0), (c.negative = c.z < (this.options.zThreshold || 0)), d >= this.minPxSize / 2 ? ((c.shapeType = 'circle'), (c.shapeArgs = { x: c.plotX, y: c.plotY, r: d }), (c.dlBox = { x: c.plotX - d, y: c.plotY - d, width: 2 * d, height: 2 * d })) : (c.shapeArgs = c.plotY = c.dlBox = C); }, drawLegendSymbol: function (a, b) { var c = v(a.itemStyle.fontSize) / 2; b.legendSymbol = this.chart.renderer .circle(c, a.baseline - c, c) .attr({ zIndex: 3 }) .add(b.legendGroup); b.legendSymbol.isMarker = !0; }, drawPoints: h.column.prototype.drawPoints, alignDataLabel: h.column.prototype.alignDataLabel, }); N.prototype.beforePadding = function () { var a = this, b = this.len, c = this.chart, d = 0, g = b, f = this.isXAxis, e = f ? 'xData' : 'yData', i = this.min, h = {}, j = t.min(c.plotWidth, c.plotHeight), k = Number.MAX_VALUE, m = -Number.MAX_VALUE, o = this.max - i, p = b / o, q = []; this.tickPositions && (s(this.series, function (b) { var c = b.options; if (b.type === 'bubble' && b.visible && ((a.allowZoomOutside = !0), q.push(b), f)) s(['minSize', 'maxSize'], function (a) { var b = c[a], d = /%$/.test(b), b = v(b); h[a] = d ? (j * b) / 100 : b; }), (b.minPxSize = h.minSize), (b = b.zData), b.length && ((k = t.min( k, t.max(P(b), c.displayNegative === !1 ? c.zThreshold : -Number.MAX_VALUE), )), (m = t.max(m, Q(b)))); }), s(q, function (a) { var b = a[e], c = b.length, j; f && a.getRadii(k, m, h.minSize, h.maxSize); if (o > 0) for (; c--; ) (j = a.radii[c]), (d = Math.min((b[c] - i) * p - j, d)), (g = Math.max((b[c] - i) * p + j, g)); }), q.length && o > 0 && r(this.options.min, this.userMin) === C && r(this.options.max, this.userMax) === C && ((g -= b), (p *= (b + d - g) / b), (this.min += d / p), (this.max += g / p))); }; var y = z.prototype, m = j.Pointer.prototype; y.toXY = function (a) { var b, c = this.chart; b = a.plotX; var d = a.plotY; a.rectPlotX = b; a.rectPlotY = d; a.clientX = ((b / Math.PI) * 180 + this.xAxis.pane.options.startAngle) % 360; b = this.xAxis.postTranslate(a.plotX, this.yAxis.len - d); a.plotX = a.polarPlotX = b.x - c.plotLeft; a.plotY = a.polarPlotY = b.y - c.plotTop; }; y.orderTooltipPoints = function (a) { if ( this.chart.polar && (a.sort(function (a, c) { return a.clientX - c.clientX; }), a[0]) ) (a[0].wrappedClientX = a[0].clientX + 360), a.push(a[0]); }; o(h.area.prototype, 'init', K); o(h.areaspline.prototype, 'init', K); o(h.spline.prototype, 'getPointSpline', function (a, b, c, d) { var g, f, e, i, h, j, k; if (this.chart.polar) { g = c.plotX; f = c.plotY; a = b[d - 1]; e = b[d + 1]; this.connectEnds && (a || (a = b[b.length - 2]), e || (e = b[1])); if (a && e) (i = a.plotX), (h = a.plotY), (b = e.plotX), (j = e.plotY), (i = (1.5 * g + i) / 2.5), (h = (1.5 * f + h) / 2.5), (e = (1.5 * g + b) / 2.5), (k = (1.5 * f + j) / 2.5), (b = Math.sqrt(Math.pow(i - g, 2) + Math.pow(h - f, 2))), (j = Math.sqrt(Math.pow(e - g, 2) + Math.pow(k - f, 2))), (i = Math.atan2(h - f, i - g)), (h = Math.atan2(k - f, e - g)), (k = Math.PI / 2 + (i + h) / 2), Math.abs(i - k) > Math.PI / 2 && (k -= Math.PI), (i = g + Math.cos(k) * b), (h = f + Math.sin(k) * b), (e = g + Math.cos(Math.PI + k) * j), (k = f + Math.sin(Math.PI + k) * j), (c.rightContX = e), (c.rightContY = k); d ? ((c = ['C', a.rightContX || a.plotX, a.rightContY || a.plotY, i || g, h || f, g, f]), (a.rightContX = a.rightContY = null)) : (c = ['M', g, f]); } else c = a.call(this, b, c, d); return c; }); o(y, 'translate', function (a) { a.call(this); if (this.chart.polar && !this.preventPostTranslate) for (var a = this.points, b = a.length; b--; ) this.toXY(a[b]); }); o(y, 'getSegmentPath', function (a, b) { var c = this.points; if ( this.chart.polar && this.options.connectEnds !== !1 && b[b.length - 1] === c[c.length - 1] && c[0].y !== null ) (this.connectEnds = !0), (b = [].concat(b, [c[0]])); return a.call(this, b); }); o(y, 'animate', L); o(q, 'animate', L); o(y, 'setTooltipPoints', function (a, b) { this.chart.polar && F(this.xAxis, { tooltipLen: 360 }); return a.call(this, b); }); o(q, 'translate', function (a) { var b = this.xAxis, c = this.yAxis.len, d = b.center, g = b.startAngleRad, f = this.chart.renderer, e, h; this.preventPostTranslate = !0; a.call(this); if (b.isRadial) { b = this.points; for (h = b.length; h--; ) (e = b[h]), (a = e.barX + g), (e.shapeType = 'path'), (e.shapeArgs = { d: f.symbols.arc(d[0], d[1], c - e.plotY, null, { start: a, end: a + e.pointWidth, innerR: c - r(e.yBottom, c), }), }), this.toXY(e); } }); o(q, 'alignDataLabel', function (a, b, c, d, g, f) { if (this.chart.polar) { a = (b.rectPlotX / Math.PI) * 180; if (d.align === null) d.align = a > 20 && a < 160 ? 'left' : a > 200 && a < 340 ? 'right' : 'center'; if (d.verticalAlign === null) d.verticalAlign = a < 45 || a > 315 ? 'bottom' : a > 135 && a < 225 ? 'top' : 'middle'; y.alignDataLabel.call(this, b, c, d, g, f); } else a.call(this, b, c, d, g, f); }); o(m, 'getIndex', function (a, b) { var c, d = this.chart, g; d.polar ? ((g = d.xAxis[0].center), (c = b.chartX - g[0] - d.plotLeft), (d = b.chartY - g[1] - d.plotTop), (c = 180 - Math.round((Math.atan2(c, d) / Math.PI) * 180))) : (c = a.call(this, b)); return c; }); o(m, 'getCoordinates', function (a, b) { var c = this.chart, d = { xAxis: [], yAxis: [] }; c.polar ? s(c.axes, function (a) { var f = a.isXAxis, e = a.center, h = b.chartX - e[0] - c.plotLeft, e = b.chartY - e[1] - c.plotTop; d[f ? 'xAxis' : 'yAxis'].push({ axis: a, value: a.translate( f ? Math.PI - Math.atan2(h, e) : Math.sqrt(Math.pow(h, 2) + Math.pow(e, 2)), !0, ), }); }) : (d = a.call(this, b)); return d; }); })(Highcharts);