(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 = 30, d.uid = 0, d.lang = {}, d.translations = {}, d.mapTranslations = {}, d.windows = {}, d.initHandlers = []);
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, b = arguments.length; a < b; 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);
this.events[a].push({
handler: b,
scope: c
})
}, b.prototype.removeListener = function (a, b, c) {
if (a && a.events)
for (a = a.events[b], b = a.length - 1; 0 <= b; b--) a[b].handler === c && a.splice(b, 1)
}, b.prototype.fire = function (a, b) {
for (var c = this.events[a], d = 0, k = c.length; d <
k; d++) {
var l = c[d];
l.handler.call(l.scope, b)
}
});
for (var c in a) b.prototype[c] = a[c];
return b
};
d.addChart = function (a) {
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.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);
c && (c = c[a]) && (d.lang = 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)))
};
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 = .5, d.dy = .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.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.handleWheel(a) : a.stopPropagation && a.stopPropagation();
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.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.isNN && (document.addEventListener("mousemove", d.handleMouseMove, !0), document.addEventListener("mouseup", d.handleMouseUp, !0), window.addEventListener("load", d.handleLoad,
!0), window.addEventListener("DOMMouseScroll", d.handleWheel, !0), document.addEventListener("mousewheel", d.handleWheel, !0));
d.isIE && (document.attachEvent("onmousemove", d.handleMouseMove), document.attachEvent("onmouseup", d.handleMouseUp), window.attachEvent("onload", d.handleLoad));
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.charts = [];
d.isNN && (document.removeEventListener("mousemove", d.handleMouseMove, !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.makeChart = function (a, b, c) {
var e = b.type,
h = b.theme;
d.isString(h) && (h = d.themes[h], b.theme = h);
var f;
switch (e) {
case "serial":
f = new d.AmSerialChart(h);
break;
case "xy":
f = new d.AmXYChart(h);
break;
case "pie":
f = new d.AmPieChart(h);
break;
case "radar":
f = new d.AmRadarChart(h);
break;
case "gauge":
f = new d.AmAngularGauge(h);
break;
case "funnel":
f = new d.AmFunnelChart(h);
break;
case "map":
f = new d.AmMap(h);
break;
case "stock":
f = new d.AmStockChart(h);
break;
case "gantt":
f = new d.AmGanttChart(h)
}
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 / 5);
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 = 0; c < a.length; c++) a[c].update && a[c].update(), b && a[c].autoResize && a[c].validateSize && a[c].validateSize()
};
d.bezierX = 3;
d.bezierY = 6
})();
(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 Boolean(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.wrappedText = function (a, b, c, e, h, f, g, k, l) {
var m = d.text(a, b, c, e, h, f, g),
n = "\n";
d.isModern || (n = "
");
if (10 < l) return m;
if (m) {
var q = m.getBBox();
if (q.width > k) {
q = Math.ceil(q.width / k);
m.remove();
for (var m = [], p = 0; - 1 < (p = b.indexOf(" ", p));) m.push(p), p += 1;
for (var r, p = 0; p < m.length; p += Math.ceil(m.length / q)) r = m[p], b = b.substr(0, r) + n + b.substr(r + 1);
if (isNaN(r)) {
if (0 === l)
for (p = 1; p < q; p++) r = Math.round(b.length / q * p), b = b.substr(0, r) + n + b.substr(r);
return d.text(a, b, c, e, h, f, g)
}
return d.wrappedText(a, b, c, e, h, f, g, k, l + 1)
}
return m
}
};
d.getStyle = function (a, b) {
var c = "";
document.defaultView && document.defaultView.getComputedStyle ? c = document.defaultView.getComputedStyle(a,
"").getPropertyValue(b) : 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 && 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 h = e.length;
if (0 < h) {
var d;
for (d = 0; d < h; d++) {
var g = e[d];
if (g && g[a]) g[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 = String(Math.round(a * Math.pow(10, b)));
if (0 < b) {
var e = c.length;
if (e < b) {
var h;
for (h = 0; h < b - e; h++) c = "0" + c
}
e = c.substring(0, c.length - b);
"" === e && (e = 0);
return e + "." + c.substring(c.length - b, c.length)
}
return String(c)
};
d.formatDuration = function (a, b, c, e, h, f) {
var g = d.intervals,
k = f.decimalSeparator;
if (a >= g[b].contains) {
var l = a - Math.floor(a / g[b].contains) * g[b].contains;
"ss" == b && (l = d.formatNumber(l,
f), 1 == l.split(k)[0].length && (l = "0" + l));
("mm" == b || "hh" == b) && 10 > l && (l = "0" + l);
c = l + "" + e[b] + "" + c;
a = Math.floor(a / g[b].contains);
b = g[b].nextInterval;
return d.formatDuration(a, b, c, e, h, f)
}
"ss" == b && (a = d.formatNumber(a, f), 1 == a.split(k)[0].length && (a = "0" + a));
("mm" == b || "hh" == b) && 10 > a && (a = "0" + a);
c = a + "" + e[b] + "" + c;
if (g[h].count > g[b].count)
for (a = g[b].count; a < g[h].count; a++) b = g[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, h) {
a = d.roundTo(a, b.precision);
isNaN(c) && (c = b.precision);
var f = b.decimalSeparator;
b = b.thousandsSeparator;
var g;
g = 0 > a ? "-" : "";
a = Math.abs(a);
var k = String(a),
l = !1; - 1 != k.indexOf("e") && (l = !0);
0 <= c && !l && (k = d.toFixed(a, c));
var m = "";
if (l) m = k;
else {
var k = k.split("."),
l = String(k[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 !== k[1] && (m = m + f + k[1]);
void 0 !== c && 0 < c && "0" != m && (m = d.addZeroes(m, f, c))
}
m =
g + m;
"" === g && !0 === e && 0 !== a && (m = "+" + m);
!0 === h && (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,
h = a.x,
f = a.x + a.width,
g = a.y,
k = a.y + a.height,
l = d.isInRectangle;
e || (e = l(h, g, b));
e || (e = l(h, k, b));
e || (e = l(f, g, b));
e || (e = l(f, k, 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.findPosX = function (a) {
var b = a,
c = a.offsetLeft;
if (a.offsetParent) {
for (; a = a.offsetParent;) c += a.offsetLeft;
for (;
(b = b.parentNode) && b != document.body;) c -= b.scrollLeft || 0
}
return c
};
d.findPosY = function (a) {
var b = a,
c = a.offsetTop;
if (a.offsetParent) {
for (; a = a.offsetParent;) c += a.offsetTop;
for (;
(b = b.parentNode) && b != document.body;) c -= b.scrollTop || 0
}
return c
};
d.findIfFixed = function (a) {
if (a.offsetParent)
for (; a =
a.offsetParent;)
if ("fixed" == d.getStyle(a, "position")) return !0;
return !1
};
d.findIfAuto = function (a) {
return a.style && "auto" == d.getStyle(a, "overflow") ? !0 : a.parentNode ? d.findIfAuto(a.parentNode) : !1
};
d.findScrollLeft = function (a, b) {
a.scrollLeft && (b += a.scrollLeft);
return a.parentNode ? d.findScrollLeft(a.parentNode, b) : b
};
d.findScrollTop = function (a, b) {
a.scrollTop && (b += a.scrollTop);
return a.parentNode ? d.findScrollTop(a.parentNode, b) : b
};
d.formatValue = function (a, b, c, e, h, f, g, k) {
if (b) {
void 0 === h && (h = "");
var l;
for (l =
0; l < c.length; l++) {
var m = c[l],
n = b[m];
void 0 !== n && (n = f ? d.addPrefix(n, k, g, e) : d.formatNumber(n, e), a = a.replace(new RegExp("\\[\\[" + h + "" + 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 h = c[e],
h = h.substr(2, h.length - 4);
void 0 !== b[h] && (a = a.replace(new RegExp("\\[\\[" + h + "\\]\\]", "g"), b[h]))
}
}
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, h) {
var f = d.formatNumber(a, e),
g = "",
k, l, m;
if (0 === a) return "0";
0 > a && (g = "-");
a = Math.abs(a);
if (1 < a)
for (k = b.length - 1; - 1 < k; k--) {
if (a >= b[k].number && (l = a / b[k].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
}), !h || l == c)) {
f = g + "" + m + "" + b[k].prefix;
break
}
} else
for (k = 0; k < c.length; k++)
if (a <= c[k].number) {
l =
a / c[k].number;
m = Math.abs(Math.round(Math.log(l) * Math.LOG10E));
l = d.roundTo(l, m);
f = g + "" + l + "" + c[k].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 h = a[e];
h.id == b && (c = h)
}
return c
};
d.applyTheme = function (a, b, c) {
b || (b = d.theme);
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) {
!1 === a instanceof b && (a = e ? d.extend(new b(c), a) : d.extend(a, new b(c), !0));
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) 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, h) {
return (b /= h) < 1 / 2.75 ? 7.5625 * e * b * b + c : b < 2 / 2.75 ? e * (7.5625 * (b -= 1.5 / 2.75) * b + .75) +
c : b < 2.5 / 2.75 ? e * (7.5625 * (b -= 2.25 / 2.75) * b + .9375) + c : e * (7.5625 * (b -= 2.625 / 2.75) * b + .984375) + c
};
d.easeInSine = function (a, b, c, e, h) {
return -e * Math.cos(b / h * (Math.PI / 2)) + e + c
};
d.easeOutSine = function (a, b, c, e, h) {
return e * Math.sin(b / h * (Math.PI / 2)) + c
};
d.easeOutElastic = function (a, b, c, e, h) {
a = 1.70158;
var d = 0,
g = e;
if (0 === b) return c;
if (1 == (b /= h)) return c + e;
d || (d = .3 * h);
g < Math.abs(e) ? (g = e, a = d / 4) : a = d / (2 * Math.PI) * Math.asin(e / g);
return g * Math.pow(2, -10 * b) * Math.sin(2 * (b * h - a) * Math.PI / d) + 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 h;
for (h = 0; h < e; h++) 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 h = b.getAttribute("class");
a = a.classNamePrefix + "-";
e && (a = "");
h ? b.setAttribute("class", h + " " + a + c) : b.setAttribute("class", a + 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 h = 0; h < a[c].length; h++) e = document.createElementNS(d.SVG_NS, c), b.appendChild(e), d.parseDefs(a[c][h], 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.AxisBase = d.Class({
construct: function (a) {
this.createEvents("clickItem", "rollOverItem", "rollOutItem");
this.viY = this.viX = this.y = this.x = this.dy = this.dx = 0;
this.axisThickness = 1;
this.axisColor = "#000000";
this.axisAlpha = 1;
this.gridCount = this.tickLength = 5;
this.gridAlpha = .15;
this.gridThickness = 1;
this.gridColor = "#000000";
this.dashLength = 0;
this.labelFrequency = 1;
this.showLastLabel = this.showFirstLabel = !0;
this.fillColor = "#FFFFFF";
this.fillAlpha = 0;
this.labelsEnabled = !0;
this.labelRotation =
0;
this.autoGridCount = !0;
this.offset = 0;
this.guides = [];
this.visible = !0;
this.counter = 0;
this.guides = [];
this.ignoreAxisWidth = this.inside = !1;
this.minHorizontalGap = 75;
this.minVerticalGap = 35;
this.titleBold = !0;
this.minorGridEnabled = !1;
this.minorGridAlpha = .07;
this.autoWrap = !1;
this.titleAlign = "middle";
this.labelOffset = 0;
this.bcn = "axis-";
this.periods = [{
period: "ss",
count: 1
}, {
period: "ss",
count: 5
}, {
period: "ss",
count: 10
}, {
period: "ss",
count: 30
}, {
period: "mm",
count: 1
}, {
period: "mm",
count: 5
}, {
period: "mm",
count: 10
}, {
period: "mm",
count: 30
}, {
period: "hh",
count: 1
}, {
period: "hh",
count: 3
}, {
period: "hh",
count: 6
}, {
period: "hh",
count: 12
}, {
period: "DD",
count: 1
}, {
period: "DD",
count: 2
}, {
period: "DD",
count: 3
}, {
period: "DD",
count: 4
}, {
period: "DD",
count: 5
}, {
period: "WW",
count: 1
}, {
period: "MM",
count: 1
}, {
period: "MM",
count: 2
}, {
period: "MM",
count: 3
}, {
period: "MM",
count: 6
}, {
period: "YYYY",
count: 1
}, {
period: "YYYY",
count: 2
}, {
period: "YYYY",
count: 5
}, {
period: "YYYY",
count: 10
}, {
period: "YYYY",
count: 50
}, {
period: "YYYY",
count: 100
}];
this.dateFormats = [{
period: "fff",
format: "JJ:NN:SS"
},
{
period: "ss",
format: "JJ:NN:SS"
}, {
period: "mm",
format: "JJ:NN"
}, {
period: "hh",
format: "JJ:NN"
}, {
period: "DD",
format: "MMM DD"
}, {
period: "WW",
format: "MMM DD"
}, {
period: "MM",
format: "MMM"
}, {
period: "YYYY",
format: "YYYY"
}
];
this.nextPeriod = {
fff: "ss",
ss: "mm",
mm: "hh",
hh: "DD",
DD: "MM",
MM: "YYYY"
};
d.applyTheme(this, a, "AxisBase")
},
zoom: function (a, b) {
this.start = a;
this.end = b;
this.dataChanged = !0;
this.draw()
},
fixAxisPosition: function () {
var a = this.position;
"H" == this.orientation ? ("left" == a && (a = "bottom"), "right" == a && (a = "top")) :
("bottom" == a && (a = "left"), "top" == a && (a = "right"));
this.position = a
},
draw: function () {
var a = this.chart;
this.allLabels = [];
this.counter = 0;
this.destroy();
this.fixAxisPosition();
this.labels = [];
var b = a.container,
c = b.set();
a.gridSet.push(c);
this.set = c;
b = b.set();
a.axesLabelsSet.push(b);
this.labelsSet = b;
this.axisLine = new this.axisRenderer(this);
this.autoGridCount ? ("V" == this.orientation ? (a = this.height / this.minVerticalGap, 3 > a && (a = 3)) : a = this.width / this.minHorizontalGap, this.gridCountR = Math.max(a, 1)) : this.gridCountR =
this.gridCount;
this.axisWidth = this.axisLine.axisWidth;
this.addTitle()
},
setOrientation: function (a) {
this.orientation = a ? "H" : "V"
},
addTitle: function () {
var a = this.title;
this.titleLabel = null;
if (a) {
var b = this.chart,
c = this.titleColor;
void 0 === c && (c = b.color);
var e = this.titleFontSize;
isNaN(e) && (e = b.fontSize + 1);
a = d.text(b.container, a, c, b.fontFamily, e, this.titleAlign, this.titleBold);
d.setCN(b, a, this.bcn + "title");
this.titleLabel = a
}
},
positionTitle: function () {
var a = this.titleLabel;
if (a) {
var b, c, e = this.labelsSet,
h = {};
0 < e.length() ? h = e.getBBox() : (h.x = 0, h.y = 0, h.width = this.viW, h.height = this.viH, d.VML && (h.y += this.y, h.x += this.x));
e.push(a);
var e = h.x,
f = h.y;
d.VML && (this.rotate ? e -= this.x : f -= this.y);
var g = h.width,
h = h.height,
k = this.viW,
l = this.viH,
m = 0,
n = a.getBBox().height / 2,
q = this.inside,
p = this.titleAlign;
switch (this.position) {
case "top":
b = "left" == p ? -1 : "right" == p ? k : k / 2;
c = f - 10 - n;
break;
case "bottom":
b = "left" == p ? -1 : "right" == p ? k : k / 2;
c = f + h + 10 + n;
break;
case "left":
b = e - 10 - n;
q && (b -= 5);
c = "left" == p ? l + 1 : "right" == p ? -1 : l / 2;
m = -90;
break;
case "right":
b = e + g + 10 + n - 3, q && (b += 7), c = "left" == p ? l + 2 : "right" == p ? -2 : l / 2, m = -90
}
this.marginsChanged ? (a.translate(b, c), this.tx = b, this.ty = c) : a.translate(this.tx, this.ty);
this.marginsChanged = !1;
0 !== m && a.rotate(m)
}
},
pushAxisItem: function (a, b) {
var c = this,
e = a.graphics();
0 < e.length() && (b ? c.labelsSet.push(e) : c.set.push(e));
if (e = a.getLabel()) this.labelsSet.push(e), e.click(function (b) {
c.handleMouse(b, a, "clickItem")
}).mouseover(function (b) {
c.handleMouse(b, a, "rollOverItem")
}).mouseout(function (b) {
c.handleMouse(b,
a, "rollOutItem")
})
},
handleMouse: function (a, b, c) {
this.fire(c, {
type: c,
value: b.value,
serialDataItem: b.serialDataItem,
axis: this,
target: b.label,
chart: this.chart,
event: a
})
},
addGuide: function (a) {
for (var b = this.guides, c = !1, e = b.length, h = 0; h < b.length; h++) b[h] == a && (c = !0, e = h);
a = d.processObject(a, d.Guide, this.theme);
a.id || (a.id = "guideAuto" + e + "_" + (new Date).getTime());
c || b.push(a)
},
removeGuide: function (a) {
var b = this.guides,
c;
for (c = 0; c < b.length; c++) b[c] == a && b.splice(c, 1)
},
handleGuideOver: function (a) {
clearTimeout(this.chart.hoverInt);
var b = a.graphics.getBBox(),
c = b.x + b.width / 2,
b = b.y + b.height / 2,
e = a.fillColor;
void 0 === e && (e = a.lineColor);
this.chart.showBalloon(a.balloonText, e, !0, c, b)
},
handleGuideOut: function () {
this.chart.hideBalloon()
},
addEventListeners: function (a, b) {
var c = this;
a.mouseover(function () {
c.handleGuideOver(b)
});
a.touchstart(function () {
c.handleGuideOver(b)
});
a.mouseout(function () {
c.handleGuideOut(b)
})
},
getBBox: function () {
var a = this.labelsSet.getBBox();
d.VML || (a = {
x: a.x + this.x,
y: a.y + this.y,
width: a.width,
height: a.height
});
return a
},
destroy: function () {
d.remove(this.set);
d.remove(this.labelsSet);
var a = this.axisLine;
a && d.remove(a.set);
d.remove(this.grid0)
},
chooseMinorFrequency: function (a) {
for (var b = 10; 0 < b; b--)
if (a / b == Math.round(a / b)) return a / b
},
parseDatesDraw: function () {
var a, b = this.chart,
c = this.showFirstLabel,
e = this.showLastLabel,
h, f = "",
g = d.extractPeriod(this.minPeriod),
k = d.getPeriodDuration(g.period, g.count),
l, m, n, q, p, r = this.firstDayOfWeek,
t = this.boldPeriodBeginning;
a = this.minorGridEnabled;
var u, z = this.gridAlpha,
w,
x = this.choosePeriod(0),
v = x.period,
x = x.count,
A = d.getPeriodDuration(v, x);
A < k && (v = g.period, x = g.count, A = k);
g = v;
"WW" == g && (g = "DD");
this.stepWidth = this.getStepWidth(this.timeDifference);
var B = Math.ceil(this.timeDifference / A) + 5,
D = l = d.resetDateToMin(new Date(this.startTime - A), v, x, r).getTime();
g == v && 1 == x && this.centerLabelOnFullPeriod && (n = A * this.stepWidth);
this.cellWidth = k * this.stepWidth;
q = Math.round(l / A);
k = -1;
q / 2 == Math.round(q / 2) && (k = -2, l -= A);
q = this.firstTime;
var C = 0;
a && 1 < x && (u = this.chooseMinorFrequency(x),
w = d.getPeriodDuration(v, u));
if (0 < this.gridCountR)
for (a = k; a <= B; a++) {
p = q + A * (a + Math.floor((D - q) / A)) - C;
"DD" == v && (p += 36E5);
p = d.resetDateToMin(new Date(p), v, x, r).getTime();
"MM" == v && (h = (p - l) / A, 1.5 <= (p - l) / A && (p = p - (h - 1) * A + d.getPeriodDuration("DD", 3), p = d.resetDateToMin(new Date(p), v, 1).getTime(), C += A));
h = (p - this.startTime) * this.stepWidth;
h = this.rotate ? h + (this.x - this.viX) : "date" == this.type ? this.axisWidth - h + (this.y - this.viY) : h + (this.y - this.viY);
f = !1;
this.nextPeriod[g] && (f = this.checkPeriodChange(this.nextPeriod[g],
1, p, l, g));
l = !1;
f && this.markPeriodChange ? (f = this.dateFormatsObject[this.nextPeriod[g]], this.twoLineMode && (f = this.dateFormatsObject[g] + "\n" + f, f = d.fixBrakes(f)), l = !0) : f = this.dateFormatsObject[g];
t || (l = !1);
this.currentDateFormat = f;
f = d.formatDate(new Date(p), f, b);
if (a == k && !c || a == B && !e) f = " ";
this.labelFunction && (f = this.labelFunction(f, new Date(p), this, v, x, m).toString());
this.boldLabels && (l = !0);
m = new this.axisItemRenderer(this, h, f, !1, n, 0, !1, l);
this.pushAxisItem(m);
m = l = p;
if (!isNaN(u))
for (h = 1; h < x; h += u) this.gridAlpha =
this.minorGridAlpha, f = p + w * h, f = d.resetDateToMin(new Date(f), v, u, r).getTime(), f = new this.axisItemRenderer(this, (f - this.startTime) * this.stepWidth), this.pushAxisItem(f);
this.gridAlpha = z
}
},
choosePeriod: function (a) {
var b = d.getPeriodDuration(this.periods[a].period, this.periods[a].count),
c = Math.ceil(this.timeDifference / b),
e = this.periods;
return this.timeDifference < b && 0 < a ? e[a - 1] : c <= this.gridCountR ? e[a] : a + 1 < e.length ? this.choosePeriod(a + 1) : e[a]
},
getStepWidth: function (a) {
var b;
this.startOnAxis ? (b = this.axisWidth /
(a - 1), 1 == a && (b = this.axisWidth)) : b = this.axisWidth / a;
return b
},
timeZoom: function (a, b) {
this.startTime = a;
this.endTime = b
},
minDuration: function () {
var a = d.extractPeriod(this.minPeriod);
return d.getPeriodDuration(a.period, a.count)
},
checkPeriodChange: function (a, b, c, e, h) {
c = new Date(c);
var f = new Date(e),
g = this.firstDayOfWeek;
e = b;
"DD" == a && (b = 1);
c = d.resetDateToMin(c, a, b, g).getTime();
b = d.resetDateToMin(f, a, b, g).getTime();
return "DD" == a && "hh" != h && c - b <= d.getPeriodDuration(a, e) ? !1 : c != b ? !0 : !1
},
generateDFObject: function () {
this.dateFormatsObject = {};
var a;
for (a = 0; a < this.dateFormats.length; a++) {
var b = this.dateFormats[a];
this.dateFormatsObject[b.period] = b.format
}
}
})
})();
(function () {
var d = window.AmCharts;
d.ValueAxis = d.Class({
inherits: d.AxisBase,
construct: function (a) {
this.cname = "ValueAxis";
this.createEvents("axisChanged", "logarithmicAxisFailed", "axisSelfZoomed", "axisZoomed");
d.ValueAxis.base.construct.call(this, a);
this.dataChanged = !0;
this.stackType = "none";
this.position = "left";
this.unitPosition = "right";
this.recalculateToPercents = this.includeHidden = this.includeGuidesInMinMax = this.integersOnly = !1;
this.durationUnits = {
DD: "d. ",
hh: ":",
mm: ":",
ss: ""
};
this.scrollbar = !1;
this.baseValue =
0;
this.radarCategoriesEnabled = !0;
this.gridType = "polygons";
this.useScientificNotation = !1;
this.axisTitleOffset = 10;
this.minMaxMultiplier = 1;
this.logGridLimit = 2;
this.totalTextOffset = this.treatZeroAs = 0;
this.minPeriod = "ss";
d.applyTheme(this, a, this.cname)
},
updateData: function () {
0 >= this.gridCountR && (this.gridCountR = 1);
this.totals = [];
this.data = this.chart.chartData;
var a = this.chart;
"xy" != a.type && (this.stackGraphs("smoothedLine"), this.stackGraphs("line"), this.stackGraphs("column"), this.stackGraphs("step"));
this.recalculateToPercents &&
this.recalculate();
this.synchronizationMultiplier && this.synchronizeWith ? (d.isString(this.synchronizeWith) && (this.synchronizeWith = a.getValueAxisById(this.synchronizeWith)), this.synchronizeWith && (this.synchronizeWithAxis(this.synchronizeWith), this.foundGraphs = !0)) : (this.foundGraphs = !1, this.getMinMax())
},
draw: function () {
d.ValueAxis.base.draw.call(this);
var a = this.chart,
b = this.set;
d.setCN(a, this.set, "value-axis value-axis-" + this.id);
d.setCN(a, this.labelsSet, "value-axis value-axis-" + this.id);
d.setCN(a,
this.axisLine.axisSet, "value-axis value-axis-" + this.id);
var c = this.type;
"duration" == c && (this.duration = "ss");
!0 === this.dataChanged && (this.updateData(), this.dataChanged = !1);
"date" == c && (this.logarithmic = !1, this.min = this.minRR, this.max = this.maxRR, this.minimumDate && (this.min = this.minimumDate.getTime()), this.maximumDate && (this.max = this.maximumDate.getTime()));
if (this.logarithmic) {
var e = this.treatZeroAs,
h = this.getMin(0, this.data.length - 1);
this.minReal < h && (this.minReal = h);
isNaN(this.minReal) && (this.minReal =
h);
0 < e && 0 === h && (this.minReal = h = e);
if (0 >= h || 0 >= this.minimum) {
this.fire("logarithmicAxisFailed", {
type: "logarithmicAxisFailed",
chart: a
});
return
}
}
this.grid0 = null;
var f, g, k = a.dx,
l = a.dy,
e = !1,
h = this.logarithmic;
if (isNaN(this.min) || isNaN(this.max) || !this.foundGraphs || Infinity == this.min || -Infinity == this.max) e = !0;
else {
var m = this.labelFrequency,
n = this.showFirstLabel,
q = this.showLastLabel,
p = 1;
f = 0;
this.minCalc = this.min;
this.maxCalc = this.max;
this.strictMinMax && (isNaN(this.minimum) || (this.min = this.minimum), isNaN(this.maximum) ||
(this.max = this.maximum));
isNaN(this.minZoom) || (this.min = this.minZoom);
isNaN(this.maxZoom) || (this.max = this.maxZoom);
var r = Math.round((this.maxCalc - this.minCalc) / this.step) + 1,
t;
!0 === h ? (t = Math.log(this.max) * Math.LOG10E - Math.log(this.minReal) * Math.LOG10E, this.stepWidth = this.axisWidth / t, t > this.logGridLimit && (r = Math.ceil(Math.log(this.max) * Math.LOG10E) + 1, f = Math.round(Math.log(this.minReal) * Math.LOG10E), r > this.gridCountR && (p = Math.ceil(r / this.gridCountR)))) : this.stepWidth = this.axisWidth / (this.max - this.min);
var u = 0;
1 > this.step && -1 < this.step && (u = d.getDecimals(this.step));
this.integersOnly && (u = 0);
u > this.maxDecCount && (u = this.maxDecCount);
var z = this.precision;
isNaN(z) || (u = z);
this.max = d.roundTo(this.max, this.maxDecCount);
this.min = d.roundTo(this.min, this.maxDecCount);
g = {};
g.precision = u;
g.decimalSeparator = a.nf.decimalSeparator;
g.thousandsSeparator = a.nf.thousandsSeparator;
this.numberFormatter = g;
var w, x = this.guides,
v = x.length;
if (0 < v) {
var A = this.fillAlpha;
for (g = this.fillAlpha = 0; g < v; g++) {
var B = x[g],
D = NaN,
C = B.above;
isNaN(B.toValue) || (D = this.getCoordinate(B.toValue), w = new this.axisItemRenderer(this, D, "", !0, NaN, NaN, B), this.pushAxisItem(w, C));
var I = NaN;
isNaN(B.value) || (I = this.getCoordinate(B.value), w = new this.axisItemRenderer(this, I, B.label, !0, NaN, (D - I) / 2, B), this.pushAxisItem(w, C));
isNaN(D - I) || (w = new this.guideFillRenderer(this, I, D, B), this.pushAxisItem(w, C), w = w.graphics(), B.graphics = w, B.balloonText && this.addEventListeners(w, B))
}
this.fillAlpha = A
}
this.exponential = !1;
for (g = f; g < r; g += p) x = d.roundTo(this.step * g + this.min,
u), -1 != String(x).indexOf("e") && (this.exponential = !0);
this.duration && (this.maxInterval = d.getMaxInterval(this.max, this.duration));
var u = this.step,
H, x = this.minorGridAlpha;
this.minorGridEnabled && (H = this.getMinorGridStep(u, this.stepWidth * u));
if ("date" == c) this.generateDFObject(), this.timeDifference = this.max - this.min, this.maxTime = this.lastTime = this.max, this.startTime = this.firstTime = this.min, this.parseDatesDraw();
else
for (g = f; g < r; g += p)
if (c = u * g + this.minCalc, h && this.max - this.min > 10 * this.min && (c -= this.min),
c = d.roundTo(c, this.maxDecCount + 1), !this.integersOnly || Math.round(c) == c)
if (isNaN(z) || Number(d.toFixed(c, z)) == c) {
!0 === h && (0 === c && (c = this.minReal), t > this.logGridLimit && (c = Math.pow(10, g)));
w = this.formatValue(c, !1, g);
Math.round(g / m) != g / m && (w = void 0);
if (0 === g && !n || g == r - 1 && !q) w = " ";
f = this.getCoordinate(c);
w = new this.axisItemRenderer(this, f, w, void 0, void 0, void 0, void 0, this.boldLabels);
this.pushAxisItem(w);
if (c == this.baseValue && "radar" != a.type) {
var O, J, A = this.viW,
B = this.viH;
w = this.viX;
v = this.viY;
"H" == this.orientation ?
0 <= f && f <= A + 1 && (O = [f, f, f + k], J = [B, 0, l]) : 0 <= f && f <= B + 1 && (O = [0, A, A + k], J = [f, f, f + l]);
O && (f = d.fitToBounds(2 * this.gridAlpha, 0, 1), f = d.line(a.container, O, J, this.gridColor, f, 1, this.dashLength), f.translate(w, v), this.grid0 = f, a.axesSet.push(f), f.toBack(), d.setCN(a, f, this.bcn + "zero-grid-" + this.id), d.setCN(a, f, this.bcn + "zero-grid"))
}
if (!isNaN(H) && 0 < x && g < r - 1) {
f = this.gridAlpha;
this.gridAlpha = this.minorGridAlpha;
for (w = 1; w < u / H; w++) v = this.getCoordinate(c + H * w), v = new this.axisItemRenderer(this, v, "", !1, 0, 0, !1, !1, 0, !0), this.pushAxisItem(v);
this.gridAlpha = f
}
} t = this.baseValue;
this.min > this.baseValue && this.max > this.baseValue && (t = this.min);
this.min < this.baseValue && this.max < this.baseValue && (t = this.max);
h && t < this.minReal && (t = this.minReal);
this.baseCoord = this.getCoordinate(t);
t = {
type: "axisChanged",
target: this,
chart: a
};
t.min = h ? this.minReal : this.min;
t.max = this.max;
this.fire("axisChanged", t);
this.axisCreated = !0
}
h = this.axisLine.set;
t = this.labelsSet;
this.positionTitle();
"radar" != a.type ? (a = this.viX, H = this.viY, b.translate(a, H), t.translate(a, H)) :
h.toFront();
!this.visible || e ? (b.hide(), h.hide(), t.hide()) : (b.show(), h.show(), t.show());
this.axisY = this.y - this.viY;
this.axisX = this.x - this.viX
},
formatValue: function (a, b, c) {
var e = this.exponential,
h = this.logarithmic,
f = this.numberFormatter,
g = this.chart;
!0 === this.logarithmic && (e = -1 != String(a).indexOf("e") ? !0 : !1);
this.useScientificNotation && (e = !0);
this.usePrefixes && (e = !1);
e ? (b = -1 == String(a).indexOf("e") ? a.toExponential(15) : String(a), c = b.split("e"), b = Number(c[0]), c = Number(c[1]), b = d.roundTo(b, 14), 10 == b && (b =
1, c += 1), b = b + "e" + c, 0 === a && (b = "0"), 1 == a && (b = "1")) : (h && (e = String(a).split("."), e[1] ? (f.precision = e[1].length, 0 > c && (f.precision = Math.abs(c)), b && 1 < a && (f.precision = 0)) : f.precision = -1), b = this.usePrefixes ? d.addPrefix(a, g.prefixesOfBigNumbers, g.prefixesOfSmallNumbers, f, !b) : d.formatNumber(a, f, f.precision));
this.duration && (b = d.formatDuration(a, this.duration, "", this.durationUnits, this.maxInterval, f));
"date" == this.type && (b = d.formatDate(new Date(a), this.currentDateFormat, g));
this.recalculateToPercents ? b += "%" : (f =
this.unit) && (b = "left" == this.unitPosition ? f + b : b + f);
this.labelFunction && (b = this.labelFunction(a, b, this).toString());
return b
},
getMinorGridStep: function (a, b) {
var c = [5, 4, 2];
60 > b && c.shift();
for (var e = Math.floor(Math.log(Math.abs(a)) * Math.LOG10E), h = 0; h < c.length; h++) {
var d = a / c[h],
g = Math.floor(Math.log(Math.abs(d)) * Math.LOG10E);
if (!(0 < Math.abs(e - g)))
if (1 > a) {
if (g = Math.pow(10, -g) * d, g == Math.round(g)) return d
} else if (d == Math.round(d)) return d
}
},
stackGraphs: function (a) {
var b = this.stackType;
"stacked" == b && (b = "regular");
"line" == b && (b = "none");
"100% stacked" == b && (b = "100%");
this.stackType = b;
var c = [],
e = [],
h = [],
f = [],
g, k = this.chart.graphs,
l, m, n, q, p = this.baseValue,
r = !1;
if ("line" == a || "step" == a || "smoothedLine" == a) r = !0;
if (r && ("regular" == b || "100%" == b))
for (q = 0; q < k.length; q++) n = k[q], n.hidden || (m = n.type, n.chart == this.chart && n.valueAxis == this && a == m && n.stackable && (l && (n.stackGraph = l), l = n));
for (l = this.start; l <= this.end; l++) {
var t = 0;
for (q = 0; q < k.length; q++)
if (n = k[q], n.hidden) n.newStack && (h[l] = NaN, e[l] = NaN);
else if (m = n.type, n.chart ==
this.chart && n.valueAxis == this && a == m && n.stackable)
if (m = this.data[l].axes[this.id].graphs[n.id], g = m.values.value, isNaN(g)) n.newStack && (h[l] = NaN, e[l] = NaN);
else {
var u = d.getDecimals(g);
t < u && (t = u);
isNaN(f[l]) ? f[l] = Math.abs(g) : f[l] += Math.abs(g);
f[l] = d.roundTo(f[l], t);
u = n.fillToGraph;
r && u && (u = this.data[l].axes[this.id].graphs[u.id]) && (m.values.open = u.values.value);
"regular" == b && (r && (isNaN(c[l]) ? (c[l] = g, m.values.close = g, m.values.open = this.baseValue) : (isNaN(g) ? m.values.close = c[l] : m.values.close = g + c[l], m.values.open =
c[l], c[l] = m.values.close)), "column" == a && (n.newStack && (h[l] = NaN, e[l] = NaN), m.values.close = g, 0 > g ? (m.values.close = g, isNaN(e[l]) ? m.values.open = p : (m.values.close += e[l], m.values.open = e[l]), e[l] = m.values.close) : (m.values.close = g, isNaN(h[l]) ? m.values.open = p : (m.values.close += h[l], m.values.open = h[l]), h[l] = m.values.close)))
}
}
for (l = this.start; l <= this.end; l++)
for (q = 0; q < k.length; q++)(n = k[q], n.hidden) ? n.newStack && (h[l] = NaN, e[l] = NaN) : (m = n.type, n.chart == this.chart && n.valueAxis == this && a == m && n.stackable && (m = this.data[l].axes[this.id].graphs[n.id],
g = m.values.value, isNaN(g) || (c = g / f[l] * 100, m.values.percents = c, m.values.total = f[l], n.newStack && (h[l] = NaN, e[l] = NaN), "100%" == b && (isNaN(e[l]) && (e[l] = 0), isNaN(h[l]) && (h[l] = 0), 0 > c ? (m.values.close = d.fitToBounds(c + e[l], -100, 100), m.values.open = e[l], e[l] = m.values.close) : (m.values.close = d.fitToBounds(c + h[l], -100, 100), m.values.open = h[l], h[l] = m.values.close)))))
},
recalculate: function () {
var a = this.chart,
b = a.graphs,
c;
for (c = 0; c < b.length; c++) {
var e = b[c];
if (e.valueAxis == this) {
var h = "value";
if ("candlestick" == e.type ||
"ohlc" == e.type) h = "open";
var f, g, k = this.end + 2,
k = d.fitToBounds(this.end + 1, 0, this.data.length - 1),
l = this.start;
0 < l && l--;
var m;
g = this.start;
e.compareFromStart && (g = 0);
if (!isNaN(a.startTime) && (m = a.categoryAxis)) {
var n = m.minDuration(),
n = new Date(a.startTime + n / 2),
q = d.resetDateToMin(new Date(a.startTime), m.minPeriod).getTime();
d.resetDateToMin(new Date(n), m.minPeriod).getTime() > q && g++
}
if (m = a.recalculateFromDate) m = d.getDate(m, a.dataDateFormat, "fff"), g = a.getClosestIndex(a.chartData, "time", m.getTime(), !0, 0, a.chartData.length),
k = a.chartData.length - 1;
for (m = g; m <= k && (g = this.data[m].axes[this.id].graphs[e.id], f = g.values[h], isNaN(f)); m++);
this.recBaseValue = f;
for (h = l; h <= k; h++) {
g = this.data[h].axes[this.id].graphs[e.id];
g.percents = {};
var l = g.values,
p;
for (p in l) g.percents[p] = "percents" != p ? l[p] / f * 100 - 100 : l[p]
}
}
}
},
getMinMax: function () {
var a = !1,
b = this.chart,
c = b.graphs,
e;
for (e = 0; e < c.length; e++) {
var h = c[e].type;
("line" == h || "step" == h || "smoothedLine" == h) && this.expandMinMax && (a = !0)
}
a && (0 < this.start && this.start--, this.end < this.data.length -
1 && this.end++);
"serial" == b.type && (!0 !== b.categoryAxis.parseDates || a || this.end < this.data.length - 1 && this.end++);
a = this.minMaxMultiplier;
this.min = this.getMin(this.start, this.end);
this.max = this.getMax();
this.minRR = this.min;
this.maxRR = this.max;
a = (this.max - this.min) * (a - 1);
this.min -= a;
this.max += a;
a = this.guides.length;
if (this.includeGuidesInMinMax && 0 < a)
for (b = 0; b < a; b++) c = this.guides[b], c.toValue < this.min && (this.min = c.toValue), c.value < this.min && (this.min = c.value), c.toValue > this.max && (this.max = c.toValue), c.value >
this.max && (this.max = c.value);
isNaN(this.minimum) || (this.min = this.minimum);
isNaN(this.maximum) || (this.max = this.maximum);
this.minimumDate && (this.min = this.minimumDate.getTime());
this.maximumDate && (this.max = this.maximumDate.getTime());
this.min > this.max && (a = this.max, this.max = this.min, this.min = a);
isNaN(this.minTemp) || (this.min = this.minTemp);
isNaN(this.maxTemp) || (this.max = this.maxTemp);
this.minReal = this.min;
this.maxReal = this.max;
0 === this.min && 0 === this.max && (this.max = 9);
this.min > this.max && (this.min = this.max -
1);
a = this.min;
b = this.max;
c = this.max - this.min;
e = 0 === c ? Math.pow(10, Math.floor(Math.log(Math.abs(this.max)) * Math.LOG10E)) / 10 : Math.pow(10, Math.floor(Math.log(Math.abs(c)) * Math.LOG10E)) / 10;
isNaN(this.maximum) && isNaN(this.maxTemp) && (this.max = Math.ceil(this.max / e) * e + e);
isNaN(this.minimum) && isNaN(this.minTemp) && (this.min = Math.floor(this.min / e) * e - e);
0 > this.min && 0 <= a && (this.min = 0);
0 < this.max && 0 >= b && (this.max = 0);
"100%" == this.stackType && (this.min = 0 > this.min ? -100 : 0, this.max = 0 > this.max ? 0 : 100);
c = this.max - this.min;
e = Math.pow(10, Math.floor(Math.log(Math.abs(c)) * Math.LOG10E)) / 10;
this.step = Math.ceil(c / this.gridCountR / e) * e;
c = Math.pow(10, Math.floor(Math.log(Math.abs(this.step)) * Math.LOG10E));
c = d.fixStepE(c);
e = Math.ceil(this.step / c);
5 < e && (e = 10);
5 >= e && 2 < e && (e = 5);
this.step = Math.ceil(this.step / (c * e)) * c * e;
1 > c ? (this.maxDecCount = Math.abs(Math.log(Math.abs(c)) * Math.LOG10E), this.maxDecCount = Math.round(this.maxDecCount), this.step = d.roundTo(this.step, this.maxDecCount + 1)) : this.maxDecCount = 0;
this.min = this.step * Math.floor(this.min /
this.step);
this.max = this.step * Math.ceil(this.max / this.step);
0 > this.min && 0 <= a && (this.min = 0);
0 < this.max && 0 >= b && (this.max = 0);
1 < this.minReal && 1 < this.max - this.minReal && (this.minReal = Math.floor(this.minReal));
c = Math.pow(10, Math.floor(Math.log(Math.abs(this.minReal)) * Math.LOG10E));
0 === this.min && (this.minReal = c);
0 === this.min && 1 < this.minReal && (this.minReal = 1);
0 < this.min && 0 < this.minReal - this.step && (this.minReal = this.min + this.step < this.minReal ? this.min + this.step : this.min);
this.logarithmic && (2 < Math.log(b) * Math.LOG10E -
Math.log(a) * Math.LOG10E ? (this.minReal = this.min = Math.pow(10, Math.floor(Math.log(Math.abs(a)) * Math.LOG10E)), this.max = Math.pow(10, Math.ceil(Math.log(Math.abs(b)) * Math.LOG10E))) : (b = Math.pow(10, Math.floor(Math.log(Math.abs(this.min)) * Math.LOG10E)) / 10, a = Math.pow(10, Math.floor(Math.log(Math.abs(a)) * Math.LOG10E)) / 10, b < a && (this.minReal = this.min = 10 * a)))
},
getMin: function (a, b) {
var c, e;
for (e = a; e <= b; e++) {
var h = this.data[e].axes[this.id].graphs,
d;
for (d in h)
if (h.hasOwnProperty(d)) {
var g = this.chart.getGraphById(d);
if (g.includeInMinMax && (!g.hidden || this.includeHidden)) {
isNaN(c) && (c = Infinity);
this.foundGraphs = !0;
g = h[d].values;
this.recalculateToPercents && (g = h[d].percents);
var k;
if (this.minMaxField) k = g[this.minMaxField], k < c && (c = k);
else
for (var l in g) g.hasOwnProperty(l) && "percents" != l && "total" != l && (k = g[l], k < c && (c = k))
}
}
}
return c
},
getMax: function () {
var a, b;
for (b = this.start; b <= this.end; b++) {
var c = this.data[b].axes[this.id].graphs,
e;
for (e in c)
if (c.hasOwnProperty(e)) {
var d = this.chart.getGraphById(e);
if (d.includeInMinMax &&
(!d.hidden || this.includeHidden)) {
isNaN(a) && (a = -Infinity);
this.foundGraphs = !0;
d = c[e].values;
this.recalculateToPercents && (d = c[e].percents);
var f;
if (this.minMaxField) f = d[this.minMaxField], f > a && (a = f);
else
for (var g in d) d.hasOwnProperty(g) && "percents" != g && "total" != g && (f = d[g], f > a && (a = f))
}
}
}
return a
},
dispatchZoomEvent: function (a, b) {
var c = {
type: "axisZoomed",
startValue: a,
endValue: b,
target: this,
chart: this.chart
};
this.fire(c.type, c)
},
zoomOut: function () {
var a = this.chart;
"xy" != a.type && (this.maxZoom = this.minZoom =
void 0, a.updateAfterValueZoom())
},
zoomToValues: function (a, b) {
var c = this.chart;
"xy" == c.type ? (b < a && (c = b, b = a, a = c), a < this.min && (a = this.min), b > this.max && (b = this.max), c = {
type: "axisSelfZoomed"
}, c.chart = this.chart, c.valueAxis = this, c.multiplier = this.axisWidth / Math.abs(this.getCoordinate(b) - this.getCoordinate(a)), c.startValue = a, c.endValue = b, c.position = "V" == this.orientation ? this.reversed ? this.getCoordinate(a) : this.getCoordinate(b) : this.reversed ? this.getCoordinate(b) : this.getCoordinate(a), this.fire(c.type, c)) :
(this.minZoom = a, this.maxZoom = b, c.updateAfterValueZoom())
},
coordinateToValue: function (a) {
if (isNaN(a)) return NaN;
var b = this.axisWidth,
c = this.stepWidth,
e = this.reversed,
d = this.rotate,
f = this.min,
g = this.minReal;
return !0 === this.logarithmic ? Math.pow(10, (d ? !0 === e ? (b - a) / c : a / c : !0 === e ? a / c : (b - a) / c) + Math.log(g) * Math.LOG10E) : !0 === e ? d ? f - (a - b) / c : a / c + f : d ? a / c + f : f - (a - b) / c
},
getCoordinate: function (a) {
if (isNaN(a)) return NaN;
var b = this.rotate,
c = this.reversed,
e = this.axisWidth,
d = this.stepWidth,
f = this.min,
g = this.minReal;
!0 ===
this.logarithmic ? (0 === a && (a = this.treatZeroAs), a = Math.log(a) * Math.LOG10E - Math.log(g) * Math.LOG10E, b = b ? !0 === c ? e - d * a : d * a : !0 === c ? d * a : e - d * a) : b = !0 === c ? b ? e - d * (a - f) : d * (a - f) : b ? d * (a - f) : e - d * (a - f);
b = this.rotate ? b + (this.x - this.viX) : b + (this.y - this.viY);
1E7 < Math.abs(b) && (b = 1E7 * (b / Math.abs(b)));
return Math.round(b)
},
synchronizeWithAxis: function (a) {
this.synchronizeWith = a;
this.listenTo(this.synchronizeWith, "axisChanged", this.handleSynchronization)
},
handleSynchronization: function () {
var a = this.synchronizeWith,
b = a.min,
c = a.max,
a = a.step,
e = this.synchronizationMultiplier;
e && (this.min = b * e, this.max = c * e, this.step = a * e, b = Math.pow(10, Math.floor(Math.log(Math.abs(this.step)) * Math.LOG10E)), b = Math.abs(Math.log(Math.abs(b)) * Math.LOG10E), this.maxDecCount = b = Math.round(b), this.draw())
}
})
})();
(function () {
var d = window.AmCharts;
d.RecAxis = d.Class({
construct: function (a) {
var b = a.chart,
c = a.axisThickness,
e = a.axisColor,
h = a.axisAlpha,
f = a.offset,
g = a.dx,
k = a.dy,
l = a.viX,
m = a.viY,
n = a.viH,
q = a.viW,
p = b.container;
"H" == a.orientation ? (e = d.line(p, [0, q], [0, 0], e, h, c), this.axisWidth = a.width, "bottom" == a.position ? (k = c / 2 + f + n + m - 1, c = l) : (k = -c / 2 - f + m + k, c = g + l)) : (this.axisWidth = a.height, "right" == a.position ? (e = d.line(p, [0, 0, -g], [0, n, n - k], e, h, c), k = m + k, c = c / 2 + f + g + q + l - 1) : (e = d.line(p, [0, 0], [0, n], e, h, c), k = m, c = -c / 2 - f + l));
e.translate(c,
k);
c = b.container.set();
c.push(e);
b.axesSet.push(c);
d.setCN(b, e, a.bcn + "line");
this.axisSet = c;
this.set = e
}
})
})();
(function () {
var d = window.AmCharts;
d.RecItem = d.Class({
construct: function (a, b, c, e, h, f, g, k, l, m, n, q) {
b = Math.round(b);
var p = a.chart;
this.value = c;
void 0 == c && (c = "");
l || (l = 0);
void 0 == e && (e = !0);
var r = p.fontFamily,
t = a.fontSize;
void 0 == t && (t = p.fontSize);
var u = a.color;
void 0 == u && (u = p.color);
void 0 !== n && (u = n);
var z = a.chart.container,
w = z.set();
this.set = w;
var x = a.axisThickness,
v = a.axisColor,
A = a.axisAlpha,
B = a.tickLength,
D = a.gridAlpha,
C = a.gridThickness,
I = a.gridColor,
H = a.dashLength,
O = a.fillColor,
J = a.fillAlpha,
da = a.labelsEnabled;
n = a.labelRotation;
var pa = a.counter,
U = a.inside,
na = a.labelOffset,
qa = a.dx,
ja = a.dy,
Pa = a.orientation,
aa = a.position,
Z = a.previousCoord,
V = a.viH,
sa = a.viW,
ba = a.offset,
ca, ta;
g ? (void 0 !== g.id && (q = p.classNamePrefix + "-guide-" + g.id), da = !0, isNaN(g.tickLength) || (B = g.tickLength), void 0 != g.lineColor && (I = g.lineColor), void 0 != g.color && (u = g.color), isNaN(g.lineAlpha) || (D = g.lineAlpha), isNaN(g.dashLength) || (H = g.dashLength), isNaN(g.lineThickness) || (C = g.lineThickness), !0 === g.inside && (U = !0), isNaN(g.labelRotation) || (n = g.labelRotation),
isNaN(g.fontSize) || (t = g.fontSize), g.position && (aa = g.position), void 0 !== g.boldLabel && (k = g.boldLabel), isNaN(g.labelOffset) || (na = g.labelOffset)) : "" === c && (B = 0);
var ia = "start";
h && (ia = "middle");
var Q = n * Math.PI / 180,
W, wa, G = 0,
y = 0,
ka = 0,
ea = W = 0,
Qa = 0;
"V" == Pa && (n = 0);
var Y;
da && "" !== c && (Y = a.autoWrap && 0 === n ? d.wrappedText(z, c, u, r, t, ia, k, h, 0) : d.text(z, c, u, r, t, ia, k), ia = Y.getBBox(), ea = ia.width, Qa = ia.height);
if ("H" == Pa) {
if (0 <= b && b <= sa + 1 && (0 < B && 0 < A && b + l <= sa + 1 && (ca = d.line(z, [b + l, b + l], [0, B], v, A, C), w.push(ca)), 0 < D && (ta = d.line(z,
[b, b + qa, b + qa], [V, V + ja, ja], I, D, C, H), w.push(ta))), y = 0, G = b, g && 90 == n && U && (G -= t), !1 === e ? (ia = "start", y = "bottom" == aa ? U ? y + B : y - B : U ? y - B : y + B, G += 3, h && (G += h / 2 - 3, ia = "middle"), 0 < n && (ia = "middle")) : ia = "middle", 1 == pa && 0 < J && !g && !m && Z < sa && (e = d.fitToBounds(b, 0, sa), Z = d.fitToBounds(Z, 0, sa), W = e - Z, 0 < W && (wa = d.rect(z, W, a.height, O, J), wa.translate(e - W + qa, ja), w.push(wa))), "bottom" == aa ? (y += V + t / 2 + ba, U ? (0 < n ? (y = V - ea / 2 * Math.sin(Q) - B - 3, G += ea / 2 * Math.cos(Q) - 4 + 2) : 0 > n ? (y = V + ea * Math.sin(Q) - B - 3 + 2, G += -ea * Math.cos(Q) - Qa * Math.sin(Q) - 4) : y -= B +
t + 3 + 3, y -= na) : (0 < n ? (y = V + ea / 2 * Math.sin(Q) + B + 3, G -= ea / 2 * Math.cos(Q)) : 0 > n ? (y = V + B + 3 - ea / 2 * Math.sin(Q) + 2, G += ea / 2 * Math.cos(Q)) : y += B + x + 3 + 3, y += na)) : (y += ja + t / 2 - ba, G += qa, U ? (0 < n ? (y = ea / 2 * Math.sin(Q) + B + 3, G -= ea / 2 * Math.cos(Q)) : y += B + 3, y += na) : (0 < n ? (y = -(ea / 2) * Math.sin(Q) - B - 6, G += ea / 2 * Math.cos(Q)) : y -= B + t + 3 + x + 3, y -= na)), "bottom" == aa ? W = (U ? V - B - 1 : V + x - 1) + ba : (ka = qa, W = (U ? ja : ja - B - x + 1) - ba), f && (G += f), f = G, 0 < n && (f += ea / 2 * Math.cos(Q)), Y && (t = 0, U && (t = ea / 2 * Math.cos(Q)), f + t > sa + 2 || 0 > f)) Y.remove(), Y = null
} else {
0 <= b && b <= V + 1 && (0 < B && 0 < A && b + l <=
V + 1 && (ca = d.line(z, [0, B], [b + l, b + l], v, A, C), w.push(ca)), 0 < D && (ta = d.line(z, [0, qa, sa + qa], [b, b + ja, b + ja], I, D, C, H), w.push(ta)));
ia = "end";
if (!0 === U && "left" == aa || !1 === U && "right" == aa) ia = "start";
y = b - t / 2;
1 == pa && 0 < J && !g && !m && (e = d.fitToBounds(b, 0, V), Z = d.fitToBounds(Z, 0, V), Q = e - Z, wa = d.polygon(z, [0, a.width, a.width, 0], [0, 0, Q, Q], O, J), wa.translate(qa, e - Q + ja), w.push(wa));
y += t / 2;
"right" == aa ? (G += qa + sa + ba, y += ja, U ? (f || (y -= t / 2 + 3), G = G - (B + 4) - na) : (G += B + 4 + x, y -= 2, G += na)) : U ? (G += B + 4 - ba, f || (y -= t / 2 + 3), g && (G += qa, y += ja), G += na) : (G += -B -
x - 4 - 2 - ba, y -= 2, G -= na);
ca && ("right" == aa ? (ka += qa + ba + sa, W += ja, ka = U ? ka - x : ka + x) : (ka -= ba, U || (ka -= B + x)));
f && (y += f);
U = -3;
"right" == aa && (U += ja);
Y && (y > V + 1 || y < U) && (Y.remove(), Y = null)
}
ca && (ca.translate(ka, W), d.setCN(p, ca, a.bcn + "tick"), d.setCN(p, ca, q, !0), g && d.setCN(p, ca, "guide"));
!1 === a.visible && (ca && ca.remove(), Y && (Y.remove(), Y = null));
Y && (Y.attr({
"text-anchor": ia
}), Y.translate(G, y), 0 !== n && Y.rotate(-n, a.chart.backgroundColor), a.allLabels.push(Y), this.label = Y, d.setCN(p, Y, a.bcn + "label"), d.setCN(p, Y, q, !0), g && d.setCN(p,
Y, "guide"));
ta && (d.setCN(p, ta, a.bcn + "grid"), d.setCN(p, ta, q, !0), g && d.setCN(p, ta, "guide"));
wa && (d.setCN(p, wa, a.bcn + "fill"), d.setCN(p, wa, q, !0));
m ? ta && d.setCN(p, ta, a.bcn + "grid-minor") : (a.counter = 0 === pa ? 1 : 0, a.previousCoord = b);
0 === this.set.node.childNodes.length && this.set.remove()
},
graphics: function () {
return this.set
},
getLabel: function () {
return this.label
}
})
})();
(function () {
var d = window.AmCharts;
d.RecFill = d.Class({
construct: function (a, b, c, e) {
var h = a.dx,
f = a.dy,
g = a.orientation,
k = 0;
if (c < b) {
var l = b;
b = c;
c = l
}
var m = e.fillAlpha;
isNaN(m) && (m = 0);
var l = a.chart.container,
n = e.fillColor;
"V" == g ? (b = d.fitToBounds(b, 0, a.viH), c = d.fitToBounds(c, 0, a.viH)) : (b = d.fitToBounds(b, 0, a.viW), c = d.fitToBounds(c, 0, a.viW));
c -= b;
isNaN(c) && (c = 4, k = 2, m = 0);
0 > c && "object" == typeof n && (n = n.join(",").split(",").reverse());
"V" == g ? (g = d.rect(l, a.viW, c, n, m), g.translate(h, b - k + f)) : (g = d.rect(l, c, a.viH, n,
m), g.translate(b - k + h, f));
d.setCN(a.chart, g, "guide-fill");
e.id && d.setCN(a.chart, g, "guide-fill-" + e.id);
this.set = l.set([g])
},
graphics: function () {
return this.set
},
getLabel: function () {}
})
})();
(function () {
var d = window.AmCharts;
d.AmChart = d.Class({
construct: function (a) {
this.theme = a;
this.classNamePrefix = "amcharts";
this.addClassNames = !1;
this.version = "3.14.4";
d.addChart(this);
this.createEvents("dataUpdated", "init", "rendered", "drawn", "failed", "resized");
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.addCodeCredits = this.autoResize = !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.handDrawThickness = 1;
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: .001,
prefix: "m"
}];
this.panEventsEnabled = !0;
this.product = "amcharts";
this.animations = [];
this.balloon = new d.AmBalloon(this.theme);
this.balloon.chart = this;
d.applyTheme(this, a, "AmChart")
},
drawChart: function () {
this.drawBackground();
this.redrawLabels();
this.drawTitles();
this.brr()
},
drawBackground: function () {
d.remove(this.background);
var a = this.container,
b = this.backgroundColor,
c = this.backgroundAlpha,
e = this.set;
d.isModern || 0 !== c || (c = .001);
var h = this.updateWidth();
this.realWidth = h;
var f = this.updateHeight();
this.realHeight = f;
b = d.polygon(a, [0, h - 1, h - 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, h, f), d.setCN(this, b, "bg-image"), this.bgImg = a, e.push(a)
},
drawTitles: function () {
var a = this.titles;
if (d.ifArray(a)) {
var b = 20,
c;
for (c = 0; c < a.length; c++) {
var e = a[c],
e = d.processObject(e, d.Title, this.theme);
if (!1 !== e.enabled) {
var h =
e.color;
void 0 === h && (h = this.color);
var f = e.size;
isNaN(f) && (f = this.fontSize + 2);
isNaN(e.alpha);
var g = this.marginLeft,
h = d.text(this.container, e.text, h, this.fontFamily, f);
h.translate(g + (this.realWidth - this.marginRight - g) / 2, b);
h.node.style.pointerEvents = "none";
d.setCN(this, h, "title");
e.id && d.setCN(this, h, "title-" + e.id);
g = !0;
void 0 !== e.bold && (g = e.bold);
g && h.attr({
"font-weight": "bold"
});
h.attr({
opacity: e.alpha
});
b += f + 6;
this.freeLabelsSet.push(h)
}
}
}
},
write: function (a) {
if (a = "object" != typeof a ? document.getElementById(a) :
a) {
for (; a.firstChild;) a.removeChild(a.firstChild);
this.div = a;
a.style.overflow = "hidden";
a.style.textAlign = "left";
var b = this.chartDiv,
c = this.legendDiv,
e = this.legend,
h = c.style,
f = b.style;
this.measure();
this.previousHeight = this.divRealHeight;
this.previousWidth = this.divRealWidth;
var g, k = document.createElement("div");
g = k.style;
g.position = "relative";
this.containerDiv = k;
k.className = this.classNamePrefix + "-main-div";
b.className = this.classNamePrefix + "-chart-div";
a.appendChild(k);
var l = this.exportConfig;
l && d.AmExport &&
!this.AmExport && (this.AmExport = new d.AmExport(this, l));
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)
if (e = this.addLegend(e, e.divId), e.enabled) switch (e.position) {
case "bottom":
k.appendChild(b);
k.appendChild(c);
break;
case "top":
k.appendChild(c);
k.appendChild(b);
break;
case "absolute":
g.width = a.style.width;
g.height = a.style.height;
h.position = "absolute";
f.position = "absolute";
void 0 !== e.left && (h.left =
e.left + "px");
void 0 !== e.right && (h.right = e.right + "px");
void 0 !== e.top && (h.top = e.top + "px");
void 0 !== e.bottom && (h.bottom = e.bottom + "px");
e.marginLeft = 0;
e.marginRight = 0;
k.appendChild(b);
k.appendChild(c);
break;
case "right":
g.width = a.style.width;
g.height = a.style.height;
h.position = "relative";
f.position = "absolute";
k.appendChild(b);
k.appendChild(c);
break;
case "left":
g.width = a.style.width;
g.height = a.style.height;
h.position = "absolute";
f.position = "relative";
k.appendChild(b);
k.appendChild(c);
break;
case "outside":
k.appendChild(b)
} else k.appendChild(b);
else k.appendChild(b);
this.listenersAdded || (this.addListeners(), this.listenersAdded = !0);
this.initChart()
}
},
createLabelsSet: function () {
d.remove(this.labelsSet);
this.labelsSet = this.container.set();
this.freeLabelsSet.push(this.labelsSet)
},
initChart: function () {
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);
this.renderFix();
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.divIsFixed = d.findIfFixed(this.chartDiv);
this.destroy();
a = 0;
document.attachEvent && !window.opera && (a = 1);
this.dmouseX = this.dmouseY = 0;
var b = document.getElementsByTagName("html")[0];
b && window.getComputedStyle && (b = window.getComputedStyle(b, null)) && (this.dmouseY = d.removePx(b.getPropertyValue("margin-top")), this.dmouseX = d.removePx(b.getPropertyValue("margin-left")));
this.mouseMode =
a;
(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);
a.chart = this;
d.VML || d.SVG ? (a.handDrawn = this.handDrawn, a.handDrawScatter = this.handDrawScatter, a.handDrawThickness = this.handDrawThickness, this.container = a, this.set && this.set.remove(), this.set = a.set(), this.gridSet && this.gridSet.remove(), this.gridSet = a.set(), this.cursorLineSet && this.cursorLineSet.remove(),
this.cursorLineSet = a.set(), this.graphsBehindSet && this.graphsBehindSet.remove(), this.graphsBehindSet = a.set(), this.bulletBehindSet && this.bulletBehindSet.remove(), this.bulletBehindSet = a.set(), this.columnSet && this.columnSet.remove(), this.columnSet = a.set(), this.graphsSet && this.graphsSet.remove(), this.graphsSet = a.set(), this.trendLinesSet && this.trendLinesSet.remove(), this.trendLinesSet = a.set(), this.axesSet && this.axesSet.remove(), this.axesSet = a.set(), this.cursorSet && this.cursorSet.remove(), this.cursorSet =
a.set(), this.scrollbarsSet && this.scrollbarsSet.remove(), this.scrollbarsSet = a.set(), this.bulletSet && this.bulletSet.remove(), this.bulletSet = a.set(), this.freeLabelsSet && this.freeLabelsSet.remove(), this.axesLabelsSet && this.axesLabelsSet.remove(), this.axesLabelsSet = a.set(), this.freeLabelsSet = a.set(), this.balloonsSet && this.balloonsSet.remove(), this.balloonsSet = a.set(), this.zoomButtonSet && this.zoomButtonSet.remove(), this.zbSet && (this.zbSet.remove(), this.zbSet = null), this.zoomButtonSet = a.set(), this.linkSet &&
this.linkSet.remove(), this.linkSet = a.set()) : this.fire("failed", {
type: "failed",
chart: this
})
},
premeasure: function () {
var a = this.div;
if (a) {
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,
h = this.container;
a.clientHeight && (c = a.clientWidth, e = a.clientHeight);
var f = d.removePx(d.getStyle(a, "padding-left")),
g = d.removePx(d.getStyle(a,
"padding-right")),
k = d.removePx(d.getStyle(a, "padding-top")),
l = d.removePx(d.getStyle(a, "padding-bottom"));
isNaN(f) || (c -= f);
isNaN(g) || (c -= g);
isNaN(k) || (e -= k);
isNaN(l) || (e -= l);
f = a.style;
a = f.width;
f = f.height; - 1 != a.indexOf("px") && (c = d.removePx(a)); - 1 != f.indexOf("px") && (e = d.removePx(f));
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",
h && h.setSize(a, f), this.balloon = d.processObject(this.balloon, d.AmBalloon, this.theme), this.balloon.setBounds(2, 2, a - 2, f));
this.balloon.chart = this;
this.realWidth = a;
this.realHeight = f;
this.divRealWidth = c;
this.divRealHeight = e
}
},
destroy: function () {
this.chartDiv.innerHTML = "";
this.clearTimeOuts();
this.legend && 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) {
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()
},
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) {
if (this.container && !1 !== a.enabled) {
a = d.processObject(a, d.Label, this.theme);
var b = a.y,
c = a.text,
e = a.align,
h = a.size,
f = a.color,
g = a.rotation,
k = a.alpha,
l = a.bold,
m = d.toCoordinate(a.x, this.realWidth),
b = d.toCoordinate(b, this.realHeight);
m || (m = 0);
b || (b = 0);
void 0 === f && (f = this.color);
isNaN(h) && (h = this.fontSize);
e || (e = "start");
"left" == e && (e = "start");
"right" == e && (e = "end");
"center" == e && (e = "middle",
g ? b = this.realHeight - b + b / 2 : m = this.realWidth / 2 - m);
void 0 === k && (k = 1);
void 0 === g && (g = 0);
b += h / 2;
c = d.text(this.container, c, f, this.fontFamily, h, e, l, k);
c.translate(m, b);
d.setCN(this, c, "label");
a.id && d.setCN(this, c, "label-" + a.id);
0 !== g && c.rotate(g);
a.url ? (c.setAttr("cursor", "pointer"), c.click(function () {
d.getURL(a.url)
})) : c.node.style.pointerEvents = "none";
this.labelsSet.push(c);
this.labels.push(c)
}
},
addLabel: function (a, b, c, e, d, f, g, k, l, m) {
a = {
x: a,
y: b,
text: c,
align: e,
size: d,
color: f,
alpha: k,
rotation: g,
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,
g = this.chartDiv.style,
c = c.position;
if ("right" == c || "left" == c) {
a -= d;
if (0 > a || isNaN(a)) a = 0;
g.width = a + "px";
"left" == c ? (g.left = d + "px", e.left = "0px") : (g.left = "0px", e.left = a + "px");
b > f && (e.top = (b - f) / 2 + "px")
}
}
return a
},
getTitleHeight: function () {
var a = 0,
b = this.titles,
c = !0;
if (0 < b.length) {
var a = 20,
e;
for (e = 0; e < b.length; e++) {
var d = b[e];
!1 !== d.enabled && (c = !1, d = d.size, isNaN(d) && (d = this.fontSize + 2), a += d + 6)
}
c && (a = 0)
}
return a
},
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 () {},
addListeners: function () {
var a = this,
b = a.chartDiv;
document.addEventListener ? (a.panEventsEnabled && (b.style.msTouchAction = "none"), "ontouchstart" in document.documentElement &&
(b.addEventListener("touchstart", function (b) {
a.handleTouchMove.call(a, b);
a.handleTouchStart.call(a, b)
}, !0), b.addEventListener("touchmove", function (b) {
a.handleTouchMove.call(a, b)
}, !0), b.addEventListener("touchend", function (b) {
a.handleTouchEnd.call(a, b)
}, !0)), b.addEventListener("mousedown", function (b) {
a.mouseIsOver = !0;
a.handleMouseMove.call(a, b);
a.handleMouseDown.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.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 () {
if (!this.skipEvents) {
var a;
this.dispatchDataUpdated && (this.dispatchDataUpdated = !1, a = "dataUpdated", this.fire(a, {
type: a,
chart: this
}));
this.chartCreated || (a = "init", this.fire(a, {
type: a,
chart: this
}));
this.chartRendered || (a = "rendered", this.fire(a, {
type: a,
chart: this
}),
this.chartRendered = !0);
a = "drawn";
this.fire(a, {
type: a,
chart: this
})
}
this.skipEvents = !1
},
validateSize: function () {
var a = this;
a.premeasure();
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) {
clearTimeout(a.legendInitTO);
var c = setTimeout(function () {
b.invalidateSize()
}, 100);
a.timeOuts.push(c);
a.legendInitTO = c
}
"xy" != a.type ? a.marginsUpdated = !1 : (a.marginsUpdated = !0, a.selfZoom = !0);
clearTimeout(a.initTO);
c = setTimeout(function () {
a.initChart()
},
10);
a.timeOuts.push(c);
a.initTO = c
}
a.fire("resized", {
type: "resized",
chart: a
});
a.renderFix();
b && b.renderFix && b.renderFix();
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 = "xy" != this.type ? !1 : !0, this.initChart(a))
},
validateNow: function (a, b) {
this.initTO && clearTimeout(this.initTO);
a && (this.dataChanged = !0);
this.skipEvents = b;
this.chartRendered = !1;
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()
},
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), f.followCursor(!1)) : f.followCursor(!0), a && f.showBalloon(a))
},
handleTouchMove: function (a) {
this.hideBalloon();
var b = this.chartDiv;
a.touches && (a = a.touches.item(0), this.mouseX = a.pageX - d.findPosX(b), this.mouseY = a.pageY - d.findPosY(b))
},
handleMouseOver: function () {
this.outTO && clearTimeout(this.outTO);
d.resetMouseOver();
this.mouseIsOver = !0
},
handleMouseOut: function () {
var a = this;
a.outTO && clearTimeout(a.outTO);
a.outTO = setTimeout(function () {
a.handleMouseOutReal()
}, 10)
},
handleMouseOutReal: function () {
d.resetMouseOver();
this.mouseIsOver = !1
},
handleMouseMove: function (a) {
if (this.mouseIsOver) {
var b = this.chartDiv;
a || (a = window.event);
var c, e;
if (a) {
this.posX = d.findPosX(b);
this.posY = d.findPosY(b);
switch (this.mouseMode) {
case 1:
c = a.clientX - this.posX;
e = a.clientY - this.posY;
if (!this.divIsFixed) {
var b = document.body,
h, f, g, k;
b && (h = b.scrollLeft, g = b.scrollTop);
if (b = document.documentElement) f = b.scrollLeft, k = b.scrollTop;
h = Math.max(h, f);
g = Math.max(g, k);
c += h;
e += g
}
break;
case 0:
this.divIsFixed ? (c = a.clientX - this.posX, e = a.clientY - this.posY) : (c = a.pageX - this.posX, e = a.pageY - this.posY)
}
a.touches && (a = a.touches.item(0), c = a.pageX - this.posX, e = a.pageY - this.posY);
this.mouseX = c - this.dmouseX;
this.mouseY = e - this.dmouseY
}
}
},
handleTouchStart: function (a) {
this.handleMouseDown(a)
},
handleTouchEnd: function (a) {
d.resetMouseOver();
this.handleReleaseOutside(a)
},
handleReleaseOutside: function () {},
handleMouseDown: function (a) {
d.resetMouseOver();
this.mouseIsOver = !0;
a && a.preventDefault && (this.panEventsEnabled ? a.preventDefault() : a.touches || a.preventDefault())
},
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;
c = this.handleLegendEvent;
this.listenTo(a, "showItem", c);
this.listenTo(a, "hideItem", c);
this.listenTo(a, "clickMarker", c);
this.listenTo(a, "rollOverItem", c);
this.listenTo(a, "rollOutItem", c);
this.listenTo(a, "rollOverMarker", c);
this.listenTo(a, "rollOutMarker", c);
this.listenTo(a, "clickLabel", c);
return a
},
removeLegend: function () {
this.legend = void 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, h, f, g) {
a["an_" + b] && d.removeFromArray(this.animations, a["an_" + b]);
c = {
obj: a,
frame: 0,
attribute: b,
from: c,
to: e,
time: h,
effect: f,
suffix: g
};
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 = 1E3 * b.time / d.updateRate,
e = b.frame + 1,
h = b.obj,
f = b.attribute;
if (e <= c) {
b.frame++;
var g = Number(b.from),
k = Number(b.to) - g,
c = d[b.effect](0, e, g, k, c);
0 === k ? (this.animations.splice(a, 1), h.node.style[f] = Number(b.to) + b.suffix) : h.node.style[f] = c + b.suffix
} else h.node.style[f] = Number(b.to) + b.suffix, this.animations.splice(a, 1)
}
},
update: function () {
this.updateAnimations()
},
inIframe: function () {
try {
return window.self !== window.top
} catch (a) {
return !0
}
},
brr: function () {
var a = window.location.hostname.split("."),
b;
2 <= a.length && (b = a[a.length - 2] + "." + a[a.length - 1]);
this.amLink && (a = this.amLink.parentNode) && a.removeChild(this.amLink);
a = this.creditsPosition;
if ("amcharts.com" != b || !0 === this.inIframe()) {
var c = b = 0,
e = this.realWidth,
d = this.realHeight,
f = this.type;
if ("serial" == f || "xy" == f || "gantt" == f) b = this.marginLeftReal, c = this.marginTopReal, e = b + this.plotAreaWidth, d = c + this.plotAreaHeight;
var g = "http://www.amcharts.com/javascript-charts/",
k = "JavaScript charts",
l = "JS chart by amCharts";
"ammap" == this.product && (g = "http://www.ammap.com/javascript-maps/", k = "Interactive JavaScript maps", l = "JS map by amCharts");
f = document.createElement("a");
l = document.createTextNode(l);
f.setAttribute("href", g);
f.setAttribute("title", k);
// f.appendChild(l);
this.chartDiv.appendChild(f);
this.amLink = f;
g = f.style;
g.position = "absolute";
g.textDecoration = "none";
g.color = this.color;
g.fontFamily = this.fontFamily;
g.fontSize =
this.fontSize + "px";
g.opacity = .7;
g.display = "block";
var k = f.offsetWidth,
f = f.offsetHeight,
l = 5 + b,
m = c + 5;
"bottom-left" == a && (l = 5 + b, m = d - f - 3);
"bottom-right" == a && (l = e - k - 5, m = d - f - 3);
"top-right" == a && (l = e - k - 5, m = c + 5);
g.left = l + "px";
g.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.AmGraph = d.Class({
construct: function (a) {
this.cname = "AmGraph";
this.createEvents("rollOverGraphItem", "rollOutGraphItem", "clickGraphItem", "doubleClickGraphItem", "rightClickGraphItem", "clickGraph", "rollOverGraph", "rollOutGraph");
this.type = "line";
this.stackable = !0;
this.columnCount = 1;
this.columnIndex = 0;
this.centerCustomBullets = this.showBalloon = !0;
this.maxBulletSize = 50;
this.minBulletSize = 4;
this.balloonText = "[[value]]";
this.hidden = this.scrollbar = this.animationPlayed = !1;
this.pointPosition = "middle";
this.depthCount = 1;
this.includeInMinMax = !0;
this.negativeBase = 0;
this.visibleInLegend = !0;
this.showAllValueLabels = !1;
this.showBulletsAt = this.showBalloonAt = "close";
this.lineThickness = 1;
this.dashLength = 0;
this.connect = !0;
this.lineAlpha = 1;
this.bullet = "none";
this.bulletBorderThickness = 2;
this.bulletBorderAlpha = 0;
this.bulletAlpha = 1;
this.bulletSize = 8;
this.cornerRadiusTop = this.hideBulletsCount = this.bulletOffset = 0;
this.cursorBulletAlpha = 1;
this.gradientOrientation = "vertical";
this.dy =
this.dx = 0;
this.periodValue = "";
this.clustered = !0;
this.periodSpan = 1;
this.y = this.x = 0;
this.switchable = !0;
this.tcc = this.minDistance = 1;
this.labelRotation = 0;
this.labelAnchor = "auto";
this.labelOffset = 3;
this.bcn = "graph-";
this.dateFormat = "MMM DD, YYYY";
d.applyTheme(this, a, this.cname)
},
draw: function () {
var a = this.chart,
b = a.type;
isNaN(this.precision) || (this.numberFormatter ? this.numberFormatter.precision = this.precision : this.numberFormatter = {
precision: this.precision,
decimalSeparator: a.decimalSeparator,
thousandsSeparator: a.thousandsSeparator
});
var c = a.container;
this.container = c;
this.destroy();
var e = c.set(),
h = c.set();
this.behindColumns ? (a.graphsBehindSet.push(e), a.bulletBehindSet.push(h)) : (a.graphsSet.push(e), a.bulletSet.push(h));
var f = this.bulletAxis;
d.isString(f) && (this.bulletAxis = a.getValueAxisById(f));
this.bulletSet = h;
if (!this.scrollbar) {
var f = a.marginLeftReal,
g = a.marginTopReal;
e.translate(f, g);
h.translate(f, g)
}
c = c.set();
d.remove(this.columnsSet);
e.push(c);
this.set = e;
d.setCN(a, e, "graph-" + this.type);
d.setCN(a, e, "graph-" + this.id);
d.setCN(a,
h, "graph-" + this.type);
d.setCN(a, h, "graph-" + this.id);
this.columnsSet = c;
this.columnsArray = [];
this.ownColumns = [];
this.allBullets = [];
this.animationArray = [];
e = this.labelPosition;
e || (h = this.valueAxis.stackType, e = "top", "column" == this.type && (a.rotate && (e = "right"), "100%" == h || "regular" == h) && (e = "middle"), this.labelPosition = e);
d.ifArray(this.data) && (a = !1, "xy" == b ? this.xAxis.axisCreated && this.yAxis.axisCreated && (a = !0) : this.valueAxis.axisCreated && (a = !0), !this.hidden && a && this.createGraph())
},
createGraph: function () {
var a =
this,
b = a.chart;
a.startAlpha = b.startAlpha;
a.seqAn = b.sequencedAnimation;
a.baseCoord = a.valueAxis.baseCoord;
void 0 === a.fillAlphas && (a.fillAlphas = 0);
a.bulletColorR = a.bulletColor;
void 0 === a.bulletColorR && (a.bulletColorR = a.lineColorR, a.bulletColorNegative = a.negativeLineColor);
void 0 === a.bulletAlpha && (a.bulletAlpha = a.lineAlpha);
b = b.type;
"gantt" == b && (b = "serial");
clearTimeout(a.playedTO);
if (!isNaN(a.valueAxis.min) && !isNaN(a.valueAxis.max)) {
switch (b) {
case "serial":
a.categoryAxis && (a.createSerialGraph(), "candlestick" ==
a.type && 1 > a.valueAxis.minMaxMultiplier && a.positiveClip(a.set));
break;
case "radar":
a.createRadarGraph();
break;
case "xy":
a.createXYGraph(), a.positiveClip(a.set)
}
a.playedTO = setTimeout(function () {
a.setAnimationPlayed.call(a)
}, 500 * a.chart.startDuration)
}
},
setAnimationPlayed: function () {
this.animationPlayed = !0
},
createXYGraph: function () {
var a = [],
b = [],
c = this.xAxis,
e = this.yAxis;
this.pmh = e.viH + 1;
this.pmw = c.viW + 1;
this.pmy = this.pmx = 0;
var d;
for (d = this.start; d <= this.end; d++) {
var f = this.data[d].axes[c.id].graphs[this.id],
g = f.values,
k = g.x,
l = g.y,
g = c.getCoordinate(k),
m = e.getCoordinate(l);
!isNaN(k) && !isNaN(l) && (a.push(g), b.push(m), f.x = g, f.y = m, k = this.createBullet(f, g, m, d), l = this.labelText) && (f = this.createLabel(f, g, m, l), this.positionLabel(g, m, f, k), this.allBullets.push(f))
}
this.drawLineGraph(a, b);
this.launchAnimation()
},
createRadarGraph: function () {
var a = this.valueAxis.stackType,
b = [],
c = [],
e, d, f;
for (f = this.start; f <= this.end; f++) {
var g = this.data[f].axes[this.valueAxis.id].graphs[this.id],
k;
k = "none" == a || "3d" == a ? g.values.value :
g.values.close;
if (isNaN(k)) this.drawLineGraph(b, c), b = [], c = [];
else {
var l = this.y - (this.valueAxis.getCoordinate(k) - this.height),
m = 180 - 360 / (this.end - this.start + 1) * f;
k = l * Math.sin(m / 180 * Math.PI);
l *= Math.cos(m / 180 * Math.PI);
b.push(k);
c.push(l);
var m = this.createBullet(g, k, l, f),
n = this.labelText;
n && (g = this.createLabel(g, k, l, n), this.positionLabel(k, l, g, m), this.allBullets.push(g));
isNaN(e) && (e = k);
isNaN(d) && (d = l)
}
}
b.push(e);
c.push(d);
this.drawLineGraph(b, c);
this.launchAnimation()
},
positionLabel: function (a, b, c,
e) {
var d = "middle",
f = !1,
g = this.labelPosition,
k = c.getBBox();
if (e) {
var l = e.graphDataItem,
m = this.chart.rotate,
n = l.isNegative,
q = this.chart;
b -= k.height / 4 / 2;
switch (g) {
case "top":
g = m ? "top" : n ? "bottom" : "top";
break;
case "right":
g = m ? n ? "left" : "right" : "right";
break;
case "bottom":
g = m ? "bottom" : n ? "top" : "bottom";
break;
case "left":
g = m ? n ? "right" : "left" : "left"
}
var p = l.columnGraphics,
r = 0,
t = 0;
p && (r = p.x, t = p.y);
var u = this.labelOffset;
switch (g) {
case "top":
b -= e.size / 2 + k.height / 2 + u;
break;
case "right":
d = "start";
a += e.size / 2 + u;
break;
case "bottom":
b += e.size / 2 + k.height / 2 + u;
break;
case "left":
d = "end";
a -= e.size / 2 + u;
break;
case "inside":
"column" == this.type && (f = !0, m ? n ? (d = "end", a = r - 3 - u) : (d = "start", a = r + 3 + u) : b = n ? t + 7 + u : t - 10 - u);
break;
case "middle":
"column" == this.type && (f = !0, m ? a -= (a - r) / 2 + u - 3 : b -= (b - t) / 2 + u - 3)
}
"auto" != this.labelAnchor && (d = this.labelAnchor);
c.attr({
"text-anchor": d
});
this.labelRotation && c.rotate(this.labelRotation);
c.translate(a, b);
k = c.getBBox();
!this.showAllValueLabels && p && f && (k.height > l.columnHeight || k.width > l.columnWidth) &&
(c.remove(), c = !1);
if (c && ("serial" == q.type || "gantt" == q.type))
if (m) {
if (0 > b || b > this.height) c.remove(), c = !1
} else if (0 > a || a > this.width) c.remove(), c = !1;
return c
}
},
getGradRotation: function () {
var a = 270;
"horizontal" == this.gradientOrientation && (a = 0);
return this.gradientRotation = a
},
createSerialGraph: function () {
this.dashLengthSwitched = this.fillColorsSwitched = this.lineColorSwitched = void 0;
var a = this.chart,
b = this.id,
c = this.index,
e = this.data,
h = this.chart.container,
f = this.valueAxis,
g = this.type,
k = this.columnWidthReal,
l = this.showBulletsAt;
isNaN(this.columnWidth) || (k = this.columnWidth);
isNaN(k) && (k = .8);
var m = this.useNegativeColorIfDown,
n = this.width,
q = this.height,
p = this.y,
r = this.rotate,
t = this.columnCount,
u = d.toCoordinate(this.cornerRadiusTop, k / 2),
z = this.connect,
w = [],
x = [],
v, A, B, D, C = this.chart.graphs.length,
I, H = this.dx / this.tcc,
O = this.dy / this.tcc,
J = f.stackType,
da = this.start,
pa = this.end,
U = this.scrollbar,
na = "graph-column-";
U && (na = "scrollbar-graph-column-");
var qa = this.categoryAxis,
ja = this.baseCoord,
Pa = this.negativeBase,
aa = this.columnIndex,
Z = this.lineThickness,
V = this.lineAlpha,
sa = this.lineColorR,
ba = this.dashLength,
ca = this.set,
ta, ia = this.getGradRotation(),
Q = this.chart.columnSpacing,
W = qa.cellWidth,
wa = (W * k - t) / t;
Q > wa && (Q = wa);
var G, y, ka, ea = q + 1,
Qa = n + 1,
Y = 0,
qb = 0,
rb, sb, eb, fb, tb = this.fillColorsR,
Ja = this.negativeFillColors,
Ca = this.negativeLineColor,
Wa = this.fillAlphas,
Xa = this.negativeFillAlphas;
"object" == typeof Wa && (Wa = Wa[0]);
"object" == typeof Xa && (Xa = Xa[0]);
var gb = f.getCoordinate(f.min);
f.logarithmic && (gb = f.getCoordinate(f.minReal));
this.minCoord = gb;
this.resetBullet && (this.bullet = "none");
if (!(U || "line" != g && "smoothedLine" != g && "step" != g || (1 == e.length && "step" != g && "none" == this.bullet && (this.bullet = "round", this.resetBullet = !0), !Ja && void 0 == Ca || m))) {
var Ra = Pa;
Ra > f.max && (Ra = f.max);
Ra < f.min && (Ra = f.min);
f.logarithmic && (Ra = f.minReal);
var Ga = f.getCoordinate(Ra),
Ib = f.getCoordinate(f.max);
r ? (ea = q, Qa = Math.abs(Ib - Ga) + 1, rb = q, sb = Math.abs(gb - Ga) + 1, fb = qb = 0, f.reversed ? (Y = 0, eb = Ga) : (Y = Ga, eb = 0)) : (Qa = n, ea = Math.abs(Ib - Ga) + 1, sb = n, rb = Math.abs(gb - Ga) + 1,
eb = Y = 0, f.reversed ? (fb = p, qb = Ga) : fb = Ga + 1)
}
var Ha = Math.round;
this.pmx = Ha(Y);
this.pmy = Ha(qb);
this.pmh = Ha(ea);
this.pmw = Ha(Qa);
this.nmx = Ha(eb);
this.nmy = Ha(fb);
this.nmh = Ha(rb);
this.nmw = Ha(sb);
d.isModern || (this.nmy = this.nmx = 0, this.nmh = this.height);
this.clustered || (t = 1);
k = "column" == g ? (W * k - Q * (t - 1)) / t : W * k;
1 > k && (k = 1);
var Jb = this.fixedColumnWidth;
isNaN(Jb) || (k = Jb);
var K;
if ("line" == g || "step" == g || "smoothedLine" == g) {
if (0 < da) {
for (K = da - 1; - 1 < K; K--)
if (G = e[K], y = G.axes[f.id].graphs[b], ka = y.values.value, !isNaN(ka)) {
da =
K;
break
} if (this.lineColorField)
for (K = da; - 1 < K; K--)
if (G = e[K], y = G.axes[f.id].graphs[b], y.lineColor) {
this.bulletColorSwitched = this.lineColorSwitched = y.lineColor;
break
} if (this.fillColorsField)
for (K = da; - 1 < K; K--)
if (G = e[K], y = G.axes[f.id].graphs[b], y.fillColors) {
this.fillColorsSwitched = y.fillColors;
break
} if (this.dashLengthField)
for (K = da; - 1 < K; K--)
if (G = e[K], y = G.axes[f.id].graphs[b], !isNaN(y.dashLength)) {
this.dashLengthSwitched = y.dashLength;
break
}
}
if (pa < e.length - 1)
for (K = pa + 1; K < e.length; K++)
if (G = e[K], y = G.axes[f.id].graphs[b],
ka = y.values.value, !isNaN(ka)) {
pa = K;
break
}
}
pa < e.length - 1 && pa++;
var R = [],
S = [],
Ka = !1;
if ("line" == g || "step" == g || "smoothedLine" == g)
if (this.stackable && "regular" == J || "100%" == J || this.fillToGraph) Ka = !0;
var Kb = this.noStepRisers,
hb = -1E3,
ib = -1E3,
jb = this.minDistance,
La = !0,
Ya = !1;
for (K = da; K <= pa; K++) {
G = e[K];
y = G.axes[f.id].graphs[b];
y.index = K;
var Za, Ma = NaN;
if (m && void 0 == this.openField)
for (var ub = K + 1; ub < e.length && (!e[ub] || !(Za = e[K + 1].axes[f.id].graphs[b]) || !Za.values || (Ma = Za.values.value, isNaN(Ma))); ub++);
var T, P, M,
fa, la = NaN,
F = NaN,
E = NaN,
N = NaN,
L = NaN,
Na = NaN,
Da = NaN,
Oa = NaN,
Ea = NaN,
ya = NaN,
za = NaN,
ga = NaN,
ha = NaN,
X = NaN,
vb = NaN,
wb = NaN,
ma = NaN,
oa = void 0,
Ia = tb,
Sa = Wa,
Aa = sa,
ua, xa, xb = this.proCandlesticks,
kb = this.topRadius,
$a = this.pattern;
void 0 != y.pattern && ($a = y.pattern);
isNaN(y.alpha) || (Sa = y.alpha);
isNaN(y.dashLength) || (ba = y.dashLength);
var Ba = y.values;
f.recalculateToPercents && (Ba = y.percents);
if (Ba) {
X = this.stackable && "none" != J && "3d" != J ? Ba.close : Ba.value;
if ("candlestick" == g || "ohlc" == g) X = Ba.close, wb = Ba.low, Da = f.getCoordinate(wb),
vb = Ba.high, Ea = f.getCoordinate(vb);
ma = Ba.open;
E = f.getCoordinate(X);
isNaN(ma) || (L = f.getCoordinate(ma), m && (Ma = ma, ma = L = NaN));
m && (void 0 == this.openField ? Za && (Za.isNegative = Ma < X ? !0 : !1, isNaN(Ma) && (y.isNegative = !La)) : y.isNegative = Ma > X ? !0 : !1);
if (!U) switch (this.showBalloonAt) {
case "close":
y.y = E;
break;
case "open":
y.y = L;
break;
case "high":
y.y = Ea;
break;
case "low":
y.y = Da
}
var la = G.x[qa.id],
Ta = this.periodSpan - 1,
ra = Math.floor(W / 2) + Math.floor(Ta * W / 2),
Fa = ra,
lb = 0;
"left" == this.stepDirection && (lb = (2 * W + Ta * W) / 2, la -= lb);
"center" ==
this.stepDirection && (lb = W / 2, la -= lb);
"start" == this.pointPosition && (la -= W / 2 + Math.floor(Ta * W / 2), ra = 0, Fa = Math.floor(W) + Math.floor(Ta * W));
"end" == this.pointPosition && (la += W / 2 + Math.floor(Ta * W / 2), ra = Math.floor(W) + Math.floor(Ta * W), Fa = 0);
if (Kb) {
var yb = this.columnWidth;
isNaN(yb) || (ra *= yb, Fa *= yb)
}
U || (y.x = la); - 1E5 > la && (la = -1E5);
la > n + 1E5 && (la = n + 1E5);
r ? (F = E, N = L, L = E = la, isNaN(ma) && !this.fillToGraph && (N = ja), Na = Da, Oa = Ea) : (N = F = la, isNaN(ma) && !this.fillToGraph && (L = ja));
if (!xb && X < ma || xb && X < ta) y.isNegative = !0, Ja && (Ia = Ja),
Xa && (Sa = Xa), void 0 != Ca && (Aa = Ca);
Ya = !1;
isNaN(X) || (m ? X > Ma ? (La && (Ya = !0), La = !1) : (La || (Ya = !0), La = !0) : y.isNegative = X < Pa ? !0 : !1, ta = X);
void 0 != y.color && (Ia = y.color);
y.fillColors && (Ia = y.fillColors);
switch (g) {
case "line":
if (isNaN(X)) z || (this.drawLineGraph(w, x, R, S), w = [], x = [], R = [], S = []);
else {
if (Math.abs(F - hb) >= jb || Math.abs(E - ib) >= jb) w.push(F), x.push(E), hb = F, ib = E;
ya = F;
za = E;
ga = F;
ha = E;
!Ka || isNaN(L) || isNaN(N) || (R.push(N), S.push(L));
if (Ya || void 0 != y.lineColor || void 0 != y.fillColors || !isNaN(y.dashLength)) this.drawLineGraph(w,
x, R, S), w = [F], x = [E], R = [], S = [], !Ka || isNaN(L) || isNaN(N) || (R.push(N), S.push(L)), m ? La ? (this.lineColorSwitched = sa, this.fillColorsSwitched = tb) : (this.lineColorSwitched = Ca, this.fillColorsSwitched = Ja) : (this.lineColorSwitched = y.lineColor, this.fillColorsSwitched = y.fillColors), this.dashLengthSwitched = y.dashLength;
y.gap && (this.drawLineGraph(w, x, R, S), w = [], x = [], R = [], S = [])
}
break;
case "smoothedLine":
if (isNaN(X)) z || (this.drawSmoothedGraph(w, x, R, S), w = [], x = [], R = [], S = []);
else {
if (Math.abs(F - hb) >= jb || Math.abs(E - ib) >= jb) w.push(F),
x.push(E), hb = F, ib = E;
ya = F;
za = E;
ga = F;
ha = E;
!Ka || isNaN(L) || isNaN(N) || (R.push(N), S.push(L));
void 0 == y.lineColor && void 0 == y.fillColors && isNaN(y.dashLength) || (this.drawSmoothedGraph(w, x, R, S), w = [F], x = [E], R = [], S = [], !Ka || isNaN(L) || isNaN(N) || (R.push(N), S.push(L)), this.lineColorSwitched = y.lineColor, this.fillColorsSwitched = y.fillColors, this.dashLengthSwitched = y.dashLength);
y.gap && (this.drawSmoothedGraph(w, x, R, S), w = [], x = [], R = [], S = [])
}
break;
case "step":
if (!isNaN(X)) {
r ? (isNaN(v) || (w.push(v), x.push(E - ra)), x.push(E -
ra), w.push(F), x.push(E + Fa), w.push(F), !Ka || isNaN(L) || isNaN(N) || (isNaN(B) || (R.push(B), S.push(L - ra)), R.push(N), S.push(L - ra), R.push(N), S.push(L + Fa))) : (isNaN(A) || (x.push(A), w.push(v), x.push(A), w.push(F - ra)), w.push(F - ra), x.push(E), w.push(F + Fa), x.push(E), !Ka || isNaN(L) || isNaN(N) || (isNaN(D) || (R.push(N - ra), S.push(D)), R.push(N - ra), S.push(L), R.push(N + Fa), S.push(L)));
v = F;
A = E;
B = N;
D = L;
ya = F;
za = E;
ga = F;
ha = E;
if (Ya || void 0 != y.lineColor || void 0 != y.fillColors || !isNaN(y.dashLength)) {
var Yb = w[w.length - 2],
Zb = x[x.length - 2];
w.pop();
x.pop();
this.drawLineGraph(w, x, R, S);
w = [Yb];
x = [Zb];
R = [];
S = [];
this.lineColorSwitched = y.lineColor;
this.fillColorsSwitched = y.fillColors;
this.dashLengthSwitched = y.dashLength;
m && (La ? (this.lineColorSwitched = sa, this.fillColorsSwitched = tb) : (this.lineColorSwitched = Ca, this.fillColorsSwitched = Ja))
}
if (Kb || y.gap) v = A = NaN, this.drawLineGraph(w, x, R, S), w = [], x = [], R = [], S = []
} else if (!z) {
if (1 >= this.periodSpan || 1 < this.periodSpan && F - v > ra + Fa) v = A = NaN;
this.drawLineGraph(w, x, R, S);
w = [];
x = [];
R = [];
S = []
}
break;
case "column":
ua =
Aa;
void 0 != y.lineColor && (ua = y.lineColor);
if (!isNaN(X)) {
m || (y.isNegative = X < Pa ? !0 : !1);
y.isNegative && (Ja && (Ia = Ja), void 0 != Ca && (ua = Ca));
var Lb = f.min,
Mb = f.max;
if (!(X < Lb && ma < Lb || X > Mb && ma > Mb)) {
var va;
if (r) {
"3d" == J ? (P = E - (t / 2 - this.depthCount + 1) * (k + Q) + Q / 2 + O * aa, T = N + H * aa, va = aa) : (P = Math.floor(E - (t / 2 - aa) * (k + Q) + Q / 2), T = N, va = 0);
M = k;
ya = F;
za = P + k / 2;
isNaN(N) || N > F && !y.isNegative && (ya = N);
ga = F;
ha = P + k / 2;
P + M > q + va * O && (M = q - P + va * O);
P < va * O && (M += P, P = va * O);
fa = F - N;
var $b = T;
T = d.fitToBounds(T, 0, n);
fa += $b - T;
fa = d.fitToBounds(fa, -T, n -
T + H * aa);
P < q && 0 < M && (oa = new d.Cuboid(h, fa, M, H - a.d3x, O - a.d3y, Ia, Sa, Z, ua, V, ia, u, r, ba, $a, kb, na), y.columnWidth = Math.abs(fa), y.columnHeight = Math.abs(M))
} else {
"3d" == J ? (T = F - (t / 2 - this.depthCount + 1) * (k + Q) + Q / 2 + H * aa, P = L + O * aa, va = aa) : (T = F - (t / 2 - aa) * (k + Q) + Q / 2, P = L, va = 0);
M = k;
ya = T + k / 2;
za = E;
isNaN(L) || L < E && !y.isNegative && (za = L);
ga = T + k / 2;
ha = E;
T + M > n + va * H && (M = n - T + va * H);
T < va * H && (M += T - va * H, T = va * H);
fa = E - L;
var ac = P;
P = d.fitToBounds(P, this.dy, q);
fa += ac - P;
fa = d.fitToBounds(fa, -P + O * aa, q - P);
T < n + aa * H && 0 < M && (this.showOnAxis && (P -= O / 2),
oa = new d.Cuboid(h, M, fa, H - a.d3x, O - a.d3y, Ia, Sa, Z, ua, this.lineAlpha, ia, u, r, ba, $a, kb, na), y.columnHeight = Math.abs(fa), y.columnWidth = Math.abs(M))
}
}
if (oa && (xa = oa.set, d.setCN(a, oa.set, "graph-" + this.type), d.setCN(a, oa.set, "graph-" + this.id), y.className && d.setCN(a, oa.set, y.className, !0), y.columnGraphics = xa, xa.translate(T, P), this.columnsSet.push(xa), (y.url || this.showHandOnHover) && xa.setAttr("cursor", "pointer"), !U)) {
"none" == J && (I = r ? (this.end + 1 - K) * C - c : C * K + c);
"3d" == J && (r ? (I = (this.end + 1 - K) * C - c - 1E3 * this.depthCount,
ya += H * this.columnIndex, ga += H * this.columnIndex, y.y += H * this.columnIndex) : (I = (C - c) * (K + 1) + 1E3 * this.depthCount, za += O * this.columnIndex, ha += O * this.columnIndex, y.y += O * this.columnIndex));
if ("regular" == J || "100%" == J) I = r ? 0 < Ba.value ? (this.end + 1 - K) * C + c : (this.end + 1 - K) * C - c : 0 < Ba.value ? C * K + c : C * K - c;
this.columnsArray.push({
column: oa,
depth: I
});
y.x = r ? P + M / 2 : T + M / 2;
this.ownColumns.push(oa);
this.animateColumns(oa, K, F, N, E, L);
this.addListeners(xa, y)
}
}
break;
case "candlestick":
if (!isNaN(ma) && !isNaN(X)) {
var Ua, ab;
ua = Aa;
void 0 !=
y.lineColor && (ua = y.lineColor);
if (r) {
if (P = E - k / 2, T = N, M = k, P + M > q && (M = q - P), 0 > P && (M += P, P = 0), P < q && 0 < M) {
var zb, Ab;
X > ma ? (zb = [F, Oa], Ab = [N, Na]) : (zb = [N, Oa], Ab = [F, Na]);
!isNaN(Oa) && !isNaN(Na) && E < q && 0 < E && (Ua = d.line(h, zb, [E, E], ua, V, Z), ab = d.line(h, Ab, [E, E], ua, V, Z));
fa = F - N;
oa = new d.Cuboid(h, fa, M, H, O, Ia, Wa, Z, ua, V, ia, u, r, ba, $a, kb, na)
}
} else if (T = F - k / 2, P = L + Z / 2, M = k, T + M > n && (M = n - T), 0 > T && (M += T, T = 0), fa = E - L, T < n && 0 < M) {
xb && X >= ma && (Sa = 0);
var oa = new d.Cuboid(h, M, fa, H, O, Ia, Sa, Z, ua, V, ia, u, r, ba, $a, kb, na),
Bb, Cb;
X > ma ? (Bb = [E, Ea], Cb = [L,
Da
]) : (Bb = [L, Ea], Cb = [E, Da]);
!isNaN(Ea) && !isNaN(Da) && F < n && 0 < F && (Ua = d.line(h, [F, F], Bb, ua, V, Z), ab = d.line(h, [F, F], Cb, ua, V, Z), d.setCN(a, Ua, this.bcn + "line-high"), y.className && d.setCN(a, Ua, y.className, !0), d.setCN(a, ab, this.bcn + "line-low"), y.className && d.setCN(a, ab, y.className, !0))
}
oa && (xa = oa.set, y.columnGraphics = xa, ca.push(xa), xa.translate(T, P - Z / 2), (y.url || this.showHandOnHover) && xa.setAttr("cursor", "pointer"), Ua && (ca.push(Ua), ca.push(ab)), ya = F, za = E, r ? (ha = E, ga = F, "open" == l && (ga = N), "high" == l && (ga = Oa), "low" ==
l && (ga = Na)) : (ha = E, "open" == l && (ha = L), "high" == l && (ha = Ea), "low" == l && (ha = Da), ga = F), U || (y.x = r ? P + M / 2 : T + M / 2, this.animateColumns(oa, K, F, N, E, L), this.addListeners(xa, y)))
}
break;
case "ohlc":
if (!(isNaN(ma) || isNaN(vb) || isNaN(wb) || isNaN(X))) {
var Nb = h.set();
ca.push(Nb);
X < ma && (y.isNegative = !0, void 0 != Ca && (Aa = Ca));
var mb, nb, ob;
if (r) {
var Db = E - k / 2,
Db = d.fitToBounds(Db, 0, q),
Ob = d.fitToBounds(E, 0, q),
Eb = E + k / 2,
Eb = d.fitToBounds(Eb, 0, q);
nb = d.line(h, [N, N], [Db, Ob], Aa, V, Z, ba);
0 < E && E < q && (mb = d.line(h, [Na, Oa], [E, E], Aa, V, Z, ba));
ob =
d.line(h, [F, F], [Ob, Eb], Aa, V, Z, ba);
ha = E;
ga = F;
"open" == l && (ga = N);
"high" == l && (ga = Oa);
"low" == l && (ga = Na)
} else {
var Fb = F - k / 2,
Fb = d.fitToBounds(Fb, 0, n),
Pb = d.fitToBounds(F, 0, n),
Gb = F + k / 2,
Gb = d.fitToBounds(Gb, 0, n);
nb = d.line(h, [Fb, Pb], [L, L], Aa, V, Z, ba);
0 < F && F < n && (mb = d.line(h, [F, F], [Da, Ea], Aa, V, Z, ba));
ob = d.line(h, [Pb, Gb], [E, E], Aa, V, Z, ba);
ha = E;
"open" == l && (ha = L);
"high" == l && (ha = Ea);
"low" == l && (ha = Da);
ga = F
}
ca.push(nb);
ca.push(mb);
ca.push(ob);
d.setCN(a, nb, this.bcn + "stroke-open");
d.setCN(a, ob, this.bcn + "stroke-close");
d.setCN(a,
mb, this.bcn + "stroke");
y.className && d.setCN(a, Nb, y.className, !0);
ya = F;
za = E
}
}
if (!U && !isNaN(X)) {
var Qb = this.hideBulletsCount;
if (this.end - this.start <= Qb || 0 === Qb) {
var Rb = this.createBullet(y, ga, ha, K),
Sb = this.labelText;
if (Sb && Rb) {
var Hb = this.createLabel(y, ga, ha, Sb);
(Hb = this.positionLabel(ya, za, Hb, Rb, M, fa)) && this.allBullets.push(Hb)
}
if ("regular" == J || "100%" == J) {
var Tb = f.totalText;
if (Tb) {
var Va = this.createLabel(y, 0, 0, Tb, f.totalTextColor);
this.allBullets.push(Va);
var Ub = Va.getBBox(),
Vb = Ub.width,
Wb = Ub.height,
bb, cb, pb = f.totalTextOffset,
Xb = f.totals[K];
Xb && Xb.remove();
var db = 0;
"column" != g && (db = this.bulletSize);
r ? (cb = E, bb = 0 > X ? F - Vb / 2 - 2 - db - pb : F + Vb / 2 + 3 + db + pb) : (bb = F, cb = 0 > X ? E + Wb / 2 + db + pb : E - Wb / 2 - 3 - db - pb);
Va.translate(bb, cb);
f.totals[K] = Va;
r ? (0 > cb || cb > q) && Va.remove() : (0 > bb || bb > n) && Va.remove()
}
}
}
}
}
}
if ("line" == g || "step" == g || "smoothedLine" == g) "smoothedLine" == g ? this.drawSmoothedGraph(w, x, R, S) : this.drawLineGraph(w, x, R, S), U || this.launchAnimation();
this.bulletsHidden && this.hideBullets();
this.customBulletsHidden && this.hideCustomBullets()
},
animateColumns: function (a, b) {
var c = this,
e = c.chart.startDuration;
0 < e && !c.animationPlayed && (c.seqAn ? (a.set.hide(), c.animationArray.push(a), e = setTimeout(function () {
c.animate.call(c)
}, e / (c.end - c.start + 1) * (b - c.start) * 1E3), c.timeOuts.push(e)) : c.animate(a))
},
createLabel: function (a, b, c, e, h) {
var f = this.chart,
g = a.labelColor;
g || (g = this.color);
g || (g = f.color);
h && (g = h);
h = this.fontSize;
void 0 === h && (this.fontSize = h = f.fontSize);
var k = this.labelFunction;
e = f.formatString(e, a);
e = d.cleanFromEmpty(e);
k && (e = k(a, e));
a = d.text(this.container,
e, g, f.fontFamily, h);
a.node.style.pointerEvents = "none";
a.translate(b, c);
this.bulletSet.push(a);
return a
},
positiveClip: function (a) {
a.clipRect(this.pmx, this.pmy, this.pmw, this.pmh)
},
negativeClip: function (a) {
a.clipRect(this.nmx, this.nmy, this.nmw, this.nmh)
},
drawLineGraph: function (a, b, c, e) {
var h = this;
if (1 < a.length) {
var f = h.set,
g = h.chart,
k = h.container,
l = k.set(),
m = k.set();
f.push(m);
f.push(l);
var n = h.lineAlpha,
q = h.lineThickness,
f = h.fillAlphas,
p = h.lineColorR,
r = h.negativeLineAlpha;
isNaN(r) && (r = n);
var t = h.lineColorSwitched;
t && (p = t);
var t = h.fillColorsR,
u = h.fillColorsSwitched;
u && (t = u);
var z = h.dashLength;
(u = h.dashLengthSwitched) && (z = u);
var u = h.negativeLineColor,
w = h.negativeFillColors,
x = h.negativeFillAlphas,
v = h.baseCoord;
0 !== h.negativeBase && (v = h.valueAxis.getCoordinate(h.negativeBase), v > h.height && (v = h.height), 0 > v && (v = 0));
n = d.line(k, a, b, p, n, q, z, !1, !0);
d.setCN(g, n, h.bcn + "stroke");
l.push(n);
l.click(function (a) {
h.handleGraphEvent(a, "clickGraph")
}).mouseover(function (a) {
h.handleGraphEvent(a, "rollOverGraph")
}).mouseout(function (a) {
h.handleGraphEvent(a,
"rollOutGraph")
});
void 0 === u || h.useNegativeColorIfDown || (q = d.line(k, a, b, u, r, q, z, !1, !0), d.setCN(g, q, h.bcn + "stroke"), d.setCN(g, q, h.bcn + "stroke-negative"), m.push(q));
if (0 < f || 0 < x)
if (q = a.join(";").split(";"), r = b.join(";").split(";"), n = g.type, "serial" == n ? 0 < c.length ? (c.reverse(), e.reverse(), q = a.concat(c), r = b.concat(e)) : h.rotate ? (r.push(r[r.length - 1]), q.push(v), r.push(r[0]), q.push(v), r.push(r[0]), q.push(q[0])) : (q.push(q[q.length - 1]), r.push(v), q.push(q[0]), r.push(v), q.push(a[0]), r.push(r[0])) : "xy" == n && (b =
h.fillToAxis) && (d.isString(b) && (b = g.getValueAxisById(b)), "H" == b.orientation ? (v = "top" == b.position ? 0 : b.viH, q.push(q[q.length - 1]), r.push(v), q.push(q[0]), r.push(v), q.push(a[0]), r.push(r[0])) : (v = "left" == b.position ? 0 : b.viW, r.push(r[r.length - 1]), q.push(v), r.push(r[0]), q.push(v), r.push(r[0]), q.push(q[0]))), a = h.gradientRotation, 0 < f && (b = d.polygon(k, q, r, t, f, 1, "#000", 0, a), b.pattern(h.pattern, NaN, g.path), d.setCN(g, b, h.bcn + "fill"), l.push(b)), w || void 0 !== u) isNaN(x) && (x = f), w || (w = u), k = d.polygon(k, q, r, w, x, 1, "#000",
0, a), d.setCN(g, k, h.bcn + "fill"), d.setCN(g, k, h.bcn + "fill-negative"), k.pattern(h.pattern, NaN, g.path), m.push(k), m.click(function (a) {
h.handleGraphEvent(a, "clickGraph")
}).mouseover(function (a) {
h.handleGraphEvent(a, "rollOverGraph")
}).mouseout(function (a) {
h.handleGraphEvent(a, "rollOutGraph")
});
h.applyMask(m, l)
}
},
applyMask: function (a, b) {
var c = a.length();
"serial" != this.chart.type || this.scrollbar || (this.positiveClip(b), 0 < c && this.negativeClip(a))
},
drawSmoothedGraph: function (a, b, c, e) {
if (1 < a.length) {
var h = this.set,
f = this.chart,
g = this.container,
k = g.set(),
l = g.set();
h.push(l);
h.push(k);
var m = this.lineAlpha,
n = this.lineThickness,
h = this.dashLength,
q = this.fillAlphas,
p = this.lineColorR,
r = this.fillColorsR,
t = this.negativeLineColor,
u = this.negativeFillColors,
z = this.negativeFillAlphas,
w = this.baseCoord,
x = this.lineColorSwitched;
x && (p = x);
(x = this.fillColorsSwitched) && (r = x);
x = this.negativeLineAlpha;
isNaN(x) && (x = m);
m = new d.Bezier(g, a, b, p, m, n, r, 0, h);
d.setCN(f, m, this.bcn + "stroke");
k.push(m.path);
void 0 !== t && (n = new d.Bezier(g, a,
b, t, x, n, r, 0, h), d.setCN(f, n, this.bcn + "stroke"), d.setCN(f, n, this.bcn + "stroke-negative"), l.push(n.path));
0 < q && (m = a.join(";").split(";"), p = b.join(";").split(";"), n = "", 0 < c.length ? (c.push("M"), e.push("M"), c.reverse(), e.reverse(), m = a.concat(c), p = b.concat(e)) : (this.rotate ? (n += " L" + w + "," + b[b.length - 1], n += " L" + w + "," + b[0]) : (n += " L" + a[a.length - 1] + "," + w, n += " L" + a[0] + "," + w), n += " L" + a[0] + "," + b[0]), c = new d.Bezier(g, m, p, NaN, 0, 0, r, q, h, n), d.setCN(f, c, this.bcn + "fill"), c.path.pattern(this.pattern, NaN, f.path), k.push(c.path),
u || void 0 !== t) && (z || (z = q), u || (u = t), a = new d.Bezier(g, a, b, NaN, 0, 0, u, z, h, n), a.path.pattern(this.pattern, NaN, f.path), d.setCN(f, a, this.bcn + "fill"), d.setCN(f, a, this.bcn + "fill-negative"), l.push(a.path));
this.applyMask(l, k)
}
},
launchAnimation: function () {
var a = this,
b = a.chart.startDuration;
if (0 < b && !a.animationPlayed) {
var c = a.set,
e = a.bulletSet;
d.VML || (c.attr({
opacity: a.startAlpha
}), e.attr({
opacity: a.startAlpha
}));
c.hide();
e.hide();
a.seqAn ? (b = setTimeout(function () {
a.animateGraphs.call(a)
}, a.index * b * 1E3), a.timeOuts.push(b)) :
a.animateGraphs()
}
},
animateGraphs: function () {
var a = this.chart,
b = this.set,
c = this.bulletSet,
e = this.x,
d = this.y;
b.show();
c.show();
var f = a.startDuration,
a = a.startEffect;
b && (this.rotate ? (b.translate(-1E3, d), c.translate(-1E3, d)) : (b.translate(e, -1E3), c.translate(e, -1E3)), b.animate({
opacity: 1,
translate: e + "," + d
}, f, a), c.animate({
opacity: 1,
translate: e + "," + d
}, f, a))
},
animate: function (a) {
var b = this.chart,
c = this.animationArray;
!a && 0 < c.length && (a = c[0], c.shift());
c = d[d.getEffect(b.startEffect)];
b = b.startDuration;
a &&
(this.rotate ? a.animateWidth(b, c) : a.animateHeight(b, c), a.set.show())
},
legendKeyColor: function () {
var a = this.legendColor,
b = this.lineAlpha;
void 0 === a && (a = this.lineColorR, 0 === b && (b = this.fillColorsR) && (a = "object" == typeof b ? b[0] : b));
return a
},
legendKeyAlpha: function () {
var a = this.legendAlpha;
void 0 === a && (a = this.lineAlpha, this.fillAlphas > a && (a = this.fillAlphas), 0 === a && (a = this.bulletAlpha), 0 === a && (a = 1));
return a
},
createBullet: function (a, b, c) {
if (!isNaN(b) && !isNaN(c)) {
var e = this.chart,
h = this.container,
f = this.bulletOffset,
g = this.bulletSize;
isNaN(a.bulletSize) || (g = a.bulletSize);
var k = a.values.value,
l = this.maxValue,
m = this.minValue,
n = this.maxBulletSize,
q = this.minBulletSize;
isNaN(l) || (isNaN(k) || (g = (k - m) / (l - m) * (n - q) + q), m == l && (g = n));
l = g;
this.bulletAxis && (g = a.values.error, isNaN(g) || (k = g), g = this.bulletAxis.stepWidth * k);
g < this.minBulletSize && (g = this.minBulletSize);
this.rotate ? b = a.isNegative ? b - f : b + f : c = a.isNegative ? c + f : c - f;
var p, q = this.bulletColorR;
a.lineColor && (this.bulletColorSwitched = a.lineColor);
this.bulletColorSwitched &&
(q = this.bulletColorSwitched);
a.isNegative && void 0 !== this.bulletColorNegative && (q = this.bulletColorNegative);
void 0 !== a.color && (q = a.color);
var r;
"xy" == e.type && this.valueField && (r = this.pattern, a.pattern && (r = a.pattern));
f = this.bullet;
a.bullet && (f = a.bullet);
var k = this.bulletBorderThickness,
m = this.bulletBorderColorR,
n = this.bulletBorderAlpha,
t = this.bulletAlpha;
m || (m = q);
this.useLineColorForBulletBorder && (m = this.lineColorR);
var u = a.alpha;
isNaN(u) || (t = u);
if ("none" != this.bullet || a.bullet) p = d.bullet(h, f, g, q,
t, k, m, n, l, 0, r, e.path);
if (this.customBullet || a.customBullet) r = this.customBullet, a.customBullet && (r = a.customBullet), r && (p && p.remove(), "function" == typeof r ? (p = new r, p.chart = e, a.bulletConfig && (p.availableSpace = c, p.graph = this, p.graphDataItem = a, p.bulletY = c, a.bulletConfig.minCoord = this.minCoord - c, p.bulletConfig = a.bulletConfig), p.write(h), p = p.set) : (p = h.set(), h = h.image(r, 0, 0, g, g), p.push(h), this.centerCustomBullets && h.translate(-g / 2, -g / 2)));
if (p) {
(a.url || this.showHandOnHover) && p.setAttr("cursor", "pointer");
if ("serial" == e.type || "gantt" == e.type)
if (-.5 > b - 0 || b - 0 > this.width || c < -g / 2 || c - 0 > this.height) p.remove(), p = null;
p && (this.bulletSet.push(p), p.translate(b, c), this.addListeners(p, a), this.allBullets.push(p));
a.bx = b;
a.by = c;
d.setCN(e, p, this.bcn + "bullet");
a.className && d.setCN(e, p, a.className, !0)
}
p ? (p.size = g || 0, a.bulletGraphics = p) : p = {
size: 0
};
p.graphDataItem = a;
return p
}
},
showBullets: function () {
var a = this.allBullets,
b;
this.bulletsHidden = !1;
for (b = 0; b < a.length; b++) a[b].show()
},
hideBullets: function () {
var a = this.allBullets,
b;
this.bulletsHidden = !0;
for (b = 0; b < a.length; b++) a[b].hide()
},
showCustomBullets: function () {
var a = this.allBullets,
b;
this.customBulletsHidden = !1;
for (b = 0; b < a.length; b++) a[b].graphDataItem.customBullet && a[b].show()
},
hideCustomBullets: function () {
var a = this.allBullets,
b;
this.customBulletsHidden = !0;
for (b = 0; b < a.length; b++) a[b].graphDataItem.customBullet && a[b].hide()
},
addListeners: function (a, b) {
var c = this;
a.mouseover(function (a) {
c.handleRollOver(b, a)
}).mouseout(function (a) {
c.handleRollOut(b, a)
}).touchend(function (a) {
c.handleRollOver(b,
a);
c.chart.panEventsEnabled && c.handleClick(b, a)
}).touchstart(function (a) {
c.handleRollOver(b, a)
}).click(function (a) {
c.handleClick(b, a)
}).dblclick(function (a) {
c.handleDoubleClick(b, a)
}).contextmenu(function (a) {
c.handleRightClick(b, a)
})
},
handleRollOver: function (a, b) {
if (a) {
var c = this.chart,
e = {
type: "rollOverGraphItem",
item: a,
index: a.index,
graph: this,
target: this,
chart: this.chart,
event: b
};
this.fire("rollOverGraphItem", e);
c.fire("rollOverGraphItem", e);
clearTimeout(c.hoverInt);
e = this.showBalloon;
!c.chartCursor ||
"serial" != c.type && "gantt" != c.type || (e = !1, !c.chartCursor.valueBalloonsEnabled && this.showBalloon && (e = !0));
if (e) {
var e = c.formatString(this.balloonText, a, !0),
h = this.balloonFunction;
h && (e = h(a, a.graph));
e = d.cleanFromEmpty(e);
h = c.getBalloonColor(this, a);
c.balloon.showBullet = !1;
c.balloon.pointerOrientation = "V";
var f = a.x,
g = a.y;
c.rotate && (f = a.y, g = a.x);
"" !== e ? c.showBalloon(e, h, !0, f + c.marginLeftReal, g + c.marginTopReal) : this.chart.hideBalloonReal()
} else this.chart.hideBalloonReal()
}
this.handleGraphEvent(b, "rollOverGraph")
},
handleRollOut: function (a, b) {
this.chart.hideBalloon();
if (a) {
var c = {
type: "rollOutGraphItem",
item: a,
index: a.index,
graph: this,
target: this,
chart: this.chart,
event: b
};
this.fire("rollOutGraphItem", c);
this.chart.fire("rollOutGraphItem", c)
}
this.handleGraphEvent(b, "rollOutGraph")
},
handleClick: function (a, b) {
if (a) {
var c = {
type: "clickGraphItem",
item: a,
index: a.index,
graph: this,
target: this,
chart: this.chart,
event: b
};
this.fire("clickGraphItem", c);
this.chart.fire("clickGraphItem", c);
d.getURL(a.url, this.urlTarget)
}
this.handleGraphEvent(b,
"clickGraph")
},
handleGraphEvent: function (a, b) {
var c = {
type: b,
graph: this,
target: this,
chart: this.chart,
event: a
};
this.fire(b, c);
this.chart.fire(b, c)
},
handleRightClick: function (a, b) {
if (a) {
var c = {
type: "rightClickGraphItem",
item: a,
index: a.index,
graph: this,
target: this,
chart: this.chart,
event: b
};
this.fire("rightClickGraphItem", c);
this.chart.fire("rightClickGraphItem", c)
}
},
handleDoubleClick: function (a, b) {
if (a) {
var c = {
type: "doubleClickGraphItem",
item: a,
index: a.index,
graph: this,
target: this,
chart: this.chart,
event: b
};
this.fire("doubleClickGraphItem", c);
this.chart.fire("doubleClickGraphItem", c)
}
},
zoom: function (a, b) {
this.start = a;
this.end = b;
this.draw()
},
changeOpacity: function (a) {
var b = this.set;
b && b.setAttr("opacity", a);
if (b = this.ownColumns) {
var c;
for (c = 0; c < b.length; c++) {
var e = b[c].set;
e && e.setAttr("opacity", a)
}
}(b = this.bulletSet) && b.setAttr("opacity", a)
},
destroy: function () {
d.remove(this.set);
d.remove(this.bulletSet);
var a = this.timeOuts;
if (a) {
var b;
for (b = 0; b < a.length; b++) clearTimeout(a[b])
}
this.timeOuts = []
}
})
})();
(function () {
var d = window.AmCharts;
d.ChartCursor = d.Class({
construct: function (a) {
this.cname = "ChartCursor";
this.createEvents("changed", "zoomed", "onHideCursor", "draw", "selected", "moved");
this.enabled = !0;
this.cursorAlpha = 1;
this.selectionAlpha = .2;
this.cursorColor = "#CC0000";
this.categoryBalloonAlpha = 1;
this.color = "#FFFFFF";
this.type = "cursor";
this.zoomed = !1;
this.zoomable = !0;
this.pan = !1;
this.categoryBalloonDateFormat = "MMM DD, YYYY";
this.categoryBalloonEnabled = this.valueBalloonsEnabled = !0;
this.rolledOver = !1;
this.cursorPosition = "middle";
this.bulletsEnabled = this.skipZoomDispatch = !1;
this.bulletSize = 8;
this.selectWithoutZooming = this.oneBalloonOnly = !1;
this.graphBulletSize = 1.7;
this.animationDuration = .3;
this.zooming = !1;
this.adjustment = 0;
this.avoidBalloonOverlapping = !0;
this.leaveCursor = !1;
d.applyTheme(this, a, this.cname)
},
draw: function () {
this.destroy();
var a = this.chart,
b = a.container;
this.rotate = a.rotate;
this.container = b;
b = b.set();
b.translate(this.x, this.y);
this.set = b;
a.cursorSet.push(b);
b = new d.AmBalloon;
b.className =
"category";
b.chart = a;
this.categoryBalloon = b;
d.copyProperties(a.balloon, b);
b.cornerRadius = 0;
b.shadowAlpha = 0;
b.borderThickness = 1;
b.borderAlpha = 1;
b.showBullet = !1;
var c = this.categoryBalloonColor;
void 0 === c && (c = this.cursorColor);
b.fillColor = c;
b.balloonColor = c;
b.fillAlpha = this.categoryBalloonAlpha;
b.borderColor = c;
b.color = this.color;
c = this.valueLineAxis;
d.isString(c) && (c = a.getValueAxisById(c));
c || (c = a.valueAxes[0]);
this.valueLineAxis = c;
this.valueLineBalloonEnabled && (this.vaBalloon = c = new d.AmBalloon, d.copyProperties(b,
c), c.animationDuration = 0, this.rotate || (c.pointerOrientation = "H"));
this.rotate && (b.pointerOrientation = "H");
this.extraWidth = 0;
this.prevX = [];
this.prevY = [];
this.prevTX = [];
this.prevTY = [];
if (this.valueBalloonsEnabled)
for (b = 0; b < a.graphs.length; b++) c = new d.AmBalloon, c.className = a.graphs[b].id, c.chart = a, d.copyProperties(a.balloon, c), a.graphs[b].valueBalloon = c;
"cursor" == this.type ? this.createCursor() : this.createCrosshair()
},
updateData: function () {
var a = this.chart;
this.data = a.chartData;
this.firstTime = a.firstTime;
this.lastTime = a.lastTime
},
createCursor: function () {
var a = this.chart,
b = this.cursorAlpha,
c = a.categoryAxis,
e = this.categoryBalloon,
h, f, g, k;
g = a.dx;
k = a.dy;
var l = this.width,
m = this.height,
n = a.rotate;
e.pointerWidth = c.tickLength;
n ? (h = [0, l, l + g], f = [0, 0, k], g = [g, 0, 0], k = [k, 0, m]) : (h = [g, 0, 0], f = [k, 0, m], g = [0, l, l + g], k = [0, 0, k]);
h = d.line(this.container, h, f, this.cursorColor, b, 1);
d.setCN(a, h, "cursor-line");
this.line = h;
h.node.style.pointerEvents = "none";
(f = this.fullRectSet) ? (f.push(h), f.translate(this.x, this.y)) : this.set.push(h);
this.valueLineEnabled && (h = this.valueLineAlpha, isNaN(h) || (b = h), b = d.line(this.container, g, k, this.cursorColor, b, 1), b.node.style.pointerEvents = "none", d.setCN(a, b, "cursor-value-line"), this.vLine = b, this.set.push(b));
this.setBalloonBounds(e, c, n);
(a = this.vaBalloon) && this.setBalloonBounds(a, this.valueLineAxis, !n);
this.hideCursor()
},
createCrosshair: function () {
var a = this.cursorAlpha,
b = this.container,
c = d.line(b, [0, 0], [0, this.height], this.cursorColor, a, 1),
a = d.line(b, [0, this.width], [0, 0], this.cursorColor, a, 1);
d.setCN(this.chart, c, "cursor-line");
d.setCN(this.chart, a, "cursor-line");
this.set.push(c);
this.set.push(a);
this.vLine = c;
this.hLine = a;
this.hideCursor()
},
update: function () {
var a = this.chart;
if (a.mouseIsOver) {
var b = a.mouseX - this.x,
c = a.mouseY - this.y; - .5 < b && b < this.width + 1 && 0 < c && c < this.height ? (this.drawing ? this.rolledOver || a.setMouseCursor("crosshair") : this.pan && (this.rolledOver || a.setMouseCursor("move")), this.rolledOver = !0, (this.valueLineEnabled || this.valueLineBalloonEnabled) && this.updateVLine(b, c), this.setPosition()) :
this.rolledOver && (this.handleMouseOut(), this.rolledOver = !1)
} else this.rolledOver && (this.handleMouseOut(), this.rolledOver = !1)
},
updateVLine: function (a, b) {
var c = this.vLine,
e = this.vaBalloon;
if ((c || e) && !this.panning && !this.drawing) {
c && c.show();
var d = this.valueLineAxis,
f, g = this.rotate;
g ? (c && c.translate(a, 0), d && (f = d.coordinateToValue(a)), c = a) : (c && c.translate(0, b), d && (f = d.coordinateToValue(b)), c = b - 1);
if (e && !isNaN(f) && this.prevLineValue != f) {
var k = d.formatValue(f, !0);
this.setBalloonPosition(e, d, c, !g);
e.showBalloon(k)
}
this.prevLineValue =
f
}
},
getMousePosition: function () {
var a, b = this.width,
c = this.height;
a = this.chart;
this.rotate ? (a = a.mouseY - this.y, 0 > a && (a = 0), a > c && (a = c)) : (a = a.mouseX - this.x - 1, 0 > a && (a = 0), a > b && (a = b));
return a
},
updateCrosshair: function () {
var a = this.chart,
b = a.mouseX - this.x,
c = a.mouseY - this.y,
e = this.vLine,
h = this.hLine,
b = d.fitToBounds(b, 0, this.width),
c = d.fitToBounds(c, 0, this.height);
0 < this.cursorAlpha && (e.show(), h.show(), e.translate(b, 0), h.translate(0, c));
this.zooming && (a.hideXScrollbar && (b = NaN), a.hideYScrollbar && (c = NaN), this.updateSelectionSize(b,
c));
this.fireMoved();
a.mouseIsOver || this.zooming || this.hideCursor()
},
fireMoved: function () {
var a = this.chart,
b = {
type: "moved",
target: this
};
b.chart = a;
b.zooming = this.zooming;
b.x = a.mouseX - this.x;
b.y = a.mouseY - this.y;
this.fire("moved", b)
},
updateSelectionSize: function (a, b) {
d.remove(this.selection);
var c = this.selectionPosX,
e = this.selectionPosY,
h = 0,
f = 0,
g = this.width,
k = this.height;
isNaN(a) || (c > a && (h = a, g = c - a), c < a && (h = c, g = a - c), c == a && (h = a, g = 0), g += this.extraWidth, h -= this.extraWidth / 2);
isNaN(b) || (e > b && (f = b, k = e - b),
e < b && (f = e, k = b - e), e == b && (f = b, k = 0), k += this.extraWidth, f -= this.extraWidth / 2);
0 < g && 0 < k && (c = d.rect(this.container, g, k, this.cursorColor, this.selectionAlpha), d.setCN(this.chart, c, "cursor-selection"), c.translate(h + this.x, f + this.y), this.selection = c)
},
arrangeBalloons: function () {
var a = this.valueBalloons,
b = this.x,
c = this.y,
e = this.height + c;
a.sort(this.compareY);
var d;
for (d = 0; d < a.length; d++) {
var f = a[d].balloon;
f.setBounds(b, c, b + this.width, e);
f.prevX = this.prevX[d];
f.prevY = this.prevY[d];
f.prevTX = this.prevTX[d];
f.prevTY =
this.prevTY[d];
f.draw();
e = f.yPos - 3
}
this.arrangeBalloons2()
},
compareY: function (a, b) {
return a.yy < b.yy ? 1 : -1
},
arrangeBalloons2: function () {
var a = this.valueBalloons;
a.reverse();
var b, c = this.x,
e, d, f = a.length;
for (d = 0; d < f; d++) {
var g = a[d].balloon;
b = g.bottom;
var k = g.bottom - g.yPos,
l = f - d - 1;
0 < d && b - k < e + 3 && (g.setBounds(c, e + 3, c + this.width, e + k + 3), g.prevX = this.prevX[l], g.prevY = this.prevY[l], g.prevTX = this.prevTX[l], g.prevTY = this.prevTY[l], g.draw());
g.set && g.set.show();
this.prevX[l] = g.prevX;
this.prevY[l] = g.prevY;
this.prevTX[l] =
g.prevTX;
this.prevTY[l] = g.prevTY;
e = g.bottom
}
},
showBullets: function () {
d.remove(this.allBullets);
var a = this.container,
b = a.set();
this.set.push(b);
this.set.show();
this.allBullets = b;
var b = this.chart.graphs,
c;
for (c = 0; c < b.length; c++) {
var e = b[c];
if (!e.hidden && e.balloonText) {
var h = this.data[this.index].axes[e.valueAxis.id].graphs[e.id],
f = h.y;
if (!isNaN(f)) {
var g, k;
g = h.x;
this.rotate ? (k = f, f = g) : k = g;
e = d.circle(a, this.bulletSize / 2, this.chart.getBalloonColor(e, h, !0), e.cursorBulletAlpha);
e.translate(k, f);
this.allBullets.push(e)
}
}
}
},
destroy: function () {
this.clear();
d.remove(this.selection);
this.selection = null;
var a = this.categoryBalloon;
a && a.destroy();
(a = this.vaBalloon) && a.destroy();
this.destroyValueBalloons();
d.remove(this.set)
},
clear: function () {},
destroyValueBalloons: function () {
var a = this.valueBalloons;
if (a) {
var b;
for (b = 0; b < a.length; b++) a[b].balloon.hide()
}
},
zoom: function (a, b, c, e) {
var h = this.chart;
this.destroyValueBalloons();
this.zooming = !1;
var f;
this.rotate ? this.selectionPosY = f = h.mouseY : this.selectionPosX = f = h.mouseX;
this.start =
a;
this.end = b;
this.startTime = c;
this.endTime = e;
this.zoomed = !0;
e = h.categoryAxis;
f = this.rotate;
b = this.width;
c = this.height;
a = e.stepWidth;
if (this.fullWidth) {
var g = 1;
e.parseDates && !e.equalSpacing && (g = e.minDuration());
f ? this.extraWidth = c = a * g : (this.extraWidth = b = a * g, this.categoryBalloon.minWidth = b);
this.line && this.line.remove();
this.line = d.rect(this.container, b, c, this.cursorColor, this.cursorAlpha, 0);
this.line.node.style.pointerEvents = "none";
d.setCN(h, this.line, "cursor-fill");
this.fullRectSet && this.fullRectSet.push(this.line)
}
this.stepWidth =
a;
this.tempVal = this.valueBalloonsEnabled;
this.valueBalloonsEnabled = !1;
this.setPosition();
this.valueBalloonsEnabled = this.tempVal;
this.hideCursor()
},
hideObj: function (a) {
a && a.hide()
},
hideCursor: function (a) {
void 0 === a && (a = !0);
this.leaveCursor || (this.hideObj(this.set), this.hideObj(this.categoryBalloon), this.hideObj(this.line), this.hideObj(this.vLine), this.hideObj(this.hLine), this.hideObj(this.vaBalloon), this.hideObj(this.allBullets), this.destroyValueBalloons(), this.selectWithoutZooming || d.remove(this.selection),
this.previousIndex = NaN, a && this.fire("onHideCursor", {
type: "onHideCursor",
chart: this.chart,
target: this
}), this.drawing || this.chart.setMouseCursor("auto"), this.normalizeBulletSize())
},
setPosition: function (a, b, c) {
void 0 === b && (b = !0);
if ("cursor" == this.type) {
if (this.tempPosition = NaN, d.ifArray(this.data)) isNaN(a) && (a = this.getMousePosition()), (a != this.previousMousePosition || !0 === this.zoomed || this.oneBalloonOnly) && !isNaN(a) && ("mouse" == this.cursorPosition && (this.tempPosition = a), isNaN(c) && (c = this.chart.categoryAxis.xToIndex(a)),
c != this.previousIndex || this.zoomed || "mouse" == this.cursorPosition || this.oneBalloonOnly) && (this.updateCursor(c, b), this.zoomed = !1), this.previousMousePosition = a
} else this.updateCrosshair()
},
normalizeBulletSize: function () {
var a = this.resizedBullets;
if (a)
for (var b = 0; b < a.length; b++) {
var c = a[b],
e = c.bulletGraphics;
e && (e.translate(c.bx, c.by, 1), c = c.graph, isNaN(this.graphBulletAlpha) || (e.setAttr("fill-opacity", c.bulletAlpha), e.setAttr("stroke-opacity", c.bulletBorderAlpha)))
}
},
updateCursor: function (a, b) {
var c =
this.chart,
e = this.fullWidth,
h = c.mouseX - this.x,
f = c.mouseY - this.y;
this.drawingNow && (d.remove(this.drawingLine), this.drawingLine = d.line(this.container, [this.x + this.drawStartX, this.x + h], [this.y + this.drawStartY, this.y + f], this.cursorColor, 1, 1));
if (this.enabled) {
void 0 === b && (b = !0);
this.index = a += this.adjustment;
var g = c.categoryAxis,
k = c.dx,
l = c.dy,
m = this.x + 1,
n = this.y + 1,
q = this.width,
p = this.height,
r = this.data[a];
this.fireMoved();
if (r) {
var t = r.x[g.id],
u = c.rotate,
z = this.stepWidth,
w = this.categoryBalloon,
x = this.firstTime,
v = this.lastTime,
A = this.cursorPosition,
B = this.zooming,
D = this.panning,
C = c.graphs;
if (c.mouseIsOver || B || D || this.forceShow)
if (this.forceShow = !1, D) {
var k = this.panClickPos,
c = this.panClickEndTime,
B = this.panClickStartTime,
I = this.panClickEnd,
m = this.panClickStart,
h = (u ? k - f : k - h) / z;
if (!g.parseDates || g.equalSpacing) h = Math.round(h);
0 !== h && (k = {
type: "zoomed",
target: this
}, k.chart = this.chart, g.parseDates && !g.equalSpacing ? (c + h > v && (h = v - c), B + h < x && (h = x - B), k.start = Math.round(B + h), k.end = Math.round(c + h), this.fire(k.type, k)) :
I + h >= this.data.length || 0 > m + h || (k.start = m + h, k.end = I + h, this.fire(k.type, k)))
} else {
"start" == A ? t -= g.cellWidth / 2 : "mouse" == A && (c.mouseIsOver ? t = u ? f - 2 : h - 2 : isNaN(this.tempPosition) || (t = this.tempPosition - 2));
if (u) {
if (0 > t)
if (B) t = 0;
else {
this.hideCursor();
return
} if (t > p + 1)
if (B) t = p + 1;
else {
this.hideCursor();
return
}
} else {
if (0 > t)
if (B) t = 0;
else {
this.hideCursor();
return
} if (t > q)
if (B) t = q;
else {
this.hideCursor();
return
}
}
x = this.line;
0 < this.cursorAlpha && (u ? (v = 0, z = t + l, e && (z -= g.cellWidth / 2)) : (v = t, z = 0, e && (v -= g.cellWidth / 2)), A =
this.animationDuration, 0 < A && !this.zooming ? isNaN(this.previousX) ? x.translate(v, z) : (x.translate(this.previousX, this.previousY), x.animate({
translate: v + "," + z
}, A, "easeOutSine")) : x.translate(v, z), this.previousX = v, this.previousY = z, x.show());
this.linePos = u ? t + l : t;
B && (e && x.hide(), u ? this.updateSelectionSize(NaN, t) : this.updateSelectionSize(t, NaN));
z = !0;
B && (z = !1);
this.categoryBalloonEnabled && z ? (this.setBalloonPosition(w, g, t, u), (x = this.categoryBalloonFunction) ? w.showBalloon(x(r.category)) : g.parseDates ? (g = d.formatDate(r.category,
this.categoryBalloonDateFormat, c), -1 != g.indexOf("fff") && (g = d.formatMilliseconds(g, r.category)), w.showBalloon(g)) : w.showBalloon(d.fixNewLines(r.category))) : w.hide();
C && this.bulletsEnabled && this.showBullets();
if (this.oneBalloonOnly) {
t = Infinity;
for (g = 0; g < C.length; g++) w = C[g], w.showBalloon && !w.hidden && w.balloonText && (x = r.axes[w.valueAxis.id].graphs[w.id], v = x.y, isNaN(v) || (u ? Math.abs(h - v) < t && (t = Math.abs(h - v), I = w) : Math.abs(f - v) < t && (t = Math.abs(f - v), I = w)));
this.mostCloseGraph && (I = this.mostCloseGraph)
}
if (a !=
this.previousIndex || I != this.previousMostCloseGraph)
if (this.normalizeBulletSize(), this.destroyValueBalloons(), this.resizedBullets = [], C && this.valueBalloonsEnabled && z && c.balloon.enabled) {
this.valueBalloons = t = [];
for (g = 0; g < C.length; g++)
if (w = C[g], v = NaN, (!this.oneBalloonOnly || w == I) && w.showBalloon && !w.hidden && w.balloonText && ("step" == w.type && "left" == w.stepDirection && (r = this.data[a + 1]), r)) {
if (x = r.axes[w.valueAxis.id].graphs[w.id]) v = x.y;
if (this.showNextAvailable && isNaN(v) && a + 1 < this.data.length)
for (z = a + 1; z < this.data.length; z++)
if (e =
this.data[z])
if (x = e.axes[w.valueAxis.id].graphs[w.id], v = x.y, !isNaN(v)) break;
if (!isNaN(v)) {
e = x.x;
l = !0;
if (u) {
if (z = v, 0 > e || e > p) l = !1
} else if (z = e, e = v, 0 > z || z > q + k + 1) l = !1;
l && (l = this.graphBulletSize, A = this.graphBulletAlpha, 1 == l && isNaN(A) || !d.isModern || !(D = x.bulletGraphics) || (D.translate(x.bx, x.by, l), this.resizedBullets.push(x), isNaN(A) || (D.setAttr("fill-opacity", A), D.setAttr("stroke-opacity", A))), l = w.valueBalloon, A = c.getBalloonColor(w, x), l.setBounds(m, n, m + q, n + p), l.pointerOrientation = "H", D = this.balloonPointerOrientation,
"vertical" == D && (l.pointerOrientation = "V"), "horizontal" == D && (l.pointerOrientation = "H"), l.changeColor(A), void 0 !== w.balloonAlpha && (l.fillAlpha = w.balloonAlpha), void 0 !== w.balloonTextColor && (l.color = w.balloonTextColor), l.setPosition(z + m, e + n), z = c.formatString(w.balloonText, x, !0), (e = w.balloonFunction) && (z = e(x, w).toString()), "" !== z && (u ? l.showBalloon(z) : (l.text = z, l.show = !0), t.push({
yy: v,
balloon: l
})), !u && l.set && (l.set.hide(), w = l.textDiv) && (w.style.visibility = "hidden"))
}
} this.avoidBalloonOverlapping && this.arrangeBalloons()
} b ?
(k = {
type: "changed"
}, k.index = a, k.chart = this.chart, k.zooming = B, k.mostCloseGraph = I, k.position = u ? f : h, k.target = this, c.fire("changed", k), this.fire("changed", k), this.skipZoomDispatch = !1) : (this.skipZoomDispatch = !0, c.updateLegendValues(a));
this.previousIndex = a;
this.previousMostCloseGraph = I
}
}
} else this.hideCursor()
},
setBalloonPosition: function (a, b, c, e) {
var d = b.position,
f = b.inside;
b = b.axisThickness;
var g = this.chart,
k = g.dx,
g = g.dy,
l = this.x,
m = this.y,
n = this.width,
q = this.height;
e ? (f && ("right" == d ? a.setBounds(l, m +
g, l + n + k, m + c + g) : a.setBounds(l, m + g, l + n + k, m + c)), "right" == d ? f ? a.setPosition(l + n + k, m + c + g) : a.setPosition(l + n + k + b, m + c + g) : f ? a.setPosition(l, m + c) : a.setPosition(l - b, m + c)) : "top" == d ? f ? a.setPosition(l + c + k, m + g) : a.setPosition(l + c + k, m + g - b + 1) : f ? a.setPosition(l + c, m + q) : a.setPosition(l + c, m + q + b - 1)
},
setBalloonBounds: function (a, b, c) {
var e = b.position,
d = b.inside,
f = b.axisThickness,
g = b.tickLength,
k = this.chart,
l = k.dx,
k = k.dy,
m = this.x,
n = this.y,
q = this.width,
p = this.height;
c ? (d && (a.pointerWidth = 0), "right" == e ? d ? a.setBounds(m, n + k,
m + q + l, n + p + k) : a.setBounds(m + q + l + f, n + k, m + q + 1E3, n + p + k) : d ? a.setBounds(m, n, q + m, p + n) : a.setBounds(-1E3, -1E3, m - g - f, n + p + 15)) : (a.maxWidth = q, b.parseDates && (g = 0, a.pointerWidth = 0), "top" == e ? d ? a.setBounds(m + l, n + k, q + l + m, p + n) : a.setBounds(m + l, -1E3, q + l + m, n + k - g - f) : d ? a.setBounds(m, n, q + m, p + n - g) : a.setBounds(m, n + p + g + f - 1, m + q, n + p + g + f))
},
enableDrawing: function (a) {
this.enabled = !a;
this.hideCursor();
this.rolledOver = !1;
this.drawing = a
},
isZooming: function (a) {
a && a != this.zooming && this.handleMouseDown("fake");
a || a == this.zooming || this.handleMouseUp()
},
handleMouseOut: function () {
if (this.enabled)
if (this.zooming) this.setPosition();
else {
this.index = void 0;
var a = {
type: "changed",
index: void 0,
target: this
};
a.chart = this.chart;
this.fire("changed", a);
this.hideCursor()
}
},
handleReleaseOutside: function () {
this.handleMouseUp()
},
handleMouseUp: function () {
var a = this.chart,
b = this.data,
c;
if (a) {
var e = a.mouseX - this.x,
h = a.mouseY - this.y;
if (this.drawingNow) {
this.drawingNow = !1;
d.remove(this.drawingLine);
c = this.drawStartX;
var f = this.drawStartY;
if (2 < Math.abs(c - e) || 2 < Math.abs(f -
h)) c = {
type: "draw",
target: this,
chart: a,
initialX: c,
initialY: f,
finalX: e,
finalY: h
}, this.fire(c.type, c)
}
if (this.enabled && 0 < b.length) {
if (this.pan) this.rolledOver = !1;
else if (this.zoomable && this.zooming) {
c = this.selectWithoutZooming ? {
type: "selected"
} : {
type: "zoomed"
};
c.target = this;
c.chart = a;
if ("cursor" == this.type) this.rotate ? this.selectionPosY = h : this.selectionPosX = h = e, 4 > Math.abs(h - this.initialMouse) && this.fromIndex == this.index || (this.index < this.fromIndex ? (c.end = this.fromIndex, c.start = this.index) : (c.end = this.index,
c.start = this.fromIndex), h = a.categoryAxis, h.parseDates && !h.equalSpacing && (b[c.start] && (c.start = b[c.start].time), b[c.end] && (c.end = a.getEndTime(b[c.end].time))), this.skipZoomDispatch || this.fire(c.type, c));
else {
var g = this.initialMouseX,
k = this.initialMouseY;
3 > Math.abs(e - g) && 3 > Math.abs(h - k) || (b = Math.min(g, e), f = Math.min(k, h), e = Math.abs(g - e), h = Math.abs(k - h), a.hideXScrollbar && (b = 0, e = this.width), a.hideYScrollbar && (f = 0, h = this.height), c.selectionHeight = h, c.selectionWidth = e, c.selectionY = f, c.selectionX = b, this.skipZoomDispatch ||
this.fire(c.type, c))
}
this.selectWithoutZooming || d.remove(this.selection)
}
this.skipZoomDispatch = !1
}
}
this.panning = this.zooming = !1
},
showCursorAt: function (a) {
var b = this.chart.categoryAxis;
a = b.parseDates ? b.dateToCoordinate(a) : b.categoryToCoordinate(a);
this.previousMousePosition = NaN;
this.forceShow = !0;
this.setPosition(a, !1)
},
clearSelection: function () {
d.remove(this.selection)
},
handleMouseDown: function (a) {
if (this.zoomable || this.pan || this.drawing) {
var b = this.rotate,
c = this.chart,
e = c.mouseX - this.x,
h = c.mouseY -
this.y;
if (0 < e && e < this.width && 0 < h && h < this.height || "fake" == a) this.setPosition(), this.selectWithoutZooming && d.remove(this.selection), this.drawing ? (this.drawStartY = h, this.drawStartX = e, this.drawingNow = !0) : this.pan ? (this.zoomable = !1, c.setMouseCursor("move"), this.panning = !0, this.panClickPos = b ? h : e, this.panClickStart = this.start, this.panClickEnd = this.end, this.panClickStartTime = this.startTime, this.panClickEndTime = this.endTime) : this.zoomable && ("cursor" == this.type ? (this.fromIndex = this.index, b ? (this.initialMouse =
h, this.selectionPosY = this.linePos) : (this.initialMouse = e, this.selectionPosX = this.linePos)) : (this.initialMouseX = e, this.initialMouseY = h, this.selectionPosX = e, this.selectionPosY = h), this.zooming = !0)
}
}
})
})();
(function () {
var d = window.AmCharts;
d.SimpleChartScrollbar = d.Class({
construct: function (a) {
this.createEvents("zoomed");
this.backgroundColor = "#D4D4D4";
this.backgroundAlpha = 1;
this.selectedBackgroundColor = "#EFEFEF";
this.scrollDuration = this.selectedBackgroundAlpha = 1;
this.resizeEnabled = !0;
this.hideResizeGrips = !1;
this.scrollbarHeight = 20;
this.updateOnReleaseOnly = !1;
9 > document.documentMode && (this.updateOnReleaseOnly = !0);
this.dragIconHeight = this.dragIconWidth = 35;
this.dragIcon = "dragIconRoundBig";
d.applyTheme(this,
a, "SimpleChartScrollbar")
},
draw: function () {
var a = this;
a.destroy();
if (a.enabled) {
var b = a.chart.container,
c = a.rotate,
e = a.chart,
h = b.set();
a.set = h;
e.scrollbarsSet.push(h);
var f, g;
c ? (f = a.scrollbarHeight, g = e.plotAreaHeight) : (g = a.scrollbarHeight, f = e.plotAreaWidth);
a.width = f;
if ((a.height = g) && f) {
var k = d.rect(b, f, g, a.backgroundColor, a.backgroundAlpha, 1, a.backgroundColor, a.backgroundAlpha);
d.setCN(e, k, "scrollbar-bg");
a.bg = k;
h.push(k);
k = d.rect(b, f, g, "#000", .005);
h.push(k);
a.invisibleBg = k;
k.click(function () {
a.handleBgClick()
}).mouseover(function () {
a.handleMouseOver()
}).mouseout(function () {
a.handleMouseOut()
}).touchend(function () {
a.handleBgClick()
});
k = d.rect(b, f, g, a.selectedBackgroundColor, a.selectedBackgroundAlpha);
d.setCN(e, k, "scrollbar-bg-selected");
a.selectedBG = k;
h.push(k);
f = d.rect(b, f, g, "#000", .005);
a.dragger = f;
h.push(f);
f.mousedown(function (b) {
a.handleDragStart(b)
}).mouseup(function () {
a.handleDragStop()
}).mouseover(function () {
a.handleDraggerOver()
}).mouseout(function () {
a.handleMouseOut()
}).touchstart(function (b) {
a.handleDragStart(b)
}).touchend(function () {
a.handleDragStop()
});
f = e.pathToImages;
c ? (k = f + a.dragIcon + "H.png", f = a.dragIconWidth,
c = a.dragIconHeight) : (k = f + a.dragIcon + ".png", c = a.dragIconWidth, f = a.dragIconHeight);
g = b.image(k, 0, 0, c, f);
d.setCN(e, g, "scrollbar-grip-left");
k = b.image(k, 0, 0, c, f);
d.setCN(e, k, "scrollbar-grip-right");
var l = 10,
m = 20;
e.panEventsEnabled && (l = 25, m = a.scrollbarHeight);
var n = d.rect(b, l, m, "#000", .005),
q = d.rect(b, l, m, "#000", .005);
q.translate(-(l - c) / 2, -(m - f) / 2);
n.translate(-(l - c) / 2, -(m - f) / 2);
c = b.set([g, q]);
b = b.set([k, n]);
a.iconLeft = c;
h.push(a.iconLeft);
a.iconRight = b;
h.push(b);
c.mousedown(function () {
a.leftDragStart()
}).mouseup(function () {
a.leftDragStop()
}).mouseover(function () {
a.iconRollOver()
}).mouseout(function () {
a.iconRollOut()
}).touchstart(function () {
a.leftDragStart()
}).touchend(function () {
a.leftDragStop()
});
b.mousedown(function () {
a.rightDragStart()
}).mouseup(function () {
a.rightDragStop()
}).mouseover(function () {
a.iconRollOver()
}).mouseout(function () {
a.iconRollOut()
}).touchstart(function () {
a.rightDragStart()
}).touchend(function () {
a.rightDragStop()
});
d.ifArray(e.chartData) ? h.show() : h.hide();
a.hideDragIcons();
a.clipDragger(!1)
}
h.translate(a.x, a.y);
h.node.style.msTouchAction = "none"
}
},
updateScrollbarSize: function (a, b) {
a = Math.round(a);
b = Math.round(b);
var c = this.dragger,
e, d, f, g;
this.rotate ? (e = 0, d = a, f = this.width +
1, g = b - a, c.setAttr("height", b - a), c.setAttr("y", d)) : (e = a, d = 0, f = b - a, g = this.height + 1, c.setAttr("width", b - a), c.setAttr("x", e));
this.clipAndUpdate(e, d, f, g)
},
update: function () {
var a, b = !1,
c, e, d = this.x,
f = this.y,
g = this.dragger,
k = this.getDBox();
if (k) {
c = k.x + d;
e = k.y + f;
var l = k.width,
k = k.height,
m = this.rotate,
n = this.chart,
q = this.width,
p = this.height,
r = n.mouseX,
t = n.mouseY;
a = this.initialMouse;
this.forceClip && this.clipDragger(!0);
n.mouseIsOver && (this.dragging && (n = this.initialCoord, m ? (a = n + (t - a), 0 > a && (a = 0), n = p - k, a > n &&
(a = n), g.setAttr("y", a)) : (a = n + (r - a), 0 > a && (a = 0), n = q - l, a > n && (a = n), g.setAttr("x", a)), this.clipDragger(!0)), this.resizingRight && (m ? (a = t - e, a + e > p + f && (a = p - e + f), 0 > a ? (this.resizingRight = !1, b = this.resizingLeft = !0) : (0 === a && (a = .1), g.setAttr("height", a))) : (a = r - c, a + c > q + d && (a = q - c + d), 0 > a ? (this.resizingRight = !1, b = this.resizingLeft = !0) : (0 === a && (a = .1), g.setAttr("width", a))), this.clipDragger(!0)), this.resizingLeft && (m ? (c = e, e = t, e < f && (e = f), e > p + f && (e = p + f), a = !0 === b ? c - e : k + c - e, 0 > a ? (this.resizingRight = !0, this.resizingLeft = !1,
g.setAttr("y", c + k - f)) : (0 === a && (a = .1), g.setAttr("y", e - f), g.setAttr("height", a))) : (e = r, e < d && (e = d), e > q + d && (e = q + d), a = !0 === b ? c - e : l + c - e, 0 > a ? (this.resizingRight = !0, this.resizingLeft = !1, g.setAttr("x", c + l - d)) : (0 === a && (a = .1), g.setAttr("x", e - d), g.setAttr("width", a))), this.clipDragger(!0)))
}
},
stopForceClip: function () {
this.forceClip = !1
},
clipDragger: function (a) {
var b = this.getDBox();
if (b) {
var c = b.x,
e = b.y,
d = b.width,
b = b.height,
f = !1;
if (this.rotate) {
if (c = 0, d = this.width + 1, this.clipY != e || this.clipH != b) f = !0
} else if (e =
0, b = this.height + 1, this.clipX != c || this.clipW != d) f = !0;
f && (this.clipAndUpdate(c, e, d, b), a && (this.updateOnReleaseOnly || this.dispatchScrollbarEvent()))
}
},
maskGraphs: function () {},
clipAndUpdate: function (a, b, c, e) {
this.clipX = a;
this.clipY = b;
this.clipW = c;
this.clipH = e;
this.selectedBG.clipRect(a, b, c, e);
this.updateDragIconPositions();
this.maskGraphs(a, b, c, e)
},
dispatchScrollbarEvent: function () {
if (this.skipEvent) this.skipEvent = !1;
else {
var a = this.chart;
a.hideBalloon();
var b = this.getDBox(),
c = b.x,
e = b.y,
d = b.width,
b = b.height;
this.rotate ? (c = e, d = this.height / b) : d = this.width / d;
a = {
type: "zoomed",
position: c,
chart: a,
target: this,
multiplier: d
};
this.fire(a.type, a)
}
},
updateDragIconPositions: function () {
var a = this.getDBox(),
b = a.x,
c = a.y,
e = this.iconLeft,
d = this.iconRight,
f, g, k = this.scrollbarHeight;
this.rotate ? (f = this.dragIconWidth, g = this.dragIconHeight, e.translate((k - g) / 2, c - f / 2), d.translate((k - g) / 2, c + a.height - f / 2)) : (f = this.dragIconHeight, g = this.dragIconWidth, e.translate(b - g / 2, (k - f) / 2), d.translate(b - g / 2 + a.width, (k - f) / 2))
},
showDragIcons: function () {
this.resizeEnabled &&
(this.iconLeft.show(), this.iconRight.show())
},
hideDragIcons: function () {
if (!this.resizingLeft && !this.resizingRight && !this.dragging) {
if (this.hideResizeGrips || !this.resizeEnabled) this.iconLeft.hide(), this.iconRight.hide();
this.removeCursors()
}
},
removeCursors: function () {
this.chart.setMouseCursor("auto")
},
relativeZoom: function (a, b) {
this.enabled && (this.dragger.stop(), this.multiplier = a, this.position = b, this.updateScrollbarSize(b, this.rotate ? b + this.height / a : b + this.width / a), this.clipDragger())
},
destroy: function () {
this.clear();
d.remove(this.set);
d.remove(this.iconRight);
d.remove(this.iconLeft)
},
clear: function () {},
handleDragStart: function () {
if (this.enabled) {
var a = this.chart;
this.dragger.stop();
this.removeCursors();
this.dragging = !0;
var b = this.getDBox();
this.rotate ? (this.initialCoord = b.y, this.initialMouse = a.mouseY) : (this.initialCoord = b.x, this.initialMouse = a.mouseX)
}
},
handleDragStop: function () {
this.updateOnReleaseOnly && (this.update(), this.skipEvent = !1, this.dispatchScrollbarEvent());
this.dragging = !1;
this.mouseIsOver && this.removeCursors();
this.update()
},
handleDraggerOver: function () {
this.handleMouseOver()
},
leftDragStart: function () {
this.dragger.stop();
this.resizingLeft = !0
},
leftDragStop: function () {
this.resizingLeft = !1;
this.mouseIsOver || this.removeCursors();
this.updateOnRelease()
},
rightDragStart: function () {
this.dragger.stop();
this.resizingRight = !0
},
rightDragStop: function () {
this.resizingRight = !1;
this.mouseIsOver || this.removeCursors();
this.updateOnRelease()
},
iconRollOut: function () {
this.removeCursors()
},
iconRollOver: function () {
this.rotate ?
this.chart.setMouseCursor("n-resize") : this.chart.setMouseCursor("e-resize");
this.handleMouseOver()
},
getDBox: function () {
if (this.dragger) return this.dragger.getBBox()
},
handleBgClick: function () {
var a = this;
if (!a.resizingRight && !a.resizingLeft) {
a.zooming = !0;
var b, c, e = a.scrollDuration,
h = a.dragger;
b = a.getDBox();
var f = b.height,
g = b.width;
c = a.chart;
var k = a.y,
l = a.x,
m = a.rotate;
m ? (b = "y", c = c.mouseY - f / 2 - k, c = d.fitToBounds(c, 0, a.height - f)) : (b = "x", c = c.mouseX - g / 2 - l, c = d.fitToBounds(c, 0, a.width - g));
a.updateOnReleaseOnly ?
(a.skipEvent = !1, h.setAttr(b, c), a.dispatchScrollbarEvent(), a.clipDragger()) : (c = Math.round(c), m ? h.animate({
y: c
}, e, ">") : h.animate({
x: c
}, e, ">"), a.forceClip = !0, clearTimeout(a.forceTO), a.forceTO = setTimeout(function () {
a.stopForceClip.call(a)
}, 5E3 * e))
}
},
updateOnRelease: function () {
this.updateOnReleaseOnly && (this.update(), this.skipEvent = !1, this.dispatchScrollbarEvent())
},
handleReleaseOutside: function () {
if (this.set) {
if (this.resizingLeft || this.resizingRight || this.dragging) this.updateOnRelease(), this.removeCursors();
this.mouseIsOver = this.dragging = this.resizingRight = this.resizingLeft = !1;
this.hideDragIcons();
this.update()
}
},
handleMouseOver: function () {
this.mouseIsOver = !0;
this.showDragIcons()
},
handleMouseOut: function () {
this.mouseIsOver = !1;
this.hideDragIcons()
}
})
})();
(function () {
var d = window.AmCharts;
d.ChartScrollbar = d.Class({
inherits: d.SimpleChartScrollbar,
construct: function (a) {
this.cname = "ChartScrollbar";
d.ChartScrollbar.base.construct.call(this, a);
this.enabled = !0;
this.graphLineColor = "#BBBBBB";
this.graphLineAlpha = 0;
this.graphFillColor = "#BBBBBB";
this.graphFillAlpha = 1;
this.selectedGraphLineColor = "#888888";
this.selectedGraphLineAlpha = 0;
this.selectedGraphFillColor = "#888888";
this.selectedGraphFillAlpha = 1;
this.gridCount = 0;
this.gridColor = "#FFFFFF";
this.gridAlpha = .7;
this.skipEvent = this.autoGridCount = !1;
this.color = "#FFFFFF";
this.scrollbarCreated = !1;
this.offset = 0;
d.applyTheme(this, a, this.cname)
},
init: function () {
var a = this.categoryAxis,
b = this.chart;
a || (this.categoryAxis = a = new d.CategoryAxis);
a.chart = b;
a.id = "scrollbar";
a.dateFormats = b.categoryAxis.dateFormats;
a.markPeriodChange = b.categoryAxis.markPeriodChange;
a.boldPeriodBeginning = b.categoryAxis.boldPeriodBeginning;
a.axisItemRenderer = d.RecItem;
a.axisRenderer = d.RecAxis;
a.guideFillRenderer = d.RecFill;
a.inside = !0;
a.fontSize =
this.fontSize;
a.tickLength = 0;
a.axisAlpha = 0;
d.isString(this.graph) && (this.graph = d.getObjById(b.graphs, this.graph));
if (a = this.graph) {
var c = this.valueAxis;
c || (this.valueAxis = c = new d.ValueAxis, c.visible = !1, c.scrollbar = !0, c.axisItemRenderer = d.RecItem, c.axisRenderer = d.RecAxis, c.guideFillRenderer = d.RecFill, c.labelsEnabled = !1, c.chart = b);
b = this.unselectedGraph;
b || (b = new d.AmGraph, b.scrollbar = !0, this.unselectedGraph = b, b.negativeBase = a.negativeBase, b.noStepRisers = a.noStepRisers);
b = this.selectedGraph;
b || (b = new d.AmGraph,
b.scrollbar = !0, this.selectedGraph = b, b.negativeBase = a.negativeBase, b.noStepRisers = a.noStepRisers)
}
this.scrollbarCreated = !0
},
draw: function () {
var a = this;
d.ChartScrollbar.base.draw.call(a);
if (a.enabled) {
a.scrollbarCreated || a.init();
var b = a.chart,
c = b.chartData,
e = a.categoryAxis,
h = a.rotate,
f = a.x,
g = a.y,
k = a.width,
l = a.height,
m = b.categoryAxis,
n = a.set;
e.setOrientation(!h);
e.parseDates = m.parseDates;
e.rotate = h;
e.equalSpacing = m.equalSpacing;
e.minPeriod = m.minPeriod;
e.startOnAxis = m.startOnAxis;
e.viW = k;
e.viH = l;
e.width =
k;
e.height = l;
e.gridCount = a.gridCount;
e.gridColor = a.gridColor;
e.gridAlpha = a.gridAlpha;
e.color = a.color;
e.tickLength = 0;
e.axisAlpha = 0;
e.autoGridCount = a.autoGridCount;
e.parseDates && !e.equalSpacing && e.timeZoom(b.firstTime, b.lastTime);
e.zoom(0, c.length - 1);
if (m = a.graph) {
var q = a.valueAxis,
p = m.valueAxis;
q.id = p.id;
q.rotate = h;
q.setOrientation(h);
q.width = k;
q.height = l;
q.viW = k;
q.viH = l;
q.dataProvider = c;
q.reversed = p.reversed;
q.logarithmic = p.logarithmic;
q.gridAlpha = 0;
q.axisAlpha = 0;
n.push(q.set);
h ? (q.y = g, q.x = 0) : (q.x =
f, q.y = 0);
var f = Infinity,
g = -Infinity,
r;
for (r = 0; r < c.length; r++) {
var t = c[r].axes[p.id].graphs[m.id].values,
u;
for (u in t)
if (t.hasOwnProperty(u) && "percents" != u && "total" != u) {
var z = t[u];
z < f && (f = z);
z > g && (g = z)
}
}
Infinity != f && (q.minimum = f); - Infinity != g && (q.maximum = g + .1 * (g - f));
f == g && (--q.minimum, q.maximum += 1);
void 0 !== a.minimum && (q.minimum = a.minimum);
void 0 !== a.maximum && (q.maximum = a.maximum);
q.zoom(0, c.length - 1);
u = a.unselectedGraph;
u.id = m.id;
u.bcn = "scrollbar-graph-";
u.rotate = h;
u.chart = b;
u.data = c;
u.valueAxis =
q;
u.chart = m.chart;
u.categoryAxis = a.categoryAxis;
u.periodSpan = m.periodSpan;
u.valueField = m.valueField;
u.openField = m.openField;
u.closeField = m.closeField;
u.highField = m.highField;
u.lowField = m.lowField;
u.lineAlpha = a.graphLineAlpha;
u.lineColorR = a.graphLineColor;
u.fillAlphas = a.graphFillAlpha;
u.fillColorsR = a.graphFillColor;
u.connect = m.connect;
u.hidden = m.hidden;
u.width = k;
u.height = l;
u.pointPosition = m.pointPosition;
u.stepDirection = m.stepDirection;
u.periodSpan = m.periodSpan;
p = a.selectedGraph;
p.id = m.id;
p.bcn = u.bcn +
"selected-";
p.rotate = h;
p.chart = b;
p.data = c;
p.valueAxis = q;
p.chart = m.chart;
p.categoryAxis = e;
p.periodSpan = m.periodSpan;
p.valueField = m.valueField;
p.openField = m.openField;
p.closeField = m.closeField;
p.highField = m.highField;
p.lowField = m.lowField;
p.lineAlpha = a.selectedGraphLineAlpha;
p.lineColorR = a.selectedGraphLineColor;
p.fillAlphas = a.selectedGraphFillAlpha;
p.fillColorsR = a.selectedGraphFillColor;
p.connect = m.connect;
p.hidden = m.hidden;
p.width = k;
p.height = l;
p.pointPosition = m.pointPosition;
p.stepDirection = m.stepDirection;
p.periodSpan = m.periodSpan;
b = a.graphType;
b || (b = m.type);
u.type = b;
p.type = b;
c = c.length - 1;
u.zoom(0, c);
p.zoom(0, c);
p.set.click(function () {
a.handleBackgroundClick()
}).mouseover(function () {
a.handleMouseOver()
}).mouseout(function () {
a.handleMouseOut()
});
u.set.click(function () {
a.handleBackgroundClick()
}).mouseover(function () {
a.handleMouseOver()
}).mouseout(function () {
a.handleMouseOut()
});
n.push(u.set);
n.push(p.set)
}
n.push(e.set);
n.push(e.labelsSet);
a.bg.toBack();
a.invisibleBg.toFront();
a.dragger.toFront();
a.iconLeft.toFront();
a.iconRight.toFront()
}
},
timeZoom: function (a, b, c) {
this.startTime = a;
this.endTime = b;
this.timeDifference = b - a;
this.skipEvent = !d.toBoolean(c);
this.zoomScrollbar();
this.skipEvent || this.dispatchScrollbarEvent()
},
zoom: function (a, b) {
this.start = a;
this.end = b;
this.skipEvent = !0;
this.zoomScrollbar()
},
dispatchScrollbarEvent: function () {
if (this.skipEvent) this.skipEvent = !1;
else {
var a = this.chart.chartData,
b, c, e = this.dragger.getBBox();
b = e.x;
var d = e.y,
f = e.width,
e = e.height,
g = this.chart;
this.rotate ? (b = d, c = e) : c = f;
f = {
type: "zoomed",
target: this
};
f.chart = g;
var k = this.categoryAxis,
l = this.stepWidth,
d = g.minSelectedTime,
e = !1;
if (k.parseDates && !k.equalSpacing) {
if (a = g.lastTime, g = g.firstTime, k = Math.round(b / l) + g, b = this.dragging ? k + this.timeDifference : Math.round((b + c) / l) + g, k > b && (k = b), 0 < d && b - k < d && (b = Math.round(k + (b - k) / 2), e = Math.round(d / 2), k = b - e, b += e, e = !0), b > a && (b = a), b - d < k && (k = b - d), k < g && (k = g), k + d > b && (b = k + d), k != this.startTime || b != this.endTime) this.startTime = k, this.endTime = b, f.start = k, f.end = b, f.startDate = new Date(k), f.endDate = new Date(b), this.fire(f.type,
f)
} else if (k.startOnAxis || (b += l / 2), c -= this.stepWidth / 2, d = k.xToIndex(b), b = k.xToIndex(b + c), d != this.start || this.end != b) k.startOnAxis && (this.resizingRight && d == b && b++, this.resizingLeft && d == b && (0 < d ? d-- : b = 1)), this.start = d, this.end = this.dragging ? this.start + this.difference : b, f.start = this.start, f.end = this.end, k.parseDates && (a[this.start] && (f.startDate = new Date(a[this.start].time)), a[this.end] && (f.endDate = new Date(a[this.end].time))), this.fire(f.type, f);
e && this.zoomScrollbar()
}
},
zoomScrollbar: function () {
var a,
b;
a = this.chart;
var c = a.chartData,
e = this.categoryAxis;
e.parseDates && !e.equalSpacing ? (c = e.stepWidth, e = a.firstTime, a = c * (this.startTime - e), b = c * (this.endTime - e)) : (a = c[this.start].x[e.id], b = c[this.end].x[e.id], c = e.stepWidth, e.startOnAxis || (e = c / 2, a -= e, b += e));
this.stepWidth = c;
this.updateScrollbarSize(a, b)
},
maskGraphs: function (a, b, c, e) {
var d = this.selectedGraph;
d && d.set.clipRect(a, b, c, e)
},
handleDragStart: function () {
d.ChartScrollbar.base.handleDragStart.call(this);
this.difference = this.end - this.start;
this.timeDifference =
this.endTime - this.startTime;
0 > this.timeDifference && (this.timeDifference = 0)
},
handleBackgroundClick: function () {
d.ChartScrollbar.base.handleBackgroundClick.call(this);
this.dragging || (this.difference = this.end - this.start, this.timeDifference = this.endTime - this.startTime, 0 > this.timeDifference && (this.timeDifference = 0))
}
})
})();
(function () {
var d = window.AmCharts;
d.AmBalloon = d.Class({
construct: function (a) {
this.cname = "AmBalloon";
this.enabled = !0;
this.fillColor = "#FFFFFF";
this.fillAlpha = .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 = .4;
this.shadowColor =
"#000000";
this.fadeOutDuration = this.animationDuration = .3;
this.fixedPosition = !1;
this.offsetY = 6;
this.offsetX = 1;
this.textAlign = "center";
this.deltaSignX = this.deltaSignY = 1;
d.isModern || (this.offsetY *= 1.5);
d.applyTheme(this, a, this.cname)
},
draw: function () {
var a = this.pointToX,
b = this.pointToY,
c = this.chart;
d.VML && (this.fadeOutDuration = 0);
this.xAnim && c.stopAnim(this.xAnim);
this.yAnim && c.stopAnim(this.yAnim);
if (!isNaN(a)) {
var e = this.follow,
h = c.container,
f = this.set;
d.remove(f);
this.removeDiv();
f = h.set();
f.node.style.pointerEvents =
"none";
this.set = f;
c.balloonsSet.push(f);
if (this.show) {
var g = this.l,
k = this.t,
l = this.r,
m = this.b,
n = this.balloonColor,
q = this.fillColor,
p = this.borderColor,
r = q;
void 0 != n && (this.adjustBorderColor ? r = p = n : q = n);
var t = this.horizontalPadding,
u = this.verticalPadding,
z = this.pointerWidth,
w = this.pointerOrientation,
x = this.cornerRadius,
v = c.fontFamily,
A = this.fontSize;
void 0 == A && (A = c.fontSize);
var n = document.createElement("div"),
B = c.classNamePrefix;
n.className = B + "-balloon-div";
this.className && (n.className = n.className +
" " + B + "-balloon-div-" + this.className);
B = n.style;
B.pointerEvents = "none";
B.position = "absolute";
var D = this.minWidth,
C = "";
isNaN(D) || (C = "min-width:" + (D - 2 * t) + "px; ");
n.innerHTML = "