Файл: templates/Default/js/jquery.graph.js
Строк: 1313
<?php
/* Javascript plotting library for jQuery, v. 0.7.
 *
 * Released under the MIT license by IOLA, December 2007.
 *
 */ (function (b) {
    b.color = {};
    b.color.make = function (d, e, g, f) {
        var c = {};
        c.r = d || 0;
        c.g = e || 0;
        c.b = g || 0;
        c.a = f != null ? f : 1;
        c.add = function (h, j) {
            for (var k = 0; k < h.length; ++k) {
                c[h.charAt(k)] += j
            }
            return c.normalize()
        };
        c.scale = function (h, j) {
            for (var k = 0; k < h.length; ++k) {
                c[h.charAt(k)] *= j
            }
            return c.normalize()
        };
        c.toString = function () {
            if (c.a >= 1) {
                return "rgb(" + [c.r, c.g, c.b].join(",") + ")"
            } else {
                return "rgba(" + [c.r, c.g, c.b, c.a].join(",") + ")"
            }
        };
        c.normalize = function () {
            function h(k, j, l) {
                return j < k ? k : (j > l ? l : j)
            }
            c.r = h(0, parseInt(c.r), 255);
            c.g = h(0, parseInt(c.g), 255);
            c.b = h(0, parseInt(c.b), 255);
            c.a = h(0, c.a, 0.7);
            return c
        };
        c.clone = function () {
            return b.color.make(c.r, c.b, c.g, c.a)
        };
        return c.normalize()
    };
    b.color.extract = function (d, e) {
        var c;
        do {
            c = d.css(e).toLowerCase();
            if (c != "" && c != "transparent") {
                break
            }
            d = d.parent()
        } while (!b.nodeName(d.get(0), "body"));
        if (c == "rgba(0, 0, 0, 0)") {
            c = "transparent"
        }
        return b.color.parse(c)
    };
    b.color.parse = function (c) {
        var d, f = b.color.make;
        if (d = /rgb(s*([0-9]{1,3})s*,s*([0-9]{1,3})s*,s*([0-9]{1,3})s*)/.exec(c)) {
            return f(parseInt(d[1], 10), parseInt(d[2], 10), parseInt(d[3], 10))
        }
        if (d = /rgba(s*([0-9]{1,3})s*,s*([0-9]{1,3})s*,s*([0-9]{1,3})s*,s*([0-9]+(?:.[0-9]+)?)s*)/.exec(c)) {
            return f(parseInt(d[1], 10), parseInt(d[2], 10), parseInt(d[3], 10), parseFloat(d[4]))
        }
        if (d = /rgb(s*([0-9]+(?:.[0-9]+)?)%s*,s*([0-9]+(?:.[0-9]+)?)%s*,s*([0-9]+(?:.[0-9]+)?)%s*)/.exec(c)) {
            return f(parseFloat(d[1]) * 2.55, parseFloat(d[2]) * 2.55, parseFloat(d[3]) * 2.55)
        }
        if (d = /rgba(s*([0-9]+(?:.[0-9]+)?)%s*,s*([0-9]+(?:.[0-9]+)?)%s*,s*([0-9]+(?:.[0-9]+)?)%s*,s*([0-9]+(?:.[0-9]+)?)s*)/.exec(c)) {
            return f(parseFloat(d[1]) * 2.55, parseFloat(d[2]) * 2.55, parseFloat(d[3]) * 2.55, parseFloat(d[4]))
        }
        if (d = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(c)) {
            return f(parseInt(d[1], 16), parseInt(d[2], 16), parseInt(d[3], 16))
        }
        if (d = /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(c)) {
            return f(parseInt(d[1] + d[1], 16), parseInt(d[2] + d[2], 16), parseInt(d[3] + d[3], 16))
        }
        var e = b.trim(c).toLowerCase();
        if (e == "transparent") {
            return f(255, 255, 255, 0)
        } else {
            d = a[e] || [0, 0, 0];
            return f(d[0], d[1], d[2])
        }
    };
    var a = {
        aqua: [0, 255, 255],
        azure: [240, 255, 255],
        beige: [245, 245, 220],
        black: [0, 0, 0],
        blue: [0, 0, 255],
        brown: [165, 42, 42],
        cyan: [0, 255, 255],
        darkblue: [0, 0, 139],
        darkcyan: [0, 139, 139],
        darkgrey: [169, 169, 169],
        darkgreen: [0, 100, 0],
        darkkhaki: [189, 183, 107],
        darkmagenta: [139, 0, 139],
        darkolivegreen: [85, 107, 47],
        darkorange: [255, 140, 0],
        darkorchid: [153, 50, 204],
        darkred: [139, 0, 0],
        darksalmon: [233, 150, 122],
        darkviolet: [148, 0, 211],
        fuchsia: [255, 0, 255],
        gold: [255, 215, 0],
        green: [0, 128, 0],
        indigo: [75, 0, 130],
        khaki: [240, 230, 140],
        lightblue: [173, 216, 230],
        lightcyan: [224, 255, 255],
        lightgreen: [144, 238, 144],
        lightgrey: [211, 211, 211],
        lightpink: [255, 182, 193],
        lightyellow: [255, 255, 224],
        lime: [0, 255, 0],
        magenta: [255, 0, 255],
        maroon: [128, 0, 0],
        navy: [0, 0, 128],
        olive: [128, 128, 0],
        orange: [255, 165, 0],
        pink: [255, 192, 203],
        purple: [128, 0, 128],
        violet: [128, 0, 128],
        red: [255, 0, 0],
        silver: [192, 192, 192],
        white: [255, 255, 255],
        yellow: [255, 255, 0]
    }
})(jQuery);
(function (c) {
    function b(av, ai, J, af) {
        var Q = [],
            O = {
                colors: ["#edc240", "#afd8f8", "#cb4b4b", "#4da74d", "#9440ed"],
                legend: {
                    show: true,
                    noColumns: 1,
                    labelFormatter: null,
                    labelBoxBorderColor: "#ccc",
                    container: null,
                    position: "ne",
                    margin: 5,
                    backgroundColor: null,
                    backgroundOpacity: 0.85
                },
                xaxis: {
                    show: null,
                    position: "bottom",
                    mode: null,
                    color: null,
                    tickColor: null,
                    transform: null,
                    inverseTransform: null,
                    min: null,
                    max: null,
                    autoscaleMargin: null,
                    ticks: null,
                    tickFormatter: null,
                    labelWidth: null,
                    labelHeight: null,
                    reserveSpace: null,
                    tickLength: null,
                    alignTicksWithAxis: null,
                    tickDecimals: null,
                    tickSize: null,
                    minTickSize: null,
                    monthNames: null,
                    timeformat: null,
                    twelveHourClock: false
                },
                yaxis: {
                    autoscaleMargin: 0.02,
                    position: "left"
                },
                xaxes: [],
                yaxes: [],
                series: {
                    points: {
                        show: false,
                        radius: 3,
                        lineWidth: 2,
                        fill: true,
                        fillColor: "#ffffff",
                        symbol: "circle"
                    },
                    lines: {
                        lineWidth: 2,
                        fill: false,
                        fillColor: null,
                        steps: false
                    },
                    bars: {
                        show: false,
                        lineWidth: 2,
                        barWidth: 1,
                        fill: true,
                        fillColor: null,
                        align: "left",
                        horizontal: false
                    },
                    shadowSize: 3
                },
                grid: {
                    show: true,
                    aboveData: false,
                    color: "#545454",
                    backgroundColor: null,
                    borderColor: null,
                    tickColor: null,
                    labelMargin: 5,
                    axisMargin: 8,
                    borderWidth: 2,
                    minBorderMargin: null,
                    markings: null,
                    markingsColor: "#f4f4f4",
                    markingsLineWidth: 2,
                    clickable: false,
                    hoverable: false,
                    autoHighlight: true,
                    mouseActiveRadius: 10
                },
                hooks: {}
            }, az = null,
            ad = null,
            y = null,
            H = null,
            A = null,
            p = [],
            aw = [],
            q = {
                left: 0,
                right: 0,
                top: 0,
                bottom: 0
            }, G = 0,
            I = 0,
            h = 0,
            w = 0,
            ak = {
                processOptions: [],
                processRawData: [],
                processDatapoints: [],
                drawSeries: [],
                draw: [],
                bindEvents: [],
                drawOverlay: [],
                shutdown: []
            }, aq = this;
        aq.setData = aj;
        aq.setupGrid = t;
        aq.draw = W;
        aq.getPlaceholder = function () {
            return av
        };
        aq.getCanvas = function () {
            return az
        };
        aq.getPlotOffset = function () {
            return q
        };
        aq.width = function () {
            return h
        };
        aq.height = function () {
            return w
        };
        aq.offset = function () {
            var aB = y.offset();
            aB.left += q.left;
            aB.top += q.top;
            return aB
        };
        aq.getData = function () {
            return Q
        };
        aq.getAxes = function () {
            var aC = {}, aB;
            c.each(p.concat(aw), function (aD, aE) {
                if (aE) {
                    aC[aE.direction + (aE.n != 1 ? aE.n : "") + "axis"] = aE
                }
            });
            return aC
        };
        aq.getXAxes = function () {
            return p
        };
        aq.getYAxes = function () {
            return aw
        };
        aq.c2p = C;
        aq.p2c = ar;
        aq.getOptions = function () {
            return O
        };
        aq.highlight = x;
        aq.unhighlight = T;
        aq.triggerRedrawOverlay = f;
        aq.pointOffset = function (aB) {
            return {
                left: parseInt(p[aA(aB, "x") - 1].p2c(+aB.x) + q.left),
                top: parseInt(aw[aA(aB, "y") - 1].p2c(+aB.y) + q.top)
            }
        };
        aq.shutdown = ag;
        aq.resize = function () {
            B();
            g(az);
            g(ad)
        };
        aq.hooks = ak;
        F(aq);
        Z(J);
        X();
        aj(ai);
        t();
        W();
        ah();
        function an(aD, aB) {
            aB = [aq].concat(aB);
            for (var aC = 0; aC < aD.length; ++aC) {
                aD[aC].apply(this, aB)
            }
        }
        function F() {
            for (var aB = 0; aB < af.length; ++aB) {
                var aC = af[aB];
                aC.init(aq);
                if (aC.options) {
                    c.extend(true, O, aC.options)
                }
            }
        }
        function Z(aC) {
            var aB;
            c.extend(true, O, aC);
            if (O.xaxis.color == null) {
                O.xaxis.color = O.grid.color
            }
            if (O.yaxis.color == null) {
                O.yaxis.color = O.grid.color
            }
            if (O.xaxis.tickColor == null) {
                O.xaxis.tickColor = O.grid.tickColor
            }
            if (O.yaxis.tickColor == null) {
                O.yaxis.tickColor = O.grid.tickColor
            }
            if (O.grid.borderColor == null) {
                O.grid.borderColor = O.grid.color
            }
            if (O.grid.tickColor == null) {
                O.grid.tickColor = c.color.parse(O.grid.color).scale("a", 0.22).toString()
            }
            for (aB = 0; aB < Math.max(1, O.xaxes.length); ++aB) {
                O.xaxes[aB] = c.extend(true, {}, O.xaxis, O.xaxes[aB])
            }
            for (aB = 0; aB < Math.max(1, O.yaxes.length); ++aB) {
                O.yaxes[aB] = c.extend(true, {}, O.yaxis, O.yaxes[aB])
            }
            if (O.xaxis.noTicks && O.xaxis.ticks == null) {
                O.xaxis.ticks = O.xaxis.noTicks
            }
            if (O.yaxis.noTicks && O.yaxis.ticks == null) {
                O.yaxis.ticks = O.yaxis.noTicks
            }
            if (O.x2axis) {
                O.xaxes[1] = c.extend(true, {}, O.xaxis, O.x2axis);
                O.xaxes[1].position = "top"
            }
            if (O.y2axis) {
                O.yaxes[1] = c.extend(true, {}, O.yaxis, O.y2axis);
                O.yaxes[1].position = "right"
            }
            if (O.grid.coloredAreas) {
                O.grid.markings = O.grid.coloredAreas
            }
            if (O.grid.coloredAreasColor) {
                O.grid.markingsColor = O.grid.coloredAreasColor
            }
            if (O.lines) {
                c.extend(true, O.series.lines, O.lines)
            }
            if (O.points) {
                c.extend(true, O.series.points, O.points)
            }
            if (O.bars) {
                c.extend(true, O.series.bars, O.bars)
            }
            if (O.shadowSize != null) {
                O.series.shadowSize = O.shadowSize
            }
            for (aB = 0; aB < O.xaxes.length; ++aB) {
                V(p, aB + 1).options = O.xaxes[aB]
            }
            for (aB = 0; aB < O.yaxes.length; ++aB) {
                V(aw, aB + 1).options = O.yaxes[aB]
            }
            for (var aD in ak) {
                if (O.hooks[aD] && O.hooks[aD].length) {
                    ak[aD] = ak[aD].concat(O.hooks[aD])
                }
            }
            an(ak.processOptions, [O])
        }
        function aj(aB) {
            Q = Y(aB);
            ax();
            z()
        }
        function Y(aE) {
            var aC = [];
            for (var aB = 0; aB < aE.length; ++aB) {
                var aD = c.extend(true, {}, O.series);
                if (aE[aB].data != null) {
                    aD.data = aE[aB].data;
                    delete aE[aB].data;
                    c.extend(true, aD, aE[aB]);
                    aE[aB].data = aD.data
                } else {
                    aD.data = aE[aB]
                }
                aC.push(aD)
            }
            return aC
        }
        function aA(aC, aD) {
            var aB = aC[aD + "axis"];
            if (typeof aB == "object") {
                aB = aB.n
            }
            if (typeof aB != "number") {
                aB = 1
            }
            return aB
        }
        function m() {
            return c.grep(p.concat(aw), function (aB) {
                return aB
            })
        }
        function C(aE) {
            var aC = {}, aB, aD;
            for (aB = 0; aB < p.length; ++aB) {
                aD = p[aB];
                if (aD && aD.used) {
                    aC["x" + aD.n] = aD.c2p(aE.left)
                }
            }
            for (aB = 0; aB < aw.length; ++aB) {
                aD = aw[aB];
                if (aD && aD.used) {
                    aC["y" + aD.n] = aD.c2p(aE.top)
                }
            }
            if (aC.x1 !== undefined) {
                aC.x = aC.x1
            }
            if (aC.y1 !== undefined) {
                aC.y = aC.y1
            }
            return aC
        }
        function ar(aF) {
            var aD = {}, aC, aE, aB;
            for (aC = 0; aC < p.length; ++aC) {
                aE = p[aC];
                if (aE && aE.used) {
                    aB = "x" + aE.n;
                    if (aF[aB] == null && aE.n == 1) {
                        aB = "x"
                    }
                    if (aF[aB] != null) {
                        aD.left = aE.p2c(aF[aB]);
                        break
                    }
                }
            }
            for (aC = 0; aC < aw.length; ++aC) {
                aE = aw[aC];
                if (aE && aE.used) {
                    aB = "y" + aE.n;
                    if (aF[aB] == null && aE.n == 1) {
                        aB = "y"
                    }
                    if (aF[aB] != null) {
                        aD.top = aE.p2c(aF[aB]);
                        break
                    }
                }
            }
            return aD
        }
        function V(aC, aB) {
            if (!aC[aB - 1]) {
                aC[aB - 1] = {
                    n: aB,
                    direction: aC == p ? "x" : "y",
                    options: c.extend(true, {}, aC == p ? O.xaxis : O.yaxis)
                }
            }
            return aC[aB - 1]
        }
        function ax() {
            var aG;
            var aM = Q.length,
                aB = [],
                aE = [];
            for (aG = 0; aG < Q.length; ++aG) {
                var aJ = Q[aG].color;
                if (aJ != null) {
                    --aM;
                    if (typeof aJ == "number") {
                        aE.push(aJ)
                    } else {
                        aB.push(c.color.parse(Q[aG].color))
                    }
                }
            }
            for (aG = 0; aG < aE.length; ++aG) {
                aM = Math.max(aM, aE[aG] + 1)
            }
            var aC = [],
                aF = 0;
            aG = 0;
            while (aC.length < aM) {
                var aI;
                if (O.colors.length == aG) {
                    aI = c.color.make(100, 100, 100)
                } else {
                    aI = c.color.parse(O.colors[aG])
                }
                var aD = aF % 2 == 1 ? -1 : 1;
                aI.scale("rgb", 1 + aD * Math.ceil(aF / 2) * 0.2);
                aC.push(aI);
                ++aG;
                if (aG >= O.colors.length) {
                    aG = 0;
                    ++aF
                }
            }
            var aH = 0,
                aN;
            for (aG = 0; aG < Q.length; ++aG) {
                aN = Q[aG];
                if (aN.color == null) {
                    aN.color = aC[aH].toString();
                    ++aH
                } else {
                    if (typeof aN.color == "number") {
                        aN.color = aC[aN.color].toString()
                    }
                }
                if (aN.lines.show == null) {
                    var aL, aK = true;
                    for (aL in aN) {
                        if (aN[aL] && aN[aL].show) {
                            aK = false;
                            break
                        }
                    }
                    if (aK) {
                        aN.lines.show = true
                    }
                }
                aN.xaxis = V(p, aA(aN, "x"));
                aN.yaxis = V(aw, aA(aN, "y"))
            }
        }
        function z() {
            var aO = Number.POSITIVE_INFINITY,
                aI = Number.NEGATIVE_INFINITY,
                aB = Number.MAX_VALUE,
                aU, aS, aR, aN, aD, aJ, aT, aP, aH, aG, aC, a0, aX, aL;
            function aF(a3, a2, a1) {
                if (a2 < a3.datamin && a2 != -aB) {
                    a3.datamin = a2
                }
                if (a1 > a3.datamax && a1 != aB) {
                    a3.datamax = a1
                }
            }
            c.each(m(), function (a1, a2) {
                a2.datamin = aO;
                a2.datamax = aI;
                a2.used = false
            });
            for (aU = 0; aU < Q.length; ++aU) {
                aJ = Q[aU];
                aJ.datapoints = {
                    points: []
                };
                an(ak.processRawData, [aJ, aJ.data, aJ.datapoints])
            }
            for (aU = 0; aU < Q.length; ++aU) {
                aJ = Q[aU];
                var aZ = aJ.data,
                    aW = aJ.datapoints.format;
                if (!aW) {
                    aW = [];
                    aW.push({
                        x: true,
                        number: true,
                        required: true
                    });
                    aW.push({
                        y: true,
                        number: true,
                        required: true
                    });
                    if (aJ.bars.show || (aJ.lines.show && aJ.lines.fill)) {
                        aW.push({
                            y: true,
                            number: true,
                            required: false,
                            defaultValue: 0
                        });
                        if (aJ.bars.horizontal) {
                            delete aW[aW.length - 1].y;
                            aW[aW.length - 1].x = true
                        }
                    }
                    aJ.datapoints.format = aW
                }
                if (aJ.datapoints.pointsize != null) {
                    continue
                }
                aJ.datapoints.pointsize = aW.length;
                aP = aJ.datapoints.pointsize;
                aT = aJ.datapoints.points;
                insertSteps = aJ.lines.show && aJ.lines.steps;
                aJ.xaxis.used = aJ.yaxis.used = true;
                for (aS = aR = 0; aS < aZ.length; ++aS, aR += aP) {
                    aL = aZ[aS];
                    var aE = aL == null;
                    if (!aE) {
                        for (aN = 0; aN < aP; ++aN) {
                            a0 = aL[aN];
                            aX = aW[aN];
                            if (aX) {
                                if (aX.number && a0 != null) {
                                    a0 = +a0;
                                    if (isNaN(a0)) {
                                        a0 = null
                                    } else {
                                        if (a0 == Infinity) {
                                            a0 = aB
                                        } else {
                                            if (a0 == -Infinity) {
                                                a0 = -aB
                                            }
                                        }
                                    }
                                }
                                if (a0 == null) {
                                    if (aX.required) {
                                        aE = true
                                    }
                                    if (aX.defaultValue != null) {
                                        a0 = aX.defaultValue
                                    }
                                }
                            }
                            aT[aR + aN] = a0
                        }
                    }
                    if (aE) {
                        for (aN = 0; aN < aP; ++aN) {
                            a0 = aT[aR + aN];
                            if (a0 != null) {
                                aX = aW[aN];
                                if (aX.x) {
                                    aF(aJ.xaxis, a0, a0)
                                }
                                if (aX.y) {
                                    aF(aJ.yaxis, a0, a0)
                                }
                            }
                            aT[aR + aN] = null
                        }
                    } else {
                        if (insertSteps && aR > 0 && aT[aR - aP] != null && aT[aR - aP] != aT[aR] && aT[aR - aP + 1] != aT[aR + 1]) {
                            for (aN = 0; aN < aP; ++aN) {
                                aT[aR + aP + aN] = aT[aR + aN]
                            }
                            aT[aR + 1] = aT[aR - aP + 1];
                            aR += aP
                        }
                    }
                }
            }
            for (aU = 0; aU < Q.length; ++aU) {
                aJ = Q[aU];
                an(ak.processDatapoints, [aJ, aJ.datapoints])
            }
            for (aU = 0; aU < Q.length; ++aU) {
                aJ = Q[aU];
                aT = aJ.datapoints.points, aP = aJ.datapoints.pointsize;
                var aK = aO,
                    aQ = aO,
                    aM = aI,
                    aV = aI;
                for (aS = 0; aS < aT.length; aS += aP) {
                    if (aT[aS] == null) {
                        continue
                    }
                    for (aN = 0; aN < aP; ++aN) {
                        a0 = aT[aS + aN];
                        aX = aW[aN];
                        if (!aX || a0 == aB || a0 == -aB) {
                            continue
                        }
                        if (aX.x) {
                            if (a0 < aK) {
                                aK = a0
                            }
                            if (a0 > aM) {
                                aM = a0
                            }
                        }
                        if (aX.y) {
                            if (a0 < aQ) {
                                aQ = a0
                            }
                            if (a0 > aV) {
                                aV = a0
                            }
                        }
                    }
                }
                if (aJ.bars.show) {
                    var aY = aJ.bars.align == "left" ? 0 : -aJ.bars.barWidth / 2;
                    if (aJ.bars.horizontal) {
                        aQ += aY;
                        aV += aY + aJ.bars.barWidth
                    } else {
                        aK += aY;
                        aM += aY + aJ.bars.barWidth
                    }
                }
                aF(aJ.xaxis, aK, aM);
                aF(aJ.yaxis, aQ, aV)
            }
            c.each(m(), function (a1, a2) {
                if (a2.datamin == aO) {
                    a2.datamin = null
                }
                if (a2.datamax == aI) {
                    a2.datamax = null
                }
            })
        }
        function j(aB, aC) {
            var aD = document.createElement("canvas");
            aD.className = aC;
            aD.width = G;
            aD.height = I;
            if (!aB) {
                c(aD).css({
                    position: "absolute",
                    left: 0,
                    top: 0
                })
            }
            c(aD).appendTo(av);
            if (!aD.getContext) {
                aD = window.G_vmlCanvasManager.initElement(aD)
            }
            aD.getContext("2d").save();
            return aD
        }
        function B() {
            G = av.width();
            I = av.height();
            if (G <= 0 || I <= 0) {
                throw "Invalid dimensions for plot, width = " + G + ", height = " + I
            }
        }
        function g(aC) {
            if (aC.width != G) {
                aC.width = G
            }
            if (aC.height != I) {
                aC.height = I
            }
            var aB = aC.getContext("2d");
            aB.restore();
            aB.save()
        }
        function X() {
            var aC, aB = av.children("canvas.base"),
                aD = av.children("canvas.overlay");
            if (aB.length == 0 || aD == 0) {
                av.html("");
                av.css({
                    padding: 0
                });
                if (av.css("position") == "static") {
                    av.css("position", "relative")
                }
                B();
                az = j(true, "base");
                ad = j(false, "overlay");
                aC = false
            } else {
                az = aB.get(0);
                ad = aD.get(0);
                aC = true
            }
            H = az.getContext("2d");
            A = ad.getContext("2d");
            y = c([ad, az]);
            if (aC) {
                av.data("plot").shutdown();
                aq.resize();
                A.clearRect(0, 0, G, I);
                y.unbind();
                av.children().not([az, ad]).remove()
            }
            av.data("plot", aq)
        }
        function ah() {
            if (O.grid.hoverable) {
                y.mousemove(aa);
                y.mouseleave(l)
            }
            if (O.grid.clickable) {
                y.click(R)
            }
            an(ak.bindEvents, [y])
        }
        function ag() {
            if (M) {
                clearTimeout(M)
            }
            y.unbind("mousemove", aa);
            y.unbind("mouseleave", l);
            y.unbind("click", R);
            an(ak.shutdown, [y])
        }
        function r(aG) {
            function aC(aH) {
                return aH
            }
            var aF, aB, aD = aG.options.transform || aC,
                aE = aG.options.inverseTransform;
            if (aG.direction == "x") {
                aF = aG.scale = h / Math.abs(aD(aG.max) - aD(aG.min));
                aB = Math.min(aD(aG.max), aD(aG.min))
            } else {
                aF = aG.scale = w / Math.abs(aD(aG.max) - aD(aG.min));
                aF = -aF;
                aB = Math.max(aD(aG.max), aD(aG.min))
            }
            if (aD == aC) {
                aG.p2c = function (aH) {
                    return (aH - aB) * aF
                }
            } else {
                aG.p2c = function (aH) {
                    return (aD(aH) - aB) * aF
                }
            }
            if (!aE) {
                aG.c2p = function (aH) {
                    return aB + aH / aF
                }
            } else {
                aG.c2p = function (aH) {
                    return aE(aB + aH / aF)
                }
            }
        }
        function L(aD) {
            var aB = aD.options,
                aF, aJ = aD.ticks || [],
                aI = [],
                aE, aK = aB.labelWidth,
                aG = aB.labelHeight,
                aC;
            function aH(aM, aL) {
                return c('<div style="position:absolute;top:-10000px;' + aL + 'font-size:smaller"><div class="' + aD.direction + "Axis " + aD.direction + aD.n + 'Axis">' + aM.join("") + "</div></div>").appendTo(av)
            }
            if (aD.direction == "x") {
                if (aK == null) {
                    aK = Math.floor(G / (aJ.length > 0 ? aJ.length : 1))
                }
                if (aG == null) {
                    aI = [];
                    for (aF = 0; aF < aJ.length; ++aF) {
                        aE = aJ[aF].label;
                        if (aE) {
                            aI.push('<div class="tickLabel" style="float:left;width:' + aK + 'px">' + aE + "</div>")
                        }
                    }
                    if (aI.length > 0) {
                        aI.push('<div style="clear:left"></div>');
                        aC = aH(aI, "width:10000px;");
                        aG = aC.height();
                        aC.remove()
                    }
                }
            } else {
                if (aK == null || aG == null) {
                    for (aF = 0; aF < aJ.length; ++aF) {
                        aE = aJ[aF].label;
                        if (aE) {
                            aI.push('<div class="tickLabel">' + aE + "</div>")
                        }
                    }
                    if (aI.length > 0) {
                        aC = aH(aI, "");
                        if (aK == null) {
                            aK = aC.children().width()
                        }
                        if (aG == null) {
                            aG = aC.find("div.tickLabel").height()
                        }
                        aC.remove()
                    }
                }
            }
            if (aK == null) {
                aK = 0
            }
            if (aG == null) {
                aG = 0
            }
            aD.labelWidth = aK;
            aD.labelHeight = aG
        }
        function au(aD) {
            var aC = aD.labelWidth,
                aL = aD.labelHeight,
                aH = aD.options.position,
                aF = aD.options.tickLength,
                aG = O.grid.axisMargin,
                aJ = O.grid.labelMargin,
                aK = aD.direction == "x" ? p : aw,
                aE;
            var aB = c.grep(aK, function (aN) {
                return aN && aN.options.position == aH && aN.reserveSpace
            });
            if (c.inArray(aD, aB) == aB.length - 1) {
                aG = 0
            }
            if (aF == null) {
                aF = "full"
            }
            var aI = c.grep(aK, function (aN) {
                return aN && aN.reserveSpace
            });
            var aM = c.inArray(aD, aI) == 0;
            if (!aM && aF == "full") {
                aF = 5
            }
            if (!isNaN(+aF)) {
                aJ += +aF
            }
            if (aD.direction == "x") {
                aL += aJ;
                if (aH == "bottom") {
                    q.bottom += aL + aG;
                    aD.box = {
                        top: I - q.bottom,
                        height: aL
                    }
                } else {
                    aD.box = {
                        top: q.top + aG,
                        height: aL
                    };
                    q.top += aL + aG
                }
            } else {
                aC += aJ;
                if (aH == "left") {
                    aD.box = {
                        left: q.left + aG,
                        width: aC
                    };
                    q.left += aC + aG
                } else {
                    q.right += aC + aG;
                    aD.box = {
                        left: G - q.right,
                        width: aC
                    }
                }
            }
            aD.position = aH;
            aD.tickLength = aF;
            aD.box.padding = aJ;
            aD.innermost = aM
        }
        function U(aB) {
            if (aB.direction == "x") {
                aB.box.left = q.left;
                aB.box.width = h
            } else {
                aB.box.top = q.top;
                aB.box.height = w
            }
        }
        function t() {
            var aC, aE = m();
            c.each(aE, function (aF, aG) {
                aG.show = aG.options.show;
                if (aG.show == null) {
                    aG.show = aG.used
                }
                aG.reserveSpace = aG.show || aG.options.reserveSpace;
                n(aG)
            });
            allocatedAxes = c.grep(aE, function (aF) {
                return aF.reserveSpace
            });
            q.left = q.right = q.top = q.bottom = 0;
            if (O.grid.show) {
                c.each(allocatedAxes, function (aF, aG) {
                    S(aG);
                    P(aG);
                    ap(aG, aG.ticks);
                    L(aG)
                });
                for (aC = allocatedAxes.length - 1; aC >= 0; --aC) {
                    au(allocatedAxes[aC])
                }
                var aD = O.grid.minBorderMargin;
                if (aD == null) {
                    aD = 0;
                    for (aC = 0; aC < Q.length; ++aC) {
                        aD = Math.max(aD, Q[aC].points.radius + Q[aC].points.lineWidth / 2)
                    }
                }
                for (var aB in q) {
                    q[aB] += O.grid.borderWidth;
                    q[aB] = Math.max(aD, q[aB])
                }
            }
            h = G - q.left - q.right;
            w = I - q.bottom - q.top;
            c.each(aE, function (aF, aG) {
                r(aG)
            });
            if (O.grid.show) {
                c.each(allocatedAxes, function (aF, aG) {
                    U(aG)
                });
                k()
            }
            o()
        }
        function n(aE) {
            var aF = aE.options,
                aD = +(aF.min != null ? aF.min : aE.datamin),
                aB = +(aF.max != null ? aF.max : aE.datamax),
                aH = aB - aD;
            if (aH == 0) {
                var aC = aB == 0 ? 1 : 0.01;
                if (aF.min == null) {
                    aD -= aC
                }
                if (aF.max == null || aF.min != null) {
                    aB += aC
                }
            } else {
                var aG = aF.autoscaleMargin;
                if (aG != null) {
                    if (aF.min == null) {
                        aD -= aH * aG;
                        if (aD < 0 && aE.datamin != null && aE.datamin >= 0) {
                            aD = 0
                        }
                    }
                    if (aF.max == null) {
                        aB += aH * aG;
                        if (aB > 0 && aE.datamax != null && aE.datamax <= 0) {
                            aB = 0
                        }
                    }
                }
            }
            aE.min = aD;
            aE.max = aB
        }
        function S(aG) {
            var aM = aG.options;
            var aH;
            if (typeof aM.ticks == "number" && aM.ticks > 0) {
                aH = aM.ticks
            } else {
                aH = 0.3 * Math.sqrt(aG.direction == "x" ? G : I)
            }
            var aT = (aG.max - aG.min) / aH,
                aO, aB, aN, aR, aS, aQ, aI;
            if (aM.mode == "time") {
                var aJ = {
                    second: 1000,
                    minute: 60 * 1000,
                    hour: 60 * 60 * 1000,
                    day: 24 * 60 * 60 * 1000,
                    month: 30 * 24 * 60 * 60 * 1000,
                    year: 365.2425 * 24 * 60 * 60 * 1000
                };
                var aK = [
                    [1, "second"],
                    [2, "second"],
                    [5, "second"],
                    [10, "second"],
                    [30, "second"],
                    [1, "minute"],
                    [2, "minute"],
                    [5, "minute"],
                    [10, "minute"],
                    [30, "minute"],
                    [1, "hour"],
                    [2, "hour"],
                    [4, "hour"],
                    [8, "hour"],
                    [12, "hour"],
                    [1, "day"],
                    [2, "day"],
                    [3, "day"],
                    [0.25, "month"],
                    [0.5, "month"],
                    [1, "month"],
                    [2, "month"],
                    [3, "month"],
                    [6, "month"],
                    [1, "year"]
                ];
                var aC = 0;
                if (aM.minTickSize != null) {
                    if (typeof aM.tickSize == "number") {
                        aC = aM.tickSize
                    } else {
                        aC = aM.minTickSize[0] * aJ[aM.minTickSize[1]]
                    }
                }
                for (var aS = 0; aS < aK.length - 1; ++aS) {
                    if (aT < (aK[aS][0] * aJ[aK[aS][1]] + aK[aS + 1][0] * aJ[aK[aS + 1][1]]) / 2 && aK[aS][0] * aJ[aK[aS][1]] >= aC) {
                        break
                    }
                }
                aO = aK[aS][0];
                aN = aK[aS][1];
                if (aN == "year") {
                    aQ = Math.pow(10, Math.floor(Math.log(aT / aJ.year) / Math.LN10));
                    aI = (aT / aJ.year) / aQ;
                    if (aI < 1.5) {
                        aO = 1
                    } else {
                        if (aI < 3) {
                            aO = 2
                        } else {
                            if (aI < 7.5) {
                                aO = 5
                            } else {
                                aO = 10
                            }
                        }
                    }
                    aO *= aQ
                }
                aG.tickSize = aM.tickSize || [aO, aN];
                aB = function (aX) {
                    var a2 = [],
                        a0 = aX.tickSize[0],
                        a3 = aX.tickSize[1],
                        a1 = new Date(aX.min);
                    var aW = a0 * aJ[a3];
                    if (a3 == "second") {
                        a1.setUTCSeconds(a(a1.getUTCSeconds(), a0))
                    }
                    if (a3 == "minute") {
                        a1.setUTCMinutes(a(a1.getUTCMinutes(), a0))
                    }
                    if (a3 == "hour") {
                        a1.setUTCHours(a(a1.getUTCHours(), a0))
                    }
                    if (a3 == "month") {
                        a1.setUTCMonth(a(a1.getUTCMonth(), a0))
                    }
                    if (a3 == "year") {
                        a1.setUTCFullYear(a(a1.getUTCFullYear(), a0))
                    }
                    a1.setUTCMilliseconds(0);
                    if (aW >= aJ.minute) {
                        a1.setUTCSeconds(0)
                    }
                    if (aW >= aJ.hour) {
                        a1.setUTCMinutes(0)
                    }
                    if (aW >= aJ.day) {
                        a1.setUTCHours(0)
                    }
                    if (aW >= aJ.day * 4) {
                        a1.setUTCDate(1)
                    }
                    if (aW >= aJ.year) {
                        a1.setUTCMonth(0)
                    }
                    var a5 = 0,
                        a4 = Number.NaN,
                        aY;
                    do {
                        aY = a4;
                        a4 = a1.getTime();
                        a2.push(a4);
                        if (a3 == "month") {
                            if (a0 < 1) {
                                a1.setUTCDate(1);
                                var aV = a1.getTime();
                                a1.setUTCMonth(a1.getUTCMonth() + 1);
                                var aZ = a1.getTime();
                                a1.setTime(a4 + a5 * aJ.hour + (aZ - aV) * a0);
                                a5 = a1.getUTCHours();
                                a1.setUTCHours(0)
                            } else {
                                a1.setUTCMonth(a1.getUTCMonth() + a0)
                            }
                        } else {
                            if (a3 == "year") {
                                a1.setUTCFullYear(a1.getUTCFullYear() + a0)
                            } else {
                                a1.setTime(a4 + aW)
                            }
                        }
                    } while (a4 < aX.max && a4 != aY);
                    return a2
                };
                aR = function (aV, aY) {
                    var a0 = new Date(aV);
                    if (aM.timeformat != null) {
                        return c.plot.formatDate(a0, aM.timeformat, aM.monthNames)
                    }
                    var aW = aY.tickSize[0] * aJ[aY.tickSize[1]];
                    var aX = aY.max - aY.min;
                    var aZ = (aM.twelveHourClock) ? " %p" : "";
                    if (aW < aJ.minute) {
                        fmt = "%h:%M:%S" + aZ
                    } else {
                        if (aW < aJ.day) {
                            if (aX < 2 * aJ.day) {
                                fmt = "%h:%M" + aZ
                            } else {
                                fmt = "%b %d %h:%M" + aZ
                            }
                        } else {
                            if (aW < aJ.month) {
                                fmt = "%b %d"
                            } else {
                                if (aW < aJ.year) {
                                    if (aX < aJ.year) {
                                        fmt = "%b"
                                    } else {
                                        fmt = "%b %y"
                                    }
                                } else {
                                    fmt = "%y"
                                }
                            }
                        }
                    }
                    return c.plot.formatDate(a0, fmt, aM.monthNames)
                }
            } else {
                var aU = aM.tickDecimals;
                var aP = -Math.floor(Math.log(aT) / Math.LN10);
                if (aU != null && aP > aU) {
                    aP = aU
                }
                aQ = Math.pow(10, -aP);
                aI = aT / aQ;
                if (aI < 1.5) {
                    aO = 1
                } else {
                    if (aI < 3) {
                        aO = 2;
                        if (aI > 2.25 && (aU == null || aP + 1 <= aU)) {
                            aO = 2.5;
                            ++aP
                        }
                    } else {
                        if (aI < 7.5) {
                            aO = 5
                        } else {
                            aO = 10
                        }
                    }
                }
                aO *= aQ;
                if (aM.minTickSize != null && aO < aM.minTickSize) {
                    aO = aM.minTickSize
                }
                aG.tickDecimals = Math.max(0, aU != null ? aU : aP);
                aG.tickSize = aM.tickSize || aO;
                aB = function (aX) {
                    var aZ = [];
                    var a0 = a(aX.min, aX.tickSize),
                        aW = 0,
                        aV = Number.NaN,
                        aY;
                    do {
                        aY = aV;
                        aV = a0 + aW * aX.tickSize;
                        aZ.push(aV);++aW
                    } while (aV < aX.max && aV != aY);
                    return aZ
                };
                aR = function (aV, aW) {
                    return aV.toFixed(aW.tickDecimals)
                }
            }
            if (aM.alignTicksWithAxis != null) {
                var aF = (aG.direction == "x" ? p : aw)[aM.alignTicksWithAxis - 1];
                if (aF && aF.used && aF != aG) {
                    var aL = aB(aG);
                    if (aL.length > 0) {
                        if (aM.min == null) {
                            aG.min = Math.min(aG.min, aL[0])
                        }
                        if (aM.max == null && aL.length > 1) {
                            aG.max = Math.max(aG.max, aL[aL.length - 1])
                        }
                    }
                    aB = function (aX) {
                        var aY = [],
                            aV, aW;
                        for (aW = 0; aW < aF.ticks.length; ++aW) {
                            aV = (aF.ticks[aW].v - aF.min) / (aF.max - aF.min);
                            aV = aX.min + aV * (aX.max - aX.min);
                            aY.push(aV)
                        }
                        return aY
                    };
                    if (aG.mode != "time" && aM.tickDecimals == null) {
                        var aE = Math.max(0, -Math.floor(Math.log(aT) / Math.LN10) + 1),
                            aD = aB(aG);
                        if (!(aD.length > 1 && /..*0$/.test((aD[1] - aD[0]).toFixed(aE)))) {
                            aG.tickDecimals = aE
                        }
                    }
                }
            }
            aG.tickGenerator = aB;
            if (c.isFunction(aM.tickFormatter)) {
                aG.tickFormatter = function (aV, aW) {
                    return "" + aM.tickFormatter(aV, aW)
                }
            } else {
                aG.tickFormatter = aR
            }
        }
        function P(aF) {
            var aH = aF.options.ticks,
                aG = [];
            if (aH == null || (typeof aH == "number" && aH > 0)) {
                aG = aF.tickGenerator(aF)
            } else {
                if (aH) {
                    if (c.isFunction(aH)) {
                        aG = aH({
                            min: aF.min,
                            max: aF.max
                        })
                    } else {
                        aG = aH
                    }
                }
            }
            var aE, aB;
            aF.ticks = [];
            for (aE = 0; aE < aG.length; ++aE) {
                var aC = null;
                var aD = aG[aE];
                if (typeof aD == "object") {
                    aB = +aD[0];
                    if (aD.length > 1) {
                        aC = aD[1]
                    }
                } else {
                    aB = +aD
                }
                if (aC == null) {
                    aC = aF.tickFormatter(aB, aF)
                }
                if (!isNaN(aB)) {
                    aF.ticks.push({
                        v: aB,
                        label: aC
                    })
                }
            }
        }
        function ap(aB, aC) {
            if (aB.options.autoscaleMargin && aC.length > 0) {
                if (aB.options.min == null) {
                    aB.min = Math.min(aB.min, aC[0].v)
                }
                if (aB.options.max == null && aC.length > 1) {
                    aB.max = Math.max(aB.max, aC[aC.length - 1].v)
                }
            }
        }
        function W() {
            H.clearRect(0, 0, G, I);
            var aC = O.grid;
            if (aC.show && aC.backgroundColor) {
                N()
            }
            if (aC.show && !aC.aboveData) {
                ac()
            }
            for (var aB = 0; aB < Q.length; ++aB) {
                an(ak.drawSeries, [H, Q[aB]]);
                d(Q[aB])
            }
            an(ak.draw, [H]);
            if (aC.show && aC.aboveData) {
                ac()
            }
        }
        function D(aB, aI) {
            var aE, aH, aG, aD, aF = m();
            for (i = 0; i < aF.length; ++i) {
                aE = aF[i];
                if (aE.direction == aI) {
                    aD = aI + aE.n + "axis";
                    if (!aB[aD] && aE.n == 1) {
                        aD = aI + "axis"
                    }
                    if (aB[aD]) {
                        aH = aB[aD].from;
                        aG = aB[aD].to;
                        break
                    }
                }
            }
            if (!aB[aD]) {
                aE = aI == "x" ? p[0] : aw[0];
                aH = aB[aI + "1"];
                aG = aB[aI + "2"]
            }
            if (aH != null && aG != null && aH > aG) {
                var aC = aH;
                aH = aG;
                aG = aC
            }
            return {
                from: aH,
                to: aG,
                axis: aE
            }
        }
        function N() {
            H.save();
            H.translate(q.left, q.top);
            H.fillStyle = am(O.grid.backgroundColor, w, 0, "rgba(255, 255, 255, 0)");
            H.fillRect(0, 0, h, w);
            H.restore()
        }
        function ac() {
            var aF;
            H.save();
            H.translate(q.left, q.top);
            var aH = O.grid.markings;
            if (aH) {
                if (c.isFunction(aH)) {
                    var aK = aq.getAxes();
                    aK.xmin = aK.xaxis.min;
                    aK.xmax = aK.xaxis.max;
                    aK.ymin = aK.yaxis.min;
                    aK.ymax = aK.yaxis.max;
                    aH = aH(aK)
                }
                for (aF = 0; aF < aH.length; ++aF) {
                    var aD = aH[aF],
                        aC = D(aD, "x"),
                        aI = D(aD, "y");
                    if (aC.from == null) {
                        aC.from = aC.axis.min
                    }
                    if (aC.to == null) {
                        aC.to = aC.axis.max
                    }
                    if (aI.from == null) {
                        aI.from = aI.axis.min
                    }
                    if (aI.to == null) {
                        aI.to = aI.axis.max
                    }
                    if (aC.to < aC.axis.min || aC.from > aC.axis.max || aI.to < aI.axis.min || aI.from > aI.axis.max) {
                        continue
                    }
                    aC.from = Math.max(aC.from, aC.axis.min);
                    aC.to = Math.min(aC.to, aC.axis.max);
                    aI.from = Math.max(aI.from, aI.axis.min);
                    aI.to = Math.min(aI.to, aI.axis.max);
                    if (aC.from == aC.to && aI.from == aI.to) {
                        continue
                    }
                    aC.from = aC.axis.p2c(aC.from);
                    aC.to = aC.axis.p2c(aC.to);
                    aI.from = aI.axis.p2c(aI.from);
                    aI.to = aI.axis.p2c(aI.to);
                    if (aC.from == aC.to || aI.from == aI.to) {
                        H.beginPath();
                        H.strokeStyle = aD.color || O.grid.markingsColor;
                        H.lineWidth = aD.lineWidth || O.grid.markingsLineWidth;
                        H.moveTo(aC.from, aI.from);
                        H.lineTo(aC.to, aI.to);
                        H.stroke()
                    } else {
                        H.fillStyle = aD.color || O.grid.markingsColor;
                        H.fillRect(aC.from, aI.to, aC.to - aC.from, aI.from - aI.to)
                    }
                }
            }
            var aK = m(),
                aM = O.grid.borderWidth;
            for (var aE = 0; aE < aK.length; ++aE) {
                var aB = aK[aE],
                    aG = aB.box,
                    aQ = aB.tickLength,
                    aN, aL, aP, aJ;
                if (!aB.show || aB.ticks.length == 0) {
                    continue
                }
                H.strokeStyle = aB.options.tickColor || c.color.parse(aB.options.color).scale("a", 0.22).toString();
                H.lineWidth = 1;
                if (aB.direction == "x") {
                    aN = 0;
                    if (aQ == "full") {
                        aL = (aB.position == "top" ? 0 : w)
                    } else {
                        aL = aG.top - q.top + (aB.position == "top" ? aG.height : 0)
                    }
                } else {
                    aL = 0;
                    if (aQ == "full") {
                        aN = (aB.position == "left" ? 0 : h)
                    } else {
                        aN = aG.left - q.left + (aB.position == "left" ? aG.width : 0)
                    }
                }
                if (!aB.innermost) {
                    H.beginPath();
                    aP = aJ = 0;
                    if (aB.direction == "x") {
                        aP = h
                    } else {
                        aJ = w
                    }
                    if (H.lineWidth == 1) {
                        aN = Math.floor(aN) + 0.5;
                        aL = Math.floor(aL) + 0.5
                    }
                    H.moveTo(aN, aL);
                    H.lineTo(aN + aP, aL + aJ);
                    H.stroke()
                }
                H.beginPath();
                for (aF = 0; aF < aB.ticks.length; ++aF) {
                    var aO = aB.ticks[aF].v;
                    aP = aJ = 0;
                    if (aO < aB.min || aO > aB.max || (aQ == "full" && aM > 0 && (aO == aB.min || aO == aB.max))) {
                        continue
                    }
                    if (aB.direction == "x") {
                        aN = aB.p2c(aO);
                        aJ = aQ == "full" ? -w : aQ;
                        if (aB.position == "top") {
                            aJ = -aJ
                        }
                    } else {
                        aL = aB.p2c(aO);
                        aP = aQ == "full" ? -h : aQ;
                        if (aB.position == "left") {
                            aP = -aP
                        }
                    }
                    if (H.lineWidth == 1) {
                        if (aB.direction == "x") {
                            aN = Math.floor(aN) + 0.5
                        } else {
                            aL = Math.floor(aL) + 0.5
                        }
                    }
                    H.moveTo(aN, aL);
                    H.lineTo(aN + aP, aL + aJ)
                }
                H.stroke()
            }
            if (aM) {
                H.lineWidth = aM;
                H.strokeStyle = O.grid.borderColor;
                H.strokeRect(-aM / 2, -aM / 2, h + aM, w + aM)
            }
            H.restore()
        }
        function k() {
            av.find(".tickLabels").remove();
            var aG = ['<div class="tickLabels" style="font-size:smaller">'];
            var aJ = m();
            for (var aD = 0; aD < aJ.length; ++aD) {
                var aC = aJ[aD],
                    aF = aC.box;
                if (!aC.show) {
                    continue
                }
                aG.push('<div class="' + aC.direction + "Axis " + aC.direction + aC.n + 'Axis">');
                for (var aE = 0; aE < aC.ticks.length; ++aE) {
                    var aH = aC.ticks[aE];
                    if (!aH.label || aH.v < aC.min || aH.v > aC.max) {
                        continue
                    }
                    var aK = {}, aI;
                    if (aC.direction == "x") {
                        aI = "center";
                        aK.left = Math.round(q.left + aC.p2c(aH.v) - aC.labelWidth / 2);
                        if (aC.position == "bottom") {
                            aK.top = aF.top + aF.padding
                        } else {
                            aK.bottom = I - (aF.top + aF.height - aF.padding)
                        }
                    } else {
                        aK.top = Math.round(q.top + aC.p2c(aH.v) - aC.labelHeight / 2);
                        if (aC.position == "left") {
                            aK.right = G - (aF.left + aF.width - aF.padding);
                            aI = "right"
                        } else {
                            aK.left = aF.left + aF.padding;
                            aI = "left"
                        }
                    }
                    aK.width = aC.labelWidth;
                    var aB = ["position:absolute", "text-align:" + aI];
                    for (var aL in aK) {
                        aB.push(aL + ":" + aK[aL] + "px")
                    }
                    
                    var check_sp = aH.label.split('.0');
                    
                    if(check_sp[1] == '0')
                        aG.push('<div class="tickLabel" style="' + aB.join(";") + ';color:'+O.xaxis.color+'">' + aH.label.replace('.00', '') + " " + $('#tek_month').val() + "</div>")
                    else
                        aG.push('<div class="tickLabel" style="' + aB.join(";") + ';color:'+O.xaxis.color+'">' + aH.label.replace('.0', '') + "</div>")
                    
                }
                aG.push("</div>")
            }
            aG.push("</div>");
            av.append(aG.join(""))
        }
        function d(aB) {
            if (aB.lines.show) {
                at(aB)
            }
            if (aB.bars.show) {
                e(aB)
            }
            if (aB.points.show) {
                ao(aB)
            }
        }
        function at(aE) {
            function aD(aP, aQ, aI, aU, aT) {
                var aV = aP.points,
                    aJ = aP.pointsize,
                    aN = null,
                    aM = null;
                H.beginPath();
                for (var aO = aJ; aO < aV.length; aO += aJ) {
                    var aL = aV[aO - aJ],
                        aS = aV[aO - aJ + 1],
                        aK = aV[aO],
                        aR = aV[aO + 1];
                    if (aL == null || aK == null) {
                        continue
                    }
                    if (aS <= aR && aS < aT.min) {
                        if (aR < aT.min) {
                            continue
                        }
                        aL = (aT.min - aS) / (aR - aS) * (aK - aL) + aL;
                        aS = aT.min
                    } else {
                        if (aR <= aS && aR < aT.min) {
                            if (aS < aT.min) {
                                continue
                            }
                            aK = (aT.min - aS) / (aR - aS) * (aK - aL) + aL;
                            aR = aT.min
                        }
                    }
                    if (aS >= aR && aS > aT.max) {
                        if (aR > aT.max) {
                            continue
                        }
                        aL = (aT.max - aS) / (aR - aS) * (aK - aL) + aL;
                        aS = aT.max
                    } else {
                        if (aR >= aS && aR > aT.max) {
                            if (aS > aT.max) {
                                continue
                            }
                            aK = (aT.max - aS) / (aR - aS) * (aK - aL) + aL;
                            aR = aT.max
                        }
                    }
                    if (aL <= aK && aL < aU.min) {
                        if (aK < aU.min) {
                            continue
                        }
                        aS = (aU.min - aL) / (aK - aL) * (aR - aS) + aS;
                        aL = aU.min
                    } else {
                        if (aK <= aL && aK < aU.min) {
                            if (aL < aU.min) {
                                continue
                            }
                            aR = (aU.min - aL) / (aK - aL) * (aR - aS) + aS;
                            aK = aU.min
                        }
                    }
                    if (aL >= aK && aL > aU.max) {
                        if (aK > aU.max) {
                            continue
                        }
                        aS = (aU.max - aL) / (aK - aL) * (aR - aS) + aS;
                        aL = aU.max
                    } else {
                        if (aK >= aL && aK > aU.max) {
                            if (aL > aU.max) {
                                continue
                            }
                            aR = (aU.max - aL) / (aK - aL) * (aR - aS) + aS;
                            aK = aU.max
                        }
                    }
                    if (aL != aN || aS != aM) {
                        H.moveTo(aU.p2c(aL) + aQ, aT.p2c(aS) + aI)
                    }
                    aN = aK;
                    aM = aR;
                    H.lineTo(aU.p2c(aK) + aQ, aT.p2c(aR) + aI)
                }
                H.stroke()
            }
            function aF(aI, aQ, aP) {
                var aW = aI.points,
                    aV = aI.pointsize,
                    aN = Math.min(Math.max(0, aP.min), aP.max),
                    aX = 0,
                    aU, aT = false,
                    aM = 1,
                    aL = 0,
                    aR = 0;
                while (true) {
                    if (aV > 0 && aX > aW.length + aV) {
                        break
                    }
                    aX += aV;
                    var aZ = aW[aX - aV],
                        aK = aW[aX - aV + aM],
                        aY = aW[aX],
                        aJ = aW[aX + aM];
                    if (aT) {
                        if (aV > 0 && aZ != null && aY == null) {
                            aR = aX;
                            aV = -aV;
                            aM = 2;
                            continue
                        }
                        if (aV < 0 && aX == aL + aV) {
                            H.fill();
                            aT = false;
                            aV = -aV;
                            aM = 1;
                            aX = aL = aR + aV;
                            continue
                        }
                    }
                    if (aZ == null || aY == null) {
                        continue
                    }
                    if (aZ <= aY && aZ < aQ.min) {
                        if (aY < aQ.min) {
                            continue
                        }
                        aK = (aQ.min - aZ) / (aY - aZ) * (aJ - aK) + aK;
                        aZ = aQ.min
                    } else {
                        if (aY <= aZ && aY < aQ.min) {
                            if (aZ < aQ.min) {
                                continue
                            }
                            aJ = (aQ.min - aZ) / (aY - aZ) * (aJ - aK) + aK;
                            aY = aQ.min
                        }
                    }
                    if (aZ >= aY && aZ > aQ.max) {
                        if (aY > aQ.max) {
                            continue
                        }
                        aK = (aQ.max - aZ) / (aY - aZ) * (aJ - aK) + aK;
                        aZ = aQ.max
                    } else {
                        if (aY >= aZ && aY > aQ.max) {
                            if (aZ > aQ.max) {
                                continue
                            }
                            aJ = (aQ.max - aZ) / (aY - aZ) * (aJ - aK) + aK;
                            aY = aQ.max
                        }
                    }
                    if (!aT) {
                        H.beginPath();
                        H.moveTo(aQ.p2c(aZ), aP.p2c(aN));
                        aT = true
                    }
                    if (aK >= aP.max && aJ >= aP.max) {
                        H.lineTo(aQ.p2c(aZ), aP.p2c(aP.max));
                        H.lineTo(aQ.p2c(aY), aP.p2c(aP.max));
                        continue
                    } else {
                        if (aK <= aP.min && aJ <= aP.min) {
                            H.lineTo(aQ.p2c(aZ), aP.p2c(aP.min));
                            H.lineTo(aQ.p2c(aY), aP.p2c(aP.min));
                            continue
                        }
                    }
                    var aO = aZ,
                        aS = aY;
                    if (aK <= aJ && aK < aP.min && aJ >= aP.min) {
                        aZ = (aP.min - aK) / (aJ - aK) * (aY - aZ) + aZ;
                        aK = aP.min
                    } else {
                        if (aJ <= aK && aJ < aP.min && aK >= aP.min) {
                            aY = (aP.min - aK) / (aJ - aK) * (aY - aZ) + aZ;
                            aJ = aP.min
                        }
                    }
                    if (aK >= aJ && aK > aP.max && aJ <= aP.max) {
                        aZ = (aP.max - aK) / (aJ - aK) * (aY - aZ) + aZ;
                        aK = aP.max
                    } else {
                        if (aJ >= aK && aJ > aP.max && aK <= aP.max) {
                            aY = (aP.max - aK) / (aJ - aK) * (aY - aZ) + aZ;
                            aJ = aP.max
                        }
                    }
                    if (aZ != aO) {
                        H.lineTo(aQ.p2c(aO), aP.p2c(aK))
                    }
                    H.lineTo(aQ.p2c(aZ), aP.p2c(aK));
                    H.lineTo(aQ.p2c(aY), aP.p2c(aJ));
                    if (aY != aS) {
                        H.lineTo(aQ.p2c(aY), aP.p2c(aJ));
                        H.lineTo(aQ.p2c(aS), aP.p2c(aJ))
                    }
                }
            }
            H.save();
            H.translate(q.left, q.top);
            H.lineJoin = "round";
            var aG = aE.lines.lineWidth,
                aB = aE.shadowSize;
            if (aG > 0 && aB > 0) {
                H.lineWidth = aB;
                H.strokeStyle = "rgba(0,0,0,0.1)";
                var aH = Math.PI / 18;
                aD(aE.datapoints, Math.sin(aH) * (aG / 2 + aB / 2), Math.cos(aH) * (aG / 2 + aB / 2), aE.xaxis, aE.yaxis);
                H.lineWidth = aB / 2;
                aD(aE.datapoints, Math.sin(aH) * (aG / 2 + aB / 4), Math.cos(aH) * (aG / 2 + aB / 4), aE.xaxis, aE.yaxis)
            }
            H.lineWidth = aG;
            H.strokeStyle = aE.color;
            var aC = ae(aE.lines, aE.color, 0, w);
            if (aC) {
                H.fillStyle = aC;
                aF(aE.datapoints, aE.xaxis, aE.yaxis)
            }
            if (aG > 0) {
                aD(aE.datapoints, 0, 0, aE.xaxis, aE.yaxis)
            }
            H.restore()
        }
        function ao(aE) {
            function aH(aN, aM, aU, aK, aS, aT, aQ, aJ) {
                var aR = aN.points,
                    aI = aN.pointsize;
                for (var aL = 0; aL < aR.length; aL += aI) {
                    var aP = aR[aL],
                        aO = aR[aL + 1];
                    if (aP == null || aP < aT.min || aP > aT.max || aO < aQ.min || aO > aQ.max) {
                        continue
                    }
                    H.beginPath();
                    aP = aT.p2c(aP);
                    aO = aQ.p2c(aO) + aK;
                    if (aJ == "circle") {
                        H.arc(aP, aO, aM, 0, aS ? Math.PI : Math.PI * 2, false)
                    } else {
                        aJ(H, aP, aO, aM, aS)
                    }
                    H.closePath();
                    if (aU) {
                        H.fillStyle = aU;
                        H.fill()
                    }
                    H.stroke()
                }
            }
            H.save();
            H.translate(q.left, q.top);
            var aG = aE.points.lineWidth,
                aC = aE.shadowSize,
                aB = aE.points.radius,
                aF = aE.points.symbol;
            if (aG > 0 && aC > 0) {
                var aD = aC / 2;
                H.lineWidth = aD;
                H.strokeStyle = "rgba(0,0,0,0.1)";
                aH(aE.datapoints, aB, null, aD + aD / 2, true, aE.xaxis, aE.yaxis, aF);
                H.strokeStyle = "rgba(0,0,0,0.2)";
                aH(aE.datapoints, aB, null, aD / 2, true, aE.xaxis, aE.yaxis, aF)
            }
            H.lineWidth = aG;
            H.strokeStyle = aE.color;
            aH(aE.datapoints, aB, ae(aE.points, aE.color), 0, false, aE.xaxis, aE.yaxis, aF);
            H.restore()
        }
        function E(aN, aM, aV, aI, aQ, aF, aD, aL, aK, aU, aR, aC) {
            var aE, aT, aJ, aP, aG, aB, aO, aH, aS;
            if (aR) {
                aH = aB = aO = true;
                aG = false;
                aE = aV;
                aT = aN;
                aP = aM + aI;
                aJ = aM + aQ;
                if (aT < aE) {
                    aS = aT;
                    aT = aE;
                    aE = aS;
                    aG = true;
                    aB = false
                }
            } else {
                aG = aB = aO = true;
                aH = false;
                aE = aN + aI;
                aT = aN + aQ;
                aJ = aV;
                aP = aM;
                if (aP < aJ) {
                    aS = aP;
                    aP = aJ;
                    aJ = aS;
                    aH = true;
                    aO = false
                }
            }
            if (aT < aL.min || aE > aL.max || aP < aK.min || aJ > aK.max) {
                return
            }
            if (aE < aL.min) {
                aE = aL.min;
                aG = false
            }
            if (aT > aL.max) {
                aT = aL.max;
                aB = false
            }
            if (aJ < aK.min) {
                aJ = aK.min;
                aH = false
            }
            if (aP > aK.max) {
                aP = aK.max;
                aO = false
            }
            aE = aL.p2c(aE);
            aJ = aK.p2c(aJ);
            aT = aL.p2c(aT);
            aP = aK.p2c(aP);
            if (aD) {
                aU.beginPath();
                aU.moveTo(aE, aJ);
                aU.lineTo(aE, aP);
                aU.lineTo(aT, aP);
                aU.lineTo(aT, aJ);
                aU.fillStyle = aD(aJ, aP);
                aU.fill()
            }
            if (aC > 0 && (aG || aB || aO || aH)) {
                aU.beginPath();
                aU.moveTo(aE, aJ + aF);
                if (aG) {
                    aU.lineTo(aE, aP + aF)
                } else {
                    aU.moveTo(aE, aP + aF)
                }
                if (aO) {
                    aU.lineTo(aT, aP + aF)
                } else {
                    aU.moveTo(aT, aP + aF)
                }
                if (aB) {
                    aU.lineTo(aT, aJ + aF)
                } else {
                    aU.moveTo(aT, aJ + aF)
                }
                if (aH) {
                    aU.lineTo(aE, aJ + aF)
                } else {
                    aU.moveTo(aE, aJ + aF)
                }
                aU.stroke()
            }
        }
        function e(aD) {
            function aC(aJ, aI, aL, aG, aK, aN, aM) {
                var aO = aJ.points,
                    aF = aJ.pointsize;
                for (var aH = 0; aH < aO.length; aH += aF) {
                    if (aO[aH] == null) {
                        continue
                    }
                    E(aO[aH], aO[aH + 1], aO[aH + 2], aI, aL, aG, aK, aN, aM, H, aD.bars.horizontal, aD.bars.lineWidth)
                }
            }
            H.save();
            H.translate(q.left, q.top);
            H.lineWidth = aD.bars.lineWidth;
            H.strokeStyle = aD.color;
            var aB = aD.bars.align == "left" ? 0 : -aD.bars.barWidth / 2;
            var aE = aD.bars.fill ? function (aF, aG) {
                    return ae(aD.bars, aD.color, aF, aG)
                } : null;
            aC(aD.datapoints, aB, aB + aD.bars.barWidth, 0, aE, aD.xaxis, aD.yaxis);
            H.restore()
        }
        function ae(aD, aB, aC, aF) {
            var aE = aD.fill;
            if (!aE) {
                return null
            }
            if (aD.fillColor) {
                return am(aD.fillColor, aC, aF, aB)
            }
            var aG = c.color.parse(aB);
            aG.a = typeof aE == "number" ? aE : 0.4;
            aG.normalize();
            return aG.toString()
        }
        function o() {
            av.find(".legend").remove();
            if (!O.legend.show) {
                return
            }
            var aH = [],
                aF = false,
                aN = O.legend.labelFormatter,
                aM, aJ;
            for (var aE = 0; aE < Q.length; ++aE) {
                aM = Q[aE];
                aJ = aM.label;
                if (!aJ) {
                    continue
                }
                if (aE % O.legend.noColumns == 0) {
                    if (aF) {
                        aH.push("</tr>")
                    }
                    aH.push("<tr>");
                    aF = true
                }
                if (aN) {
                    aJ = aN(aJ, aM)
                }
                aH.push('<td class="legendColorBox"><div style="border:1px solid ' + O.legend.labelBoxBorderColor + ';padding:1px"><div style="width:4px;height:0;border:5px solid ' + aM.color + ';overflow:hidden"></div></div></td><td class="legendLabel">' + aJ + "</td>")
            }
            if (aF) {
                aH.push("</tr>")
            }
            if (aH.length == 0) {
                return
            }
            var aL = '<table style="font-size:smaller;color:' + O.grid.color + '">' + aH.join("") + "</table>";
            if (O.legend.container != null) {
                c(O.legend.container).html(aL)
            } else {
                var aI = "",
                    aC = O.legend.position,
                    aD = O.legend.margin;
                if (aD[0] == null) {
                    aD = [aD, aD]
                }
                if (aC.charAt(0) == "n") {
                    aI += "top:" + (aD[1] + q.top) + "px;"
                } else {
                    if (aC.charAt(0) == "s") {
                        aI += "bottom:" + (aD[1] + q.bottom) + "px;"
                    }
                }
                if (aC.charAt(1) == "e") {
                    aI += "right:" + (aD[0] + q.right) + "px;"
                } else {
                    if (aC.charAt(1) == "w") {
                        aI += "left:" + (aD[0] + q.left) + "px;"
                    }
                }
                var aK = c('<div class="legend">' + aL.replace('style="', 'style="position:absolute;' + aI + ";") + "</div>").appendTo(av);
                if (O.legend.backgroundOpacity != 0) {
                    var aG = O.legend.backgroundColor;
                    if (aG == null) {
                        aG = O.grid.backgroundColor;
                        if (aG && typeof aG == "string") {
                            aG = c.color.parse(aG)
                        } else {
                            aG = c.color.extract(aK, "background-color")
                        }
                        aG.a = 1;
                        aG = aG.toString()
                    }
                    var aB = aK.children();
                    c('<div style="position:absolute;width:' + aB.width() + "px;height:" + aB.height() + "px;" + aI + "background-color:" + aG + ';"> </div>').prependTo(aK).css("opacity", O.legend.backgroundOpacity)
                }
            }
        }
        var ab = [],
            M = null;
        function K(aI, aG, aD) {
            var aO = O.grid.mouseActiveRadius,
                a0 = aO * aO + 1,
                aY = null,
                aR = false,
                aW, aU;
            for (aW = Q.length - 1; aW >= 0; --aW) {
                if (!aD(Q[aW])) {
                    continue
                }
                var aP = Q[aW],
                    aH = aP.xaxis,
                    aF = aP.yaxis,
                    aV = aP.datapoints.points,
                    aT = aP.datapoints.pointsize,
                    aQ = aH.c2p(aI),
                    aN = aF.c2p(aG),
                    aC = aO / aH.scale,
                    aB = aO / aF.scale;
                if (aH.options.inverseTransform) {
                    aC = Number.MAX_VALUE
                }
                if (aF.options.inverseTransform) {
                    aB = Number.MAX_VALUE
                }
                if (aP.lines.show || aP.points.show) {
                    for (aU = 0; aU < aV.length; aU += aT) {
                        var aK = aV[aU],
                            aJ = aV[aU + 1];
                        if (aK == null) {
                            continue
                        }
                        if (aK - aQ > aC || aK - aQ < -aC || aJ - aN > aB || aJ - aN < -aB) {
                            continue
                        }
                        var aM = Math.abs(aH.p2c(aK) - aI),
                            aL = Math.abs(aF.p2c(aJ) - aG),
                            aS = aM * aM + aL * aL;
                        if (aS < a0) {
                            a0 = aS;
                            aY = [aW, aU / aT]
                        }
                    }
                }
                if (aP.bars.show && !aY) {
                    var aE = aP.bars.align == "left" ? 0 : -aP.bars.barWidth / 2,
                        aX = aE + aP.bars.barWidth;
                    for (aU = 0; aU < aV.length; aU += aT) {
                        var aK = aV[aU],
                            aJ = aV[aU + 1],
                            aZ = aV[aU + 2];
                        if (aK == null) {
                            continue
                        }
                        if (Q[aW].bars.horizontal ? (aQ <= Math.max(aZ, aK) && aQ >= Math.min(aZ, aK) && aN >= aJ + aE && aN <= aJ + aX) : (aQ >= aK + aE && aQ <= aK + aX && aN >= Math.min(aZ, aJ) && aN <= Math.max(aZ, aJ))) {
                            aY = [aW, aU / aT]
                        }
                    }
                }
            }
            if (aY) {
                aW = aY[0];
                aU = aY[1];
                aT = Q[aW].datapoints.pointsize;
                return {
                    datapoint: Q[aW].datapoints.points.slice(aU * aT, (aU + 1) * aT),
                    dataIndex: aU,
                    series: Q[aW],
                    seriesIndex: aW
                }
            }
            return null
        }
        function aa(aB) {
            if (O.grid.hoverable) {
                u("plothover", aB, function (aC) {
                    return aC.hoverable != false
                })
            }
        }
        function l(aB) {
            if (O.grid.hoverable) {
                u("plothover", aB, function (aC) {
                    return false
                })
            }
        }
        function R(aB) {
            u("plotclick", aB, function (aC) {
                return aC.clickable != false
            })
        }
        function u(aC, aB, aD) {
            var aE = y.offset(),
                aH = aB.pageX - aE.left - q.left,
                aF = aB.pageY - aE.top - q.top,
                aJ = C({
                    left: aH,
                    top: aF
                });
            aJ.pageX = aB.pageX;
            aJ.pageY = aB.pageY;
            var aK = K(aH, aF, aD);
            if (aK) {
                aK.pageX = parseInt(aK.series.xaxis.p2c(aK.datapoint[0]) + aE.left + q.left);
                aK.pageY = parseInt(aK.series.yaxis.p2c(aK.datapoint[1]) + aE.top + q.top)
            }
            if (O.grid.autoHighlight) {
                for (var aG = 0; aG < ab.length; ++aG) {
                    var aI = ab[aG];
                    if (aI.auto == aC && !(aK && aI.series == aK.series && aI.point[0] == aK.datapoint[0] && aI.point[1] == aK.datapoint[1])) {
                        T(aI.series, aI.point)
                    }
                }
                if (aK) {
                    x(aK.series, aK.datapoint, aC)
                }
            }
            av.trigger(aC, [aJ, aK])
        }
        function f() {
            if (!M) {
                M = setTimeout(s, 30)
            }
        }
        function s() {
            M = null;
            A.save();
            A.clearRect(0, 0, G, I);
            A.translate(q.left, q.top);
            var aC, aB;
            for (aC = 0; aC < ab.length; ++aC) {
                aB = ab[aC];
                if (aB.series.bars.show) {
                    v(aB.series, aB.point)
                } else {
                    ay(aB.series, aB.point)
                }
            }
            A.restore();
            an(ak.drawOverlay, [A])
        }
        function x(aD, aB, aF) {
            if (typeof aD == "number") {
                aD = Q[aD]
            }
            if (typeof aB == "number") {
                var aE = aD.datapoints.pointsize;
                aB = aD.datapoints.points.slice(aE * aB, aE * (aB + 1))
            }
            var aC = al(aD, aB);
            if (aC == -1) {
                ab.push({
                    series: aD,
                    point: aB,
                    auto: aF
                });
                f()
            } else {
                if (!aF) {
                    ab[aC].auto = false
                }
            }
        }
        function T(aD, aB) {
            if (aD == null && aB == null) {
                ab = [];
                f()
            }
            if (typeof aD == "number") {
                aD = Q[aD]
            }
            if (typeof aB == "number") {
                aB = aD.data[aB]
            }
            var aC = al(aD, aB);
            if (aC != -1) {
                ab.splice(aC, 1);
                f()
            }
        }
        function al(aD, aE) {
            for (var aB = 0; aB < ab.length; ++aB) {
                var aC = ab[aB];
                if (aC.series == aD && aC.point[0] == aE[0] && aC.point[1] == aE[1]) {
                    return aB
                }
            }
            return -1
        }
        function ay(aE, aD) {
            var aC = aD[0],
                aI = aD[1],
                aH = aE.xaxis,
                aG = aE.yaxis;
            if (aC < aH.min || aC > aH.max || aI < aG.min || aI > aG.max) {
                return
            }
            var aF = aE.points.radius + aE.points.lineWidth / 2;
            A.lineWidth = aF;
            A.strokeStyle = c.color.parse(aE.color).scale("a", 0.5).toString();
            var aB = 1.5 * aF,
                aC = aH.p2c(aC),
                aI = aG.p2c(aI);
            A.beginPath();
            if (aE.points.symbol == "circle") {
                A.arc(aC, aI, aB, 0, 2 * Math.PI, false)
            } else {
                aE.points.symbol(A, aC, aI, aB, false)
            }
            A.closePath();
            A.stroke()
        }
        function v(aE, aB) {
            A.lineWidth = aE.bars.lineWidth;
            A.strokeStyle = c.color.parse(aE.color).scale("a", 0.5).toString();
            var aD = c.color.parse(aE.color).scale("a", 0.5).toString();
            var aC = aE.bars.align == "left" ? 0 : -aE.bars.barWidth / 2;
            E(aB[0], aB[1], aB[2] || 0, aC, aC + aE.bars.barWidth, 0, function () {
                return aD
            }, aE.xaxis, aE.yaxis, A, aE.bars.horizontal, aE.bars.lineWidth)
        }
        function am(aJ, aB, aH, aC) {
            if (typeof aJ == "string") {
                return aJ
            } else {
                var aI = H.createLinearGradient(0, aH, 0, aB);
                for (var aE = 0, aD = aJ.colors.length; aE < aD; ++aE) {
                    var aF = aJ.colors[aE];
                    if (typeof aF != "string") {
                        var aG = c.color.parse(aC);
                        if (aF.brightness != null) {
                            aG = aG.scale("rgb", aF.brightness)
                        }
                        if (aF.opacity != null) {
                            aG.a *= aF.opacity
                        }
                        aF = aG.toString()
                    }
                    aI.addColorStop(aE / (aD - 1), aF)
                }
                return aI
            }
        }
    }
    c.plot = function (g, e, d) {
        var f = new b(c(g), e, d, c.plot.plugins);
        return f
    };
    c.plot.version = "0.7";
    c.plot.plugins = [];
    c.plot.formatDate = function (l, f, h) {
        var o = function (d) {
            d = "" + d;
            return d.length == 1 ? "0" + d : d
        };
        var e = [];
        var p = false,
            j = false;
        var n = l.getUTCHours();
        var k = n < 12;
        if (h == null) {
            h = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
        }
        if (f.search(/%p|%P/) != -1) {
            if (n > 12) {
                n = n - 12
            } else {
                if (n == 0) {
                    n = 12
                }
            }
        }
        for (var g = 0; g < f.length; ++g) {
            var m = f.charAt(g);
            if (p) {
                switch (m) {
                    case "h":
                        m = "" + n;
                        break;
                    case "H":
                        m = o(n);
                        break;
                    case "M":
                        m = o(l.getUTCMinutes());
                        break;
                    case "S":
                        m = o(l.getUTCSeconds());
                        break;
                    case "d":
                        m = "" + l.getUTCDate();
                        break;
                    case "m":
                        m = "" + (l.getUTCMonth() + 1);
                        break;
                    case "y":
                        m = "" + l.getUTCFullYear();
                        break;
                    case "b":
                        m = "" + h[l.getUTCMonth()];
                        break;
                    case "p":
                        m = (k) ? ("am") : ("pm");
                        break;
                    case "P":
                        m = (k) ? ("AM") : ("PM");
                        break;
                    case "0":
                        m = "";
                        j = true;
                        break
                }
                if (m && j) {
                    m = o(m);
                    j = false
                }
                e.push(m);
                if (!j) {
                    p = false
                }
            } else {
                if (m == "%") {
                    p = true
                } else {
                    e.push(m)
                }
            }
        }
        return e.join("")
    };
    function a(e, d) {
        return d * Math.floor(e / d)
    }
})(jQuery);
?>