[FIX]fixed code for dashboard overriding graph and x-axis label.
authorKunal Chavda (OpenERP) <kch@tinyerp.com>
Mon, 13 Jun 2011 05:28:46 +0000 (10:58 +0530)
committerKunal Chavda (OpenERP) <kch@tinyerp.com>
Mon, 13 Jun 2011 05:28:46 +0000 (10:58 +0530)
bzr revid: kch@tinyerp.com-20110613052846-zxzetxg6dk06qzw1

addons/base_graph/static/lib/dhtmlxGraph/codebase/dhtmlxchart.css
addons/base_graph/static/lib/dhtmlxGraph/codebase/dhtmlxchart.js
addons/base_graph/static/src/js/graph.js
addons/base_graph/static/src/xml/base_graph.xml

index 94b3372..e7b35c4 100644 (file)
@@ -3,4 +3,13 @@ Copyright DHTMLX LTD. http://www.dhtmlx.com
 You allowed to use this component or parts of it under GPL terms\r
 To use it on other terms or get Professional edition of the component please contact us at sales@dhtmlx.com\r
 */\r
-.dhx_tooltip{display:none;position:absolute;font-family:Tahoma;font-size:8pt;z-index:10000;background-color:white;padding:2px 2px 2px 2px;border:1px solid #A4BED4;}.dhx_chart{position:relative;font-family:Verdana;font-size:13px;color:#000;overflow:hidden;}.dhx_canvas_text{position:absolute;text-align:center;overflow:hidden;white-space:nowrap;}.dhx_map_img{width:100%;height:100%;position:absolute;top:0;left:0;border:0;filter:alpha(opacity=0);}.dhx_axis_item_y{position:absolute;height:10px;line-height:10px;text-align:right;}.dhx_axis_title_x{text-align:center;}.dhx_axis_title_y{text-align:center;font-family:Verdana;-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-o-transform:rotate(-90deg);padding-left:3px;}.dhx_chart_legend{position:absolute;}.dhx_chart_legend_item{height:18px;line-height:18px;padding:2px;}
\ No newline at end of file
+.dhx_tooltip{display:none;position:absolute;font-family:Tahoma;font-size:8pt;z-index:10000;background-color:white;padding:2px 2px 2px 2px;border:1px solid #A4BED4;}
+.dhx_chart{position:relative;font-family:Verdana;font-size:13px;color:#000;overflow:hidden;}
+.dhx_canvas_text{position:absolute;text-align:center;overflow:hidden;white-space:nowrap;}
+.dhx_map_img{width:100%;height:100%;position:absolute;top:0;left:0;border:0;filter:alpha(opacity=0);}
+.dhx_axis_item_y{position:absolute;height:10px;line-height:10px;text-align:right;}
+.dhx_axis_title_y{text-align:center;font-family:Verdana;-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-o-transform:rotate(-90deg);padding-left:3px;}
+.dhx_axis_item_x{text-align:center;font-size:8pt;-webkit-transform:rotate(-60deg);-moz-transform:rotate(-60deg);filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-o-transform:rotate(-60deg);padding-left:3px;}
+.dhx_axis_title_x{text-align:center;}
+.dhx_chart_legend{position:absolute;}
+.dhx_chart_legend_item{height:18px;line-height:18px;padding:2px;}
index 1e26e40..1dd6bcb 100644 (file)
@@ -3,2704 +3,129 @@ Copyright dhtmlxchart LTD. http://www.dhtmlxchart.com
 You allowed to use this component or parts of it under GPL terms\r
 To use it on other terms or get Professional edition of the component please contact us at sales@dhtmlxchart.com\r
 */\r
-window.dhtmlxchart || (dhtmlxchart = {});\r
-dhtmlxchart.version = "3.0";\r
-dhtmlxchart.codebase = "./";\r
-dhtmlxchart.extend = function (a, b) {\r
-    for (var c in b) a[c] = b[c];\r
-    b.k && a.k();\r
-    return a\r
-};\r
-dhtmlxchart.proto_extend = function () {\r
-    for (var a = arguments, b = a[0], c = [], d = a.length - 1; d > 0; d--) {\r
-        if (typeof a[d] == "function") a[d] = a[d].prototype;\r
-        for (var e in a[d]) if (e == "_init") c.push(a[d][e]);\r
-        else b[e] || (b[e] = a[d][e])\r
-    }\r
-    a[0].k && c.push(a[0].k);\r
-    b.k = function () {\r
-        for (var g = 0; g < c.length; g++) c[g].apply(this, arguments)\r
-    };\r
-    b.base = a[1];\r
-    var f = function (g) {\r
-        this.k(g);\r
-        this.B && this.B(g, this.defaults)\r
-    };\r
-    f.prototype = b;\r
-    b = a = null;\r
-    return f\r
-};\r
-dhtmlxchart.bind = function (a, b) {\r
-    return function () {\r
-        return a.apply(b, arguments)\r
-    }\r
-};\r
-dhtmlxchart.require = function (a) {\r
-    if (!dhtmlxchart.ha[a]) {\r
-        dhtmlxchart.exec(dhtmlxchart.ajax().sync().get(dhtmlxchart.codebase + a).responseText);\r
-        dhtmlxchart.ha[a] = true\r
-    }\r
-};\r
-dhtmlxchart.ha = {};\r
-dhtmlxchart.exec = function (a) {\r
-    window.execScript ? window.execScript(a) : window.eval(a)\r
-};\r
-dhtmlxchart.methodPush = function (a, b) {\r
-    return function () {\r
-        var c = false;\r
-        return c = a[b].apply(a, arguments)\r
-    }\r
-};\r
-dhtmlxchart.isNotDefined = function (a) {\r
-    return typeof a == "undefined"\r
-};\r
-dhtmlxchart.delay = function (a, b, c, d) {\r
-    setTimeout(function () {\r
-        var e = a.apply(b, c);\r
-        a = b = c = null;\r
-        return e\r
-    }, d || 1)\r
-};\r
-dhtmlxchart.uid = function () {\r
-    if (!this.S) this.S = (new Date).valueOf();\r
-    this.S++;\r
-    return this.S\r
-};\r
-dhtmlxchart.toNode = function (a) {\r
-    if (typeof a == "string") return document.getElementById(a);\r
-    return a\r
-};\r
-dhtmlxchart.toArray = function (a) {\r
-    return dhtmlxchart.extend(a || [], dhtmlxchart.PowerArray)\r
-};\r
-dhtmlxchart.toFunctor = function (a) {\r
-    return typeof a == "string" ? eval(a) : a\r
-};\r
-dhtmlxchart.j = {};\r
-dhtmlxchart.event = function (a, b, c, d) {\r
-    a = dhtmlxchart.toNode(a);\r
-    var e = dhtmlxchart.uid();\r
-    dhtmlxchart.j[e] = [a, b, c];\r
-    if (d) c = dhtmlxchart.bind(c, d);\r
-    if (a.addEventListener) a.addEventListener(b, c, false);\r
-    else a.attachEvent && a.attachEvent("on" + b, c);\r
-    return e\r
-};\r
-dhtmlxchart.eventRemove = function (a) {\r
-    if (a) {\r
-        var b = dhtmlxchart.j[a];\r
-        if (b[0].removeEventListener) b[0].removeEventListener(b[1], b[2], false);\r
-        else b[0].detachEvent && b[0].detachEvent("on" + b[1], b[2]);\r
-        delete this.j[a]\r
-    }\r
-};\r
-dhtmlxchart.EventSystem = {\r
-    k: function () {\r
-        this.j = {};\r
-        this.A = {};\r
-        this.s = {}\r
-    },\r
-    block: function () {\r
-        this.j.U = true\r
-    },\r
-    unblock: function () {\r
-        this.j.U = false\r
-    },\r
-    mapEvent: function (a) {\r
-        dhtmlxchart.extend(this.s, a)\r
-    },\r
-    callEvent: function (a, b) {\r
-        if (this.j.U) return true;\r
-        a = a.toLowerCase();\r
-        var c = this.j[a.toLowerCase()],\r
-            d = true;\r
-        if (c) for (var e = 0; e < c.length; e++) if (c[e].apply(this, b || []) === false) d = false;\r
-        if (this.s[a] && !this.s[a].callEvent(a, b)) d = false;\r
-        return d\r
-    },\r
-    attachEvent: function (a, b, c) {\r
-        a = a.toLowerCase();\r
-        c = c || dhtmlxchart.uid();\r
-        b = dhtmlxchart.toFunctor(b);\r
-        var d = this.j[a] || dhtmlxchart.toArray();\r
-        d.push(b);\r
-        this.j[a] = d;\r
-        this.A[c] = {\r
-            f: b,\r
-            t: a\r
-        };\r
-        return c\r
-    },\r
-    detachEvent: function (a) {\r
-        var b = this.A[a].t,\r
-            c = this.A[a].f;\r
-        b = this.j[b];\r
-        b.remove(c);\r
-        delete this.A[a]\r
-    }\r
-};\r
-dhtmlxchart.PowerArray = {\r
-    removeAt: function (a, b) {\r
-        if (a >= 0) this.splice(a, b || 1)\r
-    },\r
-    remove: function (a) {\r
-        this.removeAt(this.find(a))\r
-    },\r
-    insertAt: function (a, b) {\r
-        if (!b && b !== 0) this.push(a);\r
-        else {\r
-            var c = this.splice(b, this.length - b);\r
-            this[b] = a;\r
-            this.push.apply(this, c)\r
-        }\r
-    },\r
-    find: function (a) {\r
-        for (i = 0; i < this.length; i++) if (a == this[i]) return i;\r
-        return -1\r
-    },\r
-    each: function (a, b) {\r
-        for (var c = 0; c < this.length; c++) a.call(b || this, this[c])\r
-    },\r
-    map: function (a, b) {\r
-        for (var c = 0; c < this.length; c++) this[c] = a.call(b || this, this[c]);\r
-        return this\r
-    }\r
-};\r
-dhtmlxchart.env = {};\r
-if (navigator.userAgent.indexOf("Opera") != -1) dhtmlxchart.La = true;\r
-else {\r
-    dhtmlxchart.r = !! document.all;\r
-    dhtmlxchart.Ka = !document.all;\r
-    dhtmlxchart.Ma = navigator.userAgent.indexOf("KHTML") != -1;\r
-    if (navigator.appVersion.indexOf("MSIE 8.0") != -1 && document.compatMode != "BackCompat") dhtmlxchart.r = 8\r
-}\r
-dhtmlxchart.env = {};\r
-(function () {\r
-    dhtmlxchart.env.transform = false;\r
-    dhtmlxchart.env.transition = false;\r
-    var a = {};\r
-    a.names = ["transform", "transition"];\r
-    a.transform = ["transform", "WebkitTransform", "MozTransform", "oTransform"];\r
-    a.transition = ["transition", "WebkitTransition", "MozTransition", "oTransition"];\r
-    for (var b = document.createElement("DIV"), c = 0; c < a.names.length; c++) for (; p = a[a.names[c]].pop();) if (typeof b.style[p] != "undefined") dhtmlxchart.env[a.names[c]] = true\r
-})();\r
-dhtmlxchart.env.transform_prefix = function () {\r
-    var a;\r
-    if (dhtmlxchart.La) a = "-o-";\r
-    else {\r
-        a = "";\r
-        if (dhtmlxchart.Ka) a = "-moz-";\r
-        if (dhtmlxchart.Ma) a = "-webkit-"\r
-    }\r
-    return a\r
-}();\r
-dhtmlxchart.env.svg = function () {\r
-    return document.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure", "1.1")\r
-}();\r
-dhtmlxchart.zIndex = {\r
-    drag: 1E4\r
-};\r
-dhtmlxchart.html = {\r
-    create: function (a, b, c) {\r
-        b = b || {};\r
-        var d = document.createElement(a);\r
-        for (var e in b) d.setAttribute(e, b[e]);\r
-        if (b.style) d.style.cssText = b.style;\r
-        if (b["class"]) d.className = b["class"];\r
-        if (c) d.innerHTML = c;\r
-        return d\r
-    },\r
-    getValue: function (a) {\r
-        a = dhtmlxchart.toNode(a);\r
-        if (!a) return "";\r
-        return dhtmlxchart.isNotDefined(a.value) ? a.innerHTML : a.value\r
-    },\r
-    remove: function (a) {\r
-        if (a instanceof Array) for (var b = 0; b < a.length; b++) this.remove(a[b]);\r
-        else a && a.parentNode && a.parentNode.removeChild(a)\r
-    },\r
-    insertBefore: function (a, b, c) {\r
-        if (a) b ? b.parentNode.insertBefore(a, b) : c.appendChild(a)\r
-    },\r
-    locate: function (a, b) {\r
-        a = a || event;\r
-        for (var c = a.target || a.srcElement; c;) {\r
-            if (c.getAttribute) {\r
-                var d = c.getAttribute(b);\r
-                if (d) return d\r
-            }\r
-            c = c.parentNode\r
-        }\r
-        return null\r
-    },\r
-    offset: function (a) {\r
-        if (a.getBoundingClientRect) {\r
-            var b = a.getBoundingClientRect(),\r
-                c = document.body,\r
-                d = document.documentElement,\r
-                e = window.pageYOffset || d.scrollTop || c.scrollTop,\r
-                f = window.pageXOffset || d.scrollLeft || c.scrollLeft,\r
-                g = d.clientTop || c.clientTop || 0,\r
-                i = d.clientLeft || c.clientLeft || 0,\r
-                j = b.top + e - g,\r
-                k = b.left + f - i;\r
-            return {\r
-                y: Math.round(j),\r
-                x: Math.round(k)\r
-            }\r
-        } else {\r
-            for (k = j = 0; a;) {\r
-                j += parseInt(a.offsetTop, 10);\r
-                k += parseInt(a.offsetLeft, 10);\r
-                a = a.offsetParent\r
-            }\r
-            return {\r
-                y: j,\r
-                x: k\r
-            }\r
-        }\r
-    },\r
-    pos: function (a) {\r
-        a = a || event;\r
-        if (a.pageX || a.pageY) return {\r
-            x: a.pageX,\r
-            y: a.pageY\r
-        };\r
-        var b = dhtmlxchart.r && document.compatMode != "BackCompat" ? document.documentElement : document.body;\r
-        return {\r
-            x: a.clientX + b.scrollLeft - b.clientLeft,\r
-            y: a.clientY + b.scrollTop - b.clientTop\r
-        }\r
-    },\r
-    preventEvent: function (a) {\r
-        a && a.preventDefault && a.preventDefault();\r
-        dhtmlxchart.html.stopEvent(a)\r
-    },\r
-    stopEvent: function (a) {\r
-        (a || event).cancelBubble = true;\r
-        return false\r
-    },\r
-    addCss: function (a, b) {\r
-        a.className += " " + b\r
-    },\r
-    removeCss: function (a, b) {\r
-        a.className = a.className.replace(RegExp(b, "g"), "")\r
-    }\r
-};\r
-(function () {\r
-    var a = document.getElementsByTagName("SCRIPT");\r
-    if (a.length) {\r
-        a = (a[a.length - 1].getAttribute("src") || "").split("/");\r
-        a.splice(a.length - 1, 1);\r
-        dhtmlxchart.codebase = a.slice(0, a.length).join("/") + "/"\r
-    }\r
-})();\r
-dhtmlxchart.ui = {};\r
-dhtmlxchart.Destruction = {\r
-    k: function () {\r
-        dhtmlxchart.destructors.push(this)\r
-    },\r
-    destructor: function () {\r
-        this.destructor = function () {};\r
-        this.ib = this.v = null;\r
-        this.fa && document.body.appendChild(this.fa);\r
-        this.fa = null;\r
-        if (this.g) {\r
-            this.g.innerHTML = "";\r
-            this.g.v = null\r
-        }\r
-        this.data = this.g = this.L = null;\r
-        this.j = this.A = {}\r
-    }\r
-};\r
-dhtmlxchart.destructors = [];\r
-dhtmlxchart.event(window, "unload", function () {\r
-    for (var a = 0; a < dhtmlxchart.destructors.length; a++) dhtmlxchart.destructors[a].destructor();\r
-    dhtmlxchart.destructors = [];\r
-    for (var b in dhtmlxchart.j) {\r
-        a = dhtmlxchart.j[b];\r
-        if (a[0].removeEventListener) a[0].removeEventListener(a[1], a[2], false);\r
-        else a[0].detachEvent && a[0].detachEvent("on" + a[1], a[2]);\r
-        delete dhtmlxchart.j[b]\r
-    }\r
-});\r
-dhtmlxchart.math = {};\r
-dhtmlxchart.math.fb = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"];\r
-dhtmlxchart.math.toHex = function (a, b) {\r
-    a = parseInt(a, 10);\r
-    for (str = ""; a > 0;) {\r
-        str = this.fb[a % 16] + str;\r
-        a = Math.floor(a / 16)\r
-    }\r
-    for (; str.length < b;) str = "0" + str;\r
-    return str\r
-};\r
-dhtmlxchart.ui.Map = function (a) {\r
-    this.name = "Map";\r
-    this.q = "map_" + dhtmlxchart.uid();\r
-    this.Pa = a;\r
-    this.s = []\r
-};\r
-dhtmlxchart.ui.Map.prototype = {\r
-    addRect: function (a, b, c) {\r
-        this.X(a, "RECT", b, c)\r
-    },\r
-    addPoly: function (a, b) {\r
-        this.X(a, "POLY", b)\r
-    },\r
-    X: function (a, b, c, d) {\r
-        var e = "";\r
-        if (arguments.length == 4) e = "userdata='" + d + "'";\r
-        this.s.push("<area " + this.Pa + "='" + a + "' shape='" + b + "' coords='" + c.join() + "' " + e + "></area>")\r
-    },\r
-    addSector: function (a, b, c, d, e, f, g) {\r
-        var i = [];\r
-        i.push(d);\r
-        i.push(Math.floor(e * g));\r
-        for (var j = b; j < c; j += Math.PI / 18) {\r
-            i.push(Math.floor(d + f * Math.cos(j)));\r
-            i.push(Math.floor((e + f * Math.sin(j)) * g))\r
-        }\r
-        i.push(Math.floor(d + f * Math.cos(c)));\r
-        i.push(Math.floor((e + f * Math.sin(c)) * g));\r
-        i.push(d);\r
-        i.push(Math.floor(e * g));\r
-        return this.addPoly(a, i)\r
-    },\r
-    render: function (a) {\r
-        var b = dhtmlxchart.html.create("DIV");\r
-        b.style.cssText = "position:absolute; width:100%; height:100%; top:0px; left:0px;";\r
-        a.appendChild(b);\r
-        var c = dhtmlxchart.r ? "" : "src='data:image/gif;base64,R0lGODlhEgASAIAAAP///////yH5BAUUAAEALAAAAAASABIAAAIPjI+py+0Po5y02ouz3pwXADs='";\r
-        b.innerHTML = "<map id='" + this.q + "' name='" + this.q + "'>" + this.s.join("\n") + "</map><img " + c + " class='dhx_map_img' usemap='#" + this.q + "'>";\r
-        a.v = b;\r
-        this.s = []\r
-    }\r
-};\r
-dhtmlxchart.chart = {};\r
-dhtmlxchart.chart.area = {\r
-    pvt_render_area: function (a, b, c, d, e, f) {\r
-        var g = this.C(a, b, c, d, e),\r
-            i = Math.floor(g.cellWidth / 2);\r
-        if (b.length) {\r
-            a.globalAlpha = this.e.alpha.call(this, b[0]);\r
-            a.fillStyle = this.e.color.call(this, b[0]);\r
-            var j = this.p(b[0], c, d, g),\r
-                k = this.e.offset ? c.x + g.cellWidth * 0.5 : c.x;\r
-            a.beginPath();\r
-            a.moveTo(k, d.y);\r
-            a.lineTo(k, j);\r
-            f.addRect(b[0].id, [k - i, j - i, k + i, j + i]);\r
-            this.e.yAxis || this.renderTextAt(false, !this.e.offset ? false : true, k, j - this.e.labelOffset, this.e.label(b[0]));\r
-            for (var h = 1; h < b.length; h++) {\r
-                var m = k + Math.floor(g.cellWidth * h) - 0.5,\r
-                    l = this.p(b[h], c, d, g);\r
-                a.lineTo(m, l);\r
-                f.addRect(b[h].id, [m - i, l - i, m + i, l + i]);\r
-                this.e.yAxis || this.renderTextAt(false, !this.e.offset && h == b.length - 1 ? "left" : "center", m, l - this.e.labelOffset, this.e.label(b[h]))\r
-            }\r
-            a.lineTo(k + Math.floor(g.cellWidth * [b.length - 1]), d.y);\r
-            a.lineTo(k, d.y);\r
-            a.fill()\r
-        }\r
-    }\r
-};\r
-dhtmlxchart.chart.stackedArea = {\r
-    pvt_render_stackedArea: function (a, b, c, d, e, f) {\r
-        var g = this.C(a, b, c, d, e),\r
-            i = Math.floor(g.cellWidth / 2),\r
-            j = [];\r
-        if (b.length) {\r
-            a.globalAlpha = this.e.alpha.call(this, b[0]);\r
-            a.fillStyle = this.e.color.call(this, b[0]);\r
-            var k = e ? b[0].$startY : d.y,\r
-                h = this.e.offset ? c.x + g.cellWidth * 0.5 : c.x,\r
-                m = this.p(b[0], c, d, g) - (e ? d.y - k : 0);\r
-            j[0] = m;\r
-            a.beginPath();\r
-            a.moveTo(h, k);\r
-            a.lineTo(h, m);\r
-            f.addRect(b[0].id, [h - i, m - i, h + i, m + i]);\r
-            this.e.yAxis || this.renderTextAt(false, true, h, m - this.e.labelOffset, this.e.label(b[0]));\r
-            for (var l = 1; l < b.length; l++) {\r
-                var n = h + Math.floor(g.cellWidth * l) - 0.5,\r
-                    o = this.p(b[l], c, d, g) - (e ? d.y - b[l].$startY : 0);\r
-                j[l] = o;\r
-                a.lineTo(n, o);\r
-                f.addRect(b[l].id, [n - i, o - i, n + i, o + i]);\r
-                this.e.yAxis || this.renderTextAt(false, true, n, o - this.e.labelOffset, this.e.label(b[l]))\r
-            }\r
-            a.lineTo(h + Math.floor(g.cellWidth * [b.length - 1]), k);\r
-            if (e) for (l = b.length - 1; l >= 0; l--) {\r
-                n = h + Math.floor(g.cellWidth * l) - 0.5;\r
-                var s = b[l].$startY;\r
-                a.lineTo(n, s)\r
-            } else a.lineTo(h + Math.floor(g.cellWidth * (length - 1)) - 0.5, k);\r
-            a.lineTo(h, k);\r
-            a.fill();\r
-            for (l = 0; l < b.length; l++) b[l].$startY = j[l]\r
-        }\r
-    }\r
-};\r
-dhtmlxchart.chart.spline = {\r
-    pvt_render_spline: function (a, b, c, d, e) {\r
-        var f = this.C(a, b, c, d, e);\r
-        Math.floor(f.cellWidth / 2);\r
-        var g = [];\r
-        if (b.length) {\r
-            var i = this.e.offset ? c.x + f.cellWidth * 0.5 : c.x;\r
-            for (e = 0; e < b.length; e++) {\r
-                var j = !e ? i : Math.floor(f.cellWidth * e) - 0.5 + i,\r
-                    k = this.p(b[e], c, d, f);\r
-                g.push({\r
-                    x: j,\r
-                    y: k\r
-                })\r
-            }\r
-            var h = this.Ha(g);\r
-            for (e = 0; e < g.length - 1; e++) {\r
-                var m = g[e].x;\r
-                c = g[e].y;\r
-                for (var l = g[e + 1].x, n = g[e + 1].y, o = m; o < l; o++) this.i(a, o, this.P(o, m, e, h.a, h.b, h.c, h.d), o + 1, this.P(o + 1, m, e, h.a, h.b, h.c, h.d), this.e.line.color(b[e]), this.e.line.width);\r
-                this.i(a, l - 1, this.P(o, m, e, h.a, h.b, h.c, h.d), l, n, this.e.line.color(b[e]), this.e.line.width);\r
-                this.M(a, m, c, b[e], this.e.label(b[e]))\r
-            }\r
-            this.M(a, l, n, b[e], this.e.label(b[e]))\r
-        }\r
-    },\r
-    Ha: function (a) {\r
-        var b, c, d, e, f, g, i, j, k;\r
-        b = [];\r
-        m = [];\r
-        k = a.length;\r
-        for (var h = 0; h < k - 1; h++) {\r
-            b[h] = a[h + 1].x - a[h].x;\r
-            m[h] = (a[h + 1].y - a[h].y) / b[h]\r
-        }\r
-        c = [];\r
-        d = [];\r
-        c[0] = 0;\r
-        c[1] = 2 * (b[0] + b[1]);\r
-        d[0] = 0;\r
-        d[1] = 6 * (m[1] - m[0]);\r
-        for (h = 2; h < k - 1; h++) {\r
-            c[h] = 2 * (b[h - 1] + b[h]) - b[h - 1] * b[h - 1] / c[h - 1];\r
-            d[h] = 6 * (m[h] - m[h - 1]) - b[h - 1] * d[h - 1] / c[h - 1]\r
-        }\r
-        e = [];\r
-        e[k - 1] = e[0] = 0;\r
-        for (h = k - 2; h >= 1; h--) e[h] = (d[h] - b[h] * e[h + 1]) / c[h];\r
-        f = [];\r
-        g = [];\r
-        i = [];\r
-        j = [];\r
-        for (h = 0; h < k - 1; h++) {\r
-            f[h] = a[h].y;\r
-            g[h] = -b[h] * e[h + 1] / 6 - b[h] * e[h] / 3 + (a[h + 1].y - a[h].y) / b[h];\r
-            i[h] = e[h] / 2;\r
-            j[h] = (e[h + 1] - e[h]) / (6 * b[h])\r
-        }\r
-        return {\r
-            a: f,\r
-            b: g,\r
-            c: i,\r
-            d: j\r
-        }\r
-    },\r
-    P: function (a, b, c, d, e, f, g) {\r
-        return d[c] + (a - b) * (e[c] + (a - b) * (f[c] + (a - b) * g[c]))\r
-    }\r
-};\r
-dhtmlxchart.chart.barH = {\r
-    pvt_render_barH: function (a, b, c, d, e, f) {\r
-        var g, i, j, k, h = d.x - c.x,\r
-            m = !! this.e.yAxis,\r
-            l = this.O("h");\r
-        g = l.max;\r
-        i = l.min;\r
-        var n = Math.floor((d.y - c.y) / b.length);\r
-        e || this.$(a, b, c, d, i, g, n);\r
-        if (m) {\r
-            g = parseFloat(this.e.xAxis.end);\r
-            i = parseFloat(this.e.xAxis.start)\r
-        }\r
-        var o = this.z(i, g);\r
-        k = o[0];\r
-        j = o[1];\r
-        var s = k ? h / k : 10;\r
-        if (!m) {\r
-            var t = 10;\r
-            s = k ? (h - t) / k : 10\r
-        }\r
-        var q = parseInt(this.e.width, 10);\r
-        if (q * this.h.length + 4 > n) q = n / this.h.length - 4;\r
-        var v = Math.floor((n - q * this.h.length) / 2),\r
-            p = typeof this.e.radius != "undefined" ? parseInt(this.e.radius, 10) : Math.round(q / 5),\r
-            u = false,\r
-            r = this.e.gradient;\r
-        if (r && typeof r != "function") {\r
-            u = r;\r
-            r = false\r
-        } else if (r) {\r
-            r = a.createLinearGradient(c.x, c.y, d.x, c.y);\r
-            this.e.gradient(r)\r
-        }\r
-        m || this.i(a, c.x - 0.5, c.y, c.x - 0.5, d.y, "#000000", 1);\r
-        for (d = 0; d < b.length; d++) {\r
-            var w = parseFloat(this.e.value(b[d]));\r
-            if (w > g) w = g;\r
-            w -= i;\r
-            w *= j;\r
-            var x = c.x,\r
-                y = c.y + v + d * n + (q + 1) * e;\r
-            if (w < 0 || this.e.yAxis && w === 0) this.renderTextAt("middle", true, x + 10, y + q / 2 + v, this.e.label(b[d]));\r
-            else {\r
-                m || (w += t / s);\r
-                var B = r || this.e.color.call(this, b[d]);\r
-                if (this.e.border) {\r
-                    a.beginPath();\r
-                    a.fillStyle = B;\r
-                    this.o(a, x, y, q, p, s, w, 0);\r
-                    a.lineTo(x, 0);\r
-                    a.fill();\r
-                    a.fillStyle = "#000000";\r
-                    a.globalAlpha = 0.37;\r
-                    a.beginPath();\r
-                    this.o(a, x, y, q, p, s, w, 0);\r
-                    a.fill()\r
-                }\r
-                a.globalAlpha = this.e.alpha.call(this, b[d]);\r
-                a.fillStyle = r || this.e.color.call(this, b[d]);\r
-                a.beginPath();\r
-                var z = this.o(a, x, y, q, p, s, w, this.e.border ? 1 : 0);\r
-                if (r && !u) a.lineTo(c.x + h, y + (this.e.border ? 1 : 0));\r
-                a.fill();\r
-                a.globalAlpha = 1;\r
-                if (u != false) {\r
-                    var A = this.G(a, c.x, y + q, c.x + s * w + 2, y, u, B, "x");\r
-                    a.fillStyle = A.gradient;\r
-                    a.beginPath();\r
-                    z = this.o(a, x, y + A.offset, q - A.offset * 2, p, s, w, A.offset);\r
-                    a.fill();\r
-                    a.globalAlpha = 1\r
-                }\r
-                this.renderTextAt("middle", false, z[0] + 3, parseInt(y + (z[1] - y) / 2, 10), this.e.label(b[d]));\r
-                f.addRect(b[d].id, [x, y, z[0], z[1]], e)\r
-            }\r
-        }\r
-    },\r
-    o: function (a, b, c, d, e, f, g, i) {\r
-        var j = 0;\r
-        if (e > f * g) {\r
-            var k = (e - f * g) / e;\r
-            j = -Math.asin(k) + Math.PI / 2\r
-        }\r
-        a.moveTo(b, c + i);\r
-        var h = b + f * g - e - (e ? 0 : i);\r
-        e < f * g && a.lineTo(h, c + i);\r
-        f = c + e;\r
-        e && a.arc(h, f, e - i, -Math.PI / 2 + j, 0, false);\r
-        var m = c + d - e - (e ? 0 : i),\r
-            l = h + e - (e ? i : 0);\r
-        a.lineTo(l, m);\r
-        var n = h;\r
-        e && a.arc(n, m, e - i, 0, Math.PI / 2 - j, false);\r
-        var o = c + d - i;\r
-        a.lineTo(b, o);\r
-        a.lineTo(b, c + i);\r
-        return [l, o]\r
-    },\r
-    $: function (a, b, c, d, e, f, g) {\r
-        this.xa(a, b, c, d, e, f);\r
-        this.ya(a, b, c, d, g)\r
-    },\r
-    ya: function (a, b, c, d, e) {\r
-        if (this.e.yAxis) {\r
-            var f = c.x - 0.5,\r
-                g = d.y + 0.5,\r
-                i = c.y;\r
-            this.i(a, f, g, f, i, this.e.yAxis.color, 1);\r
-            for (a = 0; a < b.length; a++) this.renderTextAt("middle", 0, 0, i + e / 2 + a * e, this.e.yAxis.template(b[a]), "dhx_axis_item_y", c.x - 5);\r
-            this.oa(c, d)\r
-        }\r
-    },\r
-    xa: function (a, b, c, d, e, f) {\r
-        var g, i = {},\r
-            j = this.e.xAxis;\r
-        if (j) {\r
-            b = d.y + 0.5;\r
-            var k = c.x - 0.5,\r
-                h = d.x - 0.5;\r
-            this.i(a, k, b, h, b, j.color, 1);\r
-            if (j.step) g = parseFloat(j.step);\r
-            if (typeof j.step == "undefined" || typeof j.start == "undefined" || typeof j.end == "undefined") {\r
-                i = this.V(e, f);\r
-                e = i.start;\r
-                f = i.end;\r
-                g = i.step;\r
-                this.e.xAxis.end = f;\r
-                this.e.xAxis.start = e;\r
-                this.e.xAxis.step = g\r
-            }\r
-            if (g !== 0) {\r
-                for (var m = (h - k) * g / (f - e), l = 0, n = e; n <= f; n += g) {\r
-                    if (i.fixNum) n = parseFloat((new Number(n)).toFixed(i.fixNum));\r
-                    var o = Math.floor(k + l * m) + 0.5;\r
-                    n != e && j.lines && this.i(a, o, b, o, c.y, this.e.xAxis.color, 0.2);\r
-                    this.renderTextAt(false, true, o, b + 2, j.template(n.toString()), "dhx_axis_item_x");\r
-                    l++\r
-                }\r
-                this.renderTextAt(true, false, k, d.y + this.e.padding.bottom - 3, this.e.xAxis.title, "dhx_axis_title_x", d.x - c.x);\r
-                j.lines && this.i(a, k, c.y - 0.5, h, c.y - 0.5, this.e.xAxis.color, 0.2)\r
-            }\r
-        }\r
-    }\r
-};\r
-dhtmlxchart.chart.stackedBarH = {\r
-    pvt_render_stackedBarH: function (a, b, c, d, e, f) {\r
-        var g, i, j, k, h = d.x - c.x,\r
-            m = !! this.e.yAxis;\r
-        i = this.Q(b);\r
-        g = i.max;\r
-        i = i.min;\r
-        var l = Math.floor((d.y - c.y) / b.length);\r
-        e || this.$(a, b, c, d, i, g, l);\r
-        if (m) {\r
-            g = parseFloat(this.e.xAxis.end);\r
-            i = parseFloat(this.e.xAxis.start)\r
-        }\r
-        j = this.z(i, g);\r
-        k = j[0];\r
-        j = j[1];\r
-        var n = k ? h / k : 10;\r
-        if (!m) {\r
-            var o = 10;\r
-            n = k ? (h - o) / k : 10\r
-        }\r
-        k = parseInt(this.e.width, 10);\r
-        if (k + 4 > l) k = l - 4;\r
-        var s = Math.floor((l - k) / 2),\r
-            t = 0,\r
-            q = false,\r
-            v = this.e.gradient;\r
-        q = false;\r
-        if (v = this.e.gradient) q = true;\r
-        m || this.i(a, c.x - 0.5, c.y, c.x - 0.5, d.y, "#000000", 1);\r
-        for (d = 0; d < b.length; d++) {\r
-            if (!e) b[d].$startX = c.x;\r
-            var p = parseFloat(this.e.value(b[d]));\r
-            if (p > g) p = g;\r
-            p -= i;\r
-            p *= j;\r
-            var u = c.x,\r
-                r = c.y + s + d * l;\r
-            if (e) u = b[d].$startX;\r
-            if (p < 0 || this.e.yAxis && p === 0) this.renderTextAt("middle", true, u + 10, r + k / 2, this.e.label(b[d]));\r
-            else {\r
-                m || (p += o / n);\r
-                var w = this.e.color.call(this, b[d]);\r
-                if (this.e.border) {\r
-                    a.beginPath();\r
-                    a.fillStyle = w;\r
-                    this.o(a, u, r, k, t, n, p, 0);\r
-                    a.lineTo(u, 0);\r
-                    a.fill();\r
-                    a.fillStyle = "#000000";\r
-                    a.globalAlpha = 0.37;\r
-                    a.beginPath();\r
-                    this.o(a, u, r, k, t, n, p, 0);\r
-                    a.fill()\r
-                }\r
-                a.globalAlpha = 1;\r
-                a.globalAlpha = this.e.alpha.call(this, b[d]);\r
-                a.fillStyle = this.e.color.call(this, b[d]);\r
-                a.beginPath();\r
-                var x = this.o(a, u, r, k, t, n, p, this.e.border ? 1 : 0);\r
-                if (v && !q) a.lineTo(c.x + h, r + (this.e.border ? 1 : 0));\r
-                a.fill();\r
-                if (q != false) {\r
-                    w = this.G(a, u, r + k, u, r, q, w, "x");\r
-                    a.fillStyle = w.gradient;\r
-                    a.beginPath();\r
-                    x = this.o(a, u, r, k, t, n, p, 0);\r
-                    a.fill();\r
-                    a.globalAlpha = 1\r
-                }\r
-                this.renderTextAt("middle", true, b[d].$startX + (x[0] - b[d].$startX) / 2 - 1, r + (x[1] - r) / 2, this.e.label(b[d]));\r
-                f.addRect(b[d].id, [b[d].$startX, r, x[0], x[1]], e);\r
-                b[d].$startX = x[0]\r
-            }\r
-        }\r
-    }\r
-};\r
-dhtmlxchart.chart.stackedBar = {\r
-    pvt_render_stackedBar: function (a, b, c, d, e, f) {\r
-        var g, i, j, k = d.y - c.y;\r
-        j = !! this.e.yAxis;\r
-        var h = !! this.e.xAxis;\r
-        i = this.Q(b);\r
-        g = i.max;\r
-        i = i.min;\r
-        var m = Math.floor((d.x - c.x) / b.length);\r
-        e || this.N(a, b, c, d, i, g, m);\r
-        if (j) {\r
-            g = parseFloat(this.e.yAxis.end);\r
-            i = parseFloat(this.e.yAxis.start)\r
-        }\r
-        g = this.z(i, g);\r
-        j = g[0];\r
-        g = g[1];\r
-        j = j ? k / j : 10;\r
-        var l = parseInt(this.e.width, 10);\r
-        if (l + 4 > m) l = m - 4;\r
-        var n = Math.floor((m - l) / 2),\r
-            o = this.e.gradient ? this.e.gradient : false;\r
-        h || this.i(a, c.x, d.y + 0.5, d.x, d.y + 0.5, "#000000", 1);\r
-        for (h = 0; h < b.length; h++) {\r
-            var s = parseFloat(this.e.value(b[h]));\r
-            if (s) {\r
-                e || (s -= i);\r
-                s *= g;\r
-                var t = c.x + n + h * m,\r
-                    q = d.y;\r
-                if (e) q = b[h].$startY;\r
-                if (!(q < c.y + 1)) if (s < 0 || this.e.yAxis && s === 0) this.renderTextAt(true, true, t + Math.floor(l / 2), q, this.e.label(b[h]));\r
-                else {\r
-                    var v = this.e.color.call(this, b[h]);\r
-                    if (this.e.border) {\r
-                        a.beginPath();\r
-                        a.fillStyle = v;\r
-                        this.I(a, t - 1, q, l + 2, j, s, 0, c.y);\r
-                        a.lineTo(t, q);\r
-                        a.fill();\r
-                        a.fillStyle = "#000000";\r
-                        a.globalAlpha = 0.37;\r
-                        a.beginPath();\r
-                        this.I(a, t - 1, q, l + 2, j, s, 0, c.y);\r
-                        a.fill()\r
-                    }\r
-                    a.globalAlpha = this.e.alpha.call(this, b[h]);\r
-                    a.fillStyle = this.e.color.call(this, b[h]);\r
-                    a.beginPath();\r
-                    var p = this.I(a, t, q, l, j, s, this.e.border ? 1 : 0, c.y);\r
-                    a.fill();\r
-                    a.globalAlpha = 1;\r
-                    if (o) {\r
-                        v = this.G(a, t, q, t + l, p[1], o, v, "y");\r
-                        a.fillStyle = v.gradient;\r
-                        a.beginPath();\r
-                        p = this.I(a, t + v.offset, q, l - v.offset * 2, j, s, this.e.border ? 1 : 0, c.y);\r
-                        a.fill();\r
-                        a.globalAlpha = 1\r
-                    }\r
-                    this.renderTextAt(false, true, t + Math.floor(l / 2), p[1] + (q - p[1]) / 2 - 7, this.e.label(b[h]));\r
-                    f.addRect(b[h].id, [t, p[1], p[0], b[h].$startY || q], e);\r
-                    b[h].$startY = this.e.border ? p[1] + 1 : p[1]\r
-                }\r
-            }\r
-        }\r
-    },\r
-    I: function (a, b, c, d, e, f, g, i) {\r
-        a.moveTo(b, c);\r
-        f = c - e * f + g;\r
-        if (f < i) f = i;\r
-        a.lineTo(b, f);\r
-        e = b + d;\r
-        f = f;\r
-        a.lineTo(e, f);\r
-        var j = b + d;\r
-        a.lineTo(j, c);\r
-        a.lineTo(b, c);\r
-        return [j, f - 2 * g]\r
-    }\r
-};\r
-dhtmlxchart.chart.line = {\r
-    pvt_render_line: function (a, b, c, d, e, f) {\r
-        e = this.C(a, b, c, d, e);\r
-        var g = Math.floor(e.cellWidth / 2);\r
-        if (b.length) for (var i = this.p(b[0], c, d, e), j = this.e.offset ? c.x + e.cellWidth * 0.5 : c.x, k = j, h = 1; h <= b.length; h++) {\r
-            var m = Math.floor(e.cellWidth * h) - 0.5 + k;\r
-            if (b.length != h) {\r
-                var l = this.p(b[h], c, d, e);\r
-                this.i(a, j, i, m, l, this.e.line.color(b[h - 1]), this.e.line.width)\r
-            }\r
-            this.M(a, j, i, b[h - 1], !! this.e.offset);\r
-            f.addRect(b[h - 1].id, [j - g, i - g, j + g, i + g]);\r
-            i = l;\r
-            j = m\r
-        }\r
-    },\r
-    M: function (a, b, c, d, e) {\r
-        var f = parseInt(this.e.item.radius, 10);\r
-        a.lineWidth = parseInt(this.e.item.borderWidth, 10);\r
-        a.fillStyle = this.e.item.color(d);\r
-        a.strokeStyle = this.e.item.borderColor(d);\r
-        a.beginPath();\r
-        a.arc(b, c, f, 0, Math.PI * 2, true);\r
-        a.fill();\r
-        a.stroke();\r
-        e && this.renderTextAt(false, true, b, c - f - this.e.labelOffset, this.e.label(d))\r
-    },\r
-    p: function (a, b, c, d) {\r
-        var e = d.minValue,\r
-            f = d.maxValue,\r
-            g = d.unit,\r
-            i = d.valueFactor;\r
-        a = this.e.value(a);\r
-        i = (parseFloat(a) - e) * i;\r
-        this.e.yAxis || (i += d.startValue / g);\r
-        d = c.y - Math.floor(g * i);\r
-        if (i < 0) d = c.y;\r
-        if (a > f) d = b.y;\r
-        if (a < e) d = c.y;\r
-        return d\r
-    },\r
-    C: function (a, b, c, d, e) {\r
-        var f = {};\r
-        f.totalHeight = d.y - c.y;\r
-        f.cellWidth = Math.round((d.x - c.x) / (!this.e.offset ? b.length - 1 : b.length));\r
-        var g = !! this.e.yAxis,\r
-            i = this.e.view.indexOf("stacked") != -1 ? this.Q(b) : this.O();\r
-        f.maxValue = i.max;\r
-        f.minValue = i.min;\r
-        e || this.N(a, b, c, d, f.minValue, f.maxValue, f.cellWidth);\r
-        if (g) {\r
-            f.maxValue = parseFloat(this.e.yAxis.end);\r
-            f.minValue = parseFloat(this.e.yAxis.start)\r
-        }\r
-        b = this.z(f.minValue, f.maxValue);\r
-        a = b[0];\r
-        f.valueFactor = b[1];\r
-        f.unit = a ? f.totalHeight / a : 10;\r
-        f.startValue = 0;\r
-        if (!g) {\r
-            f.startValue = f.unit > 10 ? f.unit : 10;\r
-            f.unit = a ? (f.totalHeight - f.startValue) / a : 10\r
-        }\r
-        return f\r
-    }\r
-};\r
-dhtmlxchart.chart.bar = {\r
-    pvt_render_bar: function (a, b, c, d, e, f) {\r
-        var g, i, j, k, h = d.y - c.y,\r
-            m = !! this.e.yAxis,\r
-            l = !! this.e.xAxis;\r
-        i = this.O();\r
-        g = i.max;\r
-        i = i.min;\r
-        var n = Math.floor((d.x - c.x) / b.length);\r
-        !e && !(this.e.origin != "auto" && !m) && this.N(a, b, c, d, i, g, n);\r
-        if (m) {\r
-            g = parseFloat(this.e.yAxis.end);\r
-            i = parseFloat(this.e.yAxis.start)\r
-        }\r
-        j = this.z(i, g);\r
-        k = j[0];\r
-        j = j[1];\r
-        var o = k ? h / k : k;\r
-        if (!m && !(this.e.origin != "auto" && l)) {\r
-            var s = 10;\r
-            o = k ? (h - s) / k : s\r
-        }!e && this.e.origin != "auto" && !m && this.e.origin > i && this.da(a, b, c, d, n, d.y - o * (this.e.origin - i));\r
-        h = parseInt(this.e.width, 10);\r
-        if (this.h && h * this.h.length + 4 > n) h = n / this.h.length - 4;\r
-        k = Math.floor((n - h * this.h.length) / 2);\r
-        var t = typeof this.e.radius != "undefined" ? parseInt(this.e.radius, 10) : Math.round(h / 5),\r
-            q = false,\r
-            v = this.e.gradient;\r
-        if (v && typeof v != "function") {\r
-            q = v;\r
-            v = false\r
-        } else if (v) {\r
-            v = a.createLinearGradient(0, d.y, 0, c.y);\r
-            this.e.gradient(v)\r
-        }\r
-        l || this.i(a, c.x, d.y + 0.5, d.x, d.y + 0.5, "#000000", 1);\r
-        for (var p = 0; p < b.length; p++) {\r
-            var u = parseFloat(this.e.value(b[p]));\r
-            if (u > g) u = g;\r
-            u -= i;\r
-            u *= j;\r
-            var r = c.x + k + p * n + (h + 1) * e,\r
-                w = d.y;\r
-            if (u < 0 || this.e.yAxis && u === 0 && !(this.e.origin != "auto" && this.e.origin > i)) this.renderTextAt(true, true, r + Math.floor(h / 2), w, this.e.label(b[p]));\r
-            else {\r
-                if (!m && !(this.e.origin != "auto" && l)) u += s / o;\r
-                var x = v || this.e.color.call(this, b[p]);\r
-                this.e.border && this.va(a, r, w, h, i, t, o, u, x);\r
-                a.globalAlpha = this.e.alpha.call(this, b[p]);\r
-                var y = this.ua(a, c, r, w, h, i, t, o, u, x, v, q);\r
-                a.globalAlpha = 1;\r
-                q && this.wa(a, r, w, h, i, t, o, u, x, q);\r
-                y[0] != r ? this.renderTextAt(false, true, r + Math.floor(h / 2), y[1], this.e.label(b[p])) : this.renderTextAt(true, true, r + Math.floor(h / 2), y[3], this.e.label(b[p]));\r
-                f.addRect(b[p].id, [r, y[3], y[2], y[1]], e)\r
-            }\r
-        }\r
-    },\r
-    K: function (a, b, c, d, e, f, g) {\r
-        var i = this.e.xAxis,\r
-            j = c;\r
-        if (i && this.e.origin != "auto" && this.e.origin > g) {\r
-            c -= (this.e.origin - g) * e;\r
-            j = c;\r
-            d -= this.e.origin - g;\r
-            if (d < 0) {\r
-                d *= -1;\r
-                a.translate(b + f, c);\r
-                a.rotate(Math.PI);\r
-                c = b = 0\r
-            }\r
-            c -= 0.5\r
-        }\r
-        return {\r
-            value: d,\r
-            x0: b,\r
-            y0: c,\r
-            start: j\r
-        }\r
-    },\r
-    ua: function (a, b, c, d, e, f, g, i, j, k, h, m) {\r
-        a.save();\r
-        a.fillStyle = k;\r
-        var l = this.K(a, c, d, j, i, e, f);\r
-        e = this.H(a, l.x0, l.y0, e, g, i, l.value, this.e.border ? 1 : 0);\r
-        if (h && !m) a.lineTo(l.x0 + (this.e.border ? 1 : 0), b.y);\r
-        a.fill();\r
-        a.restore();\r
-        a = l.x0;\r
-        b = l.x0 != c ? c + e[0] : e[0];\r
-        d = l.x0 != c ? l.start - e[1] : d;\r
-        c = l.x0 != c ? l.start : e[1];\r
-        return [a, d, b, c]\r
-    },\r
-    va: function (a, b, c, d, e, f, g, i, j) {\r
-        a.save();\r
-        b = this.K(a, b, c, i, g, d, e);\r
-        a.fillStyle = j;\r
-        this.H(a, b.x0, b.y0, d, f, g, b.value, 0);\r
-        a.lineTo(b.x0, 0);\r
-        a.fill();\r
-        a.fillStyle = "#000000";\r
-        a.globalAlpha = 0.37;\r
-        this.H(a, b.x0, b.y0, d, f, g, b.value, 0);\r
-        a.fill();\r
-        a.restore()\r
-    },\r
-    wa: function (a, b, c, d, e, f, g, i, j, k) {\r
-        a.save();\r
-        b = this.K(a, b, c, i, g, d, e);\r
-        j = this.G(a, b.x0, b.y0, b.x0 + d, b.y0 - g * b.value + 2, k, j, "y");\r
-        a.fillStyle = j.gradient;\r
-        this.H(a, b.x0 + j.offset, b.y0, d - j.offset * 2, f, g, b.value, j.offset);\r
-        a.fill();\r
-        a.restore()\r
-    },\r
-    H: function (a, b, c, d, e, f, g, i) {\r
-        a.beginPath();\r
-        var j = 0;\r
-        if (e > f * g) {\r
-            var k = (e - f * g) / e;\r
-            j = -Math.acos(k) + Math.PI / 2\r
-        }\r
-        a.moveTo(b + i, c);\r
-        var h = c - Math.floor(f * g) + e + (e ? 0 : i);\r
-        e < f * g && a.lineTo(b + i, h);\r
-        f = b + e;\r
-        e && a.arc(f, h, e - i, -Math.PI + j, -Math.PI / 2, false);\r
-        g = b + d - e - (e ? 0 : i);\r
-        f = h - e + (e ? i : 0);\r
-        a.lineTo(g, f);\r
-        h = h;\r
-        e && a.arc(g, h, e - i, -Math.PI / 2, 0 - j, false);\r
-        d = b + d - i;\r
-        a.lineTo(d, c);\r
-        a.lineTo(b + i, c);\r
-        return [d, f]\r
-    }\r
-};\r
-dhtmlxchart.chart.pie = {\r
-    pvt_render_pie: function (a, b, c, d, e, f) {\r
-        this.na(a, b, c, d, 1, f)\r
-    },\r
-    na: function (a, b, c, d, e, f) {\r
-        var g = 0,\r
-            i = this.Ga(c, d);\r
-        c = this.e.radius ? this.e.radius : i.radius;\r
-        this.max(this.e.value);\r
-        for (var j = [], k = [], h = 0, m = 0; m < b.length; m++) g += parseFloat(this.e.value(b[m]));\r
-        for (m = 0; m < b.length; m++) {\r
-            k[m] = parseFloat(this.e.value(b[m]));\r
-            j[m] = Math.PI * 2 * (g ? (k[m] + h) / g : 1 / b.length);\r
-            h += k[m]\r
-        }\r
-        d = this.e.x ? this.e.x : i.x;\r
-        var l = this.e.y ? this.e.y : i.y;\r
-        e == 1 && this.e.shadow && this.sa(a, d, l, c);\r
-        l /= e;\r
-        var n = -Math.PI / 2;\r
-        a.scale(1, e);\r
-        for (m = 0; m < b.length; m++) if (k[m]) {\r
-            a.lineWidth = 2;\r
-            a.beginPath();\r
-            a.moveTo(d, l);\r
-            alpha1 = -Math.PI / 2 + j[m] - 1.0E-4;\r
-            a.arc(d, l, c, n, alpha1, false);\r
-            a.lineTo(d, l);\r
-            var o = this.e.color.call(this, b[m]);\r
-            a.fillStyle = o;\r
-            a.strokeStyle = this.e.lineColor(b[m]);\r
-            a.stroke();\r
-            a.fill();\r
-            this.e.pieInnerText && this.ba(d, l, 5 * c / 6, n, alpha1, e, this.e.pieInnerText(b[m], g), true);\r
-            this.e.label && this.ba(d, l, c + this.e.labelOffset, n, alpha1, e, this.e.label(b[m]));\r
-            if (e != 1) {\r
-                this.W(a, d, l, n, alpha1, c, true);\r
-                a.fillStyle = "#000000";\r
-                a.globalAlpha = 0.2;\r
-                this.W(a, d, l, n, alpha1, c, false);\r
-                a.globalAlpha = 1;\r
-                a.fillStyle = o\r
-            }\r
-            f.addSector(b[m].id, n, alpha1, d, l, c, e);\r
-            n = alpha1\r
-        }\r
-        if (this.e.gradient) {\r
-            b = e != 1 ? d + c / 3 : d;\r
-            f = e != 1 ? l + c / 3 : l;\r
-            this.bb(a, d, l, c, b, f)\r
-        }\r
-        a.scale(1, 1 / e)\r
-    },\r
-    Ga: function (a, b) {\r
-        var c = b.x - a.x,\r
-            d = b.y - a.y;\r
-        b = a.x + c / 2;\r
-        a = a.y + d / 2;\r
-        var e = Math.min(c / 2, d / 2);\r
-        return {\r
-            x: b,\r
-            y: a,\r
-            radius: e\r
-        }\r
-    },\r
-    W: function (a, b, c, d, e, f, g) {\r
-        a.lineWidth = 1;\r
-        if (d <= 0 && e >= 0 || d >= 0 && e <= Math.PI || d <= Math.PI && e >= Math.PI) {\r
-            if (d <= 0 && e >= 0) {\r
-                d = 0;\r
-                g = false;\r
-                this.ca(a, b, c, f, d, e)\r
-            }\r
-            if (d <= Math.PI && e >= Math.PI) {\r
-                e = Math.PI;\r
-                g = false;\r
-                this.ca(a, b, c, f, d, e)\r
-            }\r
-            var i = (this.e.height || Math.floor(f / 4)) / this.e.cant;\r
-            a.beginPath();\r
-            a.arc(b, c, f, d, e, false);\r
-            a.lineTo(b + f * Math.cos(e), c + f * Math.sin(e) + i);\r
-            a.arc(b, c + i, f, e, d, true);\r
-            a.lineTo(b + f * Math.cos(d), c + f * Math.sin(d));\r
-            a.fill();\r
-            g && a.stroke()\r
-        }\r
-    },\r
-    ca: function (a, b, c, d, e, f) {\r
-        a.beginPath();\r
-        a.arc(b, c, d, e, f, false);\r
-        a.stroke()\r
-    },\r
-    sa: function (a, b, c, d) {\r
-        for (var e = ["#676767", "#7b7b7b", "#a0a0a0", "#bcbcbc", "#d1d1d1", "#d6d6d6"], f = e.length - 1; f > -1; f--) {\r
-            a.beginPath();\r
-            a.fillStyle = e[f];\r
-            a.arc(b + 2, c + 2, d + f, 0, Math.PI * 2, true);\r
-            a.fill()\r
-        }\r
-    },\r
-    Fa: function (a) {\r
-        a.addColorStop(0, "#ffffff");\r
-        a.addColorStop(0.7, "#7a7a7a");\r
-        a.addColorStop(1, "#000000");\r
-        return a\r
-    },\r
-    bb: function (a, b, c, d, e, f) {\r
-        a.globalAlpha = 0.3;\r
-        a.beginPath();\r
-        var g;\r
-        if (typeof this.e.gradient != "function") {\r
-            g = a.createRadialGradient(e, f, d / 4, b, c, d);\r
-            g = this.Fa(g)\r
-        } else g = this.e.gradient(g);\r
-        a.fillStyle = g;\r
-        a.arc(b, c, d, 0, Math.PI * 2, true);\r
-        a.fill();\r
-        a.globalAlpha = 1\r
-    },\r
-    ba: function (a, b, c, d, e, f, g, i) {\r
-        var j = this.renderText(0, 0, g, 0, 1);\r
-        if (j) {\r
-            var k = j.scrollWidth;\r
-            j.style.width = k + "px";\r
-            if (k > a) k = a;\r
-            var h = 8;\r
-            if (i) h = k / 1.8;\r
-            var m = d + (e - d) / 2;\r
-            c -= (h - 8) / 2;\r
-            var l = -h,\r
-                n = -8,\r
-                o = "left";\r
-            if (m >= Math.PI / 2 && m < Math.PI) {\r
-                l = -k - l + 1;\r
-                o = "right"\r
-            }\r
-            if (m <= 3 * Math.PI / 2 && m >= Math.PI) {\r
-                l = -k - l + 1;\r
-                o = "right"\r
-            }\r
-            d = (b + Math.floor(c * Math.sin(m))) * f + n;\r
-            h = a + Math.floor((c + h / 2) * Math.cos(m)) + l;\r
-            var s = e < Math.PI / 2 + 0.01,\r
-                t = m < Math.PI / 2;\r
-            if (t && s) h = Math.max(h, a + 3);\r
-            else if (!t && !s) h = Math.min(h, a - k);\r
-            if (!i && f < 1 && d > b * f) d += this.e.height || Math.floor(c / 4);\r
-            j.style.top = d + "px";\r
-            j.style.left = h + "px";\r
-            j.style.width = k + "px";\r
-            j.style.textAlign = o;\r
-            j.style.whiteSpace = "nowrap"\r
-        }\r
-    }\r
-};\r
-dhtmlxchart.chart.pie3D = {\r
-    pvt_render_pie3D: function (a, b, c, d, e, f) {\r
-        this.na(a, b, c, d, this.e.cant, f)\r
-    }\r
-};\r
-dhtmlxchart.Template = {\r
-    J: {},\r
-    empty: function () {\r
-        return ""\r
-    },\r
-    setter: function (a, b) {\r
-        return dhtmlxchart.Template.fromHTML(b)\r
-    },\r
-    obj_setter: function (a, b) {\r
-        var c = dhtmlxchart.Template.setter(a, b),\r
-            d = this;\r
-        return function () {\r
-            return c.apply(d, arguments)\r
-        }\r
-    },\r
-    fromHTML: function (a) {\r
-        if (typeof a == "function") return a;\r
-        if (this.J[a]) return this.J[a];\r
-        a = (a || "").toString();\r
-        a = a.replace(/[\r\n]+/g, "\\n");\r
-        a = a.replace(/\{obj\.([^}?]+)\?([^:]*):([^}]*)\}/g, '"+(obj.$1?"$2":"$3")+"');\r
-        a = a.replace(/\{common\.([^}\(]*)\}/g, '"+common.$1+"');\r
-        a = a.replace(/\{common\.([^\}\(]*)\(\)\}/g, '"+(common.$1?common.$1(obj):"")+"');\r
-        a = a.replace(/\{obj\.([^}]*)\}/g, '"+obj.$1+"');\r
-        a = a.replace(/#([a-z0-9_]+)#/gi, '"+obj.$1+"');\r
-        a = a.replace(/\{obj\}/g, '"+obj+"');\r
-        a = a.replace(/\{-obj/g, "{obj");\r
-        a = a.replace(/\{-common/g, "{common");\r
-        a = 'return "' + a + '";';\r
-        return this.J[a] = Function("obj", "common", a)\r
-    }\r
-};\r
-dhtmlxchart.Type = {\r
-    add: function (a, b) {\r
-        if (!a.types && a.prototype.types) a = a.prototype;\r
-        var c = b.name || "default";\r
-        this.T(b);\r
-        this.T(b, "edit");\r
-        this.T(b, "loading");\r
-        a.types[c] = dhtmlxchart.extend(dhtmlxchart.extend({}, a.types[c] || this.ta), b);\r
-        return c\r
-    },\r
-    ta: {\r
-        css: "default",\r
-        template: function () {\r
-            return ""\r
-        },\r
-        template_edit: function () {\r
-            return ""\r
-        },\r
-        template_loading: function () {\r
-            return "..."\r
-        },\r
-        width: 150,\r
-        height: 80,\r
-        margin: 5,\r
-        padding: 0\r
-    },\r
-    T: function (a, b) {\r
-        b = "template" + (b ? "_" + b : "");\r
-        var c = a[b];\r
-        if (c && typeof c == "string") {\r
-            if (c.indexOf("->") != -1) {\r
-                c = c.split("->");\r
-                switch (c[0]) {\r
-                case "html":\r
-                    c = dhtmlxchart.html.getValue(c[1]).replace(/\"/g, '\\"');\r
-                    break;\r
-                case "http":\r
-                    c = (new dhtmlxchart.ajax).sync().get(c[1], {\r
-                        uid: (new Date).valueOf()\r
-                    }).responseText;\r
-                    break;\r
-                default:\r
-                    break\r
-                }\r
-            }\r
-            a[b] = dhtmlxchart.Template.fromHTML(c)\r
-        }\r
-    }\r
-};\r
-dhtmlxchart.SingleRender = {\r
-    k: function () {},\r
-    eb: function (a) {\r
-        return this.type.Oa(a, this.type) + this.type.template(a, this.type) + this.type.Na\r
-    },\r
-    render: function () {\r
-        if (!this.callEvent || this.callEvent("onBeforeRender", [this.data])) {\r
-            if (this.data) this.L.innerHTML = this.eb(this.data);\r
-            this.callEvent && this.callEvent("onAfterRender", [])\r
-        }\r
-    }\r
-};\r
-dhtmlxchart.ui.Tooltip = function (a) {\r
-    this.name = "Tooltip";\r
-    this.version = "3.0";\r
-    if (typeof a == "string") a = {\r
-        template: a\r
-    };\r
-    dhtmlxchart.extend(this, dhtmlxchart.Settings);\r
-    dhtmlxchart.extend(this, dhtmlxchart.SingleRender);\r
-    this.B(a, {\r
-        type: "default",\r
-        dy: 0,\r
-        dx: 20\r
-    });\r
-    this.L = this.g = document.createElement("DIV");\r
-    this.g.className = "dhx_tooltip";\r
-    dhtmlxchart.html.insertBefore(this.g, document.body.firstChild)\r
-};\r
-dhtmlxchart.ui.Tooltip.prototype = {\r
-    show: function (a, b) {\r
-        if (!this.Z) {\r
-            if (this.data != a) {\r
-                this.data = a;\r
-                this.render(a)\r
-            }\r
-            this.g.style.top = b.y + this.e.dy + "px";\r
-            this.g.style.left = b.x + this.e.dx + "px";\r
-            this.g.style.display = "block"\r
-        }\r
-    },\r
-    hide: function () {\r
-        this.data = null;\r
-        this.g.style.display = "none"\r
-    },\r
-    disable: function () {\r
-        this.Z = true\r
-    },\r
-    enable: function () {\r
-        this.Z = false\r
-    },\r
-    types: {\r
-        "default": dhtmlxchart.Template.fromHTML("{obj.id}")\r
-    },\r
-    template_item_start: dhtmlxchart.Template.empty,\r
-    template_item_end: dhtmlxchart.Template.empty\r
-};\r
-dhtmlxchart.AutoTooltip = {\r
-    tooltip_setter: function (a, b) {\r
-        var c = new dhtmlxchart.ui.Tooltip(b);\r
-        this.attachEvent("onMouseMove", function (d, e) {\r
-            c.show(this.get(d), dhtmlxchart.html.pos(e))\r
-        });\r
-        this.attachEvent("onMouseOut", function () {\r
-            c.hide()\r
-        });\r
-        this.attachEvent("onMouseMoving", function () {\r
-            c.hide()\r
-        });\r
-        return c\r
-    }\r
-};\r
-dhtmlxchart.DataStore = function () {\r
-    this.name = "DataStore";\r
-    dhtmlxchart.extend(this, dhtmlxchart.EventSystem);\r
-    this.setDriver("xml");\r
-    this.pull = {};\r
-    this.order = dhtmlxchart.toArray();\r
-    this.gb = false\r
-};\r
-dhtmlxchart.DataStore.prototype = {\r
-    setDriver: function (a) {\r
-        this.driver = dhtmlxchart.DataDriver[a]\r
-    },\r
-    qa: function (a) {\r
-        if (a.item) {\r
-            if (!(a.item instanceof Array)) a.item = [a.item];\r
-            for (var b = 0; b < a.item.length; b++) {\r
-                var c = a.item[b],\r
-                    d = this.id(c);\r
-                a.item[b] = d;\r
-                this.pull[d] = c;\r
-                c.parent = a.id;\r
-                c.level = a.level + 1;\r
-                this.qa(c)\r
-            }\r
-        }\r
-    },\r
-    Wa: function (a) {\r
-        for (var b = this.driver.getInfo(a), c = this.driver.getRecords(a), d = (b.u || 0) * 1, e = 0, f = 0; f < c.length; f++) {\r
-            var g = this.driver.getDetails(c[f]),\r
-                i = this.id(g);\r
-            if (!this.pull[i]) {\r
-                this.order[e + d] = i;\r
-                e++\r
-            }\r
-            this.pull[i] = g;\r
-            if (this.gb) {\r
-                g.level = 1;\r
-                this.qa(g)\r
-            }\r
-        }\r
-        for (f = 0; f < b.w; f++) if (!this.order[f]) {\r
-            i = dhtmlxchart.uid();\r
-            g = {\r
-                id: i,\r
-                $template: "loading"\r
-            };\r
-            this.pull[i] = g;\r
-            this.order[f] = i\r
-        }\r
-        this.callEvent("onStoreLoad", [this.driver, a]);\r
-        this.refresh()\r
-    },\r
-    id: function (a) {\r
-        return a.id || (a.id = dhtmlxchart.uid())\r
-    },\r
-    get: function (a) {\r
-        return this.pull[a]\r
-    },\r
-    set: function (a, b) {\r
-        this.pull[a] = b;\r
-        this.refresh()\r
-    },\r
-    refresh: function (a) {\r
-        a ? this.callEvent("onStoreUpdated", [a, this.pull[a], "update"]) : this.callEvent("onStoreUpdated", [null, null, null])\r
-    },\r
-    getRange: function (a, b) {\r
-        if (arguments.length) {\r
-            a = this.indexById(a);\r
-            b = this.indexById(b);\r
-            if (a > b) {\r
-                var c = b;\r
-                b = a;\r
-                a = c\r
-            }\r
-        } else {\r
-            a = this.min || 0;\r
-            b = Math.min(this.max || Infinity, this.dataCount() - 1)\r
-        }\r
-        return this.getIndexRange(a, b)\r
-    },\r
-    getIndexRange: function (a, b) {\r
-        b = Math.min(b, this.dataCount() - 1);\r
-        var c = dhtmlxchart.toArray();\r
-        for (a = a; a <= b; a++) c.push(this.get(this.order[a]));\r
-        return c\r
-    },\r
-    dataCount: function () {\r
-        return this.order.length\r
-    },\r
-    exists: function (a) {\r
-        return !!this.pull[a]\r
-    },\r
-    move: function (a, b) {\r
-        if (!(a < 0 || b < 0)) {\r
-            var c = this.idByIndex(a),\r
-                d = this.get(c);\r
-            this.order.removeAt(a);\r
-            this.order.insertAt(c, Math.min(this.order.length, b));\r
-            this.callEvent("onStoreUpdated", [c, d, "move"])\r
-        }\r
-    },\r
-    add: function (a, b) {\r
-        var c = this.id(a),\r
-            d = this.dataCount();\r
-        if (dhtmlxchart.isNotDefined(b) || b < 0) b = d;\r
-        if (b > d) b = Math.min(this.order.length, b);\r
-        if (this.callEvent("onbeforeAdd", [c, b])) {\r
-            if (this.exists(c)) return null;\r
-            this.pull[c] = a;\r
-            this.order.insertAt(c, b);\r
-            if (this.m) {\r
-                var e = this.m.length;\r
-                if (!b && this.order.length) e = 0;\r
-                this.m.insertAt(c, e)\r
-            }\r
-            this.callEvent("onafterAdd", [c, b]);\r
-            this.callEvent("onStoreUpdated", [c, a, "add"]);\r
-            return c\r
-        }\r
-    },\r
-    remove: function (a) {\r
-        if (a instanceof\r
-        Array) for (var b = 0; b < a.length; b++) this.remove(a[b]);\r
-        else if (this.callEvent("onbeforedelete", [a])) {\r
-            if (!this.exists(a)) return null;\r
-            b = this.get(a);\r
-            this.order.remove(a);\r
-            this.m && this.m.remove(a);\r
-            delete this.pull[a];\r
-            this.callEvent("onafterdelete", [a]);\r
-            this.callEvent("onStoreUpdated", [a, b, "delete"])\r
-        }\r
-    },\r
-    clearAll: function () {\r
-        this.pull = {};\r
-        this.order = dhtmlxchart.toArray();\r
-        this.m = null;\r
-        this.callEvent("onClearAll", []);\r
-        this.refresh()\r
-    },\r
-    idByIndex: function (a) {\r
-        return this.order[a]\r
-    },\r
-    indexById: function (a) {\r
-        return a = this.order.find(a)\r
-    },\r
-    next: function (a, b) {\r
-        return this.order[this.indexById(a) + (b || 1)]\r
-    },\r
-    first: function () {\r
-        return this.order[0]\r
-    },\r
-    last: function () {\r
-        return this.order[this.order.length - 1]\r
-    },\r
-    previous: function (a, b) {\r
-        return this.order[this.indexById(a) - (b || 1)]\r
-    },\r
-    sort: function (a, b, c) {\r
-        var d = a;\r
-        if (typeof a == "function") d = {\r
-            as: a,\r
-            dir: b\r
-        };\r
-        else if (typeof a == "string") d = {\r
-            by: a,\r
-            dir: b,\r
-            as: c\r
-        };\r
-        var e = [d.by, d.dir, d.as];\r
-        if (this.callEvent("onbeforesort", e)) {\r
-            if (this.order.length) {\r
-                var f = dhtmlxchart.sort.create(d),\r
-                    g = this.getRange(this.first(), this.last());\r
-                g.sort(f);\r
-                this.order = g.map(function (i) {\r
-                    return this.id(i)\r
-                }, this)\r
-            }\r
-            this.refresh();\r
-            this.callEvent("onaftersort", e)\r
-        }\r
-    },\r
-    filter: function (a, b) {\r
-        if (this.m) {\r
-            this.order = this.m;\r
-            delete this.m\r
-        }\r
-        if (a) {\r
-            var c = a;\r
-            if (typeof a == "string") {\r
-                a = dhtmlxchart.Template.setter(0, a);\r
-                c = function (e, f) {\r
-                    return a(e).toLowerCase().indexOf(f) != -1\r
-                }\r
-            }\r
-            b = (b || "").toString().toLowerCase();\r
-            var d = dhtmlxchart.toArray();\r
-            this.order.each(function (e) {\r
-                c(this.get(e), b) && d.push(e)\r
-            }, this);\r
-            this.m = this.order;\r
-            this.order = d\r
-        }\r
-        this.refresh()\r
-    },\r
-    each: function (a, b) {\r
-        for (var c = 0; c < this.order.length; c++) a.call(b || this, this.get(this.order[c]))\r
-    },\r
-    provideApi: function (a, b) {\r
-        b && this.mapEvent({\r
-            onbeforesort: a,\r
-            onaftersort: a,\r
-            onbeforeadd: a,\r
-            onafteradd: a,\r
-            onbeforedelete: a,\r
-            onafterdelete: a\r
-        });\r
-        for (var c = ["sort", "add", "remove", "exists", "idByIndex", "indexById", "get", "set", "refresh", "dataCount", "filter", "next", "previous", "clearAll", "first", "last"], d = 0; d < c.length; d++) a[c[d]] = dhtmlxchart.methodPush(this, c[d])\r
-    }\r
-};\r
-dhtmlxchart.sort = {\r
-    create: function (a) {\r
-        return dhtmlxchart.sort.dir(a.dir, dhtmlxchart.sort.by(a.by, a.as))\r
-    },\r
-    as: {\r
-        "int": function (a, b) {\r
-            a *= 1;\r
-            b *= 1;\r
-            return a > b ? 1 : a < b ? -1 : 0\r
-        },\r
-        string_strict: function (a, b) {\r
-            a = a.toString();\r
-            b = b.toString();\r
-            return a > b ? 1 : a < b ? -1 : 0\r
-        },\r
-        string: function (a, b) {\r
-            a = a.toString().toLowerCase();\r
-            b = b.toString().toLowerCase();\r
-            return a > b ? 1 : a < b ? -1 : 0\r
-        }\r
-    },\r
-    by: function (a, b) {\r
-        if (typeof b != "function") b = dhtmlxchart.sort.as[b || "string"];\r
-        a = dhtmlxchart.Template.setter(0, a);\r
-        return function (c, d) {\r
-            return b(a(c), a(d))\r
-        }\r
-    },\r
-    dir: function (a, b) {\r
-        if (a == "asc") return b;\r
-        return function (c, d) {\r
-            return b(c, d) * -1\r
-        }\r
-    }\r
-};\r
-dhtmlxchart.Group = {\r
-    k: function () {\r
-        this.data.attachEvent("onStoreLoad", dhtmlxchart.bind(function () {\r
-            this.e.group && this.group(this.e.group, false)\r
-        }, this));\r
-        this.attachEvent("onBeforeRender", dhtmlxchart.bind(function (a) {\r
-            if (this.e.sort) {\r
-                a.block();\r
-                a.sort(this.e.sort);\r
-                a.unblock()\r
-            }\r
-        }, this));\r
-        this.attachEvent("onBeforeSort", dhtmlxchart.bind(function () {\r
-            this.e.sort = null\r
-        }, this))\r
-    },\r
-    Ja: function (a, b) {\r
-        a.attachEvent("onClearAll", dhtmlxchart.bind(function () {\r
-            this.ungroup(false)\r
-        }, b))\r
-    },\r
-    sum: function (a, b) {\r
-        a = dhtmlxchart.Template.setter(0, a);\r
-        b = b || this.data;\r
-        var c = 0;\r
-        b.each(function (d) {\r
-            c += a(d) * 1\r
-        });\r
-        return c\r
-    },\r
-    min: function (a, b) {\r
-        a = dhtmlxchart.Template.setter(0, a);\r
-        b = b || this.data;\r
-        var c = Infinity;\r
-        b.each(function (d) {\r
-            if (a(d) * 1 < c) c = a(d) * 1\r
-        });\r
-        return c * 1\r
-    },\r
-    max: function (a, b) {\r
-        a = dhtmlxchart.Template.setter(0, a);\r
-        b = b || this.data;\r
-        var c = -Infinity;\r
-        b.each(function (d) {\r
-            if (a(d) * 1 > c) c = a(d) * 1\r
-        });\r
-        return c\r
-    },\r
-    cb: function (a) {\r
-        var b = function (j, k) {\r
-            j = dhtmlxchart.Template.setter(0, j);\r
-            return j(k[0])\r
-        },\r
-            c = dhtmlxchart.Template.setter(0, a.by);\r
-        a.map[c] || (a.map[c] = [c, b]);\r
-        var d = {},\r
-            e = [];\r
-        this.data.each(function (j) {\r
-            var k = c(j);\r
-            if (!d[k]) {\r
-                e.push({\r
-                    id: k\r
-                });\r
-                d[k] = dhtmlxchart.toArray()\r
-            }\r
-            d[k].push(j)\r
-        });\r
-        for (var f in a.map) {\r
-            var g = a.map[f][1] || b;\r
-            if (typeof g != "function") g = this[g];\r
-            for (var i = 0; i < e.length; i++) e[i][f] = g.call(this, a.map[f][0], d[e[i].id])\r
-        }\r
-        this.ja = this.data;\r
-        this.data = new dhtmlxchart.DataStore;\r
-        this.data.provideApi(this, true);\r
-        this.Ja(this.data, this);\r
-        this.parse(e, "json")\r
-    },\r
-    group: function (a, b) {\r
-        this.ungroup(false);\r
-        this.cb(a);\r
-        b !== false && this.render()\r
-    },\r
-    ungroup: function (a) {\r
-        if (this.ja) {\r
-            this.data = this.ja;\r
-            this.data.provideApi(this, true)\r
-        }\r
-        a !== false && this.render()\r
-    },\r
-    group_setter: function (a, b) {\r
-        return b\r
-    },\r
-    sort_setter: function (a, b) {\r
-        if (typeof b != "object") b = {\r
-            by: b\r
-        };\r
-        this.n(b, {\r
-            as: "string",\r
-            dir: "asc"\r
-        });\r
-        return b\r
-    }\r
-};\r
-dhtmlxchart.KeyEvents = {\r
-    k: function () {\r
-        dhtmlxchart.event(this.g, "keypress", this.Ta, this)\r
-    },\r
-    Ta: function (a) {\r
-        a = a || event;\r
-        var b = a.which || a.keyCode;\r
-        this.callEvent(this.hb ? "onEditKeyPress" : "onKeyPress", [b, a.ctrlKey, a.shiftKey, a])\r
-    }\r
-};\r
-dhtmlxchart.MouseEvents = {\r
-    k: function () {\r
-        if (this.on_click) {\r
-            dhtmlxchart.event(this.g, "click", this.Qa, this);\r
-            dhtmlxchart.event(this.g, "contextmenu", this.Ra, this)\r
-        }\r
-        this.on_dblclick && dhtmlxchart.event(this.g, "dblclick", this.Sa, this);\r
-        if (this.on_mouse_move) {\r
-            dhtmlxchart.event(this.g, "mousemove", this.la, this);\r
-            dhtmlxchart.event(this.g, dhtmlxchart.r ? "mouseleave" : "mouseout", this.la, this)\r
-        }\r
-    },\r
-    Qa: function (a) {\r
-        return this.R(a, this.on_click, "ItemClick")\r
-    },\r
-    Sa: function (a) {\r
-        return this.R(a, this.on_dblclick, "ItemDblClick")\r
-    },\r
-    Ra: function (a) {\r
-        var b = dhtmlxchart.html.locate(a, this.q);\r
-        if (b && !this.callEvent("onBeforeContextMenu", [b, a])) return dhtmlxchart.html.preventEvent(a)\r
-    },\r
-    la: function (a) {\r
-        if (dhtmlxchart.r) a = document.createEventObject(event);\r
-        this.ia && window.clearTimeout(this.ia);\r
-        this.callEvent("onMouseMoving", [a]);\r
-        this.ia = window.setTimeout(dhtmlxchart.bind(function () {\r
-            a.type == "mousemove" ? this.Ua(a) : this.Va(a)\r
-        }, this), 500)\r
-    },\r
-    Ua: function (a) {\r
-        this.R(a, this.on_mouse_move, "MouseMove") || this.callEvent("onMouseOut", [a || event])\r
-    },\r
-    Va: function (a) {\r
-        this.callEvent("onMouseOut", [a || event])\r
-    },\r
-    R: function (a, b, c) {\r
-        a = a || event;\r
-        for (var d = a.target || a.srcElement, e = "", f = null, g = false; d && d.parentNode;) {\r
-            if (!g && d.getAttribute) if (f = d.getAttribute(this.q)) {\r
-                d.getAttribute("userdata") && this.callEvent("onLocateData", [f, d]);\r
-                if (!this.callEvent("on" + c, [f, a, d])) return;\r
-                g = true\r
-            }\r
-            if (e = d.className) {\r
-                e = e.split(" ");\r
-                e = e[0] || e[1];\r
-                if (b[e]) return b[e].call(this, a, f, d)\r
-            }\r
-            d = d.parentNode\r
-        }\r
-        return g\r
-    }\r
-};\r
-dhtmlxchart.Settings = {\r
-    k: function () {\r
-        this.e = this.config = {}\r
-    },\r
-    define: function (a, b) {\r
-        if (typeof a == "object") return this.ma(a);\r
-        return this.Y(a, b)\r
-    },\r
-    Y: function (a, b) {\r
-        var c = this[a + "_setter"];\r
-        return this.e[a] = c ? c.call(this, a, b) : b\r
-    },\r
-    ma: function (a) {\r
-        if (a) for (var b in a) this.Y(b, a[b])\r
-    },\r
-    B: function (a, b) {\r
-        var c = dhtmlxchart.extend({}, b);\r
-        typeof a == "object" && !a.tagName && dhtmlxchart.extend(c, a);\r
-        this.ma(c)\r
-    },\r
-    n: function (a, b) {\r
-        for (var c in b) switch (typeof a[c]) {\r
-        case "object":\r
-            a[c] = this.n(a[c] || {}, b[c]);\r
-            break;\r
-        case "undefined":\r
-            a[c] = b[c];\r
-            break;\r
-        default:\r
-            break\r
-        }\r
-        return a\r
-    },\r
-    Xa: function (a, b, c) {\r
-        if (typeof a == "object" && !a.tagName) a = a.container;\r
-        this.g = dhtmlxchart.toNode(a);\r
-        if (!this.g && c) this.g = c(a);\r
-        this.g.className += " " + b;\r
-        this.g.onselectstart = function () {\r
-            return false\r
-        };\r
-        this.L = this.g\r
-    },\r
-    ab: function (a) {\r
-        if (typeof a == "object") return this.type_setter("type", a);\r
-        this.type = dhtmlxchart.extend({}, this.types[a]);\r
-        this.customize()\r
-    },\r
-    customize: function (a) {\r
-        a && dhtmlxchart.extend(this.type, a);\r
-        this.type.Oa = dhtmlxchart.Template.fromHTML(this.template_item_start(this.type));\r
-        this.type.Na = this.template_item_end(this.type);\r
-        this.render()\r
-    },\r
-    type_setter: function (a, b) {\r
-        this.ab(typeof b == "object" ? dhtmlxchart.Type.add(this, b) : b);\r
-        return b\r
-    },\r
-    template_setter: function (a, b) {\r
-        return this.type_setter("type", {\r
-            template: b\r
-        })\r
-    },\r
-    css_setter: function (a, b) {\r
-        this.g.className += " " + b;\r
-        return b\r
-    }\r
-};\r
-dhtmlxchart.compat = function (a, b) {\r
-    dhtmlxchart.compat[a] && dhtmlxchart.compat[a](b)\r
-};\r
-(function () {\r
-    if (!window.dhtmlxchartError) {\r
-        var a = function () {};\r
-        window.dhtmlxchartError = {\r
-            catchError: a,\r
-            throwError: a\r
-        };\r
-        window.convertStringToBoolean = function (c) {\r
-            return !!c\r
-        };\r
-        window.dhtmlxchartEventable = function (c) {\r
-            dhtmlxchart.extend(c, dhtmlxchart.EventSystem)\r
-        };\r
-        var b = {\r
-            getXMLTopNode: function () {},\r
-            doXPath: function (c) {\r
-                return dhtmlxchart.DataDriver.xml.xpath(this.xml, c)\r
-            },\r
-            xmlDoc: {\r
-                responseXML: true\r
-            }\r
-        };\r
-        dhtmlxchart.compat.dataProcessor = function (c) {\r
-            var d = "_sendData",\r
-                e = "_in_progress",\r
-                f = "_tMode",\r
-                g = "_waitMode";\r
-            c[d] = function (i, j) {\r
-                if (i) {\r
-                    if (j) this[e][j] = (new Date).valueOf();\r
-                    if (!this.callEvent("onBeforeDataSending", j ? [j, this.getState(j)] : [])) return false;\r
-                    var k = this,\r
-                        h = this.serverProcessor;\r
-                    this[f] != "POST" ? dhtmlxchart.ajax().get(h + (h.indexOf("?") != -1 ? "&" : "?") + this.serialize(i, j), "", function (m, l) {\r
-                        b.xml = dhtmlxchart.DataDriver.xml.checkResponse(m, l);\r
-                        k.afterUpdate(k, null, null, null, b)\r
-                    }) : dhtmlxchart.ajax().post(h, this.serialize(i, j), function (m, l) {\r
-                        b.xml = dhtmlxchart.DataDriver.xml.checkResponse(m, l);\r
-                        k.afterUpdate(k, null, null, null, b)\r
-                    });\r
-                    this[g]++\r
-                }\r
-            }\r
-        }\r
-    }\r
-})();\r
-if (!dhtmlxchart.attaches) dhtmlxchart.attaches = {};\r
-dhtmlxchart.attaches.attachAbstract = function (a, b) {\r
-    var c = document.createElement("DIV");\r
-    c.id = "CustomObject_" + dhtmlxchart.uid();\r
-    c.style.width = "100%";\r
-    c.style.height = "100%";\r
-    c.cmp = "grid";\r
-    document.body.appendChild(c);\r
-    this.attachObject(c.id);\r
-    b.container = c.id;\r
-    var d = this.vs[this.av];\r
-    d.grid = new window[a](b);\r
-    d.gridId = c.id;\r
-    d.gridObj = c;\r
-    d.grid.setSizes = function () {\r
-        this.resize ? this.resize() : this.render()\r
-    };\r
-    var e = "_viewRestore";\r
-    return this.vs[this[e]()].grid\r
-};\r
-dhtmlxchart.attaches.attachDataView = function (a) {\r
-    return this.attachAbstract("dhtmlxchartDataView", a)\r
-};\r
-dhtmlxchart.attaches.attachChart = function (a) {\r
-    return this.attachAbstract("dhtmlxchartChart", a)\r
-};\r
-dhtmlxchart.compat.layout = function () {};\r
-dhtmlxchart.ajax = function (a, b, c) {\r
-    if (arguments.length !== 0) {\r
-        var d = new dhtmlxchart.ajax;\r
-        if (c) d.master = c;\r
-        d.get(a, null, b)\r
-    }\r
-    if (!this.getXHR) return new dhtmlxchart.ajax;\r
-    return this\r
-};\r
-dhtmlxchart.ajax.prototype = {\r
-    getXHR: function () {\r
-        return dhtmlxchart.r ? new ActiveXObject("Microsoft.xmlHTTP") : new XMLHttpRequest\r
-    },\r
-    send: function (a, b, c) {\r
-        var d = this.getXHR();\r
-        if (typeof c == "function") c = [c];\r
-        if (typeof b == "object") {\r
-            var e = [];\r
-            for (var f in b) e.push(f + "=" + encodeURIComponent(b[f]));\r
-            b = e.join("&")\r
-        }\r
-        if (b && !this.post) {\r
-            a = a + (a.indexOf("?") != -1 ? "&" : "?") + b;\r
-            b = null\r
-        }\r
-        d.open(this.post ? "POST" : "GET", a, !this.pa);\r
-        this.post && d.setRequestHeader("Content-type", "application/x-www-form-urlencoded");\r
-        if (!this.pa) {\r
-            var g = this;\r
-            d.onreadystatechange = function () {\r
-                if (!d.readyState || d.readyState == 4) {\r
-                    if (c && g) for (var i = 0; i < c.length; i++) if (c[i]) c[i].call(g.master || g, d.responseText, d.responseXML, d);\r
-                    c = d = g = g.master = null\r
-                }\r
-            }\r
-        }\r
-        d.send(b || null);\r
-        return d\r
-    },\r
-    get: function (a, b, c) {\r
-        this.post = false;\r
-        return this.send(a, b, c)\r
-    },\r
-    post: function (a, b, c) {\r
-        this.post = true;\r
-        return this.send(a, b, c)\r
-    },\r
-    sync: function () {\r
-        this.pa = true;\r
-        return this\r
-    }\r
-};\r
-dhtmlxchart.DataLoader = {\r
-    k: function () {\r
-        this.data = new dhtmlxchart.DataStore\r
-    },\r
-    load: function (a, b, c) {\r
-        this.callEvent("onXLS", []);\r
-        if (typeof b == "string") {\r
-            this.data.setDriver(b);\r
-            b = c\r
-        }\r
-        if (!this.data.feed) this.data.feed = function (d, e) {\r
-            if (this.F) return this.F = [d, e];\r
-            else this.F = true;\r
-            this.load(a + (a.indexOf("?") == -1 ? "?" : "&") + "posStart=" + d + "&count=" + e, function () {\r
-                var f = this.F;\r
-                this.F = false;\r
-                typeof f == "object" && this.data.feed.apply(this, f)\r
-            })\r
-        };\r
-        dhtmlxchart.ajax(a, [this.ka, b], this)\r
-    },\r
-    parse: function (a, b) {\r
-        this.callEvent("onXLS", []);\r
-        b && this.data.setDriver(b);\r
-        this.ka(a, null)\r
-    },\r
-    ka: function (a, b) {\r
-        this.data.Wa(this.data.driver.toObject(a, b));\r
-        this.callEvent("onXLE", [])\r
-    }\r
-};\r
-dhtmlxchart.DataDriver = {};\r
-dhtmlxchart.DataDriver.json = {\r
-    toObject: function (a) {\r
-        if (typeof a == "string") {\r
-            eval("dhtmlxchart.temp=" + a);\r
-            return dhtmlxchart.temp\r
-        }\r
-        return a\r
-    },\r
-    getRecords: function (a) {\r
-        if (a && !(a instanceof Array)) return [a];\r
-        return a\r
-    },\r
-    getDetails: function (a) {\r
-        return a\r
-    },\r
-    getInfo: function (a) {\r
-        return {\r
-            w: a.total_count || 0,\r
-            u: a.pos || 0\r
-        }\r
-    }\r
-};\r
-dhtmlxchart.DataDriver.html = {\r
-    toObject: function (a) {\r
-        if (typeof a == "string") {\r
-            var b = null;\r
-            if (a.indexOf("<") == -1) b = dhtmlxchart.toNode(a);\r
-            if (!b) {\r
-                b = document.createElement("DIV");\r
-                b.innerHTML = a\r
-            }\r
-            return b.getElementsByTagName(this.tag)\r
-        }\r
-        return a\r
-    },\r
-    getRecords: function (a) {\r
-        if (a.tagName) return a.childNodes;\r
-        return a\r
-    },\r
-    getDetails: function (a) {\r
-        return dhtmlxchart.DataDriver.xml.tagToObject(a)\r
-    },\r
-    getInfo: function () {\r
-        return {\r
-            w: 0,\r
-            u: 0\r
-        }\r
-    },\r
-    tag: "LI"\r
-};\r
-dhtmlxchart.DataDriver.jsarray = {\r
-    toObject: function (a) {\r
-        if (typeof a == "string") {\r
-            eval("dhtmlxchart.temp=" + a);\r
-            return dhtmlxchart.temp\r
-        }\r
-        return a\r
-    },\r
-    getRecords: function (a) {\r
-        return a\r
-    },\r
-    getDetails: function (a) {\r
-        for (var b = {}, c = 0; c < a.length; c++) b["data" + c] = a[c];\r
-        return b\r
-    },\r
-    getInfo: function () {\r
-        return {\r
-            w: 0,\r
-            u: 0\r
-        }\r
-    }\r
-};\r
-dhtmlxchart.DataDriver.csv = {\r
-    toObject: function (a) {\r
-        return a\r
-    },\r
-    getRecords: function (a) {\r
-        return a.split(this.row)\r
-    },\r
-    getDetails: function (a) {\r
-        a = this.stringToArray(a);\r
-        for (var b = {}, c = 0; c < a.length; c++) b["data" + c] = a[c];\r
-        return b\r
-    },\r
-    getInfo: function () {\r
-        return {\r
-            w: 0,\r
-            u: 0\r
-        }\r
-    },\r
-    stringToArray: function (a) {\r
-        a = a.split(this.cell);\r
-        for (var b = 0; b < a.length; b++) a[b] = a[b].replace(/^[ \t\n\r]*(\"|)/g, "").replace(/(\"|)[ \t\n\r]*$/g, "");\r
-        return a\r
-    },\r
-    row: "\n",\r
-    cell: ","\r
-};\r
-dhtmlxchart.DataDriver.xml = {\r
-    toObject: function (a, b) {\r
-        if (b && (b = this.checkResponse(a, b))) return b;\r
-        if (typeof a == "string") return this.fromString(a);\r
-        return a\r
-    },\r
-    getRecords: function (a) {\r
-        return this.xpath(a, this.records)\r
-    },\r
-    records: "/*/item",\r
-    userdata: "/*/userdata",\r
-    getDetails: function (a) {\r
-        return this.tagToObject(a, {})\r
-    },\r
-    getUserData: function (a, b) {\r
-        b = b || {};\r
-        var c = this.xpath(a, this.userdata);\r
-        for (a = 0; a < c.length; a++) {\r
-            var d = this.tagToObject(c[a]);\r
-            b[d.name] = d.value\r
-        }\r
-        return b\r
-    },\r
-    getInfo: function (a) {\r
-        return {\r
-            w: a.documentElement.getAttribute("total_count") || 0,\r
-            u: a.documentElement.getAttribute("pos") || 0\r
-        }\r
-    },\r
-    xpath: function (a, b) {\r
-        if (window.XPathResult) {\r
-            var c = a;\r
-            if (a.nodeName.indexOf("document") == -1) a = a.ownerDocument;\r
-            var d = [];\r
-            a = a.evaluate(b, c, null, XPathResult.ANY_TYPE, null);\r
-            for (b = a.iterateNext(); b;) {\r
-                d.push(b);\r
-                b = a.iterateNext()\r
-            }\r
-            return d\r
-        }\r
-        return a.selectNodes(b)\r
-    },\r
-    tagToObject: function (a, b) {\r
-        b = b || {};\r
-        for (var c = a.attributes, d = 0; d < c.length; d++) b[c[d].name] = c[d].value;\r
-        var e = false,\r
-            f = a.childNodes;\r
-        for (d = 0; d < f.length; d++) if (f[d].nodeType == 1) {\r
-            var g = f[d].tagName;\r
-            if (typeof b[g] != "undefined") {\r
-                b[g] instanceof Array || (b[g] = [b[g]]);\r
-                b[g].push(this.tagToObject(f[d], {}))\r
-            } else b[f[d].tagName] = this.tagToObject(f[d], {});\r
-            e = true\r
-        }\r
-        if (!c.length && !e) return this.nodeValue(a);\r
-        b.value = this.nodeValue(a);\r
-        return b\r
-    },\r
-    nodeValue: function (a) {\r
-        if (a.firstChild) return a.firstChild.data;\r
-        return ""\r
-    },\r
-    fromString: function (a) {\r
-        if (window.DOMParser) return (new DOMParser).parseFromString(a, "text/xml");\r
-        if (window.ActiveXObject) {\r
-            temp = new ActiveXObject("Microsoft.xmlDOM");\r
-            temp.loadXML(a);\r
-            return temp\r
-        }\r
-    },\r
-    checkResponse: function (a, b) {\r
-        if (b && b.firstChild && b.firstChild.tagName != "parsererror") return b;\r
-        if (a = this.from_string(a.responseText.replace(/^[\s]+/, ""))) return a\r
-    }\r
-};\r
-dhtmlxchart.DataDriver.dhtmlxchartgrid = {\r
-    Ia: "_get_cell_value",\r
-    toObject: function (a) {\r
-        return this.ea = a\r
-    },\r
-    getRecords: function (a) {\r
-        return a.rowsBuffer\r
-    },\r
-    getDetails: function (a) {\r
-        for (var b = {}, c = 0; c < this.ea.getColumnsNum(); c++) b["data" + c] = this.ea[this.Ia](a, c);\r
-        return b\r
-    },\r
-    getInfo: function () {\r
-        return {\r
-            w: 0,\r
-            u: 0\r
-        }\r
-    }\r
-};\r
-dhtmlxchart.Canvas = {\r
-    k: function () {\r
-        this.D = []\r
-    },\r
-    Ya: function (a) {\r
-        this.l = dhtmlxchart.html.create("canvas", {\r
-            width: a.offsetWidth,\r
-            height: a.offsetHeight\r
-        });\r
-        a.appendChild(this.l);\r
-        if (!this.l.getContext) if (dhtmlxchart.r) {\r
-            dhtmlxchart.require("thirdparty/excanvas/excanvas.js");\r
-            G_vmlCanvasManager.init_(document);\r
-            G_vmlCanvasManager.initElement(this.l)\r
-        }\r
-        return this.l\r
-    },\r
-    getCanvas: function (a) {\r
-        return (this.l || this.Ya(this.g)).getContext(a || "2d")\r
-    },\r
-    $a: function () {\r
-        if (this.l) {\r
-            this.l.setAttribute("width", this.l.parentNode.offsetWidth);\r
-            this.l.setAttribute("height", this.l.parentNode.offsetHeight)\r
-        }\r
-    },\r
-    renderText: function (a, b, c, d, e) {\r
-        if (c) {\r
-            a = dhtmlxchart.html.create("DIV", {\r
-                "class": "dhx_canvas_text" + (d ? " " + d : ""),\r
-                style: "left:" + a + "px; top:" + b + "px;"\r
-            }, c);\r
-            this.g.appendChild(a);\r
-            this.D.push(a);\r
-            if (e) a.style.width = e + "px";\r
-            return a\r
-        }\r
-    },\r
-    renderTextAt: function (a, b, c, d, e, f, g) {\r
-        if (e = this.renderText.call(this, c, d, e, f, g)) {\r
-            if (a) e.style.top = a == "middle" ? parseInt(d - e.offsetHeight / 2, 10) + "px" : d - e.offsetHeight + "px";\r
-            if (b) e.style.left = b == "left" ? c - e.offsetWidth + "px" : parseInt(c - e.offsetWidth / 2, 10) + "px"\r
-        }\r
-        return e\r
-    },\r
-    clearCanvas: function () {\r
-        for (var a = 0; a < this.D.length; a++) this.g.removeChild(this.D[a]);\r
-        this.D = [];\r
-        if (this.g.v) {\r
-            this.g.v.parentNode.removeChild(this.g.v);\r
-            this.g.v = null\r
-        }\r
-        this.getCanvas().clearRect(0, 0, this.l.offsetWidth, this.l.offsetHeight)\r
-    }\r
-};\r
-dhtmlxchartChart = function (a) {\r
-    this.name = "Chart";\r
-    this.version = "3.0";\r
-    dhtmlxchart.extend(this, dhtmlxchart.Settings);\r
-    this.Xa(a, "dhx_chart");\r
-    dhtmlxchart.extend(this, dhtmlxchart.DataLoader);\r
-    this.data.provideApi(this, true);\r
-    dhtmlxchart.extend(this, dhtmlxchart.EventSystem);\r
-    dhtmlxchart.extend(this, dhtmlxchart.MouseEvents);\r
-    dhtmlxchart.extend(this, dhtmlxchart.Destruction);\r
-    dhtmlxchart.extend(this, dhtmlxchart.Canvas);\r
-    dhtmlxchart.extend(this, dhtmlxchart.Group);\r
-    dhtmlxchart.extend(this, dhtmlxchart.AutoTooltip);\r
-    for (var b in dhtmlxchart.chart) dhtmlxchart.extend(this, dhtmlxchart.chart[b]);\r
-    this.B(a, {\r
-        color: "RAINBOW",\r
-        alpha: "1",\r
-        label: false,\r
-        value: "{obj.value}",\r
-        padding: {},\r
-        view: "pie",\r
-        lineColor: "#ffffff",\r
-        cant: 0.5,\r
-        width: 15,\r
-        labelWidth: 100,\r
-        line: {},\r
-        item: {},\r
-        shadow: true,\r
-        gradient: false,\r
-        border: true,\r
-        labelOffset: 20,\r
-        origin: "auto"\r
-    });\r
-    this.h = [this.e];\r
-    this.data.attachEvent("onStoreUpdated", dhtmlxchart.bind(function () {\r
-        this.render()\r
-    }, this));\r
-    this.attachEvent("onLocateData", this.db)\r
-};\r
-dhtmlxchartChart.prototype = {\r
-    q: "dhx_area_id",\r
-    on_click: {},\r
-    on_dblclick: {},\r
-    on_mouse_move: {},\r
-    resize: function () {\r
-        this.$a();\r
-        this.render()\r
-    },\r
-    view_setter: function (a, b) {\r
-        if (typeof this.e.offset == "undefined") this.e.offset = b == "area" || b == "stackedArea" ? false : true;\r
-        return b\r
-    },\r
-    render: function () {\r
-        if (this.callEvent("onBeforeRender", [this.data])) {\r
-            this.clearCanvas();\r
-            this.e.legend && this.za(this.getCanvas(), this.data.getRange(), this.g.offsetWidth, this.g.offsetHeight);\r
-            for (var a = this.Ea(this.g.offsetWidth, this.g.offsetHeight), b = new dhtmlxchart.ui.Map(this.q), c = this.e, d = 0; d < this.h.length; d++) {\r
-                this.e = this.h[d];\r
-                this["pvt_render_" + this.e.view](this.getCanvas(), this.data.getRange(), a.start, a.end, d, b)\r
-            }\r
-            b.render(this.g);\r
-            this.e = c\r
-        }\r
-    },\r
-    value_setter: dhtmlxchart.Template.obj_setter,\r
-    alpha_setter: dhtmlxchart.Template.obj_setter,\r
-    label_setter: dhtmlxchart.Template.obj_setter,\r
-    lineColor_setter: dhtmlxchart.Template.obj_setter,\r
-    pieInnerText_setter: dhtmlxchart.Template.obj_setter,\r
-    gradient_setter: function (a, b) {\r
-        if (typeof b != "function" && b && (b === true || b != "3d")) b = "light";\r
-        return b\r
-    },\r
-    colormap: {\r
-        RAINBOW: function (a) {\r
-            a = Math.floor(this.indexById(a.id) / this.dataCount() * 1536);\r
-            if (a == 1536) a -= 1;\r
-            return this.Za[Math.floor(a / 256)](a % 256)\r
-        }\r
-    },\r
-    color_setter: function (a, b) {\r
-        return this.colormap[b] || dhtmlxchart.Template.obj_setter(a, b)\r
-    },\r
-    legend_setter: function (a, b) {\r
-        if (typeof b != "object") b = {\r
-            template: b\r
-        };\r
-        this.n(b, {\r
-            width: 150,\r
-            height: 18,\r
-            layout: "y",\r
-            align: "left",\r
-            valign: "bottom",\r
-            template: "",\r
-            marker: {\r
-                type: "square",\r
-                width: 25,\r
-                height: 15\r
-            }\r
-        });\r
-        b.template = dhtmlxchart.Template.setter(0, b.template);\r
-        return b\r
-    },\r
-    item_setter: function (a, b) {\r
-        if (typeof b != "object") b = {\r
-            color: b,\r
-            borderColor: b\r
-        };\r
-        this.n(b, {\r
-            radius: 4,\r
-            color: "#000000",\r
-            borderColor: "#000000",\r
-            borderWidth: 2\r
-        });\r
-        b.color = dhtmlxchart.Template.setter(0, b.color);\r
-        b.borderColor = dhtmlxchart.Template.setter(0, b.borderColor);\r
-        return b\r
-    },\r
-    line_setter: function (a, b) {\r
-        if (typeof b != "object") b = {\r
-            color: b\r
-        };\r
-        this.n(b, {\r
-            width: 3,\r
-            color: "#d4d4d4"\r
-        });\r
-        b.color = dhtmlxchart.Template.setter(0, b.color);\r
-        return b\r
-    },\r
-    padding_setter: function (a, b) {\r
-        if (typeof b != "object") b = {\r
-            left: b,\r
-            right: b,\r
-            top: b,\r
-            bottom: b\r
-        };\r
-        this.n(b, {\r
-            left: 50,\r
-            right: 20,\r
-            top: 35,\r
-            bottom: 40\r
-        });\r
-        return b\r
-    },\r
-    xAxis_setter: function (a, b) {\r
-        if (!b) return false;\r
-        if (typeof b != "object") b = {\r
-            template: b\r
-        };\r
-        this.n(b, {\r
-            title: "",\r
-            color: "#000000",\r
-            template: "{obj}",\r
-            lines: false\r
-        });\r
-        if (b.template) b.template = dhtmlxchart.Template.setter(0, b.template);\r
-        return b\r
-    },\r
-    yAxis_setter: function (a, b) {\r
-        this.n(b, {\r
-            title: "",\r
-            color: "#000000",\r
-            template: "{obj}",\r
-            lines: true\r
-        });\r
-        if (b.template) b.template = dhtmlxchart.Template.setter(0, b.template);\r
-        return b\r
-    },\r
-    N: function (a, b, c, d, e, f, g) {\r
-        e = this.Da(a, b, c, d, e, f);\r
-        this.da(a, b, c, d, g, e);\r
-        return e\r
-    },\r
-    da: function (a, b, c, d, e, f) {\r
-        if (this.e.xAxis) {\r
-            var g = c.x - 0.5;\r
-            f = parseInt(f ? f : d.y, 10) + 0.5;\r
-            var i = d.x,\r
-                j, k = true;\r
-            this.i(a, g, f, i, f, this.e.xAxis.color, 1);\r
-            for (var h = 0; h < b.length; h++) {\r
-                if (this.e.offset === true) j = g + e / 2 + h * e;\r
-                else {\r
-                    j = g + h * e;\r
-                    k = !! h\r
-                }\r
-                var m = this.e.origin != "auto" && this.e.view == "bar" && parseFloat(this.e.value(b[h])) < this.e.origin;\r
-                this.Ba(j, f, b[h], k, m);\r
-                this.e.view_setter != "bar" && this.Ca(a, j, d.y, c.y)\r
-            }\r
-            this.renderTextAt(true, false, g, d.y + this.e.padding.bottom - 3, this.e.xAxis.title, "dhx_axis_title_x", d.x - c.x);\r
-            this.e.xAxis.lines && this.e.offset && this.i(a, i + 0.5, d.y, i + 0.5, c.y + 0.5, this.e.xAxis.color, 0.2)\r
-        }\r
-    },\r
-    Da: function (a, b, c, d, e, f) {\r
-        var g;\r
-        b = {};\r
-        if (this.e.yAxis) {\r
-            var i = c.x - 0.5,\r
-                j = d.y,\r
-                k = c.y,\r
-                h = d.y;\r
-            this.i(a, i, j, i, k, this.e.yAxis.color, 1);\r
-            if (this.e.yAxis.step) g = parseFloat(this.e.yAxis.step);\r
-            if (typeof this.e.yAxis.step == "undefined" || typeof this.e.yAxis.start == "undefined" || typeof this.e.yAxis.end == "undefined") {\r
-                b = this.V(e, f);\r
-                e = b.start;\r
-                f = b.end;\r
-                g = b.step;\r
-                this.e.yAxis.end = f;\r
-                this.e.yAxis.start = e\r
-            }\r
-            if (g !== 0) {\r
-                k = (j - k) * g / (f - e);\r
-                for (var m = 0, l = e; l <= f; l += g) {\r
-                    if (b.fixNum) l = parseFloat((new Number(l)).toFixed(b.fixNum));\r
-                    var n = Math.floor(j - m * k) + 0.5;\r
-                    !(l == e && this.e.origin == "auto") && this.e.yAxis.lines && this.i(a, i, n, d.x, n, this.e.yAxis.color, 0.2);\r
-                    if (l == this.e.origin) h = n;\r
-                    this.renderText(0, n - 5, this.e.yAxis.template(l.toString()), "dhx_axis_item_y", c.x - 5);\r
-                    m++\r
-                }\r
-                this.oa(c, d);\r
-                return h\r
-            }\r
-        }\r
-    },\r
-    oa: function (a, b) {\r
-        if (a = this.renderTextAt("middle", false, 0, parseInt((b.y - a.y) / 2 + a.y, 10), this.e.yAxis.title, "dhx_axis_title_y")) a.style.left = (dhtmlxchart.env.transform ? (a.offsetHeight - a.offsetWidth) / 2 : 0) + "px"\r
-    },\r
-    V: function (a, b) {\r
-        if (this.e.origin != "auto" && this.e.origin < a) a = this.e.origin;\r
-        var c, d, e;\r
-        c = (b - a) / 8 || 1;\r
-        var f = Math.floor(this.ga(c)),\r
-            g = Math.pow(10, f),\r
-            i = c / g;\r
-        i = i > 5 ? 10 : 5;\r
-        c = parseInt(i, 10) * g;\r
-        if (c > Math.abs(a)) d = a < 0 ? -c : 0;\r
-        else {\r
-            var j = Math.abs(a),\r
-                k = Math.floor(this.ga(j)),\r
-                h = j / Math.pow(10, k);\r
-            d = Math.ceil(h * 10) / 10 * Math.pow(10, k) - c;\r
-            if (a < 0) d = -d - 2 * c\r
-        }\r
-        for (e = d; e < b;) {\r
-            e += c;\r
-            e = parseFloat((new Number(e)).toFixed(Math.abs(f)))\r
-        }\r
-        return {\r
-            start: d,\r
-            end: e,\r
-            step: c,\r
-            fixNum: Math.abs(f)\r
-        }\r
-    },\r
-    O: function (a) {\r
-        var b, c;\r
-        if ((c = arguments.length && a == "h" ? this.e.xAxis : this.e.yAxis) && typeof c.end != "undefied" && typeof c.start != "undefied" && c.step) {\r
-            b = parseFloat(c.end);\r
-            c = parseFloat(c.start)\r
-        } else {\r
-            b = this.max(this.h[0].value);\r
-            c = this.min(this.h[0].value);\r
-            if (this.h.length > 1) for (var d = 1; d < this.h.length; d++) {\r
-                var e = this.max(this.h[d].value),\r
-                    f = this.min(this.h[d].value);\r
-                if (e > b) b = e;\r
-                if (f < c) c = f\r
-            }\r
-        }\r
-        return {\r
-            max: b,\r
-            min: c\r
-        }\r
-    },\r
-    ga: function (a) {\r
-        var b = "log";\r
-        return Math.floor(Math[b](a) / Math.LN10)\r
-    },\r
-    Ba: function (a, b, c, d, e) {\r
-        this.e.xAxis && this.renderTextAt(e, d, a, b, this.e.xAxis.template(c))\r
-    },\r
-    Ca: function (a, b, c, d) {\r
-        this.e.xAxis && this.e.xAxis.lines && this.i(a, b, c, b, d, this.e.xAxis.color, 0.2)\r
-    },\r
-    i: function (a, b, c, d, e, f, g) {\r
-        a.strokeStyle = f;\r
-        a.lineWidth = g;\r
-        a.beginPath();\r
-        a.moveTo(b, c);\r
-        a.lineTo(d, e);\r
-        a.stroke()\r
-    },\r
-    z: function (a, b) {\r
-        var c = 1;\r
-        if (b != a) {\r
-            a = b - a;\r
-            if (Math.abs(a) < 1) for (; Math.abs(a) < 1;) {\r
-                c *= 10;\r
-                a *= c\r
-            }\r
-        } else a = a;\r
-        return [a, c]\r
-    },\r
-    Za: [function (a) {\r
-        return "#FF" + dhtmlxchart.math.toHex(a / 2, 2) + "00"\r
-    }, function (a) {\r
-        return "#FF" + dhtmlxchart.math.toHex(a / 2 + 128, 2) + "00"\r
-    }, function (a) {\r
-        return "#" + dhtmlxchart.math.toHex(255 - a, 2) + "FF00"\r
-    }, function (a) {\r
-        return "#00FF" + dhtmlxchart.math.toHex(a, 2)\r
-    }, function (a) {\r
-        return "#00" + dhtmlxchart.math.toHex(255 - a, 2) + "FF"\r
-    }, function (a) {\r
-        return "#" + dhtmlxchart.math.toHex(a, 2) + "00FF"\r
-    }],\r
-    addSeries: function (a) {\r
-        var b = this.e;\r
-        this.e = dhtmlxchart.extend({}, b);\r
-        this.B(a, {});\r
-        this.h.push(this.e);\r
-        this.e = b\r
-    },\r
-    db: function (a, b) {\r
-        this.ra = b.getAttribute("userdata");\r
-        for (a = 0; a < this.h.length; a++) {\r
-            var c = this.h[a].tooltip;\r
-            c && c.disable()\r
-        }(c = this.h[this.ra].tooltip) && c.enable()\r
-    },\r
-    za: function (a, b) {\r
-        var c = 0,\r
-            d = 0,\r
-            e = this.e.legend,\r
-            f, g, i = this.e.legend.layout != "x" ? "width:" + e.width + "px" : "",\r
-            j = dhtmlxchart.html.create("DIV", {\r
-                "class": "dhx_chart_legend",\r
-                style: "left:" + c + "px; top:" + d + "px;" + i\r
-            }, "");\r
-        this.g.appendChild(j);\r
-        var k = [];\r
-        if (e.values) for (h = 0; h < e.values.length; h++) k.push(this.aa(j, e.values[h].text));\r
-        else for (var h = 0; h < b.length; h++) k.push(this.aa(j, e.template(b[h])));\r
-        g = j.offsetWidth;\r
-        f = j.offsetHeight;\r
-        this.e.legend.width = g;\r
-        this.e.legend.height = f;\r
-        if (g < this.g.offsetWidth) {\r
-            if (e.layout == "x" && e.align == "center") c = (this.g.offsetWidth - g) / 2;\r
-            if (e.align == "right") c = this.g.offsetWidth - g\r
-        }\r
-        if (f < this.g.offsetHeight) if (e.valign == "middle" && e.align != "center" && e.layout != "x") d = (this.g.offsetHeight - f) / 2;\r
-        else if (e.valign == "bottom") d = this.g.offsetHeight - f;\r
-        j.style.left = c + "px";\r
-        j.style.top = d + "px";\r
-        for (h = 0; h < k.length; h++) {\r
-            var m = k[h],\r
-                l = e.values ? e.values[h].color : this.e.color.call(this, b[h]);\r
-            this.Aa(a, m.offsetLeft + c, m.offsetTop + d, l)\r
-        }\r
-        k = null\r
-    },\r
-    aa: function (a, b) {\r
-        var c = "";\r
-        if (this.e.legend.layout == "x") c = "float:left;";\r
-        b = dhtmlxchart.html.create("DIV", {\r
-            style: c + "padding-left:" + (10 + this.e.legend.marker.width) + "px",\r
-            "class": "dhx_chart_legend_item"\r
-        }, b);\r
-        a.appendChild(b);\r
-        return b\r
-    },\r
-    Aa: function (a, b, c, d) {\r
-        var e = this.e.legend;\r
-        a.strokeStyle = a.fillStyle = d;\r
-        a.lineWidth = e.marker.height;\r
-        a.lineCap = e.marker.type;\r
-        a.beginPath();\r
-        b += a.lineWidth / 2 + 5;\r
-        c += a.lineWidth / 2 + 3;\r
-        a.moveTo(b, c);\r
-        b = b + e.marker.width - e.marker.height + 1;\r
-        a.lineTo(b, c);\r
-        a.stroke()\r
-    },\r
-    Ea: function (a, b) {\r
-        var c, d, e, f;\r
-        c = this.e.padding.left;\r
-        d = this.e.padding.top;\r
-        e = a - this.e.padding.right;\r
-        f = b - this.e.padding.bottom;\r
-        if (this.e.legend) {\r
-            a = this.e.legend;\r
-            b = this.e.legend.width;\r
-            var g = this.e.legend.height;\r
-            if (a.layout == "x") if (a.valign == "center") if (a.align == "right") e -= b;\r
-            else {\r
-                if (a.align == "left") c += b\r
-            } else if (a.valign == "bottom") f -= g;\r
-            else d += g;\r
-            else if (a.align == "right") e -= b;\r
-            else if (a.align == "left") c += b\r
-        }\r
-        return {\r
-            start: {\r
-                x: c,\r
-                y: d\r
-            },\r
-            end: {\r
-                x: e,\r
-                y: f\r
-            }\r
-        }\r
-    },\r
-    Q: function (a) {\r
-        var b, c;\r
-        if (this.e.yAxis && typeof this.e.yAxis.end != "undefied" && typeof this.e.yAxis.start != "undefied" && this.e.yAxis.step) {\r
-            b = parseFloat(this.e.yAxis.end);\r
-            c = parseFloat(this.e.yAxis.start)\r
-        } else {\r
-            for (var d = 0; d < a.length; d++) {\r
-                a[d].$sum = 0;\r
-                a[d].$min = Infinity;\r
-                for (b = 0; b < this.h.length; b++) {\r
-                    c = parseFloat(this.h[b].value(a[d]));\r
-                    if (!isNaN(c)) {\r
-                        a[d].$sum += c;\r
-                        if (c < a[d].$min) a[d].$min = c\r
-                    }\r
-                }\r
-            }\r
-            b = -Infinity;\r
-            c = Infinity;\r
-            for (d = 0; d < a.length; d++) {\r
-                if (a[d].$sum > b) b = a[d].$sum;\r
-                if (a[d].$min < c) c = a[d].$min\r
-            }\r
-            if (c > 0) c = 0\r
-        }\r
-        return {\r
-            max: b,\r
-            min: c\r
-        }\r
-    },\r
-    G: function (a, b, c, d, e, f, g, i) {\r
-        if (f == "light") {\r
-            a = i == "x" ? a.createLinearGradient(b, c, d, c) : a.createLinearGradient(b, c, b, e);\r
-            a.addColorStop(0, "#FFFFFF");\r
-            a.addColorStop(0.9, g);\r
-            a.addColorStop(1, g);\r
-            g = 2\r
-        } else {\r
-            a.globalAlpha = 0.37;\r
-            g = 0;\r
-            a = i == "x" ? a.createLinearGradient(b, e, b, c) : a.createLinearGradient(b, c, d, c);\r
-            a.addColorStop(0, "#000000");\r
-            a.addColorStop(0.5, "#FFFFFF");\r
-            a.addColorStop(0.6, "#FFFFFF");\r
-            a.addColorStop(1, "#000000")\r
-        }\r
-        return {\r
-            gradient: a,\r
-            offset: g\r
-        }\r
-    }\r
-};\r
-dhtmlxchart.compat("layout");
\ No newline at end of file
+window.dhtmlxchart||(dhtmlxchart={});dhtmlxchart.version="3.0";dhtmlxchart.codebase="./";dhtmlxchart.extend=function(a,b){for(var c in b)a[c]=b[c];b.k&&a.k();return a};\r
+dhtmlxchart.proto_extend=function(){for(var a=arguments,b=a[0],c=[],d=a.length-1;d>0;d--){if(typeof a[d]=="function")a[d]=a[d].prototype;for(var e in a[d])if(e=="_init")c.push(a[d][e]);else b[e]||(b[e]=a[d][e])}a[0].k&&c.push(a[0].k);b.k=function(){for(var g=0;g<c.length;g++)c[g].apply(this,arguments)};b.base=a[1];var f=function(g){this.k(g);this.B&&this.B(g,this.defaults)};f.prototype=b;b=a=null;return f};dhtmlxchart.bind=function(a,b){return function(){return a.apply(b,arguments)}};\r
+dhtmlxchart.require=function(a){if(!dhtmlxchart.ia[a]){dhtmlxchart.exec(dhtmlxchart.ajax().sync().get(dhtmlxchart.codebase+a).responseText);dhtmlxchart.ia[a]=true}};dhtmlxchart.ia={};dhtmlxchart.exec=function(a){window.execScript?window.execScript(a):window.eval(a)};dhtmlxchart.methodPush=function(a,b){return function(){var c=false;return c=a[b].apply(a,arguments)}};dhtmlxchart.isNotDefined=function(a){return typeof a=="undefined"};dhtmlxchart.delay=function(a,b,c,d){setTimeout(function(){var e=a.apply(b,c);a=b=c=null;return e},d||1)};\r
+dhtmlxchart.uid=function(){if(!this.S)this.S=(new Date).valueOf();this.S++;return this.S};dhtmlxchart.toNode=function(a){if(typeof a=="string")return document.getElementById(a);return a};dhtmlxchart.toArray=function(a){return dhtmlxchart.extend(a||[],dhtmlxchart.PowerArray)};dhtmlxchart.toFunctor=function(a){return typeof a=="string"?eval(a):a};dhtmlxchart.j={};\r
+dhtmlxchart.event=function(a,b,c,d){a=dhtmlxchart.toNode(a);var e=dhtmlxchart.uid();dhtmlxchart.j[e]=[a,b,c];if(d)c=dhtmlxchart.bind(c,d);if(a.addEventListener)a.addEventListener(b,c,false);else a.attachEvent&&a.attachEvent("on"+b,c);return e};dhtmlxchart.eventRemove=function(a){if(a){var b=dhtmlxchart.j[a];if(b[0].removeEventListener)b[0].removeEventListener(b[1],b[2],false);else b[0].detachEvent&&b[0].detachEvent("on"+b[1],b[2]);delete this.j[a]}};\r
+dhtmlxchart.EventSystem={k:function(){this.j={};this.A={};this.s={}},block:function(){this.j.V=true},unblock:function(){this.j.V=false},mapEvent:function(a){dhtmlxchart.extend(this.s,a)},callEvent:function(a,b){if(this.j.V)return true;a=a.toLowerCase();var c=this.j[a.toLowerCase()],d=true;if(c)for(var e=0;e<c.length;e++)if(c[e].apply(this,b||[])===false)d=false;if(this.s[a]&&!this.s[a].callEvent(a,b))d=false;return d},attachEvent:function(a,b,c){a=a.toLowerCase();c=c||dhtmlxchart.uid();b=dhtmlxchart.toFunctor(b);var d=\r
+this.j[a]||dhtmlxchart.toArray();d.push(b);this.j[a]=d;this.A[c]={f:b,t:a};return c},detachEvent:function(a){var b=this.A[a].t,c=this.A[a].f;b=this.j[b];b.remove(c);delete this.A[a]}};\r
+dhtmlxchart.PowerArray={removeAt:function(a,b){if(a>=0)this.splice(a,b||1)},remove:function(a){this.removeAt(this.find(a))},insertAt:function(a,b){if(!b&&b!==0)this.push(a);else{var c=this.splice(b,this.length-b);this[b]=a;this.push.apply(this,c)}},find:function(a){for(i=0;i<this.length;i++)if(a==this[i])return i;return-1},each:function(a,b){for(var c=0;c<this.length;c++)a.call(b||this,this[c])},map:function(a,b){for(var c=0;c<this.length;c++)this[c]=a.call(b||this,this[c]);return this}};dhtmlxchart.env={};\r
+if(navigator.userAgent.indexOf("Opera")!=-1)dhtmlxchart.Ma=true;else{dhtmlxchart.r=!!document.all;dhtmlxchart.La=!document.all;dhtmlxchart.Na=navigator.userAgent.indexOf("KHTML")!=-1;if(navigator.appVersion.indexOf("MSIE 8.0")!=-1&&document.compatMode!="BackCompat")dhtmlxchart.r=8}dhtmlxchart.env={};\r
+(function(){dhtmlxchart.env.transform=false;dhtmlxchart.env.transition=false;var a={};a.names=["transform","transition"];a.transform=["transform","WebkitTransform","MozTransform","oTransform"];a.transition=["transition","WebkitTransition","MozTransition","oTransition"];for(var b=document.createElement("DIV"),c=0;c<a.names.length;c++)for(;p=a[a.names[c]].pop();)if(typeof b.style[p]!="undefined")dhtmlxchart.env[a.names[c]]=true})();\r
+dhtmlxchart.env.transform_prefix=function(){var a;if(dhtmlxchart.Ma)a="-o-";else{a="";if(dhtmlxchart.La)a="-moz-";if(dhtmlxchart.Na)a="-webkit-"}return a}();dhtmlxchart.env.svg=function(){return document.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1")}();dhtmlxchart.zIndex={drag:1E4};\r
+dhtmlxchart.html={create:function(a,b,c){b=b||{};var d=document.createElement(a);for(var e in b)d.setAttribute(e,b[e]);if(b.style)d.style.cssText=b.style;if(b["class"])d.className=b["class"];if(c)d.innerHTML=c;return d},getValue:function(a){a=dhtmlxchart.toNode(a);if(!a)return"";return dhtmlxchart.isNotDefined(a.value)?a.innerHTML:a.value},remove:function(a){if(a instanceof Array)for(var b=0;b<a.length;b++)this.remove(a[b]);else a&&a.parentNode&&a.parentNode.removeChild(a)},insertBefore:function(a,b,c){if(a)b?b.parentNode.insertBefore(a,\r
+b):c.appendChild(a)},locate:function(a,b){a=a||event;for(var c=a.target||a.srcElement;c;){if(c.getAttribute){var d=c.getAttribute(b);if(d)return d}c=c.parentNode}return null},offset:function(a){if(a.getBoundingClientRect){var b=a.getBoundingClientRect(),c=document.body,d=document.documentElement,e=window.pageYOffset||d.scrollTop||c.scrollTop,f=window.pageXOffset||d.scrollLeft||c.scrollLeft,g=d.clientTop||c.clientTop||0,i=d.clientLeft||c.clientLeft||0,j=b.top+e-g,k=b.left+f-i;return{y:Math.round(j),\r
+x:Math.round(k)}}else{for(k=j=0;a;){j+=parseInt(a.offsetTop,10);k+=parseInt(a.offsetLeft,10);a=a.offsetParent}return{y:j,x:k}}},pos:function(a){a=a||event;if(a.pageX||a.pageY)return{x:a.pageX,y:a.pageY};var b=dhtmlxchart.r&&document.compatMode!="BackCompat"?document.documentElement:document.body;return{x:a.clientX+b.scrollLeft-b.clientLeft,y:a.clientY+b.scrollTop-b.clientTop}},preventEvent:function(a){a&&a.preventDefault&&a.preventDefault();dhtmlxchart.html.stopEvent(a)},stopEvent:function(a){(a||event).cancelBubble=\r
+true;return false},addCss:function(a,b){a.className+=" "+b},removeCss:function(a,b){a.className=a.className.replace(RegExp(b,"g"),"")}};(function(){var a=document.getElementsByTagName("SCRIPT");if(a.length){a=(a[a.length-1].getAttribute("src")||"").split("/");a.splice(a.length-1,1);dhtmlxchart.codebase=a.slice(0,a.length).join("/")+"/"}})();dhtmlxchart.ui={};\r
+dhtmlxchart.Destruction={k:function(){dhtmlxchart.destructors.push(this)},destructor:function(){this.destructor=function(){};this.ib=this.v=null;this.ga&&document.body.appendChild(this.ga);this.ga=null;if(this.g){this.g.innerHTML="";this.g.v=null}this.data=this.g=this.L=null;this.j=this.A={}}};dhtmlxchart.destructors=[];\r
+dhtmlxchart.event(window,"unload",function(){for(var a=0;a<dhtmlxchart.destructors.length;a++)dhtmlxchart.destructors[a].destructor();dhtmlxchart.destructors=[];for(var b in dhtmlxchart.j){a=dhtmlxchart.j[b];if(a[0].removeEventListener)a[0].removeEventListener(a[1],a[2],false);else a[0].detachEvent&&a[0].detachEvent("on"+a[1],a[2]);delete dhtmlxchart.j[b]}});dhtmlxchart.math={};dhtmlxchart.math.gb=["0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"];\r
+dhtmlxchart.math.toHex=function(a,b){a=parseInt(a,10);for(str="";a>0;){str=this.gb[a%16]+str;a=Math.floor(a/16)}for(;str.length<b;)str="0"+str;return str};dhtmlxchart.ui.Map=function(a){this.name="Map";this.q="map_"+dhtmlxchart.uid();this.Qa=a;this.s=[]};\r
+dhtmlxchart.ui.Map.prototype={addRect:function(a,b,c){this.Y(a,"RECT",b,c)},addPoly:function(a,b){this.Y(a,"POLY",b)},Y:function(a,b,c,d){var e="";if(arguments.length==4)e="userdata='"+d+"'";this.s.push("<area "+this.Qa+"='"+a+"' shape='"+b+"' coords='"+c.join()+"' "+e+"></area>")},addSector:function(a,b,c,d,e,f,g){var i=[];i.push(d);i.push(Math.floor(e*g));for(var j=b;j<c;j+=Math.PI/18){i.push(Math.floor(d+f*Math.cos(j)));i.push(Math.floor((e+f*Math.sin(j))*g))}i.push(Math.floor(d+f*Math.cos(c)));i.push(Math.floor((e+\r
+f*Math.sin(c))*g));i.push(d);i.push(Math.floor(e*g));return this.addPoly(a,i)},render:function(a){var b=dhtmlxchart.html.create("DIV");b.style.cssText="position:absolute; width:100%; height:100%; top:0px; left:0px;";a.appendChild(b);var c=dhtmlxchart.r?"":"src='data:image/gif;base64,R0lGODlhEgASAIAAAP///////yH5BAUUAAEALAAAAAASABIAAAIPjI+py+0Po5y02ouz3pwXADs='";b.innerHTML="<map id='"+this.q+"' name='"+this.q+"'>"+this.s.join("\n")+"</map><img "+c+" class='dhx_map_img' usemap='#"+this.q+"'>";a.v=b;this.s=[]}};\r
+dhtmlxchart.chart={};\r
+dhtmlxchart.chart.area={pvt_render_area:function(a,b,c,d,e,f){var g=this.C(a,b,c,d,e),i=Math.floor(g.cellWidth/2);if(b.length){a.globalAlpha=this.e.alpha.call(this,b[0]);a.fillStyle=this.e.color.call(this,b[0]);var j=this.p(b[0],c,d,g),k=this.e.offset?c.x+g.cellWidth*0.5:c.x;a.beginPath();a.moveTo(k,d.y);a.lineTo(k,j);f.addRect(b[0].id,[k-i,j-i,k+i,j+i]);this.e.yAxis||this.renderTextAt(false,!this.e.offset?false:true,k,j-this.e.labelOffset,this.e.label(b[0]));for(var h=1;h<b.length;h++){var m=k+Math.floor(g.cellWidth*\r
+h)-0.5,l=this.p(b[h],c,d,g);a.lineTo(m,l);f.addRect(b[h].id,[m-i,l-i,m+i,l+i]);this.e.yAxis||this.renderTextAt(false,!this.e.offset&&h==b.length-1?"left":"center",m,l-this.e.labelOffset,this.e.label(b[h]))}a.lineTo(k+Math.floor(g.cellWidth*[b.length-1]),d.y);a.lineTo(k,d.y);a.fill()}}};\r
+dhtmlxchart.chart.stackedArea={pvt_render_stackedArea:function(a,b,c,d,e,f){var g=this.C(a,b,c,d,e),i=Math.floor(g.cellWidth/2),j=[];if(b.length){a.globalAlpha=this.e.alpha.call(this,b[0]);a.fillStyle=this.e.color.call(this,b[0]);var k=e?b[0].$startY:d.y,h=this.e.offset?c.x+g.cellWidth*0.5:c.x,m=this.p(b[0],c,d,g)-(e?d.y-k:0);j[0]=m;a.beginPath();a.moveTo(h,k);a.lineTo(h,m);f.addRect(b[0].id,[h-i,m-i,h+i,m+i]);this.e.yAxis||this.renderTextAt(false,true,h,m-this.e.labelOffset,this.e.label(b[0]));for(var l=\r
+1;l<b.length;l++){var n=h+Math.floor(g.cellWidth*l)-0.5,o=this.p(b[l],c,d,g)-(e?d.y-b[l].$startY:0);j[l]=o;a.lineTo(n,o);f.addRect(b[l].id,[n-i,o-i,n+i,o+i]);this.e.yAxis||this.renderTextAt(false,true,n,o-this.e.labelOffset,this.e.label(b[l]))}a.lineTo(h+Math.floor(g.cellWidth*[b.length-1]),k);if(e)for(l=b.length-1;l>=0;l--){n=h+Math.floor(g.cellWidth*l)-0.5;var s=b[l].$startY;a.lineTo(n,s)}else a.lineTo(h+Math.floor(g.cellWidth*(length-1))-0.5,k);a.lineTo(h,k);a.fill();for(l=0;l<b.length;l++)b[l].$startY=\r
+j[l]}}};\r
+dhtmlxchart.chart.spline={pvt_render_spline:function(a,b,c,d,e){var f=this.C(a,b,c,d,e);Math.floor(f.cellWidth/2);var g=[];if(b.length){var i=this.e.offset?c.x+f.cellWidth*0.5:c.x;for(e=0;e<b.length;e++){var j=!e?i:Math.floor(f.cellWidth*e)-0.5+i,k=this.p(b[e],c,d,f);g.push({x:j,y:k})}var h=this.Ia(g);for(e=0;e<g.length-1;e++){var m=g[e].x;c=g[e].y;for(var l=g[e+1].x,n=g[e+1].y,o=m;o<l;o++)this.i(a,o,this.P(o,m,e,h.a,h.b,h.c,h.d),o+1,this.P(o+1,m,e,h.a,h.b,h.c,h.d),this.e.line.color(b[e]),this.e.line.width);this.i(a,\r
+l-1,this.P(o,m,e,h.a,h.b,h.c,h.d),l,n,this.e.line.color(b[e]),this.e.line.width);this.M(a,m,c,b[e],this.e.label(b[e]))}this.M(a,l,n,b[e],this.e.label(b[e]))}},Ia:function(a){var b,c,d,e,f,g,i,j,k;b=[];m=[];k=a.length;for(var h=0;h<k-1;h++){b[h]=a[h+1].x-a[h].x;m[h]=(a[h+1].y-a[h].y)/b[h]}c=[];d=[];c[0]=0;c[1]=2*(b[0]+b[1]);d[0]=0;d[1]=6*(m[1]-m[0]);for(h=2;h<k-1;h++){c[h]=2*(b[h-1]+b[h])-b[h-1]*b[h-1]/c[h-1];d[h]=6*(m[h]-m[h-1])-b[h-1]*d[h-1]/c[h-1]}e=[];e[k-1]=e[0]=0;for(h=k-2;h>=1;h--)e[h]=(d[h]-\r
+b[h]*e[h+1])/c[h];f=[];g=[];i=[];j=[];for(h=0;h<k-1;h++){f[h]=a[h].y;g[h]=-b[h]*e[h+1]/6-b[h]*e[h]/3+(a[h+1].y-a[h].y)/b[h];i[h]=e[h]/2;j[h]=(e[h+1]-e[h])/(6*b[h])}return{a:f,b:g,c:i,d:j}},P:function(a,b,c,d,e,f,g){return d[c]+(a-b)*(e[c]+(a-b)*(f[c]+(a-b)*g[c]))}};\r
+dhtmlxchart.chart.barH={pvt_render_barH:function(a,b,c,d,e,f){var g,i,j,k,h=d.x-c.x,m=!!this.e.yAxis,l=this.O("h");g=l.max;i=l.min;var n=Math.floor((d.y-c.y)/b.length);e||this.aa(a,b,c,d,i,g,n);if(m){g=parseFloat(this.e.xAxis.end);i=parseFloat(this.e.xAxis.start)}var o=this.z(i,g);k=o[0];j=o[1];var s=k?h/k:10;if(!m){var t=10;s=k?(h-t)/k:10}var q=parseInt(this.e.width,10);if(q*this.h.length+4>n)q=n/this.h.length-4;var v=Math.floor((n-q*this.h.length)/2),p=typeof this.e.radius!="undefined"?parseInt(this.e.radius,\r
+10):Math.round(q/5),u=false,r=this.e.gradient;if(r&&typeof r!="function"){u=r;r=false}else if(r){r=a.createLinearGradient(c.x,c.y,d.x,c.y);this.e.gradient(r)}m||this.i(a,c.x-0.5,c.y,c.x-0.5,d.y,"#000000",1);for(d=0;d<b.length;d++){var w=parseFloat(this.e.value(b[d]));if(w>g)w=g;w-=i;w*=j;var x=c.x,y=c.y+v+d*n+(q+1)*e;if(w<0||this.e.yAxis&&w===0)this.renderTextAt("middle",true,x+10,y+q/2+v,this.e.label(b[d]));else{m||(w+=t/s);var B=r||this.e.color.call(this,b[d]);if(this.e.border){a.beginPath();a.fillStyle=\r
+B;this.o(a,x,y,q,p,s,w,0);a.lineTo(x,0);a.fill();a.fillStyle="#000000";a.globalAlpha=0.37;a.beginPath();this.o(a,x,y,q,p,s,w,0);a.fill()}a.globalAlpha=this.e.alpha.call(this,b[d]);a.fillStyle=r||this.e.color.call(this,b[d]);a.beginPath();var z=this.o(a,x,y,q,p,s,w,this.e.border?1:0);if(r&&!u)a.lineTo(c.x+h,y+(this.e.border?1:0));a.fill();a.globalAlpha=1;if(u!=false){var A=this.G(a,c.x,y+q,c.x+s*w+2,y,u,B,"x");a.fillStyle=A.gradient;a.beginPath();z=this.o(a,x,y+A.offset,q-A.offset*2,p,s,w,A.offset);\r
+a.fill();a.globalAlpha=1}this.renderTextAt("middle",false,z[0]+3,parseInt(y+(z[1]-y)/2,10),this.e.label(b[d]));f.addRect(b[d].id,[x,y,z[0],z[1]],e)}}},o:function(a,b,c,d,e,f,g,i){var j=0;if(e>f*g){var k=(e-f*g)/e;j=-Math.asin(k)+Math.PI/2}a.moveTo(b,c+i);var h=b+f*g-e-(e?0:i);e<f*g&&a.lineTo(h,c+i);f=c+e;e&&a.arc(h,f,e-i,-Math.PI/2+j,0,false);var m=c+d-e-(e?0:i),l=h+e-(e?i:0);a.lineTo(l,m);var n=h;e&&a.arc(n,m,e-i,0,Math.PI/2-j,false);var o=c+d-i;a.lineTo(b,o);a.lineTo(b,c+i);return[l,o]},aa:function(a,\r
+b,c,d,e,f,g){this.ya(a,b,c,d,e,f);this.za(a,b,c,d,g)},za:function(a,b,c,d,e){if(this.e.yAxis){var f=c.x-0.5,g=d.y+0.5,i=c.y;this.i(a,f,g,f,i,this.e.yAxis.color,1);for(a=0;a<b.length;a++)this.renderTextAt("middle",0,0,i+e/2+a*e,this.e.yAxis.template(b[a]),"dhx_axis_item_y",c.x-5);this.pa(c,d)}},ya:function(a,b,c,d,e,f){var g,i={},j=this.e.xAxis;if(j){b=d.y+0.5;var k=c.x-0.5,h=d.x-0.5;this.i(a,k,b,h,b,j.color,1);if(j.step)g=parseFloat(j.step);if(typeof j.step=="undefined"||typeof j.start=="undefined"||\r
+typeof j.end=="undefined"){i=this.W(e,f);e=i.start;f=i.end;g=i.step;this.e.xAxis.end=f;this.e.xAxis.start=e;this.e.xAxis.step=g}if(g!==0){for(var m=(h-k)*g/(f-e),l=0,n=e;n<=f;n+=g){if(i.fixNum)n=parseFloat((new Number(n)).toFixed(i.fixNum));var o=Math.floor(k+l*m)+0.5;n!=e&&j.lines&&this.i(a,o,b,o,c.y,this.e.xAxis.color,0.2);this.renderTextAt(false,true,o,b+2,j.template(n.toString()),"dhx_axis_item_x");l++}this.renderTextAt(true,false,k,d.y+this.e.padding.bottom-3,this.e.xAxis.title,"dhx_axis_title_x",\r
+d.x-c.x);j.lines&&this.i(a,k,c.y-0.5,h,c.y-0.5,this.e.xAxis.color,0.2)}}}};\r
+dhtmlxchart.chart.stackedBarH={pvt_render_stackedBarH:function(a,b,c,d,e,f){var g,i,j,k,h=d.x-c.x,m=!!this.e.yAxis;i=this.Q(b);g=i.max;i=i.min;var l=Math.floor((d.y-c.y)/b.length);e||this.aa(a,b,c,d,i,g,l);if(m){g=parseFloat(this.e.xAxis.end);i=parseFloat(this.e.xAxis.start)}j=this.z(i,g);k=j[0];j=j[1];var n=k?h/k:10;if(!m){var o=10;n=k?(h-o)/k:10}k=parseInt(this.e.width,10);if(k+4>l)k=l-4;var s=Math.floor((l-k)/2),t=0,q=false,v=this.e.gradient;q=false;if(v=this.e.gradient)q=true;m||this.i(a,c.x-0.5,c.y,\r
+c.x-0.5,d.y,"#000000",1);for(d=0;d<b.length;d++){if(!e)b[d].$startX=c.x;var p=parseFloat(this.e.value(b[d]));if(p>g)p=g;p-=i;p*=j;var u=c.x,r=c.y+s+d*l;if(e)u=b[d].$startX;if(p<0||this.e.yAxis&&p===0)this.renderTextAt("middle",true,u+10,r+k/2,this.e.label(b[d]));else{m||(p+=o/n);var w=this.e.color.call(this,b[d]);if(this.e.border){a.beginPath();a.fillStyle=w;this.o(a,u,r,k,t,n,p,0);a.lineTo(u,0);a.fill();a.fillStyle="#000000";a.globalAlpha=0.37;a.beginPath();this.o(a,u,r,k,t,n,p,0);a.fill()}a.globalAlpha=\r
+1;a.globalAlpha=this.e.alpha.call(this,b[d]);a.fillStyle=this.e.color.call(this,b[d]);a.beginPath();var x=this.o(a,u,r,k,t,n,p,this.e.border?1:0);if(v&&!q)a.lineTo(c.x+h,r+(this.e.border?1:0));a.fill();if(q!=false){w=this.G(a,u,r+k,u,r,q,w,"x");a.fillStyle=w.gradient;a.beginPath();x=this.o(a,u,r,k,t,n,p,0);a.fill();a.globalAlpha=1}this.renderTextAt("middle",true,b[d].$startX+(x[0]-b[d].$startX)/2-1,r+(x[1]-r)/2,this.e.label(b[d]));f.addRect(b[d].id,[b[d].$startX,r,x[0],x[1]],e);b[d].$startX=x[0]}}}};\r
+dhtmlxchart.chart.stackedBar={pvt_render_stackedBar:function(a,b,c,d,e,f){var g,i,j,k=d.y-c.y;j=!!this.e.yAxis;var h=!!this.e.xAxis;i=this.Q(b);g=i.max;i=i.min;var m=Math.floor((d.x-c.x)/b.length);e||this.N(a,b,c,d,i,g,m);if(j){g=parseFloat(this.e.yAxis.end);i=parseFloat(this.e.yAxis.start)}g=this.z(i,g);j=g[0];g=g[1];j=j?k/j:10;var l=parseInt(this.e.width,10);if(l+4>m)l=m-4;var n=Math.floor((m-l)/2),o=this.e.gradient?this.e.gradient:false;h||this.i(a,c.x,d.y+0.5,d.x,d.y+0.5,"#000000",1);for(h=0;h<b.length;h++){var s=\r
+parseFloat(this.e.value(b[h]));if(s){e||(s-=i);s*=g;var t=c.x+n+h*m,q=d.y;if(e)q=b[h].$startY;if(!(q<c.y+1))if(s<0||this.e.yAxis&&s===0)this.renderTextAt(true,true,t+Math.floor(l/2),q,this.e.label(b[h]));else{var v=this.e.color.call(this,b[h]);if(this.e.border){a.beginPath();a.fillStyle=v;this.I(a,t-1,q,l+2,j,s,0,c.y);a.lineTo(t,q);a.fill();a.fillStyle="#000000";a.globalAlpha=0.37;a.beginPath();this.I(a,t-1,q,l+2,j,s,0,c.y);a.fill()}a.globalAlpha=this.e.alpha.call(this,b[h]);a.fillStyle=this.e.color.call(this,\r
+b[h]);a.beginPath();var p=this.I(a,t,q,l,j,s,this.e.border?1:0,c.y);a.fill();a.globalAlpha=1;if(o){v=this.G(a,t,q,t+l,p[1],o,v,"y");a.fillStyle=v.gradient;a.beginPath();p=this.I(a,t+v.offset,q,l-v.offset*2,j,s,this.e.border?1:0,c.y);a.fill();a.globalAlpha=1}this.renderTextAt(false,true,t+Math.floor(l/2),p[1]+(q-p[1])/2-7,this.e.label(b[h]));f.addRect(b[h].id,[t,p[1],p[0],b[h].$startY||q],e);b[h].$startY=this.e.border?p[1]+1:p[1]}}}},I:function(a,b,c,d,e,f,g,i){a.moveTo(b,c);f=c-e*f+g;if(f<i)f=i;a.lineTo(b,\r
+f);e=b+d;f=f;a.lineTo(e,f);var j=b+d;a.lineTo(j,c);a.lineTo(b,c);return[j,f-2*g]}};\r
+dhtmlxchart.chart.line={pvt_render_line:function(a,b,c,d,e,f){var g=this.C(a,b,c,d,e),i=Math.floor(g.cellWidth/2);if(b.length)for(var j=this.p(b[0],c,d,g),k=this.e.offset?c.x+g.cellWidth*0.5:c.x,h=k,m=1;m<=b.length;m++){var l=Math.floor(g.cellWidth*m)-0.5+h;if(b.length!=m){var n=this.p(b[m],c,d,g);this.i(a,k,j,l,n,this.e.line.color(b[m-1]),this.e.line.width)}this.M(a,k,j,b[m-1],!!this.e.offset);f.addRect(b[m-1].id,[k-i,j-i,k+i,j+i],e);j=n;k=l}},M:function(a,b,c,d,e){var f=parseInt(this.e.item.radius,10);\r
+a.lineWidth=parseInt(this.e.item.borderWidth,10);a.fillStyle=this.e.item.color(d);a.strokeStyle=this.e.item.borderColor(d);a.beginPath();a.arc(b,c,f,0,Math.PI*2,true);a.fill();a.stroke();e&&this.renderTextAt(false,true,b,c-f-this.e.labelOffset,this.e.label(d))},p:function(a,b,c,d){var e=d.minValue,f=d.maxValue,g=d.unit,i=d.valueFactor;a=this.e.value(a);i=(parseFloat(a)-e)*i;this.e.yAxis||(i+=d.startValue/g);d=c.y-Math.floor(g*i);if(i<0)d=c.y;if(a>f)d=b.y;if(a<e)d=c.y;return d},C:function(a,b,c,d,\r
+e){var f={};f.totalHeight=d.y-c.y;f.cellWidth=Math.round((d.x-c.x)/(!this.e.offset?b.length-1:b.length));var g=!!this.e.yAxis,i=this.e.view.indexOf("stacked")!=-1?this.Q(b):this.O();f.maxValue=i.max;f.minValue=i.min;e||this.N(a,b,c,d,f.minValue,f.maxValue,f.cellWidth);if(g){f.maxValue=parseFloat(this.e.yAxis.end);f.minValue=parseFloat(this.e.yAxis.start)}b=this.z(f.minValue,f.maxValue);a=b[0];f.valueFactor=b[1];f.unit=a?f.totalHeight/a:10;f.startValue=0;if(!g){f.startValue=f.unit>10?f.unit:10;f.unit=\r
+a?(f.totalHeight-f.startValue)/a:10}return f}};\r
+dhtmlxchart.chart.bar={pvt_render_bar:function(a,b,c,d,e,f){var g,i,j,k,h=d.y-c.y,m=!!this.e.yAxis,l=!!this.e.xAxis;i=this.O();g=i.max;i=i.min;var n=Math.floor((d.x-c.x)/b.length);!e&&!(this.e.origin!="auto"&&!m)&&this.N(a,b,c,d,i,g,n);if(m){g=parseFloat(this.e.yAxis.end);i=parseFloat(this.e.yAxis.start)}j=this.z(i,g);k=j[0];j=j[1];var o=k?h/k:k;if(!m&&!(this.e.origin!="auto"&&l)){var s=10;o=k?(h-s)/k:s}!e&&this.e.origin!="auto"&&!m&&this.e.origin>i&&this.ea(a,b,c,d,n,d.y-o*(this.e.origin-i));h=parseInt(this.e.width,\r
+10);if(this.h&&h*this.h.length+4>n)h=n/this.h.length-4;k=Math.floor((n-h*this.h.length)/2);var t=typeof this.e.radius!="undefined"?parseInt(this.e.radius,10):Math.round(h/5),q=false,v=this.e.gradient;if(v&&typeof v!="function"){q=v;v=false}else if(v){v=a.createLinearGradient(0,d.y,0,c.y);this.e.gradient(v)}l||this.i(a,c.x,d.y+0.5,d.x,d.y+0.5,"#000000",1);for(var p=0;p<b.length;p++){var u=parseFloat(this.e.value(b[p]));if(u>g)u=g;u-=i;u*=j;var r=c.x+k+p*n+(h+1)*e,w=d.y;if(u<0||this.e.yAxis&&u===0&&\r
+!(this.e.origin!="auto"&&this.e.origin>i))this.renderTextAt(true,true,r+Math.floor(h/2),w,this.e.label(b[p]));else{if(!m&&!(this.e.origin!="auto"&&l))u+=s/o;var x=v||this.e.color.call(this,b[p]);this.e.border&&this.wa(a,r,w,h,i,t,o,u,x);a.globalAlpha=this.e.alpha.call(this,b[p]);var y=this.va(a,c,r,w,h,i,t,o,u,x,v,q);a.globalAlpha=1;q&&this.xa(a,r,w,h,i,t,o,u,x,q);y[0]!=r?this.renderTextAt(false,true,r+Math.floor(h/2),y[1],this.e.label(b[p])):this.renderTextAt(true,true,r+Math.floor(h/2),y[3],this.e.label(b[p]));\r
+f.addRect(b[p].id,[r,y[3],y[2],y[1]],e)}}},K:function(a,b,c,d,e,f,g){var i=this.e.xAxis,j=c;if(i&&this.e.origin!="auto"&&this.e.origin>g){c-=(this.e.origin-g)*e;j=c;d-=this.e.origin-g;if(d<0){d*=-1;a.translate(b+f,c);a.rotate(Math.PI);c=b=0}c-=0.5}return{value:d,x0:b,y0:c,start:j}},va:function(a,b,c,d,e,f,g,i,j,k,h,m){a.save();a.fillStyle=k;var l=this.K(a,c,d,j,i,e,f);e=this.H(a,l.x0,l.y0,e,g,i,l.value,this.e.border?1:0);if(h&&!m)a.lineTo(l.x0+(this.e.border?1:0),b.y);a.fill();a.restore();a=l.x0;\r
+b=l.x0!=c?c+e[0]:e[0];d=l.x0!=c?l.start-e[1]:d;c=l.x0!=c?l.start:e[1];return[a,d,b,c]},wa:function(a,b,c,d,e,f,g,i,j){a.save();b=this.K(a,b,c,i,g,d,e);a.fillStyle=j;this.H(a,b.x0,b.y0,d,f,g,b.value,0);a.lineTo(b.x0,0);a.fill();a.fillStyle="#000000";a.globalAlpha=0.37;this.H(a,b.x0,b.y0,d,f,g,b.value,0);a.fill();a.restore()},xa:function(a,b,c,d,e,f,g,i,j,k){a.save();b=this.K(a,b,c,i,g,d,e);j=this.G(a,b.x0,b.y0,b.x0+d,b.y0-g*b.value+2,k,j,"y");a.fillStyle=j.gradient;this.H(a,b.x0+j.offset,b.y0,d-j.offset*\r
+2,f,g,b.value,j.offset);a.fill();a.restore()},H:function(a,b,c,d,e,f,g,i){a.beginPath();var j=0;if(e>f*g){var k=(e-f*g)/e;j=-Math.acos(k)+Math.PI/2}a.moveTo(b+i,c);var h=c-Math.floor(f*g)+e+(e?0:i);e<f*g&&a.lineTo(b+i,h);f=b+e;e&&a.arc(f,h,e-i,-Math.PI+j,-Math.PI/2,false);g=b+d-e-(e?0:i);f=h-e+(e?i:0);a.lineTo(g,f);h=h;e&&a.arc(g,h,e-i,-Math.PI/2,0-j,false);d=b+d-i;a.lineTo(d,c);a.lineTo(b+i,c);return[d,f]}};\r
+dhtmlxchart.chart.pie={pvt_render_pie:function(a,b,c,d,e,f){this.oa(a,b,c,d,1,f)},oa:function(a,b,c,d,e,f){var g=0,i=this.Ha(c,d);c=this.e.radius?this.e.radius:i.radius;this.max(this.e.value);for(var j=[],k=[],h=0,m=0;m<b.length;m++)g+=parseFloat(this.e.value(b[m]));for(m=0;m<b.length;m++){k[m]=parseFloat(this.e.value(b[m]));j[m]=Math.PI*2*(g?(k[m]+h)/g:1/b.length);h+=k[m]}d=this.e.x?this.e.x:i.x;var l=this.e.y?this.e.y:i.y;e==1&&this.e.shadow&&this.ta(a,d,l,c);l/=e;var n=-Math.PI/2;a.scale(1,e);for(m=\r
+0;m<b.length;m++)if(k[m]){a.lineWidth=2;a.beginPath();a.moveTo(d,l);alpha1=-Math.PI/2+j[m]-1.0E-4;a.arc(d,l,c,n,alpha1,false);a.lineTo(d,l);var o=this.e.color.call(this,b[m]);a.fillStyle=o;a.strokeStyle=this.e.lineColor(b[m]);a.stroke();a.fill();this.e.pieInnerText&&this.ca(d,l,5*c/6,n,alpha1,e,this.e.pieInnerText(b[m],g),true);this.e.label&&this.ca(d,l,c+this.e.labelOffset,n,alpha1,e,this.e.label(b[m]));if(e!=1){this.X(a,d,l,n,alpha1,c,true);a.fillStyle="#000000";a.globalAlpha=0.2;this.X(a,d,l,n,\r
+alpha1,c,false);a.globalAlpha=1;a.fillStyle=o}f.addSector(b[m].id,n,alpha1,d,l,c,e);n=alpha1}if(this.e.gradient){b=e!=1?d+c/3:d;f=e!=1?l+c/3:l;this.cb(a,d,l,c,b,f)}a.scale(1,1/e)},Ha:function(a,b){var c=b.x-a.x,d=b.y-a.y;b=a.x+c/2;a=a.y+d/2;var e=Math.min(c/2,d/2);return{x:b,y:a,radius:e}},X:function(a,b,c,d,e,f,g){a.lineWidth=1;if(d<=0&&e>=0||d>=0&&e<=Math.PI||d<=Math.PI&&e>=Math.PI){if(d<=0&&e>=0){d=0;g=false;this.da(a,b,c,f,d,e)}if(d<=Math.PI&&e>=Math.PI){e=Math.PI;g=false;this.da(a,b,c,f,d,e)}var i=\r
+(this.e.height||Math.floor(f/4))/this.e.cant;a.beginPath();a.arc(b,c,f,d,e,false);a.lineTo(b+f*Math.cos(e),c+f*Math.sin(e)+i);a.arc(b,c+i,f,e,d,true);a.lineTo(b+f*Math.cos(d),c+f*Math.sin(d));a.fill();g&&a.stroke()}},da:function(a,b,c,d,e,f){a.beginPath();a.arc(b,c,d,e,f,false);a.stroke()},ta:function(a,b,c,d){for(var e=["#676767","#7b7b7b","#a0a0a0","#bcbcbc","#d1d1d1","#d6d6d6"],f=e.length-1;f>-1;f--){a.beginPath();a.fillStyle=e[f];a.arc(b+2,c+2,d+f,0,Math.PI*2,true);a.fill()}},Ga:function(a){a.addColorStop(0,\r
+"#ffffff");a.addColorStop(0.7,"#7a7a7a");a.addColorStop(1,"#000000");return a},cb:function(a,b,c,d,e,f){a.globalAlpha=0.3;a.beginPath();var g;if(typeof this.e.gradient!="function"){g=a.createRadialGradient(e,f,d/4,b,c,d);g=this.Ga(g)}else g=this.e.gradient(g);a.fillStyle=g;a.arc(b,c,d,0,Math.PI*2,true);a.fill();a.globalAlpha=1},ca:function(a,b,c,d,e,f,g,i){var j=this.renderText(0,0,g,0,1);if(j){var k=j.scrollWidth;j.style.width=k+"px";if(k>a)k=a;var h=8;if(i)h=k/1.8;var m=d+(e-d)/2;c-=(h-8)/2;var l=\r
+-h,n=-8,o="left";if(m>=Math.PI/2&&m<Math.PI){l=-k-l+1;o="right"}if(m<=3*Math.PI/2&&m>=Math.PI){l=-k-l+1;o="right"}d=(b+Math.floor(c*Math.sin(m)))*f+n;h=a+Math.floor((c+h/2)*Math.cos(m))+l;var s=e<Math.PI/2+0.01,t=m<Math.PI/2;if(t&&s)h=Math.max(h,a+3);else if(!t&&!s)h=Math.min(h,a-k);if(!i&&f<1&&d>b*f)d+=this.e.height||Math.floor(c/4);j.style.top=d+"px";j.style.left=h+"px";j.style.width=k+"px";j.style.textAlign=o;j.style.whiteSpace="nowrap"}}};\r
+dhtmlxchart.chart.pie3D={pvt_render_pie3D:function(a,b,c,d,e,f){this.oa(a,b,c,d,this.e.cant,f)}};\r
+dhtmlxchart.Template={J:{},empty:function(){return""},setter:function(a,b){return dhtmlxchart.Template.fromHTML(b)},obj_setter:function(a,b){var c=dhtmlxchart.Template.setter(a,b),d=this;return function(){return c.apply(d,arguments)}},fromHTML:function(a){if(typeof a=="function")return a;if(this.J[a])return this.J[a];a=(a||"").toString();a=a.replace(/[\r\n]+/g,"\\n");a=a.replace(/\{obj\.([^}?]+)\?([^:]*):([^}]*)\}/g,'"+(obj.$1?"$2":"$3")+"');a=a.replace(/\{common\.([^}\(]*)\}/g,'"+common.$1+"');a=a.replace(/\{common\.([^\}\(]*)\(\)\}/g,\r
+'"+(common.$1?common.$1(obj):"")+"');a=a.replace(/\{obj\.([^}]*)\}/g,'"+obj.$1+"');a=a.replace(/#([a-z0-9_]+)#/gi,'"+obj.$1+"');a=a.replace(/\{obj\}/g,'"+obj+"');a=a.replace(/\{-obj/g,"{obj");a=a.replace(/\{-common/g,"{common");a='return "'+a+'";';return this.J[a]=Function("obj","common",a)}};\r
+dhtmlxchart.Type={add:function(a,b){if(!a.types&&a.prototype.types)a=a.prototype;var c=b.name||"default";this.T(b);this.T(b,"edit");this.T(b,"loading");a.types[c]=dhtmlxchart.extend(dhtmlxchart.extend({},a.types[c]||this.ua),b);return c},ua:{css:"default",template:function(){return""},template_edit:function(){return""},template_loading:function(){return"..."},width:150,height:80,margin:5,padding:0},T:function(a,b){b="template"+(b?"_"+b:"");var c=a[b];if(c&&typeof c=="string"){if(c.indexOf("->")!=-1){c=c.split("->");\r
+switch(c[0]){case "html":c=dhtmlxchart.html.getValue(c[1]).replace(/\"/g,'\\"');break;case "http":c=(new dhtmlxchart.ajax).sync().get(c[1],{uid:(new Date).valueOf()}).responseText;break;default:break}}a[b]=dhtmlxchart.Template.fromHTML(c)}}};\r
+dhtmlxchart.SingleRender={k:function(){},fb:function(a){return this.type.Pa(a,this.type)+this.type.template(a,this.type)+this.type.Oa},render:function(){if(!this.callEvent||this.callEvent("onBeforeRender",[this.data])){if(this.data)this.L.innerHTML=this.fb(this.data);this.callEvent&&this.callEvent("onAfterRender",[])}}};\r
+dhtmlxchart.ui.Tooltip=function(a){this.name="Tooltip";this.version="3.0";if(typeof a=="string")a={template:a};dhtmlxchart.extend(this,dhtmlxchart.Settings);dhtmlxchart.extend(this,dhtmlxchart.SingleRender);this.B(a,{type:"default",dy:0,dx:20});this.L=this.g=document.createElement("DIV");this.g.className="dhx_tooltip";dhtmlxchart.html.insertBefore(this.g,document.body.firstChild)};\r
+dhtmlxchart.ui.Tooltip.prototype={show:function(a,b){if(!this.$){if(this.data!=a){this.data=a;this.render(a)}this.g.style.top=b.y+this.e.dy+"px";this.g.style.left=b.x+this.e.dx+"px";this.g.style.display="block"}},hide:function(){this.data=null;this.g.style.display="none"},disable:function(){this.$=true},enable:function(){this.$=false},types:{"default":dhtmlxchart.Template.fromHTML("{obj.id}")},template_item_start:dhtmlxchart.Template.empty,template_item_end:dhtmlxchart.Template.empty};\r
+dhtmlxchart.AutoTooltip={tooltip_setter:function(a,b){var c=new dhtmlxchart.ui.Tooltip(b);this.attachEvent("onMouseMove",function(d,e){c.show(this.get(d),dhtmlxchart.html.pos(e))});this.attachEvent("onMouseOut",function(){c.hide()});this.attachEvent("onMouseMoving",function(){c.hide()});return c}};dhtmlxchart.DataStore=function(){this.name="DataStore";dhtmlxchart.extend(this,dhtmlxchart.EventSystem);this.setDriver("xml");this.pull={};this.order=dhtmlxchart.toArray();this.sa=false};\r
+dhtmlxchart.DataStore.prototype={setDriver:function(a){this.driver=dhtmlxchart.DataDriver[a]},ra:function(a){if(a.item){if(!(a.item instanceof Array))a.item=[a.item];for(var b=0;b<a.item.length;b++){var c=a.item[b],d=this.id(c);a.item[b]=d;this.pull[d]=c;c.parent=a.id;c.level=a.level+1;this.ra(c)}}},Xa:function(a){for(var b=this.driver.getInfo(a),c=this.driver.getRecords(a),d=(b.u||0)*1,e=0,f=0;f<c.length;f++){var g=this.driver.getDetails(c[f]),i=this.id(g);if(!this.pull[i]){this.order[e+d]=i;e++}this.pull[i]=\r
+g;if(this.sa){g.level=1;this.ra(g)}}for(f=0;f<b.w;f++)if(!this.order[f]){i=dhtmlxchart.uid();g={id:i,$template:"loading"};this.pull[i]=g;this.order[f]=i}this.callEvent("onStoreLoad",[this.driver,a]);this.refresh()},id:function(a){return a.id||(a.id=dhtmlxchart.uid())},get:function(a){return this.pull[a]},set:function(a,b){this.pull[a]=b;this.refresh()},refresh:function(a){a?this.callEvent("onStoreUpdated",[a,this.pull[a],"update"]):this.callEvent("onStoreUpdated",[null,null,null])},getRange:function(a,b){if(arguments.length){a=\r
+this.indexById(a);b=this.indexById(b);if(a>b){var c=b;b=a;a=c}}else{a=this.min||0;b=Math.min(this.max||Infinity,this.dataCount()-1)}return this.getIndexRange(a,b)},getIndexRange:function(a,b){b=Math.min(b,this.dataCount()-1);var c=dhtmlxchart.toArray();for(a=a;a<=b;a++)c.push(this.get(this.order[a]));return c},dataCount:function(){return this.order.length},exists:function(a){return!!this.pull[a]},move:function(a,b){if(!(a<0||b<0)){var c=this.idByIndex(a),d=this.get(c);this.order.removeAt(a);this.order.insertAt(c,\r
+Math.min(this.order.length,b));this.callEvent("onStoreUpdated",[c,d,"move"])}},add:function(a,b){var c=this.id(a),d=this.dataCount();if(dhtmlxchart.isNotDefined(b)||b<0)b=d;if(b>d)b=Math.min(this.order.length,b);if(this.callEvent("onbeforeAdd",[c,b])){if(this.exists(c))return null;this.pull[c]=a;this.order.insertAt(c,b);if(this.m){var e=this.m.length;if(!b&&this.order.length)e=0;this.m.insertAt(c,e)}this.callEvent("onafterAdd",[c,b]);this.callEvent("onStoreUpdated",[c,a,"add"]);return c}},remove:function(a){if(a instanceof\r
+Array)for(var b=0;b<a.length;b++)this.remove(a[b]);else if(this.callEvent("onbeforedelete",[a])){if(!this.exists(a))return null;b=this.get(a);this.sa&&dhtmlxchart.extend(this.get(b.parent).item,dhtmlxchart.PowerArray).remove(a);this.order.remove(a);this.m&&this.m.remove(a);delete this.pull[a];this.callEvent("onafterdelete",[a]);this.callEvent("onStoreUpdated",[a,b,"delete"])}},clearAll:function(){this.pull={};this.order=dhtmlxchart.toArray();this.m=null;this.callEvent("onClearAll",[]);this.refresh()},idByIndex:function(a){return this.order[a]},\r
+indexById:function(a){return a=this.order.find(a)},next:function(a,b){return this.order[this.indexById(a)+(b||1)]},first:function(){return this.order[0]},last:function(){return this.order[this.order.length-1]},previous:function(a,b){return this.order[this.indexById(a)-(b||1)]},sort:function(a,b,c){var d=a;if(typeof a=="function")d={as:a,dir:b};else if(typeof a=="string")d={by:a,dir:b,as:c};var e=[d.by,d.dir,d.as];if(this.callEvent("onbeforesort",e)){if(this.order.length){var f=dhtmlxchart.sort.create(d),\r
+g=this.getRange(this.first(),this.last());g.sort(f);this.order=g.map(function(i){return this.id(i)},this)}this.refresh();this.callEvent("onaftersort",e)}},filter:function(a,b){if(this.m){this.order=this.m;delete this.m}if(a){var c=a;if(typeof a=="string"){a=dhtmlxchart.Template.setter(0,a);c=function(e,f){return a(e).toLowerCase().indexOf(f)!=-1}}b=(b||"").toString().toLowerCase();var d=dhtmlxchart.toArray();this.order.each(function(e){c(this.get(e),b)&&d.push(e)},this);this.m=this.order;this.order=d}this.refresh()},\r
+each:function(a,b){for(var c=0;c<this.order.length;c++)a.call(b||this,this.get(this.order[c]))},provideApi:function(a,b){b&&this.mapEvent({onbeforesort:a,onaftersort:a,onbeforeadd:a,onafteradd:a,onbeforedelete:a,onafterdelete:a});for(var c=["sort","add","remove","exists","idByIndex","indexById","get","set","refresh","dataCount","filter","next","previous","clearAll","first","last"],d=0;d<c.length;d++)a[c[d]]=dhtmlxchart.methodPush(this,c[d])}};\r
+dhtmlxchart.sort={create:function(a){return dhtmlxchart.sort.dir(a.dir,dhtmlxchart.sort.by(a.by,a.as))},as:{"int":function(a,b){a*=1;b*=1;return a>b?1:a<b?-1:0},string_strict:function(a,b){a=a.toString();b=b.toString();return a>b?1:a<b?-1:0},string:function(a,b){a=a.toString().toLowerCase();b=b.toString().toLowerCase();return a>b?1:a<b?-1:0}},by:function(a,b){if(typeof b!="function")b=dhtmlxchart.sort.as[b||"string"];a=dhtmlxchart.Template.setter(0,a);return function(c,d){return b(a(c),a(d))}},dir:function(a,b){if(a=="asc")return b;\r
+return function(c,d){return b(c,d)*-1}}};\r
+dhtmlxchart.Group={k:function(){this.data.attachEvent("onStoreLoad",dhtmlxchart.bind(function(){this.e.group&&this.group(this.e.group,false)},this));this.attachEvent("onBeforeRender",dhtmlxchart.bind(function(a){if(this.e.sort){a.block();a.sort(this.e.sort);a.unblock()}},this));this.attachEvent("onBeforeSort",dhtmlxchart.bind(function(){this.e.sort=null},this))},Ka:function(a,b){a.attachEvent("onClearAll",dhtmlxchart.bind(function(){this.ungroup(false)},b))},sum:function(a,b){a=dhtmlxchart.Template.setter(0,a);b=b||this.data;\r
+var c=0;b.each(function(d){c+=a(d)*1});return c},min:function(a,b){a=dhtmlxchart.Template.setter(0,a);b=b||this.data;var c=Infinity;b.each(function(d){if(a(d)*1<c)c=a(d)*1});return c*1},max:function(a,b){a=dhtmlxchart.Template.setter(0,a);b=b||this.data;var c=-Infinity;b.each(function(d){if(a(d)*1>c)c=a(d)*1});return c},db:function(a){var b=function(j,k){j=dhtmlxchart.Template.setter(0,j);return j(k[0])},c=dhtmlxchart.Template.setter(0,a.by);a.map[c]||(a.map[c]=[c,b]);var d={},e=[];this.data.each(function(j){var k=c(j);\r
+if(!d[k]){e.push({id:k});d[k]=dhtmlxchart.toArray()}d[k].push(j)});for(var f in a.map){var g=a.map[f][1]||b;if(typeof g!="function")g=this[g];for(var i=0;i<e.length;i++)e[i][f]=g.call(this,a.map[f][0],d[e[i].id])}this.ka=this.data;this.data=new dhtmlxchart.DataStore;this.data.provideApi(this,true);this.Ka(this.data,this);this.parse(e,"json")},group:function(a,b){this.ungroup(false);this.db(a);b!==false&&this.render()},ungroup:function(a){if(this.ka){this.data=this.ka;this.data.provideApi(this,true)}a!==false&&\r
+this.render()},group_setter:function(a,b){return b},sort_setter:function(a,b){if(typeof b!="object")b={by:b};this.n(b,{as:"string",dir:"asc"});return b}};dhtmlxchart.KeyEvents={k:function(){dhtmlxchart.event(this.g,"keypress",this.Ua,this)},Ua:function(a){a=a||event;var b=a.which||a.keyCode;this.callEvent(this.hb?"onEditKeyPress":"onKeyPress",[b,a.ctrlKey,a.shiftKey,a])}};\r
+dhtmlxchart.MouseEvents={k:function(){if(this.on_click){dhtmlxchart.event(this.g,"click",this.Ra,this);dhtmlxchart.event(this.g,"contextmenu",this.Sa,this)}this.on_dblclick&&dhtmlxchart.event(this.g,"dblclick",this.Ta,this);if(this.on_mouse_move){dhtmlxchart.event(this.g,"mousemove",this.ma,this);dhtmlxchart.event(this.g,dhtmlxchart.r?"mouseleave":"mouseout",this.ma,this)}},Ra:function(a){return this.R(a,this.on_click,"ItemClick")},Ta:function(a){return this.R(a,this.on_dblclick,"ItemDblClick")},Sa:function(a){var b=dhtmlxchart.html.locate(a,\r
+this.q);if(b&&!this.callEvent("onBeforeContextMenu",[b,a]))return dhtmlxchart.html.preventEvent(a)},ma:function(a){if(dhtmlxchart.r)a=document.createEventObject(event);this.ja&&window.clearTimeout(this.ja);this.callEvent("onMouseMoving",[a]);this.ja=window.setTimeout(dhtmlxchart.bind(function(){a.type=="mousemove"?this.Va(a):this.Wa(a)},this),500)},Va:function(a){this.R(a,this.on_mouse_move,"MouseMove")||this.callEvent("onMouseOut",[a||event])},Wa:function(a){this.callEvent("onMouseOut",[a||event])},R:function(a,\r
+b,c){a=a||event;for(var d=a.target||a.srcElement,e="",f=null,g=false;d&&d.parentNode;){if(!g&&d.getAttribute)if(f=d.getAttribute(this.q)){d.getAttribute("userdata")&&this.callEvent("onLocateData",[f,d]);if(!this.callEvent("on"+c,[f,a,d]))return;g=true}if(e=d.className){e=e.split(" ");e=e[0]||e[1];if(b[e])return b[e].call(this,a,f,d)}d=d.parentNode}return g}};\r
+dhtmlxchart.Settings={k:function(){this.e=this.config={}},define:function(a,b){if(typeof a=="object")return this.na(a);return this.Z(a,b)},Z:function(a,b){var c=this[a+"_setter"];return this.e[a]=c?c.call(this,a,b):b},na:function(a){if(a)for(var b in a)this.Z(b,a[b])},B:function(a,b){var c=dhtmlxchart.extend({},b);typeof a=="object"&&!a.tagName&&dhtmlxchart.extend(c,a);this.na(c)},n:function(a,b){for(var c in b)switch(typeof a[c]){case "object":a[c]=this.n(a[c]||{},b[c]);break;case "undefined":a[c]=b[c];break;default:break}return a},\r
+Ya:function(a,b,c){if(typeof a=="object"&&!a.tagName)a=a.container;this.g=dhtmlxchart.toNode(a);if(!this.g&&c)this.g=c(a);this.g.className+=" "+b;this.g.onselectstart=function(){return false};this.L=this.g},bb:function(a){if(typeof a=="object")return this.type_setter("type",a);this.type=dhtmlxchart.extend({},this.types[a]);this.customize()},customize:function(a){a&&dhtmlxchart.extend(this.type,a);this.type.Pa=dhtmlxchart.Template.fromHTML(this.template_item_start(this.type));this.type.Oa=this.template_item_end(this.type);\r
+this.render()},type_setter:function(a,b){this.bb(typeof b=="object"?dhtmlxchart.Type.add(this,b):b);return b},template_setter:function(a,b){return this.type_setter("type",{template:b})},css_setter:function(a,b){this.g.className+=" "+b;return b}};dhtmlxchart.compat=function(a,b){dhtmlxchart.compat[a]&&dhtmlxchart.compat[a](b)};\r
+(function(){if(!window.dhtmlxError){var a=function(){};window.dhtmlxError={catchError:a,throwError:a};window.convertStringToBoolean=function(c){return!!c};window.dhtmlxEventable=function(c){dhtmlxchart.extend(c,dhtmlxchart.EventSystem)};var b={getXMLTopNode:function(){},doXPath:function(c){return dhtmlxchart.DataDriver.xml.xpath(this.xml,c)},xmlDoc:{responseXML:true}};dhtmlxchart.compat.dataProcessor=function(c){var d="_sendData",e="_in_progress",f="_tMode",g="_waitMode";c[d]=function(i,j){if(i){if(j)this[e][j]=(new Date).valueOf();\r
+if(!this.callEvent("onBeforeDataSending",j?[j,this.getState(j)]:[]))return false;var k=this,h=this.serverProcessor;this[f]!="POST"?dhtmlxchart.ajax().get(h+(h.indexOf("?")!=-1?"&":"?")+this.serialize(i,j),"",function(m,l){b.xml=dhtmlxchart.DataDriver.xml.checkResponse(m,l);k.afterUpdate(k,null,null,null,b)}):dhtmlxchart.ajax().post(h,this.serialize(i,j),function(m,l){b.xml=dhtmlxchart.DataDriver.xml.checkResponse(m,l);k.afterUpdate(k,null,null,null,b)});this[g]++}}}}})();if(!dhtmlxchart.attaches)dhtmlxchart.attaches={};\r
+dhtmlxchart.attaches.attachAbstract=function(a,b){var c=document.createElement("DIV");c.id="CustomObject_"+dhtmlxchart.uid();c.style.width="100%";c.style.height="100%";c.cmp="grid";document.body.appendChild(c);this.attachObject(c.id);b.container=c.id;var d=this.vs[this.av];d.grid=new window[a](b);d.gridId=c.id;d.gridObj=c;d.grid.setSizes=function(){this.resize?this.resize():this.render()};var e="_viewRestore";return this.vs[this[e]()].grid};\r
+dhtmlxchart.attaches.attachDataView=function(a){return this.attachAbstract("dhtmlxchartDataView",a)};dhtmlxchart.attaches.attachChart=function(a){return this.attachAbstract("dhtmlxchartChart",a)};dhtmlxchart.compat.layout=function(){};dhtmlxchart.ajax=function(a,b,c){if(arguments.length!==0){var d=new dhtmlxchart.ajax;if(c)d.master=c;d.get(a,null,b)}if(!this.getXHR)return new dhtmlxchart.ajax;return this};\r
+dhtmlxchart.ajax.prototype={getXHR:function(){return dhtmlxchart.r?new ActiveXObject("Microsoft.xmlHTTP"):new XMLHttpRequest},send:function(a,b,c){var d=this.getXHR();if(typeof c=="function")c=[c];if(typeof b=="object"){var e=[];for(var f in b)e.push(f+"="+encodeURIComponent(b[f]));b=e.join("&")}if(b&&!this.post){a=a+(a.indexOf("?")!=-1?"&":"?")+b;b=null}d.open(this.post?"POST":"GET",a,!this.qa);this.post&&d.setRequestHeader("Content-type","application/x-www-form-urlencoded");if(!this.qa){var g=this;d.onreadystatechange=\r
+function(){if(!d.readyState||d.readyState==4){if(c&&g)for(var i=0;i<c.length;i++)if(c[i])c[i].call(g.master||g,d.responseText,d.responseXML,d);c=d=g=g.master=null}}}d.send(b||null);return d},get:function(a,b,c){this.post=false;return this.send(a,b,c)},post:function(a,b,c){this.post=true;return this.send(a,b,c)},sync:function(){this.qa=true;return this}};\r
+dhtmlxchart.DataLoader={k:function(){this.data=new dhtmlxchart.DataStore},load:function(a,b,c){this.callEvent("onXLS",[]);if(typeof b=="string"){this.data.setDriver(b);b=c}if(!this.data.feed)this.data.feed=function(d,e){if(this.F)return this.F=[d,e];else this.F=true;this.load(a+(a.indexOf("?")==-1?"?":"&")+"posStart="+d+"&count="+e,function(){var f=this.F;this.F=false;typeof f=="object"&&this.data.feed.apply(this,f)})};dhtmlxchart.ajax(a,[this.la,b],this)},parse:function(a,b){this.callEvent("onXLS",[]);b&&this.data.setDriver(b);\r
+this.la(a,null)},la:function(a,b){this.data.Xa(this.data.driver.toObject(a,b));this.callEvent("onXLE",[])}};dhtmlxchart.DataDriver={};dhtmlxchart.DataDriver.json={toObject:function(a){if(typeof a=="string"){eval("dhtmlxchart.temp="+a);return dhtmlxchart.temp}return a},getRecords:function(a){if(a&&!(a instanceof Array))return[a];return a},getDetails:function(a){return a},getInfo:function(a){return{w:a.total_count||0,u:a.pos||0}}};\r
+dhtmlxchart.DataDriver.html={toObject:function(a){if(typeof a=="string"){var b=null;if(a.indexOf("<")==-1)b=dhtmlxchart.toNode(a);if(!b){b=document.createElement("DIV");b.innerHTML=a}return b.getElementsByTagName(this.tag)}return a},getRecords:function(a){if(a.tagName)return a.childNodes;return a},getDetails:function(a){return dhtmlxchart.DataDriver.xml.tagToObject(a)},getInfo:function(){return{w:0,u:0}},tag:"LI"};\r
+dhtmlxchart.DataDriver.jsarray={toObject:function(a){if(typeof a=="string"){eval("dhtmlxchart.temp="+a);return dhtmlxchart.temp}return a},getRecords:function(a){return a},getDetails:function(a){for(var b={},c=0;c<a.length;c++)b["data"+c]=a[c];return b},getInfo:function(){return{w:0,u:0}}};\r
+dhtmlxchart.DataDriver.csv={toObject:function(a){return a},getRecords:function(a){return a.split(this.row)},getDetails:function(a){a=this.stringToArray(a);for(var b={},c=0;c<a.length;c++)b["data"+c]=a[c];return b},getInfo:function(){return{w:0,u:0}},stringToArray:function(a){a=a.split(this.cell);for(var b=0;b<a.length;b++)a[b]=a[b].replace(/^[ \t\n\r]*(\"|)/g,"").replace(/(\"|)[ \t\n\r]*$/g,"");return a},row:"\n",cell:","};\r
+dhtmlxchart.DataDriver.xml={toObject:function(a,b){if(b&&(b=this.checkResponse(a,b)))return b;if(typeof a=="string")return this.fromString(a);return a},getRecords:function(a){return this.xpath(a,this.records)},records:"/*/item",userdata:"/*/userdata",getDetails:function(a){return this.tagToObject(a,{})},getUserData:function(a,b){b=b||{};var c=this.xpath(a,this.userdata);for(a=0;a<c.length;a++){var d=this.tagToObject(c[a]);b[d.name]=d.value}return b},getInfo:function(a){return{w:a.documentElement.getAttribute("total_count")||\r
+0,u:a.documentElement.getAttribute("pos")||0}},xpath:function(a,b){if(window.XPathResult){var c=a;if(a.nodeName.indexOf("document")==-1)a=a.ownerDocument;var d=[];a=a.evaluate(b,c,null,XPathResult.ANY_TYPE,null);for(b=a.iterateNext();b;){d.push(b);b=a.iterateNext()}return d}return a.selectNodes(b)},tagToObject:function(a,b){b=b||{};for(var c=a.attributes,d=0;d<c.length;d++)b[c[d].name]=c[d].value;var e=false,f=a.childNodes;for(d=0;d<f.length;d++)if(f[d].nodeType==1){var g=f[d].tagName;if(typeof b[g]!=\r
+"undefined"){b[g]instanceof Array||(b[g]=[b[g]]);b[g].push(this.tagToObject(f[d],{}))}else b[f[d].tagName]=this.tagToObject(f[d],{});e=true}if(!c.length&&!e)return this.nodeValue(a);b.value=this.nodeValue(a);return b},nodeValue:function(a){if(a.firstChild)return a.firstChild.data;return""},fromString:function(a){if(window.DOMParser)return(new DOMParser).parseFromString(a,"text/xml");if(window.ActiveXObject){temp=new ActiveXObject("Microsoft.xmlDOM");temp.loadXML(a);return temp}},checkResponse:function(a,\r
+b){if(b&&b.firstChild&&b.firstChild.tagName!="parsererror")return b;if(a=this.from_string(a.responseText.replace(/^[\s]+/,"")))return a}};dhtmlxchart.DataDriver.dhtmlxgrid={Ja:"_get_cell_value",toObject:function(a){return this.fa=a},getRecords:function(a){return a.rowsBuffer},getDetails:function(a){for(var b={},c=0;c<this.fa.getColumnsNum();c++)b["data"+c]=this.fa[this.Ja](a,c);return b},getInfo:function(){return{w:0,u:0}}};\r
+dhtmlxchart.Canvas={k:function(){this.D=[]},Za:function(a){this.l=dhtmlxchart.html.create("canvas",{width:a.offsetWidth,height:a.offsetHeight});a.appendChild(this.l);if(!this.l.getContext)if(dhtmlxchart.r){dhtmlxchart.require("thirdparty/excanvas/excanvas.js");G_vmlCanvasManager.init_(document);G_vmlCanvasManager.initElement(this.l)}return this.l},getCanvas:function(a){return(this.l||this.Za(this.g)).getContext(a||"2d")},ab:function(){if(this.l){this.l.setAttribute("width",this.l.parentNode.offsetWidth);this.l.setAttribute("height",\r
+this.l.parentNode.offsetHeight)}},renderText:function(a,b,c,d,e){if(c){a=dhtmlxchart.html.create("DIV",{"class":"dhx_canvas_text"+(d?" "+d:""),style:"left:"+a+"px; top:"+b+"px;"},c);this.g.appendChild(a);this.D.push(a);if(e)a.style.width=e+"px";return a}},renderTextAt:function(a,b,c,d,e,f,g){if(e=this.renderText.call(this,c,d,e,f,g)){if(a)e.style.top=a=="middle"?parseInt(d-e.offsetHeight/2,10)+"px":d-e.offsetHeight+"px";if(b)e.style.left=b=="left"?c-e.offsetWidth+"px":parseInt(c-e.offsetWidth/2,10)+"px"}return e},\r
+clearCanvas:function(){for(var a=0;a<this.D.length;a++)this.g.removeChild(this.D[a]);this.D=[];if(this.g.v){this.g.v.parentNode.removeChild(this.g.v);this.g.v=null}this.getCanvas().clearRect(0,0,this.l.offsetWidth,this.l.offsetHeight)}};\r
+dhtmlxchartChart=function(a){this.name="Chart";this.version="3.0";dhtmlxchart.extend(this,dhtmlxchart.Settings);this.Ya(a,"dhx_chart");dhtmlxchart.extend(this,dhtmlxchart.DataLoader);this.data.provideApi(this,true);dhtmlxchart.extend(this,dhtmlxchart.EventSystem);dhtmlxchart.extend(this,dhtmlxchart.MouseEvents);dhtmlxchart.extend(this,dhtmlxchart.Destruction);dhtmlxchart.extend(this,dhtmlxchart.Canvas);dhtmlxchart.extend(this,dhtmlxchart.Group);dhtmlxchart.extend(this,dhtmlxchart.AutoTooltip);for(var b in dhtmlxchart.chart)dhtmlxchart.extend(this,dhtmlxchart.chart[b]);this.B(a,{color:"RAINBOW",\r
+alpha:"1",label:false,value:"{obj.value}",padding:{},view:"pie",lineColor:"#ffffff",cant:0.5,width:15,labelWidth:100,line:{},item:{},shadow:true,gradient:false,border:true,labelOffset:20,origin:"auto"});this.h=[this.e];this.data.attachEvent("onStoreUpdated",dhtmlxchart.bind(function(){this.render()},this));this.attachEvent("onLocateData",this.eb)};\r
+dhtmlxchartChart.prototype={q:"dhx_area_id",on_click:{},on_dblclick:{},on_mouse_move:{},resize:function(){this.ab();this.render()},view_setter:function(a,b){if(typeof this.e.offset=="undefined")this.e.offset=b=="area"||b=="stackedArea"?false:true;return b},render:function(){if(this.callEvent("onBeforeRender",[this.data])){this.clearCanvas();this.e.legend&&this.Aa(this.getCanvas(),this.data.getRange(),this.g.offsetWidth,this.g.offsetHeight);for(var a=this.Fa(this.g.offsetWidth,this.g.offsetHeight),b=new dhtmlxchart.ui.Map(this.q),\r
+c=this.e,d=0;d<this.h.length;d++){this.e=this.h[d];this["pvt_render_"+this.e.view](this.getCanvas(),this.data.getRange(),a.start,a.end,d,b)}b.render(this.g);this.e=c}},value_setter:dhtmlxchart.Template.obj_setter,alpha_setter:dhtmlxchart.Template.obj_setter,label_setter:dhtmlxchart.Template.obj_setter,lineColor_setter:dhtmlxchart.Template.obj_setter,pieInnerText_setter:dhtmlxchart.Template.obj_setter,gradient_setter:function(a,b){if(typeof b!="function"&&b&&(b===true||b!="3d"))b="light";return b},colormap:{RAINBOW:function(a){a=\r
+Math.floor(this.indexById(a.id)/this.dataCount()*1536);if(a==1536)a-=1;return this.$a[Math.floor(a/256)](a%256)}},color_setter:function(a,b){return this.colormap[b]||dhtmlxchart.Template.obj_setter(a,b)},legend_setter:function(a,b){if(typeof b!="object")b={template:b};this.n(b,{width:150,height:18,layout:"y",align:"left",valign:"bottom",template:"",marker:{type:"square",width:25,height:15}});b.template=dhtmlxchart.Template.setter(0,b.template);return b},item_setter:function(a,b){if(typeof b!="object")b={color:b,\r
+borderColor:b};this.n(b,{radius:4,color:"#000000",borderColor:"#000000",borderWidth:2});b.color=dhtmlxchart.Template.setter(0,b.color);b.borderColor=dhtmlxchart.Template.setter(0,b.borderColor);return b},line_setter:function(a,b){if(typeof b!="object")b={color:b};this.n(b,{width:3,color:"#d4d4d4"});b.color=dhtmlxchart.Template.setter(0,b.color);return b},padding_setter:function(a,b){if(typeof b!="object")b={left:b,right:b,top:b,bottom:b};this.n(b,{left:50,right:20,top:35,bottom:40});return b},xAxis_setter:function(a,\r
+b){if(!b)return false;if(typeof b!="object")b={template:b};this.n(b,{title:"",color:"#000000",template:"{obj}",lines:false});if(b.template)b.template=dhtmlxchart.Template.setter(0,b.template);return b},yAxis_setter:function(a,b){this.n(b,{title:"",color:"#000000",template:"{obj}",lines:true});if(b.template)b.template=dhtmlxchart.Template.setter(0,b.template);return b},N:function(a,b,c,d,e,f,g){e=this.Ea(a,b,c,d,e,f);this.ea(a,b,c,d,g,e);return e},ea:function(a,b,c,d,e,f){if(this.e.xAxis){var g=c.x-0.5;f=parseInt(f?\r
+f:d.y,10)+0.5;var i=d.x,j,k=true;this.i(a,g,f,i,f,this.e.xAxis.color,1);for(var h=0;h<b.length;h++){if(this.e.offset===true)j=g+e/2+h*e;else{j=g+h*e;k=!!h}var m=this.e.origin!="auto"&&this.e.view=="bar"&&parseFloat(this.e.value(b[h]))<this.e.origin;this.Ca(j,f,b[h],k,m);this.e.view_setter!="bar"&&this.Da(a,j,d.y,c.y)}this.renderTextAt(true,false,g,d.y+this.e.padding.bottom-3,this.e.xAxis.title,"dhx_axis_title_x",d.x-c.x);this.e.xAxis.lines&&this.e.offset&&this.i(a,i+0.5,d.y,i+0.5,c.y+0.5,this.e.xAxis.color,\r
+0.2)}},Ea:function(a,b,c,d,e,f){var g;b={};if(this.e.yAxis){var i=c.x-0.5,j=d.y,k=c.y,h=d.y;this.i(a,i,j,i,k,this.e.yAxis.color,1);if(this.e.yAxis.step)g=parseFloat(this.e.yAxis.step);if(typeof this.e.yAxis.step=="undefined"||typeof this.e.yAxis.start=="undefined"||typeof this.e.yAxis.end=="undefined"){b=this.W(e,f);e=b.start;f=b.end;g=b.step;this.e.yAxis.end=f;this.e.yAxis.start=e}if(g!==0){k=(j-k)*g/(f-e);for(var m=0,l=e;l<=f;l+=g){if(b.fixNum)l=parseFloat((new Number(l)).toFixed(b.fixNum));var n=\r
+Math.floor(j-m*k)+0.5;!(l==e&&this.e.origin=="auto")&&this.e.yAxis.lines&&this.i(a,i,n,d.x,n,this.e.yAxis.color,0.2);if(l==this.e.origin)h=n;this.renderText(0,n-5,this.e.yAxis.template(l.toString()),"dhx_axis_item_y",c.x-5);m++}this.pa(c,d);return h}}},pa:function(a,b){if(a=this.renderTextAt("middle",false,0,parseInt((b.y-a.y)/2+a.y,10),this.e.yAxis.title,"dhx_axis_title_y"))a.style.left=(dhtmlxchart.env.transform?(a.offsetHeight-a.offsetWidth)/2:0)+"px"},W:function(a,b){if(this.e.origin!="auto"&&this.e.origin<\r
+a)a=this.e.origin;var c,d,e;c=(b-a)/8||1;var f=Math.floor(this.ha(c)),g=Math.pow(10,f),i=c/g;i=i>5?10:5;c=parseInt(i,10)*g;if(c>Math.abs(a))d=a<0?-c:0;else{var j=Math.abs(a),k=Math.floor(this.ha(j)),h=j/Math.pow(10,k);d=Math.ceil(h*10)/10*Math.pow(10,k)-c;if(a<0)d=-d-2*c}for(e=d;e<b;){e+=c;e=parseFloat((new Number(e)).toFixed(Math.abs(f)))}return{start:d,end:e,step:c,fixNum:Math.abs(f)}},O:function(a){var b,c;if((c=arguments.length&&a=="h"?this.e.xAxis:this.e.yAxis)&&typeof c.end!="undefied"&&typeof c.start!=\r
+"undefied"&&c.step){b=parseFloat(c.end);c=parseFloat(c.start)}else{b=this.max(this.h[0].value);c=this.min(this.h[0].value);if(this.h.length>1)for(var d=1;d<this.h.length;d++){var e=this.max(this.h[d].value),f=this.min(this.h[d].value);if(e>b)b=e;if(f<c)c=f}}return{max:b,min:c}},ha:function(a){var b="log";return Math.floor(Math[b](a)/Math.LN10)},Ca:function(a,b,c,d,e){this.e.xAxis&&this.renderTextAt(e,d,a,b,this.e.xAxis.template(c),"dhx_axis_item_x")},Da:function(a,b,c,d){this.e.xAxis&&this.e.xAxis.lines&&this.i(a,\r
+b,c,b,d,this.e.xAxis.color,0.2)},i:function(a,b,c,d,e,f,g){a.strokeStyle=f;a.lineWidth=g;a.beginPath();a.moveTo(b,c);a.lineTo(d,e);a.stroke()},z:function(a,b){var c=1;if(b!=a){a=b-a;if(Math.abs(a)<1)for(;Math.abs(a)<1;){c*=10;a*=c}}else a=a;return[a,c]},$a:[function(a){return"#FF"+dhtmlxchart.math.toHex(a/2,2)+"00"},function(a){return"#FF"+dhtmlxchart.math.toHex(a/2+128,2)+"00"},function(a){return"#"+dhtmlxchart.math.toHex(255-a,2)+"FF00"},function(a){return"#00FF"+dhtmlxchart.math.toHex(a,2)},function(a){return"#00"+\r
+dhtmlxchart.math.toHex(255-a,2)+"FF"},function(a){return"#"+dhtmlxchart.math.toHex(a,2)+"00FF"}],addSeries:function(a){var b=this.e;this.e=dhtmlxchart.extend({},b);this.B(a,{});this.h.push(this.e);this.e=b},eb:function(a,b){this.U=b.getAttribute("userdata");if(this.h[this.U]){for(a=0;a<this.h.length;a++){var c=this.h[a].tooltip;c&&c.disable()}(c=this.h[this.U].tooltip)&&c.enable()}},Aa:function(a,b){var c=0,d=0,e=this.e.legend,f,g,i=this.e.legend.layout!="x"?"width:"+e.width+"px":"";if(this.legendObj)this.legendObj.innerHTML=\r
+"";var j=dhtmlxchart.html.create("DIV",{"class":"dhx_chart_legend",style:"position:absolute;left:"+c+"px; top:"+d+"px;"+i},"");this.legendObj=j;this.g.appendChild(j);var k=[];if(e.values)for(h=0;h<e.values.length;h++)k.push(this.ba(j,e.values[h].text));else for(var h=0;h<b.length;h++)k.push(this.ba(j,e.template(b[h])));g=j.offsetWidth;f=j.offsetHeight;this.e.legend.width=g;this.e.legend.height=f;if(g<this.g.offsetWidth){if(e.layout=="x"&&e.align=="center")c=(this.g.offsetWidth-g)/2;if(e.align=="right")c=this.g.offsetWidth-\r
+g}if(f<this.g.offsetHeight)if(e.valign=="middle"&&e.align!="center"&&e.layout!="x")d=(this.g.offsetHeight-f)/2;else if(e.valign=="bottom")d=this.g.offsetHeight-f;j.style.left=c+"px";j.style.top=d+"px";for(h=0;h<k.length;h++){var m=k[h],l=e.values?e.values[h].color:this.e.color.call(this,b[h]);this.Ba(a,m.offsetLeft+c,m.offsetTop+d,l)}k=null},ba:function(a,b){var c="";if(this.e.legend.layout=="x")c="float:left;";b=dhtmlxchart.html.create("DIV",{style:c+"padding-left:"+(10+this.e.legend.marker.width)+"px",\r
+"class":"dhx_chart_legend_item"},b);a.appendChild(b);return b},Ba:function(a,b,c,d){var e=this.e.legend;a.strokeStyle=a.fillStyle=d;a.lineWidth=e.marker.height;a.lineCap=e.marker.type;a.beginPath();b+=a.lineWidth/2+5;c+=a.lineWidth/2+3;a.moveTo(b,c);b=b+e.marker.width-e.marker.height+1;a.lineTo(b,c);a.stroke()},Fa:function(a,b){var c,d,e,f;c=this.e.padding.left;d=this.e.padding.top;e=a-this.e.padding.right;f=b-this.e.padding.bottom;if(this.e.legend){a=this.e.legend;b=this.e.legend.width;var g=this.e.legend.height;\r
+if(a.layout=="x")if(a.valign=="center")if(a.align=="right")e-=b;else{if(a.align=="left")c+=b}else if(a.valign=="bottom")f-=g;else d+=g;else if(a.align=="right")e-=b;else if(a.align=="left")c+=b}return{start:{x:c,y:d},end:{x:e,y:f}}},Q:function(a){var b,c;if(this.e.yAxis&&typeof this.e.yAxis.end!="undefied"&&typeof this.e.yAxis.start!="undefied"&&this.e.yAxis.step){b=parseFloat(this.e.yAxis.end);c=parseFloat(this.e.yAxis.start)}else{for(var d=0;d<a.length;d++){a[d].$sum=0;a[d].$min=Infinity;for(b=\r
+0;b<this.h.length;b++){c=parseFloat(this.h[b].value(a[d]));if(!isNaN(c)){a[d].$sum+=c;if(c<a[d].$min)a[d].$min=c}}}b=-Infinity;c=Infinity;for(d=0;d<a.length;d++){if(a[d].$sum>b)b=a[d].$sum;if(a[d].$min<c)c=a[d].$min}if(c>0)c=0}return{max:b,min:c}},G:function(a,b,c,d,e,f,g,i){if(f=="light"){a=i=="x"?a.createLinearGradient(b,c,d,c):a.createLinearGradient(b,c,b,e);a.addColorStop(0,"#FFFFFF");a.addColorStop(0.9,g);a.addColorStop(1,g);g=2}else{a.globalAlpha=0.37;g=0;a=i=="x"?a.createLinearGradient(b,e,\r
+b,c):a.createLinearGradient(b,c,d,c);a.addColorStop(0,"#000000");a.addColorStop(0.5,"#FFFFFF");a.addColorStop(0.6,"#FFFFFF");a.addColorStop(1,"#000000")}return{gradient:a,offset:g}}};dhtmlxchart.compat("layout");\r
index e38c213..0c0f9de 100644 (file)
@@ -81,9 +81,8 @@ openerp.base_graph.GraphView = openerp.base.Controller.extend({
     },
 
     schedule_chart: function(result) {
-        this.$element.html(QWeb.render("GraphView", {"fields_view": this.fields_view, "chart": this.chart}));
+        this.$element.html(QWeb.render("GraphView", {"fields_view": this.fields_view, "chart": this.chart,'view_id': this.view_id}));
         this.opration_fld = {};
-
         if (result.length){
             for(res in result) {
                 for(fld in result[res]) {
@@ -128,6 +127,7 @@ openerp.base_graph.GraphView = openerp.base.Controller.extend({
             for (i in this.opration_fld){
                 result.push(this.opration_fld[i]);
             }
+
             if(this.chart == 'bar') {
                 return this.schedule_bar(result);
             } else if(this.chart == "pie") {
@@ -150,18 +150,19 @@ openerp.base_graph.GraphView = openerp.base.Controller.extend({
                      '#75507b', '#3465a4', '#73d216', '#c17d11', '#edd400', '#fcaf3e', '#ef2929', '#ff00c9',
                      '#ad7fa8', '#729fcf', '#8ae234', '#e9b96e', '#fce94f', '#f57900', '#cc0000', '#d400a8'];
 
-        if(self.group_field){
+        if(self.group_field && (this.operator.length <= 1)){
             view_chart = self.orientation == 'horizontal'? 'stackedBarH' : 'stackedBar';
         }else{
             view_chart = self.orientation == 'horizontal'? 'barH' : 'bar';
         }
 
         for (i in result){
-            if (self.group_field){
+            if (self.group_field && (this.operator.length <= 1)){
                 newkey =result[i][self.group_field].split(' ').join('_');
             }else{
                 newkey = "val";
             }
+
             if (jQuery.inArray(newkey, self.group_list) == -1){
                 self.group_list.push(newkey);
                 if(this.operator.length > 1){
@@ -173,7 +174,7 @@ openerp.base_graph.GraphView = openerp.base.Controller.extend({
 
         for (i in result){
             var xystring = result[i][self.chart_info_fields];
-            if (self.group_field){
+            if (self.group_field && (self.operator.length <= 1)){
                 newkey =result[i][self.group_field].split(' ').join('_');
             }else{
                 newkey = "val";
@@ -200,7 +201,6 @@ openerp.base_graph.GraphView = openerp.base.Controller.extend({
                 xystr[xystring] = xyname;
             }
         }
-
         for (i in xystr){
             res.push(xystr[i]);
         }
@@ -238,7 +238,7 @@ openerp.base_graph.GraphView = openerp.base.Controller.extend({
 
         var bar_chart = new dhtmlxchartChart({
             view: view_chart,
-            container: "barchart",
+            container: self.view_id+"-barchart",
             value:"#"+self.group_list[0]+"#",
             gradient: "3d",
             border: false,
@@ -295,14 +295,14 @@ openerp.base_graph.GraphView = openerp.base.Controller.extend({
         bar_chart.parse(res,"json");
         bar_chart.attachEvent("onItemClick", function(id) {
             var id = bar_chart.get(id);
-            self.open(id);
+            self.open_list_view(id);
         });
     },
     schedule_pie: function(result) {
         var self = this;
         var chart =  new dhtmlxchartChart({
             view:"pie3D",
-            container:"piechart",
+            container:self.view_id+"-piechart",
             value:"#"+self.operator_field+"#",
             pieInnerText:function(obj) {
                 var sum = chart.sum("#"+self.operator_field+"#");
@@ -331,10 +331,10 @@ openerp.base_graph.GraphView = openerp.base.Controller.extend({
         chart.parse(result,"json");
         chart.attachEvent("onItemClick", function(id) {
             var id = chart.get(id);
-            self.open(id);
+            self.open_list_view(id);
         });
     },
-    open : function (id){
+    open_list_view : function (id){
         var self = this;
         var id = id[self.chart_info_fields];
         if (typeof id == 'object'){
index f8e18fa..e29f831 100644 (file)
@@ -1,6 +1,6 @@
 <template>
     <t t-name="GraphView">
         <h2 class="oe_view_title"><t t-esc="fields_view.arch.attrs.string"/></h2>
-        <div t-att-id="chart+'chart'" style="height:300px;position:relative;border:1px solid #A4BED4;"></div>
+        <div t-att-id="view_id+'-'+chart+'chart'" style="height:300px;position:relative;border:1px solid #A4BED4;"></div>
     </t>
 </template>
\ No newline at end of file