(function () { var d; window.AmCharts ? (d = window.AmCharts) : ((d = {}), (window.AmCharts = d), (d.themes = {}), (d.maps = {}), (d.inheriting = {}), (d.charts = []), (d.onReadyArray = []), (d.useUTC = !1), (d.updateRate = 60), (d.uid = 0), (d.lang = {}), (d.translations = {}), (d.mapTranslations = {}), (d.windows = {}), (d.initHandlers = []), (d.amString = "am"), (d.pmString = "pm")); d.Class = function (a) { var b = function () { arguments[0] !== d.inheriting && ((this.events = {}), this.construct.apply(this, arguments)); }; a.inherits ? ((b.prototype = new a.inherits(d.inheriting)), (b.base = a.inherits.prototype), delete a.inherits) : ((b.prototype.createEvents = function () { for (var a = 0; a < arguments.length; a++) this.events[arguments[a]] = []; }), (b.prototype.listenTo = function (a, b, c) { this.removeListener(a, b, c); a.events[b].push({ handler: c, scope: this }); }), (b.prototype.addListener = function (a, b, c) { this.removeListener(this, a, b); a && this.events[a] && this.events[a].push({ handler: b, scope: c }); }), (b.prototype.removeListener = function (a, b, c) { if (a && a.events && (a = a.events[b])) for (b = a.length - 1; 0 <= b; b--) a[b].handler === c && a.splice(b, 1); }), (b.prototype.fire = function (a) { for (var b = this.events[a.type], c = 0; c < b.length; c++) { var d = b[c]; d.handler.call(d.scope, a); } })); for (var c in a) b.prototype[c] = a[c]; return b; }; d.addChart = function (a) { window.requestAnimationFrame ? d.animationRequested || ((d.animationRequested = !0), window.requestAnimationFrame(d.update)) : d.updateInt || (d.updateInt = setInterval(function () { d.update(); }, Math.round(1e3 / d.updateRate))); d.charts.push(a); }; d.removeChart = function (a) { for (var b = d.charts, c = b.length - 1; 0 <= c; c--) b[c] == a && b.splice(c, 1); 0 === b.length && (d.requestAnimation && (window.cancelAnimationFrame(d.requestAnimation), (d.animationRequested = !1)), d.updateInt && (clearInterval(d.updateInt), (d.updateInt = NaN))); }; d.isModern = !0; d.getIEVersion = function () { var a = 0, b, c; "Microsoft Internet Explorer" == navigator.appName && ((b = navigator.userAgent), (c = /MSIE ([0-9]{1,}[.0-9]{0,})/), null !== c.exec(b) && (a = parseFloat(RegExp.$1))); return a; }; d.applyLang = function (a, b) { var c = d.translations; b.dayNames = d.extend({}, d.dayNames); b.shortDayNames = d.extend({}, d.shortDayNames); b.monthNames = d.extend({}, d.monthNames); b.shortMonthNames = d.extend({}, d.shortMonthNames); b.amString = "am"; b.pmString = "pm"; c && (c = c[a]) && ((d.lang = c), (b.langObj = c), c.monthNames && ((b.dayNames = d.extend({}, c.dayNames)), (b.shortDayNames = d.extend({}, c.shortDayNames)), (b.monthNames = d.extend({}, c.monthNames)), (b.shortMonthNames = d.extend({}, c.shortMonthNames))), c.am && (b.amString = c.am), c.pm && (b.pmString = c.pm)); d.amString = b.amString; d.pmString = b.pmString; }; d.IEversion = d.getIEVersion(); 9 > d.IEversion && 0 < d.IEversion && ((d.isModern = !1), (d.isIE = !0)); d.dx = 0; d.dy = 0; if (document.addEventListener || window.opera) (d.isNN = !0), (d.isIE = !1), (d.dx = 0.5), (d.dy = 0.5); document.attachEvent && ((d.isNN = !1), (d.isIE = !0), d.isModern || ((d.dx = 0), (d.dy = 0))); window.chrome && (d.chrome = !0); d.handleMouseUp = function (a) { for (var b = d.charts, c = 0; c < b.length; c++) { var e = b[c]; e && e.handleReleaseOutside && e.handleReleaseOutside(a); } }; d.handleMouseMove = function (a) { for (var b = d.charts, c = 0; c < b.length; c++) { var e = b[c]; e && e.handleMouseMove && e.handleMouseMove(a); } }; d.handleKeyUp = function (a) { for (var b = d.charts, c = 0; c < b.length; c++) { var e = b[c]; e && e.handleKeyUp && e.handleKeyUp(a); } }; d.handleWheel = function (a) { for (var b = d.charts, c = 0; c < b.length; c++) { var e = b[c]; if (e && e.mouseIsOver) { (e.mouseWheelScrollEnabled || e.mouseWheelZoomEnabled) && e.handleWheel && (e.handleMouseMove(a), e.handleWheel(a)); break; } } }; d.resetMouseOver = function () { for (var a = d.charts, b = 0; b < a.length; b++) { var c = a[b]; c && (c.mouseIsOver = !1); } }; d.ready = function (a) { d.onReadyArray.push(a); }; d.handleLoad = function () { d.isReady = !0; for (var a = d.onReadyArray, b = 0; b < a.length; b++) { var c = a[b]; isNaN(d.processDelay) ? c() : setTimeout(c, d.processDelay * b); } d.onReadyArray = []; }; d.addInitHandler = function (a, b) { d.initHandlers.push({ method: a, types: b }); }; d.callInitHandler = function (a) { var b = d.initHandlers; if (d.initHandlers) for (var c = 0; c < b.length; c++) { var e = b[c]; e.types ? d.isInArray(e.types, a.type) && e.method(a) : e.method(a); } }; d.getUniqueId = function () { d.uid++; return "AmChartsEl-" + d.uid; }; d.addGlobalListeners = function () { d.globalListenersAdded || ((d.globalListenersAdded = !0), d.isNN && (document.addEventListener("mousemove", d.handleMouseMove), document.addEventListener("keyup", d.handleKeyUp), document.addEventListener("mouseup", d.handleMouseUp, !0), window.addEventListener("load", d.handleLoad, !0)), d.isIE && (document.attachEvent("onmousemove", d.handleMouseMove), document.attachEvent("onmouseup", d.handleMouseUp), window.attachEvent("onload", d.handleLoad))); }; d.addGlobalListeners(); d.addWheelListeners = function () { d.wheelIsListened || (d.isNN && (window.addEventListener("DOMMouseScroll", d.handleWheel, { passive: !1, useCapture: !0 }), document.addEventListener("mousewheel", d.handleWheel, { passive: !1, useCapture: !0 })), d.isIE && document.attachEvent("onmousewheel", d.handleWheel)); d.wheelIsListened = !0; }; d.clear = function () { var a = d.charts; if (a) for (var b = a.length - 1; 0 <= b; b--) a[b].clear(); d.updateInt && clearInterval(d.updateInt); d.requestAnimation && window.cancelAnimationFrame(d.requestAnimation); d.charts = []; d.isNN && (document.removeEventListener("mousemove", d.handleMouseMove, !0), document.removeEventListener("keyup", d.handleKeyUp, !0), document.removeEventListener("mouseup", d.handleMouseUp, !0), window.removeEventListener("load", d.handleLoad, !0), window.removeEventListener("DOMMouseScroll", d.handleWheel, !0), document.removeEventListener("mousewheel", d.handleWheel, !0)); d.isIE && (document.detachEvent("onmousemove", d.handleMouseMove), document.detachEvent("onmouseup", d.handleMouseUp), window.detachEvent("onload", d.handleLoad)); d.globalListenersAdded = !1; d.wheelIsListened = !1; }; d.makeChart = function (a, b, c) { var e = b.type, g = b.theme; d.addGlobalListeners(); d.isString(g) && ((g = d.themes[g]), (b.theme = g)); var f; switch (e) { case "serial": f = new d.AmSerialChart(g); break; case "xy": f = new d.AmXYChart(g); break; case "pie": f = new d.AmPieChart(g); break; case "radar": f = new d.AmRadarChart(g); break; case "gauge": f = new d.AmAngularGauge(g); break; case "funnel": f = new d.AmFunnelChart(g); break; case "map": f = new d.AmMap(g); break; case "stock": f = new d.AmStockChart(g); break; case "gantt": f = new d.AmGanttChart(g); } d.extend(f, b); d.isReady ? isNaN(c) ? f.write(a) : setTimeout(function () { d.realWrite(f, a); }, c) : d.ready(function () { isNaN(c) ? f.write(a) : setTimeout(function () { d.realWrite(f, a); }, c); }); return f; }; d.realWrite = function (a, b) { a.write(b); }; d.updateCount = 0; d.validateAt = Math.round(d.updateRate / 10); d.update = function () { var a = d.charts; d.updateCount++; var b = !1; d.updateCount == d.validateAt && ((b = !0), (d.updateCount = 0)); if (a) for (var c = a.length - 1; 0 <= c; c--) a[c].update && a[c].update(), b && (a[c].autoResize ? a[c].validateSize && a[c].validateSize() : a[c].premeasure && a[c].premeasure()); window.requestAnimationFrame && (d.requestAnimation = window.requestAnimationFrame(d.update)); }; "complete" == document.readyState && d.handleLoad(); })(); (function () { var d = window.AmCharts; d.toBoolean = function (a, b) { if (void 0 === a) return b; switch (String(a).toLowerCase()) { case "true": case "yes": case "1": return !0; case "false": case "no": case "0": case null: return !1; default: return !!a; } }; d.removeFromArray = function (a, b) { var c; if (void 0 !== b && void 0 !== a) for (c = a.length - 1; 0 <= c; c--) a[c] == b && a.splice(c, 1); }; d.getPath = function () { var a = document.getElementsByTagName("script"); if (a) for (var b = 0; b < a.length; b++) { var c = a[b].src; if (-1 !== c.search(/\/(amcharts|ammap)\.js/)) return c.replace(/\/(amcharts|ammap)\.js.*/, "/"); } }; d.normalizeUrl = function (a) { return "" !== a && -1 === a.search(/\/$/) ? a + "/" : a; }; d.isAbsolute = function (a) { return 0 === a.search(/^http[s]?:|^\//); }; d.isInArray = function (a, b) { for (var c = 0; c < a.length; c++) if (a[c] == b) return !0; return !1; }; d.getDecimals = function (a) { var b = 0; isNaN(a) || ((a = String(a)), -1 != a.indexOf("e-") ? (b = Number(a.split("-")[1])) : -1 != a.indexOf(".") && (b = a.split(".")[1].length)); return b; }; d.wordwrap = function (a, b, c, e) { var g, f, k, h; a += ""; if (1 > b) return a; g = -1; for (a = (h = a.split(/\r\n|\n|\r/)).length; ++g < a; h[g] += k) { k = h[g]; for (h[g] = ""; k.length > b; h[g] += d.trim(k.slice(0, f)) + ((k = k.slice(f)).length ? c : "")) f = 2 == e || (f = k.slice(0, b + 1).match(/\S*(\s)?$/))[1] ? b : f.input.length - f[0].length || (1 == e && b) || f.input.length + (f = k.slice(b).match(/^\S*/))[0].length; k = d.trim(k); } return h.join(c); }; d.trim = function (a) { return a.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ""); }; d.wrappedText = function (a, b, c, e, g, f, k, h) { var l = d.text(a, b, c, e, g, f, k); if (l) { var m = l.getBBox(); if (m.width > h) { var n = "\n"; d.isModern || (n = "
"); h = Math.floor(h / (m.width / b.length)); 2 < h && (h -= 2); b = d.wordwrap(b, h, n, !0); l.remove(); l = d.text(a, b, c, e, g, f, k); } } return l; }; d.getStyle = function (a, b) { var c = ""; if (document.defaultView && document.defaultView.getComputedStyle) try { c = document.defaultView.getComputedStyle(a, "").getPropertyValue(b); } catch (e) {} else a.currentStyle && ((b = b.replace(/\-(\w)/g, function (a, b) { return b.toUpperCase(); })), (c = a.currentStyle[b])); return c; }; d.removePx = function (a) { if (void 0 !== a) return Number(a.substring(0, a.length - 2)); }; d.getURL = function (a, b) { if (a) if ("_self" != b && b) if ("_top" == b && window.top) window.top.location.href = a; else if ("_parent" == b && window.parent) window.parent.location.href = a; else if ("_blank" == b) window.open(a); else { var c = document.getElementsByName(b)[0]; c ? (c.src = a) : (c = d.windows[b]) ? (c.opener && !c.opener.closed ? (c.location.href = a) : (d.windows[b] = window.open(a))) : (d.windows[b] = window.open(a)); } else window.location.href = a; }; d.ifArray = function (a) { return a && "object" == typeof a && 0 < a.length ? !0 : !1; }; d.callMethod = function (a, b) { var c; for (c = 0; c < b.length; c++) { var e = b[c]; if (e) { if (e[a]) e[a](); var d = e.length; if (0 < d) { var f; for (f = 0; f < d; f++) { var k = e[f]; if (k && k[a]) k[a](); } } } } }; d.toNumber = function (a) { return "number" == typeof a ? a : Number(String(a).replace(/[^0-9\-.]+/g, "")); }; d.toColor = function (a) { if ("" !== a && void 0 !== a) if (-1 != a.indexOf(",")) { a = a.split(","); var b; for (b = 0; b < a.length; b++) { var c = a[b].substring(a[b].length - 6, a[b].length); a[b] = "#" + c; } } else (a = a.substring(a.length - 6, a.length)), (a = "#" + a); return a; }; d.toCoordinate = function (a, b, c) { var e; void 0 !== a && ((a = String(a)), c && c < b && (b = c), (e = Number(a)), -1 != a.indexOf("!") && (e = b - Number(a.substr(1))), -1 != a.indexOf("%") && (e = (b * Number(a.substr(0, a.length - 1))) / 100)); return e; }; d.fitToBounds = function (a, b, c) { a < b && (a = b); a > c && (a = c); return a; }; d.isDefined = function (a) { return void 0 === a ? !1 : !0; }; d.stripNumbers = function (a) { return a.replace(/[0-9]+/g, ""); }; d.roundTo = function (a, b) { if (0 > b) return a; var c = Math.pow(10, b); return Math.round(a * c) / c; }; d.toFixed = function (a, b) { var c = !1; 0 > a && ((c = !0), (a = Math.abs(a))); var e = String(Math.round(a * Math.pow(10, b))); if (0 < b) { var d = e.length; if (d < b) { var f; for (f = 0; f < b - d; f++) e = "0" + e; } d = e.substring(0, e.length - b); "" === d && (d = 0); e = d + "." + e.substring(e.length - b, e.length); return c ? "-" + e : e; } return String(e); }; d.formatDuration = function (a, b, c, e, g, f) { var k = d.intervals, h = f.decimalSeparator; if (a >= k[b].contains) { var l = a - Math.floor(a / k[b].contains) * k[b].contains; "ss" == b ? ((l = d.formatNumber(l, f)), 1 == l.split(h)[0].length && (l = "0" + l)) : (l = d.roundTo(l, f.precision)); ("mm" == b || "hh" == b) && 10 > l && (l = "0" + l); c = l + "" + e[b] + "" + c; a = Math.floor(a / k[b].contains); b = k[b].nextInterval; return d.formatDuration(a, b, c, e, g, f); } "ss" == b && ((a = d.formatNumber(a, f)), 1 == a.split(h)[0].length && (a = "0" + a)); "mm" == b && (a = d.roundTo(a, f.precision)); ("mm" == b || "hh" == b) && 10 > a && (a = "0" + a); c = a + "" + e[b] + "" + c; if (k[g].count > k[b].count) for (a = k[b].count; a < k[g].count; a++) (b = k[b].nextInterval), "ss" == b || "mm" == b || "hh" == b ? (c = "00" + e[b] + "" + c) : "DD" == b && (c = "0" + e[b] + "" + c); ":" == c.charAt(c.length - 1) && (c = c.substring(0, c.length - 1)); return c; }; d.formatNumber = function (a, b, c, e, g) { a = d.roundTo(a, b.precision); isNaN(c) && (c = b.precision); var f = b.decimalSeparator; b = b.thousandsSeparator; void 0 == f && (f = ","); void 0 == b && (b = " "); var k; k = 0 > a ? "-" : ""; a = Math.abs(a); var h = String(a), l = !1; -1 != h.indexOf("e") && (l = !0); 0 <= c && !l && (h = d.toFixed(a, c)); var m = ""; if (l) m = h; else { var h = h.split("."), l = String(h[0]), n; for (n = l.length; 0 <= n; n -= 3) m = n != l.length ? (0 !== n ? l.substring(n - 3, n) + b + m : l.substring(n - 3, n) + m) : l.substring(n - 3, n); void 0 !== h[1] && (m = m + f + h[1]); void 0 !== c && 0 < c && "0" != m && (m = d.addZeroes(m, f, c)); } m = k + m; "" === k && !0 === e && 0 !== a && (m = "+" + m); !0 === g && (m += "%"); return m; }; d.addZeroes = function (a, b, c) { a = a.split(b); void 0 === a[1] && 0 < c && (a[1] = "0"); return a[1].length < c ? ((a[1] += "0"), d.addZeroes(a[0] + b + a[1], b, c)) : void 0 !== a[1] ? a[0] + b + a[1] : a[0]; }; d.scientificToNormal = function (a) { var b; a = String(a).split("e"); var c; if ("-" == a[1].substr(0, 1)) { b = "0."; for (c = 0; c < Math.abs(Number(a[1])) - 1; c++) b += "0"; b += a[0].split(".").join(""); } else { var e = 0; b = a[0].split("."); b[1] && (e = b[1].length); b = a[0].split(".").join(""); for (c = 0; c < Math.abs(Number(a[1])) - e; c++) b += "0"; } return b; }; d.toScientific = function (a, b) { if (0 === a) return "0"; var c = Math.floor(Math.log(Math.abs(a)) * Math.LOG10E), e = String(e).split(".").join(b); return String(e) + "e" + c; }; d.randomColor = function () { return "#" + ("00000" + ((16777216 * Math.random()) << 0).toString(16)).substr(-6); }; d.hitTest = function (a, b, c) { var e = !1, g = a.x, f = a.x + a.width, k = a.y, h = a.y + a.height, l = d.isInRectangle; e || (e = l(g, k, b)); e || (e = l(g, h, b)); e || (e = l(f, k, b)); e || (e = l(f, h, b)); e || !0 === c || (e = d.hitTest(b, a, !0)); return e; }; d.isInRectangle = function (a, b, c) { return a >= c.x - 5 && a <= c.x + c.width + 5 && b >= c.y - 5 && b <= c.y + c.height + 5 ? !0 : !1; }; d.isPercents = function (a) { if (-1 != String(a).indexOf("%")) return !0; }; d.formatValue = function (a, b, c, e, g, f, k, h) { if (b) { void 0 === g && (g = ""); var l; for (l = 0; l < c.length; l++) { var m = c[l], n = b[m]; void 0 !== n && ((n = f ? d.addPrefix(n, h, k, e) : d.formatNumber(n, e)), (a = a.replace(new RegExp("\\[\\[" + g + "" + m + "\\]\\]", "g"), n))); } } return a; }; d.formatDataContextValue = function (a, b) { if (a) { var c = a.match(/\[\[.*?\]\]/g), e; for (e = 0; e < c.length; e++) { var d = c[e], d = d.substr(2, d.length - 4); void 0 !== b[d] && (a = a.replace(new RegExp("\\[\\[" + d + "\\]\\]", "g"), b[d])); } } return a; }; d.massReplace = function (a, b) { for (var c in b) if (b.hasOwnProperty(c)) { var e = b[c]; void 0 === e && (e = ""); a = a.replace(c, e); } return a; }; d.cleanFromEmpty = function (a) { return a.replace(/\[\[[^\]]*\]\]/g, ""); }; d.addPrefix = function (a, b, c, e, g) { var f = d.formatNumber(a, e), k = "", h, l, m; if (0 === a) return "0"; 0 > a && (k = "-"); a = Math.abs(a); if (1 < a) for (h = b.length - 1; -1 < h; h--) { if ( a >= b[h].number && ((l = a / b[h].number), (m = Number(e.precision)), 1 > m && (m = 1), (c = d.roundTo(l, m)), (m = d.formatNumber(c, { precision: -1, decimalSeparator: e.decimalSeparator, thousandsSeparator: e.thousandsSeparator })), !g || l == c) ) { f = k + "" + m + "" + b[h].prefix; break; } } else for (h = 0; h < c.length; h++) if (a <= c[h].number) { l = a / c[h].number; m = Math.abs(Math.floor(Math.log(l) * Math.LOG10E)); l = d.roundTo(l, m); f = k + "" + l + "" + c[h].prefix; break; } return f; }; d.remove = function (a) { a && a.remove(); }; d.getEffect = function (a) { ">" == a && (a = "easeOutSine"); "<" == a && (a = "easeInSine"); "elastic" == a && (a = "easeOutElastic"); return a; }; d.getObjById = function (a, b) { var c, e; for (e = 0; e < a.length; e++) { var d = a[e]; if (d.id == b) { c = d; break; } } return c; }; d.applyTheme = function (a, b, c) { b || (b = d.theme); try { b = JSON.parse(JSON.stringify(b)); } catch (e) {} b && b[c] && d.extend(a, b[c]); }; d.isString = function (a) { return "string" == typeof a ? !0 : !1; }; d.extend = function (a, b, c) { var e; a || (a = {}); for (e in b) c ? a.hasOwnProperty(e) || (a[e] = b[e]) : (a[e] = b[e]); return a; }; d.copyProperties = function (a, b) { for (var c in a) a.hasOwnProperty(c) && "events" != c && void 0 !== a[c] && "function" != typeof a[c] && "cname" != c && (b[c] = a[c]); }; d.processObject = function (a, b, c, e) { if (!1 === a instanceof b && ((a = e ? d.extend(new b(c), a) : d.extend(a, new b(c), !0)), a.listeners)) for (var g in a.listeners) (b = a.listeners[g]), a.addListener(b.event, b.method); return a; }; d.fixNewLines = function (a) { var b = RegExp("\\n", "g"); a && (a = a.replace(b, "
")); return a; }; d.fixBrakes = function (a) { if (d.isModern) { var b = RegExp("
", "g"); a && (a = a.replace(b, "\n")); } else a = d.fixNewLines(a); return a; }; d.deleteObject = function (a, b) { if (a) { if (void 0 === b || null === b) b = 20; if (0 !== b) if ("[object Array]" === Object.prototype.toString.call(a)) for (var c = 0; c < a.length; c++) d.deleteObject(a[c], b - 1), (a[c] = null); else if (a && !a.tagName) try { for (c in ((a.theme = null), a)) a[c] && ("object" == typeof a[c] && d.deleteObject(a[c], b - 1), "function" != typeof a[c] && (a[c] = null)); } catch (e) {} } }; d.bounce = function (a, b, c, e, d) { return (b /= d) < 1 / 2.75 ? 7.5625 * e * b * b + c : b < 2 / 2.75 ? e * (7.5625 * (b -= 1.5 / 2.75) * b + 0.75) + c : b < 2.5 / 2.75 ? e * (7.5625 * (b -= 2.25 / 2.75) * b + 0.9375) + c : e * (7.5625 * (b -= 2.625 / 2.75) * b + 0.984375) + c; }; d.easeInOutQuad = function (a, b, c, e, d) { b /= d / 2; if (1 > b) return (e / 2) * b * b + c; b--; return (-e / 2) * (b * (b - 2) - 1) + c; }; d.easeInSine = function (a, b, c, e, d) { return -e * Math.cos((b / d) * (Math.PI / 2)) + e + c; }; d.easeOutSine = function (a, b, c, e, d) { return e * Math.sin((b / d) * (Math.PI / 2)) + c; }; d.easeOutElastic = function (a, b, c, e, d) { a = 1.70158; var f = 0, k = e; if (0 === b) return c; if (1 == (b /= d)) return c + e; f || (f = 0.3 * d); k < Math.abs(e) ? ((k = e), (a = f / 4)) : (a = (f / (2 * Math.PI)) * Math.asin(e / k)); return k * Math.pow(2, -10 * b) * Math.sin((2 * (b * d - a) * Math.PI) / f) + e + c; }; d.fixStepE = function (a) { a = a.toExponential(0).split("e"); var b = Number(a[1]); 9 == Number(a[0]) && b++; return d.generateNumber(1, b); }; d.generateNumber = function (a, b) { var c = "", e; e = 0 > b ? Math.abs(b) - 1 : Math.abs(b); var d; for (d = 0; d < e; d++) c += "0"; return 0 > b ? Number("0." + c + String(a)) : Number(String(a) + c); }; d.setCN = function (a, b, c, e) { if (a.addClassNames && b && (b = b.node) && c) { var d = b.getAttribute("class"); a = a.classNamePrefix + "-"; e && (a = ""); d ? b.setAttribute("class", d + " " + a + c) : b.setAttribute("class", a + c); } }; d.removeCN = function (a, b, c) { b && (b = b.node) && c && (b = b.classList) && b.remove(a.classNamePrefix + "-" + c); }; d.parseDefs = function (a, b) { for (var c in a) { var e = typeof a[c]; if (0 < a[c].length && "object" == e) for (var g = 0; g < a[c].length; g++) (e = document.createElementNS(d.SVG_NS, c)), b.appendChild(e), d.parseDefs(a[c][g], e); else "object" == e ? ((e = document.createElementNS(d.SVG_NS, c)), b.appendChild(e), d.parseDefs(a[c], e)) : b.setAttribute(c, a[c]); } }; })(); (function () { var d = window.AmCharts; d.AmDraw = d.Class({ construct: function (a, b, c, e) { d.SVG_NS = "http://www.w3.org/2000/svg"; d.SVG_XLINK = "http://www.w3.org/1999/xlink"; d.hasSVG = !!document.createElementNS && !!document.createElementNS(d.SVG_NS, "svg").createSVGRect; 1 > b && (b = 10); 1 > c && (c = 10); this.div = a; this.width = b; this.height = c; this.rBin = document.createElement("div"); d.hasSVG ? ((d.SVG = !0), (b = this.createSvgElement("svg")), a.appendChild(b), (this.container = b), this.addDefs(e), (this.R = new d.SVGRenderer(this))) : d.isIE && d.VMLRenderer && ((d.VML = !0), d.vmlStyleSheet || (document.namespaces.add("amvml", "urn:schemas-microsoft-com:vml"), 31 > document.styleSheets.length ? ((b = document.createStyleSheet()), b.addRule(".amvml", "behavior:url(#default#VML); display:inline-block; antialias:true"), (d.vmlStyleSheet = b)) : document.styleSheets[0].addRule(".amvml", "behavior:url(#default#VML); display:inline-block; antialias:true")), (this.container = a), (this.R = new d.VMLRenderer(this, e)), this.R.disableSelection(a)); }, createSvgElement: function (a) { return document.createElementNS(d.SVG_NS, a); }, circle: function (a, b, c, e) { var g = new d.AmDObject("circle", this); g.attr({ r: c, cx: a, cy: b }); this.addToContainer(g.node, e); return g; }, ellipse: function (a, b, c, e, g) { var f = new d.AmDObject("ellipse", this); f.attr({ rx: c, ry: e, cx: a, cy: b }); this.addToContainer(f.node, g); return f; }, setSize: function (a, b) { 0 < a && 0 < b && ((this.container.style.width = a + "px"), (this.container.style.height = b + "px")); }, rect: function (a, b, c, e, g, f, k) { var h = new d.AmDObject("rect", this); d.VML && ((g = Math.round((100 * g) / Math.min(c, e))), (c += 2 * f), (e += 2 * f), (h.bw = f), (h.node.style.marginLeft = -f), (h.node.style.marginTop = -f)); 1 > c && (c = 1); 1 > e && (e = 1); h.attr({ x: a, y: b, width: c, height: e, rx: g, ry: g, "stroke-width": f }); this.addToContainer(h.node, k); return h; }, image: function (a, b, c, e, g, f) { var k = new d.AmDObject("image", this); k.attr({ x: b, y: c, width: e, height: g }); this.R.path(k, a); this.addToContainer(k.node, f); return k; }, addToContainer: function (a, b) { b || (b = this.container); b.appendChild(a); }, text: function (a, b, c) { return this.R.text(a, b, c); }, path: function (a, b, c, e) { var g = new d.AmDObject("path", this); e || (e = "100,100"); g.attr({ cs: e }); c ? g.attr({ dd: a }) : g.attr({ d: a }); this.addToContainer(g.node, b); return g; }, set: function (a) { return this.R.set(a); }, remove: function (a) { if (a) { var b = this.rBin; b.appendChild(a); b.innerHTML = ""; } }, renderFix: function () { var a = this.container, b = a.style; b.top = "0px"; b.left = "0px"; try { var c = a.getBoundingClientRect(), e = c.left - Math.round(c.left), d = c.top - Math.round(c.top); e && (b.left = e + "px"); d && (b.top = d + "px"); } catch (f) {} }, update: function () { this.R.update(); }, addDefs: function (a) { if (d.hasSVG) { var b = this.createSvgElement("desc"), c = this.container; c.setAttribute("version", "1.1"); c.style.position = "absolute"; this.setSize(this.width, this.height); if (a.accessibleTitle) { var e = this.createSvgElement("text"); c.appendChild(e); e.innerHTML = a.accessibleTitle; e.style.opacity = 0; } d.rtl && (c.setAttribute("direction", "rtl"), (c.style.left = "auto"), (c.style.right = "0px")); a && (a.addCodeCredits && b.appendChild(document.createTextNode("JavaScript chart by amCharts " + a.version)), a.accessibleDescription && ((b.innerHTML = ""), b.appendChild(document.createTextNode(a.accessibleDescription))), c.appendChild(b), a.defs && ((b = this.createSvgElement("defs")), c.appendChild(b), d.parseDefs(a.defs, b), (this.defs = b))); } }, }); })(); (function () { var d = window.AmCharts; d.AmDObject = d.Class({ construct: function (a, b) { this.D = b; this.R = b.R; this.node = this.R.create(this, a); this.y = this.x = 0; this.scale = 1; }, attr: function (a) { this.R.attr(this, a); return this; }, getAttr: function (a) { return this.node.getAttribute(a); }, setAttr: function (a, b) { this.R.setAttr(this, a, b); return this; }, clipRect: function (a, b, c, e) { this.R.clipRect(this, a, b, c, e); }, translate: function (a, b, c, e) { e || ((a = Math.round(a)), (b = Math.round(b))); this.R.move(this, a, b, c); this.x = a; this.y = b; this.scale = c; this.angle && this.rotate(this.angle); }, rotate: function (a, b) { this.R.rotate(this, a, b); this.angle = a; }, animate: function (a, b, c) { for (var e in a) if (a.hasOwnProperty(e)) { var g = e, f = a[e]; c = d.getEffect(c); this.R.animate(this, g, f, b, c); } }, push: function (a) { if (a) { var b = this.node; b.appendChild(a.node); var c = a.clipPath; c && b.appendChild(c); (a = a.grad) && b.appendChild(a); } }, text: function (a) { this.R.setText(this, a); }, remove: function () { this.stop(); this.R.remove(this); }, clear: function () { var a = this.node; if (a.hasChildNodes()) for (; 1 <= a.childNodes.length; ) a.removeChild(a.firstChild); }, hide: function () { this.setAttr("visibility", "hidden"); }, show: function () { this.setAttr("visibility", "visible"); }, getBBox: function () { return this.R.getBBox(this); }, toFront: function () { var a = this.node; if (a) { this.prevNextNode = a.nextSibling; var b = a.parentNode; b && b.appendChild(a); } }, toPrevious: function () { var a = this.node; a && this.prevNextNode && (a = a.parentNode) && a.insertBefore(this.prevNextNode, null); }, toBack: function () { var a = this.node; if (a) { this.prevNextNode = a.nextSibling; var b = a.parentNode; if (b) { var c = b.firstChild; c && b.insertBefore(a, c); } } }, mouseover: function (a) { this.R.addListener(this, "mouseover", a); return this; }, mouseout: function (a) { this.R.addListener(this, "mouseout", a); return this; }, click: function (a) { this.R.addListener(this, "click", a); return this; }, dblclick: function (a) { this.R.addListener(this, "dblclick", a); return this; }, mousedown: function (a) { this.R.addListener(this, "mousedown", a); return this; }, mouseup: function (a) { this.R.addListener(this, "mouseup", a); return this; }, touchmove: function (a) { this.R.addListener(this, "touchmove", a); return this; }, touchstart: function (a) { this.R.addListener(this, "touchstart", a); return this; }, touchend: function (a) { this.R.addListener(this, "touchend", a); return this; }, keyup: function (a) { this.R.addListener(this, "keyup", a); return this; }, focus: function (a) { this.R.addListener(this, "focus", a); return this; }, blur: function (a) { this.R.addListener(this, "blur", a); return this; }, contextmenu: function (a) { this.node.addEventListener ? this.node.addEventListener("contextmenu", a, !0) : this.R.addListener(this, "contextmenu", a); return this; }, stop: function () { d.removeFromArray(this.R.animations, this.an_translate); d.removeFromArray(this.R.animations, this.an_y); d.removeFromArray(this.R.animations, this.an_x); }, length: function () { return this.node.childNodes.length; }, gradient: function (a, b, c) { this.R.gradient(this, a, b, c); }, pattern: function (a, b, c) { a && this.R.pattern(this, a, b, c); }, }); })(); (function () { var d = window.AmCharts; d.SVGRenderer = d.Class({ construct: function (a) { this.D = a; this.animations = []; }, create: function (a, b) { return document.createElementNS(d.SVG_NS, b); }, attr: function (a, b) { for (var c in b) b.hasOwnProperty(c) && this.setAttr(a, c, b[c]); }, setAttr: function (a, b, c) { void 0 !== c && a.node.setAttribute(b, c); }, animate: function (a, b, c, e, g) { a.animationFinished = !1; var f = a.node; a["an_" + b] && d.removeFromArray(this.animations, a["an_" + b]); "translate" == b ? ((f = (f = f.getAttribute("transform")) ? String(f).substring(10, f.length - 1) : "0,0"), (f = f.split(", ").join(" ")), (f = f.split(" ").join(",")), 0 === f && (f = "0,0")) : (f = Number(f.getAttribute(b))); c = { obj: a, frame: 0, attribute: b, from: f, to: c, time: e, effect: g }; this.animations.push(c); a["an_" + b] = c; }, update: function () { var a, b = this.animations; for (a = b.length - 1; 0 <= a; a--) { var c = b[a], e = c.time * d.updateRate, g = c.frame + 1, f = c.obj, k = c.attribute, h, l, m; if (g <= e) { c.frame++; if ("translate" == k) { h = c.from.split(","); k = Number(h[0]); h = Number(h[1]); isNaN(h) && (h = 0); l = c.to.split(","); m = Number(l[0]); l = Number(l[1]); m = 0 === m - k ? m : Math.round(d[c.effect](0, g, k, m - k, e)); c = 0 === l - h ? l : Math.round(d[c.effect](0, g, h, l - h, e)); k = "transform"; if (isNaN(m) || isNaN(c)) continue; c = "translate(" + m + "," + c + ")"; } else (l = Number(c.from)), (h = Number(c.to)), (m = h - l), (c = d[c.effect](0, g, l, m, e)), isNaN(c) && (c = h), 0 === m && this.animations.splice(a, 1); this.setAttr(f, k, c); } else "translate" == k ? ((l = c.to.split(",")), (m = Number(l[0])), (l = Number(l[1])), f.translate(m, l)) : ((h = Number(c.to)), this.setAttr(f, k, h)), (f.animationFinished = !0), this.animations.splice(a, 1); } }, getBBox: function (a) { if ((a = a.node)) try { return a.getBBox(); } catch (b) {} return { width: 0, height: 0, x: 0, y: 0 }; }, path: function (a, b) { a.node.setAttributeNS(d.SVG_XLINK, "xlink:href", b); }, clipRect: function (a, b, c, e, g) { var f = a.node, k = a.clipPath; k && this.D.remove(k); var h = f.parentNode; h && ((f = document.createElementNS(d.SVG_NS, "clipPath")), (k = d.getUniqueId()), f.setAttribute("id", k), this.D.rect(b, c, e, g, 0, 0, f), h.appendChild(f), (b = "#"), d.baseHref && !d.isIE && (b = this.removeTarget(window.location.href) + b), this.setAttr(a, "clip-path", "url(" + b + k + ")"), this.clipPathC++, (a.clipPath = f)); }, text: function (a, b, c) { var e = new d.AmDObject("text", this.D); a = String(a).split("\n"); var g = d.removePx(b["font-size"]), f; for (f = 0; f < a.length; f++) { var k = this.create(null, "tspan"); k.appendChild(document.createTextNode(a[f])); k.setAttribute("y", (g + 2) * f + Math.round(g / 2)); k.setAttribute("x", 0); e.node.appendChild(k); } e.node.setAttribute("y", Math.round(g / 2)); this.attr(e, b); this.D.addToContainer(e.node, c); return e; }, setText: function (a, b) { var c = a.node; c && (c.removeChild(c.firstChild), c.appendChild(document.createTextNode(b))); }, move: function (a, b, c, e) { isNaN(b) && (b = 0); isNaN(c) && (c = 0); b = "translate(" + b + "," + c + ")"; e && (b = b + " scale(" + e + ")"); this.setAttr(a, "transform", b); }, rotate: function (a, b) { var c = a.node.getAttribute("transform"), e = "rotate(" + b + ")"; c && (e = c + " " + e); this.setAttr(a, "transform", e); }, set: function (a) { var b = new d.AmDObject("g", this.D); this.D.container.appendChild(b.node); if (a) { var c; for (c = 0; c < a.length; c++) b.push(a[c]); } return b; }, addListener: function (a, b, c) { a.node["on" + b] = c; }, gradient: function (a, b, c, e) { var g = a.node, f = a.grad; f && this.D.remove(f); b = document.createElementNS(d.SVG_NS, b); f = d.getUniqueId(); b.setAttribute("id", f); if (!isNaN(e)) { var k = 0, h = 0, l = 0, m = 0; 90 == e ? (l = 100) : 270 == e ? (m = 100) : 180 == e ? (k = 100) : 0 === e && (h = 100); b.setAttribute("x1", k + "%"); b.setAttribute("x2", h + "%"); b.setAttribute("y1", l + "%"); b.setAttribute("y2", m + "%"); } for (e = 0; e < c.length; e++) (k = document.createElementNS(d.SVG_NS, "stop")), (h = (100 * e) / (c.length - 1)), 0 === e && (h = 0), k.setAttribute("offset", h + "%"), k.setAttribute("stop-color", c[e]), b.appendChild(k); g.parentNode.appendChild(b); c = "#"; d.baseHref && !d.isIE && (c = this.removeTarget(window.location.href) + c); g.setAttribute("fill", "url(" + c + f + ")"); a.grad = b; }, removeTarget: function (a) { return a.split("#")[0]; }, pattern: function (a, b, c, e) { var g = a.node; isNaN(c) && (c = 1); var f = a.patternNode; f && this.D.remove(f); var f = document.createElementNS(d.SVG_NS, "pattern"), k = d.getUniqueId(), h = b; b.url && (h = b.url); d.isAbsolute(h) || -1 != h.indexOf("data:image") || (h = e + h); e = Number(b.width); isNaN(e) && (e = 4); var l = Number(b.height); isNaN(l) && (l = 4); e /= c; l /= c; c = b.x; isNaN(c) && (c = 0); var m = -Math.random() * Number(b.randomX); isNaN(m) || (c = m); m = b.y; isNaN(m) && (m = 0); var n = -Math.random() * Number(b.randomY); isNaN(n) || (m = n); f.setAttribute("id", k); f.setAttribute("width", e); f.setAttribute("height", l); f.setAttribute("patternUnits", "userSpaceOnUse"); f.setAttribute("xlink:href", h); b.color && ((n = document.createElementNS(d.SVG_NS, "rect")), n.setAttributeNS(null, "height", e), n.setAttributeNS(null, "width", l), n.setAttributeNS(null, "fill", b.color), f.appendChild(n)); this.D.image(h, 0, 0, e, l, f).translate(c, m); h = "#"; d.baseHref && !d.isIE && (h = this.removeTarget(window.location.href) + h); g.setAttribute("fill", "url(" + h + k + ")"); a.patternNode = f; g.parentNode.appendChild(f); }, remove: function (a) { a.clipPath && this.D.remove(a.clipPath); a.grad && this.D.remove(a.grad); a.patternNode && this.D.remove(a.patternNode); this.D.remove(a.node); }, }); })(); (function () { var d = window.AmCharts; d.AmChart = d.Class({ construct: function (a) { this.svgIcons = this.tapToActivate = !0; this.theme = a; this.classNamePrefix = "amcharts"; this.addClassNames = !1; this.version = "3.21.15"; d.addChart(this); this.createEvents("buildStarted", "dataUpdated", "init", "rendered", "drawn", "failed", "resized", "animationFinished"); this.height = this.width = "100%"; this.dataChanged = !0; this.chartCreated = !1; this.previousWidth = this.previousHeight = 0; this.backgroundColor = "#FFFFFF"; this.borderAlpha = this.backgroundAlpha = 0; this.color = this.borderColor = "#000000"; this.fontFamily = "Verdana"; this.fontSize = 11; this.usePrefixes = !1; this.autoResize = !0; this.autoDisplay = !1; this.addCodeCredits = this.accessible = !0; this.touchStartTime = this.touchClickDuration = 0; this.precision = -1; this.percentPrecision = 2; this.decimalSeparator = "."; this.thousandsSeparator = ","; this.labels = []; this.allLabels = []; this.titles = []; this.marginRight = this.marginLeft = this.autoMarginOffset = 0; this.timeOuts = []; this.creditsPosition = "top-left"; var b = document.createElement("div"), c = b.style; c.overflow = "hidden"; c.position = "relative"; c.textAlign = "left"; this.chartDiv = b; b = document.createElement("div"); c = b.style; c.overflow = "hidden"; c.position = "relative"; c.textAlign = "left"; this.legendDiv = b; this.titleHeight = 0; this.hideBalloonTime = 150; this.handDrawScatter = 2; this.cssScale = this.handDrawThickness = 1; this.cssAngle = 0; this.prefixesOfBigNumbers = [ { number: 1e3, prefix: "k" }, { number: 1e6, prefix: "M" }, { number: 1e9, prefix: "G" }, { number: 1e12, prefix: "T" }, { number: 1e15, prefix: "P" }, { number: 1e18, prefix: "E" }, { number: 1e21, prefix: "Z" }, { number: 1e24, prefix: "Y" }, ]; this.prefixesOfSmallNumbers = [ { number: 1e-24, prefix: "y" }, { number: 1e-21, prefix: "z" }, { number: 1e-18, prefix: "a" }, { number: 1e-15, prefix: "f" }, { number: 1e-12, prefix: "p" }, { number: 1e-9, prefix: "n" }, { number: 1e-6, prefix: "\u03bc" }, { number: 0.001, prefix: "m" }, ]; this.panEventsEnabled = !0; this.product = "amcharts"; this.animations = []; this.balloon = new d.AmBalloon(this.theme); this.balloon.chart = this; this.processTimeout = 0; this.processCount = 1e3; this.animatable = []; this.langObj = {}; d.applyTheme(this, a, "AmChart"); }, drawChart: function () { 0 < this.realWidth && 0 < this.realHeight && (this.drawBackground(), this.redrawLabels(), this.drawTitles(), this.brr(), this.renderFix(), this.chartDiv && (this.boundingRect = this.chartDiv.getBoundingClientRect())); }, makeAccessible: function (a, b, c) { this.accessible && a && (c && a.setAttr("role", c), a.setAttr("aria-label", b)); }, drawBackground: function () { d.remove(this.background); var a = this.container, b = this.backgroundColor, c = this.backgroundAlpha, e = this.set; d.isModern || 0 !== c || (c = 0.001); var g = this.updateWidth(); this.realWidth = g; var f = this.updateHeight(); this.realHeight = f; b = d.polygon(a, [0, g - 1, g - 1, 0], [0, 0, f - 1, f - 1], b, c, 1, this.borderColor, this.borderAlpha); d.setCN(this, b, "bg"); this.background = b; e.push(b); if ((b = this.backgroundImage)) (a = a.image(b, 0, 0, g, f)), d.setCN(this, b, "bg-image"), (this.bgImg = a), e.push(a); }, drawTitles: function (a) { var b = this.titles; this.titleHeight = 0; if (d.ifArray(b)) { var c = 20, e; for (e = 0; e < b.length; e++) { var g = b[e], g = d.processObject(g, d.Title, this.theme); if (!1 !== g.enabled) { var f = g.color; void 0 === f && (f = this.color); var k = g.size; isNaN(k) && (k = this.fontSize + 2); isNaN(g.alpha); var h = this.marginLeft, l = !0; void 0 !== g.bold && (l = g.bold); f = d.wrappedText(this.container, g.text, f, this.fontFamily, k, "middle", l, this.realWidth - 35 - this.marginRight - h); f.translate(h + (this.realWidth - this.marginRight - h) / 2, c); f.node.style.pointerEvents = "none"; g.sprite = f; void 0 !== g.tabIndex && f.setAttr("tabindex", g.tabIndex); d.setCN(this, f, "title"); g.id && d.setCN(this, f, "title-" + g.id); f.attr({ opacity: g.alpha }); c += f.getBBox().height + 5; a ? f.remove() : this.freeLabelsSet.push(f); } } this.titleHeight = c - 10; } }, write: function (a) { var b = this; if (b.listeners) for (var c = 0; c < b.listeners.length; c++) { var e = b.listeners[c]; b.addListener(e.event, e.method); } b.fire({ type: "buildStarted", chart: b }); b.afterWriteTO && clearTimeout(b.afterWriteTO); 0 < b.processTimeout ? (b.afterWriteTO = setTimeout(function () { b.afterWrite.call(b, a); }, b.processTimeout)) : b.afterWrite(a); }, afterWrite: function (a) { var b; if ((b = "object" != typeof a ? document.getElementById(a) : a)) { for (; b.firstChild; ) b.removeChild(b.firstChild); this.div = b; b.style.overflow = "hidden"; b.style.textAlign = "left"; a = this.chartDiv; var c = this.legendDiv, e = this.legend, g = c.style, f = a.style; this.measure(); this.previousHeight = this.divRealHeight; this.previousWidth = this.divRealWidth; var k, h = document.createElement("div"); k = h.style; k.position = "relative"; this.containerDiv = h; h.className = this.classNamePrefix + "-main-div"; a.className = this.classNamePrefix + "-chart-div"; b.appendChild(h); (b = this.exportConfig) && d.AmExport && !this.AmExport && (this.AmExport = new d.AmExport(this, b)); this.amExport && d.AmExport && (this.AmExport = d.extend(this.amExport, new d.AmExport(this), !0)); this.AmExport && this.AmExport.init && this.AmExport.init(); if (e) { e = this.addLegend(e, e.divId); if (e.enabled) switch ( ((g.left = null), (g.top = null), (g.right = null), (f.left = null), (f.right = null), (f.top = null), (g.position = "relative"), (f.position = "relative"), (k.width = "100%"), (k.height = "100%"), e.position) ) { case "bottom": h.appendChild(a); h.appendChild(c); break; case "top": h.appendChild(c); h.appendChild(a); break; case "absolute": g.position = "absolute"; f.position = "absolute"; void 0 !== e.left && (g.left = e.left + "px"); void 0 !== e.right && (g.right = e.right + "px"); void 0 !== e.top && (g.top = e.top + "px"); void 0 !== e.bottom && (g.bottom = e.bottom + "px"); e.marginLeft = 0; e.marginRight = 0; h.appendChild(a); h.appendChild(c); break; case "right": g.position = "relative"; f.position = "absolute"; h.appendChild(a); h.appendChild(c); break; case "left": g.position = "absolute"; f.position = "relative"; h.appendChild(a); h.appendChild(c); break; case "outside": h.appendChild(a); } else h.appendChild(a); this.prevLegendPosition = e.position; } else h.appendChild(a); this.listenersAdded || (this.addListeners(), (this.listenersAdded = !0)); (this.mouseWheelScrollEnabled || this.mouseWheelZoomEnabled) && d.addWheelListeners(); this.initChart(); } }, createLabelsSet: function () { d.remove(this.labelsSet); this.labelsSet = this.container.set(); this.freeLabelsSet.push(this.labelsSet); }, initChart: function () { this.balloon = d.processObject(this.balloon, d.AmBalloon, this.theme); window.AmCharts_path && (this.path = window.AmCharts_path); void 0 === this.path && (this.path = d.getPath()); void 0 === this.path && (this.path = "amcharts/"); this.path = d.normalizeUrl(this.path); void 0 === this.pathToImages && (this.pathToImages = this.path + "images/"); this.initHC || (d.callInitHandler(this), (this.initHC = !0)); d.applyLang(this.language, this); var a = this.numberFormatter; a && (isNaN(a.precision) || (this.precision = a.precision), void 0 !== a.thousandsSeparator && (this.thousandsSeparator = a.thousandsSeparator), void 0 !== a.decimalSeparator && (this.decimalSeparator = a.decimalSeparator)); (a = this.percentFormatter) && !isNaN(a.precision) && (this.percentPrecision = a.precision); this.nf = { precision: this.precision, thousandsSeparator: this.thousandsSeparator, decimalSeparator: this.decimalSeparator }; this.pf = { precision: this.percentPrecision, thousandsSeparator: this.thousandsSeparator, decimalSeparator: this.decimalSeparator }; this.destroy(); (a = this.container) ? ((a.container.innerHTML = ""), (a.width = this.realWidth), (a.height = this.realHeight), a.addDefs(this), this.chartDiv.appendChild(a.container)) : (a = new d.AmDraw(this.chartDiv, this.realWidth, this.realHeight, this)); this.container = a; this.extension = ".png"; this.svgIcons && d.SVG && (this.extension = ".svg"); this.checkDisplay(); this.checkTransform(this.div); a.chart = this; d.VML || d.SVG ? ((a.handDrawn = this.handDrawn), (a.handDrawScatter = this.handDrawScatter), (a.handDrawThickness = this.handDrawThickness), d.remove(this.set), (this.set = a.set()), d.remove(this.gridSet), (this.gridSet = a.set()), d.remove(this.cursorLineSet), (this.cursorLineSet = a.set()), d.remove(this.graphsBehindSet), (this.graphsBehindSet = a.set()), d.remove(this.bulletBehindSet), (this.bulletBehindSet = a.set()), d.remove(this.columnSet), (this.columnSet = a.set()), d.remove(this.graphsSet), (this.graphsSet = a.set()), d.remove(this.trendLinesSet), (this.trendLinesSet = a.set()), d.remove(this.axesSet), (this.axesSet = a.set()), d.remove(this.cursorSet), (this.cursorSet = a.set()), d.remove(this.scrollbarsSet), (this.scrollbarsSet = a.set()), d.remove(this.bulletSet), (this.bulletSet = a.set()), d.remove(this.freeLabelsSet), (this.freeLabelsSet = a.set()), d.remove(this.axesLabelsSet), (this.axesLabelsSet = a.set()), d.remove(this.balloonsSet), (this.balloonsSet = a.set()), d.remove(this.plotBalloonsSet), (this.plotBalloonsSet = a.set()), d.remove(this.zoomButtonSet), (this.zoomButtonSet = a.set()), d.remove(this.zbSet), (this.zbSet = null), d.remove(this.linkSet), (this.linkSet = a.set())) : this.fire({ type: "failed", chart: this }); }, premeasure: function () { var a = this.div; if (a) { try { this.boundingRect = this.chartDiv.getBoundingClientRect(); } catch (e) {} var b = a.offsetWidth, c = a.offsetHeight; a.clientHeight && ((b = a.clientWidth), (c = a.clientHeight)); if (b != this.mw || c != this.mh) (this.mw = b), (this.mh = c), this.measure(); } }, measure: function () { var a = this.div; if (a) { var b = this.chartDiv, c = a.offsetWidth, e = a.offsetHeight, g = this.container; a.clientHeight && ((c = a.clientWidth), (e = a.clientHeight)); var e = Math.round(e), c = Math.round(c), a = Math.round(d.toCoordinate(this.width, c)), f = Math.round(d.toCoordinate(this.height, e)); (c != this.previousWidth || e != this.previousHeight) && 0 < a && 0 < f && ((b.style.width = a + "px"), (b.style.height = f + "px"), (b.style.padding = 0), g && g.setSize(a, f), (this.balloon = d.processObject(this.balloon, d.AmBalloon, this.theme))); this.balloon && this.balloon.setBounds && this.balloon.setBounds(2, 2, a - 2, f); this.updateWidth(); this.balloon.chart = this; this.realWidth = a; this.realHeight = f; this.divRealWidth = c; this.divRealHeight = e; } }, checkDisplay: function () { if (this.autoDisplay && this.container) { var a = d.rect(this.container, 10, 10), b = a.getBBox(); 0 === b.width && 0 === b.height && ((this.divRealHeight = this.divRealWidth = this.realHeight = this.realWidth = 0), (this.previousWidth = this.previousHeight = NaN)); a.remove(); } }, checkTransform: function (a) { if (this.autoTransform && window.getComputedStyle && a) { if (a.style) { var b = window.getComputedStyle(a, null); if ( b && (b = b.getPropertyValue("-webkit-transform") || b.getPropertyValue("-moz-transform") || b.getPropertyValue("-ms-transform") || b.getPropertyValue("-o-transform") || b.getPropertyValue("transform")) && "none" !== b ) { var c = b.split("(")[1].split(")")[0].split(","), b = c[0], c = c[1], b = Math.sqrt(b * b + c * c); isNaN(b) || (this.cssScale *= b); } } a.parentNode && this.checkTransform(a.parentNode); } }, destroy: function () { this.chartDiv.innerHTML = ""; this.clearTimeOuts(); this.legend && this.legend.destroy && this.legend.destroy(); }, clearTimeOuts: function () { var a = this.timeOuts; if (a) { var b; for (b = 0; b < a.length; b++) clearTimeout(a[b]); } this.timeOuts = []; }, clear: function (a) { try { document.removeEventListener("touchstart", this.docfn1, !0), document.removeEventListener("touchend", this.docfn2, !0); } catch (b) {} d.callMethod("clear", [this.chartScrollbar, this.scrollbarV, this.scrollbarH, this.chartCursor]); this.chartCursor = this.scrollbarH = this.scrollbarV = this.chartScrollbar = null; this.clearTimeOuts(); this.container && (this.container.remove(this.chartDiv), this.container.remove(this.legendDiv)); a || d.removeChart(this); if ((a = this.div)) for (; a.firstChild; ) a.removeChild(a.firstChild); this.legend && this.legend.destroy && this.legend.destroy(); this.AmExport && this.AmExport.clear && this.AmExport.clear(); }, setMouseCursor: function (a) { "auto" == a && d.isNN && (a = "default"); this.chartDiv.style.cursor = a; this.legendDiv.style.cursor = a; }, redrawLabels: function () { this.labels = []; var a = this.allLabels; this.createLabelsSet(); var b; for (b = 0; b < a.length; b++) this.drawLabel(a[b]); }, drawLabel: function (a) { var b = this; if (b.container && !1 !== a.enabled) { a = d.processObject(a, d.Label, b.theme); var c = a.y, e = a.text, g = a.align, f = a.size, k = a.color, h = a.rotation, l = a.alpha, m = a.bold, n = d.toCoordinate(a.x, b.realWidth), c = d.toCoordinate(c, b.realHeight); n || (n = 0); c || (c = 0); void 0 === k && (k = b.color); isNaN(f) && (f = b.fontSize); g || (g = "start"); "left" == g && (g = "start"); "right" == g && (g = "end"); "center" == g && ((g = "middle"), h ? (c = b.realHeight - c + c / 2) : (n = b.realWidth / 2 - n)); void 0 === l && (l = 1); void 0 === h && (h = 0); c += f / 2; e = d.text(b.container, e, k, b.fontFamily, f, g, m, l); e.translate(n, c); void 0 !== a.tabIndex && e.setAttr("tabindex", a.tabIndex); d.setCN(b, e, "label"); a.id && d.setCN(b, e, "label-" + a.id); 0 !== h && e.rotate(h); a.url ? (e.setAttr("cursor", "pointer"), e.click(function () { d.getURL(a.url, b.urlTarget); })) : (e.node.style.pointerEvents = "none"); b.labelsSet.push(e); b.labels.push(e); } }, addLabel: function (a, b, c, e, d, f, k, h, l, m) { a = { x: a, y: b, text: c, align: e, size: d, color: f, alpha: h, rotation: k, bold: l, url: m, enabled: !0 }; this.container && this.drawLabel(a); this.allLabels.push(a); }, clearLabels: function () { var a = this.labels, b; for (b = a.length - 1; 0 <= b; b--) a[b].remove(); this.labels = []; this.allLabels = []; }, updateHeight: function () { var a = this.divRealHeight, b = this.legend; if (b) { var c = this.legendDiv.offsetHeight, b = b.position; if ("top" == b || "bottom" == b) { a -= c; if (0 > a || isNaN(a)) a = 0; this.chartDiv.style.height = a + "px"; } } return a; }, updateWidth: function () { var a = this.divRealWidth, b = this.divRealHeight, c = this.legend; if (c) { var e = this.legendDiv, d = e.offsetWidth; isNaN(c.width) || (d = c.width); c.ieW && (d = c.ieW); var f = e.offsetHeight, e = e.style, k = this.chartDiv.style, h = c.position; if (("right" == h || "left" == h) && void 0 === c.divId) { a -= d; if (0 > a || isNaN(a)) a = 0; k.width = a + "px"; this.balloon && this.balloon.setBounds && this.balloon.setBounds(2, 2, a - 2, this.realHeight); "left" == h ? ((k.left = d + "px"), (e.left = "0px")) : ((k.left = "0px"), (e.left = a + "px")); b > f && (e.top = (b - f) / 2 + "px"); } } return a; }, getTitleHeight: function () { this.drawTitles(!0); return this.titleHeight; }, addTitle: function (a, b, c, e, d) { isNaN(b) && (b = this.fontSize + 2); a = { text: a, size: b, color: c, alpha: e, bold: d, enabled: !0 }; this.titles.push(a); return a; }, handleWheel: function (a) { var b = 0; a || (a = window.event); a.wheelDelta ? (b = a.wheelDelta / 120) : a.detail && (b = -a.detail / 3); b && this.handleWheelReal(b, a.shiftKey); a.preventDefault && a.preventDefault(); }, handleWheelReal: function () {}, handleDocTouchStart: function () { this.handleMouseMove(); this.tmx = this.mouseX; this.tmy = this.mouseY; this.touchStartTime = new Date().getTime(); }, handleDocTouchEnd: function () { -0.5 < this.tmx && this.tmx < this.divRealWidth + 1 && 0 < this.tmy && this.tmy < this.divRealHeight ? (this.handleMouseMove(), 4 > Math.abs(this.mouseX - this.tmx) && 4 > Math.abs(this.mouseY - this.tmy) ? ((this.tapped = !0), this.panRequired && this.panEventsEnabled && this.chartDiv && ((this.chartDiv.style.msTouchAction = "none"), (this.chartDiv.style.touchAction = "none"))) : this.mouseIsOver || this.resetTouchStyle()) : ((this.tapped = !1), this.resetTouchStyle()); }, resetTouchStyle: function () { this.panEventsEnabled && this.chartDiv && ((this.chartDiv.style.msTouchAction = "auto"), (this.chartDiv.style.touchAction = "auto")); }, checkTouchDuration: function (a) { var b = this, c = new Date().getTime(); if (a) if (a.touches) b.isTouchEvent = !0; else if (!b.isTouchEvent) return !0; if (c - b.touchStartTime > b.touchClickDuration) return !0; setTimeout(function () { b.resetTouchDuration(); }, 300); }, resetTouchDuration: function () { this.isTouchEvent = !1; }, checkTouchMoved: function () { if (4 < Math.abs(this.mouseX - this.tmx) || 4 < Math.abs(this.mouseY - this.tmy)) return !0; }, addListeners: function () { var a = this, b = a.chartDiv; document.addEventListener ? ("ontouchstart" in document.documentElement && (b.addEventListener( "touchstart", function (b) { a.handleTouchStart.call(a, b); }, !0 ), b.addEventListener( "touchmove", function (b) { a.handleMouseMove.call(a, b); }, !0 ), b.addEventListener( "touchend", function (b) { a.handleTouchEnd.call(a, b); }, !0 ), (a.docfn1 = function (b) { a.handleDocTouchStart.call(a, b); }), (a.docfn2 = function (b) { a.handleDocTouchEnd.call(a, b); }), document.addEventListener("touchstart", a.docfn1, !0), document.addEventListener("touchend", a.docfn2, !0)), b.addEventListener( "mousedown", function (b) { a.mouseIsOver = !0; a.handleMouseMove.call(a, b); a.handleMouseDown.call(a, b); a.handleDocTouchStart.call(a, b); }, !0 ), b.addEventListener( "mouseover", function (b) { a.handleMouseOver.call(a, b); }, !0 ), b.addEventListener( "mouseout", function (b) { a.handleMouseOut.call(a, b); }, !0 ), b.addEventListener( "mouseup", function (b) { a.handleDocTouchEnd.call(a, b); }, !0 )) : (b.attachEvent("onmousedown", function (b) { a.handleMouseDown.call(a, b); }), b.attachEvent("onmouseover", function (b) { a.handleMouseOver.call(a, b); }), b.attachEvent("onmouseout", function (b) { a.handleMouseOut.call(a, b); })); }, dispDUpd: function () { this.skipEvents || (this.dispatchDataUpdated && ((this.dispatchDataUpdated = !1), this.fire({ type: "dataUpdated", chart: this })), this.chartCreated || ((this.chartCreated = !0), this.fire({ type: "init", chart: this })), !this.chartRendered && 0 < this.divRealWidth && 0 < this.divRealHeight && (this.fire({ type: "rendered", chart: this }), (this.chartRendered = !0)), this.fire({ type: "drawn", chart: this })); this.skipEvents = !1; }, validateSize: function () { var a = this; a.premeasure(); a.checkDisplay(); a.cssScale = 1; a.cssAngle = 0; a.checkTransform(a.div); if (a.divRealWidth != a.previousWidth || a.divRealHeight != a.previousHeight) { var b = a.legend; if (0 < a.realWidth && 0 < a.realHeight) { a.sizeChanged = !0; if (b) { a.legendInitTO && clearTimeout(a.legendInitTO); var c = setTimeout(function () { b.invalidateSize(); }, 10); a.timeOuts.push(c); a.legendInitTO = c; } a.marginsUpdated = !1; clearTimeout(a.initTO); c = setTimeout(function () { a.initChart(); }, 10); a.timeOuts.push(c); a.initTO = c; } a.renderFix(); b && b.renderFix && b.renderFix(); a.positionCred(); clearTimeout(a.resizedTO); a.resizedTO = setTimeout(function () { a.fire({ type: "resized", chart: a }); }, 10); a.previousHeight = a.divRealHeight; a.previousWidth = a.divRealWidth; } }, invalidateSize: function () { this.previousHeight = this.previousWidth = NaN; this.invalidateSizeReal(); }, invalidateSizeReal: function () { var a = this; a.marginsUpdated = !1; clearTimeout(a.validateTO); var b = setTimeout(function () { a.validateSize(); }, 5); a.timeOuts.push(b); a.validateTO = b; }, validateData: function (a) { this.chartCreated && ((this.dataChanged = !0), (this.marginsUpdated = !1), this.initChart(a)); }, validateNow: function (a, b) { this.initTO && clearTimeout(this.initTO); a && ((this.dataChanged = !0), (this.marginsUpdated = !1)); this.skipEvents = b; this.chartRendered = !1; var c = this.legend; c && c.position != this.prevLegendPosition && ((this.previousWidth = this.mw = 0), c.invalidateSize && (c.invalidateSize(), this.validateSize())); this.write(this.div); }, showItem: function (a) { a.hidden = !1; this.initChart(); }, hideItem: function (a) { a.hidden = !0; this.initChart(); }, hideBalloon: function () { var a = this; clearTimeout(a.hoverInt); clearTimeout(a.balloonTO); a.hoverInt = setTimeout(function () { a.hideBalloonReal.call(a); }, a.hideBalloonTime); }, cleanChart: function () {}, hideBalloonReal: function () { var a = this.balloon; a && a.hide && a.hide(); }, showBalloon: function (a, b, c, e, d) { var f = this; clearTimeout(f.balloonTO); clearTimeout(f.hoverInt); f.balloonTO = setTimeout(function () { f.showBalloonReal.call(f, a, b, c, e, d); }, 1); }, showBalloonReal: function (a, b, c, e, d) { this.handleMouseMove(); var f = this.balloon; f.enabled && (f.followCursor(!1), f.changeColor(b), !c || f.fixedPosition ? (f.setPosition(e, d), isNaN(e) || isNaN(d) ? f.followCursor(!0) : f.followCursor(!1)) : f.followCursor(!0), a && f.showBalloon(a)); }, handleMouseOver: function () { this.outTO && clearTimeout(this.outTO); d.resetMouseOver(); this.mouseIsOver = !0; }, handleMouseOut: function () { var a = this; d.resetMouseOver(); a.outTO && clearTimeout(a.outTO); a.outTO = setTimeout(function () { a.handleMouseOutReal(); }, 10); }, handleMouseOutReal: function () { this.mouseIsOver = !1; }, handleMouseMove: function (a) { a || (a = window.event); this.mouse2Y = this.mouse2X = NaN; var b, c, e, d; if (a) { if (a.touches) { var f = a.touches.item(1); f && this.panEventsEnabled && this.boundingRect && ((e = f.clientX - this.boundingRect.left), (d = f.clientY - this.boundingRect.top)); a = a.touches.item(0); if (!a) return; } else this.wasTouched = !1; this.boundingRect && a.clientX && ((b = a.clientX - this.boundingRect.left), (c = a.clientY - this.boundingRect.top)); isNaN(e) ? (this.mouseX = b) : ((this.mouseX = Math.min(b, e)), (this.mouse2X = Math.max(b, e))); isNaN(d) ? (this.mouseY = c) : ((this.mouseY = Math.min(c, d)), (this.mouse2Y = Math.max(c, d))); this.autoTransform && ((this.mouseX /= this.cssScale), (this.mouseY /= this.cssScale)); } }, handleTouchStart: function (a) { this.hideBalloonReal(); (a && ((a.touches && this.tapToActivate && !this.tapped) || !this.panRequired)) || (this.handleMouseMove(a), this.handleMouseDown(a)); }, handleTouchEnd: function (a) { this.wasTouched = !0; this.handleMouseMove(a); d.resetMouseOver(); this.handleReleaseOutside(a); }, handleReleaseOutside: function () { this.handleDocTouchEnd.call(this); }, handleMouseDown: function (a) { d.resetMouseOver(); this.mouseIsOver = !0; a && a.preventDefault && (this.panEventsEnabled ? a.preventDefault() : a.touches || a.preventDefault()); }, handleKeyUp: function (a) {}, addLegend: function (a, b) { a = d.processObject(a, d.AmLegend, this.theme); a.divId = b; a.ieW = 0; var c; c = "object" != typeof b && b ? document.getElementById(b) : b; this.legend = a; a.chart = this; c ? ((a.div = c), (a.position = "outside"), (a.autoMargins = !1)) : (a.div = this.legendDiv); return a; }, removeLegend: function () { this.legend = void 0; this.previousWidth = 0; this.legendDiv.innerHTML = ""; }, handleResize: function () { (d.isPercents(this.width) || d.isPercents(this.height)) && this.invalidateSizeReal(); this.renderFix(); }, renderFix: function () { if (!d.VML) { var a = this.container; a && a.renderFix(); } }, getSVG: function () { if (d.hasSVG) return this.container; }, animate: function (a, b, c, e, g, f, k) { a["an_" + b] && d.removeFromArray(this.animations, a["an_" + b]); c = { obj: a, frame: 0, attribute: b, from: c, to: e, time: g, effect: f, suffix: k }; a["an_" + b] = c; this.animations.push(c); return c; }, setLegendData: function (a) { var b = this.legend; b && b.setData(a); }, stopAnim: function (a) { d.removeFromArray(this.animations, a); }, updateAnimations: function () { var a; this.container && this.container.update(); if (this.animations) for (a = this.animations.length - 1; 0 <= a; a--) { var b = this.animations[a], c = d.updateRate * b.time, e = b.frame + 1, g = b.obj, f = b.attribute; if (e <= c) { b.frame++; var k = Number(b.from), h = Number(b.to) - k, c = d[b.effect](0, e, k, h, c); 0 === h ? (this.animations.splice(a, 1), (g.node.style[f] = Number(b.to) + b.suffix)) : (g.node.style[f] = c + b.suffix); } else (g.node.style[f] = Number(b.to) + b.suffix), (g.animationFinished = !0), this.animations.splice(a, 1); } }, update: function () { this.updateAnimations(); var a = this.animatable; if (0 < a.length) { for (var b = !0, c = a.length - 1; 0 <= c; c--) { var e = a[c]; e && (e.animationFinished ? a.splice(c, 1) : (b = !1)); } b && (this.fire({ type: "animationFinished", chart: this }), (this.animatable = [])); } }, inIframe: function () { try { return window.self !== window.top; } catch (a) { return !0; } }, brr: function () { if (!this.hideCredits) { var a = "amcharts.com", b = window.location.hostname.split("."), c; 2 <= b.length && (c = b[b.length - 2] + "." + b[b.length - 1]); this.amLink && (b = this.amLink.parentNode) && b.removeChild(this.amLink); if (c != a || !0 === this.inIframe()) { c = a = "http://www." + a; var b = "JavaScript charts", e = "JS chart by amCharts"; "ammap" == this.product && ((c = a + "/javascript-maps/"), (b = "Interactive JavaScript maps"), (e = "JS map by amCharts")); a = document.createElement("a"); e = document.createTextNode(e); a.setAttribute("href", c); a.setAttribute("title", b); this.urlTarget && a.setAttribute("target", this.urlTarget); a.appendChild(e); this.chartDiv.appendChild(a); this.amLink = a; a = a.style; a.position = "absolute"; a.textDecoration = "none"; a.color = this.color; a.fontFamily = this.fontFamily; a.fontSize = "11px"; a.opacity = 0.7; a.display = "block"; this.positionCred(); } } }, positionCred: function () { var a = this.amLink; if (a) { var b = this.creditsPosition, c = a.style, e = a.offsetWidth, a = a.offsetHeight, d = 0, f = 0, k = this.realWidth, h = this.realHeight, l = this.type; if ("serial" == l || "xy" == l || "gantt" == l) (d = this.marginLeftReal), (f = this.marginTopReal), (k = d + this.plotAreaWidth), (h = f + this.plotAreaHeight); var l = 5 + d, m = f + 5; "bottom-left" == b && ((l = 5 + d), (m = h - a - 3)); "bottom-right" == b && ((l = k - e - 5), (m = h - a - 3)); "top-right" == b && ((l = k - e - 5), (m = f + 5)); c.left = l + "px"; c.top = m + "px"; } }, }); d.Slice = d.Class({ construct: function () {} }); d.SerialDataItem = d.Class({ construct: function () {} }); d.GraphDataItem = d.Class({ construct: function () {} }); d.Guide = d.Class({ construct: function (a) { this.cname = "Guide"; d.applyTheme(this, a, this.cname); }, }); d.Title = d.Class({ construct: function (a) { this.cname = "Title"; d.applyTheme(this, a, this.cname); }, }); d.Label = d.Class({ construct: function (a) { this.cname = "Label"; d.applyTheme(this, a, this.cname); }, }); })(); (function () { var d = window.AmCharts; d.AmBalloon = d.Class({ construct: function (a) { this.cname = "AmBalloon"; this.enabled = !0; this.fillColor = "#FFFFFF"; this.fillAlpha = 0.8; this.borderThickness = 2; this.borderColor = "#FFFFFF"; this.borderAlpha = 1; this.cornerRadius = 0; this.maxWidth = 220; this.horizontalPadding = 8; this.verticalPadding = 4; this.pointerWidth = 6; this.pointerOrientation = "V"; this.color = "#000000"; this.adjustBorderColor = !0; this.show = this.follow = this.showBullet = !1; this.bulletSize = 3; this.shadowAlpha = 0.4; this.shadowColor = "#000000"; this.fadeOutDuration = this.animationDuration = 0.3; this.fixedPosition = !0; this.offsetY = 6; this.offsetX = 1; this.textAlign = "center"; this.disableMouseEvents = !0; this.deltaSignX = this.deltaSignY = 1; d.isModern || (this.offsetY *= 1.5); this.sdy = this.sdx = 0; d.applyTheme(this, a, this.cname); }, draw: function () { var a = this.pointToX, b = this.pointToY; d.isModern || (this.drop = !1); var c = this.chart; d.VML && (this.fadeOutDuration = 0); this.xAnim && c.stopAnim(this.xAnim); this.yAnim && c.stopAnim(this.yAnim); this.sdy = this.sdx = 0; if (!isNaN(a)) { var e = this.follow, g = c.container, f = this.set; d.remove(f); this.removeDiv(); f = g.set(); f.node.style.pointerEvents = "none"; this.set = f; this.mainSet ? (this.mainSet.push(this.set), (this.sdx = this.mainSet.x), (this.sdy = this.mainSet.y)) : c.balloonsSet.push(f); if (this.show) { var k = this.l, h = this.t, l = this.r, m = this.b, n = this.balloonColor, p = this.fillColor, r = this.borderColor, t = p; void 0 != n && (this.adjustBorderColor ? (t = r = n) : (p = n)); var q = this.horizontalPadding, y = this.verticalPadding, B = this.pointerWidth, u = this.pointerOrientation, v = this.cornerRadius, w = c.fontFamily, A = this.fontSize; void 0 == A && (A = c.fontSize); var n = document.createElement("div"), C = c.classNamePrefix; n.className = C + "-balloon-div"; this.className && (n.className = n.className + " " + C + "-balloon-div-" + this.className); C = n.style; this.disableMouseEvents && (C.pointerEvents = "none"); C.position = "absolute"; var x = this.minWidth, z = document.createElement("div"); n.appendChild(z); var E = z.style; isNaN(x) || (E.minWidth = x - 2 * q + "px"); E.textAlign = this.textAlign; E.maxWidth = this.maxWidth + "px"; E.fontSize = A + "px"; E.color = this.color; E.fontFamily = w; z.innerHTML = this.text; c.chartDiv.appendChild(n); this.textDiv = n; var E = n.offsetWidth, F = n.offsetHeight; n.clientHeight && ((E = n.clientWidth), (F = n.clientHeight)); w = F + 2 * y; z = E + 2 * q; !isNaN(x) && z < x && (z = x); window.opera && (w += 2); var H = !1, A = this.offsetY; c.handDrawn && (A += c.handDrawScatter + 2); "H" != u ? ((x = a - z / 2), b < h + w + 10 && "down" != u ? ((H = !0), e && (b += A), (A = b + B), (this.deltaSignY = -1)) : (e && (b -= A), (A = b - w - B), (this.deltaSignY = 1))) : (2 * B > w && (B = w / 2), (A = b - w / 2), a < k + (l - k) / 2 ? ((x = a + B), (this.deltaSignX = -1)) : ((x = a - z - B), (this.deltaSignX = 1))); A + w >= m && (A = m - w); A < h && (A = h); x < k && (x = k); x + z > l && (x = l - z); var h = A + y, m = x + q, G = this.shadowAlpha, D = this.shadowColor, q = this.borderThickness, L = this.bulletSize, J, y = this.fillAlpha, M = this.borderAlpha; this.showBullet && ((J = d.circle(g, L, t, y)), f.push(J)); this.drop ? ((k = z / 1.6), (l = 0), "V" == u && (u = "down"), "H" == u && (u = "left"), "down" == u && ((x = a + 1), (A = b - k - k / 3)), "up" == u && ((l = 180), (x = a + 1), (A = b + k + k / 3)), "left" == u && ((l = 270), (x = a + k + k / 3 + 2), (A = b)), "right" == u && ((l = 90), (x = a - k - k / 3 + 2), (A = b)), (h = A - F / 2 + 1), (m = x - E / 2 - 1), (p = d.drop(g, k, l, p, y, q, r, M))) : 0 < v || 0 === B ? (0 < G && ((a = d.rect(g, z, w, p, 0, q + 1, D, G, v)), d.isModern ? a.translate(1, 1) : a.translate(4, 4), f.push(a)), (p = d.rect(g, z, w, p, y, q, r, M, v))) : ((t = []), (v = []), "H" != u ? ((k = a - x), k > z - B && (k = z - B), k < B && (k = B), (t = [0, k - B, a - x, k + B, z, z, 0, 0]), (v = H ? [0, 0, b - A, 0, 0, w, w, 0] : [w, w, b - A, w, w, 0, 0, w])) : ((u = b - A), u > w - B && (u = w - B), u < B && (u = B), (v = [0, u - B, b - A, u + B, w, w, 0, 0]), (t = a < k + (l - k) / 2 ? [0, 0, x < a ? 0 : a - x, 0, 0, z, z, 0] : [z, z, x + z > a ? z : a - x, z, z, 0, 0, z])), 0 < G && ((a = d.polygon(g, t, v, p, 0, q, D, G)), a.translate(1, 1), f.push(a)), (p = d.polygon(g, t, v, p, y, q, r, M))); this.bg = p; f.push(p); p.toFront(); d.setCN(c, p, "balloon-bg"); this.className && d.setCN(c, p, "balloon-bg-" + this.className); g = 1 * this.deltaSignX; m += this.sdx; h += this.sdy; C.left = m + "px"; C.top = h + "px"; f.translate(x - g, A, 1, !0); p = p.getBBox(); this.bottom = A + w + 1; this.yPos = p.y + A; J && J.translate(this.pointToX - x + g, b - A); b = this.animationDuration; 0 < this.animationDuration && !e && !isNaN(this.prevX) && (f.translate(this.prevX, this.prevY, NaN, !0), f.animate({ translate: x - g + "," + A }, b, "easeOutSine"), n && ((C.left = this.prevTX + "px"), (C.top = this.prevTY + "px"), (this.xAnim = c.animate({ node: n }, "left", this.prevTX, m, b, "easeOutSine", "px")), (this.yAnim = c.animate({ node: n }, "top", this.prevTY, h, b, "easeOutSine", "px")))); this.prevX = x - g; this.prevY = A; this.prevTX = m; this.prevTY = h; } } }, fixPrevious: function () { this.rPrevX = this.prevX; this.rPrevY = this.prevY; this.rPrevTX = this.prevTX; this.rPrevTY = this.prevTY; }, restorePrevious: function () { this.prevX = this.rPrevX; this.prevY = this.rPrevY; this.prevTX = this.rPrevTX; this.prevTY = this.rPrevTY; }, followMouse: function () { if (this.follow && this.show) { var a = this.chart.mouseX - this.offsetX * this.deltaSignX - this.sdx, b = this.chart.mouseY - this.sdy; this.pointToX = a; this.pointToY = b; if (a != this.previousX || b != this.previousY) if (((this.previousX = a), (this.previousY = b), 0 === this.cornerRadius)) this.draw(); else { var c = this.set; if (c) { var e = c.getBBox(), a = a - e.width / 2, d = b - e.height - 10; a < this.l && (a = this.l); a > this.r - e.width && (a = this.r - e.width); d < this.t && (d = b + 10); c.translate(a, d); b = this.textDiv.style; b.left = a + this.horizontalPadding + "px"; b.top = d + this.verticalPadding + "px"; } } } }, changeColor: function (a) { this.balloonColor = a; }, setBounds: function (a, b, c, e) { this.l = a; this.t = b; this.r = c; this.b = e; this.destroyTO && clearTimeout(this.destroyTO); }, showBalloon: function (a) { if (this.text != a || this.positionChanged) (this.text = a), (this.isHiding = !1), (this.show = !0), this.destroyTO && clearTimeout(this.destroyTO), (a = this.chart), this.fadeAnim1 && a.stopAnim(this.fadeAnim1), this.fadeAnim2 && a.stopAnim(this.fadeAnim2), this.draw(), (this.positionChanged = !1); }, hide: function (a) { var b = this; b.text = void 0; isNaN(a) && (a = b.fadeOutDuration); var c = b.chart; if (0 < a && !b.isHiding) { b.isHiding = !0; b.destroyTO && clearTimeout(b.destroyTO); b.destroyTO = setTimeout(function () { b.destroy.call(b); }, 1e3 * a); b.follow = !1; b.show = !1; var e = b.set; e && (e.setAttr("opacity", b.fillAlpha), (b.fadeAnim1 = e.animate({ opacity: 0 }, a, "easeInSine"))); b.textDiv && (b.fadeAnim2 = c.animate({ node: b.textDiv }, "opacity", 1, 0, a, "easeInSine", "")); } else (b.show = !1), (b.follow = !1), b.destroy(); }, setPosition: function (a, b) { if (a != this.pointToX || b != this.pointToY) (this.previousX = this.pointToX), (this.previousY = this.pointToY), (this.pointToX = a), (this.pointToY = b), (this.positionChanged = !0); }, followCursor: function (a) { var b = this; b.follow = a; clearInterval(b.interval); var c = b.chart.mouseX - b.sdx, e = b.chart.mouseY - b.sdy; !isNaN(c) && a && ((b.pointToX = c - b.offsetX * b.deltaSignX), (b.pointToY = e), b.followMouse(), (b.interval = setInterval(function () { b.followMouse.call(b); }, 40))); }, removeDiv: function () { if (this.textDiv) { var a = this.textDiv.parentNode; a && a.removeChild(this.textDiv); } }, destroy: function () { clearInterval(this.interval); d.remove(this.set); this.removeDiv(); this.set = null; }, }); })(); (function () { var d = window.AmCharts; d.circle = function (a, b, c, e, g, f, k, h, l) { 0 >= b && (b = 0.001); if (void 0 == g || 0 === g) g = 0.01; void 0 === f && (f = "#000000"); void 0 === k && (k = 0); e = { fill: c, stroke: f, "fill-opacity": e, "stroke-width": g, "stroke-opacity": k }; a = isNaN(l) ? a.circle(0, 0, b).attr(e) : a.ellipse(0, 0, b, l).attr(e); h && a.gradient("radialGradient", [c, d.adjustLuminosity(c, -0.6)]); return a; }; d.text = function (a, b, c, e, g, f, k, h) { f || (f = "middle"); "right" == f && (f = "end"); "left" == f && (f = "start"); isNaN(h) && (h = 1); void 0 !== b && ((b = String(b)), d.isIE && !d.isModern && ((b = b.replace("&", "&")), (b = b.replace("&", "&")))); c = { fill: c, "font-family": e, "font-size": g + "px", opacity: h }; !0 === k && (c["font-weight"] = "bold"); c["text-anchor"] = f; return a.text(b, c); }; d.polygon = function (a, b, c, e, g, f, k, h, l, m, n) { isNaN(f) && (f = 0.01); isNaN(h) && (h = g); var p = e, r = !1; "object" == typeof p && 1 < p.length && ((r = !0), (p = p[0])); void 0 === k && (k = p); g = { fill: p, stroke: k, "fill-opacity": g, "stroke-width": f, "stroke-opacity": h }; void 0 !== n && 0 < n && (g["stroke-dasharray"] = n); n = d.dx; f = d.dy; a.handDrawn && ((c = d.makeHD(b, c, a.handDrawScatter)), (b = c[0]), (c = c[1])); k = Math.round; m && (k = Number); h = "M" + (k(b[0]) + n) + "," + (k(c[0]) + f); for (p = 1; p < b.length; p++) m && ((b[p] = d.roundTo(b[p], 5)), (c[p] = d.roundTo(c[p], 5))), (h += " L" + (k(b[p]) + n) + "," + (k(c[p]) + f)); a = a.path(h + " Z").attr(g); r && a.gradient("linearGradient", e, l); return a; }; d.rect = function (a, b, c, e, g, f, k, h, l, m, n) { if (isNaN(b) || isNaN(c)) return a.set(); isNaN(f) && (f = 0); void 0 === l && (l = 0); void 0 === m && (m = 270); isNaN(g) && (g = 0); var p = e, r = !1; "object" == typeof p && ((p = p[0]), (r = !0)); void 0 === k && (k = p); void 0 === h && (h = g); b = Math.round(b); c = Math.round(c); var t = 0, q = 0; 0 > b && ((b = Math.abs(b)), (t = -b)); 0 > c && ((c = Math.abs(c)), (q = -c)); t += d.dx; q += d.dy; g = { fill: p, stroke: k, "fill-opacity": g, "stroke-opacity": h }; void 0 !== n && 0 < n && (g["stroke-dasharray"] = n); a = a.rect(t, q, b, c, l, f).attr(g); r && a.gradient("linearGradient", e, m); return a; }; d.bullet = function (a, b, c, e, g, f, k, h, l, m, n, p, r) { var t; "circle" == b && (b = "round"); switch (b) { case "round": t = d.circle(a, c / 2, e, g, f, k, h); break; case "square": t = d.polygon(a, [-c / 2, c / 2, c / 2, -c / 2], [c / 2, c / 2, -c / 2, -c / 2], e, g, f, k, h, m - 180, void 0, r); break; case "rectangle": t = d.polygon(a, [-c, c, c, -c], [c / 2, c / 2, -c / 2, -c / 2], e, g, f, k, h, m - 180, void 0, r); break; case "diamond": t = d.polygon(a, [-c / 2, 0, c / 2, 0], [0, -c / 2, 0, c / 2], e, g, f, k, h); break; case "triangleUp": t = d.triangle(a, c, 0, e, g, f, k, h); break; case "triangleDown": t = d.triangle(a, c, 180, e, g, f, k, h); break; case "triangleLeft": t = d.triangle(a, c, 270, e, g, f, k, h); break; case "triangleRight": t = d.triangle(a, c, 90, e, g, f, k, h); break; case "bubble": t = d.circle(a, c / 2, e, g, f, k, h, !0); break; case "line": t = d.line(a, [-c / 2, c / 2], [0, 0], e, g, f, k, h); break; case "yError": t = a.set(); t.push(d.line(a, [0, 0], [-c / 2, c / 2], e, g, f)); t.push(d.line(a, [-l, l], [-c / 2, -c / 2], e, g, f)); t.push(d.line(a, [-l, l], [c / 2, c / 2], e, g, f)); break; case "xError": (t = a.set()), t.push(d.line(a, [-c / 2, c / 2], [0, 0], e, g, f)), t.push(d.line(a, [-c / 2, -c / 2], [-l, l], e, g, f)), t.push(d.line(a, [c / 2, c / 2], [-l, l], e, g, f)); } t && t.pattern(n, NaN, p); return t; }; d.triangle = function (a, b, c, e, d, f, k, h) { if (void 0 === f || 0 === f) f = 1; void 0 === k && (k = "#000"); void 0 === h && (h = 0); e = { fill: e, stroke: k, "fill-opacity": d, "stroke-width": f, "stroke-opacity": h }; b /= 2; var l; 0 === c && (l = " M" + -b + "," + b + " L0," + -b + " L" + b + "," + b + " Z"); 180 == c && (l = " M" + -b + "," + -b + " L0," + b + " L" + b + "," + -b + " Z"); 90 == c && (l = " M" + -b + "," + -b + " L" + b + ",0 L" + -b + "," + b + " Z"); 270 == c && (l = " M" + -b + ",0 L" + b + "," + b + " L" + b + "," + -b + " Z"); return a.path(l).attr(e); }; d.line = function (a, b, c, e, g, f, k, h, l, m, n) { if (a.handDrawn && !n) return d.handDrawnLine(a, b, c, e, g, f, k, h, l, m, n); f = { fill: "none", "stroke-width": f }; void 0 !== k && 0 < k && (f["stroke-dasharray"] = k); isNaN(g) || (f["stroke-opacity"] = g); e && (f.stroke = e); e = Math.round; m && ((e = Number), (b[0] = d.roundTo(b[0], 5)), (c[0] = d.roundTo(c[0], 5))); m = d.dx; g = d.dy; k = "M" + (e(b[0]) + m) + "," + (e(c[0]) + g); for (h = 1; h < b.length; h++) (b[h] = d.roundTo(b[h], 5)), (c[h] = d.roundTo(c[h], 5)), (k += " L" + (e(b[h]) + m) + "," + (e(c[h]) + g)); if (d.VML) return a.path(k, void 0, !0).attr(f); l && (k += " M0,0 L0,0"); return a.path(k).attr(f); }; d.makeHD = function (a, b, c) { for (var e = [], d = [], f = 1; f < a.length; f++) for (var k = Number(a[f - 1]), h = Number(b[f - 1]), l = Number(a[f]), m = Number(b[f]), n = Math.round(Math.sqrt(Math.pow(l - k, 2) + Math.pow(m - h, 2)) / 50) + 1, l = (l - k) / n, m = (m - h) / n, p = 0; p <= n; p++) { var r = h + p * m + Math.random() * c; e.push(k + p * l + Math.random() * c); d.push(r); } return [e, d]; }; d.handDrawnLine = function (a, b, c, e, g, f, k, h, l, m) { var n, p = a.set(); for (n = 1; n < b.length; n++) for (var r = [b[n - 1], b[n]], t = [c[n - 1], c[n]], t = d.makeHD(r, t, a.handDrawScatter), r = t[0], t = t[1], q = 1; q < r.length; q++) p.push(d.line(a, [r[q - 1], r[q]], [t[q - 1], t[q]], e, g, f + Math.random() * a.handDrawThickness - a.handDrawThickness / 2, k, h, l, m, !0)); return p; }; d.doNothing = function (a) { return a; }; d.drop = function (a, b, c, e, d, f, k, h) { var l = (1 / 180) * Math.PI, m = c - 20, n = Math.sin(m * l) * b, p = Math.cos(m * l) * b, r = Math.sin((m + 40) * l) * b, t = Math.cos((m + 40) * l) * b, q = 0.8 * b, y = -b / 3, B = b / 3; 0 === c && ((y = -y), (B = 0)); 180 == c && (B = 0); 90 == c && (y = 0); 270 == c && ((y = 0), (B = -B)); c = { fill: e, stroke: k, "stroke-width": f, "stroke-opacity": h, "fill-opacity": d }; b = "M" + n + "," + p + " A" + b + "," + b + ",0,1,1," + r + "," + t + (" A" + q + "," + q + ",0,0,0," + (Math.sin((m + 20) * l) * b + B) + "," + (Math.cos((m + 20) * l) * b + y)); b += " A" + q + "," + q + ",0,0,0," + n + "," + p; return a.path(b, void 0, void 0, "1000,1000").attr(c); }; d.wedge = function (a, b, c, e, g, f, k, h, l, m, n, p, r, t) { var q = Math.round; f = q(f); k = q(k); h = q(h); var y = q((k / f) * h), B = d.VML, u = 359.5 + f / 100; 359.94 < u && (u = 359.94); g >= u && (g = u); var v = (1 / 180) * Math.PI, u = b + Math.sin(e * v) * h, w = c - Math.cos(e * v) * y, A = b + Math.sin(e * v) * f, C = c - Math.cos(e * v) * k, x = b + Math.sin((e + g) * v) * f, z = c - Math.cos((e + g) * v) * k, E = b + Math.sin((e + g) * v) * h, v = c - Math.cos((e + g) * v) * y, F = { fill: d.adjustLuminosity(m.fill, -0.2), "stroke-opacity": 0, "fill-opacity": m["fill-opacity"] }, H = 0; 180 < Math.abs(g) && (H = 1); e = a.set(); var G; B && ((u = q(10 * u)), (A = q(10 * A)), (x = q(10 * x)), (E = q(10 * E)), (w = q(10 * w)), (C = q(10 * C)), (z = q(10 * z)), (v = q(10 * v)), (b = q(10 * b)), (l = q(10 * l)), (c = q(10 * c)), (f *= 10), (k *= 10), (h *= 10), (y *= 10), 1 > Math.abs(g) && 1 >= Math.abs(x - A) && 1 >= Math.abs(z - C) && (G = !0)); g = ""; var D; p && ((F["fill-opacity"] = 0), (F["stroke-opacity"] = m["stroke-opacity"] / 2), (F.stroke = m.stroke)); if (0 < l) { D = " M" + u + "," + (w + l) + " L" + A + "," + (C + l); B ? (G || (D += " A" + (b - f) + "," + (l + c - k) + "," + (b + f) + "," + (l + c + k) + "," + A + "," + (C + l) + "," + x + "," + (z + l)), (D += " L" + E + "," + (v + l)), 0 < h && (G || (D += " B" + (b - h) + "," + (l + c - y) + "," + (b + h) + "," + (l + c + y) + "," + E + "," + (l + v) + "," + u + "," + (l + w)))) : ((D += " A" + f + "," + k + ",0," + H + ",1," + x + "," + (z + l) + " L" + E + "," + (v + l)), 0 < h && (D += " A" + h + "," + y + ",0," + H + ",0," + u + "," + (w + l))); D += " Z"; var L = l; B && (L /= 10); for (var J = 0; J < L; J += 10) { var M = a.path(D, void 0, void 0, "1000,1000").attr(F); e.push(M); M.translate(0, -J); } D = a.path(" M" + u + "," + w + " L" + u + "," + (w + l) + " L" + A + "," + (C + l) + " L" + A + "," + C + " L" + u + "," + w + " Z", void 0, void 0, "1000,1000").attr(F); l = a.path(" M" + x + "," + z + " L" + x + "," + (z + l) + " L" + E + "," + (v + l) + " L" + E + "," + v + " L" + x + "," + z + " Z", void 0, void 0, "1000,1000").attr(F); e.push(D); e.push(l); } B ? (G || (g = " A" + q(b - f) + "," + q(c - k) + "," + q(b + f) + "," + q(c + k) + "," + q(A) + "," + q(C) + "," + q(x) + "," + q(z)), (k = " M" + q(u) + "," + q(w) + " L" + q(A) + "," + q(C) + g + " L" + q(E) + "," + q(v))) : (k = " M" + u + "," + w + " L" + A + "," + C + (" A" + f + "," + k + ",0," + H + ",1," + x + "," + z) + " L" + E + "," + v); 0 < h && (B ? G || (k += " B" + (b - h) + "," + (c - y) + "," + (b + h) + "," + (c + y) + "," + E + "," + v + "," + u + "," + w) : (k += " A" + h + "," + y + ",0," + H + ",0," + u + "," + w)); a.handDrawn && ((h = d.line(a, [u, A], [w, C], m.stroke, m.thickness * Math.random() * a.handDrawThickness, m["stroke-opacity"])), e.push(h)); a = a.path(k + " Z", void 0, void 0, "1000,1000").attr(m); if (n) { h = []; for (y = 0; y < n.length; y++) h.push(d.adjustLuminosity(m.fill, n[y])); "radial" != t || d.isModern || (h = []); 0 < h.length && a.gradient(t + "Gradient", h); } d.isModern && "radial" == t && a.grad && (a.grad.setAttribute("gradientUnits", "userSpaceOnUse"), a.grad.setAttribute("r", f), a.grad.setAttribute("cx", b), a.grad.setAttribute("cy", c)); a.pattern(p, NaN, r); e.wedge = a; e.push(a); return e; }; d.rgb2hex = function (a) { return (a = a.match(/^rgba?[\s+]?\([\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?/i)) && 4 === a.length ? "#" + ("0" + parseInt(a[1], 10).toString(16)).slice(-2) + ("0" + parseInt(a[2], 10).toString(16)).slice(-2) + ("0" + parseInt(a[3], 10).toString(16)).slice(-2) : ""; }; d.adjustLuminosity = function (a, b) { a && -1 != a.indexOf("rgb") && (a = d.rgb2hex(a)); a = String(a).replace(/[^0-9a-f]/gi, ""); 6 > a.length && (a = String(a[0]) + String(a[0]) + String(a[1]) + String(a[1]) + String(a[2]) + String(a[2])); b = b || 0; var c = "#", e, g; for (g = 0; 3 > g; g++) (e = parseInt(a.substr(2 * g, 2), 16)), (e = Math.round(Math.min(Math.max(0, e + e * b), 255)).toString(16)), (c += ("00" + e).substr(e.length)); return c; }; })(); (function () { var d = window.AmCharts; d.AmLegend = d.Class({ construct: function (a) { this.enabled = !0; this.cname = "AmLegend"; this.createEvents("rollOverMarker", "rollOverItem", "rollOutMarker", "rollOutItem", "showItem", "hideItem", "clickMarker", "clickLabel"); this.position = "bottom"; this.borderColor = this.color = "#000000"; this.borderAlpha = 0; this.markerLabelGap = 5; this.verticalGap = 10; this.align = "left"; this.horizontalGap = 0; this.spacing = 10; this.markerDisabledColor = "#AAB3B3"; this.markerType = "square"; this.markerSize = 16; this.markerBorderThickness = this.markerBorderAlpha = 1; this.marginBottom = this.marginTop = 0; this.marginLeft = this.marginRight = 20; this.autoMargins = !0; this.valueWidth = 50; this.switchable = !0; this.switchType = "x"; this.switchColor = "#FFFFFF"; this.rollOverColor = "#CC0000"; this.reversedOrder = !1; this.labelText = "[[title]]"; this.valueText = "[[value]]"; this.accessibleLabel = "[[title]]"; this.useMarkerColorForLabels = !1; this.rollOverGraphAlpha = 1; this.textClickEnabled = !1; this.equalWidths = !0; this.backgroundColor = "#FFFFFF"; this.backgroundAlpha = 0; this.useGraphSettings = !1; this.showEntries = !0; this.labelDx = 0; d.applyTheme(this, a, this.cname); }, setData: function (a) { this.legendData = a; this.invalidateSize(); }, invalidateSize: function () { this.destroy(); this.entries = []; this.valueLabels = []; var a = this.legendData; this.enabled && (d.ifArray(a) || d.ifArray(this.data)) && this.drawLegend(); }, drawLegend: function () { var a = this.chart, b = this.position, c = this.width, e = a.divRealWidth, g = a.divRealHeight, f = this.div, k = this.legendData; this.data && (k = this.combineLegend ? this.legendData.concat(this.data) : this.data); isNaN(this.fontSize) && (this.fontSize = a.fontSize); this.maxColumnsReal = this.maxColumns; if ("right" == b || "left" == b) (this.maxColumnsReal = 1), this.autoMargins && (this.marginLeft = this.marginRight = 10); else if (this.autoMargins) { this.marginRight = a.marginRight; this.marginLeft = a.marginLeft; var h = a.autoMarginOffset; "bottom" == b ? ((this.marginBottom = h), (this.marginTop = 0)) : ((this.marginTop = h), (this.marginBottom = 0)); } c = void 0 !== c ? d.toCoordinate(c, e) : "right" != b && "left" != b ? a.realWidth : 0 < this.ieW ? this.ieW : a.realWidth; "outside" == b ? ((c = f.offsetWidth), (g = f.offsetHeight), f.clientHeight && ((c = f.clientWidth), (g = f.clientHeight))) : (isNaN(c) || (f.style.width = c + "px"), (f.className = "amChartsLegend " + a.classNamePrefix + "-legend-div")); this.divWidth = c; (b = this.container) ? ((b.container.innerHTML = ""), f.appendChild(b.container), (b.width = c), (b.height = g), b.setSize(c, g), b.addDefs(a)) : (b = new d.AmDraw(f, c, g, a)); this.container = b; this.lx = 0; this.ly = 8; g = this.markerSize; g > this.fontSize && (this.ly = g / 2 - 1); 0 < g && (this.lx += g + this.markerLabelGap); this.titleWidth = 0; if ((g = this.title)) (g = d.text(this.container, g, this.color, a.fontFamily, this.fontSize, "start", !0)), d.setCN(a, g, "legend-title"), g.translate(this.marginLeft, this.marginTop + this.verticalGap + this.ly + 1), (a = g.getBBox()), (this.titleWidth = a.width + 15), (this.titleHeight = a.height + 6); this.index = this.maxLabelWidth = 0; if (this.showEntries) { for (a = 0; a < k.length; a++) this.createEntry(k[a]); for (a = this.index = 0; a < k.length; a++) this.createValue(k[a]); } this.arrangeEntries(); this.updateValues(); }, arrangeEntries: function () { var a = this.position, b = this.marginLeft + this.titleWidth, c = this.marginRight, e = this.marginTop, g = this.marginBottom, f = this.horizontalGap, k = this.div, h = this.divWidth, l = this.maxColumnsReal, m = this.verticalGap, n = this.spacing, p = h - c - b, r = 0, t = 0, q = this.container; this.set && this.set.remove(); var y = q.set(); this.set = y; var B = q.set(); y.push(B); var u = this.entries, v, w; for (w = 0; w < u.length; w++) { v = u[w].getBBox(); var A = v.width; A > r && (r = A); v = v.height; v > t && (t = v); } var A = (t = 0), C = f, x = 0, z = 0; for (w = 0; w < u.length; w++) { var E = u[w]; this.reversedOrder && (E = u[u.length - w - 1]); v = E.getBBox(); var F; this.equalWidths ? (F = A * (r + n + this.markerLabelGap)) : ((F = C), (C = C + v.width + f + n)); F + v.width > p && 0 < w && 0 !== A && (t++, (F = A = 0), (C = F + v.width + f + n), (x = x + z + m), (z = 0)); v.height > z && (z = v.height); E.translate(F, x); A++; !isNaN(l) && A >= l && ((A = 0), t++, (x = x + z + m), (C = f), (z = 0)); B.push(E); } v = B.getBBox(); l = v.height + 2 * m - 1; "left" == a || "right" == a ? ((n = v.width + 2 * f), (h = n + b + c), (k.style.width = h + "px"), (this.ieW = h)) : (n = h - b - c - 1); c = d.polygon(this.container, [0, n, n, 0], [0, 0, l, l], this.backgroundColor, this.backgroundAlpha, 1, this.borderColor, this.borderAlpha); d.setCN(this.chart, c, "legend-bg"); y.push(c); y.translate(b, e); c.toBack(); b = f; if ("top" == a || "bottom" == a || "absolute" == a || "outside" == a) "center" == this.align ? (b = f + (n - v.width) / 2) : "right" == this.align && (b = f + n - v.width); B.translate(b, m + 1); this.titleHeight > l && (l = this.titleHeight); e = l + e + g + 1; 0 > e && (e = 0); "absolute" != a && "outside" != a && e > this.chart.divRealHeight && (k.style.top = "0px"); k.style.height = Math.round(e) + "px"; q.setSize(this.divWidth, e); }, createEntry: function (a) { if (!1 !== a.visibleInLegend && !a.hideFromLegend) { var b = this, c = b.chart, e = b.useGraphSettings, g = a.markerType; g && (e = !1); a.legendEntryWidth = b.markerSize; g || (g = b.markerType); var f = a.color, k = a.alpha; a.legendKeyColor && (f = a.legendKeyColor()); a.legendKeyAlpha && (k = a.legendKeyAlpha()); var h; !0 === a.hidden && (h = f = b.markerDisabledColor); var l = a.pattern, m, n = a.customMarker; n || (n = b.customMarker); var p = b.container, r = b.markerSize, t = 0, q = 0, y = r / 2; if (e) { e = a.type; b.switchType = void 0; if ("line" == e || "step" == e || "smoothedLine" == e || "ohlc" == e) (m = p.set()), a.hidden || ((f = a.lineColorR), (h = a.bulletBorderColorR)), (t = d.line(p, [0, 2 * r], [r / 2, r / 2], f, a.lineAlpha, a.lineThickness, a.dashLength)), d.setCN(c, t, "graph-stroke"), m.push(t), a.bullet && (a.hidden || (f = a.bulletColorR), (t = d.bullet(p, a.bullet, a.bulletSize, f, a.bulletAlpha, a.bulletBorderThickness, h, a.bulletBorderAlpha))) && (d.setCN(c, t, "graph-bullet"), t.translate(r + 1, r / 2), m.push(t)), (y = 0), (t = r), (q = r / 3); else { a.getGradRotation && ((m = a.getGradRotation()), 0 === m && (m = 180)); t = a.fillColorsR; !0 === a.hidden && (t = f); if ((m = b.createMarker("rectangle", t, a.fillAlphas, a.lineThickness, f, a.lineAlpha, m, l, a.dashLength))) (y = r), m.translate(y, r / 2); t = r; } d.setCN(c, m, "graph-" + e); d.setCN(c, m, "graph-" + a.id); } else if (n) m = p.image(n, 0, 0, r, r); else { var B; isNaN(b.gradientRotation) || (B = 180 + b.gradientRotation); (m = b.createMarker(g, f, k, void 0, void 0, void 0, B, l)) && m.translate(r / 2, r / 2); } d.setCN(c, m, "legend-marker"); b.addListeners(m, a); p = p.set([m]); b.switchable && a.switchable && p.setAttr("cursor", "pointer"); void 0 !== a.id && d.setCN(c, p, "legend-item-" + a.id); d.setCN(c, p, a.className, !0); h = b.switchType; var u; h && "none" != h && 0 < r && ("x" == h ? ((u = b.createX()), u.translate(r / 2, r / 2)) : (u = b.createV()), (u.dItem = a), !0 !== a.hidden ? ("x" == h ? u.hide() : u.show()) : "x" != h && u.hide(), b.switchable || u.hide(), b.addListeners(u, a), (a.legendSwitch = u), p.push(u), d.setCN(c, u, "legend-switch")); h = b.color; a.showBalloon && b.textClickEnabled && void 0 !== b.selectedColor && (h = b.selectedColor); b.useMarkerColorForLabels && !l && (h = f); !0 === a.hidden && (h = b.markerDisabledColor); f = d.massReplace(b.labelText, { "[[title]]": a.title }); void 0 !== b.tabIndex && (p.setAttr("tabindex", b.tabIndex), p.setAttr("role", "menuitem"), p.keyup(function (c) { 13 == c.keyCode && b.clickMarker(a, c); })); c.accessible && b.accessibleLabel && ((l = d.massReplace(b.accessibleLabel, { "[[title]]": a.title })), c.makeAccessible(p, l)); l = b.fontSize; m && (r <= l && ((r = r / 2 + b.ly - l / 2 + (l + 2 - r) / 2 - q), m.translate(y, r), u && u.translate(u.x, r)), (a.legendEntryWidth = m.getBBox().width)); var v; f && ((f = d.fixBrakes(f)), (a.legendTextReal = f), (v = b.labelWidth), (v = isNaN(v) ? d.text(b.container, f, h, c.fontFamily, l, "start") : d.wrappedText(b.container, f, h, c.fontFamily, l, "start", !1, v, 0)), d.setCN(c, v, "legend-label"), v.translate(b.lx + t, b.ly), p.push(v), (b.labelDx = t), (c = v.getBBox().width), b.maxLabelWidth < c && (b.maxLabelWidth = c)); b.entries[b.index] = p; a.legendEntry = b.entries[b.index]; a.legendMarker = m; a.legendLabel = v; b.index++; } }, addListeners: function (a, b) { var c = this; a && a .mouseover(function (a) { c.rollOverMarker(b, a); }) .mouseout(function (a) { c.rollOutMarker(b, a); }) .click(function (a) { c.clickMarker(b, a); }); }, rollOverMarker: function (a, b) { this.switchable && this.dispatch("rollOverMarker", a, b); this.dispatch("rollOverItem", a, b); }, rollOutMarker: function (a, b) { this.switchable && this.dispatch("rollOutMarker", a, b); this.dispatch("rollOutItem", a, b); }, clickMarker: function (a, b) { this.switchable && (!0 === a.hidden ? this.dispatch("showItem", a, b) : this.dispatch("hideItem", a, b)); this.dispatch("clickMarker", a, b); }, rollOverLabel: function (a, b) { a.hidden || (this.textClickEnabled && a.legendLabel && a.legendLabel.attr({ fill: this.rollOverColor })); this.dispatch("rollOverItem", a, b); }, rollOutLabel: function (a, b) { if (!a.hidden && this.textClickEnabled && a.legendLabel) { var c = this.color; void 0 !== this.selectedColor && a.showBalloon && (c = this.selectedColor); this.useMarkerColorForLabels && ((c = a.lineColor), void 0 === c && (c = a.color)); a.legendLabel.attr({ fill: c }); } this.dispatch("rollOutItem", a, b); }, clickLabel: function (a, b) { this.textClickEnabled ? a.hidden || this.dispatch("clickLabel", a, b) : this.switchable && (!0 === a.hidden ? this.dispatch("showItem", a, b) : this.dispatch("hideItem", a, b)); }, dispatch: function (a, b, c) { a = { type: a, dataItem: b, target: this, event: c, chart: this.chart }; this.chart && this.chart.handleLegendEvent(a); this.fire(a); }, createValue: function (a) { var b = this, c = b.fontSize, e = b.chart; if (!1 !== a.visibleInLegend && !a.hideFromLegend) { var g = b.maxLabelWidth, f = 0; b.forceWidth && (g = b.labelWidth); b.equalWidths || (b.valueAlign = "left"); f = { x: 0, y: 0, width: 0, height: 0 }; a.legendLabel && (f = a.legendLabel.getBBox()); "left" == b.valueAlign && (g = f.width); var f = f.height, k = g, h = b.markerSize; h < c + 7 && ((h = c + 7), d.VML && (h += 3)); if (b.valueText && 0 < b.valueWidth) { var l = b.color; b.useMarkerColorForValues && ((l = a.color), a.legendKeyColor && (l = a.legendKeyColor())); !0 === a.hidden && (l = b.markerDisabledColor); var m = b.valueText, g = g + b.lx + b.labelDx + b.markerLabelGap + b.valueWidth, n = "end"; "left" == b.valueAlign && ((g -= b.valueWidth), (n = "start")); c = d.text(b.container, m, l, b.chart.fontFamily, c, n); d.setCN(e, c, "legend-value"); c.translate(g, b.ly); b.entries[b.index].push(c); k += b.valueWidth + 2 * b.markerLabelGap; c.dItem = a; b.valueLabels.push(c); h < f + 5 && (h = f + 5); } b.index++; e = b.container.rect(a.legendEntryWidth, 0, k, h, 0, 0).attr({ stroke: "none", fill: "#fff", "fill-opacity": 0.005 }); e.dItem = a; b.entries[b.index - 1].push(e); e.mouseover(function (c) { b.rollOverLabel(a, c); }) .mouseout(function (c) { b.rollOutLabel(a, c); }) .click(function (c) { b.clickLabel(a, c); }); } }, createV: function () { var a = this.markerSize; return d.polygon(this.container, [a / 5, a / 2, a - a / 5, a / 2], [a / 3, a - a / 5, a / 5, a / 1.7], this.switchColor); }, createX: function () { var a = (this.markerSize - 4) / 2, b = { stroke: this.switchColor, "stroke-width": 3 }, c = this.container, e = d.line(c, [-a, a], [-a, a]).attr(b), a = d.line(c, [-a, a], [a, -a]).attr(b); return this.container.set([e, a]); }, createMarker: function (a, b, c, e, g, f, k, h, l) { var m = this.markerSize, n = this.container; g || (g = this.markerBorderColor); g || (g = b); isNaN(e) && (e = this.markerBorderThickness); isNaN(f) && (f = this.markerBorderAlpha); return d.bullet(n, a, m, b, c, e, g, f, m, k, h, this.chart.path, l); }, validateNow: function () { this.invalidateSize(); }, updateValues: function () { var a = this.valueLabels, b = this.chart, c, e = this.data; if (a) for (c = 0; c < a.length; c++) { var g = a[c], f = g.dItem; f.periodDataItem = void 0; f.periodPercentDataItem = void 0; var k = " "; if (e) f.value ? g.text(f.value) : g.text(""); else { var h = null; if (void 0 !== f.type) { var h = f.currentDataItem, l = this.periodValueText; f.legendPeriodValueText && (l = f.legendPeriodValueText); f.legendPeriodValueTextR && (l = f.legendPeriodValueTextR); h ? ((k = this.valueText), f.legendValueText && (k = f.legendValueText), f.legendValueTextR && (k = f.legendValueTextR), (k = b.formatString(k, h))) : l && b.formatPeriodString && ((l = d.massReplace(l, { "[[title]]": f.title })), (k = b.formatPeriodString(l, f))); } else k = b.formatString(this.valueText, f); l = f; h && (l = h); var m = this.valueFunction; m && (k = m(l, k, b.periodDataItem)); var n; this.useMarkerColorForLabels && !h && f.lastDataItem && (h = f.lastDataItem); h ? (n = b.getBalloonColor(f, h)) : f.legendKeyColor && (n = f.legendKeyColor()); f.legendColorFunction && (n = f.legendColorFunction(l, k, f.periodDataItem, f.periodPercentDataItem)); g.text(k); if (!f.pattern && (this.useMarkerColorForValues && g.setAttr("fill", n), this.useMarkerColorForLabels)) { if ((g = f.legendMarker)) g.setAttr("fill", n), g.setAttr("stroke", n); (g = f.legendLabel) && (f.hidden ? g.setAttr("fill", this.markerDisabledColor) : g.setAttr("fill", n)); } } } }, renderFix: function () { if (!d.VML && this.enabled) { var a = this.container; a && a.renderFix(); } }, destroy: function () { this.div.innerHTML = ""; d.remove(this.set); }, }); })(); (function () { var d = window.AmCharts; d.AmMap = d.Class({ inherits: d.AmChart, construct: function (a) { this.cname = "AmMap"; this.type = "map"; this.theme = a; this.svgNotSupported = "This browser doesn't support SVG. Use Chrome, Firefox, Internet Explorer 9 or later."; this.createEvents( "rollOverMapObject", "rollOutMapObject", "clickMapObject", "mouseDownMapObject", "selectedObjectChanged", "homeButtonClicked", "zoomCompleted", "dragCompleted", "positionChanged", "writeDevInfo", "click", "descriptionClosed" ); this.zoomDuration = 0.6; this.zoomControl = new d.ZoomControl(a); this.fitMapToContainer = !0; this.mouseWheelZoomEnabled = this.backgroundZoomsToTop = !1; this.allowClickOnSelectedObject = this.useHandCursorOnClickableOjects = this.showBalloonOnSelectedObject = !0; this.showObjectsAfterZoom = this.wheelBusy = !1; this.zoomOnDoubleClick = this.useObjectColorForBalloon = !0; this.allowMultipleDescriptionWindows = !1; this.dragMap = this.centerMap = this.linesAboveImages = !0; this.colorSteps = 5; this.forceNormalize = !1; this.showAreasInList = !0; this.showLinesInList = this.showImagesInList = !1; this.areasProcessor = new d.AreasProcessor(this); this.areasSettings = new d.AreasSettings(a); this.imagesProcessor = new d.ImagesProcessor(this); this.imagesSettings = new d.ImagesSettings(a); this.linesProcessor = new d.LinesProcessor(this); this.linesSettings = new d.LinesSettings(a); this.initialTouchZoom = 1; this.showDescriptionOnHover = !1; d.AmMap.base.construct.call(this, a); this.creditsPosition = "bottom-left"; this.product = "ammap"; this.areasClasses = {}; this.updatableImages = []; d.applyTheme(this, a, this.cname); }, initChart: function () { this.zoomInstantly = !0; var a = this.container; this.panRequired = !0; if (this.sizeChanged && d.hasSVG && this.chartCreated) { this.updatableImages = []; this.freeLabelsSet && this.freeLabelsSet.remove(); this.freeLabelsSet = a.set(); this.container.setSize(this.realWidth, this.realHeight); this.resizeMap(); this.drawBackground(); this.redrawLabels(); this.drawTitles(); this.processObjects(!0); this.rescaleObjects(); this.zoomControl.init(this, a); this.drawBg(); var b = this.smallMap; b && b.init(this, a); (b = this.valueLegend) && b.init(this, a); this.sizeChanged = !1; this.zoomToLongLat(this.zLevelTemp, this.zLongTemp, this.zLatTemp, !0); this.previousWidth = this.realWidth; this.previousHeight = this.realHeight; this.updateSmallMap(); this.linkSet.toFront(); this.zoomControl.update && this.zoomControl.update(); } else (d.AmMap.base.initChart.call(this), d.hasSVG) ? (this.dataChanged && (this.parseData(), (this.dispatchDataUpdated = !0), (this.dataChanged = !1), (a = this.legend)) && ((a.position = "absolute"), a.invalidateSize()), this.createDescriptionsDiv(), (this.svgAreas = []), (this.svgAreasById = {}), this.drawChart()) : ((this.chartDiv.style.textAlign = ""), this.chartDiv.setAttribute("class", "ammapAlert"), (this.chartDiv.innerHTML = this.svgNotSupported), this.fire({ type: "failed", chart: this })); }, storeTemp: function () { if (d.hasSVG && 0 < this.realWidth && 0 < this.realHeight) { var a = this.mapContainer.getBBox(); 0 < a.width && 0 < a.height && ((a = this.zoomLongitude()), isNaN(a) || (this.zLongTemp = a), (a = this.zoomLatitude()), isNaN(a) || (this.zLatTemp = a), (a = this.zoomLevel()), isNaN(a) || (this.zLevelTemp = a)); } }, invalidateSize: function () { this.storeTemp(); d.AmMap.base.invalidateSize.call(this); }, validateSize: function () { this.storeTemp(); d.AmMap.base.validateSize.call(this); }, handleWheelReal: function (a) { if (!this.wheelBusy) { this.stopAnimation(); var b = this.zoomLevel(), c = this.zoomControl, e = c.zoomFactor; this.wheelBusy = !0; a = d.fitToBounds(0 < a ? b * e : b / e, c.minZoomLevel, c.maxZoomLevel); e = this.mouseX / this.mapWidth; c = this.mouseY / this.mapHeight; e = (this.zoomX() - e) * (a / b) + e; b = (this.zoomY() - c) * (a / b) + c; this.zoomTo(a, e, b); } }, addLegend: function (a, b) { a.position = "absolute"; a.autoMargins = !1; a.valueWidth = 0; a.switchable = !1; d.AmMap.base.addLegend.call(this, a, b); void 0 === a.enabled && (a.enabled = !0); return a; }, handleLegendEvent: function () {}, createDescriptionsDiv: function () { if (!this.descriptionsDiv) { var a = document.createElement("div"), b = a.style; b.position = "absolute"; b.left = "0px"; b.top = "0px"; this.descriptionsDiv = a; } this.containerDiv.appendChild(this.descriptionsDiv); }, drawChart: function () { d.AmMap.base.drawChart.call(this); var a = this.dataProvider; this.dataProvider = a = d.extend(a, new d.MapData(), !0); this.areasSettings = d.processObject(this.areasSettings, d.AreasSettings, this.theme); this.imagesSettings = d.processObject(this.imagesSettings, d.ImagesSettings, this.theme); this.linesSettings = d.processObject(this.linesSettings, d.LinesSettings, this.theme); var b = this.container; this.mapContainer && this.mapContainer.remove(); this.mapContainer = b.set(); this.graphsSet.push(this.mapContainer); var c; a.map && (c = d.maps[a.map]); a.mapVar && (c = a.mapVar); c ? ((this.svgData = c.svg), this.getBounds(), this.buildEverything()) : (a = a.mapURL) && this.loadXml(a); this.balloonsSet.toFront(); }, drawBg: function () { var a = this; a.background.click(function () { a.handleBackgroundClick(); }); a.background.mouseover(function () { a.rollOutMapObject(a.previouslyHovered); }); }, buildEverything: function () { if (0 < this.realWidth && 0 < this.realHeight) { var a = this.container, b = this.dataProvider; isNaN(b.zoomLevel) || (this.mapContainer.scale = b.zoomLevel); this.projection || ((this.projection = b.projection), this.projection || (this.projection = "equirectangular")); this.updatableImages = []; var c = this.projection; c && (this.projectionFunction = d[c]); this.projectionFunction || (this.projectionFunction = d.equirectangular); this.dpProjectionFunction = d[b.projection]; this.dpProjectionFunction || (this.dpProjectionFunction = d.equirectangular); this.zoomControl = d.processObject(this.zoomControl, d.ZoomControl, this.theme); this.zoomControl.init(this, a); this.drawBg(); this.buildSVGMap(); (this.projectionFunction && c != b.projection) || this.forceNormalize ? (this.normalizeMap(), this.changeProjection()) : this.fixMapPosition(); if ((c = this.smallMap)) (c = d.processObject(c, d.SmallMap, this.theme)), c.init(this, a), (this.smallMap = c); isNaN(b.zoomX) && isNaN(b.zoomY) && isNaN(b.zoomLatitude) && isNaN(b.zoomLongitude) && (this.centerMap ? ((c = this.xyToCoordinates(this.mapWidth / 2, this.mapHeight / 2)), (b.zoomLongitudeC = c.longitude), (b.zoomLatitudeC = c.latitude)) : ((b.zoomX = 0), (b.zoomY = 0)), (this.zoomInstantly = !0)); this.selectObject(this.dataProvider); this.processAreas(); if ((b = this.valueLegend)) (this.valueLegend = b = d.processObject(b, d.ValueLegend, this.theme)), b.init(this, a); this.objectList && (a = this.objectList = d.processObject(this.objectList, d.ObjectList)) && (this.clearObjectList(), a.init(this)); this.dispDUpd(); this.updateSmallMap(); this.linkSet.toFront(); } else this.cleanChart(); }, hideGroup: function (a) { this.showHideGroup(a, !1); }, showGroup: function (a) { this.showHideGroup(a, !0); }, showHideGroup: function (a, b) { this.showHideReal(this.imagesProcessor.allObjects, a, b); this.showHideReal(this.areasProcessor.allObjects, a, b); this.showHideReal(this.linesProcessor.allObjects, a, b); }, showHideReal: function (a, b, c) { var e; for (e = 0; e < a.length; e++) { var d = a[e]; if (d.groupId == b) { var f = d.displayObject; f && (c ? ((d.hidden = !1), f.show()) : ((d.hidden = !0), f.hide())); } } }, makeObjectAccessible: function (a) { if (a.accessibleLabel) { var b = this.formatString(a.accessibleLabel, a); a.displayObject && this.makeAccessible(a.displayObject, b, "menuitem"); } }, update: function () { if (d.hasSVG) { d.AmMap.base.update.call(this); this.zoomControl && this.zoomControl.update && this.zoomControl.update(); for (var a = 0, b = this.updatableImages.length; a < b; a++) this.updatableImages[a].update(); } }, animateMap: function () { var a = this; a.totalFrames = a.zoomDuration * d.updateRate; a.totalFrames += 1; a.frame = 0; a.tweenPercent = 0; a.balloon.hide(0); setTimeout(function () { a.updateSize.call(a); }, 1e3 / d.updateRate); }, updateSize: function () { var a = this, b = a.totalFrames; a.preventHover = !0; a.frame <= b ? (a.frame++, (b = d.easeOutSine(0, a.frame, 0, 1, b)), 1 <= b ? ((b = 1), (a.preventHover = !1), (a.wheelBusy = !1)) : window.requestAnimationFrame ? window.requestAnimationFrame(function () { a.updateSize.call(a); }) : setTimeout(function () { a.updateSize.call(a); }, 1e3 / d.updateRate), 0.8 < b && (a.preventHover = !1)) : ((b = 1), (a.preventHover = !1), (a.wheelBusy = !1)); a.tweenPercent = b; a.rescaleMapAndObjects(); }, rescaleMapAndObjects: function () { var a = this.initialScale, b = this.initialX, c = this.initialY, e = this.tweenPercent, a = a + (this.finalScale - a) * e; this.mapContainer.translate(b + (this.finalX - b) * e, c + (this.finalY - c) * e, a, !0); if (this.areasSettings.adjustOutlineThickness) { for (var b = this.svgAreas, d = 0; d < b.length; d++) (c = b[d]) && c.setAttr("stroke-width", this.areasSettings.outlineThickness / a / this.mapScale); if ((b = this.dataProvider.areas)) for (d = 0; d < b.length; d++) { var c = b[d], f = c.displayObject; f && f.setAttr("stroke-width", c.outlineThicknessReal / a / this.mapScale); } } this.rescaleObjects(); this.positionChanged(); this.updateSmallMap(); 1 == e && this.fire({ type: "zoomCompleted", chart: this }); }, updateSmallMap: function () { this.smallMap && this.smallMap.update(); }, rescaleObjects: function () { var a = this.mapContainer.scale, b = this.imagesProcessor.objectsToResize, c; for (c = 0; c < b.length; c++) { var e = b[c].image, d = b[c].scale, f = b[c].mapImage; isNaN(f.selectedScaleReal) || f != this.selectedObject || ((f.tempScale = d), (d *= f.selectedScaleReal)); e.translate(e.x, e.y, d / a, !0); } b = this.imagesProcessor.labelsToReposition; for (c = 0; c < b.length; c++) (e = b[c]), e.imageLabel && this.imagesProcessor.positionLabel(e.imageLabel, e, e.labelPositionReal); b = this.linesProcessor; if ((e = b.linesToResize)) for (c = 0; c < e.length; c++) (d = e[c]), d.line.setAttr("stroke-width", d.thickness / a); b = b.objectsToResize; for (c = 0; c < b.length; c++) (e = b[c]), e.translate(e.x, e.y, 1 / a, !0); }, handleTouchEnd: function (a) { this.initialDistance = NaN; this.mouseIsDown = this.isDragging = !1; d.AmMap.base.handleTouchEnd.call(this, a); }, handleMouseDown: function (a) { d.resetMouseOver(); this.mouseIsDown = this.mouseIsOver = !0; this.balloon.hide(0); a && this.mouseIsOver && a.preventDefault && this.panEventsEnabled && a.preventDefault(); if ( this.chartCreated && !this.preventHover && ((this.initialTouchZoom = this.zoomLevel()), this.dragMap && (this.stopAnimation(), (this.mapContainerClickX = this.mapContainer.x), (this.mapContainerClickY = this.mapContainer.y)), a || (a = window.event), a.shiftKey && !0 === this.developerMode && this.getDevInfo(), a && a.touches) ) { var b = this.mouseX, c = this.mouseY, e = a.touches.item(1); e && this.panEventsEnabled && this.boundingRect && ((a = e.clientX - this.boundingRect.left), (e = e.clientY - this.boundingRect.top), (this.middleXP = (b + (a - b) / 2) / this.realWidth), (this.middleYP = (c + (e - c) / 2) / this.realHeight), (this.initialDistance = Math.sqrt(Math.pow(a - b, 2) + Math.pow(e - c, 2)))); } }, stopDrag: function () { this.isDragging = !1; }, handleReleaseOutside: function () { if (d.isModern) { var a = this; d.AmMap.base.handleReleaseOutside.call(a); a.mouseIsDown = !1; setTimeout(function () { a.resetPinch.call(a); }, 100); if (!a.preventHover) { a.stopDrag(); var b = a.zoomControl; b && b.draggerUp && b.draggerUp(); a.mapWasDragged = !1; var b = a.mapContainer, c = a.mapContainerClickX, e = a.mapContainerClickY; isNaN(c) || isNaN(e) || !(3 < Math.abs(b.x - c) || 3 < Math.abs(b.y - e)) || ((a.mapWasDragged = !0), (b = { type: "dragCompleted", zoomX: a.zoomX(), zoomY: a.zoomY(), zoomLevel: a.zoomLevel(), chart: a }), a.fire(b)); ((a.mouseIsOver && !a.mapWasDragged && !a.skipClick) || (a.wasTouched && 3 > Math.abs(a.mouseX - a.tmx) && 3 > Math.abs(a.mouseY - a.tmy))) && a.fire({ type: "click", x: a.mouseX, y: a.mouseY, chart: a }); a.mapContainerClickX = NaN; a.mapContainerClickY = NaN; a.objectWasClicked = !1; a.zoomOnDoubleClick && a.mouseIsOver && ((b = new Date().getTime()), 200 > b - a.previousClickTime && 40 < b - a.previousClickTime && a.doDoubleClickZoom(), (a.previousClickTime = b)); } a.wasTouched = !1; } }, resetPinch: function () { this.mapWasPinched = !1; }, handleMouseMove: function (a) { var b = this; d.AmMap.base.handleMouseMove.call(b, a); if (!a || !a.touches || !b.tapToActivate || b.tapped) { b.panEventsEnabled && b.mouseIsOver && a && a.preventDefault && a.preventDefault(); var c = b.previuosMouseX, e = b.previuosMouseY, g = b.mouseX, f = b.mouseY, k = b.zoomControl; isNaN(c) && (c = g); isNaN(e) && (e = f); b.mouse2X = NaN; b.mouse2Y = NaN; a && a.touches && (a = a.touches.item(1)) && b.panEventsEnabled && b.boundingRect && ((b.mouse2X = a.clientX - b.boundingRect.left), (b.mouse2Y = a.clientY - b.boundingRect.top)); if ((a = b.mapContainer)) { var h = b.mouse2X, l = b.mouse2Y; b.pinchTO && clearTimeout(b.pinchTO); b.pinchTO = setTimeout(function () { b.resetPinch.call(b); }, 1e3); var m = b.realHeight, n = b.realWidth, p = b.mapWidth, r = b.mapHeight; b.mouseIsDown && b.dragMap && (3 < Math.abs(b.previuosMouseX - b.mouseX) || 3 < Math.abs(b.previuosMouseY - b.mouseY)) && (b.isDragging = !0); if (!isNaN(h)) { b.stopDrag(); var t = Math.sqrt(Math.pow(h - g, 2) + Math.pow(l - f, 2)), q = b.initialDistance; isNaN(q) && (q = Math.sqrt(Math.pow(h - g, 2) + Math.pow(l - f, 2))); if (!isNaN(q)) { var h = (b.initialTouchZoom * t) / q, h = d.fitToBounds(h, k.minZoomLevel, k.maxZoomLevel), k = b.zoomLevel(), q = b.middleXP, l = b.middleYP, t = m / r, y = n / p, q = (b.zoomX() - q * y) * (h / k) + q * y, l = (b.zoomY() - l * t) * (h / k) + l * t; 0.1 < Math.abs(h - k) && (b.zoomTo(h, q, l, !0), (b.mapWasPinched = !0), clearTimeout(b.pinchTO)); } } h = a.scale; b.isDragging && (b.balloon.hide(0), b.positionChanged(), (c = a.x + (g - c)), (e = a.y + (f - e)), b.preventDragOut && ((r = -r * h + m / 2 - b.diffY * b.mapScale * h), (m = m / 2 - b.diffY * b.mapScale * h), (c = d.fitToBounds(c, -p * h + n / 2, n / 2)), (e = d.fitToBounds(e, r, m))), isNaN(c) || isNaN(e) || (a.translate(c, e, h, !0), b.updateSmallMap())); b.previuosMouseX = g; b.previuosMouseY = f; } } }, selectObject: function (a, b) { var c = this; a || (a = c.dataProvider); a.isOver = !1; var e = a.linkToObject; d.isString(e) && (e = c.getObjectById(e)); a.useTargetsZoomValues && e && ((a.zoomX = e.zoomX), (a.zoomY = e.zoomY), (a.zoomLatitude = e.zoomLatitude), (a.zoomLongitude = e.zoomLongitude), (a.zoomLevel = e.zoomLevel)); var g = c.selectedObject; g && c.returnInitialColor(g); c.selectedObject = a; var f = !1, k, h; "MapArea" == a.objectType && (a.autoZoomReal && (f = !0), (k = c.areasSettings.selectedOutlineColor), (h = c.areasSettings.selectedOutlineThickness)); if (e && !f && (d.isString(e) && (e = c.getObjectById(e)), isNaN(a.zoomLevel) && isNaN(a.zoomX) && isNaN(a.zoomY))) { if (c.extendMapData(e)) return; c.selectObject(e); return; } c.allowMultipleDescriptionWindows || c.closeAllDescriptions(); clearTimeout(c.selectedObjectTimeOut); clearTimeout(c.processObjectsTimeOut); e = c.zoomDuration; !f && isNaN(a.zoomLevel) && isNaN(a.zoomX) && isNaN(a.zoomY) ? (c.showDescriptionAndGetUrl(), b || c.processObjects()) : ((c.selectedObjectTimeOut = setTimeout(function () { c.showDescriptionAndGetUrl.call(c); }, 1e3 * e + 200)), c.showObjectsAfterZoom) ? b || (c.processObjectsTimeOut = setTimeout(function () { c.processObjects.call(c); }, 1e3 * e + 200)) : b || c.processObjects(); e = a.displayObject; f = a.selectedColorReal; if ("MapImage" == a.objectType) { k = c.imagesSettings.selectedOutlineColor; h = c.imagesSettings.selectedOutlineThickness; var e = a.image, l = a.selectedScaleReal; if (!isNaN(l) && 1 != l) { var m = a.scale; isNaN(a.tempScale) || (m = a.tempScale); isNaN(m) && (m = 1); a.tempScale = m; var n = a.displayObject; n.translate(n.x, n.y, m * l, !0); } } if (e) { if ((d.removeCN(c, e, "selected-object"), d.setCN(c, e, "selected-object"), a.bringForwardOnHover && a.displayObject.toFront(), c.outlinesToFront(), !a.preserveOriginalAttributes)) { e.setAttr("stroke", a.outlineColorReal); void 0 !== f && e.setAttr("fill", f); void 0 !== k && e.setAttr("stroke", k); void 0 !== h && e.setAttr("stroke-width", h); "MapLine" == a.objectType && ((l = a.lineSvg) && l.setAttr("stroke", f), (l = a.arrowSvg)) && (l.setAttr("fill", f), l.setAttr("stroke", f)); if ((l = a.imageLabel)) (m = a.selectedLabelColorReal), void 0 !== m && l.setAttr("fill", m); a.selectable || (e.setAttr("cursor", "default"), l && l.setAttr("cursor", "default")); } } else c.returnInitialColorReal(a); if ((e = a.groupId)) for (l = a.groupArray, l || ((l = c.getGroupById(e)), (a.groupArray = l)), m = 0; m < l.length; m++) if (((n = l[m]), (n.isOver = !1), (e = n.displayObject), "MapImage" == n.objectType && (e = n.image), e)) { var p = n.selectedColorReal; void 0 !== p && e.setAttr("fill", p); void 0 !== k && e.setAttr("stroke", k); void 0 !== h && e.setAttr("stroke-width", h); "MapLine" == n.objectType && ((e = n.lineSvg) && e.setAttr("stroke", f), (e = n.arrowSvg)) && (e.setAttr("fill", f), e.setAttr("stroke", f)); } c.rescaleObjects(); c.zoomToSelectedObject(); g != a && c.fire({ type: "selectedObjectChanged", chart: c }); }, returnInitialColor: function (a, b) { this.returnInitialColorReal(a); b && (a.isFirst = !1); if (this.selectedObject.bringForwardOnHover) { var c = this.selectedObject.displayObject; c && c.toFront(); } if ((c = a.groupId)) { var c = this.getGroupById(c), d; for (d = 0; d < c.length; d++) this.returnInitialColorReal(c[d]), b && (c[d].isFirst = !1); } this.outlinesToFront(); }, outlinesToFront: function () { if (this.outlines) for (var a = 0; a < this.outlines.length; a++) this.outlines[a].toFront(); }, closeAllDescriptions: function () { this.descriptionsDiv.innerHTML = ""; }, fireClosed: function () { this.fire({ type: "descriptionClosed", chart: this }); }, returnInitialColorReal: function (a) { a.isOver = !1; var b = a.displayObject; if (b) { d.removeCN(this, b, "selected-object"); b.toPrevious(); if ("MapImage" == a.objectType) { var c = a.tempScale; isNaN(c) || b.translate(b.x, b.y, c, !0); a.tempScale = NaN; b = a.image; } c = a.colorReal; if ("MapLine" == a.objectType) { var e = a.lineSvg; e && e.setAttr("stroke", c); if ((e = a.arrowSvg)) { var g = a.arrowColor; void 0 === g && (g = c); e.setAttr("fill", g); e.setAttr("stroke", g); } } var e = a.alphaReal, g = a.outlineAlphaReal, f = a.outlineThicknessReal, k = a.outlineColorReal; if (a.showAsSelected) { var c = a.selectedColorReal, h, l; "MapImage" == a.objectType && ((h = this.imagesSettings.selectedOutlineColor), (l = this.imagesSettings.selectedOutlineThickness)); "MapArea" == a.objectType && ((h = this.areasSettings.selectedOutlineColor), (l = this.areasSettings.selectedOutlineThickness)); void 0 !== h && (k = h); void 0 !== l && (f = l); } "bubble" == a.type && (c = void 0); void 0 !== c && b.setAttr("fill", c); if ((h = a.image)) h.setAttr("fill", c), h.setAttr("stroke", k), h.setAttr("stroke-width", f), h.setAttr("fill-opacity", e), h.setAttr("stroke-opacity", g); "MapArea" == a.objectType && ((c = 1), this.areasSettings.adjustOutlineThickness && (c = this.zoomLevel() * this.mapScale), b.setAttr("stroke", k), b.setAttr("stroke-width", f / c), b.setAttr("fill-opacity", e), b.setAttr("stroke-opacity", g)); (c = a.pattern) && b.pattern(c, this.mapScale, this.path); (b = a.imageLabel) && !a.labelInactive && (a.showAsSelected && void 0 !== a.selectedLabelColor ? b.setAttr("fill", a.selectedLabelColor) : b.setAttr("fill", a.labelColorReal)); } }, zoomToRectangle: function (a, b, c, e) { var g = this.realWidth, f = this.realHeight, k = this.mapSet.scale, h = this.zoomControl, g = d.fitToBounds(c / g > e / f ? (0.8 * g) / (c * k) : (0.8 * f) / (e * k), h.minZoomLevel, h.maxZoomLevel); this.zoomToMapXY(g, (a + c / 2) * k, (b + e / 2) * k); }, zoomToLatLongRectangle: function (a, b, c, e) { var g = this.dataProvider, f = this.zoomControl, k = Math.abs(c - a), h = Math.abs(b - e), l = Math.abs(g.rightLongitude - g.leftLongitude), g = Math.abs(g.topLatitude - g.bottomLatitude), f = d.fitToBounds(k / l > h / g ? (0.8 * l) / k : (0.8 * g) / h, f.minZoomLevel, f.maxZoomLevel); this.zoomToLongLat(f, a + (c - a) / 2, e + (b - e) / 2); }, getGroupById: function (a) { var b = []; this.getGroup(this.imagesProcessor.allObjects, a, b); this.getGroup(this.linesProcessor.allObjects, a, b); this.getGroup(this.areasProcessor.allObjects, a, b); return b; }, zoomToGroup: function (a) { a = "object" == typeof a ? a : this.getGroupById(a); var b, c, d, g, f; for (f = 0; f < a.length; f++) { var k = a[f].displayObject; if (k) { var h = k.getBBox(), k = h.y, l = h.y + h.height, m = h.x, h = h.x + h.width; if (k < b || isNaN(b)) b = k; if (l > g || isNaN(g)) g = l; if (m < c || isNaN(c)) c = m; if (h > d || isNaN(d)) d = h; } } c += this.diffX; d += this.diffX; g += this.diffY; b += this.diffY; this.zoomToRectangle(c, b, d - c, g - b); }, getGroup: function (a, b, c) { if (a) { var d; for (d = 0; d < a.length; d++) { var g = a[d]; g.groupId == b && c.push(g); } } }, zoomToStageXY: function (a, b, c, e) { if (!this.objectWasClicked) { var g = this.zoomControl; a = d.fitToBounds(a, g.minZoomLevel, g.maxZoomLevel); var g = this.zoomLevel(), f = this.mapSet.getBBox(); b = this.xyToCoordinates((b - this.mapContainer.x) / g - f.x * this.mapScale, (c - this.mapContainer.y) / g - f.y * this.mapScale); this.zoomToLongLat(a, b.longitude, b.latitude, e); } }, zoomToLongLat: function (a, b, c, d) { b = this.coordinatesToXY(b, c); this.zoomToMapXY(a, b.x, b.y, d); }, zoomToMapXY: function (a, b, c, d) { var g = this.mapWidth, f = this.mapHeight; this.zoomTo(a, -(b / g) * a + this.realWidth / g / 2, -(c / f) * a + this.realHeight / f / 2, d); }, zoomToObject: function (a) { if (a) { var b = a.zoomLatitude, c = a.zoomLongitude; isNaN(a.zoomLatitudeC) || (b = a.zoomLatitudeC); isNaN(a.zoomLongitudeC) || (c = a.zoomLongitudeC); var e = a.zoomLevel, g = this.zoomInstantly, f = a.zoomX, k = a.zoomY, h = this.realWidth, l = this.realHeight; isNaN(e) || (isNaN(b) || isNaN(c) ? this.zoomTo(e, f, k, g) : this.zoomToLongLat(e, c, b, g)); this.zoomInstantly = !1; "MapImage" == a.objectType && isNaN(a.zoomX) && isNaN(a.zoomY) && isNaN(a.zoomLatitude) && isNaN(a.zoomLongitude) && !isNaN(a.latitude) && !isNaN(a.longitude) && this.zoomToLongLat(a.zoomLevel, a.longitude, a.latitude); "MapArea" == a.objectType && ((g = a.displayObject.getBBox()), (f = this.mapScale), (b = (g.x + this.diffX) * f), (c = (g.y + this.diffY) * f), (e = g.width * f), (g = g.height * f), (h = a.autoZoomReal && isNaN(a.zoomLevel) ? (e / h > g / l ? (0.8 * h) / e : (0.8 * l) / g) : a.zoomLevel), (l = this.zoomControl), (h = d.fitToBounds(h, l.minZoomLevel, l.maxZoomLevel)), isNaN(a.zoomX) && isNaN(a.zoomY) && isNaN(a.zoomLatitude) && isNaN(a.zoomLongitude) && this.zoomToMapXY(h, b + e / 2, c + g / 2)); this.zoomControl.update(); } }, zoomToSelectedObject: function () { this.zoomToObject(this.selectedObject); }, zoomTo: function (a, b, c, e) { var g = this.zoomControl; a = d.fitToBounds(a, g.minZoomLevel, g.maxZoomLevel); g = this.zoomLevel(); isNaN(b) && ((b = this.realWidth / this.mapWidth), (b = (this.zoomX() - 0.5 * b) * (a / g) + 0.5 * b)); isNaN(c) && ((c = this.realHeight / this.mapHeight), (c = (this.zoomY() - 0.5 * c) * (a / g) + 0.5 * c)); this.stopAnimation(); isNaN(a) || ((g = this.mapContainer), (this.initialX = g.x), (this.initialY = g.y), (this.initialScale = g.scale), (this.finalX = this.mapWidth * b), (this.finalY = this.mapHeight * c), (this.finalScale = a), this.finalX != this.initialX || this.finalY != this.initialY || this.finalScale != this.initialScale ? e ? ((this.tweenPercent = 1), this.rescaleMapAndObjects(), (this.wheelBusy = !1)) : this.animateMap() : (this.wheelBusy = !1)); }, loadXml: function (a) { var b; window.XMLHttpRequest && (b = new XMLHttpRequest()); b.overrideMimeType && b.overrideMimeType("text/xml"); b.open("GET", a, !1); b.send(); this.parseXMLObject(b.responseXML); this.svgData && this.buildEverything(); }, stopAnimation: function () { this.frame = this.totalFrames; }, processObjects: function (a) { var b = this.selectedObject; if (0 < b.images.length || 0 < b.areas.length || 0 < b.lines.length || b == this.dataProvider || a) { a = this.container; var c = this.stageImagesContainer; c && c.remove(); this.stageImagesContainer = c = a.set(); this.trendLinesSet.push(c); var d = this.stageLinesContainer; d && d.remove(); this.stageLinesContainer = d = a.set(); this.trendLinesSet.push(d); var g = this.mapImagesContainer; g && g.remove(); this.mapImagesContainer = g = a.set(); this.mapContainer.push(g); var f = this.mapLinesContainer; f && f.remove(); this.mapLinesContainer = f = a.set(); this.mapContainer.push(f); this.linesAboveImages ? (g.toFront(), c.toFront(), f.toFront(), d.toFront()) : (f.toFront(), d.toFront(), g.toFront(), c.toFront()); b && (this.imagesProcessor.reset(), this.linesProcessor.reset(), this.linesAboveImages ? (this.imagesProcessor.process(b), this.linesProcessor.process(b)) : (this.linesProcessor.process(b), this.imagesProcessor.process(b))); this.rescaleObjects(); } }, processAreas: function () { this.areasProcessor.process(this.dataProvider); }, buildSVGMap: function () { d.remove(this.mapSet); var a = this.svgData.g.path, b = this.container, c = b.set(); this.svgAreas = []; this.svgAreasById = {}; void 0 === a.length && (a = [a]); var e; for (e = 0; e < a.length; e++) { var g = a[e], f = g.d, k = g.title; g.titleTr && (k = g.titleTr); var h = b.path(f); h.id = g.id; if (this.areasSettings.preserveOriginalAttributes) { h.customAttr = {}; for (var l in g) "d" != l && "id" != l && "title" != l && (h.customAttr[l] = g[l]); } g.outline && (h.outline = !0); h.path = f; this.svgAreasById[g.id] = { area: h, title: k, className: g["class"] }; this.svgAreas.push(h); c.push(h); } this.mapSet = c; this.mapContainer.push(c); this.resizeMap(); }, centerAlign: function () {}, setProjection: function (a) { this.projection = a; this.chartCreated = !1; this.buildEverything(); }, addObjectEventListeners: function (a, b) { var c = this; a.mousedown(function (a) { c.mouseDownMapObject(b, a); }) .mouseup(function (a) { c.clickMapObject(b, a); }) .mouseover(function (a) { c.balloonX = NaN; c.rollOverMapObject(b, !0, a); }) .mouseout(function (a) { c.balloonX = NaN; c.rollOutMapObject(b, a); }) .touchend(function (a) { 4 > Math.abs(c.mouseX - c.tmx) && 4 > Math.abs(c.mouseY - c.tmy) && (c.tapped = !0); (c.tapToActivate && !c.tapped) || c.mapWasDragged || c.mapWasPinched || ((c.balloonX = NaN), c.rollOverMapObject(b, !0, a), c.clickMapObject(b, a)); }) .touchstart(function (a) { c.tmx = c.mouseX; c.tmy = c.mouseY; c.mouseDownMapObject(b, a); }) .keyup(function (a) { 13 == a.keyCode && c.clickMapObject(b, a); }) .focus(function (a) { var d, f; "MapImage" != b.objectType || isNaN(b.longitude) || ((d = b.longitude), (f = b.latitude)); "MapArea" == b.objectType && ((d = c.getAreaCenterLongitude(b)), (f = c.getAreaCenterLatitude(b))); d = c.coordinatesToStageXY(d, f); c.balloonX = d.x; c.balloonY = d.y; c.rollOverMapObject(b, !0, a); c.focusedItem = b; }) .blur(function (a) { c.rollOutMapObject(b, a); c.focusedItem = void 0; }); }, checkIfSelected: function (a) { var b = this.selectedObject; if (b == a) return !0; if ((b = b.groupId)) { var b = this.getGroupById(b), c; for (c = 0; c < b.length; c++) if (b[c] == a) return !0; } return !1; }, clearMap: function () { this.chartDiv.innerHTML = ""; this.clearObjectList(); }, clearObjectList: function () { var a = this.objectList; a && a.div && (a.div.innerHTML = ""); }, checkIfLast: function (a) { if (a) { var b = a.parentNode; if (b && b.lastChild == a) return !0; } return !1; }, showAsRolledOver: function (a) { var b = a.displayObject; if (!a.showAsSelected && b && !a.isOver) { b.node.onmouseout = function () {}; b.node.onmouseover = function () {}; b.node.onclick = function () {}; !a.isFirst && a.bringForwardOnHover && (b.toFront(), (a.isFirst = !0)); var c = a.rollOverColorReal, e; a.preserveOriginalAttributes && (c = void 0); "bubble" == a.type && (c = void 0); void 0 == c && (isNaN(a.rollOverBrightnessReal) || (c = d.adjustLuminosity(a.colorReal, a.rollOverBrightnessReal / 100))); if (void 0 != c) if ("MapImage" == a.objectType) (e = a.image) && e.setAttr("fill", c); else if ("MapLine" == a.objectType) { if (((e = a.lineSvg) && e.setAttr("stroke", c), (e = a.arrowSvg))) e.setAttr("fill", c), e.setAttr("stroke", c); } else b.setAttr("fill", c); (c = a.imageLabel) && !a.labelInactive && ((e = a.labelRollOverColorReal), void 0 != e && c.setAttr("fill", e)); c = a.rollOverOutlineColorReal; void 0 != c && ("MapImage" == a.objectType ? (e = a.image) && e.setAttr("stroke", c) : b.setAttr("stroke", c)); "MapImage" == a.objectType ? ((c = this.imagesSettings.rollOverOutlineThickness), (e = a.image) && (isNaN(c) || e.setAttr("stroke-width", c))) : ((c = this.areasSettings.rollOverOutlineThickness), isNaN(c) || b.setAttr("stroke-width", c)); if ("MapArea" == a.objectType) { c = this.areasSettings; e = a.rollOverAlphaReal; isNaN(e) || b.setAttr("fill-opacity", e); e = c.rollOverOutlineAlpha; isNaN(e) || b.setAttr("stroke-opacity", e); e = 1; this.areasSettings.adjustOutlineThickness && (e = this.zoomLevel() * this.mapScale); var g = c.rollOverOutlineThickness; isNaN(g) || b.setAttr("stroke-width", g / e); (c = c.rollOverPattern) && b.pattern(c, this.mapScale, this.path); } "MapImage" == a.objectType && ((c = a.rollOverScaleReal), isNaN(c) || 1 == c || ((e = b.scale), isNaN(e) && (e = 1), (a.tempScale = e), b.translate(b.x, b.y, e * c, !0))); this.useHandCursorOnClickableOjects && this.checkIfClickable(a) && b.setAttr("cursor", "pointer3"); a.mouseEnabled && this.addObjectEventListeners(b, a); a.isOver = !0; } this.outlinesToFront(); }, rollOverMapObject: function (a, b, c) { if (this.chartCreated) { this.handleMouseMove(); var d = this.previouslyHovered; d && d != a ? (!1 === this.checkIfSelected(d) && (this.returnInitialColor(d, !0), (this.previouslyHovered = null)), this.balloon.hide(0)) : clearTimeout(this.hoverInt); if (!this.preventHover) { if (!1 === this.checkIfSelected(a)) { if ((d = a.groupId)) { var d = this.getGroupById(d), g; for (g = 0; g < d.length; g++) d[g] != a && this.showAsRolledOver(d[g]); } this.showAsRolledOver(a); } else (d = a.displayObject) && (this.allowClickOnSelectedObject ? d.setAttr("cursor", "pointer") : d.setAttr("cursor", "default")); this.showDescriptionOnHover ? this.showDescription(a) : (!this.showBalloonOnSelectedObject && this.checkIfSelected(a)) || !1 === b || ((g = this.balloon), (this.balloon.fixedPosition = !1), (b = a.colorReal), (d = ""), (void 0 !== b && this.useObjectColorForBalloon) || (b = g.fillColor), (g = a.balloonTextReal) && (d = this.formatString(g, a)), this.balloonLabelFunction && (d = this.balloonLabelFunction(a, this)), d && "" !== d && this.showBalloon(d, b, !1, this.balloonX, this.balloonY)); c = { type: "rollOverMapObject", mapObject: a, chart: this, event: c }; a.isOver = !0; this.fire(c); this.previouslyHovered = a; } } }, longitudeToX: function (a) { return (this.longitudeToCoordinate(a) + this.diffX * this.mapScale) * this.zoomLevel() + this.mapContainer.x; }, latitudeToY: function (a) { return (this.latitudeToCoordinate(a) + this.diffY * this.mapScale) * this.zoomLevel() + this.mapContainer.y; }, latitudeToStageY: function (a) { return this.latitudeToCoordinate(a) * this.zoomLevel() + this.mapContainer.y + this.diffY * this.mapScale; }, longitudeToStageX: function (a) { return this.longitudeToCoordinate(a) * this.zoomLevel() + this.mapContainer.x + this.diffX * this.mapScale; }, stageXToLongitude: function (a) { a = (a - this.mapContainer.x) / this.zoomLevel(); return this.coordinateToLongitude(a); }, stageYToLatitude: function (a) { a = (a - this.mapContainer.y) / this.zoomLevel(); return this.coordinateToLatitude(a); }, rollOutMapObject: function (a, b) { this.hideBalloon(); if (a && this.chartCreated && a.isOver) { this.checkIfSelected(a) || this.returnInitialColor(a); var c = { type: "rollOutMapObject", mapObject: a, chart: this, event: b }; a.isOver = !1; this.fire(c); } }, formatString: function (a, b) { var c = this.nf, e = this.pf, g = b.title; b.titleTr && (g = b.titleTr); void 0 == g && (g = ""); var f = b.value, f = isNaN(f) ? "" : d.formatNumber(f, c), c = b.percents, c = isNaN(c) ? "" : d.formatNumber(c, e), e = b.description; void 0 == e && (e = ""); var k = b.customData; void 0 == k && (k = ""); return (a = d.massReplace(a, { "[[title]]": g, "[[value]]": f, "[[percent]]": c, "[[description]]": e, "[[customData]]": k })); }, mouseDownMapObject: function (a, b) { this.fire({ type: "mouseDownMapObject", mapObject: a, chart: this, event: b }); }, clickMapObject: function (a, b) { var c = this; b && (b.touches || (isNaN(a.zoomLevel) && isNaN(a.zoomX) && isNaN(a.zoomY)) || c.hideBalloon()); if (c.chartCreated && !c.preventHover && c.checkTouchDuration(b) && !c.mapWasDragged && c.checkIfClickable(a) && !c.mapWasPinched) { c.selectObject(a); var d = c.zoomLevel(), g = c.mapSet.getBBox(), d = c.xyToCoordinates((c.mouseX - c.mapContainer.x) / d - g.x * c.mapScale, (c.mouseY - c.mapContainer.y) / d - g.y * c.mapScale); c.clickLatitude = d.latitude; c.clickLongitude = d.longitude; b && b.touches && setTimeout(function () { c.showBalloonAfterZoom.call(c); }, 1e3 * c.zoomDuration); c.fire({ type: "clickMapObject", mapObject: a, chart: c, event: b }); c.objectWasClicked = !0; } }, showBalloonAfterZoom: function () { var a = this.clickLongitude, b = this.clickLatitude, c = this.selectedObject; "MapImage" != c.objectType || isNaN(c.longitude) || ((a = c.longitude), (b = c.latitude)); a = this.coordinatesToStageXY(a, b); this.balloonX = a.x; this.balloonY = a.y; this.rollOverMapObject(this.selectedObject, !0); }, checkIfClickable: function (a) { var b = this.allowClickOnSelectedObject; return this.selectedObject == a && b ? !0 : this.selectedObject != a || b ? !0 === a.selectable || ("MapArea" == a.objectType && a.autoZoomReal) || a.url || a.linkToObject || 0 < a.images.length || 0 < a.lines.length || !isNaN(a.zoomLevel) || !isNaN(a.zoomX) || !isNaN(a.zoomY) || a.description ? !0 : !1 : !1; }, resizeMap: function () { var a = this.mapSet; if (a) { var b = 1, c = a.getBBox(), d = this.realWidth, g = this.realHeight, f = c.width, c = c.height; 0 < f && 0 < c && (this.fitMapToContainer && (b = f / d > c / g ? d / f : g / c), a.translate(0, 0, b, !0), (this.mapScale = b), (this.mapHeight = c * b), (this.mapWidth = f * b)); } }, zoomIn: function () { var a = this.zoomLevel() * this.zoomControl.zoomFactor; this.zoomTo(a); }, zoomOut: function () { var a = this.zoomLevel() / this.zoomControl.zoomFactor; this.zoomTo(a); }, moveLeft: function () { var a = this.zoomX() + this.zoomControl.panStepSize; this.zoomTo(this.zoomLevel(), a, this.zoomY()); }, moveRight: function () { var a = this.zoomX() - this.zoomControl.panStepSize; this.zoomTo(this.zoomLevel(), a, this.zoomY()); }, moveUp: function () { var a = this.zoomY() + this.zoomControl.panStepSize; this.zoomTo(this.zoomLevel(), this.zoomX(), a); }, moveDown: function () { var a = this.zoomY() - this.zoomControl.panStepSize; this.zoomTo(this.zoomLevel(), this.zoomX(), a); }, zoomX: function () { return this.mapSet ? Math.round((1e4 * this.mapContainer.x) / this.mapWidth) / 1e4 : NaN; }, zoomY: function () { return this.mapSet ? Math.round((1e4 * this.mapContainer.y) / this.mapHeight) / 1e4 : NaN; }, goHome: function () { this.selectObject(this.dataProvider); this.fire({ type: "homeButtonClicked", chart: this }); }, zoomLevel: function () { return Math.round(1e5 * this.mapContainer.scale) / 1e5; }, showDescriptionAndGetUrl: function () { var a = this.selectedObject; if (a) { this.showDescription(); var b = a.url; if (b) d.getURL(b, a.urlTarget); else if ((b = a.linkToObject)) { if (d.isString(b)) { var c = this.getObjectById(b); if (c) { this.selectObject(c); return; } } b && a.passZoomValuesToTarget && ((b.zoomLatitude = this.zoomLatitude()), (b.zoomLongitude = this.zoomLongitude()), (b.zoomLevel = this.zoomLevel())); this.extendMapData(b) || this.selectObject(b); } } }, extendMapData: function (a) { var b = a.objectType; if ("MapImage" != b && "MapArea" != b && "MapLine" != b) return d.extend(a, new d.MapData(), !0), (this.dataProvider = a), (this.zoomInstantly = !0), this.validateData(), !0; }, showDescription: function (a) { a || (a = this.selectedObject); this.allowMultipleDescriptionWindows || this.closeAllDescriptions(); if (a.description) { var b = a.descriptionWindow; b && b.close(); b = new d.DescriptionWindow(); a.descriptionWindow = b; var c = a.descriptionWindowWidth, e = a.descriptionWindowHeight, g = a.descriptionWindowLeft, f = a.descriptionWindowTop, k = a.descriptionWindowRight, h = a.descriptionWindowBottom; isNaN(k) || (g = this.realWidth - k); isNaN(h) || (f = this.realHeight - h); var l = a.descriptionWindowX; isNaN(l) || (g = l); l = a.descriptionWindowY; isNaN(l) || (f = l); isNaN(g) && ((g = this.mouseX), (g = g > this.realWidth / 2 ? g - c - 20 : g + 20)); isNaN(f) && (f = this.mouseY); b.maxHeight = e; l = a.title; a.titleTr && (l = a.titleTr); b.show(this, this.descriptionsDiv, a.description, l); a = b.div.style; a.position = "absolute"; a.width = c + "px"; a.maxHeight = e + "px"; isNaN(h) || (f -= b.div.offsetHeight); isNaN(k) || (g -= b.div.offsetWidth); a.left = g + "px"; a.top = f + "px"; } }, parseXMLObject: function (a) { var b = { root: {} }; this.parseXMLNode(b, "root", a); this.svgData = b.root.svg; this.getBounds(); }, getBounds: function () { var a = this.dataProvider; try { var b = this.svgData.defs["amcharts:ammap"]; a.leftLongitude = Number(b.leftLongitude); a.rightLongitude = Number(b.rightLongitude); a.topLatitude = Number(b.topLatitude); a.bottomLatitude = Number(b.bottomLatitude); a.projection = b.projection; var c = b.wrappedLongitudes; c && (a.rightLongitude += 360); a.wrappedLongitudes = c; } catch (d) {} }, recalcLongitude: function (a) { return this.dataProvider.wrappedLongitudes ? (a < this.dataProvider.leftLongitude ? Number(a) + 360 : a) : a; }, latitudeToCoordinate: function (a) { var b, c = this.dataProvider; if (this.mapSet) { b = c.topLatitude; var d = c.bottomLatitude; "mercator" == c.projection && ((a = this.mercatorLatitudeToCoordinate(a)), (b = this.mercatorLatitudeToCoordinate(b)), (d = this.mercatorLatitudeToCoordinate(d))); b = ((a - b) / (d - b)) * this.mapHeight; } return b; }, longitudeToCoordinate: function (a) { a = this.recalcLongitude(a); var b, c = this.dataProvider; this.mapSet && ((b = c.leftLongitude), (b = ((a - b) / (c.rightLongitude - b)) * this.mapWidth)); return b; }, mercatorLatitudeToCoordinate: function (a) { 89.5 < a && (a = 89.5); -89.5 > a && (a = -89.5); a = d.degreesToRadians(a); return d.radiansToDegrees((0.5 * Math.log((1 + Math.sin(a)) / (1 - Math.sin(a)))) / 2); }, zoomLatitude: function () { if (this.mapContainer) { var a = this.mapSet.getBBox(), b = (-this.mapContainer.x + this.previousWidth / 2) / this.zoomLevel() - a.x * this.mapScale, a = (-this.mapContainer.y + this.previousHeight / 2) / this.zoomLevel() - a.y * this.mapScale; return this.xyToCoordinates(b, a).latitude; } }, zoomLongitude: function () { if (this.mapContainer) { var a = this.mapSet.getBBox(), b = (-this.mapContainer.x + this.previousWidth / 2) / this.zoomLevel() - a.x * this.mapScale, a = (-this.mapContainer.y + this.previousHeight / 2) / this.zoomLevel() - a.y * this.mapScale; return this.xyToCoordinates(b, a).longitude; } }, getAreaCenterLatitude: function (a) { a = a.displayObject.getBBox(); var b = this.mapScale, c = this.mapSet.getBBox(); return this.xyToCoordinates((a.x + a.width / 2 + this.diffX) * b - c.x * b, (a.y + a.height / 2 + this.diffY) * b - c.y * b).latitude; }, getAreaCenterLongitude: function (a) { a = a.displayObject.getBBox(); var b = this.mapScale, c = this.mapSet.getBBox(); return this.xyToCoordinates((a.x + a.width / 2 + this.diffX) * b - c.x * b, (a.y + a.height / 2 + this.diffY) * b - c.y * b).longitude; }, milesToPixels: function (a) { var b = this.dataProvider; return ((this.mapWidth / (b.rightLongitude - b.leftLongitude)) * a) / 69.172; }, kilometersToPixels: function (a) { var b = this.dataProvider; return ((this.mapWidth / (b.rightLongitude - b.leftLongitude)) * a) / 111.325; }, handleBackgroundClick: function () { if (this.backgroundZoomsToTop && !this.mapWasDragged) { var a = this.dataProvider; if (this.checkIfClickable(a)) this.clickMapObject(a); else { var b = a.zoomX, c = a.zoomY, d = a.zoomLongitude, g = a.zoomLatitude, a = a.zoomLevel; isNaN(b) || isNaN(c) || this.zoomTo(a, b, c); isNaN(d) || isNaN(g) || this.zoomToLongLat(a, d, g, !0); } } }, parseXMLNode: function (a, b, c, d) { void 0 === d && (d = ""); var g, f, k; if (c) { var h = c.childNodes.length; for (g = 0; g < h; g++) { f = c.childNodes[g]; var l = f.nodeName, m = f.nodeValue ? this.trim(f.nodeValue) : "", n = !1; f.attributes && 0 < f.attributes.length && (n = !0); if (0 !== f.childNodes.length || "" !== m || !1 !== n) if (3 == f.nodeType || 4 == f.nodeType) { if ("" !== m) { f = 0; for (k in a[b]) a[b].hasOwnProperty(k) && f++; f ? (a[b]["#text"] = m) : (a[b] = m); } } else if (1 == f.nodeType) { var p; void 0 !== a[b][l] ? void 0 === a[b][l].length ? ((p = a[b][l]), (a[b][l] = []), a[b][l].push(p), a[b][l].push({}), (p = a[b][l][1])) : "object" == typeof a[b][l] && (a[b][l].push({}), (p = a[b][l][a[b][l].length - 1])) : ((a[b][l] = {}), (p = a[b][l])); if (f.attributes && f.attributes.length) for (m = 0; m < f.attributes.length; m++) p[f.attributes[m].name] = f.attributes[m].value; void 0 !== a[b][l].length ? this.parseXMLNode(a[b][l], a[b][l].length - 1, f, d + " ") : this.parseXMLNode(a[b], l, f, d + " "); } } f = 0; c = ""; for (k in a[b]) "#text" == k ? (c = a[b][k]) : f++; 0 === f && void 0 === a[b].length && (a[b] = c); } }, // doDoubleClickZoom: function () { // if (!this.mapWasDragged) { // var a = this.zoomLevel() * this.zoomControl.zoomFactor; // this.zoomToStageXY(a, this.mouseX, this.mouseY); // } // }, getDevInfo: function () { var a = this.zoomLevel(), b = this.mapSet.getBBox(), b = this.xyToCoordinates((this.mouseX - this.mapContainer.x) / a - b.x * this.mapScale, (this.mouseY - this.mapContainer.y) / a - b.y * this.mapScale), a = { chart: this, type: "writeDevInfo", zoomLevel: a, zoomX: this.zoomX(), zoomY: this.zoomY(), zoomLatitude: this.zoomLatitude(), zoomLongitude: this.zoomLongitude(), latitude: b.latitude, longitude: b.longitude, left: this.mouseX, top: this.mouseY, right: this.realWidth - this.mouseX, bottom: this.realHeight - this.mouseY, percentLeft: Math.round((this.mouseX / this.realWidth) * 100) + "%", percentTop: Math.round((this.mouseY / this.realHeight) * 100) + "%", percentRight: Math.round(((this.realWidth - this.mouseX) / this.realWidth) * 100) + "%", percentBottom: Math.round(((this.realHeight - this.mouseY) / this.realHeight) * 100) + "%", }, b = "zoomLevel:" + a.zoomLevel + ", zoomLongitude:" + a.zoomLongitude + ", zoomLatitude:" + a.zoomLatitude + "\n", b = b + ("zoomX:" + a.zoomX + ", zoomY:" + a.zoomY + "\n"), b = b + ("latitude:" + a.latitude + ", longitude:" + a.longitude + "\n"), b = b + ("left:" + a.left + ", top:" + a.top + "\n"), b = b + ("right:" + a.right + ", bottom:" + a.bottom + "\n"), b = b + ("left:" + a.percentLeft + ", top:" + a.percentTop + "\n"), b = b + ("right:" + a.percentRight + ", bottom:" + a.percentBottom + "\n"); a.str = b; this.fire(a); return a; }, getXY: function (a, b, c) { void 0 !== a && (-1 != String(a).indexOf("%") ? ((a = Number(a.split("%").join(""))), c && (a = 100 - a), (a = (Number(a) * b) / 100)) : c && (a = b - a)); return a; }, getObjectById: function (a) { var b = this.dataProvider; if (b.areas) { var c = this.getObject(a, b.areas); if (c) return c; } if ((c = this.getObject(a, b.images))) return c; if ((a = this.getObject(a, b.lines))) return a; }, getObject: function (a, b) { if (b) { var c; for (c = 0; c < b.length; c++) { var d = b[c]; if (d.id == a) return d; if (d.areas) { var g = this.getObject(a, d.areas); if (g) return g; } if ((g = this.getObject(a, d.images))) return g; if ((d = this.getObject(a, d.lines))) return d; } } }, parseData: function () { var a = this.dataProvider; this.processObject(a.areas, a, "area"); this.processObject(a.images, a, "image"); this.processObject(a.lines, a, "line"); }, processObject: function (a, b, c) { if (a) { var e; for (e = 0; e < a.length; e++) { var g = a[e]; g.parentObject = b; "area" == c && d.extend(g, new d.MapArea(this.theme), !0); "image" == c && (g = d.extend(g, new d.MapImage(this.theme), !0)); "line" == c && (g = d.extend(g, new d.MapLine(this.theme), !0)); a[e] = g; g.areas && this.processObject(g.areas, g, "area"); g.images && this.processObject(g.images, g, "image"); g.lines && this.processObject(g.lines, g, "line"); } } }, positionChanged: function () { var a = { type: "positionChanged", zoomX: this.zoomX(), zoomY: this.zoomY(), zoomLevel: this.zoomLevel(), chart: this }; this.fire(a); }, getX: function (a, b) { return this.getXY(a, this.realWidth, b); }, getY: function (a, b) { return this.getXY(a, this.realHeight, b); }, trim: function (a) { if (a) { var b; for (b = 0; b < a.length; b++) if (-1 === " \n\r\t\f\x0B\u00a0\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u2028\u2029\u3000".indexOf(a.charAt(b))) { a = a.substring(b); break; } for (b = a.length - 1; 0 <= b; b--) if (-1 === " \n\r\t\f\x0B\u00a0\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u2028\u2029\u3000".indexOf(a.charAt(b))) { a = a.substring(0, b + 1); break; } return -1 === " \n\r\t\f\x0B\u00a0\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u2028\u2029\u3000".indexOf(a.charAt(0)) ? a : ""; } }, destroy: function () { d.AmMap.base.destroy.call(this); }, x2c: function (a) { var b = this.dataProvider.leftLongitude; return Math.round(((this.unscaledMapWidth * (a - b)) / (this.dataProvider.rightLongitude - b)) * 100) / 100; }, y2c: function (a) { var b = this.dataProvider.topLatitude; return Math.round(((this.unscaledMapHeight * (a - b)) / (this.dataProvider.bottomLatitude - b)) * 100) / 100; }, normalize: function (a) { if (!a.pathsArray) { var b; if (a.normalized) b = a.normalized; else { var c = d.normalizePath(a.node); b = a.node.getAttribute("d"); a.normalized = b; c.maxX > this.maxMapX && (this.maxMapX = c.maxX); c.minX < this.minMapX && (this.minMapX = c.minX); c.maxY > this.maxMapY && (this.maxMapY = c.maxY); c.minY < this.minMapY && (this.minMapY = c.minY); } a.node.setAttribute("d", b); } }, redraw: function (a) { var b = a.normalized, b = b.split(" Z").join(""), b = b.split("M"); a.pathsArray = []; for (var c = 0; c < b.length; c++) { var d = b[c]; if (d) { for (var d = d.split("L"), g = [], f = 0; f < d.length; f++) if (d[f]) { var k = d[f].split(" "), k = this.xyToCoordinates(Number(k[1]) - this.minMapX, Number(k[2]) - this.minMapY, this.dpProjectionFunction, this.sourceMapWidth, this.sourceMapHeight); g.push([k.longitude, k.latitude]); } a.pathsArray.push(g); } } b = ""; for (c = 0; c < a.pathsArray.length; c++) b += this.redrawArea(a.pathsArray[c]); a.node.setAttribute("d", b); a.path = b; }, redrawArea: function (a) { for (var b = !1, c = "", e = 0; e < a.length; e++) { var g = a[e][0], f = a[e][1], k = d.degreesToRadians(a[e][0]), h = d.degreesToRadians(a[e][1]), h = this.projectionFunction(k, h), k = d.roundTo(this.x2c(d.radiansToDegrees(h[0])), 3), h = d.roundTo(this.y2c(d.radiansToDegrees(h[1])), 3); k < this.minMapXX && ((this.minMapXX = k), (this.leftLongLat = { longitude: g, latitude: f })); k > this.maxMapXX && ((this.maxMapXX = k), (this.rightLongLat = { longitude: g, latitude: f })); h < this.minMapYY && ((this.minMapYY = h), (this.topLongLat = { longitude: g, latitude: f })); h > this.maxMapYY && ((this.maxMapYY = h), (this.bottomLongLat = { longitude: g, latitude: f })); b ? (c += " L ") : ((c += " M "), (b = !0)); c += k + " " + h; } return c + " Z "; }, normalizeMap: function () { var a = d.degreesToRadians(this.dataProvider.leftLongitude), b = d.degreesToRadians(this.dataProvider.rightLongitude), c = d.degreesToRadians(this.dataProvider.topLatitude), e = d.degreesToRadians(this.dataProvider.bottomLatitude), g = a + (b - a) / 2, f = c + (e - c) / 2, k = this.dpProjectionFunction(g, c)[1], h = this.dpProjectionFunction(g, e)[1], l = this.dpProjectionFunction(a, f)[0], m = this.dpProjectionFunction(b, f)[0], c = d.equirectangular(g, c), e = d.equirectangular(g, e), k = (c[1] - e[1]) / (k - h), a = d.equirectangular(a, f), b = d.equirectangular(b, f), l = (a[0] - b[0]) / (l - m); this.minMapX = Infinity; this.maxMapX = -Infinity; this.minMapY = Infinity; this.maxMapY = -Infinity; for (m = 0; m < this.svgAreas.length; m++) this.normalize(this.svgAreas[m]); this.sourceMapHeight = Math.abs(this.maxMapY - this.minMapY); this.sourceMapWidth = Math.abs(this.maxMapX - this.minMapX); this.unscaledMapWidth = this.sourceMapWidth * l; this.unscaledMapHeight = this.sourceMapHeight * k; this.diffY = this.diffX = 0; }, fixMapPosition: function () { var a = d.degreesToRadians(this.dataProvider.leftLongitude), b = d.degreesToRadians(this.dataProvider.rightLongitude), c = d.degreesToRadians(this.dataProvider.topLatitude), e = d.degreesToRadians(this.dataProvider.bottomLatitude), g = a + (b - a) / 2, f = c + (e - c) / 2, k = this.dpProjectionFunction(g, c)[1], h = this.dpProjectionFunction(g, e)[1], l = this.dpProjectionFunction(a, f)[0], m = this.dpProjectionFunction(b, f)[0]; this.sourceMapHeight = this.mapHeight / this.mapScale; this.sourceMapWidth = this.mapWidth / this.mapScale; this.unscaledMapWidth = ((a - b) / (l - m)) * this.sourceMapWidth; this.unscaledMapHeight = ((c - e) / (k - h)) * this.sourceMapHeight; b = this.coordinatesToXY(d.radiansToDegrees(g), d.radiansToDegrees(c)); a = this.coordinatesToXY(d.radiansToDegrees(a), d.radiansToDegrees(f)); c = f = Infinity; for (e = 0; e < this.svgAreas.length; e++) (g = this.svgAreas[e].getBBox()), g.y < f && (f = g.y), g.x < c && (c = g.x); this.diffY = b.y / this.mapScale - f; this.diffX = a.x / this.mapScale - c; for (e = 0; e < this.svgAreas.length; e++) this.svgAreas[e].translate(this.diffX, this.diffY); }, changeProjection: function () { this.minMapXX = Infinity; this.maxMapXX = -Infinity; this.minMapYY = Infinity; this.maxMapYY = -Infinity; this.projectionChanged = !1; for (var a = 0; a < this.svgAreas.length; a++) this.redraw(this.svgAreas[a]); this.projectionChanged = !0; this.resizeMap(); }, coordinatesToXY: function (a, b) { var c, e; c = !1; this.dataProvider && (c = this.dataProvider.wrappedLongitudes) && (a = this.recalcLongitude(a)); this.projectionFunction ? ((e = this.projectionFunction(d.degreesToRadians(a), d.degreesToRadians(b))), (c = this.mapScale * d.roundTo(this.x2c(d.radiansToDegrees(e[0])), 3)), (e = this.mapScale * d.roundTo(this.y2c(d.radiansToDegrees(e[1])), 3))) : ((c = this.longitudeToCoordinate(a)), (e = this.latitudeToCoordinate(b))); return { x: c, y: e }; }, coordinatesToStageXY: function (a, b) { var c = this.coordinatesToXY(a, b), d = c.x * this.zoomLevel() + this.mapContainer.x, c = c.y * this.zoomLevel() + this.mapContainer.y; return { x: d, y: c }; }, stageXYToCoordinates: function (a, b) { var c = this.mapSet.getBBox(), d = (a - this.mapContainer.x) / this.zoomLevel() - c.x * this.mapScale, c = (b - this.mapContainer.y) / this.zoomLevel() - c.y * this.mapScale; return this.xyToCoordinates(d, c); }, xyToCoordinates: function (a, b, c, e, g) { var f; isNaN(e) && (e = this.mapWidth); isNaN(g) && (g = this.mapHeight); c || (c = this.projectionFunction); if ((f = c.invert)) { var k = this.dataProvider.leftLongitude, h = this.dataProvider.rightLongitude, l = this.dataProvider.topLatitude, m = this.dataProvider.bottomLatitude, n = k + (h - k) / 2, p = l + (m - l) / 2, l = d.radiansToDegrees(c(d.degreesToRadians(n), d.degreesToRadians(l))[1]), m = d.radiansToDegrees(c(d.degreesToRadians(n), d.degreesToRadians(m))[1]), k = d.radiansToDegrees(c(d.degreesToRadians(k), d.degreesToRadians(p))[0]), h = d.radiansToDegrees(c(d.degreesToRadians(h), d.degreesToRadians(p))[0]); this.projectionChanged && ((l = d.radiansToDegrees(c(d.degreesToRadians(this.topLongLat.longitude), d.degreesToRadians(this.topLongLat.latitude))[1])), (m = d.radiansToDegrees(c(d.degreesToRadians(this.bottomLongLat.longitude), d.degreesToRadians(this.bottomLongLat.latitude))[1])), (k = d.radiansToDegrees(c(d.degreesToRadians(this.leftLongLat.longitude), d.degreesToRadians(this.leftLongLat.latitude))[0])), (h = d.radiansToDegrees(c(d.degreesToRadians(this.rightLongLat.longitude), d.degreesToRadians(this.rightLongLat.latitude))[0]))); a = d.degreesToRadians((a / e) * (h - k) + k); b = d.degreesToRadians((b / g) * (m - l) + l); b = f(a, b); f = d.radiansToDegrees(b[0]); b = d.radiansToDegrees(b[1]); } else (f = this.coordinateToLongitude(a)), (b = this.coordinateToLatitude(b)); return { longitude: d.roundTo(f, 4), latitude: d.roundTo(b, 4) }; }, coordinateToLatitude: function (a, b) { var c; void 0 === b && (b = this.mapHeight); if (this.mapSet) { var e = this.dataProvider, g = e.bottomLatitude; c = e.topLatitude; "mercator" == e.projection ? ((e = this.mercatorLatitudeToCoordinate(g)), (c = this.mercatorLatitudeToCoordinate(c)), (c = 2 * d.degreesToRadians((a * (e - c)) / b + c)), (c = d.radiansToDegrees(2 * Math.atan(Math.exp(c)) - 0.5 * Math.PI))) : (c = (a / b) * (g - c) + c); } return Math.round(1e6 * c) / 1e6; }, handleKeyUp: function (a) { 13 == a.keyCode && this.focusedItem && this.selectObject(this.focusedItem); }, coordinateToLongitude: function (a, b) { var c, d = this.dataProvider; void 0 === b && (b = this.mapWidth); this.mapSet && (c = (a / b) * (d.rightLongitude - d.leftLongitude) + d.leftLongitude); return Math.round(1e6 * c) / 1e6; }, }); })(); (function () { var d = window.AmCharts; d.ZoomControl = d.Class({ construct: function (a) { this.cname = "ZoomControl"; this.panStepSize = 0.1; this.zoomFactor = 2; this.maxZoomLevel = 64; this.minZoomLevel = 1; this.panControlEnabled = !1; this.zoomControlEnabled = !0; this.buttonRollOverColor = "#DADADA"; this.buttonFillColor = "#FFFFFF"; this.buttonFillAlpha = 1; this.buttonBorderColor = "#000000"; this.buttonBorderAlpha = 0.1; this.buttonIconAlpha = this.buttonBorderThickness = 1; this.gridColor = this.buttonIconColor = "#000000"; this.homeIconFile = "homeIcon.gif"; this.gridBackgroundColor = "#000000"; this.draggerAlpha = this.gridAlpha = this.gridBackgroundAlpha = 0; this.draggerSize = this.buttonSize = 31; this.iconSize = 11; this.homeButtonEnabled = !0; this.buttonCornerRadius = 2; this.gridHeight = 5; this.roundButtons = !0; this.top = this.left = 10; d.applyTheme(this, a, this.cname); }, init: function (a, b) { var c = this; c.chart = a; d.remove(c.set); var e = b.set(); d.setCN(a, e, "zoom-control"); var g = c.buttonSize, f = c.zoomControlEnabled, k = c.panControlEnabled, h = c.buttonFillColor, l = c.buttonFillAlpha, m = c.buttonBorderThickness, n = c.buttonBorderColor, p = c.buttonBorderAlpha, r = c.buttonCornerRadius, t = c.buttonRollOverColor, q = c.gridHeight, y = c.zoomFactor, B = c.minZoomLevel, u = c.maxZoomLevel, v = c.buttonIconAlpha, w = c.buttonIconColor, A = c.roundButtons, C = a.svgIcons, x = a.getX(c.left), z = a.getY(c.top); isNaN(c.right) || ((x = a.getX(c.right, !0)), (x = k ? x - 3 * g : x - g)); isNaN(c.bottom) || ((z = a.getY(c.bottom, !0)), f && (z -= q + 3 * g), (z = k ? z - 3 * g : c.homeButtonEnabled ? z - 0.5 * g : z + g)); e.translate(x, z); c.previousDY = NaN; var E, x = g / 4 - 1; if (f) { E = b.set(); d.setCN(a, E, "zoom-control-zoom"); e.push(E); c.set = e; c.zoomSet = E; 5 < q && ((f = d.rect(b, g + 6, q + 2 * g + 6, c.gridBackgroundColor, c.gridBackgroundAlpha, 0, "#000000", 0, 4)), d.setCN(a, f, "zoom-bg"), f.translate(-3, -3), f .mouseup(function () { c.handleBgUp(); }) .touchend(function () { c.handleBgUp(); }), E.push(f)); var F = g; A && (F = g / 1.5); c.draggerSize = F; var H = Math.log(u / B) / Math.log(y) + 1; 1e3 < H && (H = 1e3); var f = q / H, G, D = b.set(); D.translate((g - F) / 2 + 1, 1, NaN, !0); E.push(D); for (G = 1; G < H; G++) (z = g + G * f), (z = d.line(b, [1, F - 2], [z, z], c.gridColor, c.gridAlpha, 1)), d.setCN(a, z, "zoom-grid"), D.push(z); z = new d.SimpleButton(); z.setDownHandler(c.draggerDown, c); z.setClickHandler(c.draggerUp, c); z.init(b, F, f, h, l, m, n, p, r, t); d.setCN(a, z.set, "zoom-dragger"); E.push(z.set); z.set.setAttr("opacity", c.draggerAlpha); c.dragger = z.set; c.previousY = NaN; z = new d.SimpleButton(); C ? ((F = b.set()), (H = d.line(b, [-x, x], [0, 0], w, v, 1)), (G = d.line(b, [0, 0], [-x, x], w, v, 1)), F.push(H), F.push(G), (z.svgIcon = F)) : z.setIcon(a.pathToImages + "plus.gif", c.iconSize); z.setClickHandler(a.zoomIn, a); z.init(b, g, g, h, l, m, n, p, r, t, v, w, A); d.setCN(a, z.set, "zoom-in"); E.push(z.set); z = new d.SimpleButton(); C ? (z.svgIcon = d.line(b, [-x, x], [0, 0], w, v, 1)) : z.setIcon(a.pathToImages + "minus.gif", c.iconSize); z.setClickHandler(a.zoomOut, a); z.init(b, g, g, h, l, m, n, p, r, t, v, w, A); z.set.translate(0, q + g); d.setCN(a, z.set, "zoom-out"); E.push(z.set); q -= f; u = Math.log(u / 100) / Math.log(y); c.realStepSize = q / (u - Math.log(B / 100) / Math.log(y)); c.realGridHeight = q; c.stepMax = u; } k && ((k = b.set()), d.setCN(a, k, "zoom-control-pan"), e.push(k), E && E.translate(g, 4 * g), (y = new d.SimpleButton()), C ? (y.svgIcon = d.line(b, [x / 5, -x + x / 5, x / 5], [-x, 0, x], w, v, 1)) : y.setIcon(a.pathToImages + "panLeft.gif", c.iconSize), y.setClickHandler(a.moveLeft, a), y.init(b, g, g, h, l, m, n, p, r, t, v, w, A), y.set.translate(0, g), d.setCN(a, y.set, "pan-left"), k.push(y.set), (y = new d.SimpleButton()), C ? (y.svgIcon = d.line(b, [-x / 5, x - x / 5, -x / 5], [-x, 0, x], w, v, 1)) : y.setIcon(a.pathToImages + "panRight.gif", c.iconSize), y.setClickHandler(a.moveRight, a), y.init(b, g, g, h, l, m, n, p, r, t, v, w, A), y.set.translate(2 * g, g), d.setCN(a, y.set, "pan-right"), k.push(y.set), (y = new d.SimpleButton()), C ? (y.svgIcon = d.line(b, [-x, 0, x], [x / 5, -x + x / 5, x / 5], w, v, 1)) : y.setIcon(a.pathToImages + "panUp.gif", c.iconSize), y.setClickHandler(a.moveUp, a), y.init(b, g, g, h, l, m, n, p, r, t, v, w, A), y.set.translate(g, 0), d.setCN(a, y.set, "pan-up"), k.push(y.set), (y = new d.SimpleButton()), C ? (y.svgIcon = d.line(b, [-x, 0, x], [-x / 5, x - x / 5, -x / 5], w, v, 1)) : y.setIcon(a.pathToImages + "panDown.gif", c.iconSize), y.setClickHandler(a.moveDown, a), y.init(b, g, g, h, l, m, n, p, r, t, v, w, A), y.set.translate(g, 2 * g), d.setCN(a, y.set, "pan-down"), k.push(y.set), e.push(k)); c.homeButtonEnabled && ((k = new d.SimpleButton()), C ? (k.svgIcon = d.polygon(b, [-x, 0, x, x - 1, x - 1, 2, 2, -2, -2, -x + 1, -x + 1], [0, -x, 0, 0, x - 1, x - 1, 2, 2, x - 1, x - 1, 0], w, v, 1, w, v)) : k.setIcon(a.pathToImages + c.homeIconFile, c.iconSize), k.setClickHandler(a.goHome, a), c.panControlEnabled && (p = l = 0), k.init(b, g, g, h, l, m, n, p, r, t, v, w, A), c.panControlEnabled ? k.set.translate(g, g) : E && E.translate(0, 1.5 * g), d.setCN(a, k.set, "pan-home"), e.push(k.set)); c.update(); }, draggerDown: function () { this.chart.stopDrag(); this.isDragging = !0; }, draggerUp: function () { this.isDragging = !1; }, handleBgUp: function () { var a = this.chart; a.zoomTo(100 * Math.pow(this.zoomFactor, this.stepMax - (a.mouseY - this.zoomSet.y - this.set.y - this.buttonSize - this.realStepSize / 2) / this.realStepSize)); }, update: function () { var a; a = this.zoomFactor; var b = this.realStepSize, c = this.stepMax, e = this.dragger, g = this.buttonSize, f, k = this.chart; k && (this.isDragging ? (k.stopDrag(), (f = e.y + (k.mouseY - this.previousY)), (f = d.fitToBounds(f, g, this.realGridHeight + g)), k.zoomTo(100 * Math.pow(a, c - (f - g) / b), NaN, NaN, !0)) : ((a = Math.log(k.zoomLevel() / 100) / Math.log(a)), (f = (c - a) * b + g)), (this.previousY = k.mouseY), this.previousDY != f && e && (e.translate((this.buttonSize - this.draggerSize) / 2, f), (this.previousDY = f))); }, }); })(); (function () { var d = window.AmCharts; d.SimpleButton = d.Class({ construct: function () {}, init: function (a, b, c, e, g, f, k, h, l, m, n, p, r) { var t = this; t.rollOverColor = m; t.color = e; t.container = a; m = a.set(); t.set = m; r ? ((b /= 2), (e = d.circle(a, b, e, g, f, k, h)), e.translate(b, b)) : (e = d.rect(a, b, c, e, g, f, k, h, l)); m.push(e); g = t.iconPath; var q; g && ((q = t.iconSize), (f = (b - q) / 2), r && (f = (2 * b - q) / 2), (q = a.image(g, f, (c - q) / 2, q, q))); t.svgIcon && ((q = t.svgIcon), r ? q.translate(b, b) : q.translate(b / 2, b / 2)); m.setAttr("cursor", "pointer"); m.setAttr("display", "none"); q && (m.push(q), q.setAttr("opacity", n), (q.node.style.pointerEvents = "none")); e.mousedown(function () { t.handleDown(); }) .touchstart(function () { t.handleDown(); }) .mouseup(function () { t.handleUp(); }) .touchend(function () { t.handleUp(); }) .mouseover(function () { t.handleOver(); }) .mouseout(function () { t.handleOut(); }); t.bg = e; }, setIcon: function (a, b) { this.iconPath = a; this.iconSize = b; }, setClickHandler: function (a, b) { this.clickHandler = a; this.scope = b; }, setDownHandler: function (a, b) { this.downHandler = a; this.scope = b; }, handleUp: function () { var a = this.clickHandler; a && a.call(this.scope); }, handleDown: function () { var a = this.downHandler; a && a.call(this.scope); }, handleOver: function () { this.container.chart.skipClick = !0; this.bg.setAttr("fill", this.rollOverColor); }, handleOut: function () { this.container.chart.skipClick = !1; this.bg.setAttr("fill", this.color); }, }); })(); (function () { var d = window.AmCharts; d.SmallMap = d.Class({ construct: function (a) { this.cname = "SmallMap"; this.mapColor = "#e6e6e6"; this.rectangleColor = "#FFFFFF"; this.top = this.right = 10; this.minimizeButtonWidth = 23; this.backgroundColor = "#9A9A9A"; this.backgroundAlpha = 1; this.borderColor = "#FFFFFF"; this.iconColor = "#000000"; this.borderThickness = 3; this.borderAlpha = 1; this.size = 0.2; this.enabled = !0; d.applyTheme(this, a, this.cname); }, init: function (a, b) { var c = this; if (c.enabled) { c.chart = a; c.container = b; c.width = a.realWidth * c.size; c.height = a.realHeight * c.size; d.remove(c.mapSet); d.remove(c.allSet); d.remove(c.set); var e = b.set(); c.set = e; d.setCN(a, e, "small-map"); var g = b.set(); c.allSet = g; e.push(g); c.buildSVGMap(); var f = c.borderThickness, k = c.borderColor, h = d.rect(b, c.width + f, c.height + f, c.backgroundColor, c.backgroundAlpha, f, k, c.borderAlpha); d.setCN(a, h, "small-map-bg"); h.translate(-f / 2, -f / 2); g.push(h); h.toBack(); var l, m, h = c.minimizeButtonWidth, n = new d.SimpleButton(), p = h / 2; a.svgIcons ? (n.svgIcon = d.line(b, [-p / 2, 0, p / 2], [-p / 4, p / 4, -p / 4], c.iconColor, 1, 1)) : n.setIcon(a.pathToImages + "arrowDown.gif", h); n.setClickHandler(c.minimize, c); n.init(b, h, h, k, 1, 1, k, 1); d.setCN(a, n.set, "small-map-down"); n = n.set; c.downButtonSet = n; e.push(n); var r = new d.SimpleButton(); a.svgIcons ? (r.svgIcon = d.line(b, [-p / 2, 0, p / 2], [p / 4, -p / 4, p / 4], c.iconColor, 1, 1)) : r.setIcon(a.pathToImages + "arrowUp.gif", h); r.setClickHandler(c.maximize, c); r.init(b, h, h, k, 1, 1, k, 1); d.setCN(a, r.set, "small-map-up"); k = r.set; c.upButtonSet = k; k.hide(); e.push(k); var t, q; isNaN(c.top) || ((l = a.getY(c.top) + f), (q = 0)); isNaN(c.bottom) || ((l = a.getY(c.bottom, !0) - c.height - f), (q = c.height - h + f / 2)); isNaN(c.left) || ((m = a.getX(c.left) + f), (t = -f / 2)); isNaN(c.right) || ((m = a.getX(c.right, !0) - c.width - f), (t = c.width - h + f / 2)); f = b.set(); f.clipRect(1, 1, c.width, c.height); g.push(f); c.rectangleC = f; e.translate(m, l); n.translate(t, q); k.translate(t, q); g.mouseup(function () { c.handleMouseUp(); }); c.drawRectangle(); } else d.remove(c.allSet), d.remove(c.downButtonSet), d.remove(c.upButtonSet); }, minimize: function () { this.downButtonSet.hide(); this.upButtonSet.show(); this.allSet.hide(); }, maximize: function () { this.downButtonSet.show(); this.upButtonSet.hide(); this.allSet.show(); }, buildSVGMap: function () { var a = this.chart, b = { fill: this.mapColor, stroke: this.mapColor, "stroke-opacity": 1 }, c = this.container, e = c.set(); d.setCN(a, e, "small-map-image"); var g; for (g = 0; g < a.svgAreas.length; g++) { var f = c.path(a.svgAreas[g].path).attr(b); e.push(f); } this.allSet.push(e); b = e.getBBox(); c = this.size * a.mapScale; g = -b.x * c; var f = -b.y * c, k = 0, h = 0; a.centerMap && ((k = (this.width - b.width * c) / 2), (h = (this.height - b.height * c) / 2)); this.mapWidth = b.width * c; this.mapHeight = b.height * c; g += k; f += h; this.dx = k; this.dy = h; e.translate(g, f, c); this.mapSet = e; this.mapX = g; this.mapY = f; }, update: function () { var a = this.chart; if (a) { var b = a.zoomLevel(), c = this.width, d = this.height, g = c / (a.realWidth * b), f = a.mapContainer.getBBox(), c = c / b, d = d / b, k = this.rectangle; k.translate(-(a.mapContainer.x + f.x * b) * g + this.dx, -(a.mapContainer.y + f.y * b) * g + this.dy); 0 < c && 0 < d && (k.setAttr("width", Math.ceil(c + 1)), k.setAttr("height", Math.ceil(d + 1))); this.rWidth = c; this.rHeight = d; } }, drawRectangle: function () { var a = this.rectangle; d.remove(a); a = d.rect(this.container, 10, 10, "#000", 0, 1, this.rectangleColor, 1); d.setCN(this.chart, a, "small-map-rectangle"); this.rectangleC.push(a); this.rectangle = a; }, handleMouseUp: function () { var a = this.chart, b = a.zoomLevel(); a.zoomToMapXY(b, (a.mouseX - this.set.x - this.mapX) / this.size + a.diffX * a.mapScale, (a.mouseY - this.set.y - this.mapY) / this.size + a.diffY * a.mapScale); }, }); })(); (function () { var d = window.AmCharts; d.AreasProcessor = d.Class({ construct: function (a) { this.chart = a; }, process: function (a) { this.updateAllAreas(); this.allObjects = []; a = a.areas; var b = this.chart; b.outlines = []; var c = a.length, d, g, f = 0, k = !1, h = !1, l = 0; for (d = 0; d < c; d++) if (((g = a[d]), (g.value = Number(g.value)), (g = g.value), !isNaN(g))) { if (!1 === k || k < g) k = g; if (!1 === h || h > g) h = g; f += Math.abs(g); l++; } this.minValue = h; this.maxValue = k; isNaN(b.minValue) || (this.minValue = b.minValue); isNaN(b.maxValue) || (this.maxValue = b.maxValue); b.maxValueReal = k; b.minValueReal = h; for (d = 0; d < c; d++) (g = a[d]), isNaN(g.value) ? (g.percents = void 0) : ((g.percents = ((g.value - h) / f) * 100), h == k && (g.percents = 100)); for (d = 0; d < c; d++) (g = a[d]), this.createArea(g); b.outlinesToFront(); }, updateAllAreas: function () { var a = this.chart, b = a.areasSettings, c = b.unlistedAreasColor, e = b.unlistedAreasAlpha, g = b.unlistedAreasOutlineColor, f = b.unlistedAreasOutlineAlpha, k = a.svgAreas, h = a.dataProvider, l = h.areas, m = {}, n; for (n = 0; n < l.length; n++) m[l[n].id] = l[n]; for (n = 0; n < k.length; n++) { l = k[n]; if (b.preserveOriginalAttributes) { if (l.customAttr) for (var p in l.customAttr) l.setAttr(p, l.customAttr[p]); } else { void 0 != c && l.setAttr("fill", c); isNaN(e) || l.setAttr("fill-opacity", e); void 0 != g && l.setAttr("stroke", g); isNaN(f) || l.setAttr("stroke-opacity", f); var r = b.outlineThickness; b.adjustOutlineThickness && (r = r / a.zoomLevel() / a.mapScale); l.setAttr("stroke-width", r); } d.setCN(a, l, "map-area-unlisted"); h.getAreasFromMap && !m[l.id] && ((r = new d.MapArea(a.theme)), (r.parentObject = h), (r.id = l.id), (r.outline = l.outline), h.areas.push(r)); } }, createArea: function (a) { var b = this.chart, c = b.svgAreasById[a.id], e = b.areasSettings; if (c && c.className) { var g = b.areasClasses[c.className]; g && (e = d.processObject(g, d.AreasSettings, b.theme)); } var f = e.color, k = e.alpha, h = e.outlineThickness, l = e.rollOverColor, m = e.selectedColor, n = e.rollOverAlpha, p = e.rollOverBrightness, r = e.outlineColor, t = e.outlineAlpha, q = e.balloonText, y = e.selectable, B = e.pattern, u = e.rollOverOutlineColor, v = e.bringForwardOnHover, w = e.preserveOriginalAttributes; this.allObjects.push(a); a.chart = b; a.baseSettings = e; a.autoZoomReal = void 0 == a.autoZoom ? e.autoZoom : a.autoZoom; g = a.color; void 0 == g && (g = f); var A = a.alpha; isNaN(A) && (A = k); k = a.rollOverAlpha; isNaN(k) && (k = n); isNaN(k) && (k = A); n = a.rollOverColor; void 0 == n && (n = l); l = a.pattern; void 0 == l && (l = B); B = a.selectedColor; void 0 == B && (B = m); m = a.balloonText; void 0 === m && (m = q); void 0 == e.colorSolid || isNaN(a.value) || ((q = Math.floor((a.value - this.minValue) / ((this.maxValue - this.minValue) / b.colorSteps))), q == b.colorSteps && q--, (q *= 1 / (b.colorSteps - 1)), this.maxValue == this.minValue && (q = 1), (a.colorReal = d.getColorFade(g, e.colorSolid, q))); void 0 != a.color && (a.colorReal = a.color); void 0 == a.selectable && (a.selectable = y); void 0 == a.colorReal && (a.colorReal = f); f = a.outlineColor; void 0 == f && (f = r); r = a.outlineAlpha; isNaN(r) && (r = t); t = a.outlineThickness; isNaN(t) && (t = h); h = a.rollOverOutlineColor; void 0 == h && (h = u); u = a.rollOverBrightness; void 0 == u && (u = p); void 0 == a.bringForwardOnHover && (a.bringForwardOnHover = v); void 0 == a.preserveOriginalAttributes && (a.preserveOriginalAttributes = w); isNaN(e.selectedBrightness) || (B = d.adjustLuminosity(a.colorReal, e.selectedBrightness / 100)); a.alphaReal = A; a.rollOverColorReal = n; a.rollOverAlphaReal = k; a.balloonTextReal = m; a.selectedColorReal = B; a.outlineColorReal = f; a.outlineAlphaReal = r; a.rollOverOutlineColorReal = h; a.outlineThicknessReal = t; a.patternReal = l; a.rollOverBrightnessReal = u; a.accessibleLabel || (a.accessibleLabel = e.accessibleLabel); d.processDescriptionWindow(e, a); if (c && ((p = c.area), (v = c.title), (a.enTitle = c.title), v && !a.title && (a.title = v), (c = b.language) ? (v = d.mapTranslations) && (c = v[c]) && c[a.enTitle] && (a.titleTr = c[a.enTitle]) : (a.titleTr = void 0), p)) { c = a.tabIndex; void 0 === c && (c = e.tabIndex); void 0 !== c && p.setAttr("tabindex", c); a.displayObject = p; a.outline && ((A = 0), (a.alphaReal = 0), (a.rollOverAlphaReal = 0), (a.mouseEnabled = !1), b.outlines.push(p), p.node.setAttribute("pointer-events", "none")); a.mouseEnabled && b.addObjectEventListeners(p, a); var C; void 0 != g && (C = g); void 0 != a.colorReal && (C = a.showAsSelected || b.selectedObject == a ? a.selectedColorReal : a.colorReal); p.node.setAttribute("class", ""); d.setCN(b, p, "map-area"); d.setCN(b, p, "map-area-" + p.id); e.adjustOutlineThickness && (t = t / b.zoomLevel() / b.mapScale); a.preserveOriginalAttributes || (p.setAttr("fill", C), p.setAttr("stroke", f), p.setAttr("stroke-opacity", r), p.setAttr("stroke-width", t), p.setAttr("fill-opacity", A),p.setAttr("class", "map-fill")); b.makeObjectAccessible(a); l && p.pattern(l, b.mapScale, b.path); a.hidden && p.hide(); } }, }); })(); (function () { var d = window.AmCharts; d.AreasSettings = d.Class({ construct: function (a) { this.cname = "AreasSettings"; this.alpha = 1; this.autoZoom = !1; this.balloonText = "[[title]]"; this.color = "#FFCC00"; this.colorSolid = "#990000"; this.unlistedAreasAlpha = 1; this.unlistedAreasColor = "#DDDDDD"; this.outlineColor = "#FFFFFF"; this.outlineThickness = this.outlineAlpha = 0.5; this.selectedColor = this.rollOverOutlineColor = "#CC0000"; this.unlistedAreasOutlineColor = "#FFFFFF"; this.unlistedAreasOutlineAlpha = 1; this.descriptionWindowWidth = 250; this.bringForwardOnHover = this.adjustOutlineThickness = !0; this.accessibleLabel = "[[title]] [[value]] [[description]]"; d.applyTheme(this, a, this.cname); }, }); })(); (function () { var d = window.AmCharts; d.ImagesProcessor = d.Class({ construct: function (a) { this.chart = a; this.reset(); }, process: function (a) { var b = a.images, c; for (c = b.length - 1; 0 <= c; c--) { var d = b[c]; this.createImage(d, c); d.parentArray = b; } this.counter = c; a.parentObject && a.remainVisible && this.process(a.parentObject); }, createImage: function (a, b) { a = d.processObject(a, d.MapImage); a.arrays = []; isNaN(b) && (this.counter++, (b = this.counter)); var c = this.chart, e = c.container, g = c.mapImagesContainer, f = c.stageImagesContainer, k = c.imagesSettings; a.remove && a.remove(); var h = k.color, l = k.alpha, m = k.rollOverColor, n = k.rollOverOutlineColor, p = k.selectedColor, r = k.balloonText, t = k.outlineColor, q = k.outlineAlpha, y = k.outlineThickness, B = k.selectedScale, u = k.rollOverScale, v = k.selectable, w = k.labelPosition, A = k.labelColor, C = k.labelFontSize, x = k.bringForwardOnHover, z = k.labelRollOverColor, E = k.rollOverBrightness, F = k.selectedLabelColor; a.index = b; a.chart = c; a.baseSettings = c.imagesSettings; var H = e.set(); a.displayObject = H; var G = a.color; void 0 == G && (G = h); h = a.alpha; isNaN(h) && (h = l); void 0 == a.bringForwardOnHover && (a.bringForwardOnHover = x); l = a.outlineAlpha; isNaN(l) && (l = q); q = a.rollOverColor; void 0 == q && (q = m); m = a.selectedColor; void 0 == m && (m = p); p = a.balloonText; void 0 === p && (p = r); r = a.outlineColor; void 0 == r && (r = t); a.outlineColorReal = r; t = a.outlineThickness; isNaN(t) && (t = y); (y = a.labelPosition) || (y = w); w = a.labelColor; void 0 == w && (w = A); A = a.labelRollOverColor; void 0 == A && (A = z); z = a.selectedLabelColor; void 0 == z && (z = F); F = a.labelFontSize; isNaN(F) && (F = C); C = a.selectedScale; isNaN(C) && (C = B); B = a.rollOverScale; isNaN(B) && (B = u); u = a.rollOverBrightness; void 0 == u && (u = E); void 0 == a.selectable && (a.selectable = v); a.colorReal = G; isNaN(k.selectedBrightness) || (m = d.adjustLuminosity(a.colorReal, k.selectedBrightness / 100)); a.alphaReal = h; a.rollOverColorReal = q; a.balloonTextReal = p; a.selectedColorReal = m; a.labelColorReal = w; a.labelRollOverColorReal = A; a.selectedLabelColorReal = z; a.labelFontSizeReal = F; a.labelPositionReal = y; a.selectedScaleReal = C; a.rollOverScaleReal = B; a.rollOverOutlineColorReal = n; a.rollOverBrightnessReal = u; a.accessibleLabel || (a.accessibleLabel = k.accessibleLabel); d.processDescriptionWindow(k, a); a.centeredReal = void 0 == a.centered ? k.centered : a.centered; n = a.type; u = a.imageURL; B = a.svgPath; C = a.width; F = a.height; v = a.scale; isNaN(a.percentWidth) || (C = (a.percentWidth / 100) * c.realWidth); isNaN(a.percentHeight) || (F = (a.percentHeight / 100) * c.realHeight); var D; u || n || B || ((n = "circle"), (C = 1), (l = h = 0)); q = E = 0; k = a.selectedColorReal; if (n) { isNaN(C) && (C = 10); isNaN(F) && (F = 10); "kilometers" == a.widthAndHeightUnits && ((C = c.kilometersToPixels(a.width)), (F = c.kilometersToPixels(a.height))); "miles" == a.widthAndHeightUnits && ((C = c.milesToPixels(a.width)), (F = c.milesToPixels(a.height))); if ("circle" == n || "bubble" == n) F = C; D = this.createPredefinedImage(G, r, t, n, C, F); q = E = 0; a.centeredReal ? (isNaN(a.right) || (E = C * v), isNaN(a.bottom) || (q = F * v)) : ((E = (C * v) / 2), (q = (F * v) / 2)); D.translate(E, q, v, !0); } else u ? (isNaN(C) && (C = 10), isNaN(F) && (F = 10), (D = e.image(u, 0, 0, C, F)), D.node.setAttribute("preserveAspectRatio", "none"), D.setAttr("opacity", h), a.centeredReal && ((E = isNaN(a.right) ? -C / 2 : C / 2), (q = isNaN(a.bottom) ? -F / 2 : F / 2), D.translate(E, q, NaN, !0))) : B && ((D = e.path(B)), (u = D.getBBox()), a.centeredReal ? ((E = -u.x * v - (u.width * v) / 2), isNaN(a.right) || (E = -E), (q = -u.y * v - (u.height * v) / 2), isNaN(a.bottom) || (q = -q)) : (E = q = 0), D.translate(E, q, v, !0), (D.x = E), (D.y = q)); D && (H.push(D), (a.image = D), D.setAttr("stroke-opacity", l), D.setAttr("stroke-width", t), D.setAttr("stroke", r), D.setAttr("fill-opacity", h), "bubble" != n && D.setAttr("fill", G), d.setCN(c, D, "map-image"), void 0 != a.id && d.setCN(c, D, "map-image-" + a.id)); G = a.labelColorReal; (!a.showAsSelected && c.selectedObject != a) || void 0 == k || (D && D.setAttr("fill", k), (G = a.selectedLabelColorReal)); D = null; void 0 !== a.label && ((D = d.text(e, a.label, G, c.fontFamily, a.labelFontSizeReal, a.labelAlign)), d.setCN(c, D, "map-image-label"), void 0 !== a.id && d.setCN(c, D, "map-image-label-" + a.id), (G = a.labelBackgroundAlpha), (h = a.labelBackgroundColor) && 0 < G && ((l = D.getBBox()), (e = d.rect(e, l.width + 16, l.height + 10, h, G)), d.setCN(c, e, "map-image-label-background"), void 0 != a.id && d.setCN(c, e, "map-image-label-background-" + a.id), H.push(e), (a.labelBG = e)), (a.imageLabel = D), H.push(D), d.setCN(c, H, "map-image-container"), void 0 != a.id && d.setCN(c, H, "map-image-container-" + a.id), this.labelsToReposition.push(a), a.arrays.push({ arr: this.labelsToReposition, el: a })); e = isNaN(a.latitude) || isNaN(a.longitude) ? !0 : !1; a.lineId && (D = this.chart.getObjectById(a.lineId)) && 0 < D.longitudes.length && (e = !1); e ? f.push(H) : g.push(H); H.toBack(); H && ((H.rotation = a.rotation), isNaN(a.rotation) || H.rotate(a.rotation), a.arrays.push({ arr: this.allSvgObjects, el: H }), this.allSvgObjects.push(H)); this.allObjects.push(a); c.makeObjectAccessible(a); g = a.tabIndex; void 0 === g && (g = c.imagesSettings.tabIndex); void 0 !== g && H.setAttr("tabindex", g); a.arrays.push({ arr: this.allObjects, el: a }); isNaN(a.longitude) || isNaN(a.latitude) || !a.fixedSize || ((a.objToResize = { image: H, mapImage: a, scale: 1 }), this.objectsToResize.push(a.objToResize), a.arrays.push({ arr: this.objectsToResize, el: a.objToResize })); this.updateSizeAndPosition(a); a.mouseEnabled && c.addObjectEventListeners(H, a); a.hidden && H.hide(); d.removeFromArray(c.updatableImages, a); a.animateAlongLine && (c.updatableImages.push(a), a.delayAnimateAlong()); return a; }, updateSizeAndPosition: function (a) { var b = this.chart, c = a.displayObject, e = b.getX(a.left), g = b.getY(a.top), f, k = a.image.getBBox(); isNaN(a.right) || (e = b.getX(a.right, !0) - k.width * a.scale); isNaN(a.bottom) || (g = b.getY(a.bottom, !0) - k.height * a.scale); var h = a.longitude, l = a.latitude, m = a.positionOnLine, k = a.imageLabel, n = this.chart.zoomLevel(), p, r; a.lineId && (a.line = this.chart.getObjectById(a.lineId)); if (a.line && a.line.getCoordinates) { a.line.chart = b; var t = a.line.getCoordinates(m, a.lineSegment); t && ((h = b.coordinateToLongitude(t.x)), (l = b.coordinateToLatitude(t.y)), (p = t.x), (r = t.y), a.animateAngle && (f = d.radiansToDegrees(t.angle))); } isNaN(f) || c.rotate(f + a.extraAngle); if (!isNaN(e) && !isNaN(g)) c.translate(e, g, NaN, !0); else if (!isNaN(l) && !isNaN(h)) if (((g = b.coordinatesToXY(h, l)), (e = g.x), (g = g.y), isNaN(p) || (e = p), isNaN(r) || (g = r), a.fixedSize)) { p = a.positionScale; isNaN(p) ? (p = 0) : (--p, (p *= 1 - 2 * Math.abs(m - 0.5))); if ((m = a.objectToResize)) m.scale = 1 + p; c.translate(e, g, 1 / n + p, !0); } else c.translate(e, g, NaN, !0); this.positionLabel(k, a, a.labelPositionReal); }, positionLabel: function (a, b, c) { if (a) { var d = b.image, g = 0, f = 0, k = 0, h = 0; d && ((h = d.getBBox()), (f = d.y + h.y), (g = d.x + h.x), (k = h.width), (h = h.height), b.svgPath && ((k *= b.scale), (h *= b.scale))); var d = a.getBBox(), l = d.width, m = d.height; "right" == c && ((g += k + l / 2 + 5), (f += h / 2 - 2)); "left" == c && ((g += -l / 2 - 5), (f += h / 2 - 2)); "top" == c && ((f -= m / 2 + 3), (g += k / 2)); "bottom" == c && ((f += h + m / 2), (g += k / 2)); "middle" == c && ((g += k / 2), (f += h / 2)); a.translate(g + b.labelShiftX, f + b.labelShiftY, NaN, !0); a = b.labelFontSizeReal; b.labelBG && b.labelBG.translate(g - d.width / 2 + b.labelShiftX - 9, f - a / 2 + b.labelShiftY - 4, NaN, !0); } }, createPredefinedImage: function (a, b, c, e, g, f) { var k = this.chart.container, h; switch (e) { case "circle": h = d.circle(k, g / 2, a, 1, c, b, 1); break; case "rectangle": h = d.polygon(k, [-g / 2, g / 2, g / 2, -g / 2], [f / 2, f / 2, -f / 2, -f / 2], a, 1, c, b, 1, 0, !0); break; case "bubble": h = d.circle(k, g / 2, a, 1, c, b, 1, !0); break; case "hexagon": (g /= Math.sqrt(3)), (h = d.polygon(k, [0.866 * g, 0 * g, -0.866 * g, -0.866 * g, 0 * g, 0.866 * g], [0.5 * g, 1 * g, 0.5 * g, -0.5 * g, -1 * g, -0.5 * g], a, 1, c, b, 1)); } return h; }, reset: function () { this.objectsToResize = []; this.allSvgObjects = []; this.allObjects = []; this.allLabels = []; this.labelsToReposition = []; }, }); })(); (function () { var d = window.AmCharts; d.ImagesSettings = d.Class({ construct: function (a) { this.cname = "ImagesSettings"; this.balloonText = "[[title]]"; this.alpha = 1; this.borderAlpha = 0; this.borderThickness = 1; this.labelPosition = "right"; this.labelColor = "#000000"; this.labelFontSize = 11; this.color = "#000000"; this.labelRollOverColor = "#00CC00"; this.centered = !0; this.rollOverScale = this.selectedScale = 1; this.descriptionWindowWidth = 250; this.bringForwardOnHover = !0; this.outlineColor = "transparent"; this.adjustAnimationSpeed = !1; this.baseAnimationDistance = 500; this.pauseDuration = 0; this.easingFunction = d.easeInOutQuad; this.animationDuration = 3; this.positionScale = 1; this.accessibleLabel = "[[title]] [[description]]"; d.applyTheme(this, a, this.cname); }, }); })(); (function () { var d = window.AmCharts; d.LinesProcessor = d.Class({ construct: function (a) { this.chart = a; this.reset(); }, process: function (a) { var b = a.lines, c; for (c = 0; c < b.length; c++) { var d = b[c]; this.createLine(d, c); d.parentArray = b; } this.counter = c; a.parentObject && a.remainVisible && this.process(a.parentObject); }, createLine: function (a, b) { a = d.processObject(a, d.MapLine); isNaN(b) && (this.counter++, (b = this.counter)); a.index = b; a.remove && a.remove(); var c = this.chart, e = c.linesSettings, g = this.objectsToResize, f = c.mapLinesContainer, k = c.stageLinesContainer, h = e.thickness, l = e.dashLength, m = e.arrow, n = e.arrowSize, p = e.arrowColor, r = e.arrowAlpha, t = e.color, q = e.alpha, y = e.rollOverColor, B = e.selectedColor, u = e.rollOverAlpha, v = e.balloonText, w = e.bringForwardOnHover, A = e.arc, C = e.rollOverBrightness, x = c.container; a.chart = c; a.baseSettings = e; var z = x.set(); a.displayObject = z; var E = a.tabIndex; void 0 === E && (E = e.tabIndex); void 0 !== E && z.setAttr("tabindex", E); this.allSvgObjects.push(z); a.arrays.push({ arr: this.allSvgObjects, el: z }); this.allObjects.push(a); a.arrays.push({ arr: this.allObjects, el: a }); a.mouseEnabled && c.addObjectEventListeners(z, a); if (a.remainVisible || c.selectedObject == a.parentObject) { E = a.thickness; isNaN(E) && (E = h); h = a.dashLength; isNaN(h) && (h = l); l = a.color; void 0 == l && (l = t); t = a.alpha; isNaN(t) && (t = q); q = a.rollOverAlpha; isNaN(q) && (q = u); isNaN(q) && (q = t); u = a.rollOverColor; void 0 == u && (u = y); y = a.selectedColor; void 0 == y && (y = B); B = a.balloonText; void 0 === B && (B = v); v = Number(a.arc); isNaN(v) && (v = A); A = a.arrow; if (!A || ("none" == A && "none" != m)) A = m; m = a.arrowColor; void 0 == m && (m = p); void 0 == m && (m = l); p = a.arrowAlpha; isNaN(p) && (p = r); isNaN(p) && (p = t); r = a.arrowSize; isNaN(r) && (r = n); n = a.rollOverBrightness; void 0 == n && (n = C); a.colorReal = l; a.arrowColor = m; isNaN(e.selectedBrightness) || (y = d.adjustLuminosity(a.colorReal, e.selectedBrightness / 100)); a.alphaReal = t; a.rollOverColorReal = u; a.rollOverAlphaReal = q; a.balloonTextReal = B; a.selectedColorReal = y; a.thicknessReal = E; a.rollOverBrightnessReal = n; a.accessibleLabel || (a.accessibleLabel = e.accessibleLabel); void 0 === a.shiftArrow && (a.shiftArrow = e.shiftArrow); void 0 == a.bringForwardOnHover && (a.bringForwardOnHover = w); d.processDescriptionWindow(e, a); w = this.processCoordinates(a.x, c.realWidth); C = this.processCoordinates(a.y, c.realHeight); n = a.longitudes; e = a.latitudes; q = n.length; if (0 < q) for (w = [], C = [], u = 0; u < q; u++) (B = c.coordinatesToXY(n[u], e[u])), w.push(B.x), C.push(B.y); if (0 < w.length) { a.segments = w.length; d.dx = 0; d.dy = 0; var F, H, G, q = 10 * (1 - Math.abs(v)); 10 <= q && (q = NaN); 1 > q && (q = 1); a.arcRadius = []; a.distances = []; n = c.mapContainer.scale; if (isNaN(q)) { for (q = 0; q < w.length - 1; q++) (H = Math.sqrt(Math.pow(w[q + 1] - w[q], 2) + Math.pow(C[q + 1] - C[q], 2))), (a.distances[q] = H); q = d.line(x, w, C, l, 1, E / n, h, !1, !1, !0); l = d.line(x, w, C, l, 0.001, 5 / n, h, !1, !1, !0); q.setAttr("stroke-linecap", "round"); } else { u = 1; B = { fill: "none", stroke: l, "stroke-opacity": 1, "stroke-width": E / n, "fill-opacity": 0, "stroke-linecap": "round" }; void 0 !== h && 0 < h && (B["stroke-dasharray"] = h); for (var h = "", D = 0; D < w.length - 1; D++) { var L = w[D], J = w[D + 1], M = C[D], O = C[D + 1]; H = Math.sqrt(Math.pow(J - L, 2) + Math.pow(O - M, 2)); G = (H / 2) * q; F = 270 + (180 * Math.acos(H / 2 / G)) / Math.PI; isNaN(F) && (F = 270); u = L <= J ? (0 > v ? 1 : 0) : 0 < v ? 1 : 0; 0 < v && (F = -F); h += "M" + L + "," + M + "A" + G + "," + G + ",0,0," + u + "," + J + "," + O; a.arcRadius[D] = G; a.distances[D] = H; } q = x.path(h).attr(B); l = x.path(h).attr({ "fill-opacity": 0, stroke: l, "stroke-width": 5 / n, "stroke-opacity": 0.001, fill: "none" }); } d.setCN(c, q, "map-line"); void 0 != a.id && d.setCN(c, q, "map-line-" + a.id); d.dx = 0.5; d.dy = 0.5; z.push(q); z.push(l); q.setAttr("opacity", t); if ("none" != A) { var I, K, N; if ("end" == A || "both" == A) (u = w[w.length - 1]), (D = C[C.length - 1]), 1 < w.length ? ((B = w[w.length - 2]), (I = C[C.length - 2])) : ((B = u), (I = D)), (I = (180 * Math.atan((D - I) / (u - B))) / Math.PI), isNaN(F) || (I += F), (K = u), (N = D), (I = 0 > u - B ? I - 90 : I + 90); t = [-r / 2 - 0.5, -0.5, r / 2 - 0.5]; h = [r, -0.5, r]; a.shiftArrow && "middle" != A && (h = [0, 1.2 * -r, 0]); "both" == A && ((r = d.polygon(x, t, h, m, p, 1, m, p, void 0, !0)), z.push(r), r.translate(K, N, 1 / n, !0), isNaN(I) || r.rotate(I), d.setCN(c, q, "map-line-arrow"), void 0 != a.id && d.setCN(c, q, "map-line-arrow-" + a.id), a.fixedSize && g.push(r)); if ("start" == A || "both" == A) (r = w[0]), (N = C[0]), 1 < w.length ? ((u = w[1]), (K = C[1])) : ((u = r), (K = N)), (I = (180 * Math.atan((N - K) / (r - u))) / Math.PI), isNaN(F) || (I -= F), (K = r), (I = 0 > r - u ? I - 90 : I + 90); "middle" == A && ((u = w[w.length - 1]), (D = C[C.length - 1]), 1 < w.length ? ((B = w[w.length - 2]), (I = C[C.length - 2])) : ((B = u), (I = D)), (K = B + (u - B) / 2), (N = I + (D - I) / 2), (I = (180 * Math.atan2(D - I, u - B)) / Math.PI), isNaN(F) || ((F = H / 2), (G -= Math.sqrt(G * G - F * F)), u >= B ? 0 > v && (G = -G) : 0 < v && (G = -G), (K -= Math.sin((I / 180) * Math.PI) * G), (N += Math.cos((I / 180) * Math.PI) * G)), (I += 90)); r = d.polygon(x, t, h, m, p, 1, m, p, void 0, !0); d.setCN(c, q, "map-line-arrow"); void 0 != a.id && d.setCN(c, q, "map-line-arrow-" + a.id); z.push(r); r.translate(K, N, 1 / n, !0); isNaN(I) || r.rotate(I); a.fixedSize && (g.push(r), a.arrays.push({ arr: g, el: r })); a.arrowSvg = r; } a.fixedSize && q && ((g = { line: q, thickness: E }), this.linesToResize.push(g), a.arrays.push({ arr: this.linesToResize, el: g }), (g = { line: l, thickness: 5 }), this.linesToResize.push(g), a.arrays.push({ arr: this.linesToResize, el: g })); a.lineSvg = q; a.showAsSelected && !isNaN(y) && q.setAttr("stroke", y); 0 < e.length ? f.push(z) : k.push(z); a.hidden && z.hide(); c.makeObjectAccessible(a); } } }, processCoordinates: function (a, b) { var c = [], d; for (d = 0; d < a.length; d++) { var g = a[d], f = Number(g); isNaN(f) && (f = (Number(g.replace("%", "")) * b) / 100); isNaN(f) || c.push(f); } return c; }, reset: function () { this.objectsToResize = []; this.allSvgObjects = []; this.allObjects = []; this.linesToResize = []; }, }); })(); (function () { var d = window.AmCharts; d.LinesSettings = d.Class({ construct: function (a) { this.cname = "LinesSettings"; this.balloonText = "[[title]]"; this.thickness = 1; this.dashLength = 0; this.arrowSize = 10; this.arrowAlpha = 1; this.arrow = "none"; this.color = "#990000"; this.descriptionWindowWidth = 250; this.bringForwardOnHover = !0; d.applyTheme(this, a, this.cname); }, }); })(); (function () { var d = window.AmCharts; d.MapObject = d.Class({ construct: function (a) { this.fixedSize = this.mouseEnabled = !0; this.images = []; this.lines = []; this.areas = []; this.remainVisible = !0; this.passZoomValuesToTarget = !1; this.objectType = this.cname; d.applyTheme(this, a, "MapObject"); this.arrays = []; }, deleteObject: function () { this.remove(); this.parentArray && d.removeFromArray(this.parentArray, this); if (this.arrays) for (var a = 0; a < this.arrays.length; a++) d.removeFromArray(this.arrays[a].arr, this.arrays[a].el); this.arrays = []; }, }); })(); (function () { var d = window.AmCharts; d.MapArea = d.Class({ inherits: d.MapObject, construct: function (a) { this.cname = "MapArea"; d.MapArea.base.construct.call(this, a); d.applyTheme(this, a, this.cname); }, validate: function () { this.chart.areasProcessor.createArea(this); }, }); })(); (function () { var d = window.AmCharts; d.MapLine = d.Class({ inherits: d.MapObject, construct: function (a) { this.cname = "MapLine"; this.longitudes = []; this.latitudes = []; this.x = []; this.y = []; this.segments = 0; this.arrow = "none"; d.MapLine.base.construct.call(this, a); d.applyTheme(this, a, this.cname); }, validate: function () { this.chart.linesProcessor.createLine(this); }, remove: function () { var a = this.displayObject; a && a.remove(); }, getCoordinates: function (a, b) { isNaN(b) && (b = 0); isNaN(this.arc); if (!isNaN(a)) { var c, d, g, f, k, h; if (1 < this.longitudes.length) { d = this.chart.coordinatesToXY(this.longitudes[b], this.latitudes[b]); var l = this.chart.coordinatesToXY(this.longitudes[b + 1], this.latitudes[b + 1]); c = d.x; g = l.x; d = d.y; f = l.y; } else 1 < this.x.length && ((c = this.x[b]), (g = this.x[b + 1]), (d = this.y[b]), (f = this.y[b + 1])); k = c + (g - c) * a; h = d + (f - d) * a; var m = Math.atan2(f - d, g - c), l = this.arc, n = 10 * (1 - Math.abs(l)); 10 <= n && (n = NaN); 1 > n && (n = 1); if (!isNaN(l) && 0 !== l && !isNaN(n)) { var p = Math.sqrt(Math.pow(g - c, 2) + Math.pow(f - d, 2)); h = (p / 2) * n + 0.001; m = p / 2; n = -Math.sqrt(h * h - m * m); m = (180 * Math.atan2(f - d, g - c)) / Math.PI; g >= c ? 0 > l && (n = -n) : 0 < l && (n = -n); k = c + 0.5 * (g - c) - Math.sin((m / 180) * Math.PI) * n; n = d + 0.5 * (f - d) + Math.cos((m / 180) * Math.PI) * n; d = ((180 * Math.atan2(d - n, c - k)) / Math.PI + 360) % 360; f = ((180 * Math.atan2(f - n, g - k)) / Math.PI + 360) % 360; f < d && (f += 360); 180 < f - d && (d += 360); d = ((d + (f - d) * a) / 180) * Math.PI; m = g >= c ? (0 > l ? d + Math.PI / 2 : d - Math.PI / 2) : 0 < l ? d + Math.PI / 2 : d - Math.PI / 2; k += h * Math.cos(d); h = n + h * Math.sin(d); } this.distance = p; return { x: k, y: h, angle: m }; } }, fixToStage: function () { if (0 < this.latitudes.length) { this.y = []; for (var a = 0; a < this.latitudes.length; a++) { var b = this.chart.coordinatesToStageXY(this.longitudes[a], this.latitudes[a]); this.y.push(b.y); this.x.push(b.x); } this.latitudes = []; this.longitudes = []; } this.validate(); }, fixToMap: function () { if (0 < this.y.length) { this.latitudes = []; for (var a = 0; a < this.y.length; a++) { var b = this.chart.stageXYToCoordinates(this.x[a], this.y[a]); this.latitudes.push(b.latitude); this.longitudes.push(b.longitude); } this.y = []; this.x = []; } this.validate(); }, }); })(); (function () { var d = window.AmCharts; d.MapImage = d.Class({ inherits: d.MapObject, construct: function (a) { this.cname = "MapImage"; this.scale = 1; this.widthAndHeightUnits = "pixels"; this.labelShiftY = this.labelShiftX = 0; this.positionOnLine = 0.5; this.direction = 1; this.lineSegment = this.extraAngle = 0; this.animateAngle = !0; this.createEvents("animationStart", "animationEnd"); d.MapImage.base.construct.call(this, a); d.applyTheme(this, a, this.cname); this.delayCounter = 0; }, validate: function () { this.chart.imagesProcessor.createImage(this); }, updatePosition: function () { this.chart.imagesProcessor.updateSizeAndPosition(this); }, remove: function () { var a = this.displayObject; a && a.remove(); (a = this.imageLabel) && a.remove(); }, animateTo: function (a, b, c, d) { isNaN(c) || (this.animationDuration = c); d && (this.easingFunction = d); this.finalX = a; this.finalY = b; isNaN(this.longitude) || (this.initialX = this.longitude); isNaN(this.left) || (this.initialX = this.left); isNaN(this.right) || (this.initialX = this.right); isNaN(this.latitude) || (this.initialY = this.latitude); isNaN(this.top) || (this.initialY = this.top); isNaN(this.bottom) || (this.initialY = this.bottom); this.animatingAlong = !1; this.animate(); }, animateAlong: function (a, b, c) { 1 == this.positionOnLine && this.flipDirection && ((this.direction = -1), (this.extraAngle = 180)); isNaN(b) || (this.animationDuration = b); c && (this.easingFunction = c); a && (this.line = this.chart.getObjectById(a)); this.animateAlongLine = this.line; this.animatingAlong = !0; this.animate(); }, animate: function () { var a = this.chart.imagesSettings, b = this.animationDuration; isNaN(b) && (b = a.animationDuration); this.totalFrames = b * d.updateRate; b = 1; this.line && a.adjustAnimationSpeed && (this.line.distances && ((b = this.line.distances[this.lineSegment] * this.chart.zoomLevel()), (b = Math.abs(b / a.baseAnimationDistance))), (this.totalFrames = Math.round(b * this.totalFrames))); this.frame = 0; this.fire({ type: "animationStart", chart: this.chart, image: this, lineSegment: this.lineSegment, direction: this.direction }); }, update: function () { var a = this.totalFrames; this.frame++; this.delayCounter--; 0 === this.delayCounter && this.animateAlong(); if (!(0 < this.delayCounter)) if (this.frame <= a) { var b = this.chart.imagesSettings, c = this.easingFunction; c || (c = b.easingFunction); a = c(0, this.frame, 0, 1, a); -1 == this.direction && (a = 1 - a); this.animatingAlong ? (this.positionOnLine = a) : ((b = this.initialX + (this.finalX - this.initialX) * a), isNaN(this.longitude) || (this.longitude = b), isNaN(this.left) || (this.left = b), isNaN(this.right) || (this.right = b), (a = this.initialY + (this.finalY - this.initialY) * a), isNaN(this.latitude) || (this.latitude = a), isNaN(this.top) || (this.top = a), isNaN(this.bottom) || (this.bottom = a)); this.updatePosition(); } else this.frame == a + 1 && (this.fire({ type: "animationEnd", chart: this.chart, image: this, lineSegment: this.lineSegment, direction: this.direction }), this.line && this.animatingAlong && (1 == this.direction ? this.lineSegment < this.line.segments - 2 ? (this.lineSegment++, this.delayAnimateAlong(), (this.positionOnLine = 0)) : this.flipDirection ? ((this.direction = -1), (this.extraAngle = 180), this.delayAnimateAlong()) : this.loop && (this.delayAnimateAlong(), (this.lineSegment = 0)) : 0 < this.lineSegment ? (this.lineSegment--, this.delayAnimateAlong(), (this.positionOnLine = 0)) : this.loop && this.flipDirection ? ((this.direction = 1), (this.extraAngle = 0), this.delayAnimateAlong()) : this.loop && this.delayAnimateAlong())); }, delayAnimateAlong: function () { this.animateAlongLine && (this.delayCounter = this.chart.imagesSettings.pauseDuration * d.updateRate); }, fixToStage: function () { if (!isNaN(this.longitude)) { var a = this.chart.coordinatesToStageXY(this.longitude, this.latitude); this.left = a.x; this.top = a.y; this.latitude = this.longitude = void 0; } this.validate(); }, fixToMap: function () { if (!isNaN(this.left)) { var a = this.chart.stageXYToCoordinates(this.left, this.top); this.longitude = a.longitude; this.latitude = a.latitude; this.top = this.left = void 0; } this.validate(); }, }); })(); (function () { var d = window.AmCharts; d.degreesToRadians = function (a) { return (a / 180) * Math.PI; }; d.radiansToDegrees = function (a) { return (a / Math.PI) * 180; }; d.getColorFade = function (a, b, c) { var e = d.hex2RGB(b); b = e[0]; var g = e[1], e = e[2], f = d.hex2RGB(a); a = f[0]; var k = f[1], f = f[2]; a += Math.round((b - a) * c); k += Math.round((g - k) * c); f += Math.round((e - f) * c); return "rgb(" + a + "," + k + "," + f + ")"; }; d.hex2RGB = function (a) { return [parseInt(a.substring(1, 3), 16), parseInt(a.substring(3, 5), 16), parseInt(a.substring(5, 7), 16)]; }; d.processDescriptionWindow = function (a, b) { isNaN(b.descriptionWindowX) && (b.descriptionWindowX = a.descriptionWindowX); isNaN(b.descriptionWindowY) && (b.descriptionWindowY = a.descriptionWindowY); isNaN(b.descriptionWindowLeft) && (b.descriptionWindowLeft = a.descriptionWindowLeft); isNaN(b.descriptionWindowRight) && (b.descriptionWindowRight = a.descriptionWindowRight); isNaN(b.descriptionWindowTop) && (b.descriptionWindowTop = a.descriptionWindowTop); isNaN(b.descriptionWindowBottom) && (b.descriptionWindowBottom = a.descriptionWindowBottom); isNaN(b.descriptionWindowWidth) && (b.descriptionWindowWidth = a.descriptionWindowWidth); isNaN(b.descriptionWindowHeight) && (b.descriptionWindowHeight = a.descriptionWindowHeight); }; d.normalizePath = function (a) { for (var b = "", c = d.parsePath(a.getAttribute("d")), e, g, f = Infinity, k = -Infinity, h = Infinity, l = -Infinity, m = 0; m < c.length; m++) { var n = c[m], p = n.letter, r = n.x, n = n.y; "h" == p && ((p = "L"), (r += e), (n = g)); "H" == p && ((p = "L"), (n = g)); "v" == p && ((p = "L"), (r = e), (n += g)); "V" == p && ((p = "L"), (r = e)); if ("m" === p || "l" === p) (p = p.toUpperCase()), (r += e), (n += g); r = d.roundTo(r, 3); n = d.roundTo(n, 3); e = r; g = n; r > k && (k = r); r < f && (f = r); n > l && (l = n); n < h && (h = n); b = "z" == p.toLowerCase() ? b + "Z " : b + (p + " " + r + " " + n + " "); } a.setAttribute("d", b); return { minX: f, maxX: k, minY: h, maxY: l }; }; d.mercatorLatitudeToRadians = function (a) { return Math.log(Math.tan(Math.PI / 4 + d.degreesToRadians(a) / 2)); }; d.parsePath = function (a) { a = a.match(/([MmLlHhVvZz]{1}[0-9.,\-\s]*)/g); for (var b = [], c = 0; c < a.length; c++) { var d = a[c].match(/([MmLlHhVvZz]{1})|([0-9.\-]+)/g), g = { letter: d[0] }; switch (d[0]) { case "Z": case "Z": case "z": break; case "V": case "v": g.y = Number(d[1]); break; case "H": case "h": g.x = Number(d[1]); break; default: (g.x = Number(d[1])), (g.y = Number(d[2])); } b.push(g); } return b; }; d.acos = function (a) { return 1 < a ? 0 : -1 > a ? Math.PI : Math.acos(a); }; d.asin = function (a) { return 1 < a ? Math.PI / 2 : -1 > a ? -Math.PI / 2 : Math.asin(a); }; d.sinci = function (a) { return a ? a / Math.sin(a) : 1; }; d.asqrt = function (a) { return 0 < a ? Math.sqrt(a) : 0; }; d.winkel3 = function (a, b) { var c = d.aitoff(a, b); return [(c[0] + (a / Math.PI) * 2) / 2, (c[1] + b) / 2]; }; d.winkel3.invert = function (a, b) { var c = a, e = b, g = 25, f = Math.PI / 2; do var k = Math.cos(e), h = Math.sin(e), l = Math.sin(2 * e), m = h * h, n = k * k, p = Math.sin(c), r = Math.cos(c / 2), t = Math.sin(c / 2), q = t * t, y = 1 - n * r * r, B = y ? d.acos(k * r) * Math.sqrt((u = 1 / y)) : (u = 0), u, y = 0.5 * (2 * B * k * t + c / f) - a, v = 0.5 * (B * h + e) - b, w = 0.5 * u * (n * q + B * k * r * m) + 0.5 / f, A = u * ((p * l) / 4 - B * h * t), h = 0.125 * u * (l * t - B * h * n * p), m = 0.5 * u * (m * r + B * q * k) + 0.5, k = A * h - m * w, A = (v * A - y * m) / k, y = (y * h - v * w) / k, c = c - A, e = e - y; while ((1e-6 < Math.abs(A) || 1e-6 < Math.abs(y)) && 0 < --g); return [c, e]; }; d.aitoff = function (a, b) { var c = Math.cos(b), e = d.sinci(d.acos(c * Math.cos((a /= 2)))); return [2 * c * Math.sin(a) * e, Math.sin(b) * e]; }; d.orthographic = function (a, b) { return [Math.cos(b) * Math.sin(a), Math.sin(b)]; }; d.equirectangular = function (a, b) { return [a, b]; }; d.equirectangular.invert = function (a, b) { return [a, b]; }; d.eckert5 = function (a, b) { var c = Math.PI; return [(a * (1 + Math.cos(b))) / Math.sqrt(2 + c), (2 * b) / Math.sqrt(2 + c)]; }; d.eckert5.invert = function (a, b) { var c = Math.sqrt(2 + Math.PI), d = (b * c) / 2; return [(c * a) / (1 + Math.cos(d)), d]; }; d.eckert6 = function (a, b) { for (var c = Math.PI, d = (1 + c / 2) * Math.sin(b), g = 0, f = Infinity; 10 > g && 1e-5 < Math.abs(f); g++) b -= f = (b + Math.sin(b) - d) / (1 + Math.cos(b)); d = Math.sqrt(2 + c); return [(a * (1 + Math.cos(b))) / d, (2 * b) / d]; }; d.eckert6.invert = function (a, b) { var c = 1 + Math.PI / 2, e = Math.sqrt(c / 2); return [(2 * a * e) / (1 + Math.cos((b *= e))), d.asin((b + Math.sin(b)) / c)]; }; d.mercator = function (a, b) { b >= Math.PI / 2 - 0.02 && (b = Math.PI / 2 - 0.02); b <= -Math.PI / 2 + 0.02 && (b = -Math.PI / 2 + 0.02); return [a, Math.log(Math.tan(Math.PI / 4 + b / 2))]; }; d.mercator.invert = function (a, b) { return [a, 2 * Math.atan(Math.exp(b)) - Math.PI / 2]; }; d.miller = function (a, b) { return [a, 1.25 * Math.log(Math.tan(Math.PI / 4 + 0.4 * b))]; }; d.miller.invert = function (a, b) { return [a, 2.5 * Math.atan(Math.exp(0.8 * b)) - 0.625 * Math.PI]; }; d.eckert3 = function (a, b) { var c = Math.PI, d = Math.sqrt(c * (4 + c)); return [(2 / d) * a * (1 + Math.sqrt(1 - (4 * b * b) / (c * c))), (4 / d) * b]; }; d.eckert3.invert = function (a, b) { var c = Math.PI, e = Math.sqrt(c * (4 + c)) / 2; return [(a * e) / (1 + d.asqrt(1 - (b * b * (4 + c)) / (4 * c))), (b * e) / 2]; }; })(); (function () { var d = window.AmCharts; d.MapData = d.Class({ inherits: d.MapObject, construct: function () { this.cname = "MapData"; d.MapData.base.construct.call(this); this.projection = "mercator"; this.topLatitude = 90; this.bottomLatitude = -90; this.leftLongitude = -180; this.rightLongitude = 180; this.zoomLevel = 1; this.getAreasFromMap = !1; }, }); })(); (function () { var d = window.AmCharts; d.DescriptionWindow = d.Class({ construct: function () {}, show: function (a, b, c, d) { var g = this; g.chart = a; var f = document.createElement("div"); f.style.position = "absolute"; var k = a.classNamePrefix + "-description-"; f.className = "ammapDescriptionWindow " + k + "div"; g.div = f; b.appendChild(f); var h = ".gif"; a.svgIcons && (h = ".svg"); var l = document.createElement("img"); l.className = "ammapDescriptionWindowCloseButton " + k + "close-img"; l.src = a.pathToImages + "xIcon" + h; l.style.cssFloat = "right"; l.style.cursor = "pointer"; l.onclick = function () { g.close(); }; l.onmouseover = function () { l.src = a.pathToImages + "xIconH" + h; }; l.onmouseout = function () { l.src = a.pathToImages + "xIcon" + h; }; f.appendChild(l); b = document.createElement("div"); b.className = "ammapDescriptionTitle " + k + "title-div"; b.onmousedown = function () { g.div.style.zIndex = 1e3; }; f.appendChild(b); b.innerHTML = d; d = b.offsetHeight; b = document.createElement("div"); b.className = "ammapDescriptionText " + k + "text-div"; b.style.maxHeight = g.maxHeight - d - 20 + "px"; f.appendChild(b); b.innerHTML = c; }, close: function () { try { this.div.parentNode.removeChild(this.div), this.chart.fireClosed(); } catch (a) {} }, }); })(); (function () { var d = window.AmCharts; d.ValueLegend = d.Class({ construct: function (a) { this.cname = "ValueLegend"; this.enabled = !0; this.showAsGradient = !1; this.minValue = 0; this.height = 12; this.width = 200; this.bottom = this.left = 10; this.borderColor = "#FFFFFF"; this.borderAlpha = this.borderThickness = 1; this.color = "#000000"; this.fontSize = 11; d.applyTheme(this, a, this.cname); }, init: function (a, b) { if (this.enabled) { var c = a.areasSettings.color, e = a.areasSettings.colorSolid, g = a.colorSteps; d.remove(this.set); var f = b.set(); this.set = f; d.setCN(a, f, "value-legend"); var k = 0, h = this.minValue, l = this.fontSize, m = a.fontFamily, n = this.color, p = { precision: a.precision, decimalSeparator: a.decimalSeparator, thousandsSeparator: a.thousandsSeparator }; void 0 == h && (h = d.formatNumber(a.minValueReal, p)); void 0 !== h && ((k = d.text(b, h, n, m, l, "left")), k.translate(0, l / 2 - 1), d.setCN(a, k, "value-legend-min-label"), f.push(k), (k = k.getBBox().height)); h = this.maxValue; void 0 === h && (h = d.formatNumber(a.maxValueReal, p)); void 0 !== h && ((k = d.text(b, h, n, m, l, "right")), k.translate(this.width, l / 2 - 1), d.setCN(a, k, "value-legend-max-label"), f.push(k), (k = k.getBBox().height)); if (this.showAsGradient) (c = d.rect(b, this.width, this.height, [c, e], 1, this.borderThickness, this.borderColor, 1, 0, 0)), d.setCN(a, c, "value-legend-gradient"), c.translate(0, k), f.push(c); else for (l = this.width / g, m = 0; m < g; m++) (n = d.getColorFade(c, e, (1 * m) / (g - 1))), (n = d.rect(b, l, this.height, n, 1, this.borderThickness, this.borderColor, 1)), d.setCN(a, n, "value-legend-color"), d.setCN(a, n, "value-legend-color-" + m), n.translate(l * m, k), f.push(n); e = c = 0; g = f.getBBox(); k = a.getY(this.bottom, !0); l = a.getY(this.top); m = a.getX(this.right, !0); n = a.getX(this.left); isNaN(l) || (c = l); isNaN(k) || (c = k - g.height); isNaN(n) || (e = n); isNaN(m) || (e = m - g.width); f.translate(e, c); } else d.remove(this.set); }, }); })(); (function () { var d = window.AmCharts; d.ObjectList = d.Class({ construct: function (a) { this.divId = a; }, init: function (a) { this.chart = a; var b = this.divId; this.container && (b = this.container); this.div = "object" != typeof b ? document.getElementById(b) : b; b = document.createElement("div"); b.className = "ammapObjectList " + a.classNamePrefix + "-object-list-div"; this.div.appendChild(b); this.addObjects(a.dataProvider, b); }, addObjects: function (a, b) { var c = this.chart, d = document.createElement("ul"); d.className = c.classNamePrefix + "-object-list-ul"; var g; if (a.areas) for (g = 0; g < a.areas.length; g++) { var f = a.areas[g]; void 0 === f.showInList && (f.showInList = c.showAreasInList); this.addObject(f, d); } if (a.images) for (g = 0; g < a.images.length; g++) (f = a.images[g]), void 0 === f.showInList && (f.showInList = c.showImagesInList), this.addObject(f, d); if (a.lines) for (g = 0; g < a.lines.length; g++) (f = a.lines[g]), void 0 === f.showInList && (f.showInList = c.showLinesInList), this.addObject(f, d); 0 < d.childNodes.length && b.appendChild(d); }, addObject: function (a, b) { var c = this; if (a.showInList && void 0 !== a.title) { var d = c.chart, g = document.createElement("li"); g.className = d.classNamePrefix + "-object-list-li"; var f = a.titleTr; f || (f = a.title); var f = document.createTextNode(f), k = document.createElement("a"); k.className = d.classNamePrefix + "-object-list-a"; k.appendChild(f); g.appendChild(k); b.appendChild(g); this.addObjects(a, g); k.onmouseover = function () { c.chart.rollOverMapObject(a, !1); }; k.onmouseout = function () { c.chart.rollOutMapObject(a); }; k.onclick = function () { c.chart.clickMapObject(a); }; } }, }); })();