/** * jqPlot * Pure JavaScript plotting plugin using jQuery * * Version: 1.0.0b2_r1012 * * Copyright (c) 2009-2011 Chris Leonello * jqPlot is currently available for use in all personal or commercial projects * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can * choose the license that best suits your project and use it accordingly. * * Although not required, the author would appreciate an email letting him * know of any substantial use of jqPlot. You can reach the author at: * chris at jqplot dot com or see http://www.jqplot.com/info.php . * * If you are feeling kind and generous, consider supporting the project by * making a donation at: http://www.jqplot.com/donate.php . * * sprintf functions contained in jqplot.sprintf.js by Ash Searle: * * version 2007.04.27 * author Ash Searle * http://hexmen.com/blog/2007/03/printf-sprintf/ * http://hexmen.com/js/sprintf.js * The author (Ash Searle) has placed this code in the public domain: * "This code is unrestricted: you are free to use it however you like." * * included jsDate library by Chris Leonello: * * Copyright (c) 2010-2011 Chris Leonello * * jsDate is currently available for use in all personal or commercial projects * under both the MIT and GPL version 2.0 licenses. This means that you can * choose the license that best suits your project and use it accordingly. * * jsDate borrows many concepts and ideas from the Date Instance * Methods by Ken Snyder along with some parts of Ken's actual code. * * Ken's origianl Date Instance Methods and copyright notice: * * Ken Snyder (ken d snyder at gmail dot com) * 2008-09-10 * version 2.0.2 (http://kendsnyder.com/sandbox/date/) * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/) * * jqplotToImage function based on Larry Siden's export-jqplot-to-png.js. * Larry has generously given permission to adapt his code for inclusion * into jqPlot. * * Larry's original code can be found here: * * https://github.com/lsiden/export-jqplot-to-png * * */ (function(H) { var r; H.fn.emptyForce = function() { for (var ab = 0, ac; (ac = H(this)[ab]) != null; ab++) { if (ac.nodeType === 1) { jQuery.cleanData(ac.getElementsByTagName("*")) } if (H.jqplot_use_excanvas) { ac.outerHTML = "" } else { while (ac.firstChild) { ac.removeChild(ac.firstChild) } } ac = null } return H(this) }; H.fn.removeChildForce = function(ab) { while (ab.firstChild) { this.removeChildForce(ab.firstChild); ab.removeChild(ab.firstChild) } }; H.jqplot = function(ah, ae, ac) { var ad, ab; if (ac == null) { if (jQuery.isArray(ae)) { ad = ae; ab = null } else { if (typeof(ae) === "object") { ad = null; ab = ae } } } else { ad = ae; ab = ac } var ag = new N(); H("#" + ah).removeClass("jqplot-error"); if (H.jqplot.config.catchErrors) { try { ag.init(ah, ad, ab); ag.draw(); ag.themeEngine.init.call(ag); return ag } catch (af) { var ai = H.jqplot.config.errorMessage || af.message; H("#" + ah).append('
' + ai + "
"); H("#" + ah).addClass("jqplot-error"); document.getElementById(ah).style.background = H.jqplot.config.errorBackground; document.getElementById(ah).style.border = H.jqplot.config.errorBorder; document.getElementById(ah).style.fontFamily = H.jqplot.config.errorFontFamily; document.getElementById(ah).style.fontSize = H.jqplot.config.errorFontSize; document.getElementById(ah).style.fontStyle = H.jqplot.config.errorFontStyle; document.getElementById(ah).style.fontWeight = H.jqplot.config.errorFontWeight } } else { ag.init(ah, ad, ab); ag.draw(); ag.themeEngine.init.call(ag); return ag } }; H.jqplot.version = "1.0.0b2_r1012"; H.jqplot.CanvasManager = function() { if (typeof H.jqplot.CanvasManager.canvases == "undefined") { H.jqplot.CanvasManager.canvases = []; H.jqplot.CanvasManager.free = [] } var ab = []; this.getCanvas = function() { var ae; var ad = true; if (!H.jqplot.use_excanvas) { for (var af = 0, ac = H.jqplot.CanvasManager.canvases.length; af < ac; af++) { if (H.jqplot.CanvasManager.free[af] === true) { ad = false; ae = H.jqplot.CanvasManager.canvases[af]; H.jqplot.CanvasManager.free[af] = false; ab.push(af); break } } } if (ad) { ae = document.createElement("canvas"); ab.push(H.jqplot.CanvasManager.canvases.length); H.jqplot.CanvasManager.canvases.push(ae); H.jqplot.CanvasManager.free.push(false) } return ae }; this.initCanvas = function(ac) { if (H.jqplot.use_excanvas) { return window.G_vmlCanvasManager.initElement(ac) } return ac }; this.freeAllCanvases = function() { for (var ad = 0, ac = ab.length; ad < ac; ad++) { this.freeCanvas(ab[ad]) } ab = [] }; this.freeCanvas = function(ac) { if (H.jqplot.use_excanvas && window.G_vmlCanvasManager.uninitElement !== r) { window.G_vmlCanvasManager.uninitElement(H.jqplot.CanvasManager.canvases[ac]); H.jqplot.CanvasManager.canvases[ac] = null } else { var ad = H.jqplot.CanvasManager.canvases[ac]; ad.getContext("2d").clearRect(0, 0, ad.width, ad.height); H(ad).unbind().removeAttr("class").removeAttr("style"); H(ad).css({ left: "", top: "", position: "" }); ad.width = 0; ad.height = 0; H.jqplot.CanvasManager.free[ac] = true } } }; H.jqplot.log = function() { if (window.console) { window.console.log.apply(window.console, arguments) } }; H.jqplot.config = { addDomReference: false, enablePlugins: false, defaultHeight: 300, defaultWidth: 400, UTCAdjust: false, timezoneOffset: new Date(new Date().getTimezoneOffset() * 60000), errorMessage: "", errorBackground: "", errorBorder: "", errorFontFamily: "", errorFontSize: "", errorFontStyle: "", errorFontWeight: "", catchErrors: false, defaultTickFormatString: "%.1f", defaultColors: ["#e33a3d", "#EAA228", "#c5b47f", "#579575", "#839557", "#958c12", "#953579", "#4b5de4", "#d8b83f", "#ff5800", "#0085cc", "#c747a3", "#cddf54", "#FBD178", "#26B4E3", "#bd70c7"], defaultNegativeColors: ["#e33a3d", "#C08840", "#9F9274", "#546D61", "#646C4A", "#6F6621", "#6E3F5F", "#4F64B0", "#A89050", "#C45923", "#187399", "#945381", "#959E5C", "#C7AF7B", "#478396", "#907294"], dashLength: 4, gapLength: 4, dotGapLength: 2.5, srcLocation: "jqplot/src/", pluginLocation: "jqplot/src/plugins/" }; H.jqplot.arrayMax = function(ab) { return Math.max.apply(Math, ab) }; H.jqplot.arrayMin = function(ab) { return Math.min.apply(Math, ab) }; H.jqplot.enablePlugins = H.jqplot.config.enablePlugins; H.jqplot.support_canvas = function() { if (typeof H.jqplot.support_canvas.result == "undefined") { H.jqplot.support_canvas.result = !!document.createElement("canvas").getContext } return H.jqplot.support_canvas.result }; H.jqplot.support_canvas_text = function() { if (typeof H.jqplot.support_canvas_text.result == "undefined") { if (window.G_vmlCanvasManager !== r && window.G_vmlCanvasManager._version > 887) { H.jqplot.support_canvas_text.result = true } else { H.jqplot.support_canvas_text.result = !!(document.createElement("canvas").getContext && typeof document.createElement("canvas").getContext("2d").fillText == "function") } } return H.jqplot.support_canvas_text.result }; H.jqplot.use_excanvas = (H.browser.msie && !H.jqplot.support_canvas()) ? true : false; H.jqplot.preInitHooks = []; H.jqplot.postInitHooks = []; H.jqplot.preParseOptionsHooks = []; H.jqplot.postParseOptionsHooks = []; H.jqplot.preDrawHooks = []; H.jqplot.postDrawHooks = []; H.jqplot.preDrawSeriesHooks = []; H.jqplot.postDrawSeriesHooks = []; H.jqplot.preDrawLegendHooks = []; H.jqplot.addLegendRowHooks = []; H.jqplot.preSeriesInitHooks = []; H.jqplot.postSeriesInitHooks = []; H.jqplot.preParseSeriesOptionsHooks = []; H.jqplot.postParseSeriesOptionsHooks = []; H.jqplot.eventListenerHooks = []; H.jqplot.preDrawSeriesShadowHooks = []; H.jqplot.postDrawSeriesShadowHooks = []; H.jqplot.ElemContainer = function() { this._elem; this._plotWidth; this._plotHeight; this._plotDimensions = { height: null, width: null } }; H.jqplot.ElemContainer.prototype.createElement = function(ae, ag, ac, ad, ah) { this._offsets = ag; var ab = ac || "jqplot"; var af = document.createElement(ae); this._elem = H(af); this._elem.addClass(ab); this._elem.css(ad); this._elem.attr(ah); af = null; return this._elem }; H.jqplot.ElemContainer.prototype.getWidth = function() { if (this._elem) { return this._elem.outerWidth(true) } else { return null } }; H.jqplot.ElemContainer.prototype.getHeight = function() { if (this._elem) { return this._elem.outerHeight(true) } else { return null } }; H.jqplot.ElemContainer.prototype.getPosition = function() { if (this._elem) { return this._elem.position() } else { return { top: null, left: null, bottom: null, right: null } } }; H.jqplot.ElemContainer.prototype.getTop = function() { return this.getPosition().top }; H.jqplot.ElemContainer.prototype.getLeft = function() { return this.getPosition().left }; H.jqplot.ElemContainer.prototype.getBottom = function() { return this._elem.css("bottom") }; H.jqplot.ElemContainer.prototype.getRight = function() { return this._elem.css("right") }; function s(ab) { H.jqplot.ElemContainer.call(this); this.name = ab; this._series = []; this.show = false; this.tickRenderer = H.jqplot.AxisTickRenderer; this.tickOptions = {}; this.labelRenderer = H.jqplot.AxisLabelRenderer; this.labelOptions = {}; this.label = null; this.showLabel = true; this.min = null; this.max = null; this.autoscale = false; this.pad = 1.2; this.padMax = null; this.padMin = null; this.ticks = []; this.numberTicks; this.tickInterval; this.renderer = H.jqplot.LinearAxisRenderer; this.rendererOptions = {}; this.showTicks = true; this.showTickMarks = true; this.showMinorTicks = true; this.drawMajorGridlines = true; this.drawMinorGridlines = false; this.drawMajorTickMarks = true; this.drawMinorTickMarks = true; this.useSeriesColor = false; this.borderWidth = null; this.borderColor = null; this._dataBounds = { min: null, max: null }; this._intervalStats = []; this._offsets = { min: null, max: null }; this._ticks = []; this._label = null; this.syncTicks = null; this.tickSpacing = 75; this._min = null; this._max = null; this._tickInterval = null; this._numberTicks = null; this.__ticks = null; this._options = {} } s.prototype = new H.jqplot.ElemContainer(); s.prototype.constructor = s; s.prototype.init = function() { this.renderer = new this.renderer(); this.tickOptions.axis = this.name; if (this.tickOptions.showMark == null) { this.tickOptions.showMark = this.showTicks } if (this.tickOptions.showMark == null) { this.tickOptions.showMark = this.showTickMarks } if (this.tickOptions.showLabel == null) { this.tickOptions.showLabel = this.showTicks } if (this.label == null || this.label == "") { this.showLabel = false } else { this.labelOptions.label = this.label } if (this.showLabel == false) { this.labelOptions.show = false } if (this.pad == 0) { this.pad = 1 } if (this.padMax == 0) { this.padMax = 1 } if (this.padMin == 0) { this.padMin = 1 } if (this.padMax == null) { this.padMax = (this.pad - 1) / 2 + 1 } if (this.padMin == null) { this.padMin = (this.pad - 1) / 2 + 1 } this.pad = this.padMax + this.padMin - 1; if (this.min != null || this.max != null) { this.autoscale = false } if (this.syncTicks == null && this.name.indexOf("y") > -1) { this.syncTicks = true } else { if (this.syncTicks == null) { this.syncTicks = false } } this.renderer.init.call(this, this.rendererOptions) }; s.prototype.draw = function(ab, ac) { if (this.__ticks) { this.__ticks = null } return this.renderer.draw.call(this, ab, ac) }; s.prototype.set = function() { this.renderer.set.call(this) }; s.prototype.pack = function(ac, ab) { if (this.show) { this.renderer.pack.call(this, ac, ab) } if (this._min == null) { this._min = this.min; this._max = this.max; this._tickInterval = this.tickInterval; this._numberTicks = this.numberTicks; this.__ticks = this._ticks } }; s.prototype.reset = function() { this.renderer.reset.call(this) }; s.prototype.resetScale = function(ab) { H.extend(true, this, { min: null, max: null, numberTicks: null, tickInterval: null, _ticks: [], ticks: [] }, ab); this.resetDataBounds() }; s.prototype.resetDataBounds = function() { var ai = this._dataBounds; ai.min = null; ai.max = null; var ac, aj, ag; var ad = (this.show) ? true : false; for (var af = 0; af < this._series.length; af++) { aj = this._series[af]; if (aj.show) { ag = aj._plotData; if (aj._type === "line" && aj.renderer.bands.show && this.name.charAt(0) !== "x") { ag = [ [0, aj.renderer.bands._min], [1, aj.renderer.bands._max] ] } var ab = 1, ah = 1; if (aj._type != null && aj._type == "ohlc") { ab = 3; ah = 2 } for (var ae = 0, ac = ag.length; ae < ac; ae++) { if (this.name == "xaxis" || this.name == "x2axis") { if ((ag[ae][0] != null && ag[ae][0] < ai.min) || ai.min == null) { ai.min = ag[ae][0] } if ((ag[ae][0] != null && ag[ae][0] > ai.max) || ai.max == null) { ai.max = ag[ae][0] } } else { if ((ag[ae][ab] != null && ag[ae][ab] < ai.min) || ai.min == null) { ai.min = ag[ae][ab] } if ((ag[ae][ah] != null && ag[ae][ah] > ai.max) || ai.max == null) { ai.max = ag[ae][ah] } } } if (ad && aj.renderer.constructor !== H.jqplot.BarRenderer) { ad = false } else { if (ad && this._options.hasOwnProperty("forceTickAt0") && this._options.forceTickAt0 == false) { ad = false } else { if (ad && aj.renderer.constructor === H.jqplot.BarRenderer) { if (aj.barDirection == "vertical" && this.name != "xaxis" && this.name != "x2axis") { if (this._options.pad != null || this._options.padMin != null) { ad = false } } else { if (aj.barDirection == "horizontal" && (this.name == "xaxis" || this.name == "x2axis")) { if (this._options.pad != null || this._options.padMin != null) { ad = false } } } } } } } } if (ad && this.renderer.constructor === H.jqplot.LinearAxisRenderer && ai.min >= 0) { this.padMin = 1; this.forceTickAt0 = true } }; function n(ab) { H.jqplot.ElemContainer.call(this); this.show = false; this.location = "ne"; this.labels = []; this.showLabels = true; this.showSwatches = true; this.placement = "insideGrid"; this.xoffset = 0; this.yoffset = 0; this.border; this.background; this.textColor; this.fontFamily; this.fontSize; this.rowSpacing = "0.5em"; this.renderer = H.jqplot.TableLegendRenderer; this.rendererOptions = {}; this.preDraw = false; this.marginTop = null; this.marginRight = null; this.marginBottom = null; this.marginLeft = null; this.escapeHtml = false; this._series = []; H.extend(true, this, ab) } n.prototype = new H.jqplot.ElemContainer(); n.prototype.constructor = n; n.prototype.setOptions = function(ab) { H.extend(true, this, ab); if (this.placement == "inside") { this.placement = "insideGrid" } if (this.xoffset > 0) { if (this.placement == "insideGrid") { switch (this.location) { case "nw": case "w": case "sw": if (this.marginLeft == null) { this.marginLeft = this.xoffset + "px" } this.marginRight = "0px"; break; case "ne": case "e": case "se": default: if (this.marginRight == null) { this.marginRight = this.xoffset + "px" } this.marginLeft = "0px"; break } } else { if (this.placement == "outside") { switch (this.location) { case "nw": case "w": case "sw": if (this.marginRight == null) { this.marginRight = this.xoffset + "px" } this.marginLeft = "0px"; break; case "ne": case "e": case "se": default: if (this.marginLeft == null) { this.marginLeft = this.xoffset + "px" } this.marginRight = "0px"; break } } } this.xoffset = 0 } if (this.yoffset > 0) { if (this.placement == "outside") { switch (this.location) { case "sw": case "s": case "se": if (this.marginTop == null) { this.marginTop = this.yoffset + "px" } this.marginBottom = "0px"; break; case "ne": case "n": case "nw": default: if (this.marginBottom == null) { this.marginBottom = this.yoffset + "px" } this.marginTop = "0px"; break } } else { if (this.placement == "insideGrid") { switch (this.location) { case "sw": case "s": case "se": if (this.marginBottom == null) { this.marginBottom = this.yoffset + "px" } this.marginTop = "0px"; break; case "ne": case "n": case "nw": default: if (this.marginTop == null) { this.marginTop = this.yoffset + "px" } this.marginBottom = "0px"; break } } } this.yoffset = 0 } }; n.prototype.init = function() { this.renderer = new this.renderer(); this.renderer.init.call(this, this.rendererOptions) }; n.prototype.draw = function(ac) { for (var ab = 0; ab < H.jqplot.preDrawLegendHooks.length; ab++) { H.jqplot.preDrawLegendHooks[ab].call(this, ac) } return this.renderer.draw.call(this, ac) }; n.prototype.pack = function(ab) { this.renderer.pack.call(this, ab) }; function u(ab) { H.jqplot.ElemContainer.call(this); this.text = ab; this.show = true; this.fontFamily; this.fontSize; this.textAlign; this.textColor; this.renderer = H.jqplot.DivTitleRenderer; this.rendererOptions = {}; this.escapeHtml = false } u.prototype = new H.jqplot.ElemContainer(); u.prototype.constructor = u; u.prototype.init = function() { this.renderer = new this.renderer(); this.renderer.init.call(this, this.rendererOptions) }; u.prototype.draw = function(ab) { return this.renderer.draw.call(this, ab) }; u.prototype.pack = function() { this.renderer.pack.call(this) }; function O() { H.jqplot.ElemContainer.call(this); this.show = true; this.xaxis = "xaxis"; this._xaxis; this.yaxis = "yaxis"; this._yaxis; this.gridBorderWidth = 2; this.renderer = H.jqplot.LineRenderer; this.rendererOptions = {}; this.data = []; this.gridData = []; this.label = ""; this.showLabel = true; this.color; this.negativeColor; this.lineWidth = 2.5; this.lineJoin = "round"; this.lineCap = "round"; this.linePattern = "solid"; this.shadow = true; this.shadowAngle = 45; this.shadowOffset = 1.25; this.shadowDepth = 3; this.shadowAlpha = "0.1"; this.breakOnNull = false; this.markerRenderer = H.jqplot.MarkerRenderer; this.markerOptions = {}; this.showLine = true; this.showMarker = true; this.index; this.fill = false; this.fillColor; this.fillAlpha; this.fillAndStroke = false; this.disableStack = false; this._stack = false; this.neighborThreshold = 4; this.fillToZero = false; this.fillToValue = 0; this.fillAxis = "y"; this.useNegativeColors = true; this._stackData = []; this._plotData = []; this._plotValues = { x: [], y: [] }; this._intervals = { x: {}, y: {} }; this._prevPlotData = []; this._prevGridData = []; this._stackAxis = "y"; this._primaryAxis = "_xaxis"; this.canvas = new H.jqplot.GenericCanvas(); this.shadowCanvas = new H.jqplot.GenericCanvas(); this.plugins = {}; this._sumy = 0; this._sumx = 0; this._type = "" } O.prototype = new H.jqplot.ElemContainer(); O.prototype.constructor = O; O.prototype.init = function(ad, ah, af) { this.index = ad; this.gridBorderWidth = ah; var ag = this.data; var ac = [], ae; for (ae = 0; ae < ag.length; ae++) { if (!this.breakOnNull) { if (ag[ae] == null || ag[ae][0] == null || ag[ae][1] == null) { continue } else { ac.push(ag[ae]) } } else { ac.push(ag[ae]) } } this.data = ac; if (!this.color && this.show) { this.color = af.colorGenerator.get(this.index) } if (!this.negativeColor && this.show) { this.negativeColor = af.negativeColorGenerator.get(this.index) } if (!this.fillColor) { this.fillColor = this.color } if (this.fillAlpha) { var ab = H.jqplot.normalize2rgb(this.fillColor); var ab = H.jqplot.getColorComponents(ab); this.fillColor = "rgba(" + ab[0] + "," + ab[1] + "," + ab[2] + "," + this.fillAlpha + ")" } this.renderer = new this.renderer(); this.renderer.init.call(this, this.rendererOptions, af); this.markerRenderer = new this.markerRenderer(); if (!this.markerOptions.color) { this.markerOptions.color = this.color } if (this.markerOptions.show == null) { this.markerOptions.show = this.showMarker } this.showMarker = this.markerOptions.show; this.markerRenderer.init(this.markerOptions) }; O.prototype.draw = function(ah, ae, ag) { var ac = (ae == r) ? {} : ae; ah = (ah == r) ? this.canvas._ctx : ah; var ab, af, ad; for (ab = 0; ab < H.jqplot.preDrawSeriesHooks.length; ab++) { H.jqplot.preDrawSeriesHooks[ab].call(this, ah, ac) } if (this.show) { this.renderer.setGridData.call(this, ag); if (!ac.preventJqPlotSeriesDrawTrigger) { H(ah.canvas).trigger("jqplotSeriesDraw", [this.data, this.gridData]) } af = []; if (ac.data) { af = ac.data } else { if (!this._stack) { af = this.data } else { af = this._plotData } } ad = ac.gridData || this.renderer.makeGridData.call(this, af, ag); if (this._type === "line" && this.renderer.smooth && this.renderer._smoothedData.length) { ad = this.renderer._smoothedData } this.renderer.draw.call(this, ah, ad, ac, ag) } for (ab = 0; ab < H.jqplot.postDrawSeriesHooks.length; ab++) { H.jqplot.postDrawSeriesHooks[ab].call(this, ah, ac, ag) } ah = ae = ag = ab = af = ad = null }; O.prototype.drawShadow = function(ah, ae, ag) { var ac = (ae == r) ? {} : ae; ah = (ah == r) ? this.shadowCanvas._ctx : ah; var ab, af, ad; for (ab = 0; ab < H.jqplot.preDrawSeriesShadowHooks.length; ab++) { H.jqplot.preDrawSeriesShadowHooks[ab].call(this, ah, ac) } if (this.shadow) { this.renderer.setGridData.call(this, ag); af = []; if (ac.data) { af = ac.data } else { if (!this._stack) { af = this.data } else { af = this._plotData } } ad = ac.gridData || this.renderer.makeGridData.call(this, af, ag); this.renderer.drawShadow.call(this, ah, ad, ac) } for (ab = 0; ab < H.jqplot.postDrawSeriesShadowHooks.length; ab++) { H.jqplot.postDrawSeriesShadowHooks[ab].call(this, ah, ac) } ah = ae = ag = ab = af = ad = null }; O.prototype.toggleDisplay = function(ac) { var ab, ad; if (ac.data.series) { ab = ac.data.series } else { ab = this } if (ac.data.speed) { ad = ac.data.speed } if (ad) { if (ab.canvas._elem.is(":hidden")) { ab.canvas._elem.removeClass("jqplot-series-hidden"); if (ab.shadowCanvas._elem) { ab.shadowCanvas._elem.fadeIn(ad) } ab.canvas._elem.fadeIn(ad); ab.canvas._elem.nextAll(".jqplot-point-label.jqplot-series-" + ab.index).fadeIn(ad) } else { ab.canvas._elem.addClass("jqplot-series-hidden"); if (ab.shadowCanvas._elem) { ab.shadowCanvas._elem.fadeOut(ad) } ab.canvas._elem.fadeOut(ad); ab.canvas._elem.nextAll(".jqplot-point-label.jqplot-series-" + ab.index).fadeOut(ad) } } else { if (ab.canvas._elem.is(":hidden")) { ab.canvas._elem.removeClass("jqplot-series-hidden"); if (ab.shadowCanvas._elem) { ab.shadowCanvas._elem.show() } ab.canvas._elem.show(); ab.canvas._elem.nextAll(".jqplot-point-label.jqplot-series-" + ab.index).show() } else { ab.canvas._elem.addClass("jqplot-series-hidden"); if (ab.shadowCanvas._elem) { ab.shadowCanvas._elem.hide() } ab.canvas._elem.hide(); ab.canvas._elem.nextAll(".jqplot-point-label.jqplot-series-" + ab.index).hide() } } }; function I() { H.jqplot.ElemContainer.call(this); this.drawGridlines = true; this.gridLineColor = "#cccccc"; this.gridLineWidth = 1; this.background = "#fffdf6"; this.borderColor = "#999999"; this.borderWidth = 2; this.drawBorder = true; this.shadow = true; this.shadowAngle = 45; this.shadowOffset = 1.5; this.shadowWidth = 3; this.shadowDepth = 3; this.shadowColor = null; this.shadowAlpha = "0.07"; this._left; this._top; this._right; this._bottom; this._width; this._height; this._axes = []; this.renderer = H.jqplot.CanvasGridRenderer; this.rendererOptions = {}; this._offsets = { top: null, bottom: null, left: null, right: null } } I.prototype = new H.jqplot.ElemContainer(); I.prototype.constructor = I; I.prototype.init = function() { this.renderer = new this.renderer(); this.renderer.init.call(this, this.rendererOptions) }; I.prototype.createElement = function(ab, ac) { this._offsets = ab; return this.renderer.createElement.call(this, ac) }; I.prototype.draw = function() { this.renderer.draw.call(this) }; H.jqplot.GenericCanvas = function() { H.jqplot.ElemContainer.call(this); this._ctx }; H.jqplot.GenericCanvas.prototype = new H.jqplot.ElemContainer(); H.jqplot.GenericCanvas.prototype.constructor = H.jqplot.GenericCanvas; H.jqplot.GenericCanvas.prototype.createElement = function(af, ad, ac, ag) { this._offsets = af; var ab = "jqplot"; if (ad != r) { ab = ad } var ae; ae = ag.canvasManager.getCanvas(); if (ac != null) { this._plotDimensions = ac } ae.width = this._plotDimensions.width - this._offsets.left - this._offsets.right; ae.height = this._plotDimensions.height - this._offsets.top - this._offsets.bottom; this._elem = H(ae); this._elem.css({ position: "absolute", left: this._offsets.left, top: this._offsets.top }); this._elem.addClass(ab); ae = ag.canvasManager.initCanvas(ae); ae = null; return this._elem }; H.jqplot.GenericCanvas.prototype.setContext = function() { this._ctx = this._elem.get(0).getContext("2d"); return this._ctx }; H.jqplot.GenericCanvas.prototype.resetCanvas = function() { if (this._elem) { if (H.jqplot.use_excanvas && window.G_vmlCanvasManager.uninitElement !== r) { window.G_vmlCanvasManager.uninitElement(this._elem.get(0)) } this._elem.emptyForce() } this._ctx = null }; H.jqplot.HooksManager = function() { this.hooks = []; this.args = [] }; H.jqplot.HooksManager.prototype.addOnce = function(ae, ac) { ac = ac || []; var af = false; for (var ad = 0, ab = this.hooks.length; ad < ab; ad++) { if (this.hooks[ad][0] == ae) { af = true } } if (!af) { this.hooks.push(ae); this.args.push(ac) } }; H.jqplot.HooksManager.prototype.add = function(ac, ab) { ab = ab || []; this.hooks.push(ac); this.args.push(ab) }; H.jqplot.EventListenerManager = function() { this.hooks = [] }; H.jqplot.EventListenerManager.prototype.addOnce = function(af, ae) { var ag = false, ad, ac; for (var ac = 0, ab = this.hooks.length; ac < ab; ac++) { ad = this.hooks[ac]; if (ad[0] == af && ad[1] == ae) { ag = true } } if (!ag) { this.hooks.push([af, ae]) } }; H.jqplot.EventListenerManager.prototype.add = function(ac, ab) { this.hooks.push([ac, ab]) }; var Q = ["yMidAxis", "xaxis", "yaxis", "x2axis", "y2axis", "y3axis", "y4axis", "y5axis", "y6axis", "y7axis", "y8axis", "y9axis"]; function N() { this.animate = false; this.animateReplot = false; this.axes = { xaxis: new s("xaxis"), yaxis: new s("yaxis"), x2axis: new s("x2axis"), y2axis: new s("y2axis"), y3axis: new s("y3axis"), y4axis: new s("y4axis"), y5axis: new s("y5axis"), y6axis: new s("y6axis"), y7axis: new s("y7axis"), y8axis: new s("y8axis"), y9axis: new s("y9axis"), yMidAxis: new s("yMidAxis") }; this.baseCanvas = new H.jqplot.GenericCanvas(); this.captureRightClick = false; this.data = []; this.dataRenderer; this.dataRendererOptions; this.defaults = { axesDefaults: {}, axes: { xaxis: {}, yaxis: {}, x2axis: {}, y2axis: {}, y3axis: {}, y4axis: {}, y5axis: {}, y6axis: {}, y7axis: {}, y8axis: {}, y9axis: {}, yMidAxis: {} }, seriesDefaults: {}, series: [] }; this.defaultAxisStart = 1; this.drawIfHidden = false; this.eventCanvas = new H.jqplot.GenericCanvas(); this.fillBetween = { series1: null, series2: null, color: null, baseSeries: 0, fill: true }; this.fontFamily; this.fontSize; this.grid = new I(); this.legend = new n(); this.negativeSeriesColors = H.jqplot.config.defaultNegativeColors; this.noDataIndicator = { show: false, indicator: "Loading Data...", axes: { xaxis: { min: 0, max: 10, tickInterval: 5, show: true }, yaxis: { min: 0, max: 12, tickInterval: 3, show: true } } }; this.options = {}; this.previousSeriesStack = []; this.plugins = {}; this.series = []; this.seriesStack = []; this.seriesColors = H.jqplot.config.defaultColors; this.sortData = true; this.stackSeries = false; this.syncXTicks = true; this.syncYTicks = true; this.target = null; this.targetId = null; this.textColor; this.title = new u(); this._drawCount = 0; this._sumy = 0; this._sumx = 0; this._stackData = []; this._plotData = []; this._width = null; this._height = null; this._plotDimensions = { height: null, width: null }; this._gridPadding = { top: null, right: null, bottom: null, left: null }; this._defaultGridPadding = { top: 10, right: 10, bottom: 23, left: 10 }; this._addDomReference = H.jqplot.config.addDomReference; this.preInitHooks = new H.jqplot.HooksManager(); this.postInitHooks = new H.jqplot.HooksManager(); this.preParseOptionsHooks = new H.jqplot.HooksManager(); this.postParseOptionsHooks = new H.jqplot.HooksManager(); this.preDrawHooks = new H.jqplot.HooksManager(); this.postDrawHooks = new H.jqplot.HooksManager(); this.preDrawSeriesHooks = new H.jqplot.HooksManager(); this.postDrawSeriesHooks = new H.jqplot.HooksManager(); this.preDrawLegendHooks = new H.jqplot.HooksManager(); this.addLegendRowHooks = new H.jqplot.HooksManager(); this.preSeriesInitHooks = new H.jqplot.HooksManager(); this.postSeriesInitHooks = new H.jqplot.HooksManager(); this.preParseSeriesOptionsHooks = new H.jqplot.HooksManager(); this.postParseSeriesOptionsHooks = new H.jqplot.HooksManager(); this.eventListenerHooks = new H.jqplot.EventListenerManager(); this.preDrawSeriesShadowHooks = new H.jqplot.HooksManager(); this.postDrawSeriesShadowHooks = new H.jqplot.HooksManager(); this.colorGenerator = new H.jqplot.ColorGenerator(); this.negativeColorGenerator = new H.jqplot.ColorGenerator(); this.canvasManager = new H.jqplot.CanvasManager(); this.themeEngine = new H.jqplot.ThemeEngine(); var ad = 0; this.init = function(am, aj, ao) { ao = ao || {}; for (var ak = 0; ak < H.jqplot.preInitHooks.length; ak++) { H.jqplot.preInitHooks[ak].call(this, am, aj, ao) } for (var ak = 0; ak < this.preInitHooks.hooks.length; ak++) { this.preInitHooks.hooks[ak].call(this, am, aj, ao) } this.targetId = "#" + am; this.target = H("#" + am); if (this._addDomReference) { this.target.data("jqplot_plot", this) } this.target.removeClass("jqplot-error"); if (!this.target.get(0)) { throw "No plot target specified" } if (this.target.css("position") == "static") { this.target.css("position", "relative") } if (!this.target.hasClass("jqplot-target")) { this.target.addClass("jqplot-target") } if (!this.target.height()) { var al; if (ao && ao.height) { al = parseInt(ao.height, 10) } else { if (this.target.attr("data-height")) { al = parseInt(this.target.attr("data-height"), 10) } else { al = parseInt(H.jqplot.config.defaultHeight, 10) } } this._height = al; this.target.css("height", al + "px") } else { this._height = al = this.target.height() } if (!this.target.width()) { var an; if (ao && ao.width) { an = parseInt(ao.width, 10) } else { if (this.target.attr("data-width")) { an = parseInt(this.target.attr("data-width"), 10) } else { an = parseInt(H.jqplot.config.defaultWidth, 10) } } this._width = an; this.target.css("width", an + "px") } else { this._width = an = this.target.width() } this._plotDimensions.height = this._height; this._plotDimensions.width = this._width; this.grid._plotDimensions = this._plotDimensions; this.title._plotDimensions = this._plotDimensions; this.baseCanvas._plotDimensions = this._plotDimensions; this.eventCanvas._plotDimensions = this._plotDimensions; this.legend._plotDimensions = this._plotDimensions; if (this._height <= 0 || this._width <= 0 || !this._height || !this._width) { throw "Canvas dimension not set" } if (ao.dataRenderer && jQuery.isFunction(ao.dataRenderer)) { if (ao.dataRendererOptions) { this.dataRendererOptions = ao.dataRendererOptions } this.dataRenderer = ao.dataRenderer; aj = this.dataRenderer(aj, this, this.dataRendererOptions) } if (ao.noDataIndicator && jQuery.isPlainObject(ao.noDataIndicator)) { H.extend(true, this.noDataIndicator, ao.noDataIndicator) } if (aj == null || jQuery.isArray(aj) == false || aj.length == 0 || jQuery.isArray(aj[0]) == false || aj[0].length == 0) { if (this.noDataIndicator.show == false) { throw { name: "DataError", message: "No data to plot." } } else { for (var af in this.noDataIndicator.axes) { for (var ah in this.noDataIndicator.axes[af]) { this.axes[af][ah] = this.noDataIndicator.axes[af][ah] } } this.postDrawHooks.add(function() { var av = this.eventCanvas.getHeight(); var ar = this.eventCanvas.getWidth(); var aq = H('
'); this.target.append(aq); aq.height(av); aq.width(ar); aq.css("top", this.eventCanvas._offsets.top); aq.css("left", this.eventCanvas._offsets.left); var au = H('
'); aq.append(au); au.html(this.noDataIndicator.indicator); var at = au.height(); var ap = au.width(); au.height(at); au.width(ap); au.css("top", (av - at) / 2 + "px") }) } } this.data = aj; this.parseOptions(ao); if (this.textColor) { this.target.css("color", this.textColor) } if (this.fontFamily) { this.target.css("font-family", this.fontFamily) } if (this.fontSize) { this.target.css("font-size", this.fontSize) } this.title.init(); this.legend.init(); this._sumy = 0; this._sumx = 0; for (var ak = 0; ak < this.series.length; ak++) { this.seriesStack.push(ak); this.previousSeriesStack.push(ak); this.series[ak].shadowCanvas._plotDimensions = this._plotDimensions; this.series[ak].canvas._plotDimensions = this._plotDimensions; for (var ai = 0; ai < H.jqplot.preSeriesInitHooks.length; ai++) { H.jqplot.preSeriesInitHooks[ai].call(this.series[ak], am, aj, this.options.seriesDefaults, this.options.series[ak], this) } for (var ai = 0; ai < this.preSeriesInitHooks.hooks.length; ai++) { this.preSeriesInitHooks.hooks[ai].call(this.series[ak], am, aj, this.options.seriesDefaults, this.options.series[ak], this) } this.populatePlotData(this.series[ak], ak); this.series[ak]._plotDimensions = this._plotDimensions; this.series[ak].init(ak, this.grid.borderWidth, this); for (var ai = 0; ai < H.jqplot.postSeriesInitHooks.length; ai++) { H.jqplot.postSeriesInitHooks[ai].call(this.series[ak], am, aj, this.options.seriesDefaults, this.options.series[ak], this) } for (var ai = 0; ai < this.postSeriesInitHooks.hooks.length; ai++) { this.postSeriesInitHooks.hooks[ai].call(this.series[ak], am, aj, this.options.seriesDefaults, this.options.series[ak], this) } this._sumy += this.series[ak]._sumy; this._sumx += this.series[ak]._sumx } var ag; for (var ak = 0; ak < 12; ak++) { ag = Q[ak]; this.axes[ag]._plotDimensions = this._plotDimensions; this.axes[ag].init(); if (this.axes[ag].borderColor == null) { if (ag.charAt(0) !== "x" && this.axes[ag].useSeriesColor === true && this.axes[ag].show) { this.axes[ag].borderColor = this.axes[ag]._series[0].color } else { this.axes[ag].borderColor = this.grid.borderColor } } } if (this.sortData) { ab(this.series) } this.grid.init(); this.grid._axes = this.axes; this.legend._series = this.series; for (var ak = 0; ak < H.jqplot.postInitHooks.length; ak++) { H.jqplot.postInitHooks[ak].call(this, am, aj, ao) } for (var ak = 0; ak < this.postInitHooks.hooks.length; ak++) { this.postInitHooks.hooks[ak].call(this, am, aj, ao) } }; this.resetAxesScale = function(ak, ag) { var ai = ag || {}; var aj = ak || this.axes; if (aj === true) { aj = this.axes } if (jQuery.isArray(aj)) { for (var ah = 0; ah < aj.length; ah++) { this.axes[aj[ah]].resetScale(ai[aj[ah]]) } } else { if (typeof(aj) === "object") { for (var af in aj) { this.axes[af].resetScale(ai[af]) } } } }; this.reInitialize = function() { this._height = this.target.height(); this._width = this.target.width(); if (this._height <= 0 || this._width <= 0 || !this._height || !this._width) { throw "Target dimension not set" } this._plotDimensions.height = this._height; this._plotDimensions.width = this._width; this.grid._plotDimensions = this._plotDimensions; this.title._plotDimensions = this._plotDimensions; this.baseCanvas._plotDimensions = this._plotDimensions; this.eventCanvas._plotDimensions = this._plotDimensions; this.legend._plotDimensions = this._plotDimensions; for (var ak in this.axes) { this.axes[ak]._plotWidth = this._width; this.axes[ak]._plotHeight = this._height } this.title._plotWidth = this._width; if (this.textColor) { this.target.css("color", this.textColor) } if (this.fontFamily) { this.target.css("font-family", this.fontFamily) } if (this.fontSize) { this.target.css("font-size", this.fontSize) } this._sumy = 0; this._sumx = 0; for (var ai = 0; ai < this.series.length; ai++) { this.populatePlotData(this.series[ai], ai); if (this.series[ai]._type === "line" && this.series[ai].renderer.bands.show) { this.series[ai].renderer.initBands.call(this.series[ai], this.series[ai].renderer.options, this) } this.series[ai]._plotDimensions = this._plotDimensions; this.series[ai].canvas._plotDimensions = this._plotDimensions; this._sumy += this.series[ai]._sumy; this._sumx += this.series[ai]._sumx } var ag; for (var af = 0; af < 12; af++) { ag = Q[af]; var ah = this.axes[ag]._ticks; for (var ai = 0; ai < ah.length; ai++) { var aj = ah[ai]._elem; if (aj) { if (H.jqplot.use_excanvas && window.G_vmlCanvasManager.uninitElement !== r) { window.G_vmlCanvasManager.uninitElement(aj.get(0)) } aj.emptyForce(); aj = null; ah._elem = null } } ah = null; this.axes[ag]._plotDimensions = this._plotDimensions; this.axes[ag]._ticks = [] } if (this.sortData) { ab(this.series) } this.grid._axes = this.axes; this.legend._series = this.series }; function ab(aj) { var an, ao, ap, af, am; for (var ak = 0; ak < aj.length; ak++) { var ag; var al = [aj[ak].data, aj[ak]._stackData, aj[ak]._plotData, aj[ak]._prevPlotData]; for (var ah = 0; ah < 4; ah++) { ag = true; an = al[ah]; if (aj[ak]._stackAxis == "x") { for (var ai = 0; ai < an.length; ai++) { if (typeof(an[ai][1]) != "number") { ag = false; break } } if (ag) { an.sort(function(ar, aq) { return ar[1] - aq[1] }) } } else { for (var ai = 0; ai < an.length; ai++) { if (typeof(an[ai][0]) != "number") { ag = false; break } } if (ag) { an.sort(function(ar, aq) { return ar[0] - aq[0] }) } } } } } this.populatePlotData = function(aj, ak) { this._plotData = []; this._stackData = []; aj._stackData = []; aj._plotData = []; var an = { x: [], y: [] }; if (this.stackSeries && !aj.disableStack) { aj._stack = true; var al = aj._stackAxis == "x" ? 0 : 1; var am = al ? 0 : 1; var ao = H.extend(true, [], aj.data); var ap = H.extend(true, [], aj.data); for (var ah = 0; ah < ak; ah++) { var af = this.series[ah].data; for (var ag = 0; ag < af.length; ag++) { ao[ag][0] += af[ag][0]; ao[ag][1] += af[ag][1]; ap[ag][al] += af[ag][al] } } for (var ai = 0; ai < ap.length; ai++) { an.x.push(ap[ai][0]); an.y.push(ap[ai][1]) } this._plotData.push(ap); this._stackData.push(ao); aj._stackData = ao; aj._plotData = ap; aj._plotValues = an } else { for (var ai = 0; ai < aj.data.length; ai++) { an.x.push(aj.data[ai][0]); an.y.push(aj.data[ai][1]) } this._stackData.push(aj.data); this.series[ak]._stackData = aj.data; this._plotData.push(aj.data); aj._plotData = aj.data; aj._plotValues = an } if (ak > 0) { aj._prevPlotData = this.series[ak - 1]._plotData } aj._sumy = 0; aj._sumx = 0; for (ai = aj.data.length - 1; ai > -1; ai--) { aj._sumy += aj.data[ai][1]; aj._sumx += aj.data[ai][0] } }; this.getNextSeriesColor = (function(ag) { var af = 0; var ah = ag.seriesColors; return function() { if (af < ah.length) { return ah[af++] } else { af = 0; return ah[af++] } } })(this); this.parseOptions = function(aq) { for (var al = 0; al < this.preParseOptionsHooks.hooks.length; al++) { this.preParseOptionsHooks.hooks[al].call(this, aq) } for (var al = 0; al < H.jqplot.preParseOptionsHooks.length; al++) { H.jqplot.preParseOptionsHooks[al].call(this, aq) } this.options = H.extend(true, {}, this.defaults, aq); var af = this.options; this.animate = af.animate; this.animateReplot = af.animateReplot; this.stackSeries = af.stackSeries; if (H.isPlainObject(af.fillBetween)) { var ap = ["series1", "series2", "color", "baseSeries", "fill"], am; for (var al = 0, aj = ap.length; al < aj; al++) { am = ap[al]; if (af.fillBetween[am] != null) { this.fillBetween[am] = af.fillBetween[am] } } } if (af.seriesColors) { this.seriesColors = af.seriesColors } if (af.negativeSeriesColors) { this.negativeSeriesColors = af.negativeSeriesColors } if (af.captureRightClick) { this.captureRightClick = af.captureRightClick } this.defaultAxisStart = (aq && aq.defaultAxisStart != null) ? aq.defaultAxisStart : this.defaultAxisStart; this.colorGenerator.setColors(this.seriesColors); this.negativeColorGenerator.setColors(this.negativeSeriesColors); H.extend(true, this._gridPadding, af.gridPadding); this.sortData = (af.sortData != null) ? af.sortData : this.sortData; for (var al = 0; al < 12; al++) { var ag = Q[al]; var ai = this.axes[ag]; ai._options = H.extend(true, {}, af.axesDefaults, af.axes[ag]); H.extend(true, ai, af.axesDefaults, af.axes[ag]); ai._plotWidth = this._width; ai._plotHeight = this._height } var ao = function(av, at, aw) { var ar = []; var au; at = at || "vertical"; if (!jQuery.isArray(av[0])) { for (au = 0; au < av.length; au++) { if (at == "vertical") { ar.push([aw + au, av[au]]) } else { ar.push([av[au], aw + au]) } } } else { H.extend(true, ar, av) } return ar }; var an = 0; for (var al = 0; al < this.data.length; al++) { var ap = new O(); for (var ak = 0; ak < H.jqplot.preParseSeriesOptionsHooks.length; ak++) { H.jqplot.preParseSeriesOptionsHooks[ak].call(ap, this.options.seriesDefaults, this.options.series[al]) } for (var ak = 0; ak < this.preParseSeriesOptionsHooks.hooks.length; ak++) { this.preParseSeriesOptionsHooks.hooks[ak].call(ap, this.options.seriesDefaults, this.options.series[al]) } H.extend(true, ap, { seriesColors: this.seriesColors, negativeSeriesColors: this.negativeSeriesColors }, this.options.seriesDefaults, this.options.series[al], { rendererOptions: { animation: { show: this.animate } } }); var ah = "vertical"; if (ap.renderer === H.jqplot.BarRenderer && ap.rendererOptions && ap.rendererOptions.barDirection == "horizontal" && ap.transposeData === true) { ah = "horizontal" } ap.data = ao(this.data[al], ah, this.defaultAxisStart); switch (ap.xaxis) { case "xaxis": ap._xaxis = this.axes.xaxis; break; case "x2axis": ap._xaxis = this.axes.x2axis; break; default: break } ap._yaxis = this.axes[ap.yaxis]; ap._xaxis._series.push(ap); ap._yaxis._series.push(ap); if (ap.show) { ap._xaxis.show = true; ap._yaxis.show = true } if (!ap.label) { ap.label = "Series " + (al + 1).toString() } this.series.push(ap); for (var ak = 0; ak < H.jqplot.postParseSeriesOptionsHooks.length; ak++) { H.jqplot.postParseSeriesOptionsHooks[ak].call(this.series[al], this.options.seriesDefaults, this.options.series[al]) } for (var ak = 0; ak < this.postParseSeriesOptionsHooks.hooks.length; ak++) { this.postParseSeriesOptionsHooks.hooks[ak].call(this.series[al], this.options.seriesDefaults, this.options.series[al]) } } H.extend(true, this.grid, this.options.grid); for (var al = 0; al < 12; al++) { var ag = Q[al]; var ai = this.axes[ag]; if (ai.borderWidth == null) { ai.borderWidth = this.grid.borderWidth } } if (typeof this.options.title == "string") { this.title.text = this.options.title } else { if (typeof this.options.title == "object") { H.extend(true, this.title, this.options.title) } } this.title._plotWidth = this._width; this.legend.setOptions(this.options.legend); for (var al = 0; al < H.jqplot.postParseOptionsHooks.length; al++) { H.jqplot.postParseOptionsHooks[al].call(this, aq) } for (var al = 0; al < this.postParseOptionsHooks.hooks.length; al++) { this.postParseOptionsHooks.hooks[al].call(this, aq) } }; this.destroy = function() { this.canvasManager.freeAllCanvases(); if (this.eventCanvas && this.eventCanvas._elem) { this.eventCanvas._elem.unbind() } this.target.empty(); this.target[0].innerHTML = "" }; this.replot = function(ag) { var ah = ag || {}; var af = (ah.clear === false) ? false : true; var ai = ah.resetAxes || false; this.target.trigger("jqplotPreReplot"); if (af) { this.destroy() } this.reInitialize(); if (ai) { this.resetAxesScale(ai, ah.axes) } this.draw(); this.target.trigger("jqplotPostReplot") }; this.redraw = function(af) { af = (af != null) ? af : true; this.target.trigger("jqplotPreRedraw"); if (af) { this.canvasManager.freeAllCanvases(); this.eventCanvas._elem.unbind(); this.target.empty() } for (var ah in this.axes) { this.axes[ah]._ticks = [] } for (var ag = 0; ag < this.series.length; ag++) { this.populatePlotData(this.series[ag], ag) } this._sumy = 0; this._sumx = 0; for (ag = 0; ag < this.series.length; ag++) { this._sumy += this.series[ag]._sumy; this._sumx += this.series[ag]._sumx } this.draw(); this.target.trigger("jqplotPostRedraw") }; this.draw = function() { if (this.drawIfHidden || this.target.is(":visible")) { this.target.trigger("jqplotPreDraw"); var aB, az, ay, ai; for (aB = 0, ay = H.jqplot.preDrawHooks.length; aB < ay; aB++) { H.jqplot.preDrawHooks[aB].call(this) } for (aB = 0, ay = this.preDrawHooks.length; aB < ay; aB++) { this.preDrawHooks.hooks[aB].apply(this, this.preDrawSeriesHooks.args[aB]) } this.target.append(this.baseCanvas.createElement({ left: 0, right: 0, top: 0, bottom: 0 }, "jqplot-base-canvas", null, this)); this.baseCanvas.setContext(); this.target.append(this.title.draw()); this.title.pack({ top: 0, left: 0 }); var aF = this.legend.draw(); var af = { top: 0, left: 0, bottom: 0, right: 0 }; if (this.legend.placement == "outsideGrid") { this.target.append(aF); switch (this.legend.location) { case "n": af.top += this.legend.getHeight(); break; case "s": af.bottom += this.legend.getHeight(); break; case "ne": case "e": case "se": af.right += this.legend.getWidth(); break; case "nw": case "w": case "sw": af.left += this.legend.getWidth(); break; default: af.right += this.legend.getWidth(); break } aF = aF.detach() } var al = this.axes; var aG; for (aB = 0; aB < 12; aB++) { aG = Q[aB]; this.target.append(al[aG].draw(this.baseCanvas._ctx, this)); al[aG].set() } if (al.yaxis.show) { af.left += al.yaxis.getWidth() } var aA = ["y2axis", "y3axis", "y4axis", "y5axis", "y6axis", "y7axis", "y8axis", "y9axis"]; var ar = [0, 0, 0, 0, 0, 0, 0, 0]; var av = 0; var au; for (au = 0; au < 8; au++) { if (al[aA[au]].show) { av += al[aA[au]].getWidth(); ar[au] = av } } af.right += av; if (al.x2axis.show) { af.top += al.x2axis.getHeight() } if (this.title.show) { af.top += this.title.getHeight() } if (al.xaxis.show) { af.bottom += al.xaxis.getHeight() } if (this.options.gridDimensions && H.isPlainObject(this.options.gridDimensions)) { var am = parseInt(this.options.gridDimensions.width, 10) || 0; var aC = parseInt(this.options.gridDimensions.height, 10) || 0; var ah = (this._width - af.left - af.right - am) / 2; var aE = (this._height - af.top - af.bottom - aC) / 2; if (aE >= 0 && ah >= 0) { af.top += aE; af.bottom += aE; af.left += ah; af.right += ah } } var ag = ["top", "bottom", "left", "right"]; for (var au in ag) { if (this._gridPadding[ag[au]] == null && af[ag[au]] > 0) { this._gridPadding[ag[au]] = af[ag[au]] } else { if (this._gridPadding[ag[au]] == null) { this._gridPadding[ag[au]] = this._defaultGridPadding[ag[au]] } } } var at = (this.legend.placement == "outsideGrid") ? { top: this.title.getHeight(), left: 0, right: 0, bottom: 0 } : this._gridPadding; al.xaxis.pack({ position: "absolute", bottom: this._gridPadding.bottom - al.xaxis.getHeight(), left: 0, width: this._width }, { min: this._gridPadding.left, max: this._width - this._gridPadding.right }); al.yaxis.pack({ position: "absolute", top: 0, left: this._gridPadding.left - al.yaxis.getWidth(), height: this._height }, { min: this._height - this._gridPadding.bottom, max: this._gridPadding.top }); al.x2axis.pack({ position: "absolute", top: this._gridPadding.top - al.x2axis.getHeight(), left: 0, width: this._width }, { min: this._gridPadding.left, max: this._width - this._gridPadding.right }); for (aB = 8; aB > 0; aB--) { al[aA[aB - 1]].pack({ position: "absolute", top: 0, right: this._gridPadding.right - ar[aB - 1] }, { min: this._height - this._gridPadding.bottom, max: this._gridPadding.top }) } var an = (this._width - this._gridPadding.left - this._gridPadding.right) / 2 + this._gridPadding.left - al.yMidAxis.getWidth() / 2; al.yMidAxis.pack({ position: "absolute", top: 0, left: an, zIndex: 9, textAlign: "center" }, { min: this._height - this._gridPadding.bottom, max: this._gridPadding.top }); this.target.append(this.grid.createElement(this._gridPadding, this)); this.grid.draw(); var ak = this.series; var aD = ak.length; for (aB = 0, ay = aD; aB < ay; aB++) { az = this.seriesStack[aB]; this.target.append(ak[az].shadowCanvas.createElement(this._gridPadding, "jqplot-series-shadowCanvas", null, this)); ak[az].shadowCanvas.setContext(); ak[az].shadowCanvas._elem.data("seriesIndex", az) } for (aB = 0, ay = aD; aB < ay; aB++) { az = this.seriesStack[aB]; this.target.append(ak[az].canvas.createElement(this._gridPadding, "jqplot-series-canvas", null, this)); ak[az].canvas.setContext(); ak[az].canvas._elem.data("seriesIndex", az) } this.target.append(this.eventCanvas.createElement(this._gridPadding, "jqplot-event-canvas", null, this)); this.eventCanvas.setContext(); this.eventCanvas._ctx.fillStyle = "rgba(0,0,0,0)"; this.eventCanvas._ctx.fillRect(0, 0, this.eventCanvas._ctx.canvas.width, this.eventCanvas._ctx.canvas.height); this.bindCustomEvents(); if (this.legend.preDraw) { this.eventCanvas._elem.before(aF); this.legend.pack(at); if (this.legend._elem) { this.drawSeries({ legendInfo: { location: this.legend.location, placement: this.legend.placement, width: this.legend.getWidth(), height: this.legend.getHeight(), xoffset: this.legend.xoffset, yoffset: this.legend.yoffset } }) } else { this.drawSeries() } } else { this.drawSeries(); if (aD) { H(ak[aD - 1].canvas._elem).after(aF) } this.legend.pack(at) } for (var aB = 0, ay = H.jqplot.eventListenerHooks.length; aB < ay; aB++) { this.eventCanvas._elem.bind(H.jqplot.eventListenerHooks[aB][0], { plot: this }, H.jqplot.eventListenerHooks[aB][1]) } for (var aB = 0, ay = this.eventListenerHooks.hooks.length; aB < ay; aB++) { this.eventCanvas._elem.bind(this.eventListenerHooks.hooks[aB][0], { plot: this }, this.eventListenerHooks.hooks[aB][1]) } var aq = this.fillBetween; if (aq.fill && aq.series1 !== aq.series2 && aq.series1 < aD && aq.series2 < aD && ak[aq.series1]._type === "line" && ak[aq.series2]._type === "line") { this.doFillBetweenLines() } for (var aB = 0, ay = H.jqplot.postDrawHooks.length; aB < ay; aB++) { H.jqplot.postDrawHooks[aB].call(this) } for (var aB = 0, ay = this.postDrawHooks.hooks.length; aB < ay; aB++) { this.postDrawHooks.hooks[aB].apply(this, this.postDrawHooks.args[aB]) } if (this.target.is(":visible")) { this._drawCount += 1 } var ao, ap, aw, aj; for (aB = 0, ay = aD; aB < ay; aB++) { ao = ak[aB]; ap = ao.renderer; aw = ".jqplot-point-label.jqplot-series-" + aB; if (ap.animation && ap.animation._supported && ap.animation.show && (this._drawCount < 2 || this.animateReplot)) { aj = this.target.find(aw); aj.stop(true, true).hide(); ao.canvas._elem.stop(true, true).hide(); ao.shadowCanvas._elem.stop(true, true).hide(); ao.canvas._elem.jqplotEffect("blind", { mode: "show", direction: ap.animation.direction }, ap.animation.speed); ao.shadowCanvas._elem.jqplotEffect("blind", { mode: "show", direction: ap.animation.direction }, ap.animation.speed); aj.fadeIn(ap.animation.speed * 0.8) } } aj = null; this.target.trigger("jqplotPostDraw", [this]) } }; N.prototype.doFillBetweenLines = function() { var ah = this.fillBetween; var aq = ah.series1; var ao = ah.series2; var ap = (aq < ao) ? aq : ao; var an = (ao > aq) ? ao : aq; var al = this.series[ap]; var ak = this.series[an]; if (ak.renderer.smooth) { var aj = ak.renderer._smoothedData.slice(0).reverse() } else { var aj = ak.gridData.slice(0).reverse() } if (al.renderer.smooth) { var am = al.renderer._smoothedData.concat(aj) } else { var am = al.gridData.concat(aj) } var ai = (ah.color !== null) ? ah.color : this.series[aq].fillColor; var ar = (ah.baseSeries !== null) ? ah.baseSeries : ap; var ag = this.series[ar].renderer.shapeRenderer; var af = { fillStyle: ai, fill: true, closePath: true }; ag.draw(al.shadowCanvas._ctx, am, af) }; this.bindCustomEvents = function() { this.eventCanvas._elem.bind("click", { plot: this }, this.onClick); this.eventCanvas._elem.bind("dblclick", { plot: this }, this.onDblClick); this.eventCanvas._elem.bind("mousedown", { plot: this }, this.onMouseDown); this.eventCanvas._elem.bind("mousemove", { plot: this }, this.onMouseMove); this.eventCanvas._elem.bind("mouseenter", { plot: this }, this.onMouseEnter); this.eventCanvas._elem.bind("mouseleave", { plot: this }, this.onMouseLeave); if (this.captureRightClick) { this.eventCanvas._elem.bind("mouseup", { plot: this }, this.onRightClick); this.eventCanvas._elem.get(0).oncontextmenu = function() { return false } } else { this.eventCanvas._elem.bind("mouseup", { plot: this }, this.onMouseUp) } }; function ac(ao) { var am = ao.data.plot; var ai = am.eventCanvas._elem.offset(); var al = { x: ao.pageX - ai.left, y: ao.pageY - ai.top }; var aj = { xaxis: null, yaxis: null, x2axis: null, y2axis: null, y3axis: null, y4axis: null, y5axis: null, y6axis: null, y7axis: null, y8axis: null, y9axis: null, yMidAxis: null }; var ak = ["xaxis", "yaxis", "x2axis", "y2axis", "y3axis", "y4axis", "y5axis", "y6axis", "y7axis", "y8axis", "y9axis", "yMidAxis"]; var af = am.axes; var ag, ah; for (ag = 11; ag > 0; ag--) { ah = ak[ag - 1]; if (af[ah].show) { aj[ah] = af[ah].series_p2u(al[ah.charAt(0)]) } } return { offsets: ai, gridPos: al, dataPos: aj } } function ae(af, ag) { var ak = ag.series; var aP, aO, aN, aI, aJ, aD, aC, ap, an, at, au, aE; var aM, aQ, aK, al, aB, aG; var ah, aH; for (aN = ag.seriesStack.length - 1; aN >= 0; aN--) { aP = ag.seriesStack[aN]; aI = ak[aP]; switch (aI.renderer.constructor) { case H.jqplot.BarRenderer: case H.jqplot.PyramidRenderer: aD = af.x; aC = af.y; for (aO = 0; aO < aI._barPoints.length; aO++) { aB = aI._barPoints[aO]; aK = aI.gridData[aO]; if (aD > aB[0][0] && aD < aB[2][0] && aC > aB[2][1] && aC < aB[0][1]) { return { seriesIndex: aI.index, pointIndex: aO, gridData: aK, data: aI.data[aO], points: aI._barPoints[aO] } } } break; case H.jqplot.DonutRenderer: at = aI.startAngle / 180 * Math.PI; aD = af.x - aI._center[0]; aC = af.y - aI._center[1]; aJ = Math.sqrt(Math.pow(aD, 2) + Math.pow(aC, 2)); if (aD > 0 && -aC >= 0) { ap = 2 * Math.PI - Math.atan(-aC / aD) } else { if (aD > 0 && -aC < 0) { ap = -Math.atan(-aC / aD) } else { if (aD < 0) { ap = Math.PI - Math.atan(-aC / aD) } else { if (aD == 0 && -aC > 0) { ap = 3 * Math.PI / 2 } else { if (aD == 0 && -aC < 0) { ap = Math.PI / 2 } else { if (aD == 0 && aC == 0) { ap = 0 } } } } } } if (at) { ap -= at; if (ap < 0) { ap += 2 * Math.PI } else { if (ap > 2 * Math.PI) { ap -= 2 * Math.PI } } } an = aI.sliceMargin / 180 * Math.PI; if (aJ < aI._radius && aJ > aI._innerRadius) { for (aO = 0; aO < aI.gridData.length; aO++) { au = (aO > 0) ? aI.gridData[aO - 1][1] + an : an; aE = aI.gridData[aO][1]; if (ap > au && ap < aE) { return { seriesIndex: aI.index, pointIndex: aO, gridData: aI.gridData[aO], data: aI.data[aO] } } } } break; case H.jqplot.PieRenderer: at = aI.startAngle / 180 * Math.PI; aD = af.x - aI._center[0]; aC = af.y - aI._center[1]; aJ = Math.sqrt(Math.pow(aD, 2) + Math.pow(aC, 2)); if (aD > 0 && -aC >= 0) { ap = 2 * Math.PI - Math.atan(-aC / aD) } else { if (aD > 0 && -aC < 0) { ap = -Math.atan(-aC / aD) } else { if (aD < 0) { ap = Math.PI - Math.atan(-aC / aD) } else { if (aD == 0 && -aC > 0) { ap = 3 * Math.PI / 2 } else { if (aD == 0 && -aC < 0) { ap = Math.PI / 2 } else { if (aD == 0 && aC == 0) { ap = 0 } } } } } } if (at) { ap -= at; if (ap < 0) { ap += 2 * Math.PI } else { if (ap > 2 * Math.PI) { ap -= 2 * Math.PI } } } an = aI.sliceMargin / 180 * Math.PI; if (aJ < aI._radius) { for (aO = 0; aO < aI.gridData.length; aO++) { au = (aO > 0) ? aI.gridData[aO - 1][1] + an : an; aE = aI.gridData[aO][1]; if (ap > au && ap < aE) { return { seriesIndex: aI.index, pointIndex: aO, gridData: aI.gridData[aO], data: aI.data[aO] } } } } break; case H.jqplot.BubbleRenderer: aD = af.x; aC = af.y; var az = null; if (aI.show) { for (var aO = 0; aO < aI.gridData.length; aO++) { aK = aI.gridData[aO]; aQ = Math.sqrt((aD - aK[0]) * (aD - aK[0]) + (aC - aK[1]) * (aC - aK[1])); if (aQ <= aK[2] && (aQ <= aM || aM == null)) { aM = aQ; az = { seriesIndex: aP, pointIndex: aO, gridData: aK, data: aI.data[aO] } } } if (az != null) { return az } } break; case H.jqplot.FunnelRenderer: aD = af.x; aC = af.y; var aF = aI._vertices, aj = aF[0], ai = aF[aF.length - 1], am, ay, ar; function aL(aT, aV, aU) { var aS = (aV[1] - aU[1]) / (aV[0] - aU[0]); var aR = aV[1] - aS * aV[0]; var aW = aT + aV[1]; return [(aW - aR) / aS, aW] } am = aL(aC, aj[0], ai[3]); ay = aL(aC, aj[1], ai[2]); for (aO = 0; aO < aF.length; aO++) { ar = aF[aO]; if (aC >= ar[0][1] && aC <= ar[3][1] && aD >= am[0] && aD <= ay[0]) { return { seriesIndex: aI.index, pointIndex: aO, gridData: null, data: aI.data[aO] } } } break; case H.jqplot.LineRenderer: aD = af.x; aC = af.y; aJ = aI.renderer; if (aI.show) { if ((aI.fill || (aI.renderer.bands.show && aI.renderer.bands.fill)) && (!ag.plugins.highlighter || !ag.plugins.highlighter.show)) { var aq = false; if (aD > aI._boundingBox[0][0] && aD < aI._boundingBox[1][0] && aC > aI._boundingBox[1][1] && aC < aI._boundingBox[0][1]) { var ax = aI._areaPoints.length; var aA; var aO = ax - 1; for (var aA = 0; aA < ax; aA++) { var aw = [aI._areaPoints[aA][0], aI._areaPoints[aA][1]]; var av = [aI._areaPoints[aO][0], aI._areaPoints[aO][1]]; if (aw[1] < aC && av[1] >= aC || av[1] < aC && aw[1] >= aC) { if (aw[0] + (aC - aw[1]) / (av[1] - aw[1]) * (av[0] - aw[0]) < aD) { aq = !aq } } aO = aA } } if (aq) { return { seriesIndex: aP, pointIndex: null, gridData: aI.gridData, data: aI.data, points: aI._areaPoints } } break } else { aH = aI.markerRenderer.size / 2 + aI.neighborThreshold; ah = (aH > 0) ? aH : 0; for (var aO = 0; aO < aI.gridData.length; aO++) { aK = aI.gridData[aO]; if (aJ.constructor == H.jqplot.OHLCRenderer) { if (aJ.candleStick) { var ao = aI._yaxis.series_u2p; if (aD >= aK[0] - aJ._bodyWidth / 2 && aD <= aK[0] + aJ._bodyWidth / 2 && aC >= ao(aI.data[aO][2]) && aC <= ao(aI.data[aO][3])) { return { seriesIndex: aP, pointIndex: aO, gridData: aK, data: aI.data[aO] } } } else { if (!aJ.hlc) { var ao = aI._yaxis.series_u2p; if (aD >= aK[0] - aJ._tickLength && aD <= aK[0] + aJ._tickLength && aC >= ao(aI.data[aO][2]) && aC <= ao(aI.data[aO][3])) { return { seriesIndex: aP, pointIndex: aO, gridData: aK, data: aI.data[aO] } } } else { var ao = aI._yaxis.series_u2p; if (aD >= aK[0] - aJ._tickLength && aD <= aK[0] + aJ._tickLength && aC >= ao(aI.data[aO][1]) && aC <= ao(aI.data[aO][2])) { return { seriesIndex: aP, pointIndex: aO, gridData: aK, data: aI.data[aO] } } } } } else { if (aK[0] != null && aK[1] != null) { aQ = Math.sqrt((aD - aK[0]) * (aD - aK[0]) + (aC - aK[1]) * (aC - aK[1])); if (aQ <= ah && (aQ <= aM || aM == null)) { aM = aQ; return { seriesIndex: aP, pointIndex: aO, gridData: aK, data: aI.data[aO] } } } } } } } break; default: aD = af.x; aC = af.y; aJ = aI.renderer; if (aI.show) { aH = aI.markerRenderer.size / 2 + aI.neighborThreshold; ah = (aH > 0) ? aH : 0; for (var aO = 0; aO < aI.gridData.length; aO++) { aK = aI.gridData[aO]; if (aJ.constructor == H.jqplot.OHLCRenderer) { if (aJ.candleStick) { var ao = aI._yaxis.series_u2p; if (aD >= aK[0] - aJ._bodyWidth / 2 && aD <= aK[0] + aJ._bodyWidth / 2 && aC >= ao(aI.data[aO][2]) && aC <= ao(aI.data[aO][3])) { return { seriesIndex: aP, pointIndex: aO, gridData: aK, data: aI.data[aO] } } } else { if (!aJ.hlc) { var ao = aI._yaxis.series_u2p; if (aD >= aK[0] - aJ._tickLength && aD <= aK[0] + aJ._tickLength && aC >= ao(aI.data[aO][2]) && aC <= ao(aI.data[aO][3])) { return { seriesIndex: aP, pointIndex: aO, gridData: aK, data: aI.data[aO] } } } else { var ao = aI._yaxis.series_u2p; if (aD >= aK[0] - aJ._tickLength && aD <= aK[0] + aJ._tickLength && aC >= ao(aI.data[aO][1]) && aC <= ao(aI.data[aO][2])) { return { seriesIndex: aP, pointIndex: aO, gridData: aK, data: aI.data[aO] } } } } } else { aQ = Math.sqrt((aD - aK[0]) * (aD - aK[0]) + (aC - aK[1]) * (aC - aK[1])); if (aQ <= ah && (aQ <= aM || aM == null)) { aM = aQ; return { seriesIndex: aP, pointIndex: aO, gridData: aK, data: aI.data[aO] } } } } } break } } return null } this.onClick = function(ah) { var ag = ac(ah); var aj = ah.data.plot; var ai = ae(ag.gridPos, aj); var af = jQuery.Event("jqplotClick"); af.pageX = ah.pageX; af.pageY = ah.pageY; H(this).trigger(af, [ag.gridPos, ag.dataPos, ai, aj]) }; this.onDblClick = function(ah) { var ag = ac(ah); var aj = ah.data.plot; var ai = ae(ag.gridPos, aj); var af = jQuery.Event("jqplotDblClick"); af.pageX = ah.pageX; af.pageY = ah.pageY; H(this).trigger(af, [ag.gridPos, ag.dataPos, ai, aj]) }; this.onMouseDown = function(ah) { var ag = ac(ah); var aj = ah.data.plot; var ai = ae(ag.gridPos, aj); var af = jQuery.Event("jqplotMouseDown"); af.pageX = ah.pageX; af.pageY = ah.pageY; H(this).trigger(af, [ag.gridPos, ag.dataPos, ai, aj]) }; this.onMouseUp = function(ah) { var ag = ac(ah); var af = jQuery.Event("jqplotMouseUp"); af.pageX = ah.pageX; af.pageY = ah.pageY; H(this).trigger(af, [ag.gridPos, ag.dataPos, null, ah.data.plot]) }; this.onRightClick = function(ah) { var ag = ac(ah); var aj = ah.data.plot; var ai = ae(ag.gridPos, aj); if (aj.captureRightClick) { if (ah.which == 3) { var af = jQuery.Event("jqplotRightClick"); af.pageX = ah.pageX; af.pageY = ah.pageY; H(this).trigger(af, [ag.gridPos, ag.dataPos, ai, aj]) } else { var af = jQuery.Event("jqplotMouseUp"); af.pageX = ah.pageX; af.pageY = ah.pageY; H(this).trigger(af, [ag.gridPos, ag.dataPos, ai, aj]) } } }; this.onMouseMove = function(ah) { var ag = ac(ah); var aj = ah.data.plot; var ai = ae(ag.gridPos, aj); var af = jQuery.Event("jqplotMouseMove"); af.pageX = ah.pageX; af.pageY = ah.pageY; H(this).trigger(af, [ag.gridPos, ag.dataPos, ai, aj]) }; this.onMouseEnter = function(ah) { var ag = ac(ah); var ai = ah.data.plot; var af = jQuery.Event("jqplotMouseEnter"); af.pageX = ah.pageX; af.pageY = ah.pageY; af.relatedTarget = ah.relatedTarget; H(this).trigger(af, [ag.gridPos, ag.dataPos, null, ai]) }; this.onMouseLeave = function(ah) { var ag = ac(ah); var ai = ah.data.plot; var af = jQuery.Event("jqplotMouseLeave"); af.pageX = ah.pageX; af.pageY = ah.pageY; af.relatedTarget = ah.relatedTarget; H(this).trigger(af, [ag.gridPos, ag.dataPos, null, ai]) }; this.drawSeries = function(ah, af) { var aj, ai, ag; af = (typeof(ah) === "number" && af == null) ? ah : af; ah = (typeof(ah) === "object") ? ah : {}; if (af != r) { ai = this.series[af]; ag = ai.shadowCanvas._ctx; ag.clearRect(0, 0, ag.canvas.width, ag.canvas.height); ai.drawShadow(ag, ah, this); ag = ai.canvas._ctx; ag.clearRect(0, 0, ag.canvas.width, ag.canvas.height); ai.draw(ag, ah, this); if (ai.renderer.constructor == H.jqplot.BezierCurveRenderer) { if (af < this.series.length - 1) { this.drawSeries(af + 1) } } } else { for (aj = 0; aj < this.series.length; aj++) { ai = this.series[aj]; ag = ai.shadowCanvas._ctx; ag.clearRect(0, 0, ag.canvas.width, ag.canvas.height); ai.drawShadow(ag, ah, this); ag = ai.canvas._ctx; ag.clearRect(0, 0, ag.canvas.width, ag.canvas.height); ai.draw(ag, ah, this) } } ah = af = aj = ai = ag = null }; this.moveSeriesToFront = function(ag) { ag = parseInt(ag, 10); var aj = H.inArray(ag, this.seriesStack); if (aj == -1) { return } if (aj == this.seriesStack.length - 1) { this.previousSeriesStack = this.seriesStack.slice(0); return } var af = this.seriesStack[this.seriesStack.length - 1]; var ai = this.series[ag].canvas._elem.detach(); var ah = this.series[ag].shadowCanvas._elem.detach(); this.series[af].shadowCanvas._elem.after(ah); this.series[af].canvas._elem.after(ai); this.previousSeriesStack = this.seriesStack.slice(0); this.seriesStack.splice(aj, 1); this.seriesStack.push(ag) }; this.moveSeriesToBack = function(ag) { ag = parseInt(ag, 10); var aj = H.inArray(ag, this.seriesStack); if (aj == 0 || aj == -1) { return } var af = this.seriesStack[0]; var ai = this.series[ag].canvas._elem.detach(); var ah = this.series[ag].shadowCanvas._elem.detach(); this.series[af].shadowCanvas._elem.before(ah); this.series[af].canvas._elem.before(ai); this.previousSeriesStack = this.seriesStack.slice(0); this.seriesStack.splice(aj, 1); this.seriesStack.unshift(ag) }; this.restorePreviousSeriesOrder = function() { var al, ak, aj, ai, ah, af, ag; if (this.seriesStack == this.previousSeriesStack) { return } for (al = 1; al < this.previousSeriesStack.length; al++) { af = this.previousSeriesStack[al]; ag = this.previousSeriesStack[al - 1]; aj = this.series[af].canvas._elem.detach(); ai = this.series[af].shadowCanvas._elem.detach(); this.series[ag].shadowCanvas._elem.after(ai); this.series[ag].canvas._elem.after(aj) } ah = this.seriesStack.slice(0); this.seriesStack = this.previousSeriesStack.slice(0); this.previousSeriesStack = ah }; this.restoreOriginalSeriesOrder = function() { var aj, ai, af = [], ah, ag; for (aj = 0; aj < this.series.length; aj++) { af.push(aj) } if (this.seriesStack == af) { return } this.previousSeriesStack = this.seriesStack.slice(0); this.seriesStack = af; for (aj = 1; aj < this.seriesStack.length; aj++) { ah = this.series[aj].canvas._elem.detach(); ag = this.series[aj].shadowCanvas._elem.detach(); this.series[aj - 1].shadowCanvas._elem.after(ag); this.series[aj - 1].canvas._elem.after(ah) } }; this.activateTheme = function(af) { this.themeEngine.activate(this, af) } } H.jqplot.computeHighlightColors = function(ac) { var ae; if (jQuery.isArray(ac)) { ae = []; for (var ag = 0; ag < ac.length; ag++) { var af = H.jqplot.getColorComponents(ac[ag]); var ab = [af[0], af[1], af[2]]; var ah = ab[0] + ab[1] + ab[2]; for (var ad = 0; ad < 3; ad++) { ab[ad] = (ah > 660) ? ab[ad] * 0.85 : 0.73 * ab[ad] + 90; ab[ad] = parseInt(ab[ad], 10); (ab[ad] > 255) ? 255: ab[ad] } ab[3] = 0.3 + 0.35 * af[3]; ae.push("rgba(" + ab[0] + "," + ab[1] + "," + ab[2] + "," + ab[3] + ")") } } else { var af = H.jqplot.getColorComponents(ac); var ab = [af[0], af[1], af[2]]; var ah = ab[0] + ab[1] + ab[2]; for (var ad = 0; ad < 3; ad++) { ab[ad] = (ah > 660) ? ab[ad] * 0.85 : 0.73 * ab[ad] + 90; ab[ad] = parseInt(ab[ad], 10); (ab[ad] > 255) ? 255: ab[ad] } ab[3] = 0.3 + 0.35 * af[3]; ae = "rgba(" + ab[0] + "," + ab[1] + "," + ab[2] + "," + ab[3] + ")" } return ae }; H.jqplot.ColorGenerator = function(ac) { ac = ac || H.jqplot.config.defaultColors; var ab = 0; this.next = function() { if (ab < ac.length) { return ac[ab++] } else { ab = 0; return ac[ab++] } }; this.previous = function() { if (ab > 0) { return ac[ab--] } else { ab = ac.length - 1; return ac[ab] } }; this.get = function(ae) { var ad = ae - ac.length * Math.floor(ae / ac.length); return ac[ad] }; this.setColors = function(ad) { ac = ad }; this.reset = function() { ab = 0 }; this.getIndex = function() { return ab }; this.setIndex = function(ad) { ab = ad } }; H.jqplot.hex2rgb = function(ad, ab) { ad = ad.replace("#", ""); if (ad.length == 3) { ad = ad.charAt(0) + ad.charAt(0) + ad.charAt(1) + ad.charAt(1) + ad.charAt(2) + ad.charAt(2) } var ac; ac = "rgba(" + parseInt(ad.slice(0, 2), 16) + ", " + parseInt(ad.slice(2, 4), 16) + ", " + parseInt(ad.slice(4, 6), 16); if (ab) { ac += ", " + ab } ac += ")"; return ac }; H.jqplot.rgb2hex = function(ag) { var ad = /rgba?\( *([0-9]{1,3}\.?[0-9]*%?) *, *([0-9]{1,3}\.?[0-9]*%?) *, *([0-9]{1,3}\.?[0-9]*%?) *(?:, *[0-9.]*)?\)/; var ab = ag.match(ad); var af = "#"; for (var ae = 1; ae < 4; ae++) { var ac; if (ab[ae].search(/%/) != -1) { ac = parseInt(255 * ab[ae] / 100, 10).toString(16); if (ac.length == 1) { ac = "0" + ac } } else { ac = parseInt(ab[ae], 10).toString(16); if (ac.length == 1) { ac = "0" + ac } } af += ac } return af }; H.jqplot.normalize2rgb = function(ac, ab) { if (ac.search(/^ *rgba?\(/) != -1) { return ac } else { if (ac.search(/^ *#?[0-9a-fA-F]?[0-9a-fA-F]/) != -1) { return H.jqplot.hex2rgb(ac, ab) } else { throw "invalid color spec" } } }; H.jqplot.getColorComponents = function(ag) { ag = H.jqplot.colorKeywordMap[ag] || ag; var ae = H.jqplot.normalize2rgb(ag); var ad = /rgba?\( *([0-9]{1,3}\.?[0-9]*%?) *, *([0-9]{1,3}\.?[0-9]*%?) *, *([0-9]{1,3}\.?[0-9]*%?) *,? *([0-9.]* *)?\)/; var ab = ae.match(ad); var ac = []; for (var af = 1; af < 4; af++) { if (ab[af].search(/%/) != -1) { ac[af - 1] = parseInt(255 * ab[af] / 100, 10) } else { ac[af - 1] = parseInt(ab[af], 10) } } ac[3] = parseFloat(ab[4]) ? parseFloat(ab[4]) : 1; return ac }; H.jqplot.colorKeywordMap = { aliceblue: "rgb(240, 248, 255)", antiquewhite: "rgb(250, 235, 215)", aqua: "rgb( 0, 255, 255)", aquamarine: "rgb(127, 255, 212)", azure: "rgb(240, 255, 255)", beige: "rgb(245, 245, 220)", bisque: "rgb(255, 228, 196)", black: "rgb( 0, 0, 0)", blanchedalmond: "rgb(255, 235, 205)", blue: "rgb( 0, 0, 255)", blueviolet: "rgb(138, 43, 226)", brown: "rgb(165, 42, 42)", burlywood: "rgb(222, 184, 135)", cadetblue: "rgb( 95, 158, 160)", chartreuse: "rgb(127, 255, 0)", chocolate: "rgb(210, 105, 30)", coral: "rgb(255, 127, 80)", cornflowerblue: "rgb(100, 149, 237)", cornsilk: "rgb(255, 248, 220)", crimson: "rgb(220, 20, 60)", cyan: "rgb( 0, 255, 255)", darkblue: "rgb( 0, 0, 139)", darkcyan: "rgb( 0, 139, 139)", darkgoldenrod: "rgb(184, 134, 11)", darkgray: "rgb(169, 169, 169)", darkgreen: "rgb( 0, 100, 0)", darkgrey: "rgb(169, 169, 169)", darkkhaki: "rgb(189, 183, 107)", darkmagenta: "rgb(139, 0, 139)", darkolivegreen: "rgb( 85, 107, 47)", darkorange: "rgb(255, 140, 0)", darkorchid: "rgb(153, 50, 204)", darkred: "rgb(139, 0, 0)", darksalmon: "rgb(233, 150, 122)", darkseagreen: "rgb(143, 188, 143)", darkslateblue: "rgb( 72, 61, 139)", darkslategray: "rgb( 47, 79, 79)", darkslategrey: "rgb( 47, 79, 79)", darkturquoise: "rgb( 0, 206, 209)", darkviolet: "rgb(148, 0, 211)", deeppink: "rgb(255, 20, 147)", deepskyblue: "rgb( 0, 191, 255)", dimgray: "rgb(105, 105, 105)", dimgrey: "rgb(105, 105, 105)", dodgerblue: "rgb( 30, 144, 255)", firebrick: "rgb(178, 34, 34)", floralwhite: "rgb(255, 250, 240)", forestgreen: "rgb( 34, 139, 34)", fuchsia: "rgb(255, 0, 255)", gainsboro: "rgb(220, 220, 220)", ghostwhite: "rgb(248, 248, 255)", gold: "rgb(255, 215, 0)", goldenrod: "rgb(218, 165, 32)", gray: "rgb(128, 128, 128)", grey: "rgb(128, 128, 128)", green: "rgb( 0, 128, 0)", greenyellow: "rgb(173, 255, 47)", honeydew: "rgb(240, 255, 240)", hotpink: "rgb(255, 105, 180)", indianred: "rgb(205, 92, 92)", indigo: "rgb( 75, 0, 130)", ivory: "rgb(255, 255, 240)", khaki: "rgb(240, 230, 140)", lavender: "rgb(230, 230, 250)", lavenderblush: "rgb(255, 240, 245)", lawngreen: "rgb(124, 252, 0)", lemonchiffon: "rgb(255, 250, 205)", lightblue: "rgb(173, 216, 230)", lightcoral: "rgb(240, 128, 128)", lightcyan: "rgb(224, 255, 255)", lightgoldenrodyellow: "rgb(250, 250, 210)", lightgray: "rgb(211, 211, 211)", lightgreen: "rgb(144, 238, 144)", lightgrey: "rgb(211, 211, 211)", lightpink: "rgb(255, 182, 193)", lightsalmon: "rgb(255, 160, 122)", lightseagreen: "rgb( 32, 178, 170)", lightskyblue: "rgb(135, 206, 250)", lightslategray: "rgb(119, 136, 153)", lightslategrey: "rgb(119, 136, 153)", lightsteelblue: "rgb(176, 196, 222)", lightyellow: "rgb(255, 255, 224)", lime: "rgb( 0, 255, 0)", limegreen: "rgb( 50, 205, 50)", linen: "rgb(250, 240, 230)", magenta: "rgb(255, 0, 255)", maroon: "rgb(128, 0, 0)", mediumaquamarine: "rgb(102, 205, 170)", mediumblue: "rgb( 0, 0, 205)", mediumorchid: "rgb(186, 85, 211)", mediumpurple: "rgb(147, 112, 219)", mediumseagreen: "rgb( 60, 179, 113)", mediumslateblue: "rgb(123, 104, 238)", mediumspringgreen: "rgb( 0, 250, 154)", mediumturquoise: "rgb( 72, 209, 204)", mediumvioletred: "rgb(199, 21, 133)", midnightblue: "rgb( 25, 25, 112)", mintcream: "rgb(245, 255, 250)", mistyrose: "rgb(255, 228, 225)", moccasin: "rgb(255, 228, 181)", navajowhite: "rgb(255, 222, 173)", navy: "rgb( 0, 0, 128)", oldlace: "rgb(253, 245, 230)", olive: "rgb(128, 128, 0)", olivedrab: "rgb(107, 142, 35)", orange: "rgb(255, 165, 0)", orangered: "rgb(255, 69, 0)", orchid: "rgb(218, 112, 214)", palegoldenrod: "rgb(238, 232, 170)", palegreen: "rgb(152, 251, 152)", paleturquoise: "rgb(175, 238, 238)", palevioletred: "rgb(219, 112, 147)", papayawhip: "rgb(255, 239, 213)", peachpuff: "rgb(255, 218, 185)", peru: "rgb(205, 133, 63)", pink: "rgb(255, 192, 203)", plum: "rgb(221, 160, 221)", powderblue: "rgb(176, 224, 230)", purple: "rgb(128, 0, 128)", red: "rgb(255, 0, 0)", rosybrown: "rgb(188, 143, 143)", royalblue: "rgb( 65, 105, 225)", saddlebrown: "rgb(139, 69, 19)", salmon: "rgb(250, 128, 114)", sandybrown: "rgb(244, 164, 96)", seagreen: "rgb( 46, 139, 87)", seashell: "rgb(255, 245, 238)", sienna: "rgb(160, 82, 45)", silver: "rgb(192, 192, 192)", skyblue: "rgb(135, 206, 235)", slateblue: "rgb(106, 90, 205)", slategray: "rgb(112, 128, 144)", slategrey: "rgb(112, 128, 144)", snow: "rgb(255, 250, 250)", springgreen: "rgb( 0, 255, 127)", steelblue: "rgb( 70, 130, 180)", tan: "rgb(210, 180, 140)", teal: "rgb( 0, 128, 128)", thistle: "rgb(216, 191, 216)", tomato: "rgb(255, 99, 71)", turquoise: "rgb( 64, 224, 208)", violet: "rgb(238, 130, 238)", wheat: "rgb(245, 222, 179)", white: "rgb(255, 255, 255)", whitesmoke: "rgb(245, 245, 245)", yellow: "rgb(255, 255, 0)", yellowgreen: "rgb(154, 205, 50)" }; H.jqplot.AxisLabelRenderer = function(ab) { H.jqplot.ElemContainer.call(this); this.axis; this.show = true; this.label = ""; this.fontFamily = null; this.fontSize = null; this.textColor = null; this._elem; this.escapeHTML = false; H.extend(true, this, ab) }; H.jqplot.AxisLabelRenderer.prototype = new H.jqplot.ElemContainer(); H.jqplot.AxisLabelRenderer.prototype.constructor = H.jqplot.AxisLabelRenderer; H.jqplot.AxisLabelRenderer.prototype.init = function(ab) { H.extend(true, this, ab) }; H.jqplot.AxisLabelRenderer.prototype.draw = function(ab, ac) { if (this._elem) { this._elem.emptyForce(); this._elem = null } this._elem = H('
'); if (Number(this.label)) { this._elem.css("white-space", "nowrap") } if (!this.escapeHTML) { this._elem.html(this.label) } else { this._elem.text(this.label) } if (this.fontFamily) { this._elem.css("font-family", this.fontFamily) } if (this.fontSize) { this._elem.css("font-size", this.fontSize) } if (this.textColor) { this._elem.css("color", this.textColor) } return this._elem }; H.jqplot.AxisLabelRenderer.prototype.pack = function() {}; H.jqplot.AxisTickRenderer = function(ab) { H.jqplot.ElemContainer.call(this); this.mark = "outside"; this.axis; this.showMark = true; this.showGridline = true; this.isMinorTick = false; this.size = 4; this.markSize = 6; this.show = true; this.showLabel = true; this.label = null; this.value = null; this._styles = {}; this.formatter = H.jqplot.DefaultTickFormatter; this.prefix = ""; this.formatString = ""; this.fontFamily; this.fontSize; this.textColor; this.escapeHTML = false; this._elem; this._breakTick = false; H.extend(true, this, ab) }; H.jqplot.AxisTickRenderer.prototype.init = function(ab) { H.extend(true, this, ab) }; H.jqplot.AxisTickRenderer.prototype = new H.jqplot.ElemContainer(); H.jqplot.AxisTickRenderer.prototype.constructor = H.jqplot.AxisTickRenderer; H.jqplot.AxisTickRenderer.prototype.setTick = function(ab, ad, ac) { this.value = ab; this.axis = ad; if (ac) { this.isMinorTick = true } return this }; H.jqplot.AxisTickRenderer.prototype.draw = function() { if (this.label === null) { this.label = this.prefix + this.formatter(this.formatString, this.value) } var ac = { position: "absolute" }; if (Number(this.label)) { ac.whitSpace = "nowrap" } if (this._elem) { this._elem.emptyForce(); this._elem = null } this._elem = H(document.createElement("div")); this._elem.addClass("jqplot-" + this.axis + "-tick"); if (!this.escapeHTML) { this._elem.html(this.label) } else { this._elem.text(this.label) } this._elem.css(ac); for (var ab in this._styles) { this._elem.css(ab, this._styles[ab]) } if (this.fontFamily) { this._elem.css("font-family", this.fontFamily) } if (this.fontSize) { this._elem.css("font-size", this.fontSize) } if (this.textColor) { this._elem.css("color", this.textColor) } if (this._breakTick) { this._elem.addClass("jqplot-breakTick") } return this._elem }; H.jqplot.DefaultTickFormatter = function(ab, ac) { if (typeof ac == "number") { if (!ab) { ab = H.jqplot.config.defaultTickFormatString } return H.jqplot.sprintf(ab, ac) } else { return String(ac) } }; H.jqplot.AxisTickRenderer.prototype.pack = function() {}; H.jqplot.CanvasGridRenderer = function() { this.shadowRenderer = new H.jqplot.ShadowRenderer() }; H.jqplot.CanvasGridRenderer.prototype.init = function(ac) { this._ctx; H.extend(true, this, ac); var ab = { lineJoin: "miter", lineCap: "round", fill: false, isarc: false, angle: this.shadowAngle, offset: this.shadowOffset, alpha: this.shadowAlpha, depth: this.shadowDepth, lineWidth: this.shadowWidth, closePath: false, strokeStyle: this.shadowColor }; this.renderer.shadowRenderer.init(ab) }; H.jqplot.CanvasGridRenderer.prototype.createElement = function(ae) { var ad; if (this._elem) { if (H.jqplot.use_excanvas && window.G_vmlCanvasManager.uninitElement !== r) { ad = this._elem.get(0); window.G_vmlCanvasManager.uninitElement(ad); ad = null } this._elem.emptyForce(); this._elem = null } ad = ae.canvasManager.getCanvas(); var ab = this._plotDimensions.width; var ac = this._plotDimensions.height; ad.width = ab; ad.height = ac; this._elem = H(ad); this._elem.addClass("jqplot-grid-canvas"); this._elem.css({ position: "absolute", left: 0, top: 0 }); ad = ae.canvasManager.initCanvas(ad); this._top = this._offsets.top; this._bottom = ac - this._offsets.bottom; this._left = this._offsets.left; this._right = ab - this._offsets.right; this._width = this._right - this._left; this._height = this._bottom - this._top; ad = null; return this._elem }; H.jqplot.CanvasGridRenderer.prototype.draw = function() { this._ctx = this._elem.get(0).getContext("2d"); var am = this._ctx; var ap = this._axes; am.save(); am.clearRect(0, 0, this._plotDimensions.width, this._plotDimensions.height); am.fillStyle = this.backgroundColor || this.background; am.fillRect(this._left, this._top, this._width, this._height); am.save(); am.lineJoin = "miter"; am.lineCap = "butt"; am.lineWidth = this.gridLineWidth; am.strokeStyle = this.gridLineColor; var at, ar, aj, ak; var ag = ["xaxis", "yaxis", "x2axis", "y2axis"]; for (var aq = 4; aq > 0; aq--) { var aw = ag[aq - 1]; var ab = ap[aw]; var au = ab._ticks; var al = au.length; if (ab.show) { if (ab.drawBaseline) { var av = {}; if (ab.baselineWidth !== null) { av.lineWidth = ab.baselineWidth } if (ab.baselineColor !== null) { av.strokeStyle = ab.baselineColor } switch (aw) { case "xaxis": ai(this._left, this._bottom, this._right, this._bottom, av); break; case "yaxis": ai(this._left, this._bottom, this._left, this._top, av); break; case "x2axis": ai(this._left, this._bottom, this._right, this._bottom, av); break; case "y2axis": ai(this._right, this._bottom, this._right, this._top, av); break } } for (var an = al; an > 0; an--) { var ah = au[an - 1]; if (ah.show) { var ae = Math.round(ab.u2p(ah.value)) + 0.5; switch (aw) { case "xaxis": if (ah.showGridline && this.drawGridlines && ((!ah.isMinorTick && ab.drawMajorGridlines) || (ah.isMinorTick && ab.drawMinorGridlines))) { ai(ae, this._top, ae, this._bottom) } if (ah.showMark && ah.mark && ((!ah.isMinorTick && ab.drawMajorTickMarks) || (ah.isMinorTick && ab.drawMinorTickMarks))) { aj = ah.markSize; ak = ah.mark; var ae = Math.round(ab.u2p(ah.value)) + 0.5; switch (ak) { case "outside": at = this._bottom; ar = this._bottom + aj; break; case "inside": at = this._bottom - aj; ar = this._bottom; break; case "cross": at = this._bottom - aj; ar = this._bottom + aj; break; default: at = this._bottom; ar = this._bottom + aj; break } if (this.shadow) { this.renderer.shadowRenderer.draw(am, [ [ae, at], [ae, ar] ], { lineCap: "butt", lineWidth: this.gridLineWidth, offset: this.gridLineWidth * 0.75, depth: 2, fill: false, closePath: false }) } ai(ae, at, ae, ar) } break; case "yaxis": if (ah.showGridline && this.drawGridlines && ((!ah.isMinorTick && ab.drawMajorGridlines) || (ah.isMinorTick && ab.drawMinorGridlines))) { ai(this._right, ae, this._left, ae) } if (ah.showMark && ah.mark && ((!ah.isMinorTick && ab.drawMajorTickMarks) || (ah.isMinorTick && ab.drawMinorTickMarks))) { aj = ah.markSize; ak = ah.mark; var ae = Math.round(ab.u2p(ah.value)) + 0.5; switch (ak) { case "outside": at = this._left - aj; ar = this._left; break; case "inside": at = this._left; ar = this._left + aj; break; case "cross": at = this._left - aj; ar = this._left + aj; break; default: at = this._left - aj; ar = this._left; break } if (this.shadow) { this.renderer.shadowRenderer.draw(am, [ [at, ae], [ar, ae] ], { lineCap: "butt", lineWidth: this.gridLineWidth * 1.5, offset: this.gridLineWidth * 0.75, fill: false, closePath: false }) } ai(at, ae, ar, ae, { strokeStyle: ab.borderColor }) } break; case "x2axis": if (ah.showGridline && this.drawGridlines && ((!ah.isMinorTick && ab.drawMajorGridlines) || (ah.isMinorTick && ab.drawMinorGridlines))) { ai(ae, this._bottom, ae, this._top) } if (ah.showMark && ah.mark && ((!ah.isMinorTick && ab.drawMajorTickMarks) || (ah.isMinorTick && ab.drawMinorTickMarks))) { aj = ah.markSize; ak = ah.mark; var ae = Math.round(ab.u2p(ah.value)) + 0.5; switch (ak) { case "outside": at = this._top - aj; ar = this._top; break; case "inside": at = this._top; ar = this._top + aj; break; case "cross": at = this._top - aj; ar = this._top + aj; break; default: at = this._top - aj; ar = this._top; break } if (this.shadow) { this.renderer.shadowRenderer.draw(am, [ [ae, at], [ae, ar] ], { lineCap: "butt", lineWidth: this.gridLineWidth, offset: this.gridLineWidth * 0.75, depth: 2, fill: false, closePath: false }) } ai(ae, at, ae, ar) } break; case "y2axis": if (ah.showGridline && this.drawGridlines && ((!ah.isMinorTick && ab.drawMajorGridlines) || (ah.isMinorTick && ab.drawMinorGridlines))) { ai(this._left, ae, this._right, ae) } if (ah.showMark && ah.mark && ((!ah.isMinorTick && ab.drawMajorTickMarks) || (ah.isMinorTick && ab.drawMinorTickMarks))) { aj = ah.markSize; ak = ah.mark; var ae = Math.round(ab.u2p(ah.value)) + 0.5; switch (ak) { case "outside": at = this._right; ar = this._right + aj; break; case "inside": at = this._right - aj; ar = this._right; break; case "cross": at = this._right - aj; ar = this._right + aj; break; default: at = this._right; ar = this._right + aj; break } if (this.shadow) { this.renderer.shadowRenderer.draw(am, [ [at, ae], [ar, ae] ], { lineCap: "butt", lineWidth: this.gridLineWidth * 1.5, offset: this.gridLineWidth * 0.75, fill: false, closePath: false }) } ai(at, ae, ar, ae, { strokeStyle: ab.borderColor }) } break; default: break } } } ah = null } ab = null; au = null } ag = ["y3axis", "y4axis", "y5axis", "y6axis", "y7axis", "y8axis", "y9axis", "yMidAxis"]; for (var aq = 7; aq > 0; aq--) { var ab = ap[ag[aq - 1]]; var au = ab._ticks; if (ab.show) { var ac = au[ab.numberTicks - 1]; var af = au[0]; var ad = ab.getLeft(); var ao = [ [ad, ac.getTop() + ac.getHeight() / 2], [ad, af.getTop() + af.getHeight() / 2 + 1] ]; if (this.shadow) { this.renderer.shadowRenderer.draw(am, ao, { lineCap: "butt", fill: false, closePath: false }) } ai(ao[0][0], ao[0][1], ao[1][0], ao[1][1], { lineCap: "butt", strokeStyle: ab.borderColor, lineWidth: ab.borderWidth }); for (var an = au.length; an > 0; an--) { var ah = au[an - 1]; aj = ah.markSize; ak = ah.mark; var ae = Math.round(ab.u2p(ah.value)) + 0.5; if (ah.showMark && ah.mark) { switch (ak) { case "outside": at = ad; ar = ad + aj; break; case "inside": at = ad - aj; ar = ad; break; case "cross": at = ad - aj; ar = ad + aj; break; default: at = ad; ar = ad + aj; break } ao = [ [at, ae], [ar, ae] ]; if (this.shadow) { this.renderer.shadowRenderer.draw(am, ao, { lineCap: "butt", lineWidth: this.gridLineWidth * 1.5, offset: this.gridLineWidth * 0.75, fill: false, closePath: false }) } ai(at, ae, ar, ae, { strokeStyle: ab.borderColor }) } ah = null } af = null } ab = null; au = null } am.restore(); function ai(aB, aA, ay, ax, az) { am.save(); az = az || {}; if (az.lineWidth == null || az.lineWidth != 0) { H.extend(true, am, az); am.beginPath(); am.moveTo(aB, aA); am.lineTo(ay, ax); am.stroke(); am.restore() } } if (this.shadow) { var ao = [ [this._left, this._bottom], [this._right, this._bottom], [this._right, this._top] ]; this.renderer.shadowRenderer.draw(am, ao) } if (this.borderWidth != 0 && this.drawBorder) { ai(this._left, this._top, this._right, this._top, { lineCap: "round", strokeStyle: ap.x2axis.borderColor, lineWidth: ap.x2axis.borderWidth }); ai(this._right, this._top, this._right, this._bottom, { lineCap: "round", strokeStyle: ap.y2axis.borderColor, lineWidth: ap.y2axis.borderWidth }); ai(this._right, this._bottom, this._left, this._bottom, { lineCap: "round", strokeStyle: ap.xaxis.borderColor, lineWidth: ap.xaxis.borderWidth }); ai(this._left, this._bottom, this._left, this._top, { lineCap: "round", strokeStyle: ap.yaxis.borderColor, lineWidth: ap.yaxis.borderWidth }) } am.restore(); am = null; ap = null }; H.jqplot.DivTitleRenderer = function() {}; H.jqplot.DivTitleRenderer.prototype.init = function(ab) { H.extend(true, this, ab) }; H.jqplot.DivTitleRenderer.prototype.draw = function() { if (this._elem) { this._elem.emptyForce(); this._elem = null } var ae = this.renderer; var ad = document.createElement("div"); this._elem = H(ad); this._elem.addClass("jqplot-title"); if (!this.text) { this.show = false; this._elem.height(0); this._elem.width(0) } else { if (this.text) { var ab; if (this.color) { ab = this.color } else { if (this.textColor) { ab = this.textColor } } var ac = { position: "absolute", top: "0px", left: "0px" }; if (this._plotWidth) { ac.width = this._plotWidth + "px" } if (this.fontSize) { ac.fontSize = this.fontSize } if (typeof this.textAlign === "string") { ac.textAlign = this.textAlign } else { ac.textAlign = "center" } if (ab) { ac.color = ab } if (this.paddingBottom) { ac.paddingBottom = this.paddingBottom } if (this.fontFamily) { ac.fontFamily = this.fontFamily } this._elem.css(ac); if (this.escapeHtml) { this._elem.text(this.text) } else { this._elem.html(this.text) } } } ad = null; return this._elem }; H.jqplot.DivTitleRenderer.prototype.pack = function() {}; var o = 0.1; H.jqplot.LinePattern = function(ap, ak) { var aj = { dotted: [o, H.jqplot.config.dotGapLength], dashed: [H.jqplot.config.dashLength, H.jqplot.config.gapLength], solid: null }; if (typeof ak === "string") { if (ak[0] === "." || ak[0] === "-") { var aq = ak; ak = []; for (var ai = 0, af = aq.length; ai < af; ai++) { if (aq[ai] === ".") { ak.push(o) } else { if (aq[ai] === "-") { ak.push(H.jqplot.config.dashLength) } else { continue } } ak.push(H.jqplot.config.gapLength) } } else { ak = aj[ak] } } if (!(ak && ak.length)) { return ap } var ae = 0; var al = ak[0]; var an = 0; var am = 0; var ah = 0; var ab = 0; var ao = function(ar, at) { ap.moveTo(ar, at); an = ar; am = at; ah = ar; ab = at }; var ad = function(ar, ay) { var aw = ap.lineWidth; var au = ar - an; var at = ay - am; var av = Math.sqrt(au * au + at * at); if ((av > 0) && (aw > 0)) { au /= av; at /= av; while (true) { var ax = aw * al; if (ax < av) { an += ax * au; am += ax * at; if ((ae & 1) == 0) { ap.lineTo(an, am) } else { ap.moveTo(an, am) } av -= ax; ae++; if (ae >= ak.length) { ae = 0 } al = ak[ae] } else { an = ar; am = ay; if ((ae & 1) == 0) { ap.lineTo(an, am) } else { ap.moveTo(an, am) } al -= av / aw; break } } } }; var ac = function() { ap.beginPath() }; var ag = function() { ad(ah, ab) }; return { moveTo: ao, lineTo: ad, beginPath: ac, closePath: ag } }; H.jqplot.LineRenderer = function() { this.shapeRenderer = new H.jqplot.ShapeRenderer(); this.shadowRenderer = new H.jqplot.ShadowRenderer() }; H.jqplot.LineRenderer.prototype.init = function(ac, ah) { ac = ac || {}; this._type = "line"; this.renderer.animation = { show: false, direction: "left", speed: 2500, _supported: true }; this.renderer.smooth = false; this.renderer.tension = null; this.renderer.constrainSmoothing = true; this.renderer._smoothedData = []; this.renderer._smoothedPlotData = []; this.renderer._hiBandGridData = []; this.renderer._lowBandGridData = []; this.renderer._hiBandSmoothedData = []; this.renderer._lowBandSmoothedData = []; this.renderer.bandData = []; this.renderer.bands = { show: false, hiData: [], lowData: [], color: this.color, showLines: false, fill: true, fillColor: null, _min: null, _max: null, interval: "3%" }; var af = { highlightMouseOver: ac.highlightMouseOver, highlightMouseDown: ac.highlightMouseDown, highlightColor: ac.highlightColor }; delete(ac.highlightMouseOver); delete(ac.highlightMouseDown); delete(ac.highlightColor); H.extend(true, this.renderer, ac); this.renderer.options = ac; if (this.renderer.bandData.length > 1 && (!ac.bands || ac.bands.show == null)) { this.renderer.bands.show = true } else { if (ac.bands && ac.bands.show == null && ac.bands.interval != null) { this.renderer.bands.show = true } } if (this.fill) { this.renderer.bands.show = false } if (this.renderer.bands.show) { this.renderer.initBands.call(this, this.renderer.options, ah) } if (this._stack) { this.renderer.smooth = false } var ag = { lineJoin: this.lineJoin, lineCap: this.lineCap, fill: this.fill, isarc: false, strokeStyle: this.color, fillStyle: this.fillColor, lineWidth: this.lineWidth, linePattern: this.linePattern, closePath: this.fill }; this.renderer.shapeRenderer.init(ag); var ad = ac.shadowOffset; if (ad == null) { if (this.lineWidth > 2.5) { ad = 1.25 * (1 + (Math.atan((this.lineWidth / 2.5)) / 0.785398163 - 1) * 0.6) } else { ad = 1.25 * Math.atan((this.lineWidth / 2.5)) / 0.785398163 } } var ab = { lineJoin: this.lineJoin, lineCap: this.lineCap, fill: this.fill, isarc: false, angle: this.shadowAngle, offset: ad, alpha: this.shadowAlpha, depth: this.shadowDepth, lineWidth: this.lineWidth, linePattern: this.linePattern, closePath: this.fill }; this.renderer.shadowRenderer.init(ab); this._areaPoints = []; this._boundingBox = [ [], [] ]; if (!this.isTrendline && this.fill || this.renderer.bands.show) { this.highlightMouseOver = true; this.highlightMouseDown = false; this.highlightColor = null; if (af.highlightMouseDown && af.highlightMouseOver == null) { af.highlightMouseOver = false } H.extend(true, this, { highlightMouseOver: af.highlightMouseOver, highlightMouseDown: af.highlightMouseDown, highlightColor: af.highlightColor }); if (!this.highlightColor) { var ae = (this.renderer.bands.show) ? this.renderer.bands.fillColor : this.fillColor; this.highlightColor = H.jqplot.computeHighlightColors(ae) } if (this.highlighter) { this.highlighter.show = false } } if (!this.isTrendline && ah) { ah.plugins.lineRenderer = {}; ah.postInitHooks.addOnce(v); ah.postDrawHooks.addOnce(Z); ah.eventListenerHooks.addOnce("jqplotMouseMove", g); ah.eventListenerHooks.addOnce("jqplotMouseDown", d); ah.eventListenerHooks.addOnce("jqplotMouseUp", Y); ah.eventListenerHooks.addOnce("jqplotClick", f); ah.eventListenerHooks.addOnce("jqplotRightClick", p) } }; H.jqplot.LineRenderer.prototype.initBands = function(ae, ao) { var af = ae.bandData || []; var ah = this.renderer.bands; ah.hiData = []; ah.lowData = []; var av = this.data; ah._max = null; ah._min = null; if (af.length == 2) { if (H.isArray(af[0][0])) { var ai; var ab = 0, al = 0; for (var ap = 0, am = af[0].length; ap < am; ap++) { ai = af[0][ap]; if ((ai[1] != null && ai[1] > ah._max) || ah._max == null) { ah._max = ai[1] } if ((ai[1] != null && ai[1] < ah._min) || ah._min == null) { ah._min = ai[1] } } for (var ap = 0, am = af[1].length; ap < am; ap++) { ai = af[1][ap]; if ((ai[1] != null && ai[1] > ah._max) || ah._max == null) { ah._max = ai[1]; al = 1 } if ((ai[1] != null && ai[1] < ah._min) || ah._min == null) { ah._min = ai[1]; ab = 1 } } if (al === ab) { ah.show = false } ah.hiData = af[al]; ah.lowData = af[ab] } else { if (af[0].length === av.length && af[1].length === av.length) { var ad = (af[0][0] > af[1][0]) ? 0 : 1; var aw = (ad) ? 0 : 1; for (var ap = 0, am = av.length; ap < am; ap++) { ah.hiData.push([av[ap][0], af[ad][ap]]); ah.lowData.push([av[ap][0], af[aw][ap]]) } } else { ah.show = false } } } else { if (af.length > 2 && !H.isArray(af[0][0])) { var ad = (af[0][0] > af[0][1]) ? 0 : 1; var aw = (ad) ? 0 : 1; for (var ap = 0, am = af.length; ap < am; ap++) { ah.hiData.push([av[ap][0], af[ap][ad]]); ah.lowData.push([av[ap][0], af[ap][aw]]) } } else { var ak = ah.interval; var au = null; var at = null; var ac = null; var an = null; if (H.isArray(ak)) { au = ak[0]; at = ak[1] } else { au = ak } if (isNaN(au)) { if (au.charAt(au.length - 1) === "%") { ac = "multiply"; au = parseFloat(au) / 100 + 1 } } else { au = parseFloat(au); ac = "add" } if (at !== null && isNaN(at)) { if (at.charAt(at.length - 1) === "%") { an = "multiply"; at = parseFloat(at) / 100 + 1 } } else { if (at !== null) { at = parseFloat(at); an = "add" } } if (au !== null) { if (at === null) { at = -au; an = ac; if (an === "multiply") { at += 2 } } if (au < at) { var aq = au; au = at; at = aq; aq = ac; ac = an; an = aq } for (var ap = 0, am = av.length; ap < am; ap++) { switch (ac) { case "add": ah.hiData.push([av[ap][0], av[ap][1] + au]); break; case "multiply": ah.hiData.push([av[ap][0], av[ap][1] * au]); break } switch (an) { case "add": ah.lowData.push([av[ap][0], av[ap][1] + at]); break; case "multiply": ah.lowData.push([av[ap][0], av[ap][1] * at]); break } } } else { ah.show = false } } } var ag = ah.hiData; var aj = ah.lowData; for (var ap = 0, am = ag.length; ap < am; ap++) { if ((ag[ap][1] != null && ag[ap][1] > ah._max) || ah._max == null) { ah._max = ag[ap][1] } } for (var ap = 0, am = aj.length; ap < am; ap++) { if ((aj[ap][1] != null && aj[ap][1] < ah._min) || ah._min == null) { ah._min = aj[ap][1] } } if (ah.fillColor === null) { var ar = H.jqplot.getColorComponents(ah.color); ar[3] = ar[3] * 0.5; ah.fillColor = "rgba(" + ar[0] + ", " + ar[1] + ", " + ar[2] + ", " + ar[3] + ")" } }; function G(ac, ab) { return (3.4182054 + ab) * Math.pow(ac, -0.3534992) } function k(ad, ac) { var ab = Math.sqrt(Math.pow((ac[0] - ad[0]), 2) + Math.pow((ac[1] - ad[1]), 2)); return 5.7648 * Math.log(ab) + 7.4456 } function w(ab) { var ac = (Math.exp(2 * ab) - 1) / (Math.exp(2 * ab) + 1); return ac } function F(aD) { var am = this.renderer.smooth; var ax = this.canvas.getWidth(); var ah = this._xaxis.series_p2u; var aA = this._yaxis.series_p2u; var az = null; var ag = null; var at = aD.length / ax; var ad = []; var ar = []; if (!isNaN(parseFloat(am))) { az = parseFloat(am) } else { az = G(at, 0.5) } var ap = []; var ae = []; for (var ay = 0, au = aD.length; ay < au; ay++) { ap.push(aD[ay][1]); ae.push(aD[ay][0]) } function ao(aE, aF) { if (aE - aF == 0) { return Math.pow(10, 10) } else { return aE - aF } } var aq, al, ak, aj; var ab = aD.length - 1; for (var af = 1, av = aD.length; af < av; af++) { var ac = []; var an = []; for (var aw = 0; aw < 2; aw++) { var ay = af - 1 + aw; if (ay == 0 || ay == ab) { ac[aw] = Math.pow(10, 10) } else { if (ap[ay + 1] - ap[ay] == 0 || ap[ay] - ap[ay - 1] == 0) { ac[aw] = 0 } else { if (((ae[ay + 1] - ae[ay]) / (ap[ay + 1] - ap[ay]) + (ae[ay] - ae[ay - 1]) / (ap[ay] - ap[ay - 1])) == 0) { ac[aw] = 0 } else { if ((ap[ay + 1] - ap[ay]) * (ap[ay] - ap[ay - 1]) < 0) { ac[aw] = 0 } else { ac[aw] = 2 / (ao(ae[ay + 1], ae[ay]) / (ap[ay + 1] - ap[ay]) + ao(ae[ay], ae[ay - 1]) / (ap[ay] - ap[ay - 1])) } } } } } if (af == 1) { ac[0] = 3 / 2 * (ap[1] - ap[0]) / ao(ae[1], ae[0]) - ac[1] / 2 } else { if (af == ab) { ac[1] = 3 / 2 * (ap[ab] - ap[ab - 1]) / ao(ae[ab], ae[ab - 1]) - ac[0] / 2 } } an[0] = -2 * (ac[1] + 2 * ac[0]) / ao(ae[af], ae[af - 1]) + 6 * (ap[af] - ap[af - 1]) / Math.pow(ao(ae[af], ae[af - 1]), 2); an[1] = 2 * (2 * ac[1] + ac[0]) / ao(ae[af], ae[af - 1]) - 6 * (ap[af] - ap[af - 1]) / Math.pow(ao(ae[af], ae[af - 1]), 2); aj = 1 / 6 * (an[1] - an[0]) / ao(ae[af], ae[af - 1]); ak = 1 / 2 * (ae[af] * an[0] - ae[af - 1] * an[1]) / ao(ae[af], ae[af - 1]); al = (ap[af] - ap[af - 1] - ak * (Math.pow(ae[af], 2) - Math.pow(ae[af - 1], 2)) - aj * (Math.pow(ae[af], 3) - Math.pow(ae[af - 1], 3))) / ao(ae[af], ae[af - 1]); aq = ap[af - 1] - al * ae[af - 1] - ak * Math.pow(ae[af - 1], 2) - aj * Math.pow(ae[af - 1], 3); var aC = (ae[af] - ae[af - 1]) / az; var aB, ai; for (var aw = 0, au = az; aw < au; aw++) { aB = []; ai = ae[af - 1] + aw * aC; aB.push(ai); aB.push(aq + al * ai + ak * Math.pow(ai, 2) + aj * Math.pow(ai, 3)); ad.push(aB); ar.push([ah(aB[0]), aA(aB[1])]) } } ad.push(aD[ay]); ar.push([ah(aD[ay][0]), aA(aD[ay][1])]); return [ad, ar] } function B(aj) { var ai = this.renderer.smooth; var aO = this.renderer.tension; var ab = this.canvas.getWidth(); var aB = this._xaxis.series_p2u; var ak = this._yaxis.series_p2u; var aC = null; var aD = null; var aN = null; var aI = null; var aG = null; var am = null; var aL = null; var ag = null; var aE, aF, ax, aw, au, ar; var ae, ac, ao, an; var av, at, aH; var ap = []; var ad = []; var af = aj.length / ab; var aM, aq, az, aA, ay; var al = []; var ah = []; if (!isNaN(parseFloat(ai))) { aC = parseFloat(ai) } else { aC = G(af, 0.5) } if (!isNaN(parseFloat(aO))) { aO = parseFloat(aO) } for (var aK = 0, aJ = aj.length - 1; aK < aJ; aK++) { if (aO === null) { am = Math.abs((aj[aK + 1][1] - aj[aK][1]) / (aj[aK + 1][0] - aj[aK][0])); aM = 0.3; aq = 0.6; az = (aq - aM) / 2; aA = 2.5; ay = -1.4; ag = am / aA + ay; aI = az * w(ag) - az * w(ay) + aM; if (aK > 0) { aL = Math.abs((aj[aK][1] - aj[aK - 1][1]) / (aj[aK][0] - aj[aK - 1][0])) } ag = aL / aA + ay; aG = az * w(ag) - az * w(ay) + aM; aN = (aI + aG) / 2 } else { aN = aO } for (aE = 0; aE < aC; aE++) { aF = aE / aC; ax = (1 + 2 * aF) * Math.pow((1 - aF), 2); aw = aF * Math.pow((1 - aF), 2); au = Math.pow(aF, 2) * (3 - 2 * aF); ar = Math.pow(aF, 2) * (aF - 1); if (aj[aK - 1]) { ae = aN * (aj[aK + 1][0] - aj[aK - 1][0]); ac = aN * (aj[aK + 1][1] - aj[aK - 1][1]) } else { ae = aN * (aj[aK + 1][0] - aj[aK][0]); ac = aN * (aj[aK + 1][1] - aj[aK][1]) } if (aj[aK + 2]) { ao = aN * (aj[aK + 2][0] - aj[aK][0]); an = aN * (aj[aK + 2][1] - aj[aK][1]) } else { ao = aN * (aj[aK + 1][0] - aj[aK][0]); an = aN * (aj[aK + 1][1] - aj[aK][1]) } av = ax * aj[aK][0] + au * aj[aK + 1][0] + aw * ae + ar * ao; at = ax * aj[aK][1] + au * aj[aK + 1][1] + aw * ac + ar * an; aH = [av, at]; al.push(aH); ah.push([aB(av), ak(at)]) } } al.push(aj[aJ]); ah.push([aB(aj[aJ][0]), ak(aj[aJ][1])]); return [al, ah] } H.jqplot.LineRenderer.prototype.setGridData = function(aj) { var af = this._xaxis.series_u2p; var ab = this._yaxis.series_u2p; var ag = this._plotData; var ak = this._prevPlotData; this.gridData = []; this._prevGridData = []; this.renderer._smoothedData = []; this.renderer._smoothedPlotData = []; this.renderer._hiBandGridData = []; this.renderer._lowBandGridData = []; this.renderer._hiBandSmoothedData = []; this.renderer._lowBandSmoothedData = []; var ae = this.renderer.bands; var ac = false; for (var ah = 0, ad = this.data.length; ah < ad; ah++) { if (ag[ah][0] != null && ag[ah][1] != null) { this.gridData.push([af.call(this._xaxis, ag[ah][0]), ab.call(this._yaxis, ag[ah][1])]) } else { if (ag[ah][0] == null) { ac = true; this.gridData.push([null, ab.call(this._yaxis, ag[ah][1])]) } else { if (ag[ah][1] == null) { ac = true; this.gridData.push([af.call(this._xaxis, ag[ah][0]), null]) } } } if (ak[ah] != null && ak[ah][0] != null && ak[ah][1] != null) { this._prevGridData.push([af.call(this._xaxis, ak[ah][0]), ab.call(this._yaxis, ak[ah][1])]) } else { if (ak[ah] != null && ak[ah][0] == null) { this._prevGridData.push([null, ab.call(this._yaxis, ak[ah][1])]) } else { if (ak[ah] != null && ak[ah][0] != null && ak[ah][1] == null) { this._prevGridData.push([af.call(this._xaxis, ak[ah][0]), null]) } } } } if (ac) { this.renderer.smooth = false; if (this._type === "line") { ae.show = false } } if (this._type === "line" && ae.show) { for (var ah = 0, ad = ae.hiData.length; ah < ad; ah++) { this.renderer._hiBandGridData.push([af.call(this._xaxis, ae.hiData[ah][0]), ab.call(this._yaxis, ae.hiData[ah][1])]) } for (var ah = 0, ad = ae.lowData.length; ah < ad; ah++) { this.renderer._lowBandGridData.push([af.call(this._xaxis, ae.lowData[ah][0]), ab.call(this._yaxis, ae.lowData[ah][1])]) } } if (this._type === "line" && this.renderer.smooth && this.gridData.length > 2) { var ai; if (this.renderer.constrainSmoothing) { ai = F.call(this, this.gridData); this.renderer._smoothedData = ai[0]; this.renderer._smoothedPlotData = ai[1]; if (ae.show) { ai = F.call(this, this.renderer._hiBandGridData); this.renderer._hiBandSmoothedData = ai[0]; ai = F.call(this, this.renderer._lowBandGridData); this.renderer._lowBandSmoothedData = ai[0] } ai = null } else { ai = B.call(this, this.gridData); this.renderer._smoothedData = ai[0]; this.renderer._smoothedPlotData = ai[1]; if (ae.show) { ai = B.call(this, this.renderer._hiBandGridData); this.renderer._hiBandSmoothedData = ai[0]; ai = B.call(this, this.renderer._lowBandGridData); this.renderer._lowBandSmoothedData = ai[0] } ai = null } } }; H.jqplot.LineRenderer.prototype.makeGridData = function(ai, ak) { var ag = this._xaxis.series_u2p; var ab = this._yaxis.series_u2p; var al = []; var ad = []; this.renderer._smoothedData = []; this.renderer._smoothedPlotData = []; this.renderer._hiBandGridData = []; this.renderer._lowBandGridData = []; this.renderer._hiBandSmoothedData = []; this.renderer._lowBandSmoothedData = []; var af = this.renderer.bands; var ac = false; for (var ah = 0; ah < ai.length; ah++) { if (ai[ah][0] != null && ai[ah][1] != null) { al.push([ag.call(this._xaxis, ai[ah][0]), ab.call(this._yaxis, ai[ah][1])]) } else { if (ai[ah][0] == null) { ac = true; al.push([null, ab.call(this._yaxis, ai[ah][1])]) } else { if (ai[ah][1] == null) { ac = true; al.push([ag.call(this._xaxis, ai[ah][0]), null]) } } } } if (ac) { this.renderer.smooth = false; if (this._type === "line") { af.show = false } } if (this._type === "line" && af.show) { for (var ah = 0, ae = af.hiData.length; ah < ae; ah++) { this.renderer._hiBandGridData.push([ag.call(this._xaxis, af.hiData[ah][0]), ab.call(this._yaxis, af.hiData[ah][1])]) } for (var ah = 0, ae = af.lowData.length; ah < ae; ah++) { this.renderer._lowBandGridData.push([ag.call(this._xaxis, af.lowData[ah][0]), ab.call(this._yaxis, af.lowData[ah][1])]) } } if (this._type === "line" && this.renderer.smooth && al.length > 2) { var aj; if (this.renderer.constrainSmoothing) { aj = F.call(this, al); this.renderer._smoothedData = aj[0]; this.renderer._smoothedPlotData = aj[1]; if (af.show) { aj = F.call(this, this.renderer._hiBandGridData); this.renderer._hiBandSmoothedData = aj[0]; aj = F.call(this, this.renderer._lowBandGridData); this.renderer._lowBandSmoothedData = aj[0] } aj = null } else { aj = B.call(this, al); this.renderer._smoothedData = aj[0]; this.renderer._smoothedPlotData = aj[1]; if (af.show) { aj = B.call(this, this.renderer._hiBandGridData); this.renderer._hiBandSmoothedData = aj[0]; aj = B.call(this, this.renderer._lowBandGridData); this.renderer._lowBandSmoothedData = aj[0] } aj = null } } return al }; H.jqplot.LineRenderer.prototype.draw = function(aq, aC, ac, av) { var aw; var ak = H.extend(true, {}, ac); var ae = (ak.shadow != r) ? ak.shadow : this.shadow; var aD = (ak.showLine != r) ? ak.showLine : this.showLine; var au = (ak.fill != r) ? ak.fill : this.fill; var ab = (ak.fillAndStroke != r) ? ak.fillAndStroke : this.fillAndStroke; var al, ar, ao, ay; aq.save(); if (aC.length) { if (aD) { if (au) { if (this.fillToZero) { var az = this.negativeColor; if (!this.useNegativeColors) { az = ak.fillStyle } var ai = false; var aj = ak.fillStyle; if (ab) { var aB = aC.slice(0) } if (this.index == 0 || !this._stack) { var ap = []; var aF = (this.renderer.smooth) ? this.renderer._smoothedPlotData : this._plotData; this._areaPoints = []; var aA = this._yaxis.series_u2p(this.fillToValue); var ad = this._xaxis.series_u2p(this.fillToValue); ak.closePath = true; if (this.fillAxis == "y") { ap.push([aC[0][0], aA]); this._areaPoints.push([aC[0][0], aA]); for (var aw = 0; aw < aC.length - 1; aw++) { ap.push(aC[aw]); this._areaPoints.push(aC[aw]); if (aF[aw][1] * aF[aw + 1][1] < 0) { if (aF[aw][1] < 0) { ai = true; ak.fillStyle = az } else { ai = false; ak.fillStyle = aj } var ah = aC[aw][0] + (aC[aw + 1][0] - aC[aw][0]) * (aA - aC[aw][1]) / (aC[aw + 1][1] - aC[aw][1]); ap.push([ah, aA]); this._areaPoints.push([ah, aA]); if (ae) { this.renderer.shadowRenderer.draw(aq, ap, ak) } this.renderer.shapeRenderer.draw(aq, ap, ak); ap = [ [ah, aA] ] } } if (aF[aC.length - 1][1] < 0) { ai = true; ak.fillStyle = az } else { ai = false; ak.fillStyle = aj } ap.push(aC[aC.length - 1]); this._areaPoints.push(aC[aC.length - 1]); ap.push([aC[aC.length - 1][0], aA]); this._areaPoints.push([aC[aC.length - 1][0], aA]) } if (ae) { this.renderer.shadowRenderer.draw(aq, ap, ak) } this.renderer.shapeRenderer.draw(aq, ap, ak) } else { var an = this._prevGridData; for (var aw = an.length; aw > 0; aw--) { aC.push(an[aw - 1]) } if (ae) { this.renderer.shadowRenderer.draw(aq, aC, ak) } this._areaPoints = aC; this.renderer.shapeRenderer.draw(aq, aC, ak) } } else { if (ab) { var aB = aC.slice(0) } if (this.index == 0 || !this._stack) { var af = aq.canvas.height; aC.unshift([aC[0][0], af]); var ax = aC.length; aC.push([aC[ax - 1][0], af]) } else { var an = this._prevGridData; for (var aw = an.length; aw > 0; aw--) { aC.push(an[aw - 1]) } } this._areaPoints = aC; if (ae) { this.renderer.shadowRenderer.draw(aq, aC, ak) } this.renderer.shapeRenderer.draw(aq, aC, ak) } if (ab) { var at = H.extend(true, {}, ak, { fill: false, closePath: false }); this.renderer.shapeRenderer.draw(aq, aB, at); if (this.markerRenderer.show) { if (this.renderer.smooth) { aB = this.gridData } for (aw = 0; aw < aB.length; aw++) { this.markerRenderer.draw(aB[aw][0], aB[aw][1], aq, ak.markerOptions) } } } } else { if (this.renderer.bands.show) { var ag; var aE = H.extend(true, {}, ak); if (this.renderer.bands.showLines) { ag = (this.renderer.smooth) ? this.renderer._hiBandSmoothedData : this.renderer._hiBandGridData; this.renderer.shapeRenderer.draw(aq, ag, ak); ag = (this.renderer.smooth) ? this.renderer._lowBandSmoothedData : this.renderer._lowBandGridData; this.renderer.shapeRenderer.draw(aq, ag, aE) } if (this.renderer.bands.fill) { if (this.renderer.smooth) { ag = this.renderer._hiBandSmoothedData.concat(this.renderer._lowBandSmoothedData.reverse()) } else { ag = this.renderer._hiBandGridData.concat(this.renderer._lowBandGridData.reverse()) } this._areaPoints = ag; aE.closePath = true; aE.fill = true; aE.fillStyle = this.renderer.bands.fillColor; this.renderer.shapeRenderer.draw(aq, ag, aE) } } if (ae) { this.renderer.shadowRenderer.draw(aq, aC, ak) } this.renderer.shapeRenderer.draw(aq, aC, ak) } } var al = ao = ar = ay = null; for (aw = 0; aw < this._areaPoints.length; aw++) { var am = this._areaPoints[aw]; if (al > am[0] || al == null) { al = am[0] } if (ay < am[1] || ay == null) { ay = am[1] } if (ao < am[0] || ao == null) { ao = am[0] } if (ar > am[1] || ar == null) { ar = am[1] } } if (this.type === "line" && this.renderer.bands.show) { ay = this._yaxis.series_u2p(this.renderer.bands._min); ar = this._yaxis.series_u2p(this.renderer.bands._max) } this._boundingBox = [ [al, ay], [ao, ar] ]; if (this.markerRenderer.show && !au) { if (this.renderer.smooth) { aC = this.gridData } for (aw = 0; aw < aC.length; aw++) { if (aC[aw][0] != null && aC[aw][1] != null) { this.markerRenderer.draw(aC[aw][0], aC[aw][1], aq, ak.markerOptions) } } } } aq.restore() }; H.jqplot.LineRenderer.prototype.drawShadow = function(ab, ad, ac) {}; function v(ae, ad, ab) { for (var ac = 0; ac < this.series.length; ac++) { if (this.series[ac].renderer.constructor == H.jqplot.LineRenderer) { if (this.series[ac].highlightMouseOver) { this.series[ac].highlightMouseDown = false } } } } function Z() { if (this.plugins.lineRenderer && this.plugins.lineRenderer.highlightCanvas) { this.plugins.lineRenderer.highlightCanvas.resetCanvas(); this.plugins.lineRenderer.highlightCanvas = null } this.plugins.lineRenderer.highlightedSeriesIndex = null; this.plugins.lineRenderer.highlightCanvas = new H.jqplot.GenericCanvas(); this.eventCanvas._elem.before(this.plugins.lineRenderer.highlightCanvas.createElement(this._gridPadding, "jqplot-lineRenderer-highlight-canvas", this._plotDimensions, this)); this.plugins.lineRenderer.highlightCanvas.setContext(); this.eventCanvas._elem.bind("mouseleave", { plot: this }, function(ab) { V(ab.data.plot) }) } function X(ah, ag, ae, ad) { var ac = ah.series[ag]; var ab = ah.plugins.lineRenderer.highlightCanvas; ab._ctx.clearRect(0, 0, ab._ctx.canvas.width, ab._ctx.canvas.height); ac._highlightedPoint = ae; ah.plugins.lineRenderer.highlightedSeriesIndex = ag; var af = { fillStyle: ac.highlightColor }; if (ac.type === "line" && ac.renderer.bands.show) { af.fill = true; af.closePath = true } ac.renderer.shapeRenderer.draw(ab._ctx, ad, af); ab = null } function V(ad) { var ab = ad.plugins.lineRenderer.highlightCanvas; ab._ctx.clearRect(0, 0, ab._ctx.canvas.width, ab._ctx.canvas.height); for (var ac = 0; ac < ad.series.length; ac++) { ad.series[ac]._highlightedPoint = null } ad.plugins.lineRenderer.highlightedSeriesIndex = null; ad.target.trigger("jqplotDataUnhighlight"); ab = null } function g(af, ae, ai, ah, ag) { if (ah) { var ad = [ah.seriesIndex, ah.pointIndex, ah.data]; var ac = jQuery.Event("jqplotDataMouseOver"); ac.pageX = af.pageX; ac.pageY = af.pageY; ag.target.trigger(ac, ad); if (ag.series[ad[0]].highlightMouseOver && !(ad[0] == ag.plugins.lineRenderer.highlightedSeriesIndex)) { var ab = jQuery.Event("jqplotDataHighlight"); ab.pageX = af.pageX; ab.pageY = af.pageY; ag.target.trigger(ab, ad); X(ag, ah.seriesIndex, ah.pointIndex, ah.points) } } else { if (ah == null) { V(ag) } } } function d(ae, ad, ah, ag, af) { if (ag) { var ac = [ag.seriesIndex, ag.pointIndex, ag.data]; if (af.series[ac[0]].highlightMouseDown && !(ac[0] == af.plugins.lineRenderer.highlightedSeriesIndex)) { var ab = jQuery.Event("jqplotDataHighlight"); ab.pageX = ae.pageX; ab.pageY = ae.pageY; af.target.trigger(ab, ac); X(af, ag.seriesIndex, ag.pointIndex, ag.points) } } else { if (ag == null) { V(af) } } } function Y(ad, ac, ag, af, ae) { var ab = ae.plugins.lineRenderer.highlightedSeriesIndex; if (ab != null && ae.series[ab].highlightMouseDown) { V(ae) } } function f(ae, ad, ah, ag, af) { if (ag) { var ac = [ag.seriesIndex, ag.pointIndex, ag.data]; var ab = jQuery.Event("jqplotDataClick"); ab.pageX = ae.pageX; ab.pageY = ae.pageY; af.target.trigger(ab, ac) } } function p(af, ae, ai, ah, ag) { if (ah) { var ad = [ah.seriesIndex, ah.pointIndex, ah.data]; var ab = ag.plugins.lineRenderer.highlightedSeriesIndex; if (ab != null && ag.series[ab].highlightMouseDown) { V(ag) } var ac = jQuery.Event("jqplotDataRightClick"); ac.pageX = af.pageX; ac.pageY = af.pageY; ag.target.trigger(ac, ad) } } H.jqplot.LinearAxisRenderer = function() {}; H.jqplot.LinearAxisRenderer.prototype.init = function(ab) { this.breakPoints = null; this.breakTickLabel = "≈"; this.drawBaseline = true; this.baselineWidth = null; this.baselineColor = null; this.forceTickAt0 = false; this.forceTickAt100 = false; this.tickInset = 0; this.minorTicks = 0; this.alignTicks = false; this._autoFormatString = ""; this._overrideFormatString = false; this._scalefact = 1; H.extend(true, this, ab); if (this.breakPoints) { if (!H.isArray(this.breakPoints)) { this.breakPoints = null } else { if (this.breakPoints.length < 2 || this.breakPoints[1] <= this.breakPoints[0]) { this.breakPoints = null } } } if (this.numberTicks != null && this.numberTicks < 2) { this.numberTicks = 2 } this.resetDataBounds() }; H.jqplot.LinearAxisRenderer.prototype.draw = function(ab, ai) { if (this.show) { this.renderer.createTicks.call(this, ai); var ah = 0; var ac; if (this._elem) { this._elem.emptyForce(); this._elem = null } this._elem = H(document.createElement("div")); this._elem.addClass("jqplot-axis jqplot-" + this.name); this._elem.css("position", "absolute"); if (this.name == "xaxis" || this.name == "x2axis") { this._elem.width(this._plotDimensions.width) } else { this._elem.height(this._plotDimensions.height) } this.labelOptions.axis = this.name; this._label = new this.labelRenderer(this.labelOptions); if (this._label.show) { var ag = this._label.draw(ab, ai); ag.appendTo(this._elem); ag = null } var af = this._ticks; var ae; for (var ad = 0; ad < af.length; ad++) { ae = af[ad]; if (ae.show && ae.showLabel && (!ae.isMinorTick || this.showMinorTicks)) { this._elem.append(ae.draw(ab, ai)) } } ae = null; af = null } return this._elem }; H.jqplot.LinearAxisRenderer.prototype.reset = function() { this.min = this._options.min; this.max = this._options.max; this.tickInterval = this._options.tickInterval; this.numberTicks = this._options.numberTicks; this._autoFormatString = ""; if (this._overrideFormatString && this.tickOptions && this.tickOptions.formatString) { this.tickOptions.formatString = "" } }; H.jqplot.LinearAxisRenderer.prototype.set = function() { var ai = 0; var ad; var ac = 0; var ah = 0; var ab = (this._label == null) ? false : this._label.show; if (this.show) { var ag = this._ticks; var af; for (var ae = 0; ae < ag.length; ae++) { af = ag[ae]; if (!af._breakTick && af.show && af.showLabel && (!af.isMinorTick || this.showMinorTicks)) { if (this.name == "xaxis" || this.name == "x2axis") { ad = af._elem.outerHeight(true) } else { ad = af._elem.outerWidth(true) } if (ad > ai) { ai = ad } } } af = null; ag = null; if (ab) { ac = this._label._elem.outerWidth(true); ah = this._label._elem.outerHeight(true) } if (this.name == "xaxis") { ai = ai + ah; this._elem.css({ height: ai + "px", left: "0px", bottom: "0px" }) } else { if (this.name == "x2axis") { ai = ai + ah; this._elem.css({ height: ai + "px", left: "0px", top: "0px" }) } else { if (this.name == "yaxis") { ai = ai + ac; this._elem.css({ width: ai + "px", left: "0px", top: "0px" }); if (ab && this._label.constructor == H.jqplot.AxisLabelRenderer) { this._label._elem.css("width", ac + "px") } } else { ai = ai + ac; this._elem.css({ width: ai + "px", right: "0px", top: "0px" }); if (ab && this._label.constructor == H.jqplot.AxisLabelRenderer) { this._label._elem.css("width", ac + "px") } } } } } }; H.jqplot.LinearAxisRenderer.prototype.createTicks = function(ad) { var aM = this._ticks; var aD = this.ticks; var at = this.name; var av = this._dataBounds; var ab = (this.name.charAt(0) === "x") ? this._plotDimensions.width : this._plotDimensions.height; var ah; var aY, aB; var aj, ai; var aW, aT; var aA = this.min; var aX = this.max; var aP = this.numberTicks; var a2 = this.tickInterval; var ag = 30; this._scalefact = (Math.max(ab, ag + 1) - ag) / 300; if (aD.length) { for (aT = 0; aT < aD.length; aT++) { var aH = aD[aT]; var aN = new this.tickRenderer(this.tickOptions); if (H.isArray(aH)) { aN.value = aH[0]; if (this.breakPoints) { if (aH[0] == this.breakPoints[0]) { aN.label = this.breakTickLabel; aN._breakTick = true; aN.showGridline = false; aN.showMark = false } else { if (aH[0] > this.breakPoints[0] && aH[0] <= this.breakPoints[1]) { aN.show = false; aN.showGridline = false; aN.label = aH[1] } else { aN.label = aH[1] } } } else { aN.label = aH[1] } aN.setTick(aH[0], this.name); this._ticks.push(aN) } else { if (H.isPlainObject(aH)) { H.extend(true, aN, aH); aN.axis = this.name; this._ticks.push(aN) } else { aN.value = aH; if (this.breakPoints) { if (aH == this.breakPoints[0]) { aN.label = this.breakTickLabel; aN._breakTick = true; aN.showGridline = false; aN.showMark = false } else { if (aH > this.breakPoints[0] && aH <= this.breakPoints[1]) { aN.show = false; aN.showGridline = false } } } aN.setTick(aH, this.name); this._ticks.push(aN) } } } this.numberTicks = aD.length; this.min = this._ticks[0].value; this.max = this._ticks[this.numberTicks - 1].value; this.tickInterval = (this.max - this.min) / (this.numberTicks - 1) } else { if (at == "xaxis" || at == "x2axis") { ab = this._plotDimensions.width } else { ab = this._plotDimensions.height } var aq = this.numberTicks; if (this.alignTicks) { if (this.name === "x2axis" && ad.axes.xaxis.show) { aq = ad.axes.xaxis.numberTicks } else { if (this.name.charAt(0) === "y" && this.name !== "yaxis" && this.name !== "yMidAxis" && ad.axes.yaxis.show) { aq = ad.axes.yaxis.numberTicks } } } aY = ((this.min != null) ? this.min : av.min); aB = ((this.max != null) ? this.max : av.max); var ao = aB - aY; var aL, ar; var am; if (this.tickOptions == null || !this.tickOptions.formatString) { this._overrideFormatString = true } if (this.min == null && this.max == null && this.tickInterval == null && !this.autoscale) { if (this.forceTickAt0) { if (aY > 0) { aY = 0 } if (aB < 0) { aB = 0 } } if (this.forceTickAt100) { if (aY > 100) { aY = 100 } if (aB < 100) { aB = 100 } } var aI = H.jqplot.LinearTickGenerator(aY, aB, this._scalefact, aq); var ap = aY + ao * (this.padMin - 1); var aJ = aB - ao * (this.padMax - 1); if (aY < ap || aB > aJ) { ap = aY - ao * (this.padMin - 1); aJ = aB + ao * (this.padMax - 1); aI = H.jqplot.LinearTickGenerator(ap, aJ, this._scalefact, aq) } this.min = aI[0]; this.max = aI[1]; this.numberTicks = aI[2]; this._autoFormatString = aI[3]; this.tickInterval = aI[4] } else { if (aY == aB) { var ac = 0.05; if (aY > 0) { ac = Math.max(Math.log(aY) / Math.LN10, 0.05) } aY -= ac; aB += ac } if (this.autoscale && this.min == null && this.max == null) { var ae, af, al; var aw = false; var aG = false; var au = { min: null, max: null, average: null, stddev: null }; for (var aT = 0; aT < this._series.length; aT++) { var aO = this._series[aT]; var ax = (aO.fillAxis == "x") ? aO._xaxis.name : aO._yaxis.name; if (this.name == ax) { var aK = aO._plotValues[aO.fillAxis]; var az = aK[0]; var aU = aK[0]; for (var aS = 1; aS < aK.length; aS++) { if (aK[aS] < az) { az = aK[aS] } else { if (aK[aS] > aU) { aU = aK[aS] } } } var an = (aU - az) / aU; if (aO.renderer.constructor == H.jqplot.BarRenderer) { if (az >= 0 && (aO.fillToZero || an > 0.1)) { aw = true } else { aw = false; if (aO.fill && aO.fillToZero && az < 0 && aU > 0) { aG = true } else { aG = false } } } else { if (aO.fill) { if (az >= 0 && (aO.fillToZero || an > 0.1)) { aw = true } else { if (az < 0 && aU > 0 && aO.fillToZero) { aw = false; aG = true } else { aw = false; aG = false } } } else { if (az < 0) { aw = false } } } } } if (aw) { this.numberTicks = 2 + Math.ceil((ab - (this.tickSpacing - 1)) / this.tickSpacing); this.min = 0; aA = 0; af = aB / (this.numberTicks - 1); am = Math.pow(10, Math.abs(Math.floor(Math.log(af) / Math.LN10))); if (af / am == parseInt(af / am, 10)) { af += am } this.tickInterval = Math.ceil(af / am) * am; this.max = this.tickInterval * (this.numberTicks - 1) } else { if (aG) { this.numberTicks = 2 + Math.ceil((ab - (this.tickSpacing - 1)) / this.tickSpacing); var aC = Math.ceil(Math.abs(aY) / ao * (this.numberTicks - 1)); var a1 = this.numberTicks - 1 - aC; af = Math.max(Math.abs(aY / aC), Math.abs(aB / a1)); am = Math.pow(10, Math.abs(Math.floor(Math.log(af) / Math.LN10))); this.tickInterval = Math.ceil(af / am) * am; this.max = this.tickInterval * a1; this.min = -this.tickInterval * aC } else { if (this.numberTicks == null) { if (this.tickInterval) { this.numberTicks = 3 + Math.ceil(ao / this.tickInterval) } else { this.numberTicks = 2 + Math.ceil((ab - (this.tickSpacing - 1)) / this.tickSpacing) } } if (this.tickInterval == null) { af = ao / (this.numberTicks - 1); if (af < 1) { am = Math.pow(10, Math.abs(Math.floor(Math.log(af) / Math.LN10))) } else { am = 1 } this.tickInterval = Math.ceil(af * am * this.pad) / am } else { am = 1 / this.tickInterval } ae = this.tickInterval * (this.numberTicks - 1); al = (ae - ao) / 2; if (this.min == null) { this.min = Math.floor(am * (aY - al)) / am } if (this.max == null) { this.max = this.min + ae } } } var ay = H.jqplot.getSignificantFigures(this.tickInterval); var aF; if (ay.digitsLeft >= ay.significantDigits) { aF = "%d" } else { var am = Math.max(0, 5 - ay.digitsLeft); am = Math.min(am, ay.digitsRight); aF = "%." + am + "f" } this._autoFormatString = aF } else { aL = (this.min != null) ? this.min : aY - ao * (this.padMin - 1); ar = (this.max != null) ? this.max : aB + ao * (this.padMax - 1); ao = ar - aL; if (this.numberTicks == null) { if (this.tickInterval != null) { this.numberTicks = Math.ceil((ar - aL) / this.tickInterval) + 1 } else { if (ab > 100) { this.numberTicks = parseInt(3 + (ab - 100) / 75, 10) } else { this.numberTicks = 2 } } } if (this.tickInterval == null) { this.tickInterval = ao / (this.numberTicks - 1) } if (this.max == null) { ar = aL + this.tickInterval * (this.numberTicks - 1) } if (this.min == null) { aL = ar - this.tickInterval * (this.numberTicks - 1) } var ay = H.jqplot.getSignificantFigures(this.tickInterval); var aF; if (ay.digitsLeft >= ay.significantDigits) { aF = "%d" } else { var am = Math.max(0, 5 - ay.digitsLeft); am = Math.min(am, ay.digitsRight); aF = "%." + am + "f" } this._autoFormatString = aF; this.min = aL; this.max = ar } if (this.renderer.constructor == H.jqplot.LinearAxisRenderer && this._autoFormatString == "") { ao = this.max - this.min; var aZ = new this.tickRenderer(this.tickOptions); var aE = aZ.formatString || H.jqplot.config.defaultTickFormatString; var aE = aE.match(H.jqplot.sprintf.regex)[0]; var aV = 0; if (aE) { if (aE.search(/[fFeEgGpP]/) > -1) { var aR = aE.match(/\%\.(\d{0,})?[eEfFgGpP]/); if (aR) { aV = parseInt(aR[1], 10) } else { aV = 6 } } else { if (aE.search(/[di]/) > -1) { aV = 0 } } var ak = Math.pow(10, -aV); if (this.tickInterval < ak) { if (aP == null && a2 == null) { this.tickInterval = ak; if (aX == null && aA == null) { this.min = Math.floor(this._dataBounds.min / ak) * ak; if (this.min == this._dataBounds.min) { this.min = this._dataBounds.min - this.tickInterval } this.max = Math.ceil(this._dataBounds.max / ak) * ak; if (this.max == this._dataBounds.max) { this.max = this._dataBounds.max + this.tickInterval } var aQ = (this.max - this.min) / this.tickInterval; aQ = aQ.toFixed(11); aQ = Math.ceil(aQ); this.numberTicks = aQ + 1 } else { if (aX == null) { var aQ = (this._dataBounds.max - this.min) / this.tickInterval; aQ = aQ.toFixed(11); this.numberTicks = Math.ceil(aQ) + 2; this.max = this.min + this.tickInterval * (this.numberTicks - 1) } else { if (aA == null) { var aQ = (this.max - this._dataBounds.min) / this.tickInterval; aQ = aQ.toFixed(11); this.numberTicks = Math.ceil(aQ) + 2; this.min = this.max - this.tickInterval * (this.numberTicks - 1) } else { this.numberTicks = Math.ceil((aX - aA) / this.tickInterval) + 1; this.min = Math.floor(aA * Math.pow(10, aV)) / Math.pow(10, aV); this.max = Math.ceil(aX * Math.pow(10, aV)) / Math.pow(10, aV); this.numberTicks = Math.ceil((this.max - this.min) / this.tickInterval) + 1 } } } } } } } } if (this._overrideFormatString && this._autoFormatString != "") { this.tickOptions = this.tickOptions || {}; this.tickOptions.formatString = this._autoFormatString } var aN, a0; for (var aT = 0; aT < this.numberTicks; aT++) { aW = this.min + aT * this.tickInterval; aN = new this.tickRenderer(this.tickOptions); aN.setTick(aW, this.name); this._ticks.push(aN); if (aT < this.numberTicks - 1) { for (var aS = 0; aS < this.minorTicks; aS++) { aW += this.tickInterval / (this.minorTicks + 1); a0 = H.extend(true, {}, this.tickOptions, { name: this.name, value: aW, label: "", isMinorTick: true }); aN = new this.tickRenderer(a0); this._ticks.push(aN) } } aN = null } } if (this.tickInset) { this.min = this.min - this.tickInset * this.tickInterval; this.max = this.max + this.tickInset * this.tickInterval } aM = null }; H.jqplot.LinearAxisRenderer.prototype.resetTickValues = function(ad) { if (H.isArray(ad) && ad.length == this._ticks.length) { var ac; for (var ab = 0; ab < ad.length; ab++) { ac = this._ticks[ab]; ac.value = ad[ab]; ac.label = ac.formatter(ac.formatString, ad[ab]); ac.label = ac.prefix + ac.label; ac._elem.html(ac.label) } ac = null; this.min = H.jqplot.arrayMin(ad); this.max = H.jqplot.arrayMax(ad); this.pack() } }; H.jqplot.LinearAxisRenderer.prototype.pack = function(ad, ac) { ad = ad || {}; ac = ac || this._offsets; var ar = this._ticks; var an = this.max; var am = this.min; var ai = ac.max; var ag = ac.min; var ak = (this._label == null) ? false : this._label.show; for (var al in ad) { this._elem.css(al, ad[al]) } this._offsets = ac; var ae = ai - ag; var af = an - am; if (this.breakPoints) { af = af - this.breakPoints[1] + this.breakPoints[0]; this.p2u = function(au) { return (au - ag) * af / ae + am }; this.u2p = function(au) { if (au > this.breakPoints[0] && au < this.breakPoints[1]) { au = this.breakPoints[0] } if (au <= this.breakPoints[0]) { return (au - am) * ae / af + ag } else { return (au - this.breakPoints[1] + this.breakPoints[0] - am) * ae / af + ag } }; if (this.name.charAt(0) == "x") { this.series_u2p = function(au) { if (au > this.breakPoints[0] && au < this.breakPoints[1]) { au = this.breakPoints[0] } if (au <= this.breakPoints[0]) { return (au - am) * ae / af } else { return (au - this.breakPoints[1] + this.breakPoints[0] - am) * ae / af } }; this.series_p2u = function(au) { return au * af / ae + am } } else { this.series_u2p = function(au) { if (au > this.breakPoints[0] && au < this.breakPoints[1]) { au = this.breakPoints[0] } if (au >= this.breakPoints[1]) { return (au - an) * ae / af } else { return (au + this.breakPoints[1] - this.breakPoints[0] - an) * ae / af } }; this.series_p2u = function(au) { return au * af / ae + an } } } else { this.p2u = function(au) { return (au - ag) * af / ae + am }; this.u2p = function(au) { return (au - am) * ae / af + ag }; if (this.name == "xaxis" || this.name == "x2axis") { this.series_u2p = function(au) { return (au - am) * ae / af }; this.series_p2u = function(au) { return au * af / ae + am } } else { this.series_u2p = function(au) { return (au - an) * ae / af }; this.series_p2u = function(au) { return au * af / ae + an } } } if (this.show) { if (this.name == "xaxis" || this.name == "x2axis") { for (var ao = 0; ao < ar.length; ao++) { var aj = ar[ao]; if (aj.show && aj.showLabel) { var ab; if (aj.constructor == H.jqplot.CanvasAxisTickRenderer && aj.angle) { var aq = (this.name == "xaxis") ? 1 : -1; switch (aj.labelPosition) { case "auto": if (aq * aj.angle < 0) { ab = -aj.getWidth() + aj._textRenderer.height * Math.sin(-aj._textRenderer.angle) / 2 } else { ab = -aj._textRenderer.height * Math.sin(aj._textRenderer.angle) / 2 } break; case "end": ab = -aj.getWidth() + aj._textRenderer.height * Math.sin(-aj._textRenderer.angle) / 2; break; case "start": ab = -aj._textRenderer.height * Math.sin(aj._textRenderer.angle) / 2; break; case "middle": ab = -aj.getWidth() / 2 + aj._textRenderer.height * Math.sin(-aj._textRenderer.angle) / 2; break; default: ab = -aj.getWidth() / 2 + aj._textRenderer.height * Math.sin(-aj._textRenderer.angle) / 2; break } } else { ab = -aj.getWidth() / 2 } var at = this.u2p(aj.value) + ab + "px"; aj._elem.css("left", at); aj.pack() } } if (ak) { var ah = this._label._elem.outerWidth(true); this._label._elem.css("left", ag + ae / 2 - ah / 2 + "px"); if (this.name == "xaxis") { this._label._elem.css("bottom", "0px") } else { this._label._elem.css("top", "0px") } this._label.pack() } } else { for (var ao = 0; ao < ar.length; ao++) { var aj = ar[ao]; if (aj.show && aj.showLabel) { var ab; if (aj.constructor == H.jqplot.CanvasAxisTickRenderer && aj.angle) { var aq = (this.name == "yaxis") ? 1 : -1; switch (aj.labelPosition) { case "auto": case "end": if (aq * aj.angle < 0) { ab = -aj._textRenderer.height * Math.cos(-aj._textRenderer.angle) / 2 } else { ab = -aj.getHeight() + aj._textRenderer.height * Math.cos(aj._textRenderer.angle) / 2 } break; case "start": if (aj.angle > 0) { ab = -aj._textRenderer.height * Math.cos(-aj._textRenderer.angle) / 2 } else { ab = -aj.getHeight() + aj._textRenderer.height * Math.cos(aj._textRenderer.angle) / 2 } break; case "middle": ab = -aj.getHeight() / 2; break; default: ab = -aj.getHeight() / 2; break } } else { ab = -aj.getHeight() / 2 } var at = this.u2p(aj.value) + ab + "px"; aj._elem.css("top", at); aj.pack() } } if (ak) { var ap = this._label._elem.outerHeight(true); this._label._elem.css("top", ai - ae / 2 - ap / 2 + "px"); if (this.name == "yaxis") { this._label._elem.css("left", "0px") } else { this._label._elem.css("right", "0px") } this._label.pack() } } } ar = null }; function h(ac) { var ab; ac = Math.abs(ac); if (ac >= 10) { ab = "%d" } else { if (ac > 1) { if (ac === parseInt(ac, 10)) { ab = "%d" } else { ab = "%.1f" } } else { var ad = -Math.floor(Math.log(ac) / Math.LN10); ab = "%." + ad + "f" } } return ab } var a = [0.1, 0.2, 0.3, 0.4, 0.5, 0.8, 1, 2, 3, 4, 5]; var b = function(ac) { var ab = a.indexOf(ac); if (ab > 0) { return a[ab - 1] } else { return a[a.length - 1] / 100 } }; var i = function(ac) { var ab = a.indexOf(ac); if (ab < a.length - 1) { return a[ab + 1] } else { return a[0] * 100 } }; function c(af, an, am) { var ak = Math.floor(am / 2); var ac = Math.ceil(am * 1.5); var ae = Number.MAX_VALUE; var ab = (an - af); var aq; var aj; var al; var ap; var ah; var ar = H.jqplot.getSignificantFigures; var ai; var ao; for (var ag = 0, ad = ac - ak + 1; ag < ad; ag++) { ai = ak + ag; aq = ab / (ai - 1); aj = ar(aq); aq = Math.abs(am - ai) + aj.digitsRight; if (aq < ae) { ae = aq; al = ai; ao = aj.digitsRight } else { if (aq === ae) { if (aj.digitsRight < ao) { al = ai; ao = aj.digitsRight } } } } ap = Math.max(ao, Math.max(ar(af).digitsRight, ar(an).digitsRight)); if (ap === 0) { ah = "%d" } else { ah = "%." + ap + "f" } aq = ab / (al - 1); return [af, an, al, ah, aq] } function S(ac, af) { af = af || 7; var ae = ac / (af - 1); var ad = Math.pow(10, Math.floor(Math.log(ae) / Math.LN10)); var ag = ae / ad; var ab; if (ad < 1) { if (ag > 5) { ab = 10 * ad } else { if (ag > 2) { ab = 5 * ad } else { if (ag > 1) { ab = 2 * ad } else { ab = ad } } } } else { if (ag > 5) { ab = 10 * ad } else { if (ag > 4) { ab = 5 * ad } else { if (ag > 3) { ab = 4 * ad } else { if (ag > 2) { ab = 3 * ad } else { if (ag > 1) { ab = 2 * ad } else { ab = ad } } } } } } return ab } function M(ac, ab) { ab = ab || 1; var ae = Math.floor(Math.log(ac) / Math.LN10); var ag = Math.pow(10, ae); var af = ac / ag; var ad; af = af / ab; if (af <= 0.38) { ad = 0.1 } else { if (af <= 1.6) { ad = 0.2 } else { if (af <= 4) { ad = 0.5 } else { if (af <= 8) { ad = 1 } else { if (af <= 16) { ad = 2 } else { ad = 5 } } } } } return ad * ag } function t(ad, ac) { var af = Math.floor(Math.log(ad) / Math.LN10); var ah = Math.pow(10, af); var ag = ad / ah; var ab; var ae; ag = ag / ac; if (ag <= 0.38) { ae = 0.1 } else { if (ag <= 1.6) { ae = 0.2 } else { if (ag <= 4) { ae = 0.5 } else { if (ag <= 8) { ae = 1 } else { if (ag <= 16) { ae = 2 } else { ae = 5 } } } } } ab = ae * ah; return [ab, ae, ah] } H.jqplot.LinearTickGenerator = function(ag, ah, ad, ae) { if (ag === ah) { ah = (ah) ? 0 : 1 } ad = ad || 1; if (ah < ag) { var ai = ah; ah = ag; ag = ai } var ac = []; var aj = M(ah - ag, ad); if (ae == null) { ac[0] = Math.floor(ag / aj) * aj; ac[1] = Math.ceil(ah / aj) * aj; ac[2] = Math.round((ac[1] - ac[0]) / aj + 1); ac[3] = h(aj); ac[4] = aj } else { var af = []; af[0] = Math.floor(ag / aj) * aj; af[1] = Math.ceil(ah / aj) * aj; af[2] = Math.round((af[1] - af[0]) / aj + 1); af[3] = h(aj); af[4] = aj; if (af[2] === ae) { ac = af } else { var ab = S(af[1] - af[0], ae); ac[0] = af[0]; ac[2] = ae; ac[4] = ab; ac[3] = h(ab); ac[1] = ac[0] + (ac[2] - 1) * ac[4] } } return ac }; H.jqplot.LinearTickGenerator.bestLinearInterval = M; H.jqplot.LinearTickGenerator.bestInterval = S; H.jqplot.LinearTickGenerator.bestLinearComponents = t; H.jqplot.LinearTickGenerator.bestConstrainedInterval = c; H.jqplot.MarkerRenderer = function(ab) { this.show = true; this.style = "filledCircle"; this.lineWidth = 2; this.size = 9; this.color = "#666666"; this.shadow = true; this.shadowAngle = 45; this.shadowOffset = 1; this.shadowDepth = 3; this.shadowAlpha = "0.07"; this.shadowRenderer = new H.jqplot.ShadowRenderer(); this.shapeRenderer = new H.jqplot.ShapeRenderer(); H.extend(true, this, ab) }; H.jqplot.MarkerRenderer.prototype.init = function(ab) { H.extend(true, this, ab); var ad = { angle: this.shadowAngle, offset: this.shadowOffset, alpha: this.shadowAlpha, lineWidth: this.lineWidth, depth: this.shadowDepth, closePath: true }; if (this.style.indexOf("filled") != -1) { ad.fill = true } if (this.style.indexOf("ircle") != -1) { ad.isarc = true; ad.closePath = false } this.shadowRenderer.init(ad); var ac = { fill: false, isarc: false, strokeStyle: this.color, fillStyle: this.color, lineWidth: this.lineWidth, closePath: true }; if (this.style.indexOf("filled") != -1) { ac.fill = true } if (this.style.indexOf("ircle") != -1) { ac.isarc = true; ac.closePath = false } this.shapeRenderer.init(ac) }; H.jqplot.MarkerRenderer.prototype.drawDiamond = function(ad, ac, ag, af, ai) { var ab = 1.2; var aj = this.size / 2 / ab; var ah = this.size / 2 * ab; var ae = [ [ad - aj, ac], [ad, ac + ah], [ad + aj, ac], [ad, ac - ah] ]; if (this.shadow) { this.shadowRenderer.draw(ag, ae) } this.shapeRenderer.draw(ag, ae, ai) }; H.jqplot.MarkerRenderer.prototype.drawPlus = function(ae, ad, ah, ag, ak) { var ac = 1; var al = this.size / 2 * ac; var ai = this.size / 2 * ac; var aj = [ [ae, ad - ai], [ae, ad + ai] ]; var af = [ [ae + al, ad], [ae - al, ad] ]; var ab = H.extend(true, {}, this.options, { closePath: false }); if (this.shadow) { this.shadowRenderer.draw(ah, aj, { closePath: false }); this.shadowRenderer.draw(ah, af, { closePath: false }) } this.shapeRenderer.draw(ah, aj, ab); this.shapeRenderer.draw(ah, af, ab) }; H.jqplot.MarkerRenderer.prototype.drawX = function(ae, ad, ah, ag, ak) { var ac = 1; var al = this.size / 2 * ac; var ai = this.size / 2 * ac; var ab = H.extend(true, {}, this.options, { closePath: false }); var aj = [ [ae - al, ad - ai], [ae + al, ad + ai] ]; var af = [ [ae - al, ad + ai], [ae + al, ad - ai] ]; if (this.shadow) { this.shadowRenderer.draw(ah, aj, { closePath: false }); this.shadowRenderer.draw(ah, af, { closePath: false }) } this.shapeRenderer.draw(ah, aj, ab); this.shapeRenderer.draw(ah, af, ab) }; H.jqplot.MarkerRenderer.prototype.drawDash = function(ad, ac, ag, af, ai) { var ab = 1; var aj = this.size / 2 * ab; var ah = this.size / 2 * ab; var ae = [ [ad - aj, ac], [ad + aj, ac] ]; if (this.shadow) { this.shadowRenderer.draw(ag, ae) } this.shapeRenderer.draw(ag, ae, ai) }; H.jqplot.MarkerRenderer.prototype.drawLine = function(ag, af, ab, ae, ac) { var ad = [ag, af]; if (this.shadow) { this.shadowRenderer.draw(ab, ad) } this.shapeRenderer.draw(ab, ad, ac) }; H.jqplot.MarkerRenderer.prototype.drawSquare = function(ad, ac, ag, af, ai) { var ab = 1; var aj = this.size / 2 / ab; var ah = this.size / 2 * ab; var ae = [ [ad - aj, ac - ah], [ad - aj, ac + ah], [ad + aj, ac + ah], [ad + aj, ac - ah] ]; if (this.shadow) { this.shadowRenderer.draw(ag, ae) } this.shapeRenderer.draw(ag, ae, ai) }; H.jqplot.MarkerRenderer.prototype.drawCircle = function(ac, ai, ae, ah, af) { var ab = this.size / 2; var ad = 2 * Math.PI; var ag = [ac, ai, ab, 0, ad, true]; if (this.shadow) { this.shadowRenderer.draw(ae, ag) } this.shapeRenderer.draw(ae, ag, af) }; H.jqplot.MarkerRenderer.prototype.draw = function(ab, ae, ac, ad) { ad = ad || {}; if (ad.show == null || ad.show != false) { if (ad.color && !ad.fillStyle) { ad.fillStyle = ad.color } if (ad.color && !ad.strokeStyle) { ad.strokeStyle = ad.color } switch (this.style) { case "diamond": this.drawDiamond(ab, ae, ac, false, ad); break; case "filledDiamond": this.drawDiamond(ab, ae, ac, true, ad); break; case "circle": this.drawCircle(ab, ae, ac, false, ad); break; case "filledCircle": this.drawCircle(ab, ae, ac, true, ad); break; case "square": this.drawSquare(ab, ae, ac, false, ad); break; case "filledSquare": this.drawSquare(ab, ae, ac, true, ad); break; case "x": this.drawX(ab, ae, ac, true, ad); break; case "plus": this.drawPlus(ab, ae, ac, true, ad); break; case "dash": this.drawDash(ab, ae, ac, true, ad); break; case "line": this.drawLine(ab, ae, ac, false, ad); break; default: this.drawDiamond(ab, ae, ac, false, ad); break } } }; H.jqplot.ShadowRenderer = function(ab) { this.angle = 45; this.offset = 1; this.alpha = 0.07; this.lineWidth = 1.5; this.lineJoin = "miter"; this.lineCap = "round"; this.closePath = false; this.fill = false; this.depth = 3; this.strokeStyle = "rgba(0,0,0,0.1)"; this.isarc = false; H.extend(true, this, ab) }; H.jqplot.ShadowRenderer.prototype.init = function(ab) { H.extend(true, this, ab) }; H.jqplot.ShadowRenderer.prototype.draw = function(ao, am, aq) { ao.save(); var ab = (aq != null) ? aq : {}; var an = (ab.fill != null) ? ab.fill : this.fill; var aj = (ab.fillRect != null) ? ab.fillRect : this.fillRect; var ai = (ab.closePath != null) ? ab.closePath : this.closePath; var af = (ab.offset != null) ? ab.offset : this.offset; var ad = (ab.alpha != null) ? ab.alpha : this.alpha; var ah = (ab.depth != null) ? ab.depth : this.depth; var ap = (ab.isarc != null) ? ab.isarc : this.isarc; var ak = (ab.linePattern != null) ? ab.linePattern : this.linePattern; ao.lineWidth = (ab.lineWidth != null) ? ab.lineWidth : this.lineWidth; ao.lineJoin = (ab.lineJoin != null) ? ab.lineJoin : this.lineJoin; ao.lineCap = (ab.lineCap != null) ? ab.lineCap : this.lineCap; ao.strokeStyle = ab.strokeStyle || this.strokeStyle || "rgba(0,0,0," + ad + ")"; ao.fillStyle = ab.fillStyle || this.fillStyle || "rgba(0,0,0," + ad + ")"; for (var ae = 0; ae < ah; ae++) { var al = H.jqplot.LinePattern(ao, ak); ao.translate(Math.cos(this.angle * Math.PI / 180) * af, Math.sin(this.angle * Math.PI / 180) * af); al.beginPath(); if (ap) { ao.arc(am[0], am[1], am[2], am[3], am[4], true) } else { if (aj) { if (aj) { ao.fillRect(am[0], am[1], am[2], am[3]) } } else { if (am && am.length) { var ac = true; for (var ag = 0; ag < am.length; ag++) { if (am[ag][0] != null && am[ag][1] != null) { if (ac) { al.moveTo(am[ag][0], am[ag][1]); ac = false } else { al.lineTo(am[ag][0], am[ag][1]) } } else { ac = true } } } } } if (ai) { al.closePath() } if (an) { ao.fill() } else { ao.stroke() } } ao.restore() }; H.jqplot.ShapeRenderer = function(ab) { this.lineWidth = 1.5; this.linePattern = "solid"; this.lineJoin = "miter"; this.lineCap = "round"; this.closePath = false; this.fill = false; this.isarc = false; this.fillRect = false; this.strokeRect = false; this.clearRect = false; this.strokeStyle = "#999999"; this.fillStyle = "#999999"; H.extend(true, this, ab) }; H.jqplot.ShapeRenderer.prototype.init = function(ab) { H.extend(true, this, ab) }; H.jqplot.ShapeRenderer.prototype.draw = function(am, ak, ao) { am.save(); var ab = (ao != null) ? ao : {}; var al = (ab.fill != null) ? ab.fill : this.fill; var ag = (ab.closePath != null) ? ab.closePath : this.closePath; var ah = (ab.fillRect != null) ? ab.fillRect : this.fillRect; var ae = (ab.strokeRect != null) ? ab.strokeRect : this.strokeRect; var ac = (ab.clearRect != null) ? ab.clearRect : this.clearRect; var an = (ab.isarc != null) ? ab.isarc : this.isarc; var ai = (ab.linePattern != null) ? ab.linePattern : this.linePattern; var aj = H.jqplot.LinePattern(am, ai); am.lineWidth = ab.lineWidth || this.lineWidth; am.lineJoin = ab.lineJoin || this.lineJoin; am.lineCap = ab.lineCap || this.lineCap; am.strokeStyle = (ab.strokeStyle || ab.color) || this.strokeStyle; am.fillStyle = ab.fillStyle || this.fillStyle; am.beginPath(); if (an) { am.arc(ak[0], ak[1], ak[2], ak[3], ak[4], true); if (ag) { am.closePath() } if (al) { am.fill() } else { am.stroke() } am.restore(); return } else { if (ac) { am.clearRect(ak[0], ak[1], ak[2], ak[3]); am.restore(); return } else { if (ah || ae) { if (ah) { am.fillRect(ak[0], ak[1], ak[2], ak[3]) } if (ae) { am.strokeRect(ak[0], ak[1], ak[2], ak[3]); am.restore(); return } } else { if (ak && ak.length) { var ad = true; for (var af = 0; af < ak.length; af++) { if (ak[af][0] != null && ak[af][1] != null) { if (ad) { aj.moveTo(ak[af][0], ak[af][1]); ad = false } else { aj.lineTo(ak[af][0], ak[af][1]) } } else { ad = true } } if (ag) { aj.closePath() } if (al) { am.fill() } else { am.stroke() } } } } } am.restore() }; H.jqplot.TableLegendRenderer = function() {}; H.jqplot.TableLegendRenderer.prototype.init = function(ab) { H.extend(true, this, ab) }; H.jqplot.TableLegendRenderer.prototype.addrow = function(ak, ae, ab, ai) { var af = (ab) ? this.rowSpacing + "px" : "0px"; var aj; var ad; var ac; var ah; var ag; ac = document.createElement("tr"); aj = H(ac); aj.addClass("jqplot-table-legend"); ac = null; if (ai) { aj.prependTo(this._elem) } else { aj.appendTo(this._elem) } if (this.showSwatches) { ad = H(document.createElement("td")); ad.addClass("jqplot-table-legend jqplot-table-legend-swatch"); ad.css({ textAlign: "center", paddingTop: af }); ah = H(document.createElement("div")); ah.addClass("jqplot-table-legend-swatch-outline"); ag = H(document.createElement("div")); ag.addClass("jqplot-table-legend-swatch"); ag.css({ backgroundColor: ae, borderColor: ae }); aj.append(ad.append(ah.append(ag))) } if (this.showLabels) { ad = H(document.createElement("td")); ad.addClass("jqplot-table-legend jqplot-table-legend-label"); ad.css("paddingTop", af); aj.append(ad); if (this.escapeHtml) { ad.text(ak) } else { ad.html(ak) } } ad = null; ah = null; ag = null; aj = null; ac = null }; H.jqplot.TableLegendRenderer.prototype.draw = function() { if (this._elem) { this._elem.emptyForce(); this._elem = null } if (this.show) { var ag = this._series; var ac = document.createElement("table"); this._elem = H(ac); this._elem.addClass("jqplot-table-legend"); var al = { position: "absolute" }; if (this.background) { al.background = this.background } if (this.border) { al.border = this.border } if (this.fontSize) { al.fontSize = this.fontSize } if (this.fontFamily) { al.fontFamily = this.fontFamily } if (this.textColor) { al.textColor = this.textColor } if (this.marginTop != null) { al.marginTop = this.marginTop } if (this.marginBottom != null) { al.marginBottom = this.marginBottom } if (this.marginLeft != null) { al.marginLeft = this.marginLeft } if (this.marginRight != null) { al.marginRight = this.marginRight } var ab = false, ai = false, ak; for (var ah = 0; ah < ag.length; ah++) { ak = ag[ah]; if (ak._stack || ak.renderer.constructor == H.jqplot.BezierCurveRenderer) { ai = true } if (ak.show && ak.showLabel) { var af = this.labels[ah] || ak.label.toString(); if (af) { var ad = ak.color; if (ai && ah < ag.length - 1) { ab = true } else { if (ai && ah == ag.length - 1) { ab = false } } this.renderer.addrow.call(this, af, ad, ab, ai); ab = true } for (var ae = 0; ae < H.jqplot.addLegendRowHooks.length; ae++) { var aj = H.jqplot.addLegendRowHooks[ae].call(this, ak); if (aj) { this.renderer.addrow.call(this, aj.label, aj.color, ab); ab = true } } af = null } } } return this._elem }; H.jqplot.TableLegendRenderer.prototype.pack = function(ad) { if (this.show) { if (this.placement == "insideGrid") { switch (this.location) { case "nw": var ac = ad.left; var ab = ad.top; this._elem.css("left", ac); this._elem.css("top", ab); break; case "n": var ac = (ad.left + (this._plotDimensions.width - ad.right)) / 2 - this.getWidth() / 2; var ab = ad.top; this._elem.css("left", ac); this._elem.css("top", ab); break; case "ne": var ac = ad.right; var ab = ad.top; this._elem.css({ right: ac, top: ab }); break; case "e": var ac = ad.right; var ab = (ad.top + (this._plotDimensions.height - ad.bottom)) / 2 - this.getHeight() / 2; this._elem.css({ right: ac, top: ab }); break; case "se": var ac = ad.right; var ab = ad.bottom; this._elem.css({ right: ac, bottom: ab }); break; case "s": var ac = (ad.left + (this._plotDimensions.width - ad.right)) / 2 - this.getWidth() / 2; var ab = ad.bottom; this._elem.css({ left: ac, bottom: ab }); break; case "sw": var ac = ad.left; var ab = ad.bottom; this._elem.css({ left: ac, bottom: ab }); break; case "w": var ac = ad.left; var ab = (ad.top + (this._plotDimensions.height - ad.bottom)) / 2 - this.getHeight() / 2; this._elem.css({ left: ac, top: ab }); break; default: var ac = ad.right; var ab = ad.bottom; this._elem.css({ right: ac, bottom: ab }); break } } else { if (this.placement == "outside") { switch (this.location) { case "nw": var ac = this._plotDimensions.width - ad.left; var ab = ad.top; this._elem.css("right", ac); this._elem.css("top", ab); break; case "n": var ac = (ad.left + (this._plotDimensions.width - ad.right)) / 2 - this.getWidth() / 2; var ab = this._plotDimensions.height - ad.top; this._elem.css("left", ac); this._elem.css("bottom", ab); break; case "ne": var ac = this._plotDimensions.width - ad.right; var ab = ad.top; this._elem.css({ left: ac, top: ab }); break; case "e": var ac = this._plotDimensions.width - ad.right; var ab = (ad.top + (this._plotDimensions.height - ad.bottom)) / 2 - this.getHeight() / 2; this._elem.css({ left: ac, top: ab }); break; case "se": var ac = this._plotDimensions.width - ad.right; var ab = ad.bottom; this._elem.css({ left: ac, bottom: ab }); break; case "s": var ac = (ad.left + (this._plotDimensions.width - ad.right)) / 2 - this.getWidth() / 2; var ab = this._plotDimensions.height - ad.bottom; this._elem.css({ left: ac, top: ab }); break; case "sw": var ac = this._plotDimensions.width - ad.left; var ab = ad.bottom; this._elem.css({ right: ac, bottom: ab }); break; case "w": var ac = this._plotDimensions.width - ad.left; var ab = (ad.top + (this._plotDimensions.height - ad.bottom)) / 2 - this.getHeight() / 2; this._elem.css({ right: ac, top: ab }); break; default: var ac = ad.right; var ab = ad.bottom; this._elem.css({ right: ac, bottom: ab }); break } } else { switch (this.location) { case "nw": this._elem.css({ left: 0, top: ad.top }); break; case "n": var ac = (ad.left + (this._plotDimensions.width - ad.right)) / 2 - this.getWidth() / 2; this._elem.css({ left: ac, top: ad.top }); break; case "ne": this._elem.css({ right: 0, top: ad.top }); break; case "e": var ab = (ad.top + (this._plotDimensions.height - ad.bottom)) / 2 - this.getHeight() / 2; this._elem.css({ right: ad.right, top: ab }); break; case "se": this._elem.css({ right: ad.right, bottom: ad.bottom }); break; case "s": var ac = (ad.left + (this._plotDimensions.width - ad.right)) / 2 - this.getWidth() / 2; this._elem.css({ left: ac, bottom: ad.bottom }); break; case "sw": this._elem.css({ left: ad.left, bottom: ad.bottom }); break; case "w": var ab = (ad.top + (this._plotDimensions.height - ad.bottom)) / 2 - this.getHeight() / 2; this._elem.css({ left: ad.left, top: ab }); break; default: this._elem.css({ right: ad.right, bottom: ad.bottom }); break } } } } }; H.jqplot.ThemeEngine = function() { this.themes = {}; this.activeTheme = null }; H.jqplot.ThemeEngine.prototype.init = function() { var ae = new H.jqplot.Theme({ _name: "Default" }); var ah, ac, ag; for (ah in ae.target) { if (ah == "textColor") { ae.target[ah] = this.target.css("color") } else { ae.target[ah] = this.target.css(ah) } } if (this.title.show && this.title._elem) { for (ah in ae.title) { if (ah == "textColor") { ae.title[ah] = this.title._elem.css("color") } else { ae.title[ah] = this.title._elem.css(ah) } } } for (ah in ae.grid) { ae.grid[ah] = this.grid[ah] } if (ae.grid.backgroundColor == null && this.grid.background != null) { ae.grid.backgroundColor = this.grid.background } if (this.legend.show && this.legend._elem) { for (ah in ae.legend) { if (ah == "textColor") { ae.legend[ah] = this.legend._elem.css("color") } else { ae.legend[ah] = this.legend._elem.css(ah) } } } var ad; for (ac = 0; ac < this.series.length; ac++) { ad = this.series[ac]; if (ad.renderer.constructor == H.jqplot.LineRenderer) { ae.series.push(new m()) } else { if (ad.renderer.constructor == H.jqplot.BarRenderer) { ae.series.push(new P()) } else { if (ad.renderer.constructor == H.jqplot.PieRenderer) { ae.series.push(new e()) } else { if (ad.renderer.constructor == H.jqplot.DonutRenderer) { ae.series.push(new C()) } else { if (ad.renderer.constructor == H.jqplot.FunnelRenderer) { ae.series.push(new U()) } else { if (ad.renderer.constructor == H.jqplot.MeterGaugeRenderer) { ae.series.push(new z()) } else { ae.series.push({}) } } } } } } for (ah in ae.series[ac]) { ae.series[ac][ah] = ad[ah] } } var ab, af; for (ah in this.axes) { af = this.axes[ah]; ab = ae.axes[ah] = new L(); ab.borderColor = af.borderColor; ab.borderWidth = af.borderWidth; if (af._ticks && af._ticks[0]) { for (ag in ab.ticks) { if (af._ticks[0].hasOwnProperty(ag)) { ab.ticks[ag] = af._ticks[0][ag] } else { if (af._ticks[0]._elem) { ab.ticks[ag] = af._ticks[0]._elem.css(ag) } } } } if (af._label && af._label.show) { for (ag in ab.label) { if (af._label[ag]) { ab.label[ag] = af._label[ag] } else { if (af._label._elem) { if (ag == "textColor") { ab.label[ag] = af._label._elem.css("color") } else { ab.label[ag] = af._label._elem.css(ag) } } } } } } this.themeEngine._add(ae); this.themeEngine.activeTheme = this.themeEngine.themes[ae._name] }; H.jqplot.ThemeEngine.prototype.get = function(ab) { if (!ab) { return this.activeTheme } else { return this.themes[ab] } }; function K(ac, ab) { return ac - ab } H.jqplot.ThemeEngine.prototype.getThemeNames = function() { var ab = []; for (var ac in this.themes) { ab.push(ac) } return ab.sort(K) }; H.jqplot.ThemeEngine.prototype.getThemes = function() { var ac = []; var ab = []; for (var ae in this.themes) { ac.push(ae) } ac.sort(K); for (var ad = 0; ad < ac.length; ad++) { ab.push(this.themes[ac[ad]]) } return ab }; H.jqplot.ThemeEngine.prototype.activate = function(ao, au) { var ab = false; if (!au && this.activeTheme && this.activeTheme._name) { au = this.activeTheme._name } if (!this.themes.hasOwnProperty(au)) { throw new Error("No theme of that name") } else { var ag = this.themes[au]; this.activeTheme = ag; var at, am = false, al = false; var ac = ["xaxis", "x2axis", "yaxis", "y2axis"]; for (ap = 0; ap < ac.length; ap++) { var ah = ac[ap]; if (ag.axesStyles.borderColor != null) { ao.axes[ah].borderColor = ag.axesStyles.borderColor } if (ag.axesStyles.borderWidth != null) { ao.axes[ah].borderWidth = ag.axesStyles.borderWidth } } for (var ar in ao.axes) { var ae = ao.axes[ar]; if (ae.show) { var ak = ag.axes[ar] || {}; var ai = ag.axesStyles; var af = H.jqplot.extend(true, {}, ak, ai); at = (ag.axesStyles.borderColor != null) ? ag.axesStyles.borderColor : af.borderColor; if (af.borderColor != null) { ae.borderColor = af.borderColor; ab = true } at = (ag.axesStyles.borderWidth != null) ? ag.axesStyles.borderWidth : af.borderWidth; if (af.borderWidth != null) { ae.borderWidth = af.borderWidth; ab = true } if (ae._ticks && ae._ticks[0]) { for (var ad in af.ticks) { at = af.ticks[ad]; if (at != null) { ae.tickOptions[ad] = at; ae._ticks = []; ab = true } } } if (ae._label && ae._label.show) { for (var ad in af.label) { at = af.label[ad]; if (at != null) { ae.labelOptions[ad] = at; ab = true } } } } } for (var an in ag.grid) { if (ag.grid[an] != null) { ao.grid[an] = ag.grid[an] } } if (!ab) { ao.grid.draw() } if (ao.legend.show) { for (an in ag.legend) { if (ag.legend[an] != null) { ao.legend[an] = ag.legend[an] } } } if (ao.title.show) { for (an in ag.title) { if (ag.title[an] != null) { ao.title[an] = ag.title[an] } } } var ap; for (ap = 0; ap < ag.series.length; ap++) { var aj = {}; var aq = false; for (an in ag.series[ap]) { at = (ag.seriesStyles[an] != null) ? ag.seriesStyles[an] : ag.series[ap][an]; if (at != null) { aj[an] = at; if (an == "color") { ao.series[ap].renderer.shapeRenderer.fillStyle = at; ao.series[ap].renderer.shapeRenderer.strokeStyle = at; ao.series[ap][an] = at } else { if ((an == "lineWidth") || (an == "linePattern")) { ao.series[ap].renderer.shapeRenderer[an] = at; ao.series[ap][an] = at } else { if (an == "markerOptions") { R(ao.series[ap].markerOptions, at); R(ao.series[ap].markerRenderer, at) } else { ao.series[ap][an] = at } } } ab = true } } } if (ab) { ao.target.empty(); ao.draw() } for (an in ag.target) { if (ag.target[an] != null) { ao.target.css(an, ag.target[an]) } } } }; H.jqplot.ThemeEngine.prototype._add = function(ac, ab) { if (ab) { ac._name = ab } if (!ac._name) { ac._name = Date.parse(new Date()) } if (!this.themes.hasOwnProperty(ac._name)) { this.themes[ac._name] = ac } else { throw new Error("jqplot.ThemeEngine Error: Theme already in use") } }; H.jqplot.ThemeEngine.prototype.remove = function(ab) { if (ab == "Default") { return false } return delete this.themes[ab] }; H.jqplot.ThemeEngine.prototype.newTheme = function(ab, ad) { if (typeof(ab) == "object") { ad = ad || ab; ab = null } if (ad && ad._name) { ab = ad._name } else { ab = ab || Date.parse(new Date()) } var ac = this.copy(this.themes.Default._name, ab); H.jqplot.extend(ac, ad); return ac }; function x(ad) { if (ad == null || typeof(ad) != "object") { return ad } var ab = new ad.constructor(); for (var ac in ad) { ab[ac] = x(ad[ac]) } return ab } H.jqplot.clone = x; function R(ad, ac) { if (ac == null || typeof(ac) != "object") { return } for (var ab in ac) { if (ab == "highlightColors") { ad[ab] = x(ac[ab]) } if (ac[ab] != null && typeof(ac[ab]) == "object") { if (!ad.hasOwnProperty(ab)) { ad[ab] = {} } R(ad[ab], ac[ab]) } else { ad[ab] = ac[ab] } } } H.jqplot.merge = R; H.jqplot.extend = function() { var ag = arguments[0] || {}, ae = 1, af = arguments.length, ab = false, ad; if (typeof ag === "boolean") { ab = ag; ag = arguments[1] || {}; ae = 2 } if (typeof ag !== "object" && !toString.call(ag) === "[object Function]") { ag = {} } for (; ae < af; ae++) { if ((ad = arguments[ae]) != null) { for (var ac in ad) { var ah = ag[ac], ai = ad[ac]; if (ag === ai) { continue } if (ab && ai && typeof ai === "object" && !ai.nodeType) { ag[ac] = H.jqplot.extend(ab, ah || (ai.length != null ? [] : {}), ai) } else { if (ai !== r) { ag[ac] = ai } } } } } return ag }; H.jqplot.ThemeEngine.prototype.rename = function(ac, ab) { if (ac == "Default" || ab == "Default") { throw new Error("jqplot.ThemeEngine Error: Cannot rename from/to Default") } if (this.themes.hasOwnProperty(ab)) { throw new Error("jqplot.ThemeEngine Error: New name already in use.") } else { if (this.themes.hasOwnProperty(ac)) { var ad = this.copy(ac, ab); this.remove(ac); return ad } } throw new Error("jqplot.ThemeEngine Error: Old name or new name invalid") }; H.jqplot.ThemeEngine.prototype.copy = function(ab, ad, af) { if (ad == "Default") { throw new Error("jqplot.ThemeEngine Error: Cannot copy over Default theme") } if (!this.themes.hasOwnProperty(ab)) { var ac = "jqplot.ThemeEngine Error: Source name invalid"; throw new Error(ac) } if (this.themes.hasOwnProperty(ad)) { var ac = "jqplot.ThemeEngine Error: Target name invalid"; throw new Error(ac) } else { var ae = x(this.themes[ab]); ae._name = ad; H.jqplot.extend(true, ae, af); this._add(ae); return ae } }; H.jqplot.Theme = function(ab, ac) { if (typeof(ab) == "object") { ac = ac || ab; ab = null } ab = ab || Date.parse(new Date()); this._name = ab; this.target = { backgroundColor: null }; this.legend = { textColor: null, fontFamily: null, fontSize: null, border: null, background: null }; this.title = { textColor: null, fontFamily: null, fontSize: null, textAlign: null }; this.seriesStyles = {}; this.series = []; this.grid = { drawGridlines: null, gridLineColor: null, gridLineWidth: null, backgroundColor: null, borderColor: null, borderWidth: null, shadow: null }; this.axesStyles = { label: {}, ticks: {} }; this.axes = {}; if (typeof(ac) == "string") { this._name = ac } else { if (typeof(ac) == "object") { H.jqplot.extend(true, this, ac) } } }; var L = function() { this.borderColor = null; this.borderWidth = null; this.ticks = new l(); this.label = new q() }; var l = function() { this.show = null; this.showGridline = null; this.showLabel = null; this.showMark = null; this.size = null; this.textColor = null; this.whiteSpace = null; this.fontSize = null; this.fontFamily = null }; var q = function() { this.textColor = null; this.whiteSpace = null; this.fontSize = null; this.fontFamily = null; this.fontWeight = null }; var m = function() { this.color = null; this.lineWidth = null; this.linePattern = null; this.shadow = null; this.fillColor = null; this.showMarker = null; this.markerOptions = new E() }; var E = function() { this.show = null; this.style = null; this.lineWidth = null; this.size = null; this.color = null; this.shadow = null }; var P = function() { this.color = null; this.seriesColors = null; this.lineWidth = null; this.shadow = null; this.barPadding = null; this.barMargin = null; this.barWidth = null; this.highlightColors = null }; var e = function() { this.seriesColors = null; this.padding = null; this.sliceMargin = null; this.fill = null; this.shadow = null; this.startAngle = null; this.lineWidth = null; this.highlightColors = null }; var C = function() { this.seriesColors = null; this.padding = null; this.sliceMargin = null; this.fill = null; this.shadow = null; this.startAngle = null; this.lineWidth = null; this.innerDiameter = null; this.thickness = null; this.ringMargin = null; this.highlightColors = null }; var U = function() { this.color = null; this.lineWidth = null; this.shadow = null; this.padding = null; this.sectionMargin = null; this.seriesColors = null; this.highlightColors = null }; var z = function() { this.padding = null; this.backgroundColor = null; this.ringColor = null; this.tickColor = null; this.ringWidth = null; this.intervalColors = null; this.intervalInnerRadius = null; this.intervalOuterRadius = null; this.hubRadius = null; this.needleThickness = null; this.needlePad = null }; H.fn.jqplotChildText = function() { return H(this).contents().filter(function() { return this.nodeType == 3 }).text() }; H.fn.jqplotGetComputedFontStyle = function() { var ae = window.getComputedStyle ? window.getComputedStyle(this[0]) : this[0].currentStyle; var ac = ae["font-style"] ? ["font-style", "font-weight", "font-size", "font-family"] : ["fontStyle", "fontWeight", "fontSize", "fontFamily"]; var af = []; for (var ad = 0; ad < ac.length; ++ad) { var ab = String(ae[ac[ad]]); if (ab && ab != "normal") { af.push(ab) } } return af.join(" ") }; H.fn.jqplotToImageCanvas = function(ad) { ad = ad || {}; var ao = (ad.x_offset == null) ? 0 : ad.x_offset; var aq = (ad.y_offset == null) ? 0 : ad.y_offset; var af = (ad.backgroundColor == null) ? "rgb(255,255,255)" : ad.backgroundColor; if (H(this).width() == 0 || H(this).height() == 0) { return null } if (!H.jqplot.support_canvas) { return null } var ah = document.createElement("canvas"); var au = H(this).outerHeight(true); var am = H(this).outerWidth(true); var ag = H(this).offset(); var ai = ag.left; var ak = ag.top; var an = 0, al = 0; var ar = ["jqplot-table-legend", "jqplot-xaxis-tick", "jqplot-x2axis-tick", "jqplot-yaxis-tick", "jqplot-y2axis-tick", "jqplot-y3axis-tick", "jqplot-y4axis-tick", "jqplot-y5axis-tick", "jqplot-y6axis-tick", "jqplot-y7axis-tick", "jqplot-y8axis-tick", "jqplot-y9axis-tick", "jqplot-xaxis-label", "jqplot-x2axis-label", "jqplot-yaxis-label", "jqplot-y2axis-label", "jqplot-y3axis-label", "jqplot-y4axis-label", "jqplot-y5axis-label", "jqplot-y6axis-label", "jqplot-y7axis-label", "jqplot-y8axis-label", "jqplot-y9axis-label"]; var aj, ab, ac, av; for (var at in ar) { H(this).find("." + ar[at]).each(function() { aj = H(this).offset().top - ak; ab = H(this).offset().left - ai; av = ab + H(this).outerWidth(true) + an; ac = aj + H(this).outerHeight(true) + al; if (ab < -an) { am = am - an - ab; an = -ab } if (aj < -al) { au = au - al - aj; al = -aj } if (av > am) { am = av } if (ac > au) { au = ac } }) } ah.width = am + Number(ao); ah.height = au + Number(aq); var ae = ah.getContext("2d"); ae.save(); ae.fillStyle = af; ae.fillRect(0, 0, ah.width, ah.height); ae.restore(); ae.translate(an, al); ae.textAlign = "left"; ae.textBaseline = "top"; function aw(ay) { var az = parseInt(H(ay).css("line-height"), 10); if (isNaN(az)) { az = parseInt(H(ay).css("font-size"), 10) * 1.2 } return az } function ax(az, ay, aM, aA, aI, aB) { var aK = aw(az); var aE = H(az).innerWidth(); var aF = H(az).innerHeight(); var aH = aM.split(/\s+/); var aL = aH.length; var aJ = ""; var aG = []; var aO = aI; var aN = aA; for (var aD = 0; aD < aL; aD++) { aJ += aH[aD]; if (ay.measureText(aJ).width > aE) { aG.push(aD); aJ = "" } } if (aG.length === 0) { if (H(az).css("textAlign") === "center") { aN = aA + (aB - ay.measureText(aJ).width) / 2 - an } ay.fillText(aM, aN, aI) } else { aJ = aH.slice(0, aG[0]).join(" "); if (H(az).css("textAlign") === "center") { aN = aA + (aB - ay.measureText(aJ).width) / 2 - an } ay.fillText(aJ, aN, aO); aO += aK; for (var aD = 1, aC = aG.length; aD < aC; aD++) { aJ = aH.slice(aG[aD - 1], aG[aD]).join(" "); if (H(az).css("textAlign") === "center") { aN = aA + (aB - ay.measureText(aJ).width) / 2 - an } ay.fillText(aJ, aN, aO); aO += aK } aJ = aH.slice(aG[aD - 1], aH.length).join(" "); if (H(az).css("textAlign") === "center") { aN = aA + (aB - ay.measureText(aJ).width) / 2 - an } ay.fillText(aJ, aN, aO) } } function ap(aA, aD, ay) { var aH = aA.tagName.toLowerCase(); var az = H(aA).position(); var aE = window.getComputedStyle ? window.getComputedStyle(aA) : aA.currentStyle; var aC = aD + az.left + parseInt(aE.marginLeft, 10) + parseInt(aE.borderLeftWidth, 10) + parseInt(aE.paddingLeft, 10); var aF = ay + az.top + parseInt(aE.marginTop, 10) + parseInt(aE.borderTopWidth, 10) + parseInt(aE.paddingTop, 10); var aG = ah.width; if ((aH == "div" || aH == "span") && !H(aA).hasClass("jqplot-highlighter-tooltip")) { H(aA).children().each(function() { ap(this, aC, aF) }); var aI = H(aA).jqplotChildText(); if (aI) { ae.font = H(aA).jqplotGetComputedFontStyle(); ae.fillStyle = H(aA).css("color"); ax(aA, ae, aI, aC, aF, aG) } } else { if (aH === "table" && H(aA).hasClass("jqplot-table-legend")) { ae.strokeStyle = H(aA).css("border-top-color"); ae.fillStyle = H(aA).css("background-color"); ae.fillRect(aC, aF, H(aA).innerWidth(), H(aA).innerHeight()); if (parseInt(H(aA).css("border-top-width"), 10) > 0) { ae.strokeRect(aC, aF, H(aA).innerWidth(), H(aA).innerHeight()) } H(aA).find("div.jqplot-table-legend-swatch-outline").each(function() { var aO = H(this); ae.strokeStyle = aO.css("border-top-color"); var aK = aC + aO.position().left; var aL = aF + aO.position().top; ae.strokeRect(aK, aL, aO.innerWidth(), aO.innerHeight()); aK += parseInt(aO.css("padding-left"), 10); aL += parseInt(aO.css("padding-top"), 10); var aN = aO.innerHeight() - 2 * parseInt(aO.css("padding-top"), 10); var aJ = aO.innerWidth() - 2 * parseInt(aO.css("padding-left"), 10); var aM = aO.children("div.jqplot-table-legend-swatch"); ae.fillStyle = aM.css("background-color"); ae.fillRect(aK, aL, aJ, aN) }); H(aA).find("td.jqplot-table-legend-label").each(function() { var aL = H(this); var aJ = aC + aL.position().left; var aK = aF + aL.position().top + parseInt(aL.css("padding-top"), 10); ae.font = aL.jqplotGetComputedFontStyle(); ae.fillStyle = aL.css("color"); ae.fillText(aL.text(), aJ, aK) }); var aB = null } else { if (aH == "canvas") { ae.drawImage(aA, aC, aF) } } } } H(this).children().each(function() { ap(this, ao, aq) }); return ah }; H.fn.jqplotToImageStr = function(ac) { var ab = H(this).jqplotToImageCanvas(ac); if (ab) { return ab.toDataURL("image/png") } else { return null } }; H.fn.jqplotToImageElem = function(ab) { var ac = document.createElement("img"); var ad = H(this).jqplotToImageStr(ab); ac.src = ad; return ac }; H.fn.jqplotToImageElemStr = function(ab) { var ac = ""; return ac }; H.fn.jqplotSaveImage = function() { var ab = H(this).jqplotToImageStr({}); if (ab) { window.location.href = ab.replace("image/png", "image/octet-stream") } }; H.fn.jqplotViewImage = function() { var ac = H(this).jqplotToImageElemStr({}); var ad = H(this).jqplotToImageStr({}); if (ac) { var ab = window.open(""); ab.document.open("image/png"); ab.document.write(ac); ab.document.close(); ab = null } }; var aa = function() { this.syntax = aa.config.syntax; this._type = "jsDate"; this.proxy = new Date(); this.options = {}; this.locale = aa.regional.getLocale(); this.formatString = ""; this.defaultCentury = aa.config.defaultCentury; switch (arguments.length) { case 0: break; case 1: if (j(arguments[0]) == "[object Object]" && arguments[0]._type != "jsDate") { var ad = this.options = arguments[0]; this.syntax = ad.syntax || this.syntax; this.defaultCentury = ad.defaultCentury || this.defaultCentury; this.proxy = aa.createDate(ad.date) } else { this.proxy = aa.createDate(arguments[0]) } break; default: var ab = []; for (var ac = 0; ac < arguments.length; ac++) { ab.push(arguments[ac]) } this.proxy = new Date(); this.proxy.setFullYear.apply(this.proxy, ab.slice(0, 3)); if (ab.slice(3).length) { this.proxy.setHours.apply(this.proxy, ab.slice(3)) } break } }; aa.config = { defaultLocale: "en", syntax: "perl", defaultCentury: 1900 }; aa.prototype.add = function(ad, ac) { var ab = A[ac] || A.day; if (typeof ab == "number") { this.proxy.setTime(this.proxy.getTime() + (ab * ad)) } else { ab.add(this, ad) } return this }; aa.prototype.clone = function() { return new aa(this.proxy.getTime()) }; aa.prototype.getUtcOffset = function() { return this.proxy.getTimezoneOffset() * 60000 }; aa.prototype.diff = function(ac, af, ab) { ac = new aa(ac); if (ac === null) { return null } var ad = A[af] || A.day; if (typeof ad == "number") { var ae = (this.proxy.getTime() - ac.proxy.getTime()) / ad } else { var ae = ad.diff(this.proxy, ac.proxy) } return (ab ? ae : Math[ae > 0 ? "floor" : "ceil"](ae)) }; aa.prototype.getAbbrDayName = function() { return aa.regional[this.locale]["dayNamesShort"][this.proxy.getDay()] }; aa.prototype.getAbbrMonthName = function() { return aa.regional[this.locale]["monthNamesShort"][this.proxy.getMonth()] }; aa.prototype.getAMPM = function() { return this.proxy.getHours() >= 12 ? "PM" : "AM" }; aa.prototype.getAmPm = function() { return this.proxy.getHours() >= 12 ? "pm" : "am" }; aa.prototype.getCentury = function() { return parseInt(this.proxy.getFullYear() / 100, 10) }; aa.prototype.getDate = function() { return this.proxy.getDate() }; aa.prototype.getDay = function() { return this.proxy.getDay() }; aa.prototype.getDayOfWeek = function() { var ab = this.proxy.getDay(); return ab === 0 ? 7 : ab }; aa.prototype.getDayOfYear = function() { var ac = this.proxy; var ab = ac - new Date("" + ac.getFullYear() + "/1/1 GMT"); ab += ac.getTimezoneOffset() * 60000; ac = null; return parseInt(ab / 60000 / 60 / 24, 10) + 1 }; aa.prototype.getDayName = function() { return aa.regional[this.locale]["dayNames"][this.proxy.getDay()] }; aa.prototype.getFullWeekOfYear = function() { var ae = this.proxy; var ab = this.getDayOfYear(); var ad = 6 - ae.getDay(); var ac = parseInt((ab + ad) / 7, 10); return ac }; aa.prototype.getFullYear = function() { return this.proxy.getFullYear() }; aa.prototype.getGmtOffset = function() { var ab = this.proxy.getTimezoneOffset() / 60; var ac = ab < 0 ? "+" : "-"; ab = Math.abs(ab); return ac + J(Math.floor(ab), 2) + ":" + J((ab % 1) * 60, 2) }; aa.prototype.getHours = function() { return this.proxy.getHours() }; aa.prototype.getHours12 = function() { var ab = this.proxy.getHours(); return ab > 12 ? ab - 12 : (ab == 0 ? 12 : ab) }; aa.prototype.getIsoWeek = function() { var ae = this.proxy; var ad = ae.getWeekOfYear(); var ab = (new Date("" + ae.getFullYear() + "/1/1")).getDay(); var ac = ad + (ab > 4 || ab <= 1 ? 0 : 1); if (ac == 53 && (new Date("" + ae.getFullYear() + "/12/31")).getDay() < 4) { ac = 1 } else { if (ac === 0) { ae = new aa(new Date("" + (ae.getFullYear() - 1) + "/12/31")); ac = ae.getIsoWeek() } } ae = null; return ac }; aa.prototype.getMilliseconds = function() { return this.proxy.getMilliseconds() }; aa.prototype.getMinutes = function() { return this.proxy.getMinutes() }; aa.prototype.getMonth = function() { return this.proxy.getMonth() }; aa.prototype.getMonthName = function() { return aa.regional[this.locale]["monthNames"][this.proxy.getMonth()] }; aa.prototype.getMonthNumber = function() { return this.proxy.getMonth() + 1 }; aa.prototype.getSeconds = function() { return this.proxy.getSeconds() }; aa.prototype.getShortYear = function() { return this.proxy.getYear() % 100 }; aa.prototype.getTime = function() { return this.proxy.getTime() }; aa.prototype.getTimezoneAbbr = function() { return this.proxy.toString().replace(/^.*\(([^)]+)\)$/, "$1") }; aa.prototype.getTimezoneName = function() { var ab = /(?:\((.+)\)$| ([A-Z]{3}) )/.exec(this.toString()); return ab[1] || ab[2] || "GMT" + this.getGmtOffset() }; aa.prototype.getTimezoneOffset = function() { return this.proxy.getTimezoneOffset() }; aa.prototype.getWeekOfYear = function() { var ab = this.getDayOfYear(); var ad = 7 - this.getDayOfWeek(); var ac = parseInt((ab + ad) / 7, 10); return ac }; aa.prototype.getUnix = function() { return Math.round(this.proxy.getTime() / 1000, 0) }; aa.prototype.getYear = function() { return this.proxy.getYear() }; aa.prototype.next = function(ab) { ab = ab || "day"; return this.clone().add(1, ab) }; aa.prototype.set = function() { switch (arguments.length) { case 0: this.proxy = new Date(); break; case 1: if (j(arguments[0]) == "[object Object]" && arguments[0]._type != "jsDate") { var ad = this.options = arguments[0]; this.syntax = ad.syntax || this.syntax; this.defaultCentury = ad.defaultCentury || this.defaultCentury; this.proxy = aa.createDate(ad.date) } else { this.proxy = aa.createDate(arguments[0]) } break; default: var ab = []; for (var ac = 0; ac < arguments.length; ac++) { ab.push(arguments[ac]) } this.proxy = new Date(); this.proxy.setFullYear.apply(this.proxy, ab.slice(0, 3)); if (ab.slice(3).length) { this.proxy.setHours.apply(this.proxy, ab.slice(3)) } break } return this }; aa.prototype.setDate = function(ab) { this.proxy.setDate(ab); return this }; aa.prototype.setFullYear = function() { this.proxy.setFullYear.apply(this.proxy, arguments); return this }; aa.prototype.setHours = function() { this.proxy.setHours.apply(this.proxy, arguments); return this }; aa.prototype.setMilliseconds = function(ab) { this.proxy.setMilliseconds(ab); return this }; aa.prototype.setMinutes = function() { this.proxy.setMinutes.apply(this.proxy, arguments); return this }; aa.prototype.setMonth = function() { this.proxy.setMonth.apply(this.proxy, arguments); return this }; aa.prototype.setSeconds = function() { this.proxy.setSeconds.apply(this.proxy, arguments); return this }; aa.prototype.setTime = function(ab) { this.proxy.setTime(ab); return this }; aa.prototype.setYear = function() { this.proxy.setYear.apply(this.proxy, arguments); return this }; aa.prototype.strftime = function(ab) { ab = ab || this.formatString || aa.regional[this.locale]["formatString"]; return aa.strftime(this, ab, this.syntax) }; aa.prototype.toString = function() { return this.proxy.toString() }; aa.prototype.toYmdInt = function() { return (this.proxy.getFullYear() * 10000) + (this.getMonthNumber() * 100) + this.proxy.getDate() }; aa.regional = { en: { monthNames: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], monthNamesShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], dayNames: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], dayNamesShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], formatString: "%Y-%m-%d %H:%M:%S" }, fr: { monthNames: ["Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre"], monthNamesShort: ["Jan", "Fév", "Mar", "Avr", "Mai", "Jun", "Jul", "Aoû", "Sep", "Oct", "Nov", "Déc"], dayNames: ["Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi"], dayNamesShort: ["Dim", "Lun", "Mar", "Mer", "Jeu", "Ven", "Sam"], formatString: "%Y-%m-%d %H:%M:%S" }, de: { monthNames: ["Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"], monthNamesShort: ["Jan", "Feb", "Mär", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dez"], dayNames: ["Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"], dayNamesShort: ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"], formatString: "%Y-%m-%d %H:%M:%S" }, es: { monthNames: ["Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"], monthNamesShort: ["Ene", "Feb", "Mar", "Abr", "May", "Jun", "Jul", "Ago", "Sep", "Oct", "Nov", "Dic"], dayNames: ["Domingo", "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado"], dayNamesShort: ["Dom", "Lun", "Mar", "Mié", "Juv", "Vie", "Sáb"], formatString: "%Y-%m-%d %H:%M:%S" }, ru: { monthNames: ["Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь"], monthNamesShort: ["Янв", "Фев", "Мар", "Апр", "Май", "Июн", "Июл", "Авг", "Сен", "Окт", "Ноя", "Дек"], dayNames: ["воскресенье", "понедельник", "вторник", "среда", "четверг", "пятница", "суббота"], dayNamesShort: ["вск", "пнд", "втр", "срд", "чтв", "птн", "сбт"], formatString: "%Y-%m-%d %H:%M:%S" }, ar: { monthNames: ["كانون الثاني", "شباط", "آذار", "نيسان", "آذار", "حزيران", "تموز", "آب", "أيلول", "تشرين الأول", "تشرين الثاني", "كانون الأول"], monthNamesShort: ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"], dayNames: ["السبت", "الأحد", "الاثنين", "الثلاثاء", "الأربعاء", "الخميس", "الجمعة"], dayNamesShort: ["سبت", "أحد", "اثنين", "ثلاثاء", "أربعاء", "خميس", "جمعة"], formatString: "%Y-%m-%d %H:%M:%S" }, pt: { monthNames: ["Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"], monthNamesShort: ["Jan", "Fev", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Out", "Nov", "Dez"], dayNames: ["Domingo", "Segunda-feira", "Terça-feira", "Quarta-feira", "Quinta-feira", "Sexta-feira", "Sábado"], dayNamesShort: ["Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sáb"], formatString: "%Y-%m-%d %H:%M:%S" }, "pt-BR": { monthNames: ["Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"], monthNamesShort: ["Jan", "Fev", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Out", "Nov", "Dez"], dayNames: ["Domingo", "Segunda-feira", "Terça-feira", "Quarta-feira", "Quinta-feira", "Sexta-feira", "Sábado"], dayNamesShort: ["Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sáb"], formatString: "%Y-%m-%d %H:%M:%S" } }; aa.regional["en-US"] = aa.regional["en-GB"] = aa.regional.en; aa.regional.getLocale = function() { var ab = aa.config.defaultLocale; if (document && document.getElementsByTagName("html") && document.getElementsByTagName("html")[0].lang) { ab = document.getElementsByTagName("html")[0].lang; if (!aa.regional.hasOwnProperty(ab)) { ab = aa.config.defaultLocale } } return ab }; var y = 24 * 60 * 60 * 1000; var J = function(ab, ae) { ab = String(ab); var ac = ae - ab.length; var ad = String(Math.pow(10, ac)).slice(1); return ad.concat(ab) }; var A = { millisecond: 1, second: 1000, minute: 60 * 1000, hour: 60 * 60 * 1000, day: y, week: 7 * y, month: { add: function(ad, ab) { A.year.add(ad, Math[ab > 0 ? "floor" : "ceil"](ab / 12)); var ac = ad.getMonth() + (ab % 12); if (ac == 12) { ac = 0; ad.setYear(ad.getFullYear() + 1) } else { if (ac == -1) { ac = 11; ad.setYear(ad.getFullYear() - 1) } } ad.setMonth(ac) }, diff: function(af, ad) { var ab = af.getFullYear() - ad.getFullYear(); var ac = af.getMonth() - ad.getMonth() + (ab * 12); var ae = af.getDate() - ad.getDate(); return ac + (ae / 30) } }, year: { add: function(ac, ab) { ac.setYear(ac.getFullYear() + Math[ab > 0 ? "floor" : "ceil"](ab)) }, diff: function(ac, ab) { return A.month.diff(ac, ab) / 12 } } }; for (var T in A) { if (T.substring(T.length - 1) != "s") { A[T + "s"] = A[T] } } var D = function(af, ae, ac) { if (aa.formats[ac]["shortcuts"][ae]) { return aa.strftime(af, aa.formats[ac]["shortcuts"][ae], ac) } else { var ab = (aa.formats[ac]["codes"][ae] || "").split("."); var ad = af["get" + ab[0]] ? af["get" + ab[0]]() : ""; if (ab[1]) { ad = J(ad, ab[1]) } return ad } }; aa.strftime = function(ah, ae, ad, ai) { var ac = "perl"; var ag = aa.regional.getLocale(); if (ad && aa.formats.hasOwnProperty(ad)) { ac = ad } else { if (ad && aa.regional.hasOwnProperty(ad)) { ag = ad } } if (ai && aa.formats.hasOwnProperty(ai)) { ac = ai } else { if (ai && aa.regional.hasOwnProperty(ai)) { ag = ai } } if (j(ah) != "[object Object]" || ah._type != "jsDate") { ah = new aa(ah); ah.locale = ag } if (!ae) { ae = ah.formatString || aa.regional[ag]["formatString"] } var ab = ae || "%Y-%m-%d", aj = "", af; while (ab.length > 0) { if (af = ab.match(aa.formats[ac].codes.matcher)) { aj += ab.slice(0, af.index); aj += (af[1] || "") + D(ah, af[2], ac); ab = ab.slice(af.index + af[0].length) } else { aj += ab; ab = "" } } return aj }; aa.formats = { ISO: "%Y-%m-%dT%H:%M:%S.%N%G", SQL: "%Y-%m-%d %H:%M:%S" }; aa.formats.perl = { codes: { matcher: /()%(#?(%|[a-z]))/i, Y: "FullYear", y: "ShortYear.2", m: "MonthNumber.2", "#m": "MonthNumber", B: "MonthName", b: "AbbrMonthName", d: "Date.2", "#d": "Date", e: "Date", A: "DayName", a: "AbbrDayName", w: "Day", H: "Hours.2", "#H": "Hours", I: "Hours12.2", "#I": "Hours12", p: "AMPM", M: "Minutes.2", "#M": "Minutes", S: "Seconds.2", "#S": "Seconds", s: "Unix", N: "Milliseconds.3", "#N": "Milliseconds", O: "TimezoneOffset", Z: "TimezoneName", G: "GmtOffset" }, shortcuts: { F: "%Y-%m-%d", T: "%H:%M:%S", X: "%H:%M:%S", x: "%m/%d/%y", D: "%m/%d/%y", "#c": "%a %b %e %H:%M:%S %Y", v: "%e-%b-%Y", R: "%H:%M", r: "%I:%M:%S %p", t: "\t", n: "\n", "%": "%" } }; aa.formats.php = { codes: { matcher: /()%((%|[a-z]))/i, a: "AbbrDayName", A: "DayName", d: "Date.2", e: "Date", j: "DayOfYear.3", u: "DayOfWeek", w: "Day", U: "FullWeekOfYear.2", V: "IsoWeek.2", W: "WeekOfYear.2", b: "AbbrMonthName", B: "MonthName", m: "MonthNumber.2", h: "AbbrMonthName", C: "Century.2", y: "ShortYear.2", Y: "FullYear", H: "Hours.2", I: "Hours12.2", l: "Hours12", p: "AMPM", P: "AmPm", M: "Minutes.2", S: "Seconds.2", s: "Unix", O: "TimezoneOffset", z: "GmtOffset", Z: "TimezoneAbbr" }, shortcuts: { D: "%m/%d/%y", F: "%Y-%m-%d", T: "%H:%M:%S", X: "%H:%M:%S", x: "%m/%d/%y", R: "%H:%M", r: "%I:%M:%S %p", t: "\t", n: "\n", "%": "%" } }; aa.createDate = function(ad) { if (ad == null) { return new Date() } if (ad instanceof Date) { return ad } if (typeof ad == "number") { return new Date(ad) } var ai = String(ad).replace(/^\s*(.+)\s*$/g, "$1"); ai = ai.replace(/^([0-9]{1,4})-([0-9]{1,2})-([0-9]{1,4})/, "$1/$2/$3"); ai = ai.replace(/^(3[01]|[0-2]?\d)[-\/]([a-z]{3,})[-\/](\d{4})/i, "$1 $2 $3"); var ah = ai.match(/^(3[01]|[0-2]?\d)[-\/]([a-z]{3,})[-\/](\d{2})\D*/i); if (ah && ah.length > 3) { var am = parseFloat(ah[3]); var ag = aa.config.defaultCentury + am; ag = String(ag); ai = ai.replace(/^(3[01]|[0-2]?\d)[-\/]([a-z]{3,})[-\/](\d{2})\D*/i, ah[1] + " " + ah[2] + " " + ag) } ah = ai.match(/^([0-9]{1,2})[-\/]([0-9]{1,2})[-\/]([0-9]{1,2})[^0-9]/); function al(aq, ap) { var aw = parseFloat(ap[1]); var av = parseFloat(ap[2]); var au = parseFloat(ap[3]); var at = aa.config.defaultCentury; var ao, an, ax, ar; if (aw > 31) { an = au; ax = av; ao = at + aw } else { an = av; ax = aw; ao = at + au } ar = ax + "/" + an + "/" + ao; return aq.replace(/^([0-9]{1,2})[-\/]([0-9]{1,2})[-\/]([0-9]{1,2})/, ar) } if (ah && ah.length > 3) { ai = al(ai, ah) } var ah = ai.match(/^([0-9]{1,2})[-\/]([0-9]{1,2})[-\/]([0-9]{1,2})$/); if (ah && ah.length > 3) { ai = al(ai, ah) } var af = 0; var ac = aa.matchers.length; var ak, ab, aj = ai, ae; while (af < ac) { ab = Date.parse(aj); if (!isNaN(ab)) { return new Date(ab) } ak = aa.matchers[af]; if (typeof ak == "function") { ae = ak.call(aa, aj); if (ae instanceof Date) { return ae } } else { aj = ai.replace(ak[0], ak[1]) } af++ } return NaN }; aa.daysInMonth = function(ab, ac) { if (ac == 2) { return new Date(ab, 1, 29).getDate() == 29 ? 29 : 28 } return [r, 31, r, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][ac] }; aa.matchers = [ [/(3[01]|[0-2]\d)\s*\.\s*(1[0-2]|0\d)\s*\.\s*([1-9]\d{3})/, "$2/$1/$3"], [/([1-9]\d{3})\s*-\s*(1[0-2]|0\d)\s*-\s*(3[01]|[0-2]\d)/, "$2/$3/$1"], function(ae) { var ac = ae.match(/^(?:(.+)\s+)?([012]?\d)(?:\s*\:\s*(\d\d))?(?:\s*\:\s*(\d\d(\.\d*)?))?\s*(am|pm)?\s*$/i); if (ac) { if (ac[1]) { var ad = this.createDate(ac[1]); if (isNaN(ad)) { return } } else { var ad = new Date(); ad.setMilliseconds(0) } var ab = parseFloat(ac[2]); if (ac[6]) { ab = ac[6].toLowerCase() == "am" ? (ab == 12 ? 0 : ab) : (ab == 12 ? 12 : ab + 12) } ad.setHours(ab, parseInt(ac[3] || 0, 10), parseInt(ac[4] || 0, 10), ((parseFloat(ac[5] || 0)) || 0) * 1000); return ad } else { return ae } }, function(ae) { var ac = ae.match(/^(?:(.+))[T|\s+]([012]\d)(?:\:(\d\d))(?:\:(\d\d))(?:\.\d+)([\+\-]\d\d\:\d\d)$/i); if (ac) { if (ac[1]) { var ad = this.createDate(ac[1]); if (isNaN(ad)) { return } } else { var ad = new Date(); ad.setMilliseconds(0) } var ab = parseFloat(ac[2]); ad.setHours(ab, parseInt(ac[3], 10), parseInt(ac[4], 10), parseFloat(ac[5]) * 1000); return ad } else { return ae } }, function(af) { var ad = af.match(/^([0-3]?\d)\s*[-\/.\s]{1}\s*([a-zA-Z]{3,9})\s*[-\/.\s]{1}\s*([0-3]?\d)$/); if (ad) { var ae = new Date(); var ag = aa.config.defaultCentury; var ai = parseFloat(ad[1]); var ah = parseFloat(ad[3]); var ac, ab, aj; if (ai > 31) { ab = ah; ac = ag + ai } else { ab = ai; ac = ag + ah } var aj = W(ad[2], aa.regional[aa.regional.getLocale()]["monthNamesShort"]); if (aj == -1) { aj = W(ad[2], aa.regional[aa.regional.getLocale()]["monthNames"]) } ae.setFullYear(ac, aj, ab); ae.setHours(0, 0, 0, 0); return ae } else { return af } } ]; function W(ad, ae) { if (ae.indexOf) { return ae.indexOf(ad) } for (var ab = 0, ac = ae.length; ab < ac; ab++) { if (ae[ab] === ad) { return ab } } return -1 } function j(ab) { if (ab === null) { return "[object Null]" } return Object.prototype.toString.call(ab) } H.jsDate = aa; H.jqplot.sprintf = function() { function ah(an, aj, ak, am) { var al = (an.length >= aj) ? "" : Array(1 + aj - an.length >>> 0).join(ak); return am ? an + al : al + an } function ae(al) { var ak = new String(al); for (var aj = 10; aj > 0; aj--) { if (ak == (ak = ak.replace(/^(\d+)(\d{3})/, "$1" + H.jqplot.sprintf.thousandsSeparator + "$2"))) { break } } return ak } function ad(ao, an, aq, al, am, ak) { var ap = al - ao.length; if (ap > 0) { var aj = " "; if (ak) { aj = " " } if (aq || !am) { ao = ah(ao, al, aj, aq) } else { ao = ao.slice(0, an.length) + ah("", ap, "0", true) + ao.slice(an.length) } } return ao } function ai(ar, ak, ap, al, aj, ao, aq, an) { var am = ar >>> 0; ap = ap && am && { "2": "0b", "8": "0", "16": "0x" }[ak] || ""; ar = ap + ah(am.toString(ak), ao || 0, "0", false); return ad(ar, ap, al, aj, aq, an) } function ab(an, ao, al, aj, am, ak) { if (aj != null) { an = an.slice(0, aj) } return ad(an, "", ao, al, am, ak) } var ac = arguments, af = 0, ag = ac[af++]; return ag.replace(H.jqplot.sprintf.regex, function(aF, aq, ar, av, aH, aC, ao) { if (aF == "%%") { return "%" } var aw = false, at = "", au = false, aE = false, ap = false, an = false; for (var aB = 0; ar && aB < ar.length; aB++) { switch (ar.charAt(aB)) { case " ": at = " "; break; case "+": at = "+"; break; case "-": aw = true; break; case "0": au = true; break; case "#": aE = true; break; case "&": ap = true; break; case "'": an = true; break } } if (!av) { av = 0 } else { if (av == "*") { av = +ac[af++] } else { if (av.charAt(0) == "*") { av = +ac[av.slice(1, -1)] } else { av = +av } } } if (av < 0) { av = -av; aw = true } if (!isFinite(av)) { throw new Error("$.jqplot.sprintf: (minimum-)width must be finite") } if (!aC) { aC = "fFeE".indexOf(ao) > -1 ? 6 : (ao == "d") ? 0 : void(0) } else { if (aC == "*") { aC = +ac[af++] } else { if (aC.charAt(0) == "*") { aC = +ac[aC.slice(1, -1)] } else { aC = +aC } } } var ay = aq ? ac[aq.slice(0, -1)] : ac[af++]; switch (ao) { case "s": if (ay == null) { return "" } return ab(String(ay), aw, av, aC, au, ap); case "c": return ab(String.fromCharCode(+ay), aw, av, aC, au, ap); case "b": return ai(ay, 2, aE, aw, av, aC, au, ap); case "o": return ai(ay, 8, aE, aw, av, aC, au, ap); case "x": return ai(ay, 16, aE, aw, av, aC, au, ap); case "X": return ai(ay, 16, aE, aw, av, aC, au, ap).toUpperCase(); case "u": return ai(ay, 10, aE, aw, av, aC, au, ap); case "i": var al = parseInt(+ay, 10); if (isNaN(al)) { return "" } var aA = al < 0 ? "-" : at; var aD = an ? ae(String(Math.abs(al))) : String(Math.abs(al)); ay = aA + ah(aD, aC, "0", false); return ad(ay, aA, aw, av, au, ap); case "d": var al = Math.round(+ay); if (isNaN(al)) { return "" } var aA = al < 0 ? "-" : at; var aD = an ? ae(String(Math.abs(al))) : String(Math.abs(al)); ay = aA + ah(aD, aC, "0", false); return ad(ay, aA, aw, av, au, ap); case "e": case "E": case "f": case "F": case "g": case "G": var al = +ay; if (isNaN(al)) { return "" } var aA = al < 0 ? "-" : at; var am = ["toExponential", "toFixed", "toPrecision"]["efg".indexOf(ao.toLowerCase())]; var aG = ["toString", "toUpperCase"]["eEfFgG".indexOf(ao) % 2]; var aD = Math.abs(al)[am](aC); aD = an ? ae(aD) : aD; ay = aA + aD; return ad(ay, aA, aw, av, au, ap)[aG](); case "p": case "P": var al = +ay; if (isNaN(al)) { return "" } var aA = al < 0 ? "-" : at; var ax = String(Number(Math.abs(al)).toExponential()).split(/e|E/); var ak = (ax[0].indexOf(".") != -1) ? ax[0].length - 1 : ax[0].length; var az = (ax[1] < 0) ? -ax[1] - 1 : 0; if (Math.abs(al) < 1) { if (ak + az <= aC) { ay = aA + Math.abs(al).toPrecision(ak) } else { if (ak <= aC - 1) { ay = aA + Math.abs(al).toExponential(ak - 1) } else { ay = aA + Math.abs(al).toExponential(aC - 1) } } } else { var aj = (ak <= aC) ? ak : aC; ay = aA + Math.abs(al).toPrecision(aj) } var aG = ["toString", "toUpperCase"]["pP".indexOf(ao) % 2]; return ad(ay, aA, aw, av, au, ap)[aG](); case "n": return ""; default: return aF } }) }; H.jqplot.sprintf.thousandsSeparator = ","; H.jqplot.sprintf.regex = /%%|%(\d+\$)?([-+#0&\' ]*)(\*\d+\$|\*|\d+)?(\.(\*\d+\$|\*|\d+))?([nAscboxXuidfegpEGP])/g; H.jqplot.getSignificantFigures = function(af) { var ah = String(Number(Math.abs(af)).toExponential()).split(/e|E/); var ag = (ah[0].indexOf(".") != -1) ? ah[0].length - 1 : ah[0].length; var ac = (ah[1] < 0) ? -ah[1] - 1 : 0; var ab = parseInt(ah[1], 10); var ad = (ab + 1 > 0) ? ab + 1 : 0; var ae = (ag <= ad) ? 0 : ag - ab - 1; return { significantDigits: ag, digitsLeft: ad, digitsRight: ae, zeros: ac, exponent: ab } }; H.jqplot.getPrecision = function(ab) { return H.jqplot.getSignificantFigures(ab).digitsRight } })(jQuery); var backCompat = $.uiBackCompat !== false; $.jqplot.effects = { effect: {} }; var dataSpace = "jqplot.storage."; $.extend($.jqplot.effects, { version: "1.9pre", save: function(b, c) { for (var a = 0; a < c.length; a++) { if (c[a] !== null) { b.data(dataSpace + c[a], b[0].style[c[a]]) } } }, restore: function(b, c) { for (var a = 0; a < c.length; a++) { if (c[a] !== null) { b.css(c[a], b.data(dataSpace + c[a])) } } }, setMode: function(a, b) { if (b === "toggle") { b = a.is(":hidden") ? "show" : "hide" } return b }, createWrapper: function(b) { if (b.parent().is(".ui-effects-wrapper")) { return b.parent() } var c = { width: b.outerWidth(true), height: b.outerHeight(true), "float": b.css("float") }, e = $("
").addClass("ui-effects-wrapper").css({ fontSize: "100%", background: "transparent", border: "none", margin: 0, padding: 0 }), a = { width: b.width(), height: b.height() }, d = document.activeElement; b.wrap(e); if (b[0] === d || $.contains(b[0], d)) { $(d).focus() } e = b.parent(); if (b.css("position") === "static") { e.css({ position: "relative" }); b.css({ position: "relative" }) } else { $.extend(c, { position: b.css("position"), zIndex: b.css("z-index") }); $.each(["top", "left", "bottom", "right"], function(f, g) { c[g] = b.css(g); if (isNaN(parseInt(c[g], 10))) { c[g] = "auto" } }); b.css({ position: "relative", top: 0, left: 0, right: "auto", bottom: "auto" }) } b.css(a); return e.css(c).show() }, removeWrapper: function(a) { var b = document.activeElement; if (a.parent().is(".ui-effects-wrapper")) { a.parent().replaceWith(a); if (a[0] === b || $.contains(a[0], b)) { $(b).focus() } } return a } }); function _normalizeArguments(b, a, c, d) { if ($.isPlainObject(b)) { return b } b = { effect: b }; if (a === undefined) { a = {} } if ($.isFunction(a)) { d = a; c = null; a = {} } if ($.type(a) === "number" || $.fx.speeds[a]) { d = c; c = a; a = {} } if ($.isFunction(c)) { d = c; c = null } if (a) { $.extend(b, a) } c = c || a.duration; b.duration = $.fx.off ? 0 : typeof c === "number" ? c : c in $.fx.speeds ? $.fx.speeds[c] : $.fx.speeds._default; b.complete = d || a.complete; return b } function standardSpeed(a) { if (!a || typeof a === "number" || $.fx.speeds[a]) { return true } if (typeof a === "string" && !$.jqplot.effects.effect[a]) { if (backCompat && $.jqplot.effects[a]) { return false } return true } return false } $.fn.extend({ jqplotEffect: function(i, j, b, h) { var g = _normalizeArguments.apply(this, arguments), d = g.mode, e = g.queue, f = $.jqplot.effects.effect[g.effect], a = !f && backCompat && $.jqplot.effects[g.effect]; if ($.fx.off || !(f || a)) { if (d) { return this[d](g.duration, g.complete) } else { return this.each(function() { if (g.complete) { g.complete.call(this) } }) } } function c(m) { var n = $(this), l = g.complete, o = g.mode; function k() { if ($.isFunction(l)) { l.call(n[0]) } if ($.isFunction(m)) { m() } } if (n.is(":hidden") ? o === "hide" : o === "show") { k() } else { f.call(n[0], g, k) } } if (f) { return e === false ? this.each(c) : this.queue(e || "fx", c) } else { return a.call(this, { options: g, duration: g.duration, callback: g.complete, mode: g.mode }) } } }); var rvertical = /up|down|vertical/, rpositivemotion = /up|left|vertical|horizontal/; $.jqplot.effects.effect.blind = function(c, h) { var d = $(this), k = ["position", "top", "bottom", "left", "right", "height", "width"], i = $.jqplot.effects.setMode(d, c.mode || "hide"), m = c.direction || "up", f = rvertical.test(m), e = f ? "height" : "width", j = f ? "top" : "left", p = rpositivemotion.test(m), g = {}, n = i === "show", b, a, l; if (d.parent().is(".ui-effects-wrapper")) { $.jqplot.effects.save(d.parent(), k) } else { $.jqplot.effects.save(d, k) } d.show(); l = parseInt(d.css("top"), 10); b = $.jqplot.effects.createWrapper(d).css({ overflow: "hidden" }); a = f ? b[e]() + l : b[e](); g[e] = n ? String(a) : "0"; if (!p) { d.css(f ? "bottom" : "right", 0).css(f ? "top" : "left", "").css({ position: "absolute" }); g[j] = n ? "0" : String(a) } if (n) { b.css(e, 0); if (!p) { b.css(j, a) } } b.animate(g, { duration: c.duration, easing: c.easing, queue: false, complete: function() { if (i === "hide") { d.hide() } $.jqplot.effects.restore(d, k); $.jqplot.effects.removeWrapper(d); h() } }) };