{"version":3,"sources":["webpack:///./Content/javascript/src/entries/Global.js","webpack:///./Content/javascript/src/externalLibs/ChartNew.js","webpack:///./Content/javascript/src/templates/basescripts-defer/datatable-library-settings.js","webpack:///./node_modules/bowser/src/bowser.js"],"names":["Object","defineProperty","__webpack_exports__","value","__WEBPACK_IMPORTED_MODULE_0__externalLibs_ChartNew__","__webpack_require__","__WEBPACK_IMPORTED_MODULE_1__templates_basescripts_defer_datatable_library_settings__","n","window","SHWebXDt","timers","delay","timerId","callback","clearTimeout","setTimeout","chartJSLineStyle","lineStyleFn","data","String","prototype","trim","this","replace","Array","indexOf","searchElement","TypeError","t","len","length","arguments","Number","Infinity","Math","floor","abs","k","max","charJSPersonalDefaultOptions","charJSPersonalDefaultOptionsLine","charJSPersonalDefaultOptionsRadar","charJSPersonalDefaultOptionsPolarArea","charJSPersonalDefaultOptionsPie","charJSPersonalDefaultOptionsDoughnut","charJSPersonalDefaultOptionsBar","charJSPersonalDefaultOptionsStackedBar","charJSPersonalDefaultOptionsHorizontalBar","charJSPersonalDefaultOptionsHorizontalStackedBar","roundToWithThousands","config","num","place","roundVal","newval","unFormat","round","divval","fmtChartJS","decimalSeparator","thousandSeparator","v1","cachebis","fmtChartJSPerso","fmt","return_value","toString","roundNumber","part1","part2","posdec","substring","split","reverse","join","addParameters2Function","fctName","fctList","mathFunctions","mean","datasetNr","v11","varianz","stddev","cv","median","dif","substr","eval","parameter","v3","isNumber","isNaN","parseFloat","isFinite","tmplbis","str","newstr","templatesOpenTag","templatesCloseTag","tmplter","regexMath","RegExp","test","$0","$1","$2","$3","$4","rndFac","pow","fn","document","getElementById","innerHTML","Function","createCursorDiv","cursorDivCreated","div","createElement","id","style","position","body","appendChild","CanvasRenderingContext2D","fillTextMultiLine","text","x","y","yLevel","lineHeight","horizontal","detectMouseOnText","ctx","idText","rotate","x_decal","y_decal","posi","posj","lines","y_pos","i","fillText","txtSize","measureTextMultiLine","x_pos","p1","rotateRV","PI","textAlign","cos","sin","textWidth","p2","p3","p4","jsTextMousePos","ChartNewId","textHeight","lg","measureText","width","setLineDash","listdash","initChartJsResize","jsGraphResize","container","addResponsiveChart","initChartResize","newSize","resizeGraph","prevWidth","resizeCtx","newWidth","newHeight","responsiveScaleContent","responsiveWindowInitialWidth","initialWidth","prevHeight","tpchart","addEventListener","chartJsResize","attachEvent","getMaximumWidth","domNode","parentNode","undefined","clientWidth","getMaximumHeight","clientHeight","DefaultchartTextScale","chartTextScale","DefaultchartLineScale","chartLineScale","DefaultchartSpaceScale","chartSpaceScale","canvas","height","maintainAspectRatio","responsiveMinWidth","responsiveMinHeight","responsiveMaxWidth","responsiveMaxHeight","aspectRatio","min","parseInt","firstPass","subUpdateChart","testRedraw","originalfirstpass","updateChart","animation","runanimationcompletefunction","devicePixelRatio","responsive","dynamicFunction","redrawGraph","clearRect","myGraph","Chart","Bar","Pie","Doughnut","Radar","PolarArea","HorizontalBar","StackedBar","HorizontalStackedBar","Line","checkBrowser","ver","navigator","appVersion","dom","ie5","ie4","all","ns5","ns4","layers","bw","cursorInit","scrolled","captureEvents","Event","MOUSEMOVE","makeCursorObj","obj","nest","css","moveIt","b_moveIt","left","top","isIE","myNav","userAgent","toLowerCase","mergeChartConfig","defaults","userDefined","returnObj","attrname","attrnameBis","sleep","ms","dt","Date","setTime","getTime","saveCanvas","cvSave","getImageData","image","savePngConfig","savePng","annotateDisplay","dynamicDisplay","savePngOutput","toDataURL","putImageData","open","location","href","downloadLink","download","savePngName","click","removeChild","fromLeft","fromTop","dynamicDisplayList","cvmillsec","isScrolledIntoView","onscroll","scrollFunction","element","xPosition","yPosition","elem","offsetLeft","scrollLeft","clientLeft","offsetTop","scrollTop","clientTop","offsetParent","pageXOffset","innerWidth","pageYOffset","innerHeight","jsGraphAnnotate","clearAnnotate","ctxid","getMousePos","evt","rect","getBoundingClientRect","clientX","clientY","annotatePrevShow","doMouseAction","event","action","funct","onData","topY","bottomY","leftX","rightX","textMsr","annotateDIV","show","className","annotateClassName","border","annotateBorder","padding","annotatePadding","borderRadius","annotateBorderRadius","backgroundColor","annotateBackgroundColor","color","annotateFontColor","fontFamily","annotateFontFamily","fontSize","ceil","annotateFontSize","fontStyle","annotateFontStyle","zIndex","save","font","display","canvas_pos","inRect","relocateX","relocateY","myStatData","distance","sqrt","midPosX","midPosY","int_radius","radiusOffset","angle","acos","startAngle","endAngle","graphPosX","graphPosY","dispString","setOptionValue","annotateLabel","otherVal","restore","pageX","pageY","annotateRelocate","oCursor","yPosBottom","yPosTop","annotateBarMinimumDetectionHeight","xPosLeft","xPosRight","detectAnnotateOnFullLine","annotateStartPosX","annotateEndPosX","pointHitDetectionRadius","annotateStartPosY","annotateEndPosY","D1A","posX","D2A","posY","D2B","g","D1B","h","annotateFunctionOut","annotateFunctionIn","zeroValue","P12","tan","D12","D34","P13","D13","D24","y1","y2","y3","y4","type","values","animationCorrection","animationValue","vdata","vsubdata","addone","animValue","animSubValue","animationStartWithDataset","animationStartWithData","totreat","newAnimationValue","animationByDataset","startDataset","nbstepsperdatasets","animationSteps","datasets","redAnimationValue","animationLeftToRight","startSub","nbstepspervalue","mainVal","subVal","animVal","showLabels","doShowLabels","showXLabels","labelValue","labels","fmtXLabel","unformatedLabelValue","firstLabelToShow","showYLabels","firstYLabelToShow","drawLegend","legendMsr","typegraph","lgtxt","legendBorders","legendBordersStyle","beginPath","lineWidth","legendBordersWidth","strokeStyle","legendBordersColors","moveTo","xLegendBorderPos","yLegendBorderPos","lineTo","legendBorderHeight","legendBorderWidth","stroke","closePath","fillStyle","legendFillColor","fill","nbcols","nbLegendCols","ypos","yFirstLegendTextPos","legendFontSize","legendSpaceBetweenTextVertical","xpos","drawLegendOnData","fromi","orderi","reverseLegend","tpof","title","fmtLegend","legendtitle","xFirstLegendTextPos","widestLegend","legendSpaceBetweenTextHorizontal","lgdbox","legendBox","datasetFill","statData","linkType","nullvalue","datasetStrokeWidth","strokeColor","defaultFillColor","legendBlockSize","datasetStrokeStyle","segmentStrokeStyle","fillColor","legendColorIndicatorStrokeWidth","pointDot","pointColor","defaultStrokeColor","pointStrokeColor","pointDotStrokeWidth","markerShape","markerRadius","pointDotRadius","markerStrokeStyle","pointDotStrokeStyle","drawMarker","legendFontStyle","legendFontFamily","legendFontColor","textBaseline","translate","legendSpaceBetweenBoxAndText","marker","markersize","pointA_x","pointA_y","arc","initPassVariableData_part1","j","result","mxvalue","mnvalue","cumvalue","totvalue","lmaxvalue","lminvalue","lgtxt2","prevpos","firstNotMissingi","lastNotMissingi","firstNotMissingj","lastNotMissingj","grandtotal","tpdata","segmentAngle","cumulativeAngle","realCumulativeAngle","realAmplitude","totalAmplitude","notemptyval","firstNotMissing","lastNotMissing","prevNotMissing","MAX_VALUE","prevMissing","fmtV1","v2","fmtV2","fmtV3","v4","fmtV4","v5","fmtV5","v6","fmtV6","roundPct","v7","v8","v9","v10","fmtV11","v12","fmtV12","v13","fmtV13","datavalue","firstAngle","pctvalue","realStartAngle","maxvalue","minvalue","nextNotMissing","ext_radius","axis","xPos","tpdraw","push","prevnotemptyj","prevemptyj","v6T","fmtV6T","pctvalueT","fmtV7","fmtV8","v8T","fmtV8T","diffnext","diffprev","initPassVariableData_part2","othervars","realbars","fmtV9","fmtV10","calculateOffset","logarithmic","calculatedScale","scaleHop","outerVal","tempp","tempn","xAxisPosY","yAxisPosX","valueHop","nbValueHop","scaleHop2","zeroY","zeroY2","calculatedScale2","logarithmic2","yAxisPos","lmaxvalue_offset","lminvalue_offset","yPosOffset","origin","yPosOffsetOrigin","posYOrigin","msr","availableHeight","rotationDegree","maxSize","calculated_offset","offsetX","offsetY","calculated_offset_max","barWidth","additionalSpaceBetweenBars","barValueSpacing","barDatasetSpacing","barStrokeWidth","barHeight","botval","topval","botOffset","topOffset","spaceBetweenBar","leftval","rightval","rightOffset","HorizontalCalculateOffset","leftOffset","ival","iteration","deb","xBegin","fin","xEnd","val","CapValue","log10","graphMin","outerValue","steps","stepValue","scalingFactor","valueToCap","maxValue","minValue","log","LN10","isBooleanOptionTrue","optionVar","defaultvalue","optionvar","rescale","reference","rv","dataval","tp","setTextBordersAndBackground","fontsize","borders","borderscolor","borderswidth","bordersxspace","bordersyspace","bordersstyle","backgroundcolor","optiongroup","xright","xleft","ytop","txt","ybottom","fillRect","calculatePieDrawingSize","realAvailableWidth","debAngle","finAngle","qposdeb","qposfin","q","midPieY","topNotUsableSize","doughnutRadius","midPieX","leftNotUsableSize","availableWidth","inGraphDataShow","inGraphDataRadiusPosition","nullValue","inGraphDataAlign","inGraphDataRotate","posAngle","inGraphDataFontSize","inGraphDataPaddingRadius","inGraphDataFontStyle","inGraphDataFontFamily","inGraphDataAnglePosition","inGraphDataPaddingAngle","inGraphDataTmpl","textMeasurement","MaxRadiusX","radiusScale","radius","context","chart","animationOptions","linear","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easeInSine","easeOutSine","easeInOutSine","easeInExpo","easeOutExpo","easeInOutExpo","easeInCirc","easeOutCirc","easeInOutCirc","easeInElastic","s","p","a","asin","easeOutElastic","easeInOutElastic","easeInBack","easeOutBack","easeInOutBack","easeInBounce","easeOutBounce","easeInOutBounce","scale","options","inGraphDataVAlign","inGraphDataFontColor","scaleOverlay","scaleOverride","scaleOverride2","scaleGridLinesStep","scaleSteps","scaleStepWidth","scaleStartValue","scaleShowLine","scaleLineColor","scaleLineWidth","scaleLineStyle","scaleShowLabels","scaleShowLabels2","scaleLabel","scaleFontFamily","scaleFontSize","scaleFontStyle","scaleFontColor","scaleShowLabelBackdrop","scaleBackdropColor","scaleBackdropPaddingY","scaleBackdropPaddingX","segmentShowStroke","segmentStrokeColor","segmentStrokeWidth","animationByData","animationEasing","animateRotate","animateScale","onAnimationComplete","IExplorer8","commonOptions","yAxisMinimumInterval","angleShowLineOut","angleLineColor","angleLineStyle","angleLineWidth","pointLabelFontFamily","pointLabelFontStyle","pointLabelFontSize","pointLabelFontColor","PieAndDoughnut","inGraphDataPaddingX","inGraphDataPaddingY","drawXScaleLine","scaleSteps2","scaleStepWidth2","scaleStartValue2","scaleLabel2","scaleShowGridLines","scaleXGridLinesStep","scaleYGridLinesStep","scaleGridLineColor","scaleGridLineStyle","scaleGridLineWidth","showYAxisMin","rotateLabels","scaleTickSizeLeft","scaleTickSizeRight","scaleTickSizeBottom","scaleTickSizeTop","bezierCurve","bezierCurveTension","extrapolateMissingData","xyAxisCommonOptions","inGraphDataXPosition","inGraphDataYPosition","barShowStroke","reverseOrder","barBorderRadius","multiGraph","animationForceSetTimeOut","graphSpaceBefore","graphSpaceAfter","canvasBorders","canvasBackgroundColor","canvasBordersWidth","canvasBordersStyle","canvasBordersColor","graphTitle","graphTitleFontFamily","graphTitleFontSize","graphTitleFontStyle","graphTitleFontColor","graphTitleSpaceBefore","graphTitleSpaceAfter","graphTitleBorders","graphTitleBordersColor","graphTitleBordersXSpace","graphTitleBordersYSpace","graphTitleBordersWidth","graphTitleBordersStyle","graphTitleBackgroundColor","graphSubTitle","graphSubTitleFontFamily","graphSubTitleFontSize","graphSubTitleFontStyle","graphSubTitleFontColor","graphSubTitleSpaceBefore","graphSubTitleSpaceAfter","graphSubTitleBorders","graphSubTitleBordersColor","graphSubTitleBordersXSpace","graphSubTitleBordersYSpace","graphSubTitleBordersWidth","graphSubTitleBordersStyle","graphSubTitleBackgroundColor","footNote","footNoteFontFamily","footNoteFontSize","footNoteFontStyle","footNoteFontColor","footNoteSpaceBefore","footNoteSpaceAfter","footNoteBorders","footNoteBordersColor","footNoteBordersXSpace","footNoteBordersYSpace","footNoteBordersWidth","footNoteBordersStyle","footNoteBackgroundColor","legend","showSingleLegend","maxLegendCols","legendPosY","legendPosX","legendBordersSpaceBefore","legendBordersSpaceAfter","legendBordersSpaceLeft","legendBordersSpaceRight","legendSpaceBeforeText","legendSpaceAfterText","legendSpaceLeftText","legendSpaceRightText","legendXPadding","legendYPadding","inGraphDataBorders","inGraphDataBordersColor","inGraphDataBordersXSpace","inGraphDataBordersYSpace","inGraphDataBordersWidth","inGraphDataBordersStyle","inGraphDataBackgroundColor","savePngFunction","savePngBackgroundColor","annotateFunction","crossText","crossTextIter","crossTextOverlay","crossTextFontFamily","crossTextFontSize","crossTextFontStyle","crossTextFontColor","crossTextRelativePosX","crossTextRelativePosY","crossTextBaseline","crossTextAlign","crossTextPosX","crossTextPosY","crossTextAngle","crossTextFunction","crossTextBorders","crossTextBordersColor","crossTextBordersXSpace","crossTextBordersYSpace","crossTextBordersWidth","crossTextBordersStyle","crossTextBackgroundColor","crossImage","crossImageIter","crossImageOverlay","crossImageRelativePosX","crossImageRelativePosY","crossImageBaseline","crossImageAlign","crossImagePosX","crossImagePosY","crossImageAngle","spaceTop","spaceBottom","spaceRight","spaceLeft","fmtYLabel","fmtYLabel2","animationStartValue","animationStopValue","animationCount","animationPauseTime","animationBackward","defaultLineWidth","graphMaximized","contextMenu","mouseDownRight","mouseDownLeft","mouseDownMiddle","mouseMove","mouseOut","mouseWheel","pointMarker","initFunction","beforeDrawFunction","endDrawDataFunction","endDrawScaleFunction","inGraphDataMinimumAngle","percentageInnerCutout","maxBarWidth","yAxisMinimumInterval2","yScaleLabelsMinimumWidth","xScaleLabelsMinimumWidth","yAxisLeft","yAxisRight","xAxisBottom","xAxisTop","xAxisSpaceBetweenLabels","fullWidthGraph","yAxisLabel","yAxisLabel2","yAxisFontFamily","yAxisFontSize","yAxisFontStyle","yAxisFontColor","yAxisLabelSpaceRight","yAxisLabelSpaceLeft","yAxisSpaceRight","yAxisSpaceLeft","yAxisLabelBorders","yAxisLabelBordersColor","yAxisLabelBordersXSpace","yAxisLabelBordersYSpace","yAxisLabelBordersWidth","yAxisLabelBordersStyle","yAxisLabelBackgroundColor","xAxisLabel","xAxisFontFamily","xAxisFontSize","xAxisFontStyle","xAxisFontColor","xAxisLabelSpaceBefore","xAxisLabelSpaceAfter","xAxisSpaceBefore","xAxisSpaceAfter","xAxisLabelBorders","xAxisLabelBordersColor","xAxisLabelBordersXSpace","xAxisLabelBordersYSpace","xAxisLabelBordersWidth","xAxisLabelBordersStyle","xAxisLabelBackgroundColor","yAxisUnit","yAxisUnit2","yAxisUnitFontFamily","yAxisUnitFontSize","yAxisUnitFontStyle","yAxisUnitFontColor","yAxisUnitSpaceBefore","yAxisUnitSpaceAfter","yAxisUnitBorders","yAxisUnitBordersColor","yAxisUnitBordersXSpace","yAxisUnitBordersYSpace","yAxisUnitBordersWidth","yAxisUnitBordersStyle","yAxisUnitBackgroundColor","clear","c","init_and_start","_eventListeners","oncontextmenu","e","preventDefault","label","defMouse","setRect","labelHeight","scaleHeight","valueBounds","labelTemplateString","upperValue","lowerValue","graphMax","maxSteps","minSteps","getValueBounds","populateLabels","setMeasures","calculateScale","drwSize","animationLoop","scaleAngle","animationDecimal","scaleAnimation","rotateAnimation","correctedRotateAnimation","labelRadius","rotateVal","dispLegend","clrx","clry","clrwidth","clrheight","Min","midX","mxlb","maxL","maxR","iter","nbiter","prevMaxSize","rotateAngle","Max","available","Default","calculateDrawingSizes","opposite","adjacent","vangle","fPt","currentAnimPc","radiusPrt","cutoutRadius","dataCutoutRadius","dataDoughnutRadius","expandInRadius","expandOutRadius","dataCutOutRadius","labelTemplateString2","widestXLabel","xAxisLength","mxlgt","minValue2","OrderOfMagnitude","calculateOrderOfMagnitude","OrderOfMagnitude2","maxValue2","dbAxis","xLabelPos","drawLabels","drawScale","drawLines","animPc","drawLinesDataset","drawMath","yPosXScale","lineColor","highestXLabel","upperValue2","lowerValue2","secondAxis","firstAxis","mathValueHeight","mathFctName","drawMathDeviation","mathValueHeightVal","graphMin2","graphMax2","nrOfBars","maxValp","minValp","maxValn","minValn","inp","inn","tmpl","toFixed","getDecimalPlaces","botBar","topBar","yPos","reverseData","key","isArray","reversed","leftBar","rightBar","bufferDataset","l","drawBars","roundRect","w","fact","quadraticCurveTo","drawData","borderX","borderY","cntiter","multAnim","StartValue","StopValue","animFrameAmount","easingFunction","percentAnimComplete","beginAnim","beginAnimPct","animLoop","easeAdjustedAnimationPercent","dispCrossImage","dispCrossText","animateFrame","requestAnimFrameSetTimeOut","requestAnimFrame","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","graphRange","numberOfSteps","rangeOrderOfMagnitude","minMag","maxMag","roundScale","stopLoop","scldec","sscl","array","apply","userDeclared","valueIfFalse","match","cache","tmplpart2","overlay","animPC","disptxt","txtposx","txtposy","imageposx","imageposy","imageAlign","imageBaseline","imageWidth","imageHeight","drawImage","ylabels","ylabels2","reverseAxis","drawAxis","background","widestLabel","highestLabel","borderWidth","xAxisLabelPos","graphTitleHeight","graphTitlePosY","graphSubTitleHeight","graphSubTitlePosY","footNoteHeight","footNotePosY","yAxisUnitHeight","yAxisUnitPosY","nbeltLegend","nbLegendLines","spaceLegendHeight","yAxisLabelWidth","yAxisLabelPosLeft","yAxisLabelPosRight","xAxisLabelHeight","xLabelHeight","widestYLabel","highestYLabel","widestYLabel2","highestYLabel2","rightNotUsableSize","widthAtSetMeasures","heightAtSetMeasures","bottomNotUsableHeightWithoutXLabels","textLength","availableLegendWidth","maxLegendOnLine","legendHeight","fullLegendWidth","xLabelWidth","bottomNotUsableHeightWithXLabels","nblab","vars","diffnb","prevypos","pts","prevAnimPc","firstpt","lastxPos","traceLine","setYposOrigin","closebz","totVal","initbz","extrapolateMissing","paddingTextX","paddingTextY","yposOrigin","minimumpos","maximumpos","drawSpline","getControlPoints","x0","y0","x1","x2","d01","fa","fb","cp","ti","concat","bezierCurveTo","chartJsMouseDown","other","which","add_event_listener","func","chk","hash","name","removeEventListener","detachEvent","do_func","$","d","__WEBPACK_IMPORTED_MODULE_0_bowser__","__WEBPACK_IMPORTED_MODULE_0_bowser___default","InitializeDataTableWith","a_contentTopBoxHeaderId","a_dataTableId","a_filename","a_firstExportItemTitle","a_secondExportItemTitle","a_tableCount","hide","DataTable","language","search","searchPlaceholder","html","LangJsResource","SearchKeyword","emptyTable","DatatablesEmptyTableText","info","DatatableInfoText","infoEmpty","DatatableInfoEmptyText","infoFiltered","DatatableInfoFilteredText","infoPostFix","infoThousands","lengthMenu","DatatableLengthMenuText","loadingRecords","DatatableLodingRecordsText","processing","DatatableProcessingText","zeroRecords","DatatableZeroRecordsText","paginate","first","DatatablePaginateFirstText","last","DatatablePaginateLastText","next","DatatablePaginateNextText","previous","DatatablePaginatePreviousText","searching","ordering","matchMedia","matches","fixedHeader","buttons","extend","DatatablePrintButtonText","message","customize","win","prepend","find","addClass","DatatableExportButtonText","extension","xlsx","msie","msedge","sheet","xl","worksheets","each","attr","ind","pre","r1","Addrow","r2","r3","r4","r5","childNodes","customizeExcelOutput","scrollCollapse","paging","initComplete","unbind","bind","keyCode","draw","disableUnusableElements","page","recordsDisplay","removeClass","hasClass","that","browserIsSafari","call","HTMLElement","safari","pushNotification","version","FlashDetect","installed","on","index","msg","root","definition","module","exports","detect","ua","getFirstMatch","regex","getSecondMatch","iosdevice","android","nexusMobile","nexusTablet","chromeos","silk","sailfish","tizen","webos","windowsphone","windows","mac","linux","edgeVersion","versionIdentifier","tablet","mobile","xbox","opera","samsungBrowser","whale","mzbrowser","coast","focus","yandexbrowser","ucbrowser","maxthon","epiphany","puffin","sleipnir","kMeleon","osname","chromeBook","chrome","vivaldi","seamonkey","firefox","firefoxos","phantom","slimer","blackberry","touchpad","bada","qupzilla","chromium","googlebot","blink","webkit","gecko","ios","osVersion","getWindowsVersion","osversion","osMajorVersion","compareVersions","bowser","getVersionPrecision","map","arr","iterator","versions","precision","chunks","delta","chunk","isUnsupportedBrowser","minVersions","strictMode","_bowser","browser","hasOwnProperty","Error","browserList","browserItem","check","_detect"],"mappings":"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","file":"./wwwroot/js/Global.bundle.min.js","sourcesContent":["import '../externalLibs/ChartNew';\r\nimport { SHWebXDt } from '../templates/basescripts-defer/datatable-library-settings';\r\n\r\nwindow.SHWebXDt = SHWebXDt;\r\n\r\nvar timers = {};\r\n\r\nfunction delay(timerId, callback, delay) {\r\n if (timers[timerId]) {\r\n window.clearTimeout(timers[timerId]);\r\n }\r\n timers[timerId] = window.setTimeout(function () {\r\n timers[timerId] = null;\r\n callback();\r\n }, delay);\r\n}\r\n\r\nwindow.delay = delay;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./Content/javascript/src/entries/Global.js\n// module id = 191\n// module chunks = 15","/* BYT INTE UT DENNA FIL - JUSTERINGAR ÄR GJORDA I EFTERHAND, FÖR ATT FIXA STÖD FÖR MER INFO I LEGEND (INFON LÄNGRE NED I DIAGRAMMET, MED FÄRGFÖRKLARINGAR) */\r\n/*\r\n * ChartNew.js \r\n * \r\n * Vancoppenolle Francois - January 2014\r\n * francois.vancoppenolle@favomo.be\r\n *\r\n * GitHub community : https://github.com/FVANCOP/ChartNew.js\r\n *\r\n * This file is originally an adaptation of the chart.js source developped by Nick Downie (2013)\r\n * https://github.com/nnnick/Chart.js. But since june 2014, Nick puts a new version with a\r\n * refunded code. Current code of ChartNew.js is no more comparable to the code of Chart.js \r\n *\r\n * new charts compared to Chart.js\r\n *\r\n * horizontalBar\r\n * horizontalStackedBar\r\n *\r\n * Added items compared to Chart.js:\r\n *\r\n * Title, Subtitle, footnotes, axis labels, unit label\r\n * Y Axis on the right and/or the left\r\n * canvas Border\r\n * Legend\r\n * crossText, crossImage\r\n * graphMin, graphMax\r\n * logarithmic y-axis (for line and bar)\r\n * rotateLabels\r\n * and lot of others...\r\n *\r\n */\r\n// non standard functions;\r\n\r\nvar chartJSLineStyle = [];\r\n\r\nchartJSLineStyle[\"solid\"] = [];\r\nchartJSLineStyle[\"dotted\"] = [1, 4];\r\nchartJSLineStyle[\"shortDash\"] = [2, 1];\r\nchartJSLineStyle[\"dashed\"] = [4, 2];\r\nchartJSLineStyle[\"dashSpace\"] = [4, 6];\r\nchartJSLineStyle[\"longDashDot\"] = [7, 2, 1, 2];\r\nchartJSLineStyle[\"longDashShortDash\"] = [10, 4, 4, 4];\r\nchartJSLineStyle[\"gradient\"] = [1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 9, 9, 8, 8, 7, 7, 6, 6, 5, 5, 4, 4, 3, 3, 2, 2, 1];\r\n\r\nfunction lineStyleFn(data) {\r\n if ((typeof chartJSLineStyle[data]) === \"object\") return chartJSLineStyle[data];\r\n else return chartJSLineStyle[\"solid\"];\r\n};\r\n\r\nif (typeof String.prototype.trim !== 'function') {\r\n String.prototype.trim = function () {\r\n return this.replace(/^\\s+|\\s+$/g, '');\r\n }\r\n};\r\nif (!Array.prototype.indexOf) {\r\n Array.prototype.indexOf = function (searchElement /*, fromIndex */) {\r\n \"use strict\";\r\n if (this == null) {\r\n throw new TypeError();\r\n }\r\n var t = Object(this);\r\n var len = t.length >>> 0;\r\n if (len === 0) {\r\n return -1;\r\n }\r\n var n = 0;\r\n if (arguments.length > 0) {\r\n n = Number(arguments[1]);\r\n if (n != n) { // shortcut for verifying if it's NaN\r\n n = 0;\r\n } else if (n != 0 && n != Infinity && n != -Infinity) {\r\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\r\n }\r\n }\r\n if (n >= len) {\r\n return -1;\r\n }\r\n var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\r\n for (; k < len; k++) {\r\n if (k in t && t[k] === searchElement) {\r\n return k;\r\n }\r\n }\r\n return -1;\r\n }\r\n};\r\nvar charJSPersonalDefaultOptions = {};\r\nvar charJSPersonalDefaultOptionsLine = {};\r\nvar charJSPersonalDefaultOptionsRadar = {};\r\nvar charJSPersonalDefaultOptionsPolarArea = {};\r\nvar charJSPersonalDefaultOptionsPie = {};\r\nvar charJSPersonalDefaultOptionsDoughnut = {};\r\nvar charJSPersonalDefaultOptionsBar = {};\r\nvar charJSPersonalDefaultOptionsStackedBar = {};\r\nvar charJSPersonalDefaultOptionsHorizontalBar = {};\r\nvar charJSPersonalDefaultOptionsHorizontalStackedBar = {};\r\n///////// FUNCTIONS THAN CAN BE USED IN THE TEMPLATES ///////////////////////////////////////////\r\n\r\nfunction roundToWithThousands(config, num, place) {\r\n var newval = 1 * unFormat(config, num);\r\n if (typeof (newval) == \"number\" && place != \"none\") {\r\n var roundVal;\r\n if (place <= 0) {\r\n roundVal = -place;\r\n newval = +(Math.round(newval + \"e+\" + roundVal) + \"e-\" + roundVal);\r\n } else {\r\n roundVal = place;\r\n var divval = \"1e+\" + roundVal;\r\n newval = +(Math.round(newval / divval)) * divval;\r\n }\r\n }\r\n newval = fmtChartJS(config, newval, \"none\");\r\n return (newval);\r\n};\r\n\r\nfunction unFormat(config, num) {\r\n if ((config.decimalSeparator != \".\" || config.thousandSeparator != \"\") && typeof (num) == \"string\") {\r\n var v1 = \"\" + num;\r\n if (config.thousandSeparator != \"\") {\r\n while (v1.indexOf(config.thousandSeparator) >= 0) v1 = \"\" + v1.replace(config.thousandSeparator, \"\");\r\n }\r\n if (config.decimalSeparator != \".\") v1 = \"\" + v1.replace(config.decimalSeparator, \".\")\r\n return 1 * v1;\r\n } else {\r\n return num;\r\n }\r\n};\r\n///////// ANNOTATE PART OF THE SCRIPT ///////////////////////////////////////////\r\n/********************************************************************************\r\nCopyright (C) 1999 Thomas Brattli\r\nThis script is made by and copyrighted to Thomas Brattli\r\nVisit for more great scripts. This may be used freely as long as this msg is intact!\r\nI will also appriciate any links you could give me.\r\nDistributed by Hypergurl\r\n********************************************************************************/\r\nvar cachebis = {};\r\n\r\nfunction fmtChartJSPerso(config, value, fmt) {\r\n switch (fmt) {\r\n case \"SampleJS_Format\":\r\n if (typeof (value) == \"number\") return_value = \"My Format : \" + value.toString() + \" $\";\r\n else return_value = value + \"XX\";\r\n break;\r\n case \"Change_Month\":\r\n if (typeof (value) == \"string\") return_value = value.toString() + \" 2014\";\r\n else return_value = value.toString() + \"YY\";\r\n break;\r\n default:\r\n return_value = value;\r\n break;\r\n }\r\n return (return_value);\r\n};\r\n\r\nfunction fmtChartJS(config, value, fmt) {\r\n var return_value;\r\n if (fmt == \"notformatted\") {\r\n return_value = value;\r\n } else if (fmt == \"none\" && typeof (value) == \"number\") {\r\n if (config.roundNumber != \"none\") {\r\n var roundVal;\r\n if (config.roundNumber <= 0) {\r\n roundVal = -config.roundNumber;\r\n value = +(Math.round(value + \"e+\" + roundVal) + \"e-\" + roundVal);\r\n } else {\r\n roundVal = config.roundNumber;\r\n var divval = \"1e+\" + roundVal;\r\n value = +(Math.round(value / divval)) * divval;\r\n }\r\n }\r\n if (config.decimalSeparator != \".\" || config.thousandSeparator != \"\") {\r\n return_value = value.toString().replace(/\\./g, config.decimalSeparator);\r\n if (config.thousandSeparator != \"\") {\r\n var part1 = return_value;\r\n var part2 = \"\";\r\n var posdec = part1.indexOf(config.decimalSeparator);\r\n if (posdec >= 0) {\r\n part2 = part1.substring(posdec + 1, part1.length);\r\n part2 = part2.split('').reverse().join(''); // reverse string\r\n part1 = part1.substring(0, posdec);\r\n }\r\n part1 = part1.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, config.thousandSeparator);\r\n part2 = part2.split('').reverse().join(''); // reverse string\r\n return_value = part1\r\n if (part2 != \"\") return_value = return_value + config.decimalSeparator + part2;\r\n }\r\n } else return_value = value;\r\n } else if (fmt != \"none\" && fmt != \"notformatted\") {\r\n return_value = fmtChartJSPerso(config, value, fmt);\r\n } else {\r\n return_value = value;\r\n }\r\n return (return_value);\r\n};\r\n\r\nfunction addParameters2Function(data, fctName, fctList) {\r\n var mathFunctions = {\r\n mean: {\r\n data: data.data,\r\n datasetNr: data.v11\r\n },\r\n varianz: {\r\n data: data.data,\r\n datasetNr: data.v11\r\n },\r\n stddev: {\r\n data: data.data,\r\n datasetNr: data.v11\r\n },\r\n cv: {\r\n data: data.data,\r\n datasetNr: data.v11\r\n },\r\n median: {\r\n data: data.data,\r\n datasetNr: data.v11\r\n }\r\n };\r\n // difference to current value (v3)\r\n dif = false;\r\n if (fctName.substr(-3) == \"Dif\") {\r\n fctName = fctName.substr(0, fctName.length - 3);\r\n dif = true;\r\n }\r\n if (typeof eval(fctName) == \"function\") {\r\n var parameter = eval(fctList + \".\" + fctName);\r\n if (dif) {\r\n // difference between v3 (current value) and math function\r\n return data.v3 - window[fctName](parameter);\r\n }\r\n return window[fctName](parameter);\r\n }\r\n return null;\r\n};\r\n\r\nfunction isNumber(n) {\r\n return !isNaN(parseFloat(n)) && isFinite(n);\r\n};\r\n\r\nfunction tmplbis(str, data, config) {\r\n newstr = str;\r\n if (newstr.substr(0, config.templatesOpenTag.length) == config.templatesOpenTag) newstr = \"<%=\" + newstr.substr(config.templatesOpenTag.length, newstr.length - config.templatesOpenTag.length);\r\n if (newstr.substr(newstr.length - config.templatesCloseTag.length, config.templatesCloseTag.length) == config.templatesCloseTag) newstr = newstr.substr(0, newstr.length - config.templatesCloseTag.length) + \"%>\";\r\n return tmplter(newstr, data);\r\n}\r\n\r\nfunction tmplter(str, data) {\r\n var mathFunctionList = [\"mean\", \"varianz\", \"stddev\", \"cv\", \"median\"];\r\n var regexMath = new RegExp('<%=((?:(?:.*?)\\\\W)??)((?:' + mathFunctionList.join('|') + ')(?:Dif)?)\\\\(([0-9]*?)\\\\)(.*?)%>', 'g');\r\n while (regexMath.test(str)) {\r\n str = str.replace(regexMath, function ($0, $1, $2, $3, $4) {\r\n var rndFac;\r\n if ($3) rndFac = $3;\r\n else rndFac = 2;\r\n var value = addParameters2Function(data, $2, \"mathFunctions\");\r\n if (isNumber(value))\r\n return '<%=' + $1 + '' + Math.round(Math.pow(10, rndFac) * value) / Math.pow(10, rndFac) + '' + $4 + '%>';\r\n return '<%= %>';\r\n });\r\n }\r\n // Figure out if we're getting a template, or if we need to\r\n // load the template - and be sure to cache the result.\r\n // first check if it's can be an id\r\n var fn = /^[A-Za-z][-A-Za-z0-9_:.]*$/.test(str) ? cachebis[str] = cachebis[str] ||\r\n tmplter(document.getElementById(str).innerHTML) :\r\n // Generate a reusable function that will serve as a template\r\n // generator (and which will be cached).\r\n new Function(\"obj\",\r\n \"var p=[],print=function(){p.push.apply(p,arguments);};\" +\r\n // Introduce the data as local variables using with(){}\r\n \"with(obj){p.push('\" +\r\n // Convert the template into pure JavaScript\r\n str\r\n .replace(/[\\r\\n]/g, \"\\\\n\")\r\n .replace(/[\\t]/g, \" \")\r\n .split(\"<%\").join(\"\\t\")\r\n .replace(/((^|%>)[^\\t]*)'/g, \"$1\\r\")\r\n .replace(/\\t=(.*?)%>/g, \"',$1,'\")\r\n .split(\"\\t\").join(\"');\")\r\n .split(\"%>\").join(\"p.push('\")\r\n .split(\"\\r\").join(\"\\\\'\") + \"');}return p.join('');\");\r\n // Provide some basic currying to the user\r\n return data ? fn(data) : fn;\r\n};\r\nif (typeof CanvasRenderingContext2D !== 'undefined') {\r\n /**\r\n\t * ctx.prototype\r\n\t * fillText option for canvas Multiline Support\r\n\t * @param text string \\n for newline\r\n\t * @param x x position\r\n\t * @param y y position\r\n\t * @param yLevel = \"bottom\" => last line has this y-Pos [default], = \"middle\" => the middle line has this y-Pos)\r\n\t * @param lineHeight lineHeight\r\n\t * @param horizontal horizontal\r\n\t */\r\n CanvasRenderingContext2D.prototype.fillTextMultiLine = function (text, x, y, yLevel, lineHeight, horizontal, detectMouseOnText, ctx, idText, rotate, x_decal, y_decal, posi, posj) {\r\n var lines = (\"\" + text).split(\"\\n\");\r\n // if its one line => in the middle \r\n // two lines one above the mid one below etc.\t\r\n if (yLevel == \"middle\") {\r\n if (horizontal) y -= ((lines.length - 1) / 2) * lineHeight;\r\n } else if (yLevel == \"bottom\") { // default\r\n if (horizontal) y -= (lines.length - 1) * lineHeight;\r\n }\r\n\r\n var y_pos = y - lineHeight;\r\n\r\n for (var i = 0; i < lines.length; i++) {\r\n this.fillText(lines[i], x, y);\r\n y += lineHeight;\r\n }\r\n if (detectMouseOnText) {\r\n var txtSize = ctx.measureTextMultiLine(text, lineHeight);\r\n var x_pos = [];\r\n var y_pos = [];\r\n x_pos.p1 = x_decal + x;\r\n y_pos.p1 = y_decal + y - lineHeight;\r\n var rotateRV = (Math.PI / 2) + rotate;\r\n if (ctx.textAlign == \"left\" && yLevel == \"top\") {\r\n x_pos.p1 += lineHeight * Math.cos(rotateRV);\r\n y_pos.p1 += lineHeight * Math.sin(rotateRV);\r\n } else if (ctx.textAlign == \"left\" && yLevel == \"middle\") {\r\n x_pos.p1 += (lineHeight / 2) * Math.cos(rotateRV);\r\n y_pos.p1 += (lineHeight / 2) * Math.sin(rotateRV);\r\n } else if (ctx.textAlign == \"left\" && yLevel == \"bottom\") {\r\n // nothing to adapt;\r\n } else if (ctx.textAlign == \"center\" && yLevel == \"top\") {\r\n x_pos.p1 += lineHeight * Math.cos(rotateRV) - (txtSize.textWidth / 2) * Math.cos(rotate);\r\n y_pos.p1 += lineHeight * Math.sin(rotateRV) - (txtSize.textWidth / 2) * Math.sin(rotate);\r\n } else if (ctx.textAlign == \"center\" && yLevel == \"middle\") {\r\n x_pos.p1 += (lineHeight / 2) * Math.cos(rotateRV) - (txtSize.textWidth / 2) * Math.cos(rotate);\r\n y_pos.p1 += (lineHeight / 2) * Math.sin(rotateRV) - (txtSize.textWidth / 2) * Math.sin(rotate);\r\n } else if (ctx.textAlign == \"center\" && yLevel == \"bottom\") {\r\n x_pos.p1 -= (txtSize.textWidth / 2) * Math.cos(rotate);\r\n y_pos.p1 -= (txtSize.textWidth / 2) * Math.sin(rotate);\r\n } else if (ctx.textAlign == \"right\" && yLevel == \"top\") {\r\n x_pos.p1 += (lineHeight * Math.cos(rotateRV) - txtSize.textWidth * Math.cos(rotate));\r\n y_pos.p1 += (lineHeight * Math.sin(rotateRV) - txtSize.textWidth * Math.sin(rotate));\r\n } else if (ctx.textAlign == \"right\" && yLevel == \"middle\") {\r\n x_pos.p1 += (lineHeight / 2) * Math.cos(rotateRV) - txtSize.textWidth * Math.cos(rotate);\r\n y_pos.p1 += (lineHeight / 2) * Math.sin(rotateRV) - txtSize.textWidth * Math.sin(rotate);\r\n } else if (ctx.textAlign == \"right\" && yLevel == \"bottom\") {\r\n x_pos.p1 -= txtSize.textWidth * Math.cos(rotate);\r\n y_pos.p1 -= txtSize.textWidth * Math.sin(rotate);\r\n }\r\n\r\n // Other corners of the rectangle;\r\n\r\n x_pos.p2 = x_pos.p1 + txtSize.textWidth * Math.cos(rotate);\r\n y_pos.p2 = y_pos.p1 + txtSize.textWidth * Math.sin(rotate);\r\n\r\n x_pos.p3 = x_pos.p1 - lineHeight * Math.cos(rotateRV);\r\n y_pos.p3 = y_pos.p1 - lineHeight * Math.sin(rotateRV);\r\n\r\n x_pos.p4 = x_pos.p3 + txtSize.textWidth * Math.cos(rotate);\r\n y_pos.p4 = y_pos.p3 + txtSize.textWidth * Math.sin(rotate);\r\n\r\n jsTextMousePos[ctx.ChartNewId][jsTextMousePos[ctx.ChartNewId].length] = [idText, text, x_pos, y_pos, rotate, txtSize.textWidth, txtSize.textHeight, posi, posj];\r\n\r\n }\r\n };\r\n CanvasRenderingContext2D.prototype.measureTextMultiLine = function (text, lineHeight) {\r\n var textWidth = 0;\r\n var lg;\r\n var lines = (\"\" + text).replace(/
/ig, \"\\n\").split(\"\\n\");\r\n var textHeight = lines.length * lineHeight;\r\n // if its one line => in the middle \r\n // two lines one above the mid one below etc.\t\r\n for (var i = 0; i < lines.length; i++) {\r\n lg = this.measureText(lines[i]).width;\r\n if (lg > textWidth) textWidth = lg;\r\n }\r\n return {\r\n textWidth: textWidth,\r\n textHeight: 1.5 * textHeight\r\n };\r\n };\r\n if (typeof CanvasRenderingContext2D.prototype.setLineDash !== 'function') {\r\n CanvasRenderingContext2D.prototype.setLineDash = function (listdash) {\r\n return 0;\r\n };\r\n };\r\n};\r\ncursorDivCreated = false;\r\n\r\nfunction createCursorDiv() {\r\n if (cursorDivCreated == false) {\r\n var div = document.createElement('divCursor');\r\n div.id = 'divCursor';\r\n div.style.position = 'absolute';\r\n document.body.appendChild(div);\r\n cursorDivCreated = true;\r\n }\r\n};\r\n\r\ninitChartJsResize = false;\r\nvar jsGraphResize = new Array();\r\n\r\nfunction addResponsiveChart(id, ctx, data, config) {\r\n initChartResize();\r\n var newSize = resizeGraph(ctx, config);\r\n if (typeof ctx.prevWidth != \"undefined\") {\r\n resizeCtx(ctx, newSize.newWidth, newSize.newHeight, config);\r\n ctx.prevWidth = newSize.newWidth;\r\n } else if (config.responsiveScaleContent && config.responsiveWindowInitialWidth) {\r\n ctx.initialWidth = newSize.newWidth;\r\n }\r\n\r\n ctx.prevWidth = newSize.newWidth;\r\n ctx.prevHeight = newSize.newHeight;\r\n jsGraphResize[jsGraphResize.length] = [id, ctx.tpchart, ctx, data, config];\r\n};\r\n\r\nfunction initChartResize() {\r\n if (initChartJsResize == false) {\r\n if (window.addEventListener) {\r\n window.addEventListener(\"resize\", chartJsResize);\r\n } else {\r\n window.attachEvent(\"resize\", chartJsResize);\r\n }\r\n }\r\n};\r\n\r\nvar container;\r\nfunction getMaximumWidth(domNode) {\r\n if (domNode.parentNode != null)\r\n if (domNode.parentNode != undefined)\r\n container = domNode.parentNode;\r\n return container.clientWidth;\r\n};\r\n\r\nfunction getMaximumHeight(domNode) {\r\n if (domNode.parentNode != null)\r\n if (domNode.parentNode != undefined)\r\n container = domNode.parentNode;\r\n return container.clientHeight;\r\n};\r\n\r\nfunction resizeCtx(ctx, newWidth, newHeight, config) {\r\n if (typeof ctx.DefaultchartTextScale == \"undefined\") ctx.DefaultchartTextScale = config.chartTextScale;\r\n if (typeof ctx.DefaultchartLineScale == \"undefined\") ctx.DefaultchartLineScale = config.chartLineScale;\r\n if (typeof ctx.DefaultchartSpaceScale == \"undefined\") ctx.DefaultchartSpaceScale = config.chartSpaceScale;\r\n\r\n ctx.canvas.height = newHeight;\r\n ctx.canvas.width = newWidth;\r\n /* new ratio */\r\n if (typeof ctx.chartTextScale != \"undefined\" && config.responsiveScaleContent) {\r\n ctx.chartTextScale = ctx.DefaultchartTextScale * (newWidth / ctx.initialWidth);\r\n ctx.chartLineScale = ctx.DefaultchartLineScale * (newWidth / ctx.initialWidth);\r\n ctx.chartSpaceScale = ctx.DefaultchartSpaceScale * (newWidth / ctx.initialWidth);\r\n }\r\n};\r\n\r\nfunction resizeGraph(ctx, config) {\r\n if (typeof config.maintainAspectRatio == \"undefined\") config.maintainAspectRatio = true;\r\n if (typeof config.responsiveMinWidth == \"undefined\") config.responsiveMinWidth = 0;\r\n if (typeof config.responsiveMinHeight == \"undefined\") config.responsiveMinHeight = 0;\r\n if (typeof config.responsiveMaxWidth == \"undefined\") config.responsiveMaxWidth = 9999999;\r\n if (typeof config.responsiveMaxHeight == \"undefined\") config.responsiveMaxHeight = 9999999;\r\n var canvas = ctx.canvas;\r\n if (typeof ctx.aspectRatio == \"undefined\") {\r\n ctx.aspectRatio = canvas.width / canvas.height;\r\n }\r\n\r\n var newWidth = getMaximumWidth(canvas);\r\n var newHeight = config.maintainAspectRatio ? newWidth / ctx.aspectRatio : getMaximumHeight(canvas);\r\n newWidth = Math.min(config.responsiveMaxWidth, Math.max(config.responsiveMinWidth, newWidth));\r\n newHeight = Math.min(config.responsiveMaxHeight, Math.max(config.responsiveMinHeight, newHeight));\r\n return { newWidth: parseInt(newWidth), newHeight: parseInt(newHeight) };\r\n};\r\n\r\n\r\n\r\nfunction chartJsResize() {\r\n for (var i = 0; i < jsGraphResize.length; i++) {\r\n if (typeof jsGraphResize[i][2].firstPass != \"undefined\") {\r\n if (jsGraphResize[i][2].firstPass == 5) jsGraphResize[i][2].firstPass = 6;\r\n }\r\n subUpdateChart(jsGraphResize[i][2], jsGraphResize[i][3], jsGraphResize[i][4]);\r\n if (typeof jsGraphResize[i][2].firstPass != \"undefined\") {\r\n if (jsGraphResize[i][2].firstPass == 6) jsGraphResize[i][2].firstPass = 5;\r\n }\r\n }\r\n};\r\n\r\nfunction testRedraw(ctx, data, config) {\r\n if (ctx.firstPass == 2 || ctx.firstPass == 4 || ctx.firstPass == 9) {\r\n var originalfirstpass = ctx.firstPass;\r\n ctx.firstPass = 6;\r\n subUpdateChart(ctx, data, config);\r\n ctx.firstPass = originalfirstpass;\r\n return true;\r\n } else {\r\n ctx.firstPass = 5;\r\n return false;\r\n }\r\n};\r\n\r\nfunction updateChart(ctx, data, config, animation, runanimationcompletefunction) {\r\n if (ctx.firstPass == 5) {\r\n if (window.devicePixelRatio) {\r\n ctx.canvas.width = ctx.canvas.width / window.devicePixelRatio;\r\n ctx.canvas.height = ctx.canvas.height / window.devicePixelRatio;\r\n\r\n }\r\n ctx.runanimationcompletefunction = runanimationcompletefunction;\r\n if (animation) ctx.firstPass = 0;\r\n else if (config.responsive) ctx.firstPass = 7;\r\n else ctx.firstPass = 7;\r\n if (config.responsive) {\r\n // update jsGraphResize;\r\n for (var i = 0; i < jsGraphResize.length; i++) {\r\n if (jsGraphResize[i][2].ChartNewId == ctx.ChartNewId) {\r\n jsGraphResize[i][3] = data;\r\n jsGraphResize[i][4] = config;\r\n }\r\n }\r\n\r\n }\r\n subUpdateChart(ctx, data, config);\r\n\r\n }\r\n};\r\n\r\nfunction subUpdateChart(ctx, data, config) {\r\n // ctx.firstPass==undefined => chart never drawn\r\n // ctx.firstPass==0 => chart is drawn but need to be redrawn with animation\r\n // ctx.firstPass==1 => chart is drawn with animation \r\n // ctx.firstPass==2 => chart is in animation but at the end the graph need perhaps to be redrawn;\r\n // ctx.firstPass==3 => chart currently drawing without animation; \r\n // ctx.firstPass==4 => chart currently drawing without animationb but at the end, the graph need perhaps to be redrawn;\r\n // ctx.firstPass==5 => chart is displayed ; \r\n // ctx.firstPass==6 => chart is displayed but need to be redraw without animation (because of a resize);\r\n // ctx.firstPass==7 => chart is displayed but need to be redraw without responsivity;\r\n if (!dynamicFunction(data, config, ctx)) { return; }\r\n var newSize;\r\n if (typeof ctx.firstPass == \"undefined\") {\r\n ctx.firstPass = 1;\r\n newSize = resizeGraph(ctx, config);\r\n if (config.responsive) {\r\n resizeCtx(ctx, newSize.newWidth, newSize.newHeight, config);\r\n ctx.prevWidth = newSize.newWidth;\r\n ctx.prevHeight = newSize.newHeight;\r\n } else {\r\n ctx.prevWidth = 0;\r\n ctx.prevHeight = 0;\r\n }\r\n ctx.runanimationcompletefunction = true;\r\n redrawGraph(ctx, data, config);\r\n } else if (ctx.firstPass == 0) {\r\n ctx.firstPass = 1;\r\n newSize = resizeGraph(ctx, config);\r\n if (config.responsive) {\r\n resizeCtx(ctx, newSize.newWidth, newSize.newHeight, config);\r\n ctx.prevWidth = newSize.newWidth;\r\n ctx.prevHeight = newSize.newHeight;\r\n } else {\r\n ctx.prevWidth = 0;\r\n ctx.prevHeight = 0;\r\n }\r\n redrawGraph(ctx, data, config);\r\n } else if (ctx.firstPass == 1 || ctx.firstPass == 2) {\r\n ctx.firstPass = 2;\r\n } else if (ctx.firstPass == 3 || ctx.firstPass == 4) {\r\n ctx.firstPass = 4;\r\n } else if (ctx.firstPass == 5) {\r\n ctx.firstPass = 1;\r\n redrawGraph(ctx, data, config);\r\n } else if (ctx.firstPass == 6) {\r\n newSize = resizeGraph(ctx, config);\r\n if (newSize.newWidth != ctx.prevWidth || newSize.newHeight != ctx.prevHeight) {\r\n ctx.firstPass = 3;\r\n ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);\r\n if (config.responsive) {\r\n resizeCtx(ctx, newSize.newWidth, newSize.newHeight, config);\r\n ctx.prevWidth = newSize.newWidth;\r\n ctx.prevHeight = newSize.newHeight;\r\n } else {\r\n ctx.prevWidth = 0;\r\n ctx.prevHeight = 0;\r\n }\r\n redrawGraph(ctx, data, config);\r\n } else ctx.firstPass = 5;\r\n } else if (ctx.firstPass == 7) {\r\n newSize = resizeGraph(ctx, config);\r\n ctx.firstPass = 3;\r\n ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);\r\n if (config.responsive) {\r\n resizeCtx(ctx, newSize.newWidth, newSize.newHeight, config);\r\n ctx.prevWidth = newSize.newWidth;\r\n ctx.prevHeight = newSize.newHeight;\r\n } else {\r\n ctx.prevWidth = 0;\r\n ctx.prevHeight = 0;\r\n }\r\n redrawGraph(ctx, data, config);\r\n }\r\n};\r\n\r\nfunction redrawGraph(ctx, data, config) {\r\n\r\n var myGraph = new Chart(ctx);\r\n switch (ctx.tpchart) {\r\n case \"Bar\":\r\n myGraph.Bar(data, config);\r\n break;\r\n case \"Pie\":\r\n myGraph.Pie(data, config);\r\n break;\r\n case \"Doughnut\":\r\n myGraph.Doughnut(data, config);\r\n break;\r\n case \"Radar\":\r\n myGraph.Radar(data, config);\r\n break;\r\n case \"PolarArea\":\r\n myGraph.PolarArea(data, config);\r\n break;\r\n case \"HorizontalBar\":\r\n myGraph.HorizontalBar(data, config);\r\n break;\r\n case \"StackedBar\":\r\n myGraph.StackedBar(data, config);\r\n break;\r\n case \"HorizontalStackedBar\":\r\n myGraph.HorizontalStackedBar(data, config);\r\n break;\r\n case \"Line\":\r\n myGraph.Line(data, config);\r\n break;\r\n }\r\n};\r\n\r\n\r\n//Default browsercheck, added to all scripts! \r\nfunction checkBrowser() {\r\n this.ver = navigator.appVersion\r\n this.dom = document.getElementById ? 1 : 0\r\n this.ie5 = (this.ver.indexOf(\"MSIE 5\") > -1 && this.dom) ? 1 : 0;\r\n this.ie4 = (document.all && !this.dom) ? 1 : 0;\r\n this.ns5 = (this.dom && parseInt(this.ver) >= 5) ? 1 : 0;\r\n this.ns4 = (document.layers && !this.dom) ? 1 : 0;\r\n this.bw = (this.ie5 || this.ie4 || this.ns4 || this.ns5)\r\n return this\r\n};\r\nbw = new checkBrowser();\r\n//Set these variables:\r\nfromLeft = 10; // How much from the left of the cursor should the div be?\r\nfromTop = 10; // How much from the top of the cursor should the div be?\r\n/********************************************************************\r\nInitilizes the objects\r\n*********************************************************************/\r\nfunction cursorInit() {\r\n scrolled = bw.ns4 || bw.ns5 ? \"window.pageYOffset\" : \"document.body.scrollTop\"\r\n if (bw.ns4) document.captureEvents(Event.MOUSEMOVE)\r\n};\r\n/********************************************************************\r\nContructs the cursorobjects\r\n*********************************************************************/\r\nfunction makeCursorObj(obj, nest) {\r\n createCursorDiv();\r\n nest = (!nest) ? '' : 'document.' + nest + '.'\r\n this.css = bw.dom ? document.getElementById(obj).style : bw.ie4 ? document.all[obj].style : bw.ns4 ? eval(nest + \"document.layers.\" + obj) : 0;\r\n this.moveIt = b_moveIt;\r\n cursorInit();\r\n return this\r\n};\r\n\r\nfunction b_moveIt(x, y) {\r\n this.x = x;\r\n this.y = y;\r\n this.css.left = this.x + \"px\";\r\n this.css.top = this.y + \"px\";\r\n};\r\n\r\nfunction isIE() {\r\n var myNav = navigator.userAgent.toLowerCase();\r\n return (myNav.indexOf('msie') != -1) ? parseInt(myNav.split('msie')[1]) : false;\r\n};\r\n\r\nfunction mergeChartConfig(defaults, userDefined) {\r\n var returnObj = {};\r\n for (var attrname in defaults) {\r\n returnObj[attrname] = defaults[attrname];\r\n }\r\n for (var attrnameBis in userDefined) {\r\n returnObj[attrnameBis] = userDefined[attrnameBis];\r\n }\r\n return returnObj;\r\n};\r\n\r\nfunction sleep(ms) {\r\n var dt = new Date();\r\n dt.setTime(dt.getTime() + ms);\r\n while (new Date().getTime() < dt.getTime()) { };\r\n};\r\n\r\nfunction saveCanvas(ctx, data, config) {\r\n cvSave = ctx.getImageData(0, 0, ctx.canvas.width, ctx.canvas.height);\r\n var saveCanvasConfig = {\r\n savePng: false,\r\n annotateDisplay: false,\r\n animation: false,\r\n dynamicDisplay: false\r\n };\r\n var savePngConfig = mergeChartConfig(config, saveCanvasConfig);\r\n savePngConfig.clearRect = false;\r\n /* And ink them */\r\n\r\n redrawGraph(ctx, data, savePngConfig);\r\n var image;\r\n if (config.savePngOutput == \"NewWindow\") {\r\n image = ctx.canvas.toDataURL();\r\n ctx.putImageData(cvSave, 0, 0);\r\n window.open(image, '_blank');\r\n }\r\n if (config.savePngOutput == \"CurrentWindow\") {\r\n image = ctx.canvas.toDataURL();\r\n ctx.putImageData(cvSave, 0, 0);\r\n window.location.href = image;\r\n }\r\n if (config.savePngOutput == \"Save\") {\r\n image = ctx.canvas.toDataURL();\r\n var downloadLink = document.createElement(\"a\");\r\n downloadLink.href = image;\r\n downloadLink.download = config.savePngName + \".png\";\r\n document.body.appendChild(downloadLink);\r\n downloadLink.click();\r\n document.body.removeChild(downloadLink);\r\n }\r\n};\r\nif (typeof String.prototype.trim !== 'function') {\r\n String.prototype.trim = function () {\r\n return this.replace(/^\\s+|\\s+$/g, '');\r\n }\r\n};\r\nvar dynamicDisplay = new Array();\r\nvar dynamicDisplayList = new Array();\r\n\r\nfunction dynamicFunction(data, config, ctx) {\r\n\r\n if (isIE() < 9 && isIE() != false) return (true);\r\n\r\n\r\n if (config.dynamicDisplay) {\r\n if (ctx.canvas.id == \"\") {\r\n var cvdate = new Date();\r\n var cvmillsec = cvdate.getTime();\r\n ctx.canvas.id = \"Canvas_\" + cvmillsec;\r\n }\r\n if (typeof (dynamicDisplay[ctx.canvas.id]) == \"undefined\") {\r\n dynamicDisplayList[dynamicDisplayList[\"length\"]] = ctx.canvas.id;\r\n dynamicDisplay[ctx.canvas.id] = [ctx, false, false, data, config, ctx.canvas];\r\n dynamicDisplay[ctx.canvas.id][1] = isScrolledIntoView(ctx.canvas);\r\n window.onscroll = scrollFunction;\r\n } else if (dynamicDisplay[ctx.canvas.id][2] == false) {\r\n dynamicDisplay[ctx.canvas.id][1] = isScrolledIntoView(ctx.canvas);\r\n }\r\n if (dynamicDisplay[ctx.canvas.id][1] == false && dynamicDisplay[ctx.canvas.id][2] == false) {\r\n return false;\r\n }\r\n dynamicDisplay[ctx.canvas.id][2] = true;\r\n }\r\n return true;\r\n};\r\n\r\nfunction isScrolledIntoView(element) {\r\n var xPosition = 0;\r\n var yPosition = 0;\r\n elem = element;\r\n while (elem) {\r\n xPosition += (elem.offsetLeft - elem.scrollLeft + elem.clientLeft);\r\n yPosition += (elem.offsetTop - elem.scrollTop + elem.clientTop);\r\n elem = elem.offsetParent;\r\n }\r\n if (xPosition + element.width / 2 >= window.pageXOffset &&\r\n xPosition + element.width / 2 <= window.pageXOffset + window.innerWidth &&\r\n yPosition + element.height / 2 >= window.pageYOffset &&\r\n yPosition + element.height / 2 <= window.pageYOffset + window.innerHeight\r\n ) return (true);\r\n else return false;\r\n};\r\n\r\nfunction scrollFunction() {\r\n for (var i = 0; i < dynamicDisplayList[\"length\"]; i++) {\r\n if (isScrolledIntoView(dynamicDisplay[dynamicDisplayList[i]][5]) && dynamicDisplay[dynamicDisplayList[i]][2] == false) {\r\n dynamicDisplay[dynamicDisplayList[i]][1] = true;\r\n redrawGraph(dynamicDisplay[dynamicDisplayList[i]][0], dynamicDisplay[dynamicDisplayList[i]][3], dynamicDisplay[dynamicDisplayList[i]][4]);\r\n }\r\n }\r\n};\r\n\r\nvar jsGraphAnnotate = new Array();\r\nvar jsTextMousePos = new Array();\r\n\r\nfunction clearAnnotate(ctxid) {\r\n jsGraphAnnotate[ctxid] = [];\r\n jsTextMousePos[ctxid] = [];\r\n};\r\n\r\nfunction getMousePos(canvas, evt) {\r\n var rect = canvas.getBoundingClientRect();\r\n return {\r\n x: evt.clientX - rect.left,\r\n y: evt.clientY - rect.top\r\n };\r\n};\r\n\r\nvar annotatePrevShow = -1;\r\n\r\nfunction doMouseAction(config, ctx, event, data, action, funct) {\r\n\r\n var onData = false;\r\n var topY, bottomY;\r\n var leftX, rightX;\r\n var textMsr;\r\n\r\n if (action == \"annotate\") {\r\n var annotateDIV = document.getElementById('divCursor');\r\n var show = false;\r\n annotateDIV.className = (config.annotateClassName) ? config.annotateClassName : '';\r\n annotateDIV.style.border = (config.annotateClassName) ? '' : config.annotateBorder;\r\n annotateDIV.style.padding = (config.annotateClassName) ? '' : config.annotatePadding;\r\n annotateDIV.style.borderRadius = (config.annotateClassName) ? '' : config.annotateBorderRadius;\r\n annotateDIV.style.backgroundColor = (config.annotateClassName) ? '' : config.annotateBackgroundColor;\r\n annotateDIV.style.color = (config.annotateClassName) ? '' : config.annotateFontColor;\r\n annotateDIV.style.fontFamily = (config.annotateClassName) ? '' : config.annotateFontFamily;\r\n annotateDIV.style.fontSize = (config.annotateClassName) ? '' : (Math.ceil(ctx.chartTextScale * config.annotateFontSize)).toString() + \"pt\";\r\n annotateDIV.style.fontStyle = (config.annotateClassName) ? '' : config.annotateFontStyle;\r\n annotateDIV.style.zIndex = 999;\r\n ctx.save();\r\n ctx.font = annotateDIV.style.fontStyle + \" \" + annotateDIV.style.fontSize + \" \" + annotateDIV.style.fontFamily;\r\n var rect = ctx.canvas.getBoundingClientRect();\r\n }\r\n if (action == \"annotate\") {\r\n show = false;\r\n annotateDIV.style.display = show ? '' : 'none';\r\n }\r\n var canvas_pos = getMousePos(ctx.canvas, event);\r\n for (var i = 0; i < jsGraphAnnotate[ctx.ChartNewId][\"length\"] && !show; i++) {\r\n if (jsGraphAnnotate[ctx.ChartNewId][i][0] == \"ARC\") {\r\n myStatData = jsGraphAnnotate[ctx.ChartNewId][i][3][jsGraphAnnotate[ctx.ChartNewId][i][1]];\r\n distance = Math.sqrt((canvas_pos.x - myStatData.midPosX) * (canvas_pos.x - myStatData.midPosX) + (canvas_pos.y - myStatData.midPosY) * (canvas_pos.y - myStatData.midPosY));\r\n if (distance > myStatData.int_radius && distance < myStatData.radiusOffset) {\r\n angle = (Math.acos((canvas_pos.x - myStatData.midPosX) / distance) % (2 * Math.PI) + 2 * Math.PI) % (2 * Math.PI);\r\n if (canvas_pos.y < myStatData.midPosY) angle = -angle;\r\n angle = (((angle + 2 * Math.PI) % (2 * Math.PI)) + 2 * Math.PI) % (2 * Math.PI);\r\n myStatData.startAngle = (((myStatData.startAngle + 2 * Math.PI) % (2 * Math.PI)) + 2 * Math.PI) % (2 * Math.PI);\r\n myStatData.endAngle = (((myStatData.endAngle + 2 * Math.PI) % (2 * Math.PI)) + 2 * Math.PI) % (2 * Math.PI);\r\n if (myStatData.endAngle < myStatData.startAngle) myStatData.endAngle += 2 * Math.PI;\r\n if ((angle > myStatData.startAngle && angle < myStatData.endAngle) || (angle > myStatData.startAngle - 2 * Math.PI && angle < myStatData.endAngle - 2 * Math.PI) || (angle > myStatData.startAngle + 2 * Math.PI && angle < myStatData.endAngle + 2 * Math.PI)) {\r\n myStatData.graphPosX = canvas_pos.x;\r\n myStatData.graphPosY = canvas_pos.y;\r\n onData = true;\r\n if (action == \"annotate\" && jsGraphAnnotate[ctx.ChartNewId][i][4]) {\r\n dispString = tmplbis(setOptionValue(1, \"ANNOTATELABEL\", ctx, data, jsGraphAnnotate[ctx.ChartNewId][i][3], undefined, config.annotateLabel, jsGraphAnnotate[ctx.ChartNewId][i][1], -1, { otherVal: true }), myStatData, config);\r\n textMsr = ctx.measureTextMultiLine(dispString, 1 * annotateDIV.style.fontSize.replace(\"pt\", \"\"));\r\n ctx.restore();\r\n annotateDIV.innerHTML = dispString;\r\n show = true;\r\n } else if (typeof funct == \"function\") {\r\n funct(event, ctx, config, data, myStatData);\r\n }\r\n if (action == \"annotate\" && jsGraphAnnotate[ctx.ChartNewId][i][4]) {\r\n x = bw.ns4 || bw.ns5 ? event.pageX : event.x;\r\n y = bw.ns4 || bw.ns5 ? event.pageY : event.y;\r\n if (bw.ie4 || bw.ie5) y = y + eval(scrolled);\r\n if (config.annotateRelocate === true) {\r\n var relocateX, relocateY;\r\n relocateX = 0; relocateY = 0;\r\n if (x + fromLeft + textMsr.textWidth > window.innerWidth - rect.left - fromLeft) relocateX = -textMsr.textWidth;\r\n if (y + fromTop + textMsr.textHeight > 1 * window.innerHeight - 1 * rect.top + fromTop) relocateY -= (textMsr.textHeight + 2 * fromTop);\r\n oCursor.moveIt(Math.max(8 - rect.left, x + fromLeft + relocateX), Math.max(8 - rect.top, y + fromTop + relocateY));\r\n }\r\n else oCursor.moveIt(x + fromLeft, y + fromTop);\r\n }\r\n }\r\n }\r\n } else if (jsGraphAnnotate[ctx.ChartNewId][i][0] == \"RECT\") {\r\n myStatData = jsGraphAnnotate[ctx.ChartNewId][i][3][jsGraphAnnotate[ctx.ChartNewId][i][1]][jsGraphAnnotate[ctx.ChartNewId][i][2]];\r\n topY = Math.max(myStatData.yPosBottom, myStatData.yPosTop);\r\n bottomY = Math.min(myStatData.yPosBottom, myStatData.yPosTop);\r\n if (topY - bottomY < config.annotateBarMinimumDetectionHeight) {\r\n topY = (topY + bottomY + config.annotateBarMinimumDetectionHeight) / 2;\r\n bottomY = topY - config.annotateBarMinimumDetectionHeight;\r\n }\r\n leftX = Math.min(myStatData.xPosLeft, myStatData.xPosRight);\r\n rightX = Math.max(myStatData.xPosLeft, myStatData.xPosRight);\r\n if (rightX - leftX < config.annotateBarMinimumDetectionHeight) {\r\n rightX = (rightX + leftX + config.annotateBarMinimumDetectionHeight) / 2;\r\n leftX = rightX - config.annotateBarMinimumDetectionHeight;\r\n }\r\n if (canvas_pos.x > leftX && canvas_pos.x < rightX && canvas_pos.y < topY && canvas_pos.y > bottomY) {\r\n myStatData.graphPosX = canvas_pos.x;\r\n myStatData.graphPosY = canvas_pos.y;\r\n onData = true;\r\n if (action == \"annotate\" && jsGraphAnnotate[ctx.ChartNewId][i][4]) {\r\n dispString = tmplbis(setOptionValue(1, \"ANNOTATELABEL\", ctx, data, jsGraphAnnotate[ctx.ChartNewId][i][3], undefined, config.annotateLabel, jsGraphAnnotate[ctx.ChartNewId][i][1], jsGraphAnnotate[ctx.ChartNewId][i][2], { otherVal: true }), myStatData, config);\r\n textMsr = ctx.measureTextMultiLine(dispString, 1 * annotateDIV.style.fontSize.replace(\"pt\", \"\"));\r\n ctx.restore();\r\n annotateDIV.innerHTML = dispString;\r\n show = true;\r\n } else if (typeof funct == \"function\") {\r\n funct(event, ctx, config, data, myStatData);\r\n }\r\n if (action == \"annotate\" && jsGraphAnnotate[ctx.ChartNewId][i][4]) {\r\n x = bw.ns4 || bw.ns5 ? event.pageX : event.x;\r\n y = bw.ns4 || bw.ns5 ? event.pageY : event.y;\r\n if (bw.ie4 || bw.ie5) y = y + eval(scrolled);\r\n if (config.annotateRelocate === true) {\r\n var relocateX, relocateY;\r\n relocateX = 0; relocateY = 0;\r\n\r\n if (x + fromLeft + textMsr.textWidth > window.innerWidth - rect.left - fromLeft) relocateX = -textMsr.textWidth;\r\n if (y + fromTop + textMsr.textHeight > 1 * window.innerHeight - 1 * rect.top + fromTop) relocateY -= (textMsr.textHeight + 2 * fromTop);\r\n oCursor.moveIt(Math.max(8 - rect.left, x + fromLeft + relocateX), Math.max(8 - rect.top, y + fromTop + relocateY));\r\n } else oCursor.moveIt(x + fromLeft, y + fromTop);\r\n }\r\n }\r\n } else if (jsGraphAnnotate[ctx.ChartNewId][i][0] == \"POINT\") {\r\n myStatData = jsGraphAnnotate[ctx.ChartNewId][i][3][jsGraphAnnotate[ctx.ChartNewId][i][1]][jsGraphAnnotate[ctx.ChartNewId][i][2]];\r\n var distance;\r\n if (config.detectAnnotateOnFullLine) {\r\n if (canvas_pos.x < Math.min(myStatData.annotateStartPosX, myStatData.annotateEndPosX) - Math.ceil(ctx.chartSpaceScale * config.pointHitDetectionRadius) || canvas_pos.x > Math.max(myStatData.annotateStartPosX, myStatData.annotateEndPosX) + Math.ceil(ctx.chartSpaceScale * config.pointHitDetectionRadius) || canvas_pos.y < Math.min(myStatData.annotateStartPosY, myStatData.annotateEndPosY) - Math.ceil(ctx.chartSpaceScale * config.pointHitDetectionRadius) || canvas_pos.y > Math.max(myStatData.annotateStartPosY, myStatData.annotateEndPosY) + Math.ceil(ctx.chartSpaceScale * config.pointHitDetectionRadius)) {\r\n distance = Math.ceil(ctx.chartSpaceScale * config.pointHitDetectionRadius) + 1;\r\n } else {\r\n if (typeof myStatData.D1A == \"undefined\") {\r\n distance = Math.abs(canvas_pos.x - myStatData.posX);\r\n } else if (typeof myStatData.D2A == \"undefined\") {\r\n distance = Math.abs(canvas_pos.y - myStatData.posY);\r\n } else {\r\n var D2B = -myStatData.D2A * canvas_pos.x + canvas_pos.y;\r\n var g = -(myStatData.D1B - D2B) / (myStatData.D1A - myStatData.D2A);\r\n var h = myStatData.D2A * g + D2B;\r\n distance = Math.sqrt((canvas_pos.x - g) * (canvas_pos.x - g) + (canvas_pos.y - h) * (canvas_pos.y - h));\r\n }\r\n\r\n }\r\n\r\n } else {\r\n distance = Math.sqrt((canvas_pos.x - myStatData.posX) * (canvas_pos.x - myStatData.posX) + (canvas_pos.y - myStatData.posY) * (canvas_pos.y - myStatData.posY));\r\n }\r\n if (distance < Math.ceil(ctx.chartSpaceScale * config.pointHitDetectionRadius)) {\r\n myStatData.graphPosX = canvas_pos.x;\r\n myStatData.graphPosY = canvas_pos.y;\r\n onData = true;\r\n if (action == \"annotate\" && jsGraphAnnotate[ctx.ChartNewId][i][4]) {\r\n dispString = tmplbis(setOptionValue(1, \"ANNOTATELABEL\", ctx, data, jsGraphAnnotate[ctx.ChartNewId][i][3], undefined, config.annotateLabel, jsGraphAnnotate[ctx.ChartNewId][i][1], jsGraphAnnotate[ctx.ChartNewId][i][2], { otherVal: true }), myStatData, config);\r\n textMsr = ctx.measureTextMultiLine(dispString, 1 * annotateDIV.style.fontSize.replace(\"pt\", \"\"));\r\n ctx.restore();\r\n annotateDIV.innerHTML = dispString;\r\n show = true;\r\n } else if (typeof funct == \"function\") {\r\n funct(event, ctx, config, data, myStatData);\r\n }\r\n if (action == \"annotate\" && jsGraphAnnotate[ctx.ChartNewId][i][4]) {\r\n x = bw.ns4 || bw.ns5 ? event.pageX : event.x;\r\n y = bw.ns4 || bw.ns5 ? event.pageY : event.y;\r\n if (bw.ie4 || bw.ie5) y = y + eval(scrolled);\r\n if (config.annotateRelocate === true) {\r\n var relocateX, relocateY;\r\n relocateX = 0; relocateY = 0;\r\n if (x + fromLeft + textMsr.textWidth > window.innerWidth - rect.left - fromLeft) relocateX = -textMsr.textWidth;\r\n if (y + fromTop + textMsr.textHeight > 1 * window.innerHeight - 1 * rect.top + fromTop) relocateY -= (textMsr.textHeight + 2 * fromTop);\r\n oCursor.moveIt(Math.max(8 - rect.left, x + fromLeft + relocateX), Math.max(8 - rect.top, y + fromTop + relocateY));\r\n }\r\n else oCursor.moveIt(x + fromLeft, y + fromTop);\r\n }\r\n }\r\n }\r\n if (action == \"annotate\" && jsGraphAnnotate[ctx.ChartNewId][i][4]) {\r\n annotateDIV.style.display = show ? '' : 'none';\r\n if (show && annotatePrevShow != i) {\r\n if (annotatePrevShow >= 0 && typeof config.annotateFunctionOut == \"function\") {\r\n if (jsGraphAnnotate[ctx.ChartNewId][annotatePrevShow][0] == \"ARC\") config.annotateFunctionOut(\"OUTANNOTATE\", ctx, data, jsGraphAnnotate[ctx.ChartNewId][annotatePrevShow][3], jsGraphAnnotate[ctx.ChartNewId][annotatePrevShow][1], -1, null);\r\n else config.annotateFunctionOut(\"OUTANNOTATE\", ctx, data, jsGraphAnnotate[ctx.ChartNewId][annotatePrevShow][3], jsGraphAnnotate[ctx.ChartNewId][annotatePrevShow][1], jsGraphAnnotate[ctx.ChartNewId][annotatePrevShow][2], null);\r\n }\r\n annotatePrevShow = i;\r\n if (typeof config.annotateFunctionIn == \"function\") {\r\n if (jsGraphAnnotate[ctx.ChartNewId][i][0] == \"ARC\") config.annotateFunctionIn(\"INANNOTATE\", ctx, data, jsGraphAnnotate[ctx.ChartNewId][i][3], jsGraphAnnotate[ctx.ChartNewId][i][1], -1, null);\r\n else config.annotateFunctionIn(\"INANNOTATE\", ctx, data, jsGraphAnnotate[ctx.ChartNewId][i][3], jsGraphAnnotate[ctx.ChartNewId][i][1], jsGraphAnnotate[ctx.ChartNewId][i][2], null);\r\n }\r\n }\r\n //show=false;\r\n }\r\n }\r\n if (show == false && action == \"annotate\" && annotatePrevShow >= 0) {\r\n if (typeof config.annotateFunctionOut == \"function\") {\r\n if (jsGraphAnnotate[ctx.ChartNewId][annotatePrevShow][0] == \"ARC\") config.annotateFunctionOut(\"OUTANNOTATE\", ctx, data, jsGraphAnnotate[ctx.ChartNewId][annotatePrevShow][3], jsGraphAnnotate[ctx.ChartNewId][annotatePrevShow][1], -1, null);\r\n else config.annotateFunctionOut(\"OUTANNOTATE\", ctx, data, jsGraphAnnotate[ctx.ChartNewId][annotatePrevShow][3], jsGraphAnnotate[ctx.ChartNewId][annotatePrevShow][1], jsGraphAnnotate[ctx.ChartNewId][annotatePrevShow][2], null);\r\n }\r\n annotatePrevShow = -1;\r\n }\r\n\r\n var inRect;\r\n if (action != \"annotate\") {\r\n if (config.detectMouseOnText) {\r\n for (var i = 0; i < jsTextMousePos[ctx.ChartNewId][\"length\"]; i++) {\r\n inRect = true;\r\n if (Math.abs(jsTextMousePos[ctx.ChartNewId][i][3].p1 - jsTextMousePos[ctx.ChartNewId][i][3].p2) < config.zeroValue) {\r\n // Horizontal;\r\n if (canvas_pos.x < Math.min(jsTextMousePos[ctx.ChartNewId][i][2].p1, jsTextMousePos[ctx.ChartNewId][i][2].p2)) inRect = false;\r\n if (canvas_pos.x > Math.max(jsTextMousePos[ctx.ChartNewId][i][2].p1, jsTextMousePos[ctx.ChartNewId][i][2].p2)) inRect = false;\r\n if (canvas_pos.y < Math.min(jsTextMousePos[ctx.ChartNewId][i][3].p1, jsTextMousePos[ctx.ChartNewId][i][3].p3)) inRect = false;\r\n if (canvas_pos.y > Math.max(jsTextMousePos[ctx.ChartNewId][i][3].p1, jsTextMousePos[ctx.ChartNewId][i][3].p3)) inRect = false;\r\n } else if (Math.abs(jsTextMousePos[ctx.ChartNewId][i][2].p1 - jsTextMousePos[ctx.ChartNewId][i][2].p2) < config.zeroValue) {\r\n // Vertical;\r\n if (canvas_pos.x < Math.min(jsTextMousePos[ctx.ChartNewId][i][2].p1, jsTextMousePos[ctx.ChartNewId][i][2].p3)) inRect = false;\r\n if (canvas_pos.x > Math.max(jsTextMousePos[ctx.ChartNewId][i][2].p1, jsTextMousePos[ctx.ChartNewId][i][2].p3)) inRect = false;\r\n if (canvas_pos.y < Math.min(jsTextMousePos[ctx.ChartNewId][i][3].p1, jsTextMousePos[ctx.ChartNewId][i][3].p2)) inRect = false;\r\n if (canvas_pos.y > Math.max(jsTextMousePos[ctx.ChartNewId][i][3].p1, jsTextMousePos[ctx.ChartNewId][i][3].p2)) inRect = false;\r\n } else {\r\n // D12 & D34;\r\n var P12 = Math.tan(jsTextMousePos[ctx.ChartNewId][i][4]);\r\n var D12 = jsTextMousePos[ctx.ChartNewId][i][3].p1 - P12 * jsTextMousePos[ctx.ChartNewId][i][2].p1;\r\n var D34 = jsTextMousePos[ctx.ChartNewId][i][3].p3 - P12 * jsTextMousePos[ctx.ChartNewId][i][2].p3;\r\n // D13 & D24;\r\n var P13 = -1 / P12;\r\n var D13 = jsTextMousePos[ctx.ChartNewId][i][3].p1 - P13 * jsTextMousePos[ctx.ChartNewId][i][2].p1;\r\n var D24 = jsTextMousePos[ctx.ChartNewId][i][3].p4 - P13 * jsTextMousePos[ctx.ChartNewId][i][2].p4;\r\n // Check if in rectangle;\r\n\r\n var y1 = P12 * canvas_pos.x + D12;\r\n var y2 = P12 * canvas_pos.x + D34;\r\n var y3 = P13 * canvas_pos.x + D13;\r\n var y4 = P13 * canvas_pos.x + D24;\r\n\r\n if (canvas_pos.y < Math.min(y1, y2)) inRect = false;\r\n if (canvas_pos.y > Math.max(y1, y2)) inRect = false;\r\n if (canvas_pos.y < Math.min(y3, y4)) inRect = false;\r\n if (canvas_pos.y > Math.max(y3, y4)) inRect = false;\r\n }\r\n if (inRect) { onData = true; funct(event, ctx, config, data, { type: \"CLICKONTEXT\", values: jsTextMousePos[ctx.ChartNewId][i] }); }\r\n }\r\n }\r\n if (onData == false) funct(event, ctx, config, data, null);\r\n }\r\n};\r\n///////// GRAPHICAL PART OF THE SCRIPT ///////////////////////////////////////////\r\n//Define the global Chart Variable as a class.\r\nwindow.Chart = function (context) {\r\n var chart = this;\r\n //Easing functions adapted from Robert Penner's easing equations\r\n //http://www.robertpenner.com/easing/\r\n var animationOptions = {\r\n linear: function (t) {\r\n return t;\r\n },\r\n easeInQuad: function (t) {\r\n return t * t;\r\n },\r\n easeOutQuad: function (t) {\r\n return -1 * t * (t - 2);\r\n },\r\n easeInOutQuad: function (t) {\r\n if ((t /= 1 / 2) < 1) return 1 / 2 * t * t;\r\n return -1 / 2 * ((--t) * (t - 2) - 1);\r\n },\r\n easeInCubic: function (t) {\r\n return t * t * t;\r\n },\r\n easeOutCubic: function (t) {\r\n return 1 * ((t = t / 1 - 1) * t * t + 1);\r\n },\r\n easeInOutCubic: function (t) {\r\n if ((t /= 1 / 2) < 1) return 1 / 2 * t * t * t;\r\n return 1 / 2 * ((t -= 2) * t * t + 2);\r\n },\r\n easeInQuart: function (t) {\r\n return t * t * t * t;\r\n },\r\n easeOutQuart: function (t) {\r\n return -1 * ((t = t / 1 - 1) * t * t * t - 1);\r\n },\r\n easeInOutQuart: function (t) {\r\n if ((t /= 1 / 2) < 1) return 1 / 2 * t * t * t * t;\r\n return -1 / 2 * ((t -= 2) * t * t * t - 2);\r\n },\r\n easeInQuint: function (t) {\r\n return 1 * (t /= 1) * t * t * t * t;\r\n },\r\n easeOutQuint: function (t) {\r\n return 1 * ((t = t / 1 - 1) * t * t * t * t + 1);\r\n },\r\n easeInOutQuint: function (t) {\r\n if ((t /= 1 / 2) < 1) return 1 / 2 * t * t * t * t * t;\r\n return 1 / 2 * ((t -= 2) * t * t * t * t + 2);\r\n },\r\n easeInSine: function (t) {\r\n return -1 * Math.cos(t / 1 * (Math.PI / 2)) + 1;\r\n },\r\n easeOutSine: function (t) {\r\n return 1 * Math.sin(t / 1 * (Math.PI / 2));\r\n },\r\n easeInOutSine: function (t) {\r\n return -1 / 2 * (Math.cos(Math.PI * t / 1) - 1);\r\n },\r\n easeInExpo: function (t) {\r\n return (t == 0) ? 1 : 1 * Math.pow(2, 10 * (t / 1 - 1));\r\n },\r\n easeOutExpo: function (t) {\r\n return (t == 1) ? 1 : 1 * (-Math.pow(2, -10 * t / 1) + 1);\r\n },\r\n easeInOutExpo: function (t) {\r\n if (t == 0) return 0;\r\n if (t == 1) return 1;\r\n if ((t /= 1 / 2) < 1) return 1 / 2 * Math.pow(2, 10 * (t - 1));\r\n return 1 / 2 * (-Math.pow(2, -10 * --t) + 2);\r\n },\r\n easeInCirc: function (t) {\r\n if (t >= 1) return t;\r\n return -1 * (Math.sqrt(1 - (t /= 1) * t) - 1);\r\n },\r\n easeOutCirc: function (t) {\r\n return 1 * Math.sqrt(1 - (t = t / 1 - 1) * t);\r\n },\r\n easeInOutCirc: function (t) {\r\n if ((t /= 1 / 2) < 1) return -1 / 2 * (Math.sqrt(1 - t * t) - 1);\r\n return 1 / 2 * (Math.sqrt(1 - (t -= 2) * t) + 1);\r\n },\r\n easeInElastic: function (t) {\r\n var s = 1.70158;\r\n var p = 0;\r\n var a = 1;\r\n if (t == 0) return 0;\r\n if ((t /= 1) == 1) return 1;\r\n if (!p) p = 1 * .3;\r\n if (a < Math.abs(1)) {\r\n a = 1;\r\n s = p / 4;\r\n } else s = p / (2 * Math.PI) * Math.asin(1 / a);\r\n return -(a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * 1 - s) * (2 * Math.PI) / p));\r\n },\r\n easeOutElastic: function (t) {\r\n var s = 1.70158;\r\n var p = 0;\r\n var a = 1;\r\n if (t == 0) return 0;\r\n if ((t /= 1) == 1) return 1;\r\n if (!p) p = 1 * .3;\r\n if (a < Math.abs(1)) {\r\n a = 1;\r\n s = p / 4;\r\n } else s = p / (2 * Math.PI) * Math.asin(1 / a);\r\n return a * Math.pow(2, -10 * t) * Math.sin((t * 1 - s) * (2 * Math.PI) / p) + 1;\r\n },\r\n easeInOutElastic: function (t) {\r\n var s = 1.70158;\r\n var p = 0;\r\n var a = 1;\r\n if (t == 0) return 0;\r\n if ((t /= 1 / 2) == 2) return 1;\r\n if (!p) p = 1 * (.3 * 1.5);\r\n if (a < Math.abs(1)) {\r\n a = 1;\r\n s = p / 4;\r\n } else s = p / (2 * Math.PI) * Math.asin(1 / a);\r\n if (t < 1) return -.5 * (a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * 1 - s) * (2 * Math.PI) / p));\r\n return a * Math.pow(2, -10 * (t -= 1)) * Math.sin((t * 1 - s) * (2 * Math.PI) / p) * .5 + 1;\r\n },\r\n easeInBack: function (t) {\r\n var s = 1.70158;\r\n return 1 * (t /= 1) * t * ((s + 1) * t - s);\r\n },\r\n easeOutBack: function (t) {\r\n var s = 1.70158;\r\n return 1 * ((t = t / 1 - 1) * t * ((s + 1) * t + s) + 1);\r\n },\r\n easeInOutBack: function (t) {\r\n var s = 1.70158;\r\n if ((t /= 1 / 2) < 1) return 1 / 2 * (t * t * (((s *= (1.525)) + 1) * t - s));\r\n return 1 / 2 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2);\r\n },\r\n easeInBounce: function (t) {\r\n return 1 - animationOptions.easeOutBounce(1 - t);\r\n },\r\n easeOutBounce: function (t) {\r\n if ((t /= 1) < (1 / 2.75)) {\r\n return 1 * (7.5625 * t * t);\r\n } else if (t < (2 / 2.75)) {\r\n return 1 * (7.5625 * (t -= (1.5 / 2.75)) * t + .75);\r\n } else if (t < (2.5 / 2.75)) {\r\n return 1 * (7.5625 * (t -= (2.25 / 2.75)) * t + .9375);\r\n } else {\r\n return 1 * (7.5625 * (t -= (2.625 / 2.75)) * t + .984375);\r\n }\r\n },\r\n easeInOutBounce: function (t) {\r\n if (t < 1 / 2) return animationOptions.easeInBounce(t * 2) * .5;\r\n return animationOptions.easeOutBounce(t * 2 - 1) * .5 + 1 * .5;\r\n }\r\n };\r\n //Variables global to the chart\r\n\r\n var width = context.canvas.width;\r\n var height = context.canvas.height;\r\n //High pixel density displays - multiply the size of the canvas height/width by the device pixel ratio, then scale.\r\n if (window.devicePixelRatio) {\r\n context.canvas.style.width = width + \"px\";\r\n context.canvas.style.height = height + \"px\";\r\n context.canvas.height = height * window.devicePixelRatio;\r\n context.canvas.width = width * window.devicePixelRatio;\r\n context.scale(window.devicePixelRatio, window.devicePixelRatio);\r\n };\r\n this.PolarArea = function (data, options) {\r\n chart.PolarArea.defaults = {\r\n inGraphDataShow: false,\r\n inGraphDataPaddingRadius: 5,\r\n inGraphDataPaddingAngle: 0,\r\n inGraphDataTmpl: \"<%=(v1 == ''? '' : v1+':')+ v2 + ' (' + v6 + ' %)'%>\",\r\n inGraphDataAlign: \"off-center\", // \"right\", \"center\", \"left\", \"off-center\" or \"to-center\"\r\n inGraphDataVAlign: \"off-center\", // \"bottom\", \"center\", \"top\", \"off-center\" or \"to-center\"\r\n inGraphDataRotate: 0, // rotateAngle value (0->360) , \"inRadiusAxis\" or \"inRadiusAxisRotateLabels\"\r\n inGraphDataFontFamily: \"'Arial'\",\r\n inGraphDataFontSize: 12,\r\n inGraphDataFontStyle: \"normal\",\r\n inGraphDataFontColor: \"#666\",\r\n inGraphDataRadiusPosition: 3,\r\n inGraphDataAnglePosition: 2,\r\n scaleOverlay: true,\r\n scaleOverride: false,\r\n scaleOverride2: false,\r\n scaleGridLinesStep: 1,\r\n scaleSteps: null,\r\n scaleStepWidth: null,\r\n scaleStartValue: null,\r\n scaleShowLine: true,\r\n scaleLineColor: \"rgba(0,0,0,.1)\",\r\n scaleLineWidth: 1,\r\n scaleLineStyle: \"solid\",\r\n scaleShowLabels: true,\r\n scaleShowLabels2: true,\r\n scaleLabel: \"<%=value%>\",\r\n scaleFontFamily: \"'Arial'\",\r\n scaleFontSize: 12,\r\n scaleFontStyle: \"normal\",\r\n scaleFontColor: \"#666\",\r\n scaleShowLabelBackdrop: true,\r\n scaleBackdropColor: \"rgba(255,255,255,0.75)\",\r\n scaleBackdropPaddingY: 2,\r\n scaleBackdropPaddingX: 2,\r\n segmentShowStroke: true,\r\n segmentStrokeColor: \"#fff\",\r\n segmentStrokeStyle: \"solid\",\r\n segmentStrokeWidth: 2,\r\n animation: true,\r\n animationByData: \"ByArc\",\r\n animationSteps: 100,\r\n animationEasing: \"easeOutBounce\",\r\n animateRotate: true,\r\n animateScale: false,\r\n onAnimationComplete: null,\r\n annotateLabel: \"<%=(v1 == ''? '' : v1+':')+ v2 + ' (' + v6 + ' %)'%>\",\r\n startAngle: 90,\r\n totalAmplitude: 360,\r\n radiusScale: 1\r\n };\r\n if (isIE() < 9 && isIE() != false) chart.PolarArea.defaults = mergeChartConfig(chart.defaults.IExplorer8, chart.PolarArea.defaults);\r\n chart.PolarArea.defaults = mergeChartConfig(chart.defaults.commonOptions, chart.PolarArea.defaults);\r\n chart.PolarArea.defaults = mergeChartConfig(chart.PolarArea.defaults, charJSPersonalDefaultOptions);\r\n chart.PolarArea.defaults = mergeChartConfig(chart.PolarArea.defaults, charJSPersonalDefaultOptionsPolarArea);\r\n var config = (options) ? mergeChartConfig(chart.PolarArea.defaults, options) : chart.PolarArea.defaults;\r\n return new PolarArea(data, config, context);\r\n };\r\n this.Radar = function (data, options) {\r\n chart.Radar.defaults = {\r\n inGraphDataShow: false,\r\n inGraphDataPaddingRadius: 5,\r\n inGraphDataTmpl: \"<%=v3%>\",\r\n inGraphDataAlign: \"off-center\", // \"right\", \"center\", \"left\", \"off-center\" or \"to-center\"\r\n inGraphDataVAlign: \"off-center\", // \"right\", \"center\", \"left\", \"off-center\" or \"to-center\"\r\n inGraphDataRotate: 0, // rotateAngle value (0->360) , \"inRadiusAxis\" or \"inRadiusAxisRotateLabels\"\r\n inGraphDataFontFamily: \"'Arial'\",\r\n inGraphDataFontSize: 12,\r\n inGraphDataFontStyle: \"normal\",\r\n inGraphDataFontColor: \"#666\",\r\n inGraphDataRadiusPosition: 3,\r\n yAxisMinimumInterval: \"none\",\r\n scaleGridLinesStep: 1,\r\n scaleOverlay: false,\r\n scaleOverride: false,\r\n scaleOverride2: false,\r\n scaleSteps: null,\r\n scaleStepWidth: null,\r\n scaleStartValue: null,\r\n scaleShowLine: true,\r\n scaleLineColor: \"rgba(0,0,0,.1)\",\r\n scaleLineStyle: \"solid\",\r\n scaleLineWidth: 1,\r\n scaleShowLabels: false,\r\n scaleShowLabels2: true,\r\n scaleLabel: \"<%=value%>\",\r\n scaleFontFamily: \"'Arial'\",\r\n scaleFontSize: 12,\r\n scaleFontStyle: \"normal\",\r\n scaleFontColor: \"#666\",\r\n scaleShowLabelBackdrop: true,\r\n scaleBackdropColor: \"rgba(255,255,255,0.75)\",\r\n scaleBackdropPaddingY: 2,\r\n scaleBackdropPaddingX: 2,\r\n angleShowLineOut: true,\r\n angleLineColor: \"rgba(0,0,0,.1)\",\r\n angleLineStyle: \"solid\",\r\n angleLineWidth: 1,\r\n pointLabelFontFamily: \"'Arial'\",\r\n pointLabelFontStyle: \"normal\",\r\n pointLabelFontSize: 12,\r\n pointLabelFontColor: \"#666\",\r\n pointDot: true,\r\n pointDotRadius: 3,\r\n pointDotStrokeWidth: 1,\r\n pointDotStrokeStyle: \"solid\",\r\n datasetFill: true,\r\n datasetStrokeWidth: 2,\r\n datasetStrokeStyle: \"solid\",\r\n animation: true,\r\n animationSteps: 60,\r\n animationEasing: \"easeOutQuart\",\r\n onAnimationComplete: null,\r\n annotateLabel: \"<%=(v1 == '' ? '' : v1) + (v1!='' && v2 !='' ? ' - ' : '')+(v2 == '' ? '' : v2)+(v1!='' || v2 !='' ? ':' : '') + v3%>\",\r\n pointHitDetectionRadius: 10,\r\n startAngle: 90\r\n };\r\n // merge annotate defaults\r\n if (isIE() < 9 && isIE() != false) chart.Radar.defaults = mergeChartConfig(chart.defaults.IExplorer8, chart.Radar.defaults);\r\n chart.Radar.defaults = mergeChartConfig(chart.defaults.commonOptions, chart.Radar.defaults);\r\n chart.Radar.defaults = mergeChartConfig(chart.Radar.defaults, charJSPersonalDefaultOptions);\r\n chart.Radar.defaults = mergeChartConfig(chart.Radar.defaults, charJSPersonalDefaultOptionsRadar);\r\n var config = (options) ? mergeChartConfig(chart.Radar.defaults, options) : chart.Radar.defaults;\r\n return new Radar(data, config, context);\r\n };\r\n this.Pie = function (data, options) {\r\n chart.Pie.defaults = chart.defaults.PieAndDoughnut;\r\n // merge annotate defaults\r\n if (isIE() < 9 && isIE() != false) chart.Pie.defaults = mergeChartConfig(chart.defaults.IExplorer8, chart.Pie.defaults);\r\n chart.Pie.defaults = mergeChartConfig(chart.defaults.commonOptions, chart.Pie.defaults);\r\n chart.Pie.defaults = mergeChartConfig(chart.Pie.defaults, charJSPersonalDefaultOptions);\r\n chart.Pie.defaults = mergeChartConfig(chart.Pie.defaults, charJSPersonalDefaultOptionsPie);\r\n var config = (options) ? mergeChartConfig(chart.Pie.defaults, options) : chart.Pie.defaults;\r\n return new Pie(data, config, context);\r\n };\r\n this.Doughnut = function (data, options) {\r\n chart.Doughnut.defaults = chart.defaults.PieAndDoughnut;\r\n // merge annotate defaults\r\n if (isIE() < 9 && isIE() != false) chart.Doughnut.defaults = mergeChartConfig(chart.defaults.IExplorer8, chart.Doughnut.defaults);\r\n chart.Doughnut.defaults = mergeChartConfig(chart.defaults.commonOptions, chart.Doughnut.defaults);\r\n chart.Doughnut.defaults = mergeChartConfig(chart.Doughnut.defaults, charJSPersonalDefaultOptions);\r\n chart.Doughnut.defaults = mergeChartConfig(chart.Doughnut.defaults, charJSPersonalDefaultOptionsDoughnut);\r\n var config = (options) ? mergeChartConfig(chart.Doughnut.defaults, options) : chart.Doughnut.defaults;\r\n return new Doughnut(data, config, context);\r\n };\r\n this.Line = function (data, options) {\r\n chart.Line.defaults = {\r\n inGraphDataShow: false,\r\n inGraphDataPaddingX: 3,\r\n inGraphDataPaddingY: 3,\r\n inGraphDataTmpl: \"<%=v3%>\",\r\n inGraphDataAlign: \"left\",\r\n inGraphDataVAlign: \"bottom\",\r\n inGraphDataRotate: 0,\r\n inGraphDataFontFamily: \"'Arial'\",\r\n inGraphDataFontSize: 12,\r\n inGraphDataFontStyle: \"normal\",\r\n inGraphDataFontColor: \"#666\",\r\n drawXScaleLine: [{\r\n position: \"bottom\"\r\n }],\r\n scaleOverlay: false,\r\n scaleOverride: false,\r\n scaleOverride2: false,\r\n scaleSteps: null,\r\n scaleStepWidth: null,\r\n scaleStartValue: null,\r\n scaleSteps2: null,\r\n scaleStepWidth2: null,\r\n scaleStartValue2: null,\r\n scaleLabel2: \"<%=value%>\",\r\n scaleLineColor: \"rgba(0,0,0,.1)\",\r\n scaleLineStyle: \"solid\",\r\n scaleLineWidth: 1,\r\n scaleShowLabels: true,\r\n scaleShowLabels2: true,\r\n scaleLabel: \"<%=value%>\",\r\n scaleFontFamily: \"'Arial'\",\r\n scaleFontSize: 12,\r\n scaleFontStyle: \"normal\",\r\n scaleFontColor: \"#666\",\r\n scaleShowGridLines: true,\r\n scaleXGridLinesStep: 1,\r\n scaleYGridLinesStep: 1,\r\n scaleGridLineColor: \"rgba(0,0,0,.05)\",\r\n scaleGridLineStyle: \"solid\",\r\n scaleGridLineWidth: 1,\r\n showYAxisMin: true, // Show the minimum value on Y axis (in original version, this minimum is not displayed - it can overlap the X labels)\r\n rotateLabels: \"smart\", // smart <=> 0 degre if space enough; otherwise 45 degres if space enough otherwise90 degre; \r\n // you can force an integer value between 0 and 180 degres\r\n logarithmic: false, // can be 'fuzzy',true and false ('fuzzy' => if the gap between min and maximum is big it's using a logarithmic y-Axis scale\r\n logarithmic2: false, // can be 'fuzzy',true and false ('fuzzy' => if the gap between min and maximum is big it's using a logarithmic y-Axis scale\r\n scaleTickSizeLeft: 5,\r\n scaleTickSizeRight: 5,\r\n scaleTickSizeBottom: 5,\r\n scaleTickSizeTop: 5,\r\n bezierCurve: true,\r\n linkType: 0, //0 : direct point to point; 1 = vertical lines; 2=angular link;\r\n bezierCurveTension: 0.4,\r\n pointDot: true,\r\n pointDotRadius: 4,\r\n pointDotStrokeStyle: \"solid\",\r\n pointDotStrokeWidth: 2,\r\n datasetStrokeStyle: \"solid\",\r\n datasetStrokeWidth: 2,\r\n datasetFill: true,\r\n animation: true,\r\n animationSteps: 60,\r\n animationEasing: \"easeOutQuart\",\r\n extrapolateMissingData: true,\r\n onAnimationComplete: null,\r\n annotateLabel: \"<%=(v1 == '' ? '' : v1) + (v1!='' && v2 !='' ? ' - ' : '')+(v2 == '' ? '' : v2)+(v1!='' || v2 !='' ? ':' : '') + v3%>\",\r\n pointHitDetectionRadius: 10\r\n };\r\n // merge annotate defaults\r\n if (isIE() < 9 && isIE() != false) chart.Line.defaults = mergeChartConfig(chart.defaults.IExplorer8, chart.Line.defaults);\r\n chart.Line.defaults = mergeChartConfig(chart.defaults.commonOptions, chart.Line.defaults);\r\n chart.Line.defaults = mergeChartConfig(chart.defaults.xyAxisCommonOptions, chart.Line.defaults);\r\n chart.Line.defaults = mergeChartConfig(chart.Line.defaults, charJSPersonalDefaultOptions);\r\n chart.Line.defaults = mergeChartConfig(chart.Line.defaults, charJSPersonalDefaultOptionsLine);\r\n var config = (options) ? mergeChartConfig(chart.Line.defaults, options) : chart.Line.defaults;\r\n return new Line(data, config, context);\r\n };\r\n this.StackedBar = function (data, options) {\r\n chart.StackedBar.defaults = {\r\n annotateBarMinimumDetectionHeight: 0,\r\n inGraphDataShow: false,\r\n inGraphDataPaddingX: 0,\r\n inGraphDataPaddingY: -3,\r\n inGraphDataTmpl: \"<%=v3%>\",\r\n inGraphDataAlign: \"center\",\r\n inGraphDataVAlign: \"top\",\r\n inGraphDataRotate: 0,\r\n inGraphDataFontFamily: \"'Arial'\",\r\n inGraphDataFontSize: 12,\r\n inGraphDataFontStyle: \"normal\",\r\n inGraphDataFontColor: \"#666\",\r\n inGraphDataXPosition: 2,\r\n inGraphDataYPosition: 3,\r\n scaleOverlay: false,\r\n scaleOverride: false,\r\n scaleOverride2: false,\r\n scaleSteps: null,\r\n scaleStepWidth: null,\r\n scaleStartValue: null,\r\n scaleLineColor: \"rgba(0,0,0,.1)\",\r\n scaleLineStyle: \"solid\",\r\n scaleLineWidth: 1,\r\n scaleShowLabels: true,\r\n scaleShowLabels2: true,\r\n scaleLabel: \"<%=value%>\",\r\n scaleFontFamily: \"'Arial'\",\r\n scaleFontSize: 12,\r\n scaleFontStyle: \"normal\",\r\n scaleFontColor: \"#666\",\r\n scaleShowGridLines: true,\r\n scaleXGridLinesStep: 1,\r\n scaleYGridLinesStep: 1,\r\n scaleGridLineColor: \"rgba(0,0,0,.05)\",\r\n scaleGridLineStyle: \"solid\",\r\n scaleGridLineWidth: 1,\r\n showYAxisMin: true, // Show the minimum value on Y axis (in original version, this minimum is not displayed - it can overlap the X labels)\r\n rotateLabels: \"smart\", // smart <=> 0 degre if space enough; otherwise 45 degres if space enough otherwise90 degre; \r\n // you can force an integer value between 0 and 180 degres\r\n scaleTickSizeLeft: 5,\r\n scaleTickSizeRight: 5,\r\n scaleTickSizeBottom: 5,\r\n scaleTickSizeTop: 5,\r\n pointDot: true,\r\n pointDotRadius: 4,\r\n pointDotStrokeStyle: \"solid\",\r\n pointDotStrokeWidth: 2,\r\n barShowStroke: true,\r\n //\t\t\tbarStrokeStyle: \"solid\",\r\n barStrokeWidth: 2,\r\n barValueSpacing: 5,\r\n barDatasetSpacing: 1,\r\n spaceBetweenBar: 0,\r\n animation: true,\r\n animationSteps: 60,\r\n animationEasing: \"easeOutQuart\",\r\n onAnimationComplete: null,\r\n bezierCurve: true,\r\n linkType: 0, //0 : direct point to point; 1 = vertical lines; 2=angular link;\r\n bezierCurveTension: 0.4,\r\n annotateLabel: \"<%=(v1 == '' ? '' : v1) + (v1!='' && v2 !='' ? ' - ' : '')+(v2 == '' ? '' : v2)+(v1!='' || v2 !='' ? ':' : '') + v3 + ' (' + v6 + ' %)'%>\",\r\n pointHitDetectionRadius: 10\r\n };\r\n // merge annotate defaults\r\n if (isIE() < 9 && isIE() != false) chart.StackedBar.defaults = mergeChartConfig(chart.defaults.IExplorer8, chart.StackedBar.defaults);\r\n chart.StackedBar.defaults = mergeChartConfig(chart.defaults.commonOptions, chart.StackedBar.defaults);\r\n chart.StackedBar.defaults = mergeChartConfig(chart.defaults.xyAxisCommonOptions, chart.StackedBar.defaults);\r\n chart.StackedBar.defaults = mergeChartConfig(chart.StackedBar.defaults, charJSPersonalDefaultOptions);\r\n chart.StackedBar.defaults = mergeChartConfig(chart.StackedBar.defaults, charJSPersonalDefaultOptionsStackedBar);\r\n var config = (options) ? mergeChartConfig(chart.StackedBar.defaults, options) : chart.StackedBar.defaults;\r\n return new StackedBar(data, config, context);\r\n };\r\n this.HorizontalStackedBar = function (data, options) {\r\n chart.HorizontalStackedBar.defaults = {\r\n annotateBarMinimumDetectionHeight: 0,\r\n inGraphDataShow: false,\r\n inGraphDataPaddingX: -3,\r\n inGraphDataPaddingY: 0,\r\n inGraphDataTmpl: \"<%=v3%>\",\r\n inGraphDataAlign: \"right\",\r\n inGraphDataVAlign: \"middle\",\r\n inGraphDataRotate: 0,\r\n inGraphDataFontFamily: \"'Arial'\",\r\n inGraphDataFontSize: 12,\r\n inGraphDataFontStyle: \"normal\",\r\n inGraphDataFontColor: \"#666\",\r\n inGraphDataXPosition: 3,\r\n inGraphDataYPosition: 2,\r\n scaleOverlay: false,\r\n scaleOverride: false,\r\n scaleOverride2: false,\r\n scaleSteps: null,\r\n scaleStepWidth: null,\r\n scaleStartValue: null,\r\n scaleLineColor: \"rgba(0,0,0,.1)\",\r\n scaleLineStyle: \"solid\",\r\n scaleLineWidth: 1,\r\n scaleShowLabels: true,\r\n scaleShowLabels2: true,\r\n scaleLabel: \"<%=value%>\",\r\n scaleFontFamily: \"'Arial'\",\r\n scaleFontSize: 12,\r\n scaleFontStyle: \"normal\",\r\n scaleFontColor: \"#666\",\r\n scaleShowGridLines: true,\r\n scaleXGridLinesStep: 1,\r\n scaleYGridLinesStep: 1,\r\n scaleGridLineColor: \"rgba(0,0,0,.05)\",\r\n scaleGridLineStyle: \"solid\",\r\n scaleGridLineWidth: 1,\r\n scaleTickSizeLeft: 5,\r\n scaleTickSizeRight: 5,\r\n scaleTickSizeBottom: 5,\r\n scaleTickSizeTop: 5,\r\n showYAxisMin: true, // Show the minimum value on Y axis (in original version, this minimum is not displayed - it can overlap the X labels)\r\n rotateLabels: \"smart\", // smart <=> 0 degre if space enough; otherwise 45 degres if space enough otherwise90 degre; \r\n barShowStroke: true,\r\n //\t\t\tbarStrokeStyle: \"solid\",\r\n barStrokeWidth: 2,\r\n barValueSpacing: 5,\r\n barDatasetSpacing: 1,\r\n spaceBetweenBar: 0,\r\n animation: true,\r\n animationSteps: 60,\r\n animationEasing: \"easeOutQuart\",\r\n onAnimationComplete: null,\r\n annotateLabel: \"<%=(v1 == '' ? '' : v1) + (v1!='' && v2 !='' ? ' - ' : '')+(v2 == '' ? '' : v2)+(v1!='' || v2 !='' ? ':' : '') + v3 + ' (' + v6 + ' %)'%>\",\r\n reverseOrder: false\r\n };\r\n // merge annotate defaults\r\n if (isIE() < 9 && isIE() != false) chart.HorizontalStackedBar.defaults = mergeChartConfig(chart.defaults.IExplorer8, chart.HorizontalStackedBar.defaults);\r\n chart.HorizontalStackedBar.defaults = mergeChartConfig(chart.defaults.commonOptions, chart.HorizontalStackedBar.defaults);\r\n chart.HorizontalStackedBar.defaults = mergeChartConfig(chart.defaults.xyAxisCommonOptions, chart.HorizontalStackedBar.defaults);\r\n chart.HorizontalStackedBar.defaults = mergeChartConfig(chart.HorizontalStackedBar.defaults, charJSPersonalDefaultOptions);\r\n chart.HorizontalStackedBar.defaults = mergeChartConfig(chart.HorizontalStackedBar.defaults, charJSPersonalDefaultOptionsHorizontalStackedBar);\r\n var config = (options) ? mergeChartConfig(chart.HorizontalStackedBar.defaults, options) : chart.HorizontalStackedBar.defaults;\r\n return new HorizontalStackedBar(data, config, context);\r\n };\r\n this.Bar = function (data, options) {\r\n chart.Bar.defaults = {\r\n annotateBarMinimumDetectionHeight: 0,\r\n inGraphDataShow: false,\r\n inGraphDataPaddingX: 0,\r\n inGraphDataPaddingY: 3,\r\n inGraphDataTmpl: \"<%=v3%>\",\r\n inGraphDataAlign: \"center\",\r\n inGraphDataVAlign: \"bottom\",\r\n inGraphDataRotate: 0,\r\n inGraphDataFontFamily: \"'Arial'\",\r\n inGraphDataFontSize: 12,\r\n inGraphDataFontStyle: \"normal\",\r\n inGraphDataFontColor: \"#666\",\r\n inGraphDataXPosition: 2,\r\n inGraphDataYPosition: 3,\r\n scaleOverlay: false,\r\n scaleOverride: false,\r\n scaleOverride2: false,\r\n scaleSteps: null,\r\n scaleStepWidth: null,\r\n scaleStartValue: null,\r\n scaleSteps2: null,\r\n scaleStepWidth2: null,\r\n scaleStartValue2: null,\r\n scaleLineColor: \"rgba(0,0,0,.1)\",\r\n scaleLineStyle: \"solid\",\r\n scaleLineWidth: 1,\r\n scaleShowLabels: true,\r\n scaleShowLabels2: true,\r\n scaleLabel: \"<%=value%>\",\r\n scaleLabel2: \"<%=value%>\",\r\n scaleFontFamily: \"'Arial'\",\r\n scaleFontSize: 12,\r\n scaleFontStyle: \"normal\",\r\n scaleFontColor: \"#666\",\r\n scaleShowGridLines: true,\r\n scaleXGridLinesStep: 1,\r\n scaleYGridLinesStep: 1,\r\n scaleGridLineColor: \"rgba(0,0,0,.05)\",\r\n scaleGridLineWidth: 1,\r\n scaleGridLineStyle: \"solid\",\r\n showYAxisMin: true, // Show the minimum value on Y axis (in original version, this minimum is not displayed - it can overlap the X labels)\r\n rotateLabels: \"smart\", // smart <=> 0 degre if space enough; otherwise 45 degres if space enough otherwise90 degre; \r\n // you can force an integer value between 0 and 180 degres\r\n logarithmic: false, // can be 'fuzzy',true and false ('fuzzy' => if the gap between min and maximum is big it's using a logarithmic y-Axis scale\r\n logarithmic2: false, // can be 'fuzzy',true and false ('fuzzy' => if the gap between min and maximum is big it's using a logarithmic y-Axis scale\r\n scaleTickSizeLeft: 5,\r\n scaleTickSizeRight: 5,\r\n scaleTickSizeBottom: 5,\r\n scaleTickSizeTop: 5,\r\n barShowStroke: true,\r\n //\t\t\tbarStrokeStyle: \"solid\",\r\n barStrokeWidth: 2,\r\n barValueSpacing: 5,\r\n barDatasetSpacing: 1,\r\n barBorderRadius: 0,\r\n pointDot: true,\r\n pointDotRadius: 4,\r\n pointDotStrokeStyle: \"solid\",\r\n pointDotStrokeWidth: 2,\r\n extrapolateMissingData: true,\r\n animation: true,\r\n animationSteps: 60,\r\n animationEasing: \"easeOutQuart\",\r\n onAnimationComplete: null,\r\n bezierCurve: true,\r\n linkType: 0, //0 : direct point to point; 1 = vertical lines; 2=angular link;\r\n bezierCurveTension: 0.4,\r\n annotateLabel: \"<%=(v1 == '' ? '' : v1) + (v1!='' && v2 !='' ? ' - ' : '')+(v2 == '' ? '' : v2)+(v1!='' || v2 !='' ? ':' : '') + v3 + ' (' + v6 + ' %)'%>\",\r\n pointHitDetectionRadius: 10\r\n };\r\n // merge annotate defaults\r\n if (isIE() < 9 && isIE() != false) chart.Bar.defaults = mergeChartConfig(chart.defaults.IExplorer8, chart.Bar.defaults);\r\n chart.Bar.defaults = mergeChartConfig(chart.defaults.commonOptions, chart.Bar.defaults);\r\n chart.Bar.defaults = mergeChartConfig(chart.defaults.xyAxisCommonOptions, chart.Bar.defaults);\r\n chart.Bar.defaults = mergeChartConfig(chart.Bar.defaults, charJSPersonalDefaultOptions);\r\n chart.Bar.defaults = mergeChartConfig(chart.Bar.defaults, charJSPersonalDefaultOptionsBar);\r\n var config = (options) ? mergeChartConfig(chart.Bar.defaults, options) : chart.Bar.defaults;\r\n return new Bar(data, config, context);\r\n };\r\n this.HorizontalBar = function (data, options) {\r\n chart.HorizontalBar.defaults = {\r\n annotateBarMinimumDetectionHeight: 0,\r\n inGraphDataShow: false,\r\n inGraphDataPaddingX: 3,\r\n inGraphDataPaddingY: 0,\r\n inGraphDataTmpl: \"<%=v3%>\",\r\n inGraphDataAlign: \"left\",\r\n inGraphDataVAlign: \"middle\",\r\n inGraphDataRotate: 0,\r\n inGraphDataFontFamily: \"'Arial'\",\r\n inGraphDataFontSize: 12,\r\n inGraphDataFontStyle: \"normal\",\r\n inGraphDataFontColor: \"#666\",\r\n inGraphDataXPosition: 3,\r\n inGraphDataYPosition: 2,\r\n scaleOverlay: false,\r\n scaleOverride: false,\r\n scaleOverride2: false,\r\n scaleSteps: null,\r\n scaleStepWidth: null,\r\n scaleStartValue: null,\r\n scaleLineColor: \"rgba(0,0,0,.1)\",\r\n scaleLineStyle: \"solid\",\r\n scaleLineWidth: 1,\r\n scaleShowLabels: true,\r\n scaleShowLabels2: true,\r\n scaleLabel: \"<%=value%>\",\r\n scaleFontFamily: \"'Arial'\",\r\n scaleFontSize: 12,\r\n scaleFontStyle: \"normal\",\r\n scaleFontColor: \"#666\",\r\n scaleShowGridLines: true,\r\n scaleXGridLinesStep: 1,\r\n scaleYGridLinesStep: 1,\r\n scaleGridLineColor: \"rgba(0,0,0,.05)\",\r\n scaleGridLineStyle: \"solid\",\r\n scaleGridLineWidth: 1,\r\n scaleTickSizeLeft: 5,\r\n scaleTickSizeRight: 5,\r\n scaleTickSizeBottom: 5,\r\n scaleTickSizeTop: 5,\r\n showYAxisMin: true, // Show the minimum value on Y axis (in original version, this minimum is not displayed - it can overlap the X labels)\r\n rotateLabels: \"smart\", // smart <=> 0 degre if space enough; otherwise 45 degres if space enough otherwise90 degre; \r\n barShowStroke: true,\r\n //\t\t\tbarStrokeStyle: \"solid\",\r\n barStrokeWidth: 2,\r\n barValueSpacing: 5,\r\n barDatasetSpacing: 1,\r\n barBorderRadius: 0,\r\n animation: true,\r\n animationSteps: 60,\r\n animationEasing: \"easeOutQuart\",\r\n onAnimationComplete: null,\r\n annotateLabel: \"<%=(v1 == '' ? '' : v1) + (v1!='' && v2 !='' ? ' - ' : '')+(v2 == '' ? '' : v2)+(v1!='' || v2 !='' ? ':' : '') + v3 + ' (' + v6 + ' %)'%>\",\r\n reverseOrder: false\r\n };\r\n // merge annotate defaults\r\n if (isIE() < 9 && isIE() != false) chart.HorizontalBar.defaults = mergeChartConfig(chart.defaults.IExplorer8, chart.HorizontalBar.defaults);\r\n chart.HorizontalBar.defaults = mergeChartConfig(chart.defaults.commonOptions, chart.HorizontalBar.defaults);\r\n chart.HorizontalBar.defaults = mergeChartConfig(chart.defaults.xyAxisCommonOptions, chart.HorizontalBar.defaults);\r\n chart.HorizontalBar.defaults = mergeChartConfig(chart.HorizontalBar.defaults, charJSPersonalDefaultOptions);\r\n chart.HorizontalBar.defaults = mergeChartConfig(chart.HorizontalBar.defaults, charJSPersonalDefaultOptionsHorizontalBar);\r\n var config = (options) ? mergeChartConfig(chart.HorizontalBar.defaults, options) : chart.HorizontalBar.defaults;\r\n return new HorizontalBar(data, config, context);\r\n };\r\n chart.defaults = {};\r\n\r\n chart.defaults.IExplorer8 = {\r\n annotateBackgroundColor: \"black\",\r\n annotateFontColor: \"white\"\r\n };\r\n chart.defaults.commonOptions = {\r\n chartTextScale: 1,\r\n chartLineScale: 1,\r\n chartSpaceScale: 1,\r\n multiGraph: false,\r\n clearRect: true, // do not change clearRect options; for internal use only\r\n dynamicDisplay: false,\r\n animationForceSetTimeOut: false,\r\n graphSpaceBefore: 5,\r\n graphSpaceAfter: 5,\r\n canvasBorders: false,\r\n canvasBackgroundColor: \"none\",\r\n canvasBordersWidth: 3,\r\n canvasBordersStyle: \"solid\",\r\n canvasBordersColor: \"black\",\r\n zeroValue: 0.0000000001,\r\n graphTitle: \"\",\r\n graphTitleFontFamily: \"'Arial'\",\r\n graphTitleFontSize: 24,\r\n graphTitleFontStyle: \"bold\",\r\n graphTitleFontColor: \"#666\",\r\n graphTitleSpaceBefore: 5,\r\n graphTitleSpaceAfter: 5,\r\n graphTitleBorders: false,\r\n graphTitleBordersColor: \"black\",\r\n graphTitleBordersXSpace: 3,\r\n graphTitleBordersYSpace: 3,\r\n graphTitleBordersWidth: 1,\r\n graphTitleBordersStyle: \"solid\",\r\n graphTitleBackgroundColor: \"none\",\r\n graphSubTitle: \"\",\r\n graphSubTitleFontFamily: \"'Arial'\",\r\n graphSubTitleFontSize: 18,\r\n graphSubTitleFontStyle: \"normal\",\r\n graphSubTitleFontColor: \"#666\",\r\n graphSubTitleSpaceBefore: 5,\r\n graphSubTitleSpaceAfter: 5,\r\n graphSubTitleBorders: false,\r\n graphSubTitleBordersColor: \"black\",\r\n graphSubTitleBordersXSpace: 3,\r\n graphSubTitleBordersYSpace: 3,\r\n graphSubTitleBordersWidth: 1,\r\n graphSubTitleBordersStyle: \"solid\",\r\n graphSubTitleBackgroundColor: \"none\",\r\n footNote: \"\",\r\n footNoteFontFamily: \"'Arial'\",\r\n footNoteFontSize: 8,\r\n footNoteFontStyle: \"bold\",\r\n footNoteFontColor: \"#666\",\r\n footNoteSpaceBefore: 5,\r\n footNoteSpaceAfter: 5,\r\n footNoteBorders: false,\r\n footNoteBordersColor: \"black\",\r\n footNoteBordersXSpace: 3,\r\n footNoteBordersYSpace: 3,\r\n footNoteBordersWidth: 1,\r\n footNoteBordersStyle: \"solid\",\r\n footNoteBackgroundColor: \"none\",\r\n legend: false,\r\n showSingleLegend: false,\r\n maxLegendCols: 999,\r\n legendPosY: 4,\r\n legendPosX: -2,\r\n legendFontFamily: \"'Arial'\",\r\n legendFontSize: 12,\r\n legendFontStyle: \"normal\",\r\n legendFontColor: \"#666\",\r\n legendBlockSize: 15,\r\n legendBorders: true,\r\n legendBordersStyle: \"solid\",\r\n legendBordersWidth: 1,\r\n legendBordersColors: \"#666\",\r\n legendBordersSpaceBefore: 5,\r\n legendBordersSpaceAfter: 5,\r\n legendBordersSpaceLeft: 5,\r\n legendBordersSpaceRight: 5,\r\n legendSpaceBeforeText: 5,\r\n legendSpaceAfterText: 5,\r\n legendSpaceLeftText: 5,\r\n legendSpaceRightText: 5,\r\n legendSpaceBetweenTextVertical: 5,\r\n legendSpaceBetweenTextHorizontal: 5,\r\n legendSpaceBetweenBoxAndText: 5,\r\n legendFillColor: \"rgba(0,0,0,0)\",\r\n legendXPadding: 0,\r\n legendYPadding: 0,\r\n inGraphDataBorders: false,\r\n inGraphDataBordersColor: \"black\",\r\n inGraphDataBordersXSpace: 3,\r\n inGraphDataBordersYSpace: 3,\r\n inGraphDataBordersWidth: 1,\r\n inGraphDataBordersStyle: \"solid\",\r\n inGraphDataBackgroundColor: \"none\",\r\n annotateDisplay: false,\r\n annotateRelocate: false,\r\n savePng: false,\r\n savePngOutput: \"NewWindow\", // Allowed values : \"NewWindow\", \"CurrentWindow\", \"Save\"\r\n savePngFunction: \"mousedown right\",\r\n savePngBackgroundColor: 'WHITE',\r\n annotateFunction: \"mousemove\",\r\n annotateFontFamily: \"'Arial'\",\r\n annotateBorder: 'none',\r\n annotateBorderRadius: '2px',\r\n annotateBackgroundColor: 'rgba(0,0,0,0.8)',\r\n annotateFontSize: 12,\r\n annotateFontColor: 'white',\r\n annotateFontStyle: \"normal\",\r\n annotatePadding: \"3px\",\r\n annotateClassName: \"\",\r\n annotateFunctionIn: null,\r\n annotateFunctionOut: null,\r\n detectMouseOnText: false,\r\n crossText: [\"\"],\r\n crossTextIter: [\"all\"],\r\n crossTextOverlay: [true],\r\n crossTextFontFamily: [\"'Arial'\"],\r\n crossTextFontSize: [12],\r\n crossTextFontStyle: [\"normal\"],\r\n crossTextFontColor: [\"rgba(220,220,220,1)\"],\r\n crossTextRelativePosX: [2],\r\n crossTextRelativePosY: [2],\r\n crossTextBaseline: [\"middle\"],\r\n crossTextAlign: [\"center\"],\r\n crossTextPosX: [0],\r\n crossTextPosY: [0],\r\n crossTextAngle: [0],\r\n crossTextFunction: null,\r\n crossTextBorders: [false],\r\n crossTextBordersColor: [\"black\"],\r\n crossTextBordersXSpace: [3],\r\n crossTextBordersYSpace: [3],\r\n crossTextBordersWidth: [1],\r\n crossTextBordersStyle: [\"solid\"],\r\n crossTextBackgroundColor: [\"none\"],\r\n crossImage: [undefined],\r\n crossImageIter: [\"all\"],\r\n crossImageOverlay: [true],\r\n crossImageRelativePosX: [2],\r\n crossImageRelativePosY: [2],\r\n crossImageBaseline: [\"middle\"],\r\n crossImageAlign: [\"center\"],\r\n crossImagePosX: [0],\r\n crossImagePosY: [0],\r\n crossImageAngle: [0],\r\n spaceTop: 0,\r\n spaceBottom: 0,\r\n spaceRight: 0,\r\n spaceLeft: 0,\r\n decimalSeparator: \".\",\r\n thousandSeparator: \"\",\r\n roundNumber: \"none\",\r\n roundPct: -1,\r\n templatesOpenTag: \"<%=\",\r\n templatesCloseTag: \"%>\",\r\n fmtV1: \"none\",\r\n fmtV2: \"none\",\r\n fmtV3: \"none\",\r\n fmtV4: \"none\",\r\n fmtV5: \"none\",\r\n fmtV6: \"none\",\r\n fmtV6T: \"none\",\r\n fmtV7: \"none\",\r\n fmtV8: \"none\",\r\n fmtV8T: \"none\",\r\n fmtV9: \"none\",\r\n fmtV10: \"none\",\r\n fmtV11: \"none\",\r\n fmtV12: \"none\",\r\n fmtV13: \"none\",\r\n fmtXLabel: \"none\",\r\n fmtYLabel: \"none\",\r\n fmtYLabel2: \"none\",\r\n fmtLegend: \"none\",\r\n animationStartValue: 0,\r\n animationStopValue: 1,\r\n animationCount: 1,\r\n animationPauseTime: 5,\r\n animationBackward: false,\r\n animationStartWithDataset: 1,\r\n animationStartWithData: 1,\r\n animationLeftToRight: false,\r\n animationByDataset: false,\r\n defaultStrokeColor: \"rgba(220,220,220,1)\",\r\n defaultFillColor: \"rgba(220,220,220,0.5)\",\r\n defaultLineWidth: 2,\r\n graphMaximized: false,\r\n contextMenu: true,\r\n mouseDownRight: null,\r\n mouseDownLeft: null,\r\n mouseDownMiddle: null,\r\n mouseMove: null,\r\n mouseOut: null,\r\n mouseWheel: null,\r\n savePngName: \"canvas\",\r\n responsive: false,\r\n responsiveMinWidth: 0,\r\n responsiveMinHeight: 0,\r\n responsiveMaxWidth: 9999999,\r\n responsiveMaxHeight: 9999999,\r\n maintainAspectRatio: true,\r\n responsiveScaleContent: false,\r\n responsiveWindowInitialWidth: false,\r\n pointMarker: \"circle\", // \"circle\",\"cross\",\"plus\",\"diamond\",\"triangle\",\"square\"\r\n initFunction: null,\r\n beforeDrawFunction: null,\r\n endDrawDataFunction: null,\r\n endDrawScaleFunction: null\r\n };\r\n\r\n\r\n chart.defaults.PieAndDoughnut = {\r\n inGraphDataShow: false,\r\n inGraphDataPaddingRadius: 5,\r\n inGraphDataPaddingAngle: 0,\r\n inGraphDataTmpl: \"<%=(v1 == ''? '' : v1+':')+ v2 + ' (' + v6 + ' %)'%>\",\r\n inGraphDataAlign: \"off-center\", // \"right\", \"center\", \"left\", \"off-center\" or \"to-center\"\r\n inGraphDataVAlign: \"off-center\", // \"bottom\", \"middle\", \"top\", \"off-center\" or \"to-center\"\r\n inGraphDataRotate: 0, // rotateAngle value (0->360) , \"inRadiusAxis\" or \"inRadiusAxisRotateLabels\"\r\n inGraphDataFontFamily: \"'Arial'\",\r\n inGraphDataFontSize: 12,\r\n inGraphDataFontStyle: \"normal\",\r\n inGraphDataFontColor: \"#666\",\r\n inGraphDataRadiusPosition: 3,\r\n inGraphDataAnglePosition: 2,\r\n inGraphDataMinimumAngle: 0,\r\n segmentShowStroke: true,\r\n segmentStrokeColor: \"#fff\",\r\n segmentStrokeStyle: \"solid\",\r\n segmentStrokeWidth: 2,\r\n percentageInnerCutout: 50,\r\n animation: true,\r\n animationByData: false,\r\n animationSteps: 100,\r\n animationEasing: \"easeOutBounce\",\r\n animateRotate: true,\r\n animateScale: false,\r\n onAnimationComplete: null,\r\n annotateLabel: \"<%=(v1 == ''? '' : v1+':')+ v2 + ' (' + v6 + ' %)'%>\",\r\n startAngle: 90,\r\n totalAmplitude: 360,\r\n radiusScale: 1\r\n };\r\n\r\n chart.defaults.xyAxisCommonOptions = {\r\n maxBarWidth: -1,\r\n yAxisMinimumInterval: \"none\",\r\n yAxisMinimumInterval2: \"none\",\r\n yScaleLabelsMinimumWidth: 0,\r\n xScaleLabelsMinimumWidth: 0,\r\n yAxisLeft: true,\r\n yAxisRight: false,\r\n xAxisBottom: true,\r\n xAxisTop: false,\r\n xAxisSpaceBetweenLabels: 5,\r\n fullWidthGraph: false,\r\n yAxisLabel: \"\",\r\n yAxisLabel2: \"\",\r\n yAxisFontFamily: \"'Arial'\",\r\n yAxisFontSize: 16,\r\n yAxisFontStyle: \"normal\",\r\n yAxisFontColor: \"#666\",\r\n yAxisLabelSpaceRight: 5,\r\n yAxisLabelSpaceLeft: 5,\r\n yAxisSpaceRight: 5,\r\n yAxisSpaceLeft: 5,\r\n yAxisLabelBorders: false,\r\n yAxisLabelBordersColor: \"black\",\r\n yAxisLabelBordersXSpace: 3,\r\n yAxisLabelBordersYSpace: 3,\r\n yAxisLabelBordersWidth: 1,\r\n yAxisLabelBordersStyle: \"solid\",\r\n yAxisLabelBackgroundColor: \"none\",\r\n xAxisLabel: \"\",\r\n xAxisFontFamily: \"'Arial'\",\r\n xAxisFontSize: 16,\r\n xAxisFontStyle: \"normal\",\r\n xAxisFontColor: \"#666\",\r\n xAxisLabelSpaceBefore: 5,\r\n xAxisLabelSpaceAfter: 5,\r\n xAxisSpaceBefore: 5,\r\n xAxisSpaceAfter: 5,\r\n xAxisLabelBorders: false,\r\n xAxisLabelBordersColor: \"black\",\r\n xAxisLabelBordersXSpace: 3,\r\n xAxisLabelBordersYSpace: 3,\r\n xAxisLabelBordersWidth: 1,\r\n xAxisLabelBordersStyle: \"solid\",\r\n xAxisLabelBackgroundColor: \"none\",\r\n showXLabels: 1,\r\n firstLabelToShow: 1,\r\n showYLabels: 1,\r\n firstYLabelToShow: 1,\r\n yAxisUnit: \"\",\r\n yAxisUnit2: \"\",\r\n yAxisUnitFontFamily: \"'Arial'\",\r\n yAxisUnitFontSize: 8,\r\n yAxisUnitFontStyle: \"normal\",\r\n yAxisUnitFontColor: \"#666\",\r\n yAxisUnitSpaceBefore: 5,\r\n yAxisUnitSpaceAfter: 5,\r\n yAxisUnitBorders: false,\r\n yAxisUnitBordersColor: \"black\",\r\n yAxisUnitBordersXSpace: 3,\r\n yAxisUnitBordersYSpace: 3,\r\n yAxisUnitBordersWidth: 1,\r\n yAxisUnitBordersStyle: \"solid\",\r\n yAxisUnitBackgroundColor: \"none\"\r\n };\r\n var clear = function (c) {\r\n c.clearRect(0, 0, width, height);\r\n };\r\n\r\n function init_and_start(ctx, data, config) {\r\n var i;\r\n\r\n if (typeof ctx.initialWidth == \"undefined\") {\r\n ctx.initialWidth = ctx.canvas.width;\r\n }\r\n if (typeof ctx.chartTextScale == \"undefined\") {\r\n ctx.chartTextScale = config.chartTextScale;\r\n }\r\n if (typeof ctx.chartLineScale == \"undefined\") {\r\n ctx.chartLineScale = config.chartLineScale;\r\n }\r\n if (typeof ctx.chartSpaceScale == \"undefined\") {\r\n ctx.chartSpaceScale = config.chartSpaceScale;\r\n }\r\n if (typeof ctx.ChartNewId == \"undefined\") {\r\n\r\n ctx.runanimationcompletefunction = true;\r\n var cvdate = new Date();\r\n var cvmillsec = cvdate.getTime();\r\n ctx.ChartNewId = ctx.tpchart + '_' + cvmillsec;\r\n ctx._eventListeners = {};\r\n }\r\n if (!dynamicFunction(data, config, ctx)) {\r\n if (config.responsive && typeof ctx.firstPass == \"undefined\") { if (!config.multiGraph) { addResponsiveChart(ctx.ChartNewId, ctx, data, config); } }\r\n return false;\r\n }\r\n if (config.responsive && typeof ctx.firstPass == \"undefined\") {\r\n if (!config.multiGraph) {\r\n addResponsiveChart(ctx.ChartNewId, ctx, data, config);\r\n subUpdateChart(ctx, data, config);\r\n return false;\r\n } else { ctx.firstPass = 1; }\r\n }\r\n\r\n if (typeof jsGraphAnnotate[ctx.ChartNewId] == \"undefined\") {\r\n jsGraphAnnotate[ctx.ChartNewId] = new Array();\r\n jsTextMousePos[ctx.ChartNewId] = new Array();\r\n }\r\n else if (!config.multiGraph) clearAnnotate(ctx.ChartNewId);\r\n\r\n\r\n if (config.contextMenu == false || typeof config.mouseDownRight == 'function') {\r\n ctx.canvas.oncontextmenu = function (e) {\r\n e.preventDefault();\r\n };\r\n }\r\n\r\n // convert label to title - for compatibility reasons with Chart.js;\r\n switch (ctx.tpdata) {\r\n case 1:\r\n for (i = 0; i < data.length; i++) {\r\n if (typeof data[i].title == \"undefined\" && typeof data[i].label != \"undefined\") {\r\n data[i].title = data[i].label;\r\n }\r\n }\r\n break;\r\n case 0:\r\n default:\r\n for (i = 0; i < data.datasets.length; i++) {\r\n if (typeof data.datasets[i].title == \"undefined\" && typeof data.datasets[i].label != \"undefined\") {\r\n data.datasets[i].title = data.datasets[i].label;\r\n }\r\n }\r\n break;\r\n }\r\n\r\n\r\n\r\n defMouse(ctx, data, config);\r\n\r\n setRect(ctx, config);\r\n\r\n return true;\r\n };\r\n\r\n var PolarArea = function (data, config, ctx) {\r\n var maxSize, scaleHop, calculatedScale, labelHeight, scaleHeight, valueBounds, labelTemplateString, msr, midPosX, midPosY;\r\n\r\n ctx.tpchart = \"PolarArea\";\r\n ctx.tpdata = 1;\r\n\r\n if (!init_and_start(ctx, data, config)) return;\r\n\r\n var realCumulativeAngle = (((config.startAngle * (Math.PI / 180) + 2 * Math.PI) % (2 * Math.PI)) + 2 * Math.PI) % (2 * Math.PI);\r\n var realAmplitude = (((config.totalAmplitude * (Math.PI / 180) + 2 * Math.PI) % (2 * Math.PI)) + 2 * Math.PI) % (2 * Math.PI);\r\n if (realAmplitude <= config.zeroValue) realAmplitude = 2 * Math.PI;\r\n\r\n var debAngle = ((realCumulativeAngle - realAmplitude) + 4 * Math.PI) % (2 * Math.PI);\r\n var finAngle = debAngle + realAmplitude;\r\n\r\n var statData = initPassVariableData_part1(data, config, ctx);\r\n\r\n valueBounds = getValueBounds();\r\n config.logarithmic = false;\r\n config.logarithmic2 = false;\r\n\r\n //Check and set the scale\r\n labelTemplateString = (config.scaleShowLabels) ? config.scaleLabel : \"\";\r\n if (!config.scaleOverride) {\r\n calculatedScale = calculateScale(1, config, valueBounds.maxSteps, valueBounds.minSteps, valueBounds.maxValue, valueBounds.minValue, labelTemplateString);\r\n msr = setMeasures(data, config, ctx, height, width, calculatedScale.labels, null, true, false, false, false, true, \"PolarArea\");\r\n } else {\r\n var scaleStartValue = setOptionValue(1, \"SCALESTARTVALUE\", ctx, data, statData, undefined, config.scaleStartValue, -1, -1, { nullValue: true });\r\n var scaleSteps = setOptionValue(1, \"SCALESTEPS\", ctx, data, statData, undefined, config.scaleSteps, -1, -1, { nullValue: true });\r\n var scaleStepWidth = setOptionValue(1, \"SCALESTEPWIDTH\", ctx, data, statData, undefined, config.scaleStepWidth, -1, -1, { nullValue: true });\r\n\r\n calculatedScale = {\r\n steps: scaleSteps,\r\n stepValue: scaleStepWidth,\r\n graphMin: scaleStartValue,\r\n graphMax: scaleStartValue + scaleSteps * scaleStepWidth,\r\n labels: []\r\n }\r\n populateLabels(1, config, labelTemplateString, calculatedScale.labels, calculatedScale.steps, scaleStartValue, calculatedScale.graphMax, scaleStepWidth);\r\n msr = setMeasures(data, config, ctx, height, width, calculatedScale.labels, null, true, false, false, false, true, \"PolarArea\");\r\n }\r\n\r\n var outerVal = calculatedScale.graphMin + calculatedScale.steps * calculatedScale.stepValue;\r\n\r\n var drwSize = calculatePieDrawingSize(ctx, msr, config, data, statData);\r\n midPosX = drwSize.midPieX;\r\n midPosY = drwSize.midPieY;\r\n\r\n scaleHop = Math.floor(drwSize.radius / calculatedScale.steps);\r\n //Wrap in an animation loop wrapper\r\n if (scaleHop > 0) {\r\n initPassVariableData_part2(statData, data, config, ctx, { midPosX: midPosX, midPosY: midPosY, int_radius: 0, ext_radius: scaleHop * calculatedScale.steps, calculatedScale: calculatedScale, scaleHop: scaleHop, outerVal: outerVal });\r\n animationLoop(config, drawScale, drawAllSegments, ctx, msr.clrx, msr.clry, msr.clrwidth, msr.clrheight, midPosX, midPosY, midPosX - ((Min([msr.availableHeight, msr.availableWidth]) / 2) - 5), midPosY + ((Min([msr.availableHeight, msr.availableWidth]) / 2) - 5), data, statData);\r\n } else {\r\n testRedraw(ctx, data, config);\r\n }\r\n\r\n function drawAllSegments(animationDecimal) {\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n var scaleAnimation = 1,\r\n rotateAnimation = 1;\r\n\r\n if (config.animation) {\r\n if (config.animateScale) {\r\n scaleAnimation = animationDecimal;\r\n }\r\n if (config.animateRotate) {\r\n rotateAnimation = animationDecimal;\r\n }\r\n }\r\n correctedRotateAnimation = animationCorrection(rotateAnimation, data, config, i, -1, 0).mainVal;\r\n if (!(typeof (data[i].value) == 'undefined')) {\r\n ctx.beginPath();\r\n if (config.animationByData == \"ByArc\") {\r\n endAngle = statData[i].startAngle + correctedRotateAnimation * statData[i].segmentAngle;\r\n ctx.arc(midPosX, midPosY, scaleAnimation * statData[i].radiusOffset, statData[i].startAngle, endAngle, false);\r\n } else if (config.animationByData) {\r\n if (statData[i].startAngle - statData[i].firstAngle < correctedRotateAnimation * 2 * Math.PI) {\r\n endAngle = statData[i].endAngle;\r\n if ((statData[i].endAngle - statData[i].firstAngle) > correctedRotateAnimation * 2 * Math.PI) endAngle = statData[i].firstAngle + correctedRotateAnimation * 2 * Math.PI;\r\n ctx.arc(midPosX, midPosY, scaleAnimation * statData[i].radiusOffset, statData[i].startAngle, endAngle, false);\r\n\r\n }\r\n else continue;\r\n } else {\r\n ctx.arc(midPosX, midPosY, scaleAnimation * statData[i].radiusOffset, statData[i].firstAngle + correctedRotateAnimation * (statData[i].startAngle - statData[i].firstAngle), statData[i].firstAngle + correctedRotateAnimation * (statData[i].endAngle - statData[i].firstAngle));\r\n }\r\n ctx.lineTo(midPosX, midPosY);\r\n ctx.closePath();\r\n ctx.fillStyle = setOptionValue(1, \"COLOR\", ctx, data, statData, data[i].color, config.defaultFillColor, i, -1, { animationDecimal: animationDecimal, scaleAnimation: scaleAnimation });\r\n ctx.fill();\r\n\r\n if (config.segmentShowStroke == \"merge\") { /* avoid blank stripes between piece of chart */\r\n ctx.lineWidth = 0;\r\n ctx.strokeStyle = setOptionValue(1, \"COLOR\", ctx, data, statData, data[i].color, config.defaultFillColor, i, -1, { animationDecimal: animationDecimal, scaleAnimation: scaleAnimation });\r\n ctx.setLineDash([]);\r\n ctx.stroke();\r\n }\r\n else if (config.segmentShowStroke) {\r\n ctx.strokeStyle = config.segmentStrokeColor;\r\n ctx.lineWidth = Math.ceil(ctx.chartLineScale * config.segmentStrokeWidth);\r\n ctx.setLineDash(lineStyleFn(setOptionValue(1, \"SEGMENTSTROKESTYLE\", ctx, data, statData, data[i].segmentStrokeStyle, config.segmentStrokeStyle, i, -1, { animationDecimal: animationDecimal, scaleAnimation: scaleAnimation })));\r\n ctx.stroke();\r\n ctx.setLineDash([]);\r\n }\r\n }\r\n }\r\n\r\n\r\n if (animationDecimal >= config.animationStopValue) {\r\n for (i = 0; i < data.length; i++) {\r\n if (typeof (data[i].value) == 'undefined') continue;\r\n //\t\t\t\t\tif (setOptionValue(1,\"ANNOTATEDISPLAY\",ctx,data,statData,undefined,config.annotateDisplay,i,-1,{nullValue : true})) {\r\n jsGraphAnnotate[ctx.ChartNewId][jsGraphAnnotate[ctx.ChartNewId].length] = [\"ARC\", i, -1, statData, setOptionValue(1, \"ANNOTATEDISPLAY\", ctx, data, statData, data[i].annotateDisplay, config.annotateDisplay, i, -1, { nullValue: true })];\r\n //\t\t\t\t\t}\r\n if (setOptionValue(1, \"INGRAPHDATASHOW\", ctx, data, statData, data[i].inGraphDataShow, config.inGraphDataShow, i, -1, { nullValue: true })) {\r\n if (setOptionValue(1, \"INGRAPHDATAANGLEPOSITION\", ctx, data, statData, undefined, config.inGraphDataAnglePosition, i, -1, { nullValue: true }) == 1) posAngle = statData[i].realStartAngle + setOptionValue(1, \"INGRAPHDATAPADDINANGLE\", ctx, data, statData, undefined, config.inGraphDataPaddingAngle, i, -1, { nullValue: true }) * (Math.PI / 180);\r\n else if (setOptionValue(1, \"INGRAPHDATAANGLEPOSITION\", ctx, data, statData, undefined, config.inGraphDataAnglePosition, i, -1, { nullValue: true }) == 2) posAngle = (2 * statData[i].realStartAngle - statData[i].segmentAngle) / 2 + setOptionValue(1, \"INGRAPHDATAPADDINANGLE\", ctx, data, statData, undefined, config.inGraphDataPaddingAngle, i, -1, { nullValue: true }) * (Math.PI / 180);\r\n else if (setOptionValue(1, \"INGRAPHDATAANGLEPOSITION\", ctx, data, statData, undefined, config.inGraphDataAnglePosition, i, -1, { nullValue: true }) == 3) posAngle = statData[i].realStartAngle - statData[i].segmentAngle + setOptionValue(1, \"INGRAPHDATAPADDINANGLE\", ctx, data, statData, undefined, config.inGraphDataPaddingAngle, i, -1, { nullValue: true }) * (Math.PI / 180);\r\n if (setOptionValue(1, \"INGRAPHDATARADIUSPOSITION\", ctx, data, statData, undefined, config.inGraphDataRadiusPosition, i, -1, { nullValue: true }) == 1) labelRadius = 0 + setOptionValue(1, \"INGRAPHDATAPADDINGRADIUS\", ctx, data, statData, undefined, config.inGraphDataPaddingRadius, i, -1, { nullValue: true });\r\n else if (setOptionValue(1, \"INGRAPHDATARADIUSPOSITION\", ctx, data, statData, undefined, config.inGraphDataRadiusPosition, i, -1, { nullValue: true }) == 2) labelRadius = statData[i].radiusOffset / 2 + setOptionValue(1, \"INGRAPHDATAPADDINGRADIUS\", ctx, data, statData, undefined, config.inGraphDataPaddingRadius, i, -1, { nullValue: true });\r\n else if (setOptionValue(1, \"INGRAPHDATARADIUSPOSITION\", ctx, data, statData, undefined, config.inGraphDataRadiusPosition, i, -1, { nullValue: true }) == 3) labelRadius = statData[i].radiusOffset + setOptionValue(1, \"INGRAPHDATAPADDINGRADIUS\", ctx, data, statData, undefined, config.inGraphDataPaddingRadius, i, -1, { nullValue: true });\r\n else if (setOptionValue(1, \"INGRAPHDATARADIUSPOSITION\", ctx, data, statData, undefined, config.inGraphDataRadiusPosition, i, -1, { nullValue: true }) == 4) labelRadius = scaleHop * calculatedScale.steps + setOptionValue(1, \"INGRAPHDATAPADDINGRADIUS\", ctx, data, statData, undefined, config.inGraphDataPaddingRadius, i, -1, { nullValue: true });\r\n ctx.save()\r\n if (setOptionValue(1, \"INGRAPHDATAALIGN\", ctx, data, statData, undefined, config.inGraphDataAlign, i, -1, { nullValue: true }) == \"off-center\") {\r\n if (setOptionValue(1, \"INGRAPHDATAROTATE\", ctx, data, statData, undefined, config.inGraphDataRotate, i, -1, { nullValue: true }) == \"inRadiusAxis\" || (posAngle + 2 * Math.PI) % (2 * Math.PI) >= 3 * Math.PI / 2 || (posAngle + 2 * Math.PI) % (2 * Math.PI) <= Math.PI / 2) ctx.textAlign = \"left\";\r\n\r\n else ctx.textAlign = \"right\";\r\n } else if (setOptionValue(1, \"INGRAPHDATAALIGN\", ctx, data, statData, undefined, config.inGraphDataAlign, i, -1, { nullValue: true }) == \"to-center\") {\r\n if (setOptionValue(1, \"INGRAPHDATAROTATE\", ctx, data, statData, undefined, config.inGraphDataRotate, i, -1, { nullValue: true }) == \"inRadiusAxis\" || (posAngle + 2 * Math.PI) % (2 * Math.PI) >= 3 * Math.PI / 2 || (posAngle + 2 * Math.PI) % (2 * Math.PI) <= Math.PI / 2) ctx.textAlign = \"right\";\r\n else ctx.textAlign = \"left\";\r\n } else ctx.textAlign = setOptionValue(1, \"INGRAPHDATAALIGN\", ctx, data, statData, undefined, config.inGraphDataAlign, i, -1, { nullValue: true });\r\n if (setOptionValue(1, \"INGRAPHDATAVALIGN\", ctx, data, statData, undefined, config.inGraphDataVAlign, i, -1, { nullValue: true }) == \"off-center\") {\r\n if ((posAngle + 2 * Math.PI) % (2 * Math.PI) > Math.PI) ctx.textBaseline = \"top\";\r\n else ctx.textBaseline = \"bottom\";\r\n } else if (setOptionValue(1, \"INGRAPHDATAVALIGN\", ctx, data, statData, undefined, config.inGraphDataVAlign, i, -1, { nullValue: true }) == \"to-center\") {\r\n if ((posAngle + 2 * Math.PI) % (2 * Math.PI) > Math.PI) ctx.textBaseline = \"bottom\";\r\n else ctx.textBaseline = \"top\";\r\n } else ctx.textBaseline = setOptionValue(1, \"INGRAPHDATAVALIGN\", ctx, data, statData, undefined, config.inGraphDataVAlign, i, -1, { nullValue: true });\r\n ctx.font = setOptionValue(1, \"INGRAPHDATAFONTSTYLE\", ctx, data, statData, undefined, config.inGraphDataFontStyle, i, -1, { nullValue: true }) + ' ' + setOptionValue(ctx.chartTextScale, \"INGRAPHDATAFONTSIZE\", ctx, data, statData, undefined, config.inGraphDataFontSize, i, -1, { nullValue: true }) + 'px ' + setOptionValue(1, \"INGRAPHDATAFONTFAMILY\", ctx, data, statData, undefined, config.inGraphDataFontFamily, i, -1, { nullValue: true });\r\n ctx.fillStyle = setOptionValue(1, \"INGRAPHDATAFONTCOLOR\", ctx, data, statData, undefined, config.inGraphDataFontColor, i, -1, { nullValue: true });\r\n var dispString = tmplbis(setOptionValue(1, \"INGRAPHDATATMPL\", ctx, data, statData, undefined, config.inGraphDataTmpl, i, -1, { nullValue: true }), statData[i], config);\r\n ctx.translate(midPosX + labelRadius * Math.cos(posAngle), midPosY - labelRadius * Math.sin(posAngle));\r\n var rotateVal = 0;\r\n if (setOptionValue(1, \"INGRAPHDATAROTATE\", ctx, data, statData, undefined, config.inGraphDataRotate, i, -1, { nullValue: true }) == \"inRadiusAxis\") rotateVal = 2 * Math.PI - posAngle;\r\n else if (setOptionValue(1, \"INGRAPHDATAROTATE\", ctx, data, statData, undefined, config.inGraphDataRotate, i, -1, { nullValue: true }) == \"inRadiusAxisRotateLabels\") {\r\n if ((posAngle + 2 * Math.PI) % (2 * Math.PI) > Math.PI / 2 && (posAngle + 2 * Math.PI) % (2 * Math.PI) < 3 * Math.PI / 2) rotateVal = 3 * Math.PI - posAngle;\r\n else rotateVal = 2 * Math.PI - posAngle;\r\n } else rotateVal = setOptionValue(1, \"INGRAPHDATAROTATE\", ctx, data, statData, undefined, config.inGraphDataRotate, i, -1, { nullValue: true }) * (Math.PI / 180);\r\n ctx.rotate(rotateVal);\r\n setTextBordersAndBackground(ctx, dispString, setOptionValue(ctx.chartTextScale, \"INGRAPHDATAFONTSIZE\", ctx, data, statData, undefined, config.inGraphDataFontSize, i, -1, { nullValue: true }), 0, 0, setOptionValue(1, \"INGRAPHDATABORDERS\", ctx, data, statData, undefined, config.inGraphDataBorders, i, -1, { nullValue: true }), setOptionValue(1, \"INGRAPHDATABORDERSCOLOR\", ctx, data, statData, undefined, config.inGraphDataBordersColor, i, -1, { nullValue: true }), setOptionValue(ctx.chartLineScale, \"INGRAPHDATABORDERSWIDTH\", ctx, data, statData, undefined, config.inGraphDataBordersWidth, i, -1, { nullValue: true }), setOptionValue(ctx.chartSpaceScale, \"INGRAPHDATABORDERSXSPACE\", ctx, data, statData, undefined, config.inGraphDataBordersXSpace, i, -1, { nullValue: true }), setOptionValue(ctx.chartSpaceScale, \"INGRAPHDATABORDERSYSPACE\", ctx, data, statData, undefined, config.inGraphDataBordersYSpace, i, -1, { nullValue: true }), setOptionValue(1, \"INGRAPHDATABORDERSSTYLE\", ctx, data, statData, undefined, config.inGraphDataBordersStyle, i, -1, { nullValue: true }), setOptionValue(1, \"INGRAPHDATABACKGROUNDCOLOR\", ctx, data, statData, undefined, config.inGraphDataBackgroundColor, i, -1, { nullValue: true }), \"INGRAPHDATA\");\r\n ctx.fillTextMultiLine(dispString, 0, 0, ctx.textBaseline, setOptionValue(ctx.chartTextScale, \"INGRAPHDATAFONTSIZE\", ctx, data, statData, undefined, config.inGraphDataFontSize, i, -1, { nullValue: true }), true, config.detectMouseOnText, ctx, \"INGRAPHDATA_TEXTMOUSE\", rotateVal, midPosX + labelRadius * Math.cos(posAngle), midPosY - labelRadius * Math.sin(posAngle), i, -1);\r\n ctx.restore();\r\n }\r\n }\r\n }\r\n if (msr.legendMsr.dispLegend) drawLegend(msr.legendMsr, data, config, ctx, \"PolarArea\");\r\n };\r\n\r\n function drawScale() {\r\n for (var i = 0; i < calculatedScale.steps; i++) {\r\n if (config.scaleShowLine && (i + 1) % config.scaleGridLinesStep == 0) {\r\n ctx.beginPath();\r\n ctx.arc(midPosX, midPosY, scaleHop * (i + 1), 4 * Math.PI - debAngle, 4 * Math.PI - finAngle, true);\r\n ctx.strokeStyle = config.scaleLineColor;\r\n ctx.lineWidth = Math.ceil(ctx.chartLineScale * config.scaleLineWidth);\r\n ctx.setLineDash(lineStyleFn(config.scaleLineStyle));\r\n\r\n ctx.stroke();\r\n ctx.setLineDash([]);\r\n }\r\n if (config.scaleShowLabels) {\r\n\r\n if (Math.abs(config.totalAmplitude - 360) < config.zeroValue) scaleAngle = Math.PI / 2;\r\n else scaleAngle = (debAngle + finAngle) / 2;\r\n\r\n ctx.textAlign = \"center\";\r\n ctx.font = config.scaleFontStyle + \" \" + (Math.ceil(ctx.chartTextScale * config.scaleFontSize)).toString() + \"px \" + config.scaleFontFamily;\r\n var label = calculatedScale.labels[i + 1];\r\n if (config.scaleShowLabelBackdrop) {\r\n var textWidth = ctx.measureTextMultiLine(label, Math.ceil(ctx.chartTextScale * config.scaleFontSize));\r\n ctx.fillStyle = config.scaleBackdropColor;\r\n ctx.beginPath();\r\n ctx.rect(\r\n Math.round(midPosX + Math.cos(scaleAngle) * (scaleHop * (i + 1)) - textWidth / 2 - Math.ceil(ctx.chartSpaceScale * config.scaleBackdropPaddingX)), //X\r\n Math.round(midPosY - Math.sin(scaleAngle) * (scaleHop * (i + 1)) - (Math.ceil(ctx.chartTextScale * config.scaleFontSize)) * 0.5 - Math.ceil(ctx.chartSpaceScale * config.scaleBackdropPaddingY)), //Y\r\n Math.round(textWidth + (Math.ceil(ctx.chartSpaceScale * config.scaleBackdropPaddingX) * 2)), //Width\r\n Math.round((Math.ceil(ctx.chartTextScale * config.scaleFontSize)) + (Math.ceil(ctx.chartSpaceScale * config.scaleBackdropPaddingY) * 2)) //Height\r\n );\r\n ctx.fill();\r\n }\r\n ctx.textBaseline = \"middle\";\r\n ctx.fillStyle = config.scaleFontColor;\r\n ctx.fillTextMultiLine(label, midPosX + Math.cos(scaleAngle) * (scaleHop * (i + 1)), midPosY - Math.sin(scaleAngle) * (scaleHop * (i + 1)), ctx.textBaseline, (Math.ceil(ctx.chartTextScale * config.scaleFontSize)), true, config.detectMouseOnText, ctx, \"SCALE_TEXTMOUSE\", 0, 0, 0, i, -1);\r\n }\r\n }\r\n };\r\n\r\n function getValueBounds() {\r\n var upperValue = -Number.MAX_VALUE;\r\n var lowerValue = Number.MAX_VALUE;\r\n for (var i = 0; i < data.length; i++) {\r\n if (typeof data[i].value == \"undefined\") continue;\r\n if (1 * data[i].value > upperValue) {\r\n upperValue = 1 * data[i].value;\r\n }\r\n if (1 * data[i].value < lowerValue) {\r\n lowerValue = 1 * data[i].value;\r\n }\r\n };\r\n if (upperValue < lowerValue) { upperValue = 0; lowerValue = 0; }\r\n if (Math.abs(upperValue - lowerValue) < config.zeroValue) {\r\n if (Math.abs(upperValue) < config.zeroValue) upperValue = .9;\r\n if (upperValue > 0) {\r\n upperValue = upperValue * 1.1;\r\n lowerValue = lowerValue * 0.9;\r\n } else {\r\n upperValue = upperValue * 0.9;\r\n lowerValue = lowerValue * 1.1;\r\n }\r\n }\r\n if (typeof config.graphMin == \"function\") lowerValue = setOptionValue(1, \"GRAPHMIN\", ctx, data, statData, undefined, config.graphMin, -1, -1, { nullValue: true })\r\n else if (!isNaN(config.graphMin)) lowerValue = config.graphMin;\r\n if (typeof config.graphMax == \"function\") upperValue = setOptionValue(1, \"GRAPHMAX\", ctx, data, statData, undefined, config.graphMax, -1, -1, { nullValue: true })\r\n else if (!isNaN(config.graphMax)) upperValue = config.graphMax;\r\n var maxSteps = Math.floor((scaleHeight / (labelHeight * 0.66)));\r\n var minSteps = Math.floor((scaleHeight / labelHeight * 0.5));\r\n if (upperValue < lowerValue) { lowerValue = upperValue - 1; }\r\n\r\n return {\r\n maxValue: upperValue,\r\n minValue: lowerValue,\r\n maxSteps: maxSteps,\r\n minSteps: minSteps\r\n };\r\n };\r\n\r\n return {\r\n data: data,\r\n config: config,\r\n ctx: ctx\r\n };\r\n };\r\n var Radar = function (data, config, ctx) {\r\n var maxSize, scaleHop, calculatedScale, labelHeight, scaleHeight, valueBounds, labelTemplateString, msr, midPosX, midPosY;\r\n\r\n ctx.tpchart = \"Radar\";\r\n ctx.tpdata = 0;\r\n\r\n if (!init_and_start(ctx, data, config)) return;\r\n var statData = initPassVariableData_part1(data, config, ctx);\r\n valueBounds = getValueBounds();\r\n\r\n config.logarithmic = false;\r\n config.logarithmic2 = false;\r\n //If no labels are defined set to an empty array, so referencing length for looping doesn't blow up.\r\n if (!data.labels) data.labels = [];\r\n //Check and set the scale\r\n labelTemplateString = (config.scaleShowLabels) ? config.scaleLabel : \"\";\r\n if (!config.scaleOverride) {\r\n calculatedScale = calculateScale(1, config, valueBounds.maxSteps, valueBounds.minSteps, valueBounds.maxValue, valueBounds.minValue, labelTemplateString);\r\n msr = setMeasures(data, config, ctx, height, width, calculatedScale.labels, null, true, false, false, true, config.datasetFill, \"Radar\");\r\n } else {\r\n var scaleStartValue = setOptionValue(1, \"SCALESTARTVALUE\", ctx, data, statData, undefined, config.scaleStartValue, -1, -1, { nullValue: true });\r\n var scaleSteps = setOptionValue(1, \"SCALESTEPS\", ctx, data, statData, undefined, config.scaleSteps, -1, -1, { nullValue: true });\r\n var scaleStepWidth = setOptionValue(1, \"SCALESTEPWIDTH\", ctx, data, statData, undefined, config.scaleStepWidth, -1, -1, { nullValue: true });\r\n calculatedScale = {\r\n steps: scaleSteps,\r\n stepValue: scaleStepWidth,\r\n graphMin: scaleStartValue,\r\n graphMax: scaleStartValue + scaleSteps * scaleStepWidth,\r\n labels: []\r\n }\r\n populateLabels(1, config, labelTemplateString, calculatedScale.labels, calculatedScale.steps, scaleStartValue, calculatedScale.graphMax, scaleStepWidth);\r\n msr = setMeasures(data, config, ctx, height, width, calculatedScale.labels, null, true, false, false, true, config.datasetFill, \"Radar\");\r\n }\r\n\r\n calculateDrawingSizes();\r\n midPosY = msr.topNotUsableSize + (msr.availableHeight / 2);\r\n scaleHop = maxSize / (calculatedScale.steps);\r\n //Wrap in an animation loop wrapper\r\n initPassVariableData_part2(statData, data, config, ctx, { midPosX: midPosX, midPosY: midPosY, calculatedScale: calculatedScale, scaleHop: scaleHop, maxSize: maxSize, outerVal: -1 });\r\n animationLoop(config, drawScale, drawAllDataPoints, ctx, msr.clrx, msr.clry, msr.clrwidth, msr.clrheight, midPosX, midPosY, midPosX - maxSize, midPosY + maxSize, data, statData);\r\n //Radar specific functions.\r\n function drawAllDataPoints(animationDecimal) {\r\n var rotationDegree = (2 * Math.PI) / data.datasets[0].data.length;\r\n ctx.save();\r\n //We accept multiple data sets for radar charts, so show loop through each set\r\n for (var i = 0; i < data.datasets.length; i++) {\r\n var fPt = -1;\r\n for (var j = 0; j < data.datasets[i].data.length; j++) {\r\n var currentAnimPc = animationCorrection(animationDecimal, data, config, i, j, 1).animVal;\r\n if (currentAnimPc > 1) currentAnimPc = currentAnimPc - 1;\r\n if (!(typeof (data.datasets[i].data[j]) == 'undefined')) {\r\n if (fPt == -1) {\r\n ctx.beginPath();\r\n ctx.moveTo(midPosX + currentAnimPc * statData[i][j].offsetX, midPosY - currentAnimPc * statData[i][j].offsetY);\r\n fPt = j;\r\n } else {\r\n ctx.lineTo(midPosX + currentAnimPc * statData[i][j].offsetX, midPosY - currentAnimPc * statData[i][j].offsetY);\r\n }\r\n }\r\n }\r\n ctx.closePath();\r\n if (config.datasetFill) {\r\n ctx.fillStyle = setOptionValue(1, \"COLOR\", ctx, data, statData, data.datasets[i].fillColor, config.defaultFillColor, i, -1, { animationValue: currentAnimPc, midPosX: statData[i][0].midPosX, midPosY: statData[i][0].midPosY, ext_radius: (config.animationLeftToRight ? 1 : currentAnimPc) * (statData[i][0].calculated_offset_max) });\r\n } else ctx.fillStyle = \"rgba(0,0,0,0)\";\r\n\r\n ctx.strokeStyle = setOptionValue(1, \"STROKECOLOR\", ctx, data, statData, data.datasets[i].strokeColor, config.defaultStrokeColor, i, -1, { nullvalue: null });\r\n ctx.lineWidth = Math.ceil(ctx.chartLineScale * setOptionValue(1, \"LINEWIDTH\", ctx, data, statData, data.datasets[i].datasetStrokeWidth, config.datasetStrokeWidth, i, -1, { nullvalue: null }));\r\n ctx.fill();\r\n //\t\t\t\tctx.setLineDash(lineStyleFn(config.datasetStrokeStyle));\r\n ctx.setLineDash(lineStyleFn(setOptionValue(1, \"LINEDASH\", ctx, data, statData, data.datasets[i].datasetStrokeStyle, config.datasetStrokeStyle, i, j, { nullvalue: null })));\r\n ctx.stroke();\r\n ctx.setLineDash([]);\r\n if (config.pointDot && (!config.animationLeftToRight || (config.animationLeftToRight && animationDecimal >= 1))) {\r\n ctx.beginPath();\r\n ctx.fillStyle = setOptionValue(1, \"MARKERFILLCOLOR\", ctx, data, statData, data.datasets[i].pointColor, config.defaultStrokeColor, i, -1, { nullvalue: true });\r\n ctx.strokeStyle = setOptionValue(1, \"MARKERSTROKESTYLE\", ctx, data, statData, data.datasets[i].pointStrokeColor, config.defaultStrokeColor, i, -1, { nullvalue: true });\r\n ctx.lineWidth = setOptionValue(ctx.chartLineScale, \"MARKERLINEWIDTH\", ctx, data, statData, data.datasets[i].pointDotStrokeWidth, config.pointDotStrokeWidth, i, -1, { nullvalue: true });\r\n\r\n for (var k = 0; k < data.datasets[i].data.length; k++) {\r\n if (!(typeof (data.datasets[i].data[k]) == 'undefined')) {\r\n ctx.beginPath();\r\n var markerShape = setOptionValue(1, \"MARKERSHAPE\", ctx, data, statData, data.datasets[i].markerShape, config.markerShape, i, k, { nullvalue: true });\r\n var markerRadius = setOptionValue(ctx.chartSpaceScale, \"MARKERRADIUS\", ctx, data, statData, data.datasets[i].pointDotRadius, config.pointDotRadius, i, k, { nullvalue: true });\r\n var markerStrokeStyle = setOptionValue(1, \"MARKERSTROKESTYLE\", ctx, data, statData, data.datasets[i].pointDotStrokeStyle, config.pointDotStrokeStyle, i, k, { nullvalue: true });\r\n drawMarker(ctx, midPosX + currentAnimPc * statData[i][k].offsetX, midPosY - currentAnimPc * statData[i][k].offsetY, markerShape, markerRadius, markerStrokeStyle);\r\n }\r\n }\r\n }\r\n }\r\n ctx.restore();\r\n if (animationDecimal >= config.animationStopValue) {\r\n for (i = 0; i < data.datasets.length; i++) {\r\n for (j = 0; j < data.datasets[i].data.length; j++) {\r\n if (typeof (data.datasets[i].data[j]) == 'undefined') continue;\r\n //\t\t\t\t\t\tif (setOptionValue(1,\"ANNOTATEDISPLAY\",ctx,data,statData,undefined,config.annotateDisplay,i,j,{nullValue : true})) {\r\n jsGraphAnnotate[ctx.ChartNewId][jsGraphAnnotate[ctx.ChartNewId].length] = [\"POINT\", i, j, statData, setOptionValue(1, \"ANNOTATEDISPLAY\", ctx, data, statData, data.datasets[i].annotateDisplay, config.annotateDisplay, i, j, { nullValue: true })];\r\n //\t\t\t\t\t\t}\r\n if (setOptionValue(1, \"INGRAPHDATASHOW\", ctx, data, statData, data.datasets[i].inGraphDataShow, config.inGraphDataShow, i, j, { nullValue: true })) {\r\n ctx.save();\r\n ctx.beginPath();\r\n ctx.textAlign = setOptionValue(1, \"INGRAPHDATAALIGN\", ctx, data, statData, undefined, config.inGraphDataAlign, i, j, { nullValue: true });\r\n ctx.textBaseline = setOptionValue(1, \"INGRAPHDATAVALIGN\", ctx, data, statData, undefined, config.inGraphDataVAlign, i, j, { nullValue: true });\r\n if (setOptionValue(1, \"INGRAPHDATAALIGN\", ctx, data, statData, undefined, config.inGraphDataAlign, i, j, { nullValue: true }) == \"off-center\") {\r\n if (setOptionValue(1, \"INGRAPHDATAROTATE\", ctx, data, statData, undefined, config.inGraphDataRotate, i, j, { nullValue: true }) == \"inRadiusAxis\" || (config.startAngle * Math.PI / 180 - j * rotationDegree + 4 * Math.PI) % (2 * Math.PI) > 3 * Math.PI / 2 || (config.startAngle * Math.PI / 180 - j * rotationDegree + 4 * Math.PI) % (2 * Math.PI) <= Math.PI / 2) ctx.textAlign = \"left\";\r\n else ctx.textAlign = \"right\";\r\n } else if (setOptionValue(1, \"INGRAPHDATAALIGN\", ctx, data, statData, undefined, config.inGraphDataAlign, i, j, { nullValue: true }) == \"to-center\") {\r\n if (setOptionValue(1, \"INGRAPHDATAROTATE\", ctx, data, statData, undefined, config.inGraphDataRotate, i, j, { nullValue: true }) == \"inRadiusAxis\" || (config.startAngle * Math.PI / 180 - j * rotationDegree + 4 * Math.PI) % (2 * Math.PI) > 3 * Math.PI / 2 || (config.startAngle * Math.PI / 180 - j * rotationDegree + 4 * Math.PI) % (2 * Math.PI) < Math.PI / 2) ctx.textAlign = \"right\";\r\n else ctx.textAlign = \"left\";\r\n } else ctx.textAlign = setOptionValue(1, \"INGRAPHDATAALIGN\", ctx, data, statData, undefined, config.inGraphDataAlign, i, j, { nullValue: true });\r\n if (setOptionValue(1, \"INGRAPHDATAVALIGN\", ctx, data, statData, undefined, config.inGraphDataVAlign, i, j, { nullValue: true }) == \"off-center\") {\r\n if ((config.startAngle * Math.PI / 180 - j * rotationDegree + 4 * Math.PI) % (2 * Math.PI) > Math.PI) ctx.textBaseline = \"bottom\";\r\n else ctx.textBaseline = \"top\";\r\n } else if (setOptionValue(1, \"INGRAPHDATAVALIGN\", ctx, data, statData, undefined, config.inGraphDataVAlign, i, j, { nullValue: true }) == \"to-center\") {\r\n if ((config.startAngle * Math.PI / 180 - j * rotationDegree + 4 * Math.PI) % (2 * Math.PI) > Math.PI) ctx.textBaseline = \"top\";\r\n else ctx.textBaseline = \"bottom\";\r\n } else ctx.textBaseline = setOptionValue(1, \"INGRAPHDATAVALIGN\", ctx, data, statData, undefined, config.inGraphDataVAlign, i, j, { nullValue: true });\r\n ctx.font = setOptionValue(1, \"INGRAPHDATAFONTSTYLE\", ctx, data, statData, undefined, config.inGraphDataFontStyle, i, j, { nullValue: true }) + ' ' + setOptionValue(ctx.chartTextScale, \"INGRAPHDATAFONTSIZE\", ctx, data, statData, undefined, config.inGraphDataFontSize, i, j, { nullValue: true }) + 'px ' + setOptionValue(1, \"INGRAPHDATAFONTFAMILY\", ctx, data, statData, undefined, config.inGraphDataFontFamily, i, j, { nullValue: true });\r\n ctx.fillStyle = setOptionValue(1, \"INGRAPHDATAFONTCOLOR\", ctx, data, statData, undefined, config.inGraphDataFontColor, i, j, { nullValue: true });\r\n var radiusPrt;\r\n if (setOptionValue(1, \"INGRAPHDATARADIUSPOSITION\", ctx, data, statData, undefined, config.inGraphDataRadiusPosition, i, j, { nullValue: true }) == 1) radiusPrt = 0 + setOptionValue(1, \"INGRAPHDATAPADDINGRADIUS\", ctx, data, statData, undefined, config.inGraphDataPaddingRadius, i, j, { nullValue: true });\r\n else if (setOptionValue(1, \"INGRAPHDATARADIUSPOSITION\", ctx, data, statData, undefined, config.inGraphDataRadiusPosition, i, j, { nullValue: true }) == 2) radiusPrt = (statData[i][j].calculated_offset) / 2 + setOptionValue(1, \"INGRAPHDATAPADDINGRADIUS\", ctx, data, statData, undefined, config.inGraphDataPaddingRadius, i, j, { nullValue: true });\r\n else if (setOptionValue(1, \"INGRAPHDATARADIUSPOSITION\", ctx, data, statData, undefined, config.inGraphDataRadiusPosition, i, j, { nullValue: true }) == 3) radiusPrt = (statData[i][j].calculated_offset) + setOptionValue(1, \"INGRAPHDATAPADDINGRADIUS\", ctx, data, statData, undefined, config.inGraphDataPaddingRadius, i, j, { nullValue: true });\r\n var x_pos, y_pos;\r\n if (statData[i][j].calculated_offset > 0) {\r\n x_pos = midPosX + statData[i][j].offsetX * (radiusPrt / statData[i][j].calculated_offset);\r\n y_pos = midPosY - statData[i][j].offsetY * (radiusPrt / statData[i][j].calculated_offset);\r\n //\t\t\t\t\t\t\t\tctx.translate(midPosX + statData[i][j].offsetX * (radiusPrt/statData[i][j].calculated_offset), midPosY - statData[i][j].offsetY * (radiusPrt/statData[i][j].calculated_offset));\r\n } else {\r\n x_pos = midPosX;\r\n y_pos = midPosY;\r\n //\t\t\t\t\t\t\t\tctx.translate(midPosX, midPosY);\r\n }\r\n ctx.translate(x_pos, y_pos);\r\n var rotateVal = 0;\r\n if (setOptionValue(1, \"INGRAPHDATAROTATE\", ctx, data, statData, undefined, config.inGraphDataRotate, i, j, { nullValue: true }) == \"inRadiusAxis\") rotateVal = j * rotationDegree;\r\n else if (setOptionValue(1, \"INGRAPHDATAROTATE\", ctx, data, statData, undefined, config.inGraphDataRotate, i, j, { nullValue: true }) == \"inRadiusAxisRotateLabels\") {\r\n if ((j * rotationDegree + 2 * Math.PI) % (2 * Math.PI) > Math.PI / 2 && (j * rotationDegree + 2 * Math.PI) % (2 * Math.PI) < 3 * Math.PI / 2) rotateVal = 3 * Math.PI + j * rotationDegree;\r\n else rotateVal = 2 * Math.PI + j * rotationDegree;\r\n } else rotateVal = setOptionValue(1, \"INGRAPHDATAROTATE\", ctx, data, statData, undefined, config.inGraphDataRotate, i, j, { nullValue: true }) * (Math.PI / 180);\r\n ctx.rotate(rotateVal);\r\n var dispString = tmplbis(setOptionValue(1, \"INGRAPHDATATMPL\", ctx, data, statData, undefined, config.inGraphDataTmpl, i, j, { nullValue: true }), statData[i][j], config);\r\n setTextBordersAndBackground(ctx, dispString, setOptionValue(ctx.chartTextScale, \"INGRAPHDATAFONTSIZE\", ctx, data, statData, undefined, config.inGraphDataFontSize, i, j, { nullValue: true }), 0, 0, setOptionValue(1, \"INGRAPHDATABORDERS\", ctx, data, statData, undefined, config.inGraphDataBorders, i, j, { nullValue: true }), setOptionValue(1, \"INGRAPHDATABORDERSCOLOR\", ctx, data, statData, undefined, config.inGraphDataBordersColor, i, j, { nullValue: true }), setOptionValue(ctx.chartLineScale, \"INGRAPHDATABORDERSWIDTH\", ctx, data, statData, undefined, config.inGraphDataBordersWidth, i, j, { nullValue: true }), setOptionValue(ctx.chartSpaceScale, \"INGRAPHDATABORDERSXSPACE\", ctx, data, statData, undefined, config.inGraphDataBordersXSpace, i, j, { nullValue: true }), setOptionValue(ctx.chartSpaceScale, \"INGRAPHDATABORDERSYSPACE\", ctx, data, statData, undefined, config.inGraphDataBordersYSpace, i, j, { nullValue: true }), setOptionValue(1, \"INGRAPHDATABORDERSSTYLE\", ctx, data, statData, undefined, config.inGraphDataBordersStyle, i, j, { nullValue: true }), setOptionValue(1, \"INGRAPHDATABACKGROUNDCOLOR\", ctx, data, statData, undefined, config.inGraphDataBackgroundColor, i, j, { nullValue: true }), \"INGRAPHDATA\");\r\n ctx.fillTextMultiLine(dispString, 0, 0, ctx.textBaseline, setOptionValue(ctx.chartTextScale, \"INGRAPHDATAFONTSIZE\", ctx, data, statData, undefined, config.inGraphDataFontSize, i, j, { nullValue: true }), true, config.detectMouseOnText, ctx, \"INGRAPHDATA_TEXTMOUSE\", rotateVal, x_pos, y_pos, i, j);\r\n ctx.restore();\r\n }\r\n }\r\n }\r\n }\r\n if (msr.legendMsr.dispLegend) drawLegend(msr.legendMsr, data, config, ctx, \"Radar\");\r\n };\r\n\r\n function drawScale() {\r\n var rotationDegree = (2 * Math.PI) / data.datasets[0].data.length;\r\n ctx.save();\r\n ctx.translate(midPosX, midPosY);\r\n ctx.rotate((90 - config.startAngle) * Math.PI / 180);\r\n if (config.angleShowLineOut) {\r\n ctx.strokeStyle = config.angleLineColor;\r\n ctx.lineWidth = Math.ceil(ctx.chartLineScale * config.angleLineWidth);\r\n for (var h = 0; h < data.datasets[0].data.length; h++) {\r\n ctx.rotate(rotationDegree);\r\n ctx.beginPath();\r\n ctx.moveTo(0, 0);\r\n ctx.lineTo(0, -maxSize);\r\n //\t\t\t\t\tctx.setLineDash(lineStyleFn(config.angleLineStyle));\r\n ctx.setLineDash(lineStyleFn(setOptionValue(1, \"ANGLELINESTYLE\", ctx, data, statData, undefined, config.angleLineStyle, h, -1, { nullValue: true })));\r\n ctx.stroke();\r\n ctx.setLineDash([]);\r\n }\r\n }\r\n for (var i = 0; i < calculatedScale.steps; i++) {\r\n ctx.beginPath();\r\n if (config.scaleShowLine && (i + 1) % config.scaleGridLinesStep == 0) {\r\n ctx.strokeStyle = config.scaleLineColor;\r\n ctx.lineWidth = Math.ceil(ctx.chartLineScale * config.scaleLineWidth);\r\n ctx.moveTo(0, -scaleHop * (i + 1));\r\n for (var j = 0; j < data.datasets[0].data.length; j++) {\r\n ctx.rotate(rotationDegree);\r\n ctx.lineTo(0, -scaleHop * (i + 1));\r\n }\r\n ctx.closePath();\r\n ctx.setLineDash(lineStyleFn(config.scaleLineStyle));\r\n ctx.stroke();\r\n ctx.setLineDash([]);\r\n }\r\n }\r\n ctx.rotate(-(90 - config.startAngle) * Math.PI / 180);\r\n if (config.scaleShowLabels) {\r\n for (i = 0; i < calculatedScale.steps; i++) {\r\n ctx.textAlign = 'center';\r\n ctx.font = config.scaleFontStyle + \" \" + (Math.ceil(ctx.chartTextScale * config.scaleFontSize)).toString() + \"px \" + config.scaleFontFamily;\r\n ctx.textBaseline = \"middle\";\r\n if (config.scaleShowLabelBackdrop) {\r\n var textWidth = ctx.measureTextMultiLine(calculatedScale.labels[i + 1], (Math.ceil(ctx.chartTextScale * config.scaleFontSize))).textWidth;\r\n ctx.fillStyle = config.scaleBackdropColor;\r\n ctx.beginPath();\r\n ctx.rect(\r\n Math.round(Math.cos(config.startAngle * Math.PI / 180) * (scaleHop * (i + 1)) - textWidth / 2 - Math.ceil(ctx.chartSpaceScale * config.scaleBackdropPaddingX)), //X\r\n Math.round((-Math.sin(config.startAngle * Math.PI / 180) * scaleHop * (i + 1)) - (Math.ceil(ctx.chartTextScale * config.scaleFontSize)) * 0.5 - Math.ceil(ctx.chartSpaceScale * config.scaleBackdropPaddingY)), //Y\r\n Math.round(textWidth + (Math.ceil(ctx.chartSpaceScale * config.scaleBackdropPaddingX) * 2)), //Width\r\n Math.round((Math.ceil(ctx.chartTextScale * config.scaleFontSize)) + (Math.ceil(ctx.chartSpaceScale * config.scaleBackdropPaddingY) * 2)) //Height\r\n );\r\n ctx.fill();\r\n }\r\n ctx.fillStyle = config.scaleFontColor;\r\n ctx.fillTextMultiLine(calculatedScale.labels[i + 1], Math.cos(config.startAngle * Math.PI / 180) * (scaleHop * (i + 1)), -Math.sin(config.startAngle * Math.PI / 180) * scaleHop * (i + 1), ctx.textBaseline, (Math.ceil(ctx.chartTextScale * config.scaleFontSize)), true, config.detectMouseOnText, ctx, \"SCALE_TEXTMOUSE\", 0, midPosX, midPosY, i, -1);\r\n }\r\n }\r\n for (var k = 0; k < data.labels.length; k++) {\r\n ctx.font = config.pointLabelFontStyle + \" \" + (Math.ceil(ctx.chartTextScale * config.pointLabelFontSize)).toString() + \"px \" + config.pointLabelFontFamily;\r\n ctx.fillStyle = config.pointLabelFontColor;\r\n var opposite = Math.sin((90 - config.startAngle) * Math.PI / 180 + rotationDegree * k) * (maxSize + (Math.ceil(ctx.chartTextScale * config.pointLabelFontSize)));\r\n var adjacent = Math.cos((90 - config.startAngle) * Math.PI / 180 + rotationDegree * k) * (maxSize + (Math.ceil(ctx.chartTextScale * config.pointLabelFontSize)));\r\n var vangle = (90 - config.startAngle) * Math.PI / 180 + rotationDegree * k;\r\n while (vangle < 0) vangle = vangle + 2 * Math.PI;\r\n while (vangle > 2 * Math.PI) vangle = vangle - 2 * Math.PI;\r\n if (vangle == Math.PI || vangle == 0) {\r\n ctx.textAlign = \"center\";\r\n } else if (vangle > Math.PI) {\r\n ctx.textAlign = \"right\";\r\n } else {\r\n ctx.textAlign = \"left\";\r\n }\r\n ctx.textBaseline = \"middle\";\r\n ctx.fillTextMultiLine(data.labels[k], opposite, -adjacent, ctx.textBaseline, (Math.ceil(ctx.chartTextScale * config.pointLabelFontSize)), true, config.detectMouseOnText, ctx, \"LABEL_TEXTMOUSE\", 0, midPosX, midPosY, k, -1);\r\n }\r\n ctx.restore();\r\n };\r\n\r\n function calculateDrawingSizes() {\r\n var midX, mxlb, maxL, maxR, iter, nbiter, prevMaxSize, prevMidX, i, textMeasurement;\r\n var rotationDegree = (2 * Math.PI) / data.datasets[0].data.length;\r\n var rotateAngle = config.startAngle * Math.PI / 180;\r\n // Compute range for Mid Point of graph\r\n ctx.font = config.pointLabelFontStyle + \" \" + (Math.ceil(ctx.chartTextScale * config.pointLabelFontSize)).toString() + \"px \" + config.pointLabelFontFamily;\r\n if (!config.graphMaximized) {\r\n maxR = msr.availableWidth / 2;\r\n maxL = msr.availableWidth / 2;\r\n nbiter = 1;\r\n } else {\r\n maxR = msr.availableWidth / 2;\r\n maxL = msr.availableWidth / 2;\r\n nbiter = 40;\r\n for (i = 0; i < data.labels.length; i++) {\r\n textMeasurement = ctx.measureTextMultiLine(data.labels[i], (Math.ceil(ctx.chartTextScale * config.scaleFontSize))).textWidth + ctx.measureTextMultiLine(data.labels[i], (Math.ceil(ctx.chartTextScale * config.scaleFontSize))).textHeight;\r\n mxlb = (msr.availableWidth - textMeasurement) / (1 + Math.abs(Math.cos(rotateAngle)));\r\n if ((rotateAngle < Math.PI / 2 && rotateAngle > -Math.PI / 2) || rotateAngle > 3 * Math.PI / 2) {\r\n if (mxlb < maxR) maxR = mxlb;\r\n } else if (Math.cos(rotateAngle) != 0) {\r\n if (mxlb < maxL) maxL = mxlb;\r\n }\r\n rotateAngle -= rotationDegree;\r\n }\r\n }\r\n // compute max Radius and midPoint in that range\r\n prevMaxSize = 0;\r\n prevMidX = 0;\r\n midPosX = maxR + msr.leftNotUsableSize;\r\n for (midX = maxR, iter = 0; iter < nbiter; ++iter, midX += (msr.availableWidth - maxL - maxR) / nbiter) {\r\n maxSize = Max([midX, msr.availableWidth - midX]);\r\n rotateAngle = config.startAngle * Math.PI / 180;\r\n mxlb = msr.available;\r\n for (i = 0; i < data.labels.length; i++) {\r\n textMeasurement = ctx.measureTextMultiLine(data.labels[i], (Math.ceil(ctx.chartTextScale * config.scaleFontSize))).textWidth + ctx.measureTextMultiLine(data.labels[i], (Math.ceil(ctx.chartTextScale * config.scaleFontSize))).textHeight;\r\n if ((rotateAngle < Math.PI / 2 && rotateAngle > -Math.PI / 2) || rotateAngle > 3 * Math.PI / 2) {\r\n mxlb = ((msr.availableWidth - midX) - textMeasurement) / Math.abs(Math.cos(rotateAngle));\r\n } else if (Math.cos(rotateAngle != 0)) {\r\n mxlb = (midX - textMeasurement) / Math.abs(Math.cos(rotateAngle));\r\n }\r\n if (mxlb < maxSize) maxSize = mxlb;\r\n if (Math.sin(rotateAngle) * msr.availableHeight / 2 > msr.availableHeight / 2 - (Math.ceil(ctx.chartTextScale * config.scaleFontSize)) * 2) {\r\n mxlb = Math.sin(rotateAngle) * msr.availableHeight / 2 - 1.5 * (Math.ceil(ctx.chartTextScale * config.scaleFontSize));\r\n if (mxlb < maxSize) maxSize = mxlb;\r\n }\r\n rotateAngle -= rotationDegree;\r\n }\r\n if (maxSize > prevMaxSize) {\r\n prevMaxSize = maxSize;\r\n midPosX = midX + msr.leftNotUsableSize;\r\n }\r\n }\r\n maxSize = prevMaxSize - (Math.ceil(ctx.chartTextScale * config.scaleFontSize)) / 2;\r\n //If the label height is less than 5, set it to 5 so we don't have lines on top of each other.\r\n labelHeight = Default(labelHeight, 5);\r\n };\r\n\r\n function getValueBounds() {\r\n var upperValue = -Number.MAX_VALUE;\r\n var lowerValue = Number.MAX_VALUE;\r\n for (var i = 0; i < data.datasets.length; i++) {\r\n for (var j = 0; j < data.datasets[i].data.length; j++) {\r\n if (typeof data.datasets[i].data[j] == \"undefined\") continue;\r\n if (1 * data.datasets[i].data[j] > upperValue) {\r\n upperValue = 1 * data.datasets[i].data[j]\r\n }\r\n if (1 * data.datasets[i].data[j] < lowerValue) {\r\n lowerValue = 1 * data.datasets[i].data[j]\r\n }\r\n }\r\n }\r\n if (upperValue < lowerValue) { upperValue = 0; lowerValue = 0; }\r\n if (Math.abs(upperValue - lowerValue) < config.zeroValue) {\r\n if (Math.abs(upperValue) < config.zeroValue) { upperValue = .9; lowerValue = -.9; }\r\n if (upperValue > 0) {\r\n upperValue = upperValue * 1.1;\r\n lowerValue = lowerValue * 0.9;\r\n } else {\r\n upperValue = upperValue * 0.9;\r\n lowerValue = lowerValue * 1.1;\r\n }\r\n }\r\n if (typeof config.graphMin == \"function\") lowerValue = setOptionValue(1, \"GRAPHMIN\", ctx, data, statData, undefined, config.graphMin, -1, -1, { nullValue: true })\r\n else if (!isNaN(config.graphMin)) lowerValue = config.graphMin;\r\n if (typeof config.graphMax == \"function\") upperValue = setOptionValue(1, \"GRAPHMAX\", ctx, data, statData, undefined, config.graphMax, -1, -1, { nullValue: true })\r\n else if (!isNaN(config.graphMax)) upperValue = config.graphMax;\r\n var maxSteps = Math.floor((scaleHeight / (labelHeight * 0.66)));\r\n var minSteps = Math.floor((scaleHeight / labelHeight * 0.5));\r\n if (upperValue < lowerValue) { lowerValue = upperValue - 1; }\r\n return {\r\n maxValue: upperValue,\r\n minValue: lowerValue,\r\n maxSteps: maxSteps,\r\n minSteps: minSteps\r\n };\r\n };\r\n\r\n return {\r\n data: data,\r\n config: config,\r\n ctx: ctx\r\n };\r\n };\r\n\r\n\r\n var Pie = function (data, config, ctx) {\r\n var msr, midPieX, midPieY, pieRadius;\r\n ctx.tpchart = \"Pie\";\r\n return (Doughnut(data, config, ctx));\r\n };\r\n\r\n var Doughnut = function (data, config, ctx) {\r\n var msr, midPieX, midPieY, doughnutRadius;\r\n\r\n if (typeof ctx.tpchart == \"undefined\") ctx.tpchart = \"Doughnut\";\r\n ctx.tpdata = 1;\r\n\r\n\r\n if (!init_and_start(ctx, data, config)) return;\r\n var statData = initPassVariableData_part1(data, config, ctx);\r\n\r\n var realCumulativeAngle = (((config.startAngle * (Math.PI / 180) + 2 * Math.PI) % (2 * Math.PI)) + 2 * Math.PI) % (2 * Math.PI);\r\n config.logarithmic = false;\r\n config.logarithmic2 = false;\r\n msr = setMeasures(data, config, ctx, height, width, \"none\", null, true, false, false, false, true, \"Doughnut\");\r\n var drwSize = calculatePieDrawingSize(ctx, msr, config, data, statData);\r\n midPieX = drwSize.midPieX;\r\n midPieY = drwSize.midPieY;\r\n doughnutRadius = drwSize.radius;\r\n\r\n\r\n var cutoutRadius;\r\n if (ctx.tpchart == \"Pie\") cutoutRadius = 0;\r\n else cutoutRadius = doughnutRadius * (config.percentageInnerCutout / 100);\r\n if (doughnutRadius > 0) {\r\n initPassVariableData_part2(statData, data, config, ctx, { midPosX: midPieX, midPosY: midPieY, int_radius: cutoutRadius, ext_radius: doughnutRadius, outerVal: -1 });\r\n animationLoop(config, null, drawPieSegments, ctx, msr.clrx, msr.clry, msr.clrwidth, msr.clrheight, midPieX, midPieY, midPieX - doughnutRadius, midPieY + doughnutRadius, data, statData);\r\n } else {\r\n testRedraw(ctx, data, config);\r\n }\r\n\r\n\r\n function drawPieSegments(animationDecimal) {\r\n var cumulativeAngle = (((-config.startAngle * (Math.PI / 180) + 2 * Math.PI) % (2 * Math.PI)) + 2 * Math.PI) % (2 * Math.PI);\r\n\r\n var dataCutoutRadius, dataDoughnutRadius;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n var scaleAnimation = 1,\r\n rotateAnimation = 1;\r\n if (ctx.tpchart == \"Pie\") dataCutoutRadius = cutoutRadius;\r\n else dataCutoutRadius = cutoutRadius - (doughnutRadius - cutoutRadius) * setOptionValue(1, \"EXPANDINRADIUS\", ctx, data, statData, data[i].expandInRadius, 0, i, -1, { animationDecimal: animationDecimal, scaleAnimation: scaleAnimation });\r\n dataDoughnutRadius = doughnutRadius + (doughnutRadius - cutoutRadius) * setOptionValue(1, \"EXPANDOUTRADIUS\", ctx, data, statData, data[i].expandOutRadius, 0, i, -1, { animationDecimal: animationDecimal, scaleAnimation: scaleAnimation });\r\n if (config.animation) {\r\n if (config.animateScale) {\r\n scaleAnimation = animationDecimal;\r\n }\r\n if (config.animateRotate) {\r\n rotateAnimation = animationDecimal;\r\n }\r\n }\r\n\r\n correctedRotateAnimation = animationCorrection(rotateAnimation, data, config, i, -1, 0).mainVal;\r\n if (!(typeof (data[i].value) == 'undefined') && 1 * data[i].value >= 0) {\r\n ctx.beginPath();\r\n ctx.lineWidth = Math.ceil(ctx.chartLineScale * config.segmentStrokeWidth);\r\n ctx.strokeStyle = \"rgba(0,0,0,0)\";\r\n if (config.animationByData == \"ByArc\") {\r\n endAngle = statData[i].startAngle + correctedRotateAnimation * statData[i].segmentAngle;\r\n ctx.arc(midPieX, midPieY, scaleAnimation * dataDoughnutRadius, statData[i].startAngle, endAngle, false);\r\n ctx.arc(midPieX, midPieY, scaleAnimation * dataCutoutRadius, endAngle, statData[i].startAngle, true);\r\n } else if (config.animationByData) {\r\n if (statData[i].startAngle - statData[i].firstAngle < correctedRotateAnimation * 2 * Math.PI) {\r\n endAngle = statData[i].endAngle;\r\n if ((statData[i].endAngle - statData[i].firstAngle) > correctedRotateAnimation * 2 * Math.PI) endAngle = statData[i].firstAngle + correctedRotateAnimation * 2 * Math.PI;\r\n ctx.arc(midPieX, midPieY, scaleAnimation * dataDoughnutRadius, statData[i].startAngle, endAngle, false);\r\n ctx.arc(midPieX, midPieY, scaleAnimation * dataCutoutRadius, endAngle, statData[i].startAngle, true);\r\n\r\n }\r\n else continue;\r\n } else {\r\n ctx.arc(midPieX, midPieY, scaleAnimation * dataDoughnutRadius, statData[i].firstAngle + correctedRotateAnimation * (statData[i].startAngle - statData[i].firstAngle), statData[i].firstAngle + correctedRotateAnimation * (statData[i].endAngle - statData[i].firstAngle), false);\r\n ctx.arc(midPieX, midPieY, scaleAnimation * dataCutoutRadius, statData[i].firstAngle + correctedRotateAnimation * (statData[i].endAngle - statData[i].firstAngle), statData[i].firstAngle + correctedRotateAnimation * (statData[i].startAngle - statData[i].firstAngle), true);\r\n }\r\n ctx.closePath();\r\n ctx.fillStyle = setOptionValue(1, \"COLOR\", ctx, data, statData, data[i].color, config.defaultFillColor, i, -1, { animationDecimal: animationDecimal, scaleAnimation: scaleAnimation });\r\n ctx.fill();\r\n if (config.segmentShowStroke == \"merge\") { /* avoid blank stripes between piece of chart */\r\n ctx.lineWidth = 1.5;\r\n ctx.strokeStyle = setOptionValue(1, \"COLOR\", ctx, data, statData, data[i].color, config.defaultFillColor, i, -1, { animationDecimal: animationDecimal, scaleAnimation: scaleAnimation });\r\n ctx.setLineDash([]);\r\n ctx.stroke();\r\n }\r\n else if (config.segmentShowStroke) {\r\n ctx.lineWidth = Math.ceil(ctx.chartLineScale * config.segmentStrokeWidth);\r\n ctx.strokeStyle = config.segmentStrokeColor;\r\n ctx.setLineDash(lineStyleFn(setOptionValue(1, \"SEGMENTSTROKESTYLE\", ctx, data, statData, data[i].segmentStrokeStyle, config.segmentStrokeStyle, i, -1, { animationDecimal: animationDecimal, scaleAnimation: scaleAnimation })));\r\n ctx.stroke();\r\n ctx.setLineDash([]);\r\n }\r\n }\r\n }\r\n if (animationDecimal >= config.animationStopValue) {\r\n for (i = 0; i < data.length; i++) {\r\n if (ctx.tpchart == \"Pie\") dataCutOutRadius = cutoutRadius;\r\n else dataCutoutRadius = cutoutRadius - (doughnutRadius - cutoutRadius) * setOptionValue(1, \"EXPANDINRADIUS\", ctx, data, statData, data[i].expandInRadius, 0, i, -1, { animationDecimal: animationDecimal, scaleAnimation: scaleAnimation });\r\n dataDoughnutRadius = doughnutRadius + (doughnutRadius - cutoutRadius) * setOptionValue(1, \"EXPANDOUTRADIUS\", ctx, data, statData, data[i].expandOutRadius, 0, i, -1, { animationDecimal: animationDecimal, scaleAnimation: scaleAnimation });\r\n if (typeof (data[i].value) == 'undefined' || 1 * data[i].value < 0) continue;\r\n jsGraphAnnotate[ctx.ChartNewId][jsGraphAnnotate[ctx.ChartNewId].length] = [\"ARC\", i, -1, statData, setOptionValue(1, \"ANNOTATEDISPLAY\", ctx, data, statData, data[i].annotateDisplay, config.annotateDisplay, i, -1, { nullValue: true })];\r\n if (setOptionValue(1, \"INGRAPHDATASHOW\", ctx, data, statData, data[i].inGraphDataShow, config.inGraphDataShow, i, -1, { nullValue: true }) && statData[i].segmentAngle >= (Math.PI / 180) * setOptionValue(1, \"INGRAPHDATAMINIMUMANGLE\", ctx, data, statData, undefined, config.inGraphDataMinimumAngle, i, -1, { nullValue: true })) {\r\n if (setOptionValue(1, \"INGRAPHDATAANGLEPOSITION\", ctx, data, statData, undefined, config.inGraphDataAnglePosition, i, -1, { nullValue: true }) == 1) posAngle = statData[i].realStartAngle + setOptionValue(1, \"INGRAPHDATAPADDINANGLE\", ctx, data, statData, undefined, config.inGraphDataPaddingAngle, i, -1, { nullValue: true }) * (Math.PI / 180);\r\n else if (setOptionValue(1, \"INGRAPHDATAANGLEPOSITION\", ctx, data, statData, undefined, config.inGraphDataAnglePosition, i, -1, { nullValue: true }) == 2) posAngle = statData[i].realStartAngle - statData[i].segmentAngle / 2 + setOptionValue(1, \"INGRAPHDATAPADDINANGLE\", ctx, data, statData, undefined, config.inGraphDataPaddingAngle, i, -1, { nullValue: true }) * (Math.PI / 180);\r\n else if (setOptionValue(1, \"INGRAPHDATAANGLEPOSITION\", ctx, data, statData, undefined, config.inGraphDataAnglePosition, i, -1, { nullValue: true }) == 3) posAngle = statData[i].realStartAngle - statData[i].segmentAngle + setOptionValue(1, \"INGRAPHDATAPADDINANGLE\", ctx, data, statData, undefined, config.inGraphDataPaddingAngle, i, -1, { nullValue: true }) * (Math.PI / 180);\r\n if (setOptionValue(1, \"INGRAPHDATARADIUSPOSITION\", ctx, data, statData, undefined, config.inGraphDataRadiusPosition, i, -1, { nullValue: true }) == 1) labelRadius = dataCutoutRadius + setOptionValue(1, \"INGRAPHDATAPADDINGRADIUS\", ctx, data, statData, undefined, config.inGraphDataPaddingRadius, i, -1, { nullValue: true });\r\n else if (setOptionValue(1, \"INGRAPHDATARADIUSPOSITION\", ctx, data, statData, undefined, config.inGraphDataRadiusPosition, i, -1, { nullValue: true }) == 2) labelRadius = dataCutoutRadius + (dataDoughnutRadius - dataCutoutRadius) / 2 + setOptionValue(1, \"INGRAPHDATAPADDINGRADIUS\", ctx, data, statData, undefined, config.inGraphDataPaddingRadius, i, -1, { nullValue: true });\r\n else if (setOptionValue(1, \"INGRAPHDATARADIUSPOSITION\", ctx, data, statData, undefined, config.inGraphDataRadiusPosition, i, -1, { nullValue: true }) == 3) labelRadius = dataDoughnutRadius + setOptionValue(1, \"INGRAPHDATAPADDINGRADIUS\", ctx, data, statData, undefined, config.inGraphDataPaddingRadius, i, -1, { nullValue: true });\r\n ctx.save();\r\n if (setOptionValue(1, \"INGRAPHDATAALIGN\", ctx, data, statData, undefined, config.inGraphDataAlign, i, -1, { nullValue: true }) == \"off-center\") {\r\n if (setOptionValue(1, \"INGRAPHDATAROTATE\", ctx, data, statData, undefined, config.inGraphDataRotate, i, -1, { nullValue: true }) == \"inRadiusAxis\" || (posAngle + 2 * Math.PI) % (2 * Math.PI) >= 3 * Math.PI / 2 || (posAngle + 2 * Math.PI) % (2 * Math.PI) <= Math.PI / 2) ctx.textAlign = \"left\";\r\n else ctx.textAlign = \"right\";\r\n } else if (setOptionValue(1, \"INGRAPHDATAALIGN\", ctx, data, statData, undefined, config.inGraphDataAlign, i, -1, { nullValue: true }) == \"to-center\") {\r\n if (setOptionValue(1, \"INGRAPHDATAROTATE\", ctx, data, statData, undefined, config.inGraphDataRotate, i, -1, { nullValue: true }) == \"inRadiusAxis\" || (posAngle + 2 * Math.PI) % (2 * Math.PI) >= 3 * Math.PI / 2 || (posAngle + 2 * Math.PI) % (2 * Math.PI) <= Math.PI / 2) ctx.textAlign = \"right\";\r\n else ctx.textAlign = \"left\";\r\n } else ctx.textAlign = setOptionValue(1, \"INGRAPHDATAALIGN\", ctx, data, statData, undefined, config.inGraphDataAlign, i, -1, { nullValue: true });\r\n if (setOptionValue(1, \"INGRAPHDATAVALIGN\", ctx, data, statData, undefined, config.inGraphDataVAlign, i, -1, { nullValue: true }) == \"off-center\") {\r\n if ((posAngle + 2 * Math.PI) % (2 * Math.PI) > Math.PI) ctx.textBaseline = \"top\";\r\n else ctx.textBaseline = \"bottom\";\r\n } else if (setOptionValue(1, \"INGRAPHDATAVALIGN\", ctx, data, statData, undefined, config.inGraphDataVAlign, i, -1, { nullValue: true }) == \"to-center\") {\r\n if ((posAngle + 2 * Math.PI) % (2 * Math.PI) > Math.PI) ctx.textBaseline = \"bottom\";\r\n else ctx.textBaseline = \"top\";\r\n } else ctx.textBaseline = setOptionValue(1, \"INGRAPHDATAVALIGN\", ctx, data, statData, undefined, config.inGraphDataVAlign, i, -1, { nullValue: true });\r\n ctx.font = setOptionValue(1, \"INGRAPHDATAFONTSTYLE\", ctx, data, statData, undefined, config.inGraphDataFontStyle, i, -1, { nullValue: true }) + ' ' + setOptionValue(ctx.chartTextScale, \"INGRAPHDATAFONTSIZE\", ctx, data, statData, undefined, config.inGraphDataFontSize, i, -1, { nullValue: true }) + 'px ' + setOptionValue(1, \"INGRAPHDATAFONTFAMILY\", ctx, data, statData, undefined, config.inGraphDataFontFamily, i, -1, { nullValue: true });\r\n ctx.fillStyle = setOptionValue(1, \"INGRAPHDATAFONTCOLOR\", ctx, data, statData, undefined, config.inGraphDataFontColor, i, -1, { nullValue: true });\r\n var dispString = tmplbis(setOptionValue(1, \"INGRAPHDATATMPL\", ctx, data, statData, undefined, config.inGraphDataTmpl, i, -1, { nullValue: true }), statData[i], config);\r\n ctx.translate(midPieX + labelRadius * Math.cos(posAngle), midPieY - labelRadius * Math.sin(posAngle));\r\n var rotateVal = 0;\r\n if (setOptionValue(1, \"INGRAPHDATAROTATE\", ctx, data, statData, undefined, config.inGraphDataRotate, i, -1, { nullValue: true }) == \"inRadiusAxis\") rotateVal = 2 * Math.PI - posAngle;\r\n else if (setOptionValue(1, \"INGRAPHDATAROTATE\", ctx, data, statData, undefined, config.inGraphDataRotate, i, -1, { nullValue: true }) == \"inRadiusAxisRotateLabels\") {\r\n if ((posAngle + 2 * Math.PI) % (2 * Math.PI) > Math.PI / 2 && (posAngle + 2 * Math.PI) % (2 * Math.PI) < 3 * Math.PI / 2) rotateVal = 3 * Math.PI - posAngle;\r\n else rotateVal = 2 * Math.PI - posAngle;\r\n } else rotateVal = setOptionValue(1, \"INGRAPHDATAROTATE\", ctx, data, statData, undefined, config.inGraphDataRotate, i, -1, { nullValue: true }) * (Math.PI / 180);\r\n ctx.rotate(rotateVal);\r\n setTextBordersAndBackground(ctx, dispString, setOptionValue(ctx.chartTextScale, \"INGRAPHDATAFONTSIZE\", ctx, data, statData, undefined, config.inGraphDataFontSize, i, -1, { nullValue: true }), 0, 0, setOptionValue(1, \"INGRAPHDATABORDERS\", ctx, data, statData, undefined, config.inGraphDataBorders, i, -1, { nullValue: true }), setOptionValue(1, \"INGRAPHDATABORDERSCOLOR\", ctx, data, statData, undefined, config.inGraphDataBordersColor, i, -1, { nullValue: true }), setOptionValue(ctx.chartLineScale, \"INGRAPHDATABORDERSWIDTH\", ctx, data, statData, undefined, config.inGraphDataBordersWidth, i, -1, { nullValue: true }), setOptionValue(ctx.chartSpaceScale, \"INGRAPHDATABORDERSXSPACE\", ctx, data, statData, undefined, config.inGraphDataBordersXSpace, i, -1, { nullValue: true }), setOptionValue(ctx.chartSpaceScale, \"INGRAPHDATABORDERSYSPACE\", ctx, data, statData, undefined, config.inGraphDataBordersYSpace, i, -1, { nullValue: true }), setOptionValue(1, \"INGRAPHDATABORDERSSTYLE\", ctx, data, statData, undefined, config.inGraphDataBordersStyle, i, -1, { nullValue: true }), setOptionValue(1, \"INGRAPHDATABACKGROUNDCOLOR\", ctx, data, statData, undefined, config.inGraphDataBackgroundColor, i, -1, { nullValue: true }), \"INGRAPHDATA\");\r\n ctx.fillTextMultiLine(dispString, 0, 0, ctx.textBaseline, setOptionValue(ctx.chartTextScale, \"INGRAPHDATAFONTSIZE\", ctx, data, statData, undefined, config.inGraphDataFontSize, i, -1, { nullValue: true }), true, config.detectMouseOnText, ctx, \"INGRAPHDATA_TEXTMOUSE\", rotateVal, midPieX + labelRadius * Math.cos(posAngle), midPieY - labelRadius * Math.sin(posAngle), i, -1);\r\n ctx.restore();\r\n }\r\n }\r\n }\r\n if (msr.legendMsr.dispLegend) drawLegend(msr.legendMsr, data, config, ctx, \"Doughnut\");\r\n };\r\n\r\n return {\r\n data: data,\r\n config: config,\r\n ctx: ctx\r\n };\r\n };\r\n var Line = function (data, config, ctx) {\r\n var maxSize, scaleHop, scaleHop2, calculatedScale, calculatedScale2, labelHeight, scaleHeight, valueBounds, labelTemplateString, labelTemplateString2;\r\n var valueHop, widestXLabel, xAxisLength, yAxisPosX, xAxisPosY, rotateLabels = 0,\r\n msr;\r\n var zeroY = 0;\r\n var zeroY2 = 0;\r\n ctx.tpchart = \"Line\";\r\n ctx.tpdata = 0;\r\n\r\n if (!init_and_start(ctx, data, config)) return;\r\n // adapt data when length is 1;\r\n var mxlgt = 0;\r\n for (var i = 0; i < data.datasets.length; i++) { mxlgt = Max([mxlgt, data.datasets[i].data.length]); }\r\n if (mxlgt == 1) {\r\n if (typeof (data.labels[0]) == \"string\") data.labels = [\"\", data.labels[0], \"\"];\r\n for (i = 0; i < data.datasets.length; i++) {\r\n if (typeof (data.datasets[i].data[0] != \"undefined\")) data.datasets[i].data = [undefined, data.datasets[i].data[0], undefined];\r\n }\r\n mxlgt = 3;\r\n }\r\n var statData = initPassVariableData_part1(data, config, ctx);\r\n for (i = 0; i < data.datasets.length; i++) statData[i][0].tpchart = \"Line\";\r\n msr = setMeasures(data, config, ctx, height, width, \"nihil\", [\"\"], false, false, true, true, config.datasetFill, \"Line\");\r\n valueBounds = getValueBounds();\r\n // true or fuzzy (error for negativ values (included 0))\r\n if (config.logarithmic !== false) {\r\n if (valueBounds.minValue <= 0) {\r\n config.logarithmic = false;\r\n }\r\n }\r\n if (config.logarithmic2 !== false) {\r\n if (valueBounds.minValue2 <= 0) {\r\n config.logarithmic2 = false;\r\n }\r\n }\r\n // Check if logarithmic is meanigful\r\n var OrderOfMagnitude = calculateOrderOfMagnitude(Math.pow(10, calculateOrderOfMagnitude(valueBounds.maxValue) + 1)) - calculateOrderOfMagnitude(Math.pow(10, calculateOrderOfMagnitude(valueBounds.minValue)));\r\n if ((config.logarithmic == 'fuzzy' && OrderOfMagnitude < 4) || config.scaleOverride) {\r\n config.logarithmic = false;\r\n }\r\n // Check if logarithmic is meanigful\r\n var OrderOfMagnitude2 = calculateOrderOfMagnitude(Math.pow(10, calculateOrderOfMagnitude(valueBounds.maxValue2) + 1)) - calculateOrderOfMagnitude(Math.pow(10, calculateOrderOfMagnitude(valueBounds.minValue2)));\r\n if ((config.logarithmic2 == 'fuzzy' && OrderOfMagnitude2 < 4) || config.scaleOverride2) {\r\n config.logarithmic2 = false;\r\n }\r\n //Check and set the scale\r\n labelTemplateString = (config.scaleShowLabels) ? config.scaleLabel : \"\";\r\n labelTemplateString2 = (config.scaleShowLabels2) ? config.scaleLabel2 : \"\";\r\n if (!config.scaleOverride) {\r\n if (valueBounds.maxSteps > 0 && valueBounds.minSteps > 0) {\r\n calculatedScale = calculateScale(1, config, valueBounds.maxSteps, valueBounds.minSteps, valueBounds.maxValue, valueBounds.minValue, labelTemplateString);\r\n }\r\n } else {\r\n var scaleStartValue = setOptionValue(1, \"SCALESTARTVALUE\", ctx, data, statData, undefined, config.scaleStartValue, -1, -1, { nullValue: true });\r\n var scaleSteps = setOptionValue(1, \"SCALESTEPS\", ctx, data, statData, undefined, config.scaleSteps, -1, -1, { nullValue: true });\r\n var scaleStepWidth = setOptionValue(1, \"SCALESTEPWIDTH\", ctx, data, statData, undefined, config.scaleStepWidth, -1, -1, { nullValue: true });\r\n calculatedScale = {\r\n steps: scaleSteps,\r\n stepValue: scaleStepWidth,\r\n graphMin: scaleStartValue,\r\n graphMax: scaleStartValue + scaleSteps * scaleStepWidth,\r\n labels: []\r\n }\r\n populateLabels(1, config, labelTemplateString, calculatedScale.labels, calculatedScale.steps, scaleStartValue, calculatedScale.graphMax, scaleStepWidth);\r\n }\r\n\r\n if (valueBounds.dbAxis) {\r\n if (!config.scaleOverride2) {\r\n if (valueBounds.maxSteps > 0 && valueBounds.minSteps > 0) {\r\n calculatedScale2 = calculateScale(2, config, valueBounds.maxSteps, valueBounds.minSteps, valueBounds.maxValue2, valueBounds.minValue2, labelTemplateString2);\r\n }\r\n } else {\r\n var scaleStartValue2 = setOptionValue(1, \"SCALESTARTVALUE2\", ctx, data, statData, undefined, config.scaleStartValue2, -1, -1, { nullValue: true });\r\n var scaleSteps2 = setOptionValue(1, \"SCALESTEPS2\", ctx, data, statData, undefined, config.scaleSteps2, -1, -1, { nullValue: true });\r\n var scaleStepWidth2 = setOptionValue(1, \"SCALESTEPWIDTH2\", ctx, data, statData, undefined, config.scaleStepWidth2, -1, -1, { nullValue: true });\r\n\r\n calculatedScale2 = {\r\n steps: scaleSteps2,\r\n stepValue: scaleStepWidth2,\r\n graphMin: scaleStartValue2,\r\n graphMax: scaleStartValue2 + scaleSteps2 * scaleStepWidth2,\r\n labels: []\r\n }\r\n populateLabels(2, config, labelTemplateString2, calculatedScale2.labels, calculatedScale2.steps, scaleStartValue2, calculatedScale2.graphMax, scaleStepWidth2);\r\n }\r\n } else {\r\n calculatedScale2 = {\r\n steps: 0,\r\n stepValue: 0,\r\n graphMin: 0,\r\n graphMax: 0,\r\n labels: null\r\n }\r\n }\r\n if (valueBounds.maxSteps > 0 && valueBounds.minSteps > 0) {\r\n msr = setMeasures(data, config, ctx, height, width, calculatedScale.labels, calculatedScale2.labels, false, false, true, true, config.datasetFill, \"Line\");\r\n var prevHeight = msr.availableHeight;\r\n msr.availableHeight = msr.availableHeight - Math.ceil(ctx.chartLineScale * config.scaleTickSizeBottom) - Math.ceil(ctx.chartLineScale * config.scaleTickSizeTop);\r\n msr.availableWidth = msr.availableWidth - Math.ceil(ctx.chartLineScale * config.scaleTickSizeLeft) - Math.ceil(ctx.chartLineScale * config.scaleTickSizeRight);\r\n scaleHop = Math.floor(msr.availableHeight / calculatedScale.steps);\r\n scaleHop2 = Math.floor(msr.availableHeight / calculatedScale2.steps);\r\n valueHop = Math.floor(msr.availableWidth / (data.labels.length - 1));\r\n if (valueHop == 0 || config.fullWidthGraph) valueHop = (msr.availableWidth / (data.labels.length - 1));\r\n msr.clrwidth = msr.clrwidth - (msr.availableWidth - (data.labels.length - 1) * valueHop);\r\n msr.availableWidth = (data.labels.length - 1) * valueHop;\r\n msr.availableHeight = (calculatedScale.steps) * scaleHop;\r\n msr.xLabelPos += (Math.ceil(ctx.chartLineScale * config.scaleTickSizeBottom) + Math.ceil(ctx.chartLineScale * config.scaleTickSizeTop) - (prevHeight - msr.availableHeight));\r\n msr.clrheight += (Math.ceil(ctx.chartLineScale * config.scaleTickSizeBottom) + Math.ceil(ctx.chartLineScale * config.scaleTickSizeTop) - (prevHeight - msr.availableHeight));\r\n yAxisPosX = msr.leftNotUsableSize + Math.ceil(ctx.chartLineScale * config.scaleTickSizeLeft);\r\n xAxisPosY = msr.topNotUsableSize + msr.availableHeight + Math.ceil(ctx.chartLineScale * config.scaleTickSizeTop);\r\n drawLabels();\r\n\r\n zeroY = calculateOffset(config.logarithmic, 0, calculatedScale, scaleHop);\r\n if (typeof calculatedScale2 === \"object\") zeroY2 = calculateOffset(config.logarithmic2, 0, calculatedScale2, scaleHop2);\r\n initPassVariableData_part2(statData, data, config, ctx, {\r\n xAxisPosY: xAxisPosY,\r\n yAxisPosX: yAxisPosX,\r\n valueHop: valueHop,\r\n nbValueHop: data.labels.length - 1,\r\n scaleHop: scaleHop,\r\n zeroY: zeroY,\r\n calculatedScale: calculatedScale,\r\n logarithmic: config.logarithmic,\r\n scaleHop2: scaleHop2,\r\n zeroY2: zeroY2,\r\n msr: msr,\r\n calculatedScale2: calculatedScale2,\r\n logarithmic2: config.logarithmic2\r\n });\r\n animationLoop(config, drawScale, drawLines, ctx, msr.clrx, msr.clry, msr.clrwidth, msr.clrheight, yAxisPosX + msr.availableWidth / 2, xAxisPosY - msr.availableHeight / 2, yAxisPosX, xAxisPosY, data, statData);\r\n } else {\r\n testRedraw(ctx, data, config);\r\n }\r\n\r\n\r\n function drawLines(animPc) {\r\n\r\n drawLinesDataset(animPc, data, config, ctx, statData, { xAxisPosY: xAxisPosY, yAxisPosX: yAxisPosX, valueHop: valueHop, nbValueHop: data.labels.length - 1 });\r\n if (animPc >= 1) {\r\n if (typeof drawMath == \"function\") {\r\n drawMath(ctx, config, data, msr, {\r\n xAxisPosY: xAxisPosY,\r\n yAxisPosX: yAxisPosX,\r\n valueHop: valueHop,\r\n scaleHop: scaleHop,\r\n zeroY: zeroY,\r\n calculatedScale: calculatedScale,\r\n calculateOffset: calculateOffset,\r\n statData: statData\r\n\r\n });\r\n }\r\n }\r\n if (msr.legendMsr.dispLegend) drawLegend(msr.legendMsr, data, config, ctx, \"Line\");\r\n };\r\n\r\n function drawScale() {\r\n //X axis line\r\n // if the xScale should be drawn\r\n if (config.drawXScaleLine !== false) {\r\n for (var s = 0; s < config.drawXScaleLine.length; s++) {\r\n // get special lineWidth and lineColor for this xScaleLine\r\n ctx.lineWidth = config.drawXScaleLine[s].lineWidth ? config.drawXScaleLine[s].lineWidth : Math.ceil(ctx.chartLineScale * config.scaleLineWidth);\r\n ctx.strokeStyle = config.drawXScaleLine[s].lineColor ? config.drawXScaleLine[s].lineColor : config.scaleLineColor;\r\n ctx.beginPath();\r\n var yPosXScale;\r\n switch (config.drawXScaleLine[s].position) {\r\n case \"bottom\":\r\n yPosXScale = xAxisPosY;\r\n break;\r\n case \"top\":\r\n yPosXScale = xAxisPosY - msr.availableHeight - Math.ceil(ctx.chartLineScale * config.scaleTickSizeTop);\r\n break;\r\n case \"0\":\r\n case 0:\r\n // check if zero exists\r\n if (zeroY != 0) yPosXScale = xAxisPosY - zeroY;\r\n break;\r\n }\r\n // draw the scale line\r\n ctx.moveTo(yAxisPosX - Math.ceil(ctx.chartLineScale * config.scaleTickSizeLeft), yPosXScale);\r\n ctx.lineTo(yAxisPosX + msr.availableWidth + Math.ceil(ctx.chartLineScale * config.scaleTickSizeRight), yPosXScale);\r\n ctx.setLineDash(lineStyleFn(config.scaleLineStyle));\r\n ctx.stroke();\r\n ctx.setLineDash([]);\r\n\r\n }\r\n }\r\n for (var i = 0; i < data.labels.length; i++) {\r\n ctx.beginPath();\r\n ctx.moveTo(yAxisPosX + i * valueHop, xAxisPosY + Math.ceil(ctx.chartLineScale * config.scaleTickSizeBottom));\r\n ctx.lineWidth = Math.ceil(ctx.chartLineScale * config.scaleGridLineWidth);\r\n ctx.strokeStyle = config.scaleGridLineColor;\r\n //Check i isnt 0, so we dont go over the Y axis twice.\r\n if (config.scaleShowGridLines && i > 0 && i % config.scaleXGridLinesStep == 0) {\r\n ctx.lineTo(yAxisPosX + i * valueHop, xAxisPosY - msr.availableHeight - Math.ceil(ctx.chartLineScale * config.scaleTickSizeTop));\r\n } else {\r\n ctx.lineTo(yAxisPosX + i * valueHop, xAxisPosY);\r\n }\r\n ctx.setLineDash(lineStyleFn(config.scaleGridLineStyle));\r\n ctx.stroke();\r\n ctx.setLineDash([]);\r\n\r\n }\r\n //Y axis\r\n ctx.lineWidth = Math.ceil(ctx.chartLineScale * config.scaleLineWidth);\r\n ctx.strokeStyle = config.scaleLineColor;\r\n ctx.beginPath();\r\n ctx.moveTo(yAxisPosX, xAxisPosY + Math.ceil(ctx.chartLineScale * config.scaleTickSizeBottom));\r\n ctx.lineTo(yAxisPosX, xAxisPosY - msr.availableHeight - Math.ceil(ctx.chartLineScale * config.scaleTickSizeTop));\r\n ctx.setLineDash(lineStyleFn(config.scaleLineStyle));\r\n ctx.stroke();\r\n ctx.setLineDash([]);\r\n for (var j = 0; j < calculatedScale.steps; j++) {\r\n ctx.beginPath();\r\n ctx.moveTo(yAxisPosX - Math.ceil(ctx.chartLineScale * config.scaleTickSizeLeft), xAxisPosY - ((j + 1) * scaleHop));\r\n ctx.lineWidth = Math.ceil(ctx.chartLineScale * config.scaleGridLineWidth);\r\n ctx.strokeStyle = config.scaleGridLineColor;\r\n if (config.scaleShowGridLines && (j + 1) % config.scaleYGridLinesStep == 0) {\r\n ctx.lineTo(yAxisPosX + msr.availableWidth + Math.ceil(ctx.chartLineScale * config.scaleTickSizeRight), xAxisPosY - ((j + 1) * scaleHop));\r\n } else {\r\n ctx.lineTo(yAxisPosX, xAxisPosY - ((j + 1) * scaleHop));\r\n }\r\n ctx.setLineDash(lineStyleFn(config.scaleGridLineStyle));\r\n ctx.stroke();\r\n ctx.setLineDash([]);\r\n }\r\n };\r\n\r\n function drawLabels() {\r\n ctx.font = config.scaleFontStyle + \" \" + (Math.ceil(ctx.chartTextScale * config.scaleFontSize)).toString() + \"px \" + config.scaleFontFamily;\r\n //X Labels \r\n if (config.xAxisTop || config.xAxisBottom) {\r\n ctx.textBaseline = \"top\";\r\n if (msr.rotateLabels > 90) {\r\n ctx.save();\r\n ctx.textAlign = \"left\";\r\n } else if (msr.rotateLabels > 0) {\r\n ctx.save();\r\n ctx.textAlign = \"right\";\r\n } else {\r\n ctx.textAlign = \"center\";\r\n }\r\n ctx.fillStyle = config.scaleFontColor;\r\n if (config.xAxisBottom) {\r\n for (var i = 0; i < data.labels.length; i++) {\r\n if (showLabels(ctx, data, config, i)) {\r\n ctx.save();\r\n if (msr.rotateLabels > 0) {\r\n ctx.translate(yAxisPosX + i * valueHop - msr.highestXLabel / 2, msr.xLabelPos);\r\n ctx.rotate(-(msr.rotateLabels * (Math.PI / 180)));\r\n ctx.fillTextMultiLine(fmtChartJS(config, data.labels[i], config.fmtXLabel), 0, 0, ctx.textBaseline, (Math.ceil(ctx.chartTextScale * config.scaleFontSize)), true, config.detectMouseOnText, ctx, \"XSCALE_TEXTMOUSE\", -(msr.rotateLabels * (Math.PI / 180)), yAxisPosX + i * valueHop - msr.highestXLabel / 2, msr.xLabelPos, i, -1);\r\n } else {\r\n ctx.fillTextMultiLine(fmtChartJS(config, data.labels[i], config.fmtXLabel), yAxisPosX + i * valueHop, msr.xLabelPos, ctx.textBaseline, (Math.ceil(ctx.chartTextScale * config.scaleFontSize)), true, config.detectMouseOnText, ctx, \"XSCALE_TEXTMOUSE\", 0, 0, 0, i, -1);\r\n }\r\n ctx.restore();\r\n }\r\n }\r\n }\r\n }\r\n //Y Labels\r\n ctx.textAlign = \"right\";\r\n ctx.textBaseline = \"middle\";\r\n for (var j = ((config.showYAxisMin) ? -1 : 0); j < calculatedScale.steps; j++) {\r\n if (config.scaleShowLabels) {\r\n if (showYLabels(ctx, data, config, j + 1, calculatedScale.labels[j + 1])) {\r\n if (config.yAxisLeft) {\r\n ctx.textAlign = \"right\";\r\n ctx.fillTextMultiLine(calculatedScale.labels[j + 1], yAxisPosX - (Math.ceil(ctx.chartLineScale * config.scaleTickSizeLeft) + Math.ceil(ctx.chartSpaceScale * config.yAxisSpaceRight)), xAxisPosY - ((j + 1) * scaleHop), ctx.textBaseline, (Math.ceil(ctx.chartTextScale * config.scaleFontSize)), true, config.detectMouseOnText, ctx, \"YLEFTAXIS_TEXTMOUSE\", 0, 0, 0, -1, j);\r\n }\r\n if (config.yAxisRight && !valueBounds.dbAxis) {\r\n ctx.textAlign = \"left\";\r\n ctx.fillTextMultiLine(calculatedScale.labels[j + 1], yAxisPosX + msr.availableWidth + (Math.ceil(ctx.chartLineScale * config.scaleTickSizeRight) + Math.ceil(ctx.chartSpaceScale * config.yAxisSpaceRight)), xAxisPosY - ((j + 1) * scaleHop), ctx.textBaseline, (Math.ceil(ctx.chartTextScale * config.scaleFontSize)), true, config.detectMouseOnText, ctx, \"YRIGHTAXIS_TEXTMOUSE\", 0, 0, 0, -1, j);\r\n }\r\n }\r\n }\r\n }\r\n if (config.yAxisRight && valueBounds.dbAxis) {\r\n for (j = ((config.showYAxisMin) ? -1 : 0); j < calculatedScale2.steps; j++) {\r\n if (config.scaleShowLabels) {\r\n ctx.textAlign = \"left\";\r\n ctx.fillTextMultiLine(calculatedScale2.labels[j + 1], yAxisPosX + msr.availableWidth + (Math.ceil(ctx.chartLineScale * config.scaleTickSizeRight) + Math.ceil(ctx.chartSpaceScale * config.yAxisSpaceRight)), xAxisPosY - ((j + 1) * scaleHop2), ctx.textBaseline, (Math.ceil(ctx.chartTextScale * config.scaleFontSize)), true, config.detectMouseOnText, ctx, \"YRIGHTAXIS_TEXTMOUSE\", 0, 0, 0, -1, j);\r\n }\r\n }\r\n }\r\n };\r\n\r\n function getValueBounds() {\r\n var upperValue = -Number.MAX_VALUE;\r\n var lowerValue = Number.MAX_VALUE;\r\n var upperValue2 = -Number.MAX_VALUE;\r\n var lowerValue2 = Number.MAX_VALUE;\r\n var secondAxis = false;\r\n var firstAxis = false;\r\n var mathValueHeight;\r\n for (var i = 0; i < data.datasets.length; i++) {\r\n var mathFctName = data.datasets[i].drawMathDeviation;\r\n var mathValueHeight = 0;\r\n if (typeof eval(mathFctName) == \"function\") {\r\n var parameter = {\r\n data: data,\r\n datasetNr: i\r\n };\r\n mathValueHeightVal = window[mathFctName](parameter);\r\n } else mathValueHeightVal = 0;\r\n for (var j = 0; j < data.datasets[i].data.length; j++) {\r\n if (typeof mathValueHeightVal == \"object\") mathValueHeight = mathValueHeightVal[Math.min(mathValueHeightVal.length, j)];\r\n else mathValueHeight = mathValueHeightVal;\r\n\r\n if (typeof data.datasets[i].data[j] == \"undefined\") continue;\r\n if (data.datasets[i].axis == 2) {\r\n secondAxis = true;\r\n if (1 * data.datasets[i].data[j] + mathValueHeight > upperValue2) {\r\n upperValue2 = 1 * data.datasets[i].data[j] + mathValueHeight\r\n };\r\n if (1 * data.datasets[i].data[j] - mathValueHeight < lowerValue2) {\r\n lowerValue2 = 1 * data.datasets[i].data[j] - mathValueHeight\r\n };\r\n } else {\r\n firstAxis = true;\r\n if (1 * data.datasets[i].data[j] + mathValueHeight > upperValue) {\r\n upperValue = 1 * data.datasets[i].data[j] + mathValueHeight\r\n };\r\n if (1 * data.datasets[i].data[j] - mathValueHeight < lowerValue) {\r\n lowerValue = 1 * data.datasets[i].data[j] - mathValueHeight\r\n };\r\n }\r\n }\r\n };\r\n if (upperValue < lowerValue) { upperValue = 0; lowerValue = 0; }\r\n if (Math.abs(upperValue - lowerValue) < config.zeroValue) {\r\n if (Math.abs(upperValue) < config.zeroValue) upperValue = .9;\r\n if (upperValue > 0) {\r\n upperValue = upperValue * 1.1;\r\n lowerValue = lowerValue * 0.9;\r\n } else {\r\n upperValue = upperValue * 0.9;\r\n lowerValue = lowerValue * 1.1;\r\n }\r\n\r\n }\r\n if (typeof config.graphMin == \"function\") lowerValue = setOptionValue(1, \"GRAPHMIN\", ctx, data, statData, undefined, config.graphMin, -1, -1, { nullValue: true })\r\n else if (!isNaN(config.graphMin)) lowerValue = config.graphMin;\r\n if (typeof config.graphMax == \"function\") upperValue = setOptionValue(1, \"GRAPHMAX\", ctx, data, statData, undefined, config.graphMax, -1, -1, { nullValue: true })\r\n else if (!isNaN(config.graphMax)) upperValue = config.graphMax;\r\n if (secondAxis) {\r\n if (upperValue2 < lowerValue2) { upperValue2 = 0; lowerValue2 = 0; }\r\n if (Math.abs(upperValue2 - lowerValue2) < config.zeroValue) {\r\n if (Math.abs(upperValue2) < config.zeroValue) upperValue2 = .9;\r\n if (upperValue2 > 0) {\r\n upperValue2 = upperValue2 * 1.1;\r\n lowerValue2 = lowerValue2 * 0.9;\r\n } else {\r\n upperValue2 = upperValue2 * 0.9;\r\n lowerValue2 = lowerValue2 * 1.1;\r\n }\r\n }\r\n if (typeof config.graphMin2 == \"function\") lowerValue2 = setOptionValue(1, \"GRAPHMIN\", ctx, data, statData, undefined, config.graphMin2, -1, -1, { nullValue: true })\r\n else if (!isNaN(config.graphMin2)) lowerValue2 = config.graphMin2;\r\n if (typeof config.graphMax2 == \"function\") upperValue2 = setOptionValue(1, \"GRAPHMAX\", ctx, data, statData, undefined, config.graphMax2, -1, -1, { nullValue: true })\r\n else if (!isNaN(config.graphMax2)) upperValue2 = config.graphMax2;\r\n }\r\n if (!firstAxis && secondAxis) {\r\n upperValue = upperValue2;\r\n lowerValue = lowerValue2;\r\n }\r\n labelHeight = (Math.ceil(ctx.chartTextScale * config.scaleFontSize));\r\n scaleHeight = msr.availableHeight;\r\n var maxSteps = Math.floor((scaleHeight / (labelHeight * 0.66)));\r\n var minSteps = Math.floor((scaleHeight / labelHeight * 0.5));\r\n if (upperValue < lowerValue) { lowerValue = upperValue - 1; }\r\n if (upperValue2 < lowerValue2) { lowerValue2 = upperValue2 - 1; }\r\n return {\r\n maxValue: upperValue,\r\n minValue: lowerValue,\r\n maxValue2: upperValue2,\r\n minValue2: lowerValue2,\r\n dbAxis: secondAxis,\r\n maxSteps: maxSteps,\r\n minSteps: minSteps\r\n };\r\n };\r\n\r\n return {\r\n data: data,\r\n config: config,\r\n ctx: ctx\r\n };\r\n };\r\n var StackedBar = function (data, config, ctx) {\r\n var maxSize, scaleHop, calculatedScale, labelHeight, scaleHeight, valueBounds, labelTemplateString, valueHop, widestXLabel, xAxisLength, yAxisPosX, xAxisPosY, barWidth, rotateLabels = 0,\r\n msr;\r\n\r\n ctx.tpchart = \"StackedBar\";\r\n ctx.tpdata = 0;\r\n\r\n if (!init_and_start(ctx, data, config)) return;\r\n var statData = initPassVariableData_part1(data, config, ctx);\r\n\r\n var nrOfBars = data.datasets.length;\r\n for (var i = 0; i < data.datasets.length; i++) {\r\n if (data.datasets[i].type == \"Line\") { statData[i][0].tpchart = \"Line\"; nrOfBars--; }\r\n else statData[i][0].tpchart = \"Bar\";\r\n }\r\n config.logarithmic = false;\r\n msr = setMeasures(data, config, ctx, height, width, \"nihil\", [\"\"], true, false, true, true, true, \"StackedBar\");\r\n valueBounds = getValueBounds();\r\n if (valueBounds.maxSteps > 0 && valueBounds.minSteps > 0) {\r\n //Check and set the scale\r\n labelTemplateString = (config.scaleShowLabels) ? config.scaleLabel : \"\";\r\n if (!config.scaleOverride) {\r\n calculatedScale = calculateScale(1, config, valueBounds.maxSteps, valueBounds.minSteps, valueBounds.maxValue, valueBounds.minValue, labelTemplateString);\r\n msr = setMeasures(data, config, ctx, height, width, calculatedScale.labels, null, true, false, true, true, true, \"StackedBar\");\r\n } else {\r\n var scaleStartValue = setOptionValue(1, \"SCALESTARTVALUE\", ctx, data, statData, undefined, config.scaleStartValue, -1, -1, { nullValue: true });\r\n var scaleSteps = setOptionValue(1, \"SCALESTEPS\", ctx, data, statData, undefined, config.scaleSteps, -1, -1, { nullValue: true });\r\n var scaleStepWidth = setOptionValue(1, \"SCALESTEPWIDTH\", ctx, data, statData, undefined, config.scaleStepWidth, -1, -1, { nullValue: true });\r\n\r\n calculatedScale = {\r\n steps: scaleSteps,\r\n stepValue: scaleStepWidth,\r\n graphMin: scaleStartValue,\r\n labels: []\r\n }\r\n\r\n for (var i = 0; i <= calculatedScale.steps; i++) {\r\n if (labelTemplateString) {\r\n calculatedScale.labels.push(tmpl(labelTemplateString, {\r\n value: fmtChartJS(config, 1 * ((scaleStartValue + (scaleStepWidth * i)).toFixed(getDecimalPlaces(scaleStepWidth))), config.fmtYLabel)\r\n }, config));\r\n }\r\n }\r\n msr = setMeasures(data, config, ctx, height, width, calculatedScale.labels, null, true, false, true, true, true, \"StackedBar\");\r\n }\r\n var prevHeight = msr.availableHeight;\r\n\r\n msr.availableHeight = msr.availableHeight - Math.ceil(ctx.chartLineScale * config.scaleTickSizeBottom) - Math.ceil(ctx.chartLineScale * config.scaleTickSizeTop);\r\n msr.availableWidth = msr.availableWidth - Math.ceil(ctx.chartLineScale * config.scaleTickSizeLeft) - Math.ceil(ctx.chartLineScale * config.scaleTickSizeRight);\r\n scaleHop = Math.floor(msr.availableHeight / calculatedScale.steps);\r\n valueHop = Math.floor(msr.availableWidth / (data.labels.length));\r\n if (valueHop == 0 || config.fullWidthGraph) valueHop = (msr.availableWidth / data.labels.length);\r\n msr.clrwidth = msr.clrwidth - (msr.availableWidth - ((data.labels.length) * valueHop));\r\n msr.availableWidth = (data.labels.length) * valueHop;\r\n\r\n msr.availableHeight = (calculatedScale.steps) * scaleHop;\r\n msr.xLabelPos += (Math.ceil(ctx.chartLineScale * config.scaleTickSizeBottom) + Math.ceil(ctx.chartLineScale * config.scaleTickSizeTop) - (prevHeight - msr.availableHeight));\r\n msr.clrheight += (Math.ceil(ctx.chartLineScale * config.scaleTickSizeBottom) + Math.ceil(ctx.chartLineScale * config.scaleTickSizeTop) - (prevHeight - msr.availableHeight));\r\n\r\n yAxisPosX = msr.leftNotUsableSize + Math.ceil(ctx.chartLineScale * config.scaleTickSizeLeft);\r\n xAxisPosY = msr.topNotUsableSize + msr.availableHeight + Math.ceil(ctx.chartLineScale * config.scaleTickSizeTop);\r\n barWidth = (valueHop - Math.ceil(ctx.chartLineScale * config.scaleGridLineWidth) * 2 - (Math.ceil(ctx.chartSpaceScale * config.barValueSpacing) * 2) - (Math.ceil(ctx.chartSpaceScale * config.barDatasetSpacing) * 1 - 1) - (Math.ceil(ctx.chartLineScale * config.barStrokeWidth) / 2) - 1);\r\n if (barWidth >= 0 && barWidth <= 1) barWidth = 1;\r\n if (barWidth < 0 && barWidth >= -1) barWidth = -1;\r\n var additionalSpaceBetweenBars;\r\n if (1 * config.maxBarWidth > 0 && barWidth > 1 * config.maxBarWidth) {\r\n additionalSpaceBetweenBars = (barWidth - 1 * config.maxBarWidth) / 2;\r\n barWidth = 1 * config.maxBarWidth;\r\n } else additionalSpaceBetweenBars = 0;\r\n\r\n var zeroY = 0;\r\n var zeroY2 = 0;\r\n\r\n zeroY = calculateOffset(false, 0, calculatedScale, scaleHop);\r\n if (typeof calculatedScale2 === \"object\") zeroY2 = calculateOffset(config.logarithmic2, 0, calculatedScale2, scaleHop2);\r\n drawLabels();\r\n initPassVariableData_part2(statData, data, config, ctx, {\r\n msr: msr,\r\n zeroY: zeroY,\r\n zeroY2: zeroY2,\r\n logarithmic: false,\r\n logarithmic2: false,\r\n calculatedScale: calculatedScale,\r\n additionalSpaceBetweenBars: additionalSpaceBetweenBars,\r\n scaleHop: scaleHop,\r\n valueHop: valueHop,\r\n yAxisPosX: yAxisPosX,\r\n xAxisPosY: xAxisPosY,\r\n barWidth: barWidth\r\n });\r\n animationLoop(config, drawScale, drawBars, ctx, msr.clrx, msr.clry, msr.clrwidth, msr.clrheight, yAxisPosX + msr.availableWidth / 2, xAxisPosY - msr.availableHeight / 2, yAxisPosX, xAxisPosY, data, statData);\r\n } else {\r\n testRedraw(ctx, data, config);\r\n }\r\n function drawBars(animPc) {\r\n ctx.lineWidth = Math.ceil(ctx.chartLineScale * config.barStrokeWidth);\r\n for (var i = 0; i < data.datasets.length; i++) {\r\n if (data.datasets[i].type == \"Line\") continue;\r\n for (var j = 0; j < data.datasets[i].data.length; j++) {\r\n var currentAnimPc = animationCorrection(animPc, data, config, i, j, 1).animVal;\r\n if (currentAnimPc > 1) currentAnimPc = currentAnimPc - 1;\r\n if ((typeof data.datasets[i].data[j] == 'undefined') || 1 * data.datasets[i].data[j] == 0) continue;\r\n var botBar, topBar;\r\n if (config.animationByDataset) {\r\n botBar = statData[i][j].yPosBottom;\r\n topBar = statData[i][j].yPosTop;\r\n topBar = botBar + currentAnimPc * (topBar - botBar);\r\n } else {\r\n botBar = statData[statData[i][j].firstNotMissing][j].yPosBottom - currentAnimPc * (statData[statData[i][j].firstNotMissing][j].yPosBottom - statData[i][j].yPosBottom);\r\n topBar = statData[statData[i][j].firstNotMissing][j].yPosBottom - currentAnimPc * (statData[statData[i][j].firstNotMissing][j].yPosBottom - statData[i][j].yPosTop);\r\n }\r\n ctx.fillStyle = setOptionValue(1, \"COLOR\", ctx, data, statData, data.datasets[i].fillColor, config.defaultFillColor, i, j, { animationValue: currentAnimPc, xPosLeft: statData[i][j].xPosLeft, yPosBottom: botBar, xPosRight: statData[i][j].xPosRight, yPosTop: topBar });\r\n ctx.strokeStyle = setOptionValue(1, \"STROKECOLOR\", ctx, data, statData, data.datasets[i].strokeColor, config.defaultStrokeColor, i, j, { nullvalue: null });\r\n\r\n if (currentAnimPc != 0 && botBar != topBar) {\r\n ctx.beginPath();\r\n ctx.moveTo(statData[i][j].xPosLeft, botBar);\r\n ctx.lineTo(statData[i][j].xPosLeft, topBar);\r\n ctx.lineTo(statData[i][j].xPosRight, topBar);\r\n ctx.lineTo(statData[i][j].xPosRight, botBar);\r\n if (config.barShowStroke) {\r\n ctx.setLineDash(lineStyleFn(setOptionValue(1, \"STROKESTYLE\", ctx, data, statData, data.datasets[i].datasetStrokeStyle, config.datasetStrokeStyle, i, j, { nullvalue: null })));\r\n ctx.stroke();\r\n ctx.setLineDash([]);\r\n };\r\n ctx.closePath();\r\n ctx.fill();\r\n }\r\n }\r\n }\r\n drawLinesDataset(animPc, data, config, ctx, statData, { xAxisPosY: xAxisPosY, yAxisPosX: yAxisPosX, valueHop: valueHop, nbValueHop: data.labels.length });\r\n\r\n if (animPc >= config.animationStopValue) {\r\n var yPos = 0,\r\n xPos = 0;\r\n for (i = 0; i < data.datasets.length; i++) {\r\n for (j = 0; j < data.datasets[i].data.length; j++) {\r\n if (typeof (data.datasets[i].data[j]) == 'undefined') continue;\r\n //\t\t\t\t\t\tif(setOptionValue(1,\"ANNOTATEDISPLAY\",ctx,data,statData,undefined,config.annotateDisplay,i,j,{nullValue : true})) {\r\n jsGraphAnnotate[ctx.ChartNewId][jsGraphAnnotate[ctx.ChartNewId].length] = [\"RECT\", i, j, statData, setOptionValue(1, \"ANNOTATEDISPLAY\", ctx, data, statData, data.datasets[i].annotateDisplay, config.annotateDisplay, i, j, { nullValue: true })];\r\n //\t\t\t\t\t\t}\r\n if (setOptionValue(1, \"INGRAPHDATASHOW\", ctx, data, statData, data.datasets[i].inGraphDataShow, config.inGraphDataShow, i, j, { nullValue: true })) {\r\n ctx.save();\r\n ctx.textAlign = setOptionValue(1, \"INGRAPHDATAALIGN\", ctx, data, statData, undefined, config.inGraphDataAlign, i, j, { nullValue: true });\r\n ctx.textBaseline = setOptionValue(1, \"INGRAPHDATAVALIGN\", ctx, data, statData, undefined, config.inGraphDataVAlign, i, j, { nullValue: true });\r\n ctx.font = setOptionValue(1, \"INGRAPHDATAFONTSTYLE\", ctx, data, statData, undefined, config.inGraphDataFontStyle, i, j, { nullValue: true }) + ' ' + setOptionValue(ctx.chartTextScale, \"INGRAPHDATAFONTSIZE\", ctx, data, statData, undefined, config.inGraphDataFontSize, i, j, { nullValue: true }) + 'px ' + setOptionValue(1, \"INGRAPHDATAFONTFAMILY\", ctx, data, statData, undefined, config.inGraphDataFontFamily, i, j, { nullValue: true });\r\n ctx.fillStyle = setOptionValue(1, \"INGRAPHDATAFONTCOLOR\", ctx, data, statData, undefined, config.inGraphDataFontColor, i, j, { nullValue: true });\r\n var dispString = tmplbis(setOptionValue(1, \"INGRAPHDATATMPL\", ctx, data, statData, undefined, config.inGraphDataTmpl, i, j, { nullValue: true }), statData[i][j], config);\r\n ctx.beginPath();\r\n ctx.beginPath();\r\n yPos = 0;\r\n xPos = 0;\r\n if (setOptionValue(1, \"INGRAPHDATAXPOSITION\", ctx, data, statData, undefined, config.inGraphDataXPosition, i, j, { nullValue: true }) == 1) {\r\n xPos = statData[i][j].xPosLeft + setOptionValue(ctx.chartSpaceScale, \"INGRAPHDATAPADDINGX\", ctx, data, statData, undefined, config.inGraphDataPaddingX, i, j, { nullValue: true });\r\n } else if (setOptionValue(1, \"INGRAPHDATAXPOSITION\", ctx, data, statData, undefined, config.inGraphDataXPosition, i, j, { nullValue: true }) == 2) {\r\n xPos = statData[i][j].xPosLeft + barWidth / 2 + setOptionValue(ctx.chartSpaceScale, \"INGRAPHDATAPADDINGX\", ctx, data, statData, undefined, config.inGraphDataPaddingX, i, j, { nullValue: true });\r\n } else if (setOptionValue(1, \"INGRAPHDATAXPOSITION\", ctx, data, statData, undefined, config.inGraphDataXPosition, i, j, { nullValue: true }) == 3) {\r\n xPos = statData[i][j].xPosLeft + barWidth + setOptionValue(ctx.chartSpaceScale, \"INGRAPHDATAPADDINGX\", ctx, data, statData, undefined, config.inGraphDataPaddingX, i, j, { nullValue: true });\r\n }\r\n if (setOptionValue(1, \"INGRAPHDATAYPOSITION\", ctx, data, statData, undefined, config.inGraphDataYPosition, i, j, { nullValue: true }) == 1) {\r\n yPos = statData[i][j].yPosBottom - setOptionValue(ctx.chartSpaceScale, \"INGRAPHDATAPADDINGY\", ctx, data, statData, undefined, config.inGraphDataPaddingY, i, j, { nullValue: true });\r\n } else if (setOptionValue(1, \"INGRAPHDATAYPOSITION\", ctx, data, statData, undefined, config.inGraphDataYPosition, i, j, { nullValue: true }) == 2) {\r\n yPos = (statData[i][j].yPosTop + statData[i][j].yPosBottom) / 2 - setOptionValue(ctx.chartSpaceScale, \"INGRAPHDATAPADDINGY\", ctx, data, statData, undefined, config.inGraphDataPaddingY, i, j, { nullValue: true });\r\n } else if (setOptionValue(1, \"INGRAPHDATAYPOSITION\", ctx, data, statData, undefined, config.inGraphDataYPosition, i, j, { nullValue: true }) == 3) {\r\n yPos = statData[i][j].yPosTop - setOptionValue(ctx.chartSpaceScale, \"INGRAPHDATAPADDINGY\", ctx, data, statData, undefined, config.inGraphDataPaddingY, i, j, { nullValue: true });\r\n }\r\n if (yPos > msr.topNotUsableSize) {\r\n ctx.translate(xPos, yPos);\r\n var rotateVal = setOptionValue(1, \"INGRAPHDATAROTATE\", ctx, data, statData, undefined, config.inGraphDataRotate, i, j, { nullValue: true }) * (Math.PI / 180);\r\n ctx.rotate(rotateVal);\r\n setTextBordersAndBackground(ctx, dispString, setOptionValue(ctx.chartTextScale, \"INGRAPHDATAFONTSIZE\", ctx, data, statData, undefined, config.inGraphDataFontSize, i, j, { nullValue: true }), 0, 0, setOptionValue(1, \"INGRAPHDATABORDERS\", ctx, data, statData, undefined, config.inGraphDataBorders, i, j, { nullValue: true }), setOptionValue(1, \"INGRAPHDATABORDERSCOLOR\", ctx, data, statData, undefined, config.inGraphDataBordersColor, i, j, { nullValue: true }), setOptionValue(ctx.chartLineScale, \"INGRAPHDATABORDERSWIDTH\", ctx, data, statData, undefined, config.inGraphDataBordersWidth, i, j, { nullValue: true }), setOptionValue(ctx.chartSpaceScale, \"INGRAPHDATABORDERSXSPACE\", ctx, data, statData, undefined, config.inGraphDataBordersXSpace, i, j, { nullValue: true }), setOptionValue(ctx.chartSpaceScale, \"INGRAPHDATABORDERSYSPACE\", ctx, data, statData, undefined, config.inGraphDataBordersYSpace, i, j, { nullValue: true }), setOptionValue(1, \"INGRAPHDATABORDERSSTYLE\", ctx, data, statData, undefined, config.inGraphDataBordersStyle, i, j, { nullValue: true }), setOptionValue(1, \"INGRAPHDATABACKGROUNDCOLOR\", ctx, data, statData, undefined, config.inGraphDataBackgroundColor, i, j, { nullValue: true }), \"INGRAPHDATA\");\r\n ctx.fillTextMultiLine(dispString, 0, 0, ctx.textBaseline, setOptionValue(ctx.chartTextScale, \"INGRAPHDATAFONTSIZE\", ctx, data, statData, undefined, config.inGraphDataFontSize, i, j, { nullValue: true }), true, config.detectMouseOnText, ctx, \"INGRAPHDATA_TEXTMOUSE\", rotateVal, xPos, yPos, i, j);\r\n }\r\n ctx.restore();\r\n }\r\n }\r\n }\r\n }\r\n if (msr.legendMsr.dispLegend) drawLegend(msr.legendMsr, data, config, ctx, \"StackedBar\");\r\n };\r\n\r\n function drawScale() {\r\n //X axis line \r\n ctx.lineWidth = Math.ceil(ctx.chartLineScale * config.scaleLineWidth);\r\n ctx.strokeStyle = config.scaleLineColor;\r\n ctx.setLineDash(lineStyleFn(config.scaleLineStyle));\r\n ctx.beginPath();\r\n ctx.moveTo(yAxisPosX - Math.ceil(ctx.chartLineScale * config.scaleTickSizeLeft), xAxisPosY);\r\n ctx.lineTo(yAxisPosX + msr.availableWidth + Math.ceil(ctx.chartLineScale * config.scaleTickSizeRight), xAxisPosY);\r\n ctx.stroke();\r\n ctx.setLineDash([]);\r\n ctx.setLineDash(lineStyleFn(config.scaleGridLineStyle));\r\n for (var i = 0; i < data.labels.length; i++) {\r\n ctx.beginPath();\r\n ctx.moveTo(yAxisPosX + i * valueHop, xAxisPosY + Math.ceil(ctx.chartLineScale * config.scaleTickSizeBottom));\r\n ctx.lineWidth = Math.ceil(ctx.chartLineScale * config.scaleGridLineWidth);\r\n ctx.strokeStyle = config.scaleGridLineColor;\r\n //Check i isnt 0, so we dont go over the Y axis twice.\r\n if (config.scaleShowGridLines && i > 0 && i % config.scaleXGridLinesStep == 0) {\r\n ctx.lineTo(yAxisPosX + i * valueHop, xAxisPosY - msr.availableHeight - Math.ceil(ctx.chartLineScale * config.scaleTickSizeTop));\r\n } else {\r\n ctx.lineTo(yAxisPosX + i * valueHop, xAxisPosY);\r\n }\r\n ctx.stroke();\r\n }\r\n ctx.setLineDash([]);\r\n\r\n //Y axis\r\n ctx.lineWidth = Math.ceil(ctx.chartLineScale * config.scaleLineWidth);\r\n ctx.strokeStyle = config.scaleLineColor;\r\n ctx.setLineDash(lineStyleFn(config.scaleLineStyle));\r\n ctx.beginPath();\r\n ctx.moveTo(yAxisPosX, xAxisPosY + Math.ceil(ctx.chartLineScale * config.scaleTickSizeBottom));\r\n ctx.lineTo(yAxisPosX, xAxisPosY - msr.availableHeight - Math.ceil(ctx.chartLineScale * config.scaleTickSizeTop));\r\n ctx.stroke();\r\n ctx.setLineDash([]);\r\n\r\n ctx.setLineDash(lineStyleFn(config.scaleGridLineStyle));\r\n for (var j = ((config.showYAxisMin) ? -1 : 0); j < calculatedScale.steps; j++) {\r\n ctx.beginPath();\r\n ctx.moveTo(yAxisPosX - Math.ceil(ctx.chartLineScale * config.scaleTickSizeLeft), xAxisPosY - ((j + 1) * scaleHop));\r\n ctx.lineWidth = Math.ceil(ctx.chartLineScale * config.scaleGridLineWidth);\r\n ctx.strokeStyle = config.scaleGridLineColor;\r\n if (config.scaleShowGridLines && (j + 1) % config.scaleYGridLinesStep == 0) {\r\n ctx.lineTo(yAxisPosX + msr.availableWidth + Math.ceil(ctx.chartLineScale * config.scaleTickSizeRight), xAxisPosY - ((j + 1) * scaleHop));\r\n } else {\r\n ctx.lineTo(yAxisPosX, xAxisPosY - ((j + 1) * scaleHop));\r\n }\r\n ctx.stroke();\r\n }\r\n ctx.setLineDash([]);\r\n };\r\n\r\n function drawLabels() {\r\n ctx.font = config.scaleFontStyle + \" \" + (Math.ceil(ctx.chartTextScale * config.scaleFontSize)).toString() + \"px \" + config.scaleFontFamily;\r\n //X axis labels \r\n if (config.xAxisTop || config.xAxisBottom) {\r\n ctx.textBaseline = \"top\";\r\n if (msr.rotateLabels > 90) {\r\n ctx.save();\r\n ctx.textAlign = \"left\";\r\n } else if (msr.rotateLabels > 0) {\r\n ctx.save();\r\n ctx.textAlign = \"right\";\r\n } else {\r\n ctx.textAlign = \"center\";\r\n }\r\n ctx.fillStyle = config.scaleFontColor;\r\n if (config.xAxisBottom) {\r\n for (var i = 0; i < data.labels.length; i++) {\r\n if (showLabels(ctx, data, config, i)) {\r\n ctx.save();\r\n if (msr.rotateLabels > 0) {\r\n ctx.translate(yAxisPosX + Math.ceil(ctx.chartSpaceScale * config.barValueSpacing) + i * valueHop + additionalSpaceBetweenBars + (barWidth / 2) - msr.highestXLabel / 2, msr.xLabelPos);\r\n ctx.rotate(-(msr.rotateLabels * (Math.PI / 180)));\r\n ctx.fillTextMultiLine(fmtChartJS(config, data.labels[i], config.fmtXLabel), 0, 0, ctx.textBaseline, (Math.ceil(ctx.chartTextScale * config.scaleFontSize)), true, config.detectMouseOnText, ctx, \"XAXIS_TEXTMOUSE\", -(msr.rotateLabels * (Math.PI / 180)), yAxisPosX + Math.ceil(ctx.chartSpaceScale * config.barValueSpacing) + i * valueHop + additionalSpaceBetweenBars + (barWidth / 2) - msr.highestXLabel / 2, msr.xLabelPos, i, -1);\r\n } else {\r\n ctx.fillTextMultiLine(fmtChartJS(config, data.labels[i], config.fmtXLabel), yAxisPosX + Math.ceil(ctx.chartSpaceScale * config.barValueSpacing) + i * valueHop + additionalSpaceBetweenBars + (barWidth / 2), msr.xLabelPos, ctx.textBaseline, (Math.ceil(ctx.chartTextScale * config.scaleFontSize)), true, config.detectMouseOnText, ctx, \"XAXIS_TEXTMOUSE\", 0, 0, 0, i, -1);\r\n }\r\n ctx.restore();\r\n }\r\n }\r\n }\r\n }\r\n //Y axis\r\n ctx.textAlign = \"right\";\r\n ctx.textBaseline = \"middle\";\r\n for (var j = ((config.showYAxisMin) ? -1 : 0); j < calculatedScale.steps; j++) {\r\n if (config.scaleShowLabels) {\r\n if (showYLabels(ctx, data, config, j + 1, calculatedScale.labels[j + 1])) {\r\n if (config.yAxisLeft) {\r\n ctx.textAlign = \"right\";\r\n ctx.fillTextMultiLine(calculatedScale.labels[j + 1], yAxisPosX - (Math.ceil(ctx.chartLineScale * config.scaleTickSizeLeft) + Math.ceil(ctx.chartSpaceScale * config.yAxisSpaceRight)), xAxisPosY - ((j + 1) * scaleHop), ctx.textBaseline, (Math.ceil(ctx.chartTextScale * config.scaleFontSize)), true, config.detectMouseOnText, ctx, \"YLEFTAXIS_TEXTMOUSE\", 0, 0, 0, -1, j);\r\n }\r\n if (config.yAxisRight) {\r\n ctx.textAlign = \"left\";\r\n ctx.fillTextMultiLine(calculatedScale.labels[j + 1], yAxisPosX + msr.availableWidth + (Math.ceil(ctx.chartLineScale * config.scaleTickSizeRight) + Math.ceil(ctx.chartSpaceScale * config.yAxisSpaceRight)), xAxisPosY - ((j + 1) * scaleHop), ctx.textBaseline, (Math.ceil(ctx.chartTextScale * config.scaleFontSize)), true, config.detectMouseOnText, ctx, \"YRIGHTAXIS_TEXTMOUSE\", 0, 0, 0, -1, j);\r\n }\r\n }\r\n }\r\n }\r\n };\r\n\r\n function getValueBounds() {\r\n var maxValp = -Number.MAX_VALUE;\r\n var minValp = Number.MAX_VALUE;\r\n var maxValn = -Number.MAX_VALUE;\r\n var minValn = Number.MAX_VALUE;\r\n\r\n var tempp = [];\r\n var tempn = [];\r\n var inp = 0;\r\n var inn = 0;\r\n\r\n for (var i = 0; i < data.datasets.length; i++) {\r\n for (var j = 0; j < data.datasets[i].data.length; j++) {\r\n if (1 * data.datasets[i].data[j] > 0) {\r\n if (statData[i][0].tpchart == \"Bar\") {\r\n if (typeof tempp[j] == \"undefined\") tempp[j] = 0;\r\n tempp[j] += 1 * data.datasets[i].data[j];\r\n maxValp = Math.max(maxValp, tempp[j]);\r\n } else maxValp = Math.max(maxValp, 1 * data.datasets[i].data[j]);\r\n minValp = Math.min(minValp, 1 * data.datasets[i].data[j]);\r\n inp = 1;\r\n } else if (typeof (1 * data.datasets[i].data[j]) === \"number\" && typeof data.datasets[i].data[j] != \"undefined\") {\r\n if (statData[i][0].tpchart == \"Bar\") {\r\n if (typeof tempn[j] == \"undefined\") tempn[j] = 0;\r\n tempn[j] += (1 * data.datasets[i].data[j]);\r\n minValn = Math.min(minValn, tempn[j]);\r\n } else minValn = Math.min(minValn, 1 * data.datasets[i].data[j]);\r\n maxValn = Math.max(maxValn, 1 * data.datasets[i].data[j]);\r\n inn = 1;\r\n }\r\n }\r\n };\r\n var upperValue, lowerValue;\r\n if (inp == 0) { upperValue = maxValn; lowerValue = minValn; }\r\n else if (inn == 0) { upperValue = maxValp; lowerValue = minValp; }\r\n else { upperValue = maxValp; lowerValue = minValn; }\r\n\r\n if (typeof config.graphMin == \"function\") lowerValue = setOptionValue(1, \"GRAPHMIN\", ctx, data, statData, undefined, config.graphMin, -1, -1, { nullValue: true })\r\n else if (!isNaN(config.graphMin)) lowerValue = config.graphMin;\r\n if (typeof config.graphMax == \"function\") upperValue = setOptionValue(1, \"GRAPHMAX\", ctx, data, statData, undefined, config.graphMax, -1, -1, { nullValue: true })\r\n else if (!isNaN(config.graphMax)) upperValue = config.graphMax;\r\n\r\n if (upperValue < lowerValue) { upperValue = 0; lowerValue = 0; }\r\n if (Math.abs(upperValue - lowerValue) < config.zeroValue) {\r\n if (Math.abs(upperValue) < config.zeroValue) upperValue = .9;\r\n if (upperValue > 0) {\r\n upperValue = upperValue * 1.1;\r\n lowerValue = lowerValue * 0.9;\r\n } else {\r\n upperValue = upperValue * 0.9;\r\n lowerValue = lowerValue * 1.1;\r\n }\r\n }\r\n\r\n labelHeight = (Math.ceil(ctx.chartTextScale * config.scaleFontSize));\r\n scaleHeight = msr.availableHeight;\r\n var maxSteps = Math.floor((scaleHeight / (labelHeight * 0.66)));\r\n var minSteps = Math.floor((scaleHeight / labelHeight * 0.5));\r\n if (upperValue < lowerValue) { lowerValue = upperValue - 1; }\r\n\r\n return {\r\n maxValue: upperValue,\r\n minValue: lowerValue,\r\n maxSteps: maxSteps,\r\n minSteps: minSteps\r\n };\r\n };\r\n\r\n return {\r\n data: data,\r\n config: config,\r\n ctx: ctx\r\n };\r\n };\r\n /**\r\n\t * Reverse the data structure for horizontal charts\r\n\t * - reverse labels and every array inside datasets\r\n\t * @param {object} data datasets and labels for the chart\r\n\t * @return return the reversed data\r\n\t */\r\n function reverseData(data) {\r\n data.labels = data.labels.reverse();\r\n for (var i = 0; i < data.datasets.length; i++) {\r\n for (var key in data.datasets[i]) {\r\n if (Array.isArray(data.datasets[i][key])) {\r\n data.datasets[i][key] = data.datasets[i][key].reverse();\r\n }\r\n }\r\n }\r\n return data;\r\n };\r\n var HorizontalStackedBar = function (data, config, ctx) {\r\n var maxSize, scaleHop, calculatedScale, labelHeight, scaleHeight, valueBounds, labelTemplateString, valueHop, widestXLabel, xAxisLength, yAxisPosX, xAxisPosY, barWidth, rotateLabels = 0,\r\n msr;\r\n\r\n if (config.reverseOrder && typeof ctx.reversed == \"undefined\") {\r\n ctx.reversed = true;\r\n data = reverseData(data);\r\n }\r\n\r\n ctx.tpchart = \"HorizontalStackedBar\";\r\n ctx.tpdata = 0;\r\n\r\n if (!init_and_start(ctx, data, config)) return;\r\n var statData = initPassVariableData_part1(data, config, ctx);\r\n\r\n config.logarithmic = false;\r\n msr = setMeasures(data, config, ctx, height, width, \"nihil\", [\"\"], true, true, true, true, true, \"HorizontalStackedBar\");\r\n valueBounds = getValueBounds();\r\n\r\n if (valueBounds.maxSteps > 0 && valueBounds.minSteps > 0) {\r\n //Check and set the scale\r\n labelTemplateString = (config.scaleShowLabels) ? config.scaleLabel : \"\";\r\n if (!config.scaleOverride) {\r\n calculatedScale = calculateScale(1, config, valueBounds.maxSteps, valueBounds.minSteps, valueBounds.maxValue, valueBounds.minValue, labelTemplateString);\r\n msr = setMeasures(data, config, ctx, height, width, calculatedScale.labels, null, true, true, true, true, true, \"HorizontalStackedBar\");\r\n } else {\r\n var scaleStartValue = setOptionValue(1, \"SCALESTARTVALUE\", ctx, data, statData, undefined, config.scaleStartValue, -1, -1, { nullValue: true });\r\n var scaleSteps = setOptionValue(1, \"SCALESTEPS\", ctx, data, statData, undefined, config.scaleSteps, -1, -1, { nullValue: true });\r\n var scaleStepWidth = setOptionValue(1, \"SCALESTEPWIDTH\", ctx, data, statData, undefined, config.scaleStepWidth, -1, -1, { nullValue: true });\r\n\r\n calculatedScale = {\r\n steps: scaleSteps,\r\n stepValue: scaleStepWidth,\r\n graphMin: scaleStartValue,\r\n labels: []\r\n }\r\n for (var i = 0; i <= calculatedScale.steps; i++) {\r\n if (labelTemplateString) {\r\n calculatedScale.labels.push(tmpl(labelTemplateString, {\r\n value: fmtChartJS(config, 1 * ((scaleStartValue + (scaleStepWidth * i)).toFixed(getDecimalPlaces(scaleStepWidth))), config.fmtYLabel)\r\n }, config));\r\n }\r\n }\r\n msr = setMeasures(data, config, ctx, height, width, calculatedScale.labels, null, true, true, true, true, true, \"HorizontalStackedBar\");\r\n }\r\n msr.availableHeight = msr.availableHeight - Math.ceil(ctx.chartLineScale * config.scaleTickSizeBottom) - Math.ceil(ctx.chartLineScale * config.scaleTickSizeTop);\r\n msr.availableWidth = msr.availableWidth - Math.ceil(ctx.chartLineScale * config.scaleTickSizeLeft) - Math.ceil(ctx.chartLineScale * config.scaleTickSizeRight);\r\n scaleHop = Math.floor(msr.availableHeight / data.labels.length);\r\n valueHop = Math.floor(msr.availableWidth / (calculatedScale.steps));\r\n if (valueHop == 0 || config.fullWidthGraph) valueHop = (msr.availableWidth / (calculatedScale.steps));\r\n msr.clrwidth = msr.clrwidth - (msr.availableWidth - (calculatedScale.steps * valueHop));\r\n msr.availableWidth = (calculatedScale.steps) * valueHop;\r\n msr.availableHeight = (data.labels.length) * scaleHop;\r\n yAxisPosX = msr.leftNotUsableSize + Math.ceil(ctx.chartLineScale * config.scaleTickSizeLeft);\r\n xAxisPosY = msr.topNotUsableSize + msr.availableHeight + Math.ceil(ctx.chartLineScale * config.scaleTickSizeTop);\r\n barWidth = (scaleHop - Math.ceil(ctx.chartLineScale * config.scaleGridLineWidth) * 2 - (Math.ceil(ctx.chartSpaceScale * config.barValueSpacing) * 2) - (Math.ceil(ctx.chartSpaceScale * config.barDatasetSpacing) * 1 - 1) - (Math.ceil(ctx.chartLineScale * config.barStrokeWidth) / 2) - 1);\r\n if (barWidth >= 0 && barWidth <= 1) barWidth = 1;\r\n if (barWidth < 0 && barWidth >= -1) barWidth = -1;\r\n var additionalSpaceBetweenBars;\r\n if (1 * config.maxBarWidth > 0 && barWidth > 1 * config.maxBarWidth) {\r\n additionalSpaceBetweenBars = (barWidth - 1 * config.maxBarWidth) / 2;\r\n barWidth = 1 * config.maxBarWidth;\r\n } else additionalSpaceBetweenBars = 0;\r\n\r\n drawLabels();\r\n var zeroY = HorizontalCalculateOffset(0, calculatedScale, scaleHop);\r\n initPassVariableData_part2(statData, data, config, ctx, {\r\n yAxisPosX: yAxisPosX,\r\n additionalSpaceBetweenBars: additionalSpaceBetweenBars,\r\n xAxisPosY: xAxisPosY,\r\n barWidth: barWidth,\r\n zeroY: zeroY,\r\n scaleHop: scaleHop,\r\n valueHop: valueHop,\r\n calculatedScale: calculatedScale\r\n });\r\n\r\n animationLoop(config, drawScale, drawBars, ctx, msr.clrx, msr.clry, msr.clrwidth, msr.clrheight, yAxisPosX + msr.availableWidth / 2, xAxisPosY - msr.availableHeight / 2, yAxisPosX, xAxisPosY, data, statData);\r\n } else {\r\n testRedraw(ctx, data, config);\r\n }\r\n function HorizontalCalculateOffset(val, calculatedScale, scaleHop) {\r\n var outerValue = calculatedScale.steps * calculatedScale.stepValue;\r\n var adjustedValue = val - calculatedScale.graphMin;\r\n var scalingFactor = CapValue(adjustedValue / outerValue, 1, 0);\r\n return (scaleHop * calculatedScale.steps) * scalingFactor;\r\n };\r\n\r\n function drawBars(animPc) {\r\n ctx.lineWidth = Math.ceil(ctx.chartLineScale * config.barStrokeWidth);\r\n for (var i = 0; i < data.datasets.length; i++) {\r\n for (var j = 0; j < data.datasets[i].data.length; j++) {\r\n var currentAnimPc = animationCorrection(animPc, data, config, i, j, 1).animVal;\r\n if (currentAnimPc > 1) currentAnimPc = currentAnimPc - 1;\r\n if ((typeof (data.datasets[i].data[j]) == 'undefined') || 1 * data.datasets[i].data[j] == 0) continue;\r\n var leftBar, rightBar;\r\n if (config.animationByDataset) {\r\n leftBar = statData[i][j].xPosLeft;\r\n rightBar = statData[i][j].xPosRight;\r\n rightBar = leftBar + currentAnimPc * (rightBar - leftBar);\r\n } else {\r\n leftBar = statData[statData[i][j].firstNotMissing][j].xPosLeft + currentAnimPc * (statData[i][j].xPosLeft - statData[statData[i][j].firstNotMissing][j].xPosLeft);\r\n rightBar = statData[statData[i][j].firstNotMissing][j].xPosLeft + currentAnimPc * (statData[i][j].xPosRight - statData[statData[i][j].firstNotMissing][j].xPosLeft);\r\n }\r\n ctx.fillStyle = setOptionValue(1, \"COLOR\", ctx, data, statData, data.datasets[i].fillColor, config.defaultFillColor, i, j, { animationValue: currentAnimPc, xPosLeft: leftBar, yPosBottom: statData[i][j].yPosBottom, xPosRight: rightBar, yPosTop: statData[i][j].yPosBottom });\r\n\r\n ctx.strokeStyle = setOptionValue(1, \"STROKECOLOR\", ctx, data, statData, data.datasets[i].strokeColor, config.defaultStrokeColor, i, j, { nullvalue: null });\r\n\r\n if (currentAnimPc != 0 && statData[i][j].xPosLeft != statData[i][j].xPosRight) {\r\n ctx.beginPath();\r\n ctx.moveTo(leftBar, statData[i][j].yPosTop);\r\n ctx.lineTo(rightBar, statData[i][j].yPosTop);\r\n ctx.lineTo(rightBar, statData[i][j].yPosBottom);\r\n ctx.lineTo(leftBar, statData[i][j].yPosBottom);\r\n ctx.lineTo(leftBar, statData[i][j].yPosTop);\r\n if (config.barShowStroke) {\r\n ctx.setLineDash(lineStyleFn(setOptionValue(1, \"STROKESTYLE\", ctx, data, statData, data.datasets[i].datasetStrokeStyle, config.datasetStrokeStyle, i, j, { nullvalue: null })));\r\n ctx.stroke();\r\n ctx.setLineDash([]);\r\n }\r\n ctx.closePath();\r\n ctx.fill();\r\n }\r\n }\r\n }\r\n if (animPc >= config.animationStopValue) {\r\n var yPos = 0,\r\n xPos = 0;\r\n for (i = 0; i < data.datasets.length; i++) {\r\n for (j = 0; j < data.datasets[i].data.length; j++) {\r\n if ((typeof (data.datasets[i].data[j]) == 'undefined')) continue;\r\n //\t\t\t\t\t\tif (setOptionValue(1,\"ANNOTATEDISPLAY\",ctx,data,statData,undefined,config.annotateDisplay,i,j,{nullValue : true})) {\r\n jsGraphAnnotate[ctx.ChartNewId][jsGraphAnnotate[ctx.ChartNewId].length] = [\"RECT\", i, j, statData, setOptionValue(1, \"ANNOTATEDISPLAY\", ctx, data, statData, data.datasets[i].annotateDisplay, config.annotateDisplay, i, j, { nullValue: true })];\r\n //\t\t\t\t\t\t}\r\n if (setOptionValue(1, \"INGRAPHDATASHOW\", ctx, data, statData, data.datasets[i].inGraphDataShow, config.inGraphDataShow, i, j, { nullValue: true })) {\r\n ctx.save();\r\n ctx.textAlign = setOptionValue(1, \"INGRAPHDATAALIGN\", ctx, data, statData, undefined, config.inGraphDataAlign, i, j, { nullValue: true });\r\n ctx.textBaseline = setOptionValue(1, \"INGRAPHDATAVALIGN\", ctx, data, statData, undefined, config.inGraphDataVAlign, i, j, { nullValue: true });\r\n ctx.font = setOptionValue(1, \"INGRAPHDATAFONTSTYLE\", ctx, data, statData, undefined, config.inGraphDataFontStyle, i, j, { nullValue: true }) + ' ' + setOptionValue(ctx.chartTextScale, \"INGRAPHDATAFONTSIZE\", ctx, data, statData, undefined, config.inGraphDataFontSize, i, j, { nullValue: true }) + 'px ' + setOptionValue(1, \"INGRAPHDATAFONTFAMILY\", ctx, data, statData, undefined, config.inGraphDataFontFamily, i, j, { nullValue: true });\r\n ctx.fillStyle = setOptionValue(1, \"INGRAPHDATAFONTCOLOR\", ctx, data, statData, undefined, config.inGraphDataFontColor, i, j, { nullValue: true });\r\n var dispString = tmplbis(setOptionValue(1, \"INGRAPHDATATMPL\", ctx, data, statData, undefined, config.inGraphDataTmpl, i, j, { nullValue: true }), statData[i][j], config);\r\n ctx.beginPath();\r\n yPos = 0;\r\n xPos = 0;\r\n if (setOptionValue(1, \"INGRAPHDATAXPOSITION\", ctx, data, statData, undefined, config.inGraphDataXPosition, i, j, { nullValue: true }) == 1) {\r\n xPos = statData[i][j].xPosLeft + setOptionValue(ctx.chartSpaceScale, \"INGRAPHDATAPADDINGX\", ctx, data, statData, undefined, config.inGraphDataPaddingX, i, j, { nullValue: true });\r\n } else if (setOptionValue(1, \"INGRAPHDATAXPOSITION\", ctx, data, statData, undefined, config.inGraphDataXPosition, i, j, { nullValue: true }) == 2) {\r\n xPos = statData[i][j].xPosLeft + (statData[i][j].xPosRight - statData[i][j].xPosLeft) / 2 + setOptionValue(ctx.chartSpaceScale, \"INGRAPHDATAPADDINGX\", ctx, data, statData, undefined, config.inGraphDataPaddingX, i, j, { nullValue: true });\r\n } else if (setOptionValue(1, \"INGRAPHDATAXPOSITION\", ctx, data, statData, undefined, config.inGraphDataXPosition, i, j, { nullValue: true }) == 3) {\r\n xPos = statData[i][j].xPosRight + setOptionValue(ctx.chartSpaceScale, \"INGRAPHDATAPADDINGX\", ctx, data, statData, undefined, config.inGraphDataPaddingX, i, j, { nullValue: true });\r\n }\r\n if (setOptionValue(1, \"INGRAPHDATAYPOSITION\", ctx, data, statData, undefined, config.inGraphDataYPosition, i, j, { nullValue: true }) == 1) {\r\n yPos = statData[i][j].yPosBottom - setOptionValue(ctx.chartSpaceScale, \"INGRAPHDATAPADDINGY\", ctx, data, statData, undefined, config.inGraphDataPaddingY, i, j, { nullValue: true });\r\n } else if (setOptionValue(1, \"INGRAPHDATAYPOSITION\", ctx, data, statData, undefined, config.inGraphDataYPosition, i, j, { nullValue: true }) == 2) {\r\n yPos = statData[i][j].yPosBottom - barWidth / 2 - setOptionValue(ctx.chartSpaceScale, \"INGRAPHDATAPADDINGY\", ctx, data, statData, undefined, config.inGraphDataPaddingY, i, j, { nullValue: true });\r\n } else if (setOptionValue(1, \"INGRAPHDATAYPOSITION\", ctx, data, statData, undefined, config.inGraphDataYPosition, i, j, { nullValue: true }) == 3) {\r\n yPos = statData[i][j].yPosTop - setOptionValue(ctx.chartSpaceScale, \"INGRAPHDATAPADDINGY\", ctx, data, statData, undefined, config.inGraphDataPaddingY, i, j, { nullValue: true });\r\n }\r\n //\t\t\t\t\t\t\t\tif(xPos<=msr.availableWidth+msr.leftNotUsableSize) {\r\n ctx.translate(xPos, yPos);\r\n rotateVal = setOptionValue(1, \"INGRAPHDATAROTATE\", ctx, data, statData, undefined, config.inGraphDataRotate, i, j, { nullValue: true }) * (Math.PI / 180);\r\n ctx.rotate(rotateVal);\r\n setTextBordersAndBackground(ctx, dispString, setOptionValue(ctx.chartTextScale, \"INGRAPHDATAFONTSIZE\", ctx, data, statData, undefined, config.inGraphDataFontSize, i, j, { nullValue: true }), 0, 0, setOptionValue(1, \"INGRAPHDATABORDERS\", ctx, data, statData, undefined, config.inGraphDataBorders, i, j, { nullValue: true }), setOptionValue(1, \"INGRAPHDATABORDERSCOLOR\", ctx, data, statData, undefined, config.inGraphDataBordersColor, i, j, { nullValue: true }), setOptionValue(ctx.chartLineScale, \"INGRAPHDATABORDERSWIDTH\", ctx, data, statData, undefined, config.inGraphDataBordersWidth, i, j, { nullValue: true }), setOptionValue(ctx.chartSpaceScale, \"INGRAPHDATABORDERSXSPACE\", ctx, data, statData, undefined, config.inGraphDataBordersXSpace, i, j, { nullValue: true }), setOptionValue(ctx.chartSpaceScale, \"INGRAPHDATABORDERSYSPACE\", ctx, data, statData, undefined, config.inGraphDataBordersYSpace, i, j, { nullValue: true }), setOptionValue(1, \"INGRAPHDATABORDERSSTYLE\", ctx, data, statData, undefined, config.inGraphDataBordersStyle, i, j, { nullValue: true }), setOptionValue(1, \"INGRAPHDATABACKGROUNDCOLOR\", ctx, data, statData, undefined, config.inGraphDataBackgroundColor, i, j, { nullValue: true }), \"INGRAPHDATA\");\r\n ctx.fillTextMultiLine(dispString, 0, 0, ctx.textBaseline, setOptionValue(ctx.chartTextScale, \"INGRAPHDATAFONTSIZE\", ctx, data, statData, undefined, config.inGraphDataFontSize, i, j, { nullValue: true }), true, config.detectMouseOnText, ctx, \"INGRAPHDATA_TEXTMOUSE\", rotateVal, xPos, yPos, i, j);\r\n ctx.restore();\r\n //\t\t\t\t\t\t\t}\r\n }\r\n }\r\n }\r\n }\r\n if (msr.legendMsr.dispLegend) drawLegend(msr.legendMsr, data, config, ctx, \"HorizontalStackedBar\");\r\n };\r\n\r\n function drawScale() {\r\n //X axis line \r\n ctx.lineWidth = Math.ceil(ctx.chartLineScale * config.scaleLineWidth);\r\n ctx.strokeStyle = config.scaleLineColor;\r\n ctx.setLineDash(lineStyleFn(config.scaleLineStyle));\r\n ctx.beginPath();\r\n ctx.moveTo(yAxisPosX - Math.ceil(ctx.chartLineScale * config.scaleTickSizeLeft), xAxisPosY);\r\n ctx.lineTo(yAxisPosX + msr.availableWidth, xAxisPosY);\r\n ctx.stroke();\r\n ctx.setLineDash([]);\r\n\r\n ctx.setLineDash(lineStyleFn(config.scaleGridLineStyle));\r\n for (var i = ((config.showYAxisMin) ? -1 : 0); i < calculatedScale.steps; i++) {\r\n if (i >= 0) {\r\n ctx.beginPath();\r\n ctx.moveTo(yAxisPosX + i * valueHop, xAxisPosY + Math.ceil(ctx.chartLineScale * config.scaleTickSizeBottom));\r\n ctx.lineWidth = Math.ceil(ctx.chartLineScale * config.scaleGridLineWidth);\r\n ctx.strokeStyle = config.scaleGridLineColor;\r\n //Check i isnt 0, so we dont go over the Y axis twice.\r\n if (config.scaleShowGridLines && i > 0 && i % config.scaleXGridLinesStep == 0) {\r\n ctx.lineTo(yAxisPosX + i * valueHop, xAxisPosY - msr.availableHeight - Math.ceil(ctx.chartLineScale * config.scaleTickSizeTop));\r\n } else {\r\n ctx.lineTo(yAxisPosX + i * valueHop, xAxisPosY);\r\n }\r\n ctx.stroke();\r\n }\r\n ctx.setLineDash([]);\r\n }\r\n //Y axis\r\n ctx.lineWidth = Math.ceil(ctx.chartLineScale * config.scaleLineWidth);\r\n ctx.strokeStyle = config.scaleLineColor;\r\n ctx.setLineDash(lineStyleFn(config.scaleLineStyle));\r\n ctx.beginPath();\r\n ctx.moveTo(yAxisPosX, xAxisPosY + Math.ceil(ctx.chartLineScale * config.scaleTickSizeBottom));\r\n ctx.lineTo(yAxisPosX, xAxisPosY - msr.availableHeight - Math.ceil(ctx.chartLineScale * config.scaleTickSizeTop));\r\n ctx.stroke();\r\n ctx.setLineDash([]);\r\n ctx.setLineDash(lineStyleFn(config.scaleGridLineStyle));\r\n for (var j = 0; j < data.labels.length; j++) {\r\n ctx.beginPath();\r\n ctx.moveTo(yAxisPosX - Math.ceil(ctx.chartLineScale * config.scaleTickSizeLeft), xAxisPosY - ((j + 1) * scaleHop));\r\n ctx.lineWidth = Math.ceil(ctx.chartLineScale * config.scaleGridLineWidth);\r\n ctx.strokeStyle = config.scaleGridLineColor;\r\n if (config.scaleShowGridLines && (j + 1) % config.scaleYGridLinesStep == 0) {\r\n ctx.lineTo(yAxisPosX + msr.availableWidth, xAxisPosY - ((j + 1) * scaleHop));\r\n } else {\r\n ctx.lineTo(yAxisPosX, xAxisPosY - ((j + 1) * scaleHop));\r\n }\r\n ctx.stroke();\r\n }\r\n ctx.setLineDash([]);\r\n };\r\n\r\n function drawLabels() {\r\n ctx.font = config.scaleFontStyle + \" \" + (Math.ceil(ctx.chartTextScale * config.scaleFontSize)).toString() + \"px \" + config.scaleFontFamily;\r\n //X axis line \r\n if (config.scaleShowLabels && (config.xAxisTop || config.xAxisBottom)) {\r\n ctx.textBaseline = \"top\";\r\n if (msr.rotateLabels > 90) {\r\n ctx.save();\r\n ctx.textAlign = \"left\";\r\n } else if (msr.rotateLabels > 0) {\r\n ctx.save();\r\n ctx.textAlign = \"right\";\r\n } else {\r\n ctx.textAlign = \"center\";\r\n }\r\n ctx.fillStyle = config.scaleFontColor;\r\n if (config.xAxisBottom) {\r\n for (var i = ((config.showYAxisMin) ? -1 : 0); i < calculatedScale.steps; i++) {\r\n if (showYLabels(ctx, data, config, i + 1, calculatedScale.labels[i + 1])) {\r\n ctx.save();\r\n if (msr.rotateLabels > 0) {\r\n ctx.translate(yAxisPosX + (i + 1) * valueHop - msr.highestXLabel / 2, msr.xLabelPos);\r\n ctx.rotate(-(msr.rotateLabels * (Math.PI / 180)));\r\n ctx.fillTextMultiLine(calculatedScale.labels[i + 1], 0, 0, ctx.textBaseline, (Math.ceil(ctx.chartTextScale * config.scaleFontSize)), true, config.detectMouseOnText, ctx, \"XAXIS_TEXTMOUSE\", -(msr.rotateLabels * (Math.PI / 180)), yAxisPosX + (i + 1) * valueHop - msr.highestXLabel / 2, msr.xLabelPos, i, -1);\r\n } else {\r\n ctx.fillTextMultiLine(calculatedScale.labels[i + 1], yAxisPosX + ((i + 1) * valueHop), msr.xLabelPos, ctx.textBaseline, (Math.ceil(ctx.chartTextScale * config.scaleFontSize)), true, config.detectMouseOnText, ctx, \"XAXIS_TEXTMOUSE\", 0, 0, 0, i, -1);\r\n }\r\n ctx.restore();\r\n }\r\n }\r\n }\r\n }\r\n //Y axis\r\n ctx.textAlign = \"right\";\r\n ctx.textBaseline = \"middle\";\r\n for (var j = 0; j < data.labels.length; j++) {\r\n if (showLabels(ctx, data, config, j)) {\r\n if (config.yAxisLeft) {\r\n ctx.textAlign = \"right\";\r\n ctx.fillTextMultiLine(fmtChartJS(config, data.labels[j], config.fmtXLabel), yAxisPosX - (Math.ceil(ctx.chartLineScale * config.scaleTickSizeLeft) + Math.ceil(ctx.chartSpaceScale * config.yAxisSpaceRight)), xAxisPosY - ((j + 1) * scaleHop) + Math.ceil(ctx.chartSpaceScale * config.barValueSpacing) + additionalSpaceBetweenBars + (barWidth / 2), ctx.textBaseline, (Math.ceil(ctx.chartTextScale * config.scaleFontSize)), true, config.detectMouseOnText, ctx, \"YLEFTAXIS_TEXTMOUSE\", 0, 0, 0, -1, j);\r\n }\r\n if (config.yAxisRight) {\r\n ctx.textAlign = \"left\";\r\n ctx.fillTextMultiLine(fmtChartJS(config, data.labels[j], config.fmtXLabel), yAxisPosX + msr.availableWidth + (Math.ceil(ctx.chartLineScale * config.scaleTickSizeRight) + Math.ceil(ctx.chartSpaceScale * config.yAxisSpaceRight)), xAxisPosY - ((j + 1) * scaleHop) + additionalSpaceBetweenBars + (barWidth / 2), ctx.textBaseline, (Math.ceil(ctx.chartTextScale * config.scaleFontSize)), true, config.detectMouseOnText, ctx, \"YRIGHTAXIS_TEXTMOUSE\", 0, 0, 0, -1, j);\r\n }\r\n }\r\n }\r\n };\r\n\r\n function getValueBounds() {\r\n var upperValue = -Number.MAX_VALUE;\r\n var lowerValue = Number.MAX_VALUE;\r\n var minvl = new Array(data.datasets.length);\r\n var maxvl = new Array(data.datasets.length);\r\n for (var i = 0; i < data.datasets.length; i++) {\r\n for (var j = 0; j < data.datasets[i].data.length; j++) {\r\n var k = i;\r\n var tempp = 0;\r\n var tempn = 0;\r\n if (!(typeof (data.datasets[0].data[j]) == 'undefined')) {\r\n if (1 * data.datasets[0].data[j] > 0) {\r\n tempp += 1 * data.datasets[0].data[j];\r\n if (tempp > upperValue) {\r\n upperValue = tempp;\r\n };\r\n if (tempp < lowerValue) {\r\n lowerValue = tempp;\r\n };\r\n } else {\r\n tempn += 1 * data.datasets[0].data[j];\r\n if (tempn > upperValue) {\r\n upperValue = tempn;\r\n };\r\n if (tempn < lowerValue) {\r\n lowerValue = tempn;\r\n };\r\n }\r\n }\r\n while (k > 0) { //get max of stacked data\r\n if (!(typeof (data.datasets[k].data[j]) == 'undefined')) {\r\n if (1 * data.datasets[k].data[j] > 0) {\r\n tempp += 1 * data.datasets[k].data[j];\r\n if (tempp > upperValue) {\r\n upperValue = tempp;\r\n };\r\n if (tempp < lowerValue) {\r\n lowerValue = tempp;\r\n };\r\n } else {\r\n tempn += 1 * data.datasets[k].data[j];\r\n if (tempn > upperValue) {\r\n upperValue = tempn;\r\n };\r\n if (tempn < lowerValue) {\r\n lowerValue = tempn;\r\n };\r\n }\r\n }\r\n k--;\r\n }\r\n }\r\n };\r\n if (typeof config.graphMin == \"function\") lowerValue = setOptionValue(1, \"GRAPHMIN\", ctx, data, statData, undefined, config.graphMin, -1, -1, { nullValue: true })\r\n else if (!isNaN(config.graphMin)) lowerValue = config.graphMin;\r\n if (typeof config.graphMax == \"function\") upperValue = setOptionValue(1, \"GRAPHMAX\", ctx, data, statData, undefined, config.graphMax, -1, -1, { nullValue: true })\r\n else if (!isNaN(config.graphMax)) upperValue = config.graphMax;\r\n if (upperValue < lowerValue) { upperValue = 0; lowerValue = 0; }\r\n if (Math.abs(upperValue - lowerValue) < config.zeroValue) {\r\n if (Math.abs(upperValue) < config.zeroValue) upperValue = .9;\r\n if (upperValue > 0) {\r\n upperValue = upperValue * 1.1;\r\n lowerValue = lowerValue * 0.9;\r\n } else {\r\n upperValue = upperValue * 0.9;\r\n lowerValue = lowerValue * 1.1;\r\n }\r\n }\r\n labelHeight = (Math.ceil(ctx.chartTextScale * config.scaleFontSize));\r\n scaleHeight = msr.availableHeight;\r\n var maxSteps = Math.floor((scaleHeight / (labelHeight * 0.66)));\r\n var minSteps = Math.floor((scaleHeight / labelHeight * 0.5));\r\n if (upperValue < lowerValue) { lowerValue = upperValue - 1; }\r\n return {\r\n maxValue: upperValue,\r\n minValue: lowerValue,\r\n maxSteps: maxSteps,\r\n minSteps: minSteps\r\n };\r\n\r\n\r\n };\r\n\r\n return {\r\n data: data,\r\n config: config,\r\n ctx: ctx\r\n };\r\n };\r\n var Bar = function (data, config, ctx) {\r\n var maxSize, scaleHop, scaleHop2, calculatedScale, calculatedScale2, labelHeight, scaleHeight, valueBounds, labelTemplateString, labelTemplateString2, valueHop, widestXLabel, xAxisLength, yAxisPosX, xAxisPosY, barWidth, rotateLabels = 0,\r\n msr;\r\n\r\n ctx.tpchart = \"Bar\";\r\n ctx.tpdata = 0;\r\n\r\n\r\n if (!init_and_start(ctx, data, config)) return;\r\n var statData = initPassVariableData_part1(data, config, ctx);\r\n\r\n var nrOfBars = data.datasets.length;\r\n for (var i = 0; i < data.datasets.length; i++) {\r\n if (data.datasets[i].type == \"Line\") { statData[i][0].tpchart = \"Line\"; nrOfBars--; }\r\n else statData[i][0].tpchart = \"Bar\";\r\n }\r\n\r\n\r\n // change the order (at first all bars then the lines) (form of BubbleSort)\r\n var bufferDataset, l = 0;\r\n\r\n\r\n msr = setMeasures(data, config, ctx, height, width, \"nihil\", [\"\"], true, false, true, true, true, \"Bar\");\r\n valueBounds = getValueBounds();\r\n if (valueBounds.minValue <= 0) config.logarithmic = false;\r\n if (valueBounds.maxSteps > 0 && valueBounds.minSteps > 0) {\r\n\r\n // true or fuzzy (error for negativ values (included 0))\r\n if (config.logarithmic !== false) {\r\n if (valueBounds.minValue <= 0) {\r\n config.logarithmic = false;\r\n }\r\n }\r\n if (config.logarithmic2 !== false) {\r\n if (valueBounds.minValue2 <= 0) {\r\n config.logarithmic2 = false;\r\n }\r\n }\r\n // Check if logarithmic is meanigful\r\n var OrderOfMagnitude = calculateOrderOfMagnitude(Math.pow(10, calculateOrderOfMagnitude(valueBounds.maxValue) + 1)) - calculateOrderOfMagnitude(Math.pow(10, calculateOrderOfMagnitude(valueBounds.minValue)));\r\n if ((config.logarithmic == 'fuzzy' && OrderOfMagnitude < 4) || config.scaleOverride) {\r\n config.logarithmic = false;\r\n }\r\n // Check if logarithmic is meanigful\r\n var OrderOfMagnitude2 = calculateOrderOfMagnitude(Math.pow(10, calculateOrderOfMagnitude(valueBounds.maxValue2) + 1)) - calculateOrderOfMagnitude(Math.pow(10, calculateOrderOfMagnitude(valueBounds.minValue2)));\r\n if ((config.logarithmic2 == 'fuzzy' && OrderOfMagnitude2 < 4) || config.scaleOverride2) {\r\n config.logarithmic2 = false;\r\n }\r\n\r\n //Check and set the scale\r\n labelTemplateString = (config.scaleShowLabels) ? config.scaleLabel : \"\";\r\n labelTemplateString2 = (config.scaleShowLabels2) ? config.scaleLabel2 : \"\";\r\n if (!config.scaleOverride) {\r\n calculatedScale = calculateScale(1, config, valueBounds.maxSteps, valueBounds.minSteps, valueBounds.maxValue, valueBounds.minValue, labelTemplateString);\r\n } else {\r\n var scaleStartValue = setOptionValue(1, \"SCALESTARTVALUE\", ctx, data, statData, undefined, config.scaleStartValue, -1, -1, { nullValue: true });\r\n var scaleSteps = setOptionValue(1, \"SCALESTEPS\", ctx, data, statData, undefined, config.scaleSteps, -1, -1, { nullValue: true });\r\n var scaleStepWidth = setOptionValue(1, \"SCALESTEPWIDTH\", ctx, data, statData, undefined, config.scaleStepWidth, -1, -1, { nullValue: true });\r\n\r\n calculatedScale = {\r\n steps: scaleSteps,\r\n stepValue: scaleStepWidth,\r\n graphMin: scaleStartValue,\r\n graphMax: scaleStartValue + scaleSteps * scaleStepWidth,\r\n labels: []\r\n }\r\n populateLabels(1, config, labelTemplateString, calculatedScale.labels, calculatedScale.steps, scaleStartValue, calculatedScale.graphMax, scaleStepWidth);\r\n }\r\n if (valueBounds.dbAxis) {\r\n if (!config.scaleOverride2) {\r\n calculatedScale2 = calculateScale(2, config, valueBounds.maxSteps, valueBounds.minSteps, valueBounds.maxValue2, valueBounds.minValue2, labelTemplateString2);\r\n } else {\r\n var scaleStartValue2 = setOptionValue(1, \"SCALESTARTVALUE2\", ctx, data, statData, undefined, config.scaleStartValue2, -1, -1, { nullValue: true });\r\n var scaleSteps2 = setOptionValue(1, \"SCALESTEPS2\", ctx, data, statData, undefined, config.scaleSteps2, -1, -1, { nullValue: true });\r\n var scaleStepWidth2 = setOptionValue(1, \"SCALESTEPWIDTH2\", ctx, data, statData, undefined, config.scaleStepWidth2, -1, -1, { nullValue: true });\r\n\r\n calculatedScale2 = {\r\n steps: scaleSteps2,\r\n stepValue: scaleStepWidth2,\r\n graphMin: scaleStartValue2,\r\n graphMax: scaleStartValue2 + scaleSteps2 * scaleStepWidth2,\r\n labels: []\r\n }\r\n populateLabels(2, config, labelTemplateString2, calculatedScale2.labels, calculatedScale2.steps, scaleStartValue2, calculatedScale2.graphMax, scaleStepWidth2);\r\n }\r\n } else {\r\n calculatedScale2 = {\r\n steps: 0,\r\n stepValue: 0,\r\n graphMin: 0,\r\n graphMax: 0,\r\n labels: null\r\n }\r\n }\r\n msr = setMeasures(data, config, ctx, height, width, calculatedScale.labels, calculatedScale2.labels, true, false, true, true, true, \"Bar\");\r\n\r\n var prevHeight = msr.availableHeight;\r\n\r\n msr.availableHeight = msr.availableHeight - Math.ceil(ctx.chartLineScale * config.scaleTickSizeBottom) - Math.ceil(ctx.chartLineScale * config.scaleTickSizeTop);\r\n msr.availableWidth = msr.availableWidth - Math.ceil(ctx.chartLineScale * config.scaleTickSizeLeft) - Math.ceil(ctx.chartLineScale * config.scaleTickSizeRight);\r\n scaleHop = Math.floor(msr.availableHeight / calculatedScale.steps);\r\n scaleHop2 = Math.floor(msr.availableHeight / calculatedScale2.steps);\r\n valueHop = Math.floor(msr.availableWidth / (data.labels.length));\r\n if (valueHop == 0 || config.fullWidthGraph) valueHop = (msr.availableWidth / data.labels.length);\r\n msr.clrwidth = msr.clrwidth - (msr.availableWidth - ((data.labels.length) * valueHop));\r\n msr.availableWidth = (data.labels.length) * valueHop;\r\n msr.availableHeight = (calculatedScale.steps) * scaleHop;\r\n msr.xLabelPos += (Math.ceil(ctx.chartLineScale * config.scaleTickSizeBottom) + Math.ceil(ctx.chartLineScale * config.scaleTickSizeTop) - (prevHeight - msr.availableHeight));\r\n msr.clrheight += (Math.ceil(ctx.chartLineScale * config.scaleTickSizeBottom) + Math.ceil(ctx.chartLineScale * config.scaleTickSizeTop) - (prevHeight - msr.availableHeight));\r\n\r\n yAxisPosX = msr.leftNotUsableSize + Math.ceil(ctx.chartLineScale * config.scaleTickSizeLeft);\r\n xAxisPosY = msr.topNotUsableSize + msr.availableHeight + Math.ceil(ctx.chartLineScale * config.scaleTickSizeTop);\r\n barWidth = (valueHop - Math.ceil(ctx.chartLineScale * config.scaleGridLineWidth) * 2 - (Math.ceil(ctx.chartSpaceScale * config.barValueSpacing) * 2) - (Math.ceil(ctx.chartSpaceScale * config.barDatasetSpacing) * nrOfBars - 1) - ((Math.ceil(ctx.chartLineScale * config.barStrokeWidth) / 2) * nrOfBars - 1)) / nrOfBars;\r\n if (barWidth >= 0 && barWidth <= 1) barWidth = 1;\r\n if (barWidth < 0 && barWidth >= -1) barWidth = -1;\r\n var additionalSpaceBetweenBars;\r\n if (1 * config.maxBarWidth > 0 && barWidth > 1 * config.maxBarWidth) {\r\n additionalSpaceBetweenBars = nrOfBars * (barWidth - 1 * config.maxBarWidth) / 2;\r\n barWidth = 1 * config.maxBarWidth;\r\n } else additionalSpaceBetweenBars = 0;\r\n\r\n var zeroY2 = 0;\r\n var zeroY = calculateOffset(config.logarithmic, 0, calculatedScale, scaleHop);\r\n if (typeof calculatedScale2 === \"object\") zeroY2 = calculateOffset(config.logarithmic2, 0, calculatedScale2, scaleHop2);\r\n initPassVariableData_part2(statData, data, config, ctx, {\r\n msr: msr,\r\n yAxisPosX: yAxisPosX,\r\n xAxisPosY: xAxisPosY,\r\n valueHop: valueHop,\r\n nbValueHop: data.labels.length - 1,\r\n barWidth: barWidth,\r\n additionalSpaceBetweenBars: additionalSpaceBetweenBars,\r\n zeroY: zeroY,\r\n zeroY2: zeroY2,\r\n calculatedScale: calculatedScale,\r\n calculatedScale2: calculatedScale2,\r\n scaleHop: scaleHop,\r\n scaleHop2: scaleHop2\r\n });\r\n drawLabels();\r\n animationLoop(config, drawScale, drawBars, ctx, msr.clrx, msr.clry, msr.clrwidth, msr.clrheight, yAxisPosX + msr.availableWidth / 2, xAxisPosY - msr.availableHeight / 2, yAxisPosX, xAxisPosY, data, statData);\r\n } else {\r\n testRedraw(ctx, data, config);\r\n }\r\n\r\n function drawBars(animPc) {\r\n var t1, t2, t3;\r\n\r\n\r\n ctx.lineWidth = Math.ceil(ctx.chartLineScale * config.barStrokeWidth);\r\n for (var i = 0; i < data.datasets.length; i++) {\r\n if (data.datasets[i].type == \"Line\") continue;\r\n for (var j = 0; j < data.datasets[i].data.length; j++) {\r\n if (!(typeof (data.datasets[i].data[j]) == 'undefined')) {\r\n var currentAnimPc = animationCorrection(animPc, data, config, i, j, 1).animVal;\r\n if (currentAnimPc > 1) currentAnimPc = currentAnimPc - 1;\r\n var barHeight = currentAnimPc * (statData[i][j].barHeight) + (Math.ceil(ctx.chartLineScale * config.barStrokeWidth) / 2);\r\n ctx.fillStyle = setOptionValue(1, \"COLOR\", ctx, data, statData, data.datasets[i].fillColor, config.defaultFillColor, i, j, { animationValue: currentAnimPc, xPosLeft: statData[i][j].xPosLeft, yPosBottom: statData[i][j].yPosBottom, xPosRight: statData[i][j].xPosLeft + barWidth, yPosTop: statData[i][j].yPosBottom - barHeight });\r\n ctx.strokeStyle = setOptionValue(1, \"STROKECOLOR\", ctx, data, statData, data.datasets[i].strokeColor, config.defaultStrokeColor, i, j, { nullvalue: null });\r\n roundRect(ctx, statData[i][j].xPosLeft, statData[i][j].yPosBottom, barWidth, barHeight, config.barShowStroke, config.barBorderRadius, i, j, (data.datasets[i].data[j] < 0 ? -1 : 1));\r\n }\r\n }\r\n }\r\n drawLinesDataset(animPc, data, config, ctx, statData, { xAxisPosY: xAxisPosY, yAxisPosX: yAxisPosX, valueHop: valueHop, nbValueHop: data.labels.length });\r\n\r\n if (animPc >= config.animationStopValue) {\r\n\r\n for (i = 0; i < data.datasets.length; i++) {\r\n for (j = 0; j < data.datasets[i].data.length; j++) {\r\n if (typeof (data.datasets[i].data[j]) == 'undefined') continue;\r\n if (data.datasets[i].type == \"Line\") continue;\r\n //\t\t\t\t\t\tif(setOptionValue(1,\"ANNOTATEDISPLAY\",ctx,data,statData,undefined,config.annotateDisplay,i,j,{nullValue : true})) {\r\n jsGraphAnnotate[ctx.ChartNewId][jsGraphAnnotate[ctx.ChartNewId].length] = [\"RECT\", i, j, statData, setOptionValue(1, \"ANNOTATEDISPLAY\", ctx, data, statData, data.datasets[i].annotateDisplay, config.annotateDisplay, i, j, { nullValue: true })];\r\n //\t\t\t\t\t\t}\r\n if (setOptionValue(1, \"INGRAPHDATASHOW\", ctx, data, statData, data.datasets[i].inGraphDataShow, config.inGraphDataShow, i, j, { nullValue: true })) {\r\n ctx.save();\r\n ctx.textAlign = setOptionValue(1, \"INGRAPHDATAALIGN\", ctx, data, statData, undefined, config.inGraphDataAlign, i, j, { nullValue: true });\r\n ctx.textBaseline = setOptionValue(1, \"INGRAPHDATAVALIGN\", ctx, data, statData, undefined, config.inGraphDataVAlign, i, j, { nullValue: true });\r\n ctx.font = setOptionValue(1, \"INGRAPHDATAFONTSTYLE\", ctx, data, statData, undefined, config.inGraphDataFontStyle, i, j, { nullValue: true }) + ' ' + setOptionValue(ctx.chartTextScale, \"INGRAPHDATAFONTSIZE\", ctx, data, statData, undefined, config.inGraphDataFontSize, i, j, { nullValue: true }) + 'px ' + setOptionValue(1, \"INGRAPHDATAFONTFAMILY\", ctx, data, statData, undefined, config.inGraphDataFontFamily, i, j, { nullValue: true });\r\n ctx.fillStyle = setOptionValue(1, \"INGRAPHDATAFONTCOLOR\", ctx, data, statData, undefined, config.inGraphDataFontColor, i, j, { nullValue: true });\r\n t1 = statData[i][j].yPosBottom;\r\n t2 = statData[i][j].yPosTop;\r\n ctx.beginPath();\r\n var yPos = 0,\r\n xPos = 0;\r\n if (setOptionValue(1, \"INGRAPHDATAXPOSITION\", ctx, data, statData, undefined, config.inGraphDataXPosition, i, j, { nullValue: true }) == 1) {\r\n xPos = statData[i][j].xPosLeft + setOptionValue(ctx.chartSpaceScale, \"INGRAPHDATAPADDINGX\", ctx, data, statData, undefined, config.inGraphDataPaddingX, i, j, { nullValue: true });\r\n } else if (setOptionValue(1, \"INGRAPHDATAXPOSITION\", ctx, data, statData, undefined, config.inGraphDataXPosition, i, j, { nullValue: true }) == 2) {\r\n xPos = statData[i][j].xPosLeft + barWidth / 2 + setOptionValue(ctx.chartSpaceScale, \"INGRAPHDATAPADDINGX\", ctx, data, statData, undefined, config.inGraphDataPaddingX, i, j, { nullValue: true });\r\n } else if (setOptionValue(1, \"INGRAPHDATAXPOSITION\", ctx, data, statData, undefined, config.inGraphDataXPosition, i, j, { nullValue: true }) == 3) {\r\n xPos = statData[i][j].xPosLeft + barWidth + setOptionValue(ctx.chartSpaceScale, \"INGRAPHDATAPADDINGX\", ctx, data, statData, undefined, config.inGraphDataPaddingX, i, j, { nullValue: true });\r\n }\r\n if (setOptionValue(1, \"INGRAPHDATAYPOSITION\", ctx, data, statData, undefined, config.inGraphDataYPosition, i, j, { nullValue: true }) == 1) {\r\n yPos = statData[i][j].yPosBottom - setOptionValue(ctx.chartSpaceScale, \"INGRAPHDATAPADDINGY\", ctx, data, statData, undefined, config.inGraphDataPaddingY, i, j, { nullValue: true });\r\n } else if (setOptionValue(1, \"INGRAPHDATAYPOSITION\", ctx, data, statData, undefined, config.inGraphDataYPosition, i, j, { nullValue: true }) == 2) {\r\n yPos = (statData[i][j].yPosBottom + statData[i][j].yPosTop) / 2 - setOptionValue(ctx.chartSpaceScale, \"INGRAPHDATAPADDINGY\", ctx, data, statData, undefined, config.inGraphDataPaddingY, i, j, { nullValue: true });\r\n } else if (setOptionValue(1, \"INGRAPHDATAYPOSITION\", ctx, data, statData, undefined, config.inGraphDataYPosition, i, j, { nullValue: true }) == 3) {\r\n yPos = statData[i][j].yPosTop - setOptionValue(ctx.chartSpaceScale, \"INGRAPHDATAPADDINGY\", ctx, data, statData, undefined, config.inGraphDataPaddingY, i, j, { nullValue: true });\r\n }\r\n ctx.translate(xPos, yPos);\r\n var dispString = tmplbis(setOptionValue(1, \"INGRAPHDATATMPL\", ctx, data, statData, undefined, config.inGraphDataTmpl, i, j, { nullValue: true }), statData[i][j], config);\r\n rotateVal = setOptionValue(1, \"INGRAPHDATAROTATE\", ctx, data, statData, undefined, config.inGraphDataRotate, i, j, { nullValue: true }) * (Math.PI / 180);\r\n ctx.rotate(rotateVal);\r\n setTextBordersAndBackground(ctx, dispString, setOptionValue(ctx.chartTextScale, \"INGRAPHDATAFONTSIZE\", ctx, data, statData, undefined, config.inGraphDataFontSize, i, j, { nullValue: true }), 0, 0, setOptionValue(1, \"INGRAPHDATABORDERS\", ctx, data, statData, undefined, config.inGraphDataBorders, i, j, { nullValue: true }), setOptionValue(1, \"INGRAPHDATABORDERSCOLOR\", ctx, data, statData, undefined, config.inGraphDataBordersColor, i, j, { nullValue: true }), setOptionValue(ctx.chartLineScale, \"INGRAPHDATABORDERSWIDTH\", ctx, data, statData, undefined, config.inGraphDataBordersWidth, i, j, { nullValue: true }), setOptionValue(ctx.chartSpaceScale, \"INGRAPHDATABORDERSXSPACE\", ctx, data, statData, undefined, config.inGraphDataBordersXSpace, i, j, { nullValue: true }), setOptionValue(ctx.chartSpaceScale, \"INGRAPHDATABORDERSYSPACE\", ctx, data, statData, undefined, config.inGraphDataBordersYSpace, i, j, { nullValue: true }), setOptionValue(1, \"INGRAPHDATABORDERSSTYLE\", ctx, data, statData, undefined, config.inGraphDataBordersStyle, i, j, { nullValue: true }), setOptionValue(1, \"INGRAPHDATABACKGROUNDCOLOR\", ctx, data, statData, undefined, config.inGraphDataBackgroundColor, i, j, { nullValue: true }), \"INGRAPHDATA\");\r\n ctx.fillTextMultiLine(dispString, 0, 0, ctx.textBaseline, setOptionValue(ctx.chartTextScale, \"INGRAPHDATAFONTSIZE\", ctx, data, statData, undefined, config.inGraphDataFontSize, i, j, { nullValue: true }), true, config.detectMouseOnText, ctx, \"INGRAPHDATA_TEXTMOUSE\", rotateVal, xPos, yPos, i, j);\r\n ctx.restore();\r\n }\r\n }\r\n }\r\n }\r\n if (animPc >= 1 && typeof drawMath == \"function\") {\r\n drawMath(ctx, config, data, msr, {\r\n xAxisPosY: xAxisPosY,\r\n yAxisPosX: yAxisPosX,\r\n valueHop: valueHop,\r\n scaleHop: scaleHop,\r\n zeroY: zeroY,\r\n calculatedScale: calculatedScale,\r\n calculateOffset: calculateOffset,\r\n additionalSpaceBetweenBars: additionalSpaceBetweenBars,\r\n barWidth: barWidth\r\n });\r\n }\r\n if (msr.legendMsr.dispLegend) drawLegend(msr.legendMsr, data, config, ctx, \"Bar\");\r\n };\r\n\r\n function roundRect(ctx, x, y, w, h, stroke, radius, i, j, fact) {\r\n ctx.beginPath();\r\n ctx.setLineDash(lineStyleFn(setOptionValue(1, \"STROKESTYLE\", ctx, data, statData, data.datasets[i].datasetStrokeStyle, config.datasetStrokeStyle, i, j, { nullvalue: null })));\r\n ctx.moveTo(x + radius, y);\r\n ctx.lineTo(x + w - radius, y);\r\n ctx.quadraticCurveTo(x + w, y, x + w, y);\r\n ctx.lineTo(x + w, y - h + fact * radius);\r\n ctx.quadraticCurveTo(x + w, y - h, x + w - radius, y - h);\r\n ctx.lineTo(x + radius, y - h);\r\n ctx.quadraticCurveTo(x, y - h, x, y - h + fact * radius);\r\n ctx.lineTo(x, y);\r\n ctx.quadraticCurveTo(x, y, x + radius, y);\r\n if (stroke) ctx.stroke();\r\n ctx.closePath();\r\n ctx.fill();\r\n ctx.setLineDash([]);\r\n };\r\n\r\n function drawScale() {\r\n //X axis line \r\n ctx.lineWidth = Math.ceil(ctx.chartLineScale * config.scaleLineWidth);\r\n ctx.strokeStyle = config.scaleLineColor;\r\n ctx.setLineDash(lineStyleFn(config.scaleLineStyle));\r\n\r\n ctx.beginPath();\r\n ctx.moveTo(yAxisPosX - Math.ceil(ctx.chartLineScale * config.scaleTickSizeLeft), xAxisPosY);\r\n ctx.lineTo(yAxisPosX + msr.availableWidth + Math.ceil(ctx.chartLineScale * config.scaleTickSizeRight), xAxisPosY);\r\n ctx.stroke();\r\n ctx.setLineDash([]);\r\n\r\n ctx.setLineDash(lineStyleFn(config.scaleGridLineStyle));\r\n for (var i = 0; i < data.labels.length; i++) {\r\n ctx.beginPath();\r\n ctx.moveTo(yAxisPosX + i * valueHop, xAxisPosY + Math.ceil(ctx.chartLineScale * config.scaleTickSizeBottom));\r\n ctx.lineWidth = Math.ceil(ctx.chartLineScale * config.scaleGridLineWidth);\r\n ctx.strokeStyle = config.scaleGridLineColor;\r\n //Check i isnt 0, so we dont go over the Y axis twice.\r\n if (config.scaleShowGridLines && i > 0 && i % config.scaleXGridLinesStep == 0) {\r\n ctx.lineTo(yAxisPosX + i * valueHop, xAxisPosY - msr.availableHeight - Math.ceil(ctx.chartLineScale * config.scaleTickSizeTop));\r\n } else {\r\n ctx.lineTo(yAxisPosX + i * valueHop, xAxisPosY);\r\n }\r\n ctx.stroke();\r\n }\r\n ctx.setLineDash([]);\r\n\r\n //Y axis\r\n ctx.lineWidth = Math.ceil(ctx.chartLineScale * config.scaleLineWidth);\r\n ctx.strokeStyle = config.scaleLineColor;\r\n ctx.setLineDash(lineStyleFn(config.scaleLineStyle));\r\n ctx.beginPath();\r\n ctx.moveTo(yAxisPosX, xAxisPosY + Math.ceil(ctx.chartLineScale * config.scaleTickSizeBottom));\r\n ctx.lineTo(yAxisPosX, xAxisPosY - msr.availableHeight - Math.ceil(ctx.chartLineScale * config.scaleTickSizeTop));\r\n ctx.stroke();\r\n ctx.setLineDash([]);\r\n\r\n ctx.setLineDash(lineStyleFn(config.scaleGridLineStyle));\r\n for (var j = 0; j < calculatedScale.steps; j++) {\r\n ctx.beginPath();\r\n ctx.moveTo(yAxisPosX - Math.ceil(ctx.chartLineScale * config.scaleTickSizeLeft), xAxisPosY - ((j + 1) * scaleHop));\r\n ctx.lineWidth = Math.ceil(ctx.chartLineScale * config.scaleGridLineWidth);\r\n ctx.strokeStyle = config.scaleGridLineColor;\r\n if (config.scaleShowGridLines && (j + 1) % config.scaleYGridLinesStep == 0) {\r\n ctx.lineTo(yAxisPosX + msr.availableWidth + Math.ceil(ctx.chartLineScale * config.scaleTickSizeRight), xAxisPosY - ((j + 1) * scaleHop));\r\n } else {\r\n ctx.lineTo(yAxisPosX, xAxisPosY - ((j + 1) * scaleHop));\r\n }\r\n ctx.stroke();\r\n }\r\n ctx.setLineDash([]);\r\n };\r\n\r\n function drawLabels() {\r\n ctx.font = config.scaleFontStyle + \" \" + (Math.ceil(ctx.chartTextScale * config.scaleFontSize)).toString() + \"px \" + config.scaleFontFamily;\r\n //X axis line \r\n if (config.xAxisTop || config.xAxisBottom) {\r\n ctx.textBaseline = \"top\";\r\n if (msr.rotateLabels > 90) {\r\n ctx.save();\r\n ctx.textAlign = \"left\";\r\n } else if (msr.rotateLabels > 0) {\r\n ctx.save();\r\n ctx.textAlign = \"right\";\r\n } else {\r\n ctx.textAlign = \"center\";\r\n }\r\n ctx.fillStyle = config.scaleFontColor;\r\n if (config.xAxisBottom) {\r\n for (var i = 0; i < data.labels.length; i++) {\r\n if (showLabels(ctx, data, config, i)) {\r\n ctx.save();\r\n if (msr.rotateLabels > 0) {\r\n ctx.translate(yAxisPosX + i * valueHop + (valueHop / 2) - msr.highestXLabel / 2, msr.xLabelPos);\r\n ctx.rotate(-(msr.rotateLabels * (Math.PI / 180)));\r\n ctx.fillTextMultiLine(fmtChartJS(config, data.labels[i], config.fmtXLabel), 0, 0, ctx.textBaseline, (Math.ceil(ctx.chartTextScale * config.scaleFontSize)), true, config.detectMouseOnText, ctx, \"XAXIS_TEXTMOUSE\", -(msr.rotateLabels * (Math.PI / 180)), yAxisPosX + i * valueHop + (valueHop / 2) - msr.highestXLabel / 2, msr.xLabelPos, i, -1);\r\n } else {\r\n ctx.fillTextMultiLine(fmtChartJS(config, data.labels[i], config.fmtXLabel), yAxisPosX + i * valueHop + (valueHop / 2), msr.xLabelPos, ctx.textBaseline, (Math.ceil(ctx.chartTextScale * config.scaleFontSize)), true, config.detectMouseOnText, ctx, \"XAXIS_TEXTMOUSE\", 0, 0, 0, i, -1);\r\n }\r\n ctx.restore();\r\n }\r\n }\r\n }\r\n }\r\n //Y axis\r\n ctx.textAlign = \"right\";\r\n ctx.textBaseline = \"middle\";\r\n for (var j = ((config.showYAxisMin) ? -1 : 0); j < calculatedScale.steps; j++) {\r\n if (config.scaleShowLabels) {\r\n if (showYLabels(ctx, data, config, j + 1, calculatedScale.labels[j + 1])) {\r\n if (config.yAxisLeft) {\r\n ctx.textAlign = \"right\";\r\n ctx.fillTextMultiLine(calculatedScale.labels[j + 1], yAxisPosX - (Math.ceil(ctx.chartLineScale * config.scaleTickSizeLeft) + Math.ceil(ctx.chartSpaceScale * config.yAxisSpaceRight)), xAxisPosY - ((j + 1) * scaleHop), ctx.textBaseline, (Math.ceil(ctx.chartTextScale * config.scaleFontSize)), true, config.detectMouseOnText, ctx, \"YLEFTAXIS_TEXTMOUSE\", 0, 0, 0, -1, j);\r\n }\r\n if (config.yAxisRight && !valueBounds.dbAxis) {\r\n ctx.textAlign = \"left\";\r\n ctx.fillTextMultiLine(calculatedScale.labels[j + 1], yAxisPosX + msr.availableWidth + (Math.ceil(ctx.chartLineScale * config.scaleTickSizeRight) + Math.ceil(ctx.chartSpaceScale * config.yAxisSpaceRight)), xAxisPosY - ((j + 1) * scaleHop), ctx.textBaseline, (Math.ceil(ctx.chartTextScale * config.scaleFontSize)), true, config.detectMouseOnText, ctx, \"YRIGHTAXIS_TEXTMOUSE\", 0, 0, 0, -1, j);\r\n }\r\n }\r\n }\r\n }\r\n if (config.yAxisRight && valueBounds.dbAxis) {\r\n for (j = ((config.showYAxisMin) ? -1 : 0); j < calculatedScale2.steps; j++) {\r\n if (config.scaleShowLabels) {\r\n ctx.textAlign = \"left\";\r\n ctx.fillTextMultiLine(calculatedScale2.labels[j + 1], yAxisPosX + msr.availableWidth + (Math.ceil(ctx.chartLineScale * config.scaleTickSizeRight) + Math.ceil(ctx.chartSpaceScale * config.yAxisSpaceRight)), xAxisPosY - ((j + 1) * scaleHop2), ctx.textBaseline, (Math.ceil(ctx.chartTextScale * config.scaleFontSize)), true, config.detectMouseOnText, ctx, \"YRIGHTAXIS_TEXTMOUSE\", 0, 0, 0, -1, j);\r\n }\r\n }\r\n }\r\n };\r\n\r\n function getValueBounds() {\r\n var upperValue = -Number.MAX_VALUE;\r\n var lowerValue = Number.MAX_VALUE;\r\n var upperValue2 = -Number.MAX_VALUE;\r\n var lowerValue2 = Number.MAX_VALUE;\r\n var secondAxis = false;\r\n var firstAxis = false;\r\n var mathValueHeight;\r\n for (var i = 0; i < data.datasets.length; i++) {\r\n var mathFctName = data.datasets[i].drawMathDeviation;\r\n var mathValueHeight = 0;\r\n if (typeof eval(mathFctName) == \"function\") {\r\n var parameter = {\r\n data: data,\r\n datasetNr: i\r\n };\r\n mathValueHeightVal = window[mathFctName](parameter);\r\n } else mathValueHeightVal = 0;\r\n for (var j = 0; j < data.datasets[i].data.length; j++) {\r\n if (typeof mathValueHeightVal == \"object\") mathValueHeight = mathValueHeightVal[Math.min(mathValueHeightVal.length, j)];\r\n else mathValueHeight = mathValueHeightVal;\r\n if (typeof data.datasets[i].data[j] == \"undefined\") continue;\r\n if (data.datasets[i].axis == 2) {\r\n secondAxis = true;\r\n if (1 * data.datasets[i].data[j] + mathValueHeight > upperValue2) {\r\n upperValue2 = 1 * data.datasets[i].data[j] + mathValueHeight;\r\n };\r\n if (1 * data.datasets[i].data[j] - mathValueHeight < lowerValue2) {\r\n lowerValue2 = 1 * data.datasets[i].data[j] - mathValueHeight;\r\n };\r\n } else {\r\n firstAxis = true;\r\n if (1 * data.datasets[i].data[j] + mathValueHeight > upperValue) {\r\n upperValue = 1 * data.datasets[i].data[j] + mathValueHeight;\r\n };\r\n if (1 * data.datasets[i].data[j] - mathValueHeight < lowerValue) {\r\n lowerValue = 1 * data.datasets[i].data[j] - mathValueHeight;\r\n };\r\n }\r\n }\r\n };\r\n if (upperValue < lowerValue) { upperValue = 0; lowerValue = 0; }\r\n if (Math.abs(upperValue - lowerValue) < config.zeroValue) {\r\n if (Math.abs(upperValue) < config.zeroValue) upperValue = .9;\r\n if (upperValue > 0) {\r\n upperValue = upperValue * 1.1;\r\n lowerValue = lowerValue * 0.9;\r\n } else {\r\n upperValue = upperValue * 0.9;\r\n lowerValue = lowerValue * 1.1;\r\n }\r\n }\r\n if (typeof config.graphMin == \"function\") lowerValue = setOptionValue(1, \"GRAPHMIN\", ctx, data, statData, undefined, config.graphMin, -1, -1, { nullValue: true })\r\n else if (!isNaN(config.graphMin)) lowerValue = config.graphMin;\r\n if (typeof config.graphMax == \"function\") upperValue = setOptionValue(1, \"GRAPHMAX\", ctx, data, statData, undefined, config.graphMax, -1, -1, { nullValue: true })\r\n else if (!isNaN(config.graphMax)) upperValue = config.graphMax;\r\n\r\n if (secondAxis) {\r\n if (upperValue2 < lowerValue2) { upperValue2 = 0; lowerValue2 = 0; }\r\n if (Math.abs(upperValue2 - lowerValue2) < config.zeroValue) {\r\n if (Math.abs(upperValue2) < config.zeroValue) upperValue2 = .9;\r\n if (upperValue2 > 0) {\r\n upperValue2 = upperValue2 * 1.1;\r\n lowerValue2 = lowerValue2 * 0.9;\r\n } else {\r\n upperValue2 = upperValue2 * 0.9;\r\n lowerValue2 = lowerValue2 * 1.1;\r\n }\r\n }\r\n if (typeof config.graphMin2 == \"function\") lowerValue2 = setOptionValue(1, \"GRAPHMIN\", ctx, data, statData, undefined, config.graphMin2, -1, -1, { nullValue: true })\r\n else if (!isNaN(config.graphMin2)) lowerValue2 = config.graphMin2;\r\n if (typeof config.graphMax2 == \"function\") upperValue2 = setOptionValue(1, \"GRAPHMAX\", ctx, data, statData, undefined, config.graphMax2, -1, -1, { nullValue: true })\r\n else if (!isNaN(config.graphMax2)) upperValue2 = config.graphMax2;\r\n }\r\n if (!firstAxis && secondAxis) {\r\n upperValue = upperValue2;\r\n lowerValue = lowerValue2;\r\n }\r\n\r\n labelHeight = (Math.ceil(ctx.chartTextScale * config.scaleFontSize));\r\n scaleHeight = msr.availableHeight;\r\n var maxSteps = Math.floor((scaleHeight / (labelHeight * 0.66)));\r\n var minSteps = Math.floor((scaleHeight / labelHeight * 0.5));\r\n if (upperValue < lowerValue) { lowerValue = upperValue - 1; }\r\n if (upperValue2 < lowerValue2) { lowerValue2 = upperValue2 - 1; }\r\n return {\r\n maxValue: upperValue,\r\n minValue: lowerValue,\r\n maxValue2: upperValue2,\r\n minValue2: lowerValue2,\r\n dbAxis: secondAxis,\r\n maxSteps: maxSteps,\r\n minSteps: minSteps\r\n };\r\n };\r\n\r\n return {\r\n data: data,\r\n config: config,\r\n ctx: ctx\r\n };\r\n };\r\n\r\n var HorizontalBar = function (data, config, ctx) {\r\n var maxSize, scaleHop, calculatedScale, labelHeight, scaleHeight, valueBounds, labelTemplateString, valueHop, widestXLabel, xAxisLength, yAxisPosX, xAxisPosY, barWidth, rotateLabels = 0,\r\n msr;\r\n ctx.tpchart = \"HorizontalBar\";\r\n ctx.tpdata = 0;\r\n\r\n if (!init_and_start(ctx, data, config)) return;\r\n\r\n if (config.reverseOrder && typeof ctx.reversed == \"undefined\") {\r\n ctx.reversed = true;\r\n data = reverseData(data);\r\n }\r\n\r\n var statData = initPassVariableData_part1(data, config, ctx);\r\n\r\n msr = setMeasures(data, config, ctx, height, width, \"nihil\", [\"\"], true, true, true, true, true, \"StackedBar\");\r\n valueBounds = getValueBounds();\r\n if (valueBounds.minValue <= 0) config.logarithmic = false;\r\n if (valueBounds.maxSteps > 0 && valueBounds.minSteps > 0) {\r\n if (config.logarithmic !== false) {\r\n if (valueBounds.minValue <= 0) {\r\n config.logarithmic = false;\r\n }\r\n }\r\n //Check and set the scale\r\n labelTemplateString = (config.scaleShowLabels) ? config.scaleLabel : \"\";\r\n if (!config.scaleOverride) {\r\n calculatedScale = calculateScale(1, config, valueBounds.maxSteps, valueBounds.minSteps, valueBounds.maxValue, valueBounds.minValue, labelTemplateString);\r\n msr = setMeasures(data, config, ctx, height, width, calculatedScale.labels, null, true, true, true, true, true, \"HorizontalBar\");\r\n } else {\r\n var scaleStartValue = setOptionValue(1, \"SCALESTARTVALUE\", ctx, data, statData, undefined, config.scaleStartValue, -1, -1, { nullValue: true });\r\n var scaleSteps = setOptionValue(1, \"SCALESTEPS\", ctx, data, statData, undefined, config.scaleSteps, -1, -1, { nullValue: true });\r\n var scaleStepWidth = setOptionValue(1, \"SCALESTEPWIDTH\", ctx, data, statData, undefined, config.scaleStepWidth, -1, -1, { nullValue: true });\r\n\r\n calculatedScale = {\r\n steps: scaleSteps,\r\n stepValue: scaleStepWidth,\r\n graphMin: scaleStartValue,\r\n graphMax: scaleStartValue + scaleSteps * scaleStepWidth,\r\n labels: []\r\n }\r\n populateLabels(1, config, labelTemplateString, calculatedScale.labels, calculatedScale.steps, scaleStartValue, calculatedScale.graphMax, scaleStepWidth);\r\n msr = setMeasures(data, config, ctx, height, width, calculatedScale.labels, null, true, true, true, true, true, \"HorizontalBar\");\r\n }\r\n msr.availableHeight = msr.availableHeight - Math.ceil(ctx.chartLineScale * config.scaleTickSizeBottom) - Math.ceil(ctx.chartLineScale * config.scaleTickSizeTop);\r\n msr.availableWidth = msr.availableWidth - Math.ceil(ctx.chartLineScale * config.scaleTickSizeLeft) - Math.ceil(ctx.chartLineScale * config.scaleTickSizeRight);\r\n scaleHop = Math.floor(msr.availableHeight / data.labels.length);\r\n valueHop = Math.floor(msr.availableWidth / (calculatedScale.steps));\r\n if (valueHop == 0 || config.fullWidthGraph) valueHop = (msr.availableWidth / calculatedScale.steps);\r\n msr.clrwidth = msr.clrwidth - (msr.availableWidth - (calculatedScale.steps * valueHop));\r\n msr.availableWidth = (calculatedScale.steps) * valueHop;\r\n msr.availableHeight = (data.labels.length) * scaleHop;\r\n yAxisPosX = msr.leftNotUsableSize + Math.ceil(ctx.chartLineScale * config.scaleTickSizeLeft);\r\n xAxisPosY = msr.topNotUsableSize + msr.availableHeight + Math.ceil(ctx.chartLineScale * config.scaleTickSizeTop);\r\n barWidth = (scaleHop - Math.ceil(ctx.chartLineScale * config.scaleGridLineWidth) * 2 - (Math.ceil(ctx.chartSpaceScale * config.barValueSpacing) * 2) - (Math.ceil(ctx.chartSpaceScale * config.barDatasetSpacing) * data.datasets.length - 1) - ((Math.ceil(ctx.chartLineScale * config.barStrokeWidth) / 2) * data.datasets.length - 1)) / data.datasets.length;\r\n if (barWidth >= 0 && barWidth <= 1) barWidth = 1;\r\n if (barWidth < 0 && barWidth >= -1) barWidth = -1;\r\n var additionalSpaceBetweenBars;\r\n if (1 * config.maxBarWidth > 0 && barWidth > 1 * config.maxBarWidth) {\r\n additionalSpaceBetweenBars = data.datasets.length * (barWidth - 1 * config.maxBarWidth) / 2;\r\n barWidth = 1 * config.maxBarWidth;\r\n } else additionalSpaceBetweenBars = 0;\r\n\r\n var zeroY = 0;\r\n zeroY = calculateOffset(config.logarithmic, 0, calculatedScale, valueHop);\r\n drawLabels();\r\n initPassVariableData_part2(statData, data, config, ctx, {\r\n yAxisPosX: yAxisPosX,\r\n xAxisPosY: xAxisPosY,\r\n barWidth: barWidth,\r\n additionalSpaceBetweenBars: additionalSpaceBetweenBars,\r\n zeroY: zeroY,\r\n scaleHop: scaleHop,\r\n valueHop: valueHop,\r\n calculatedScale: calculatedScale\r\n });\r\n animationLoop(config, drawScale, drawBars, ctx, msr.clrx, msr.clry, msr.clrwidth, msr.clrheight, yAxisPosX + msr.availableWidth / 2, xAxisPosY - msr.availableHeight / 2, yAxisPosX, xAxisPosY, data, statData);\r\n } else {\r\n testRedraw(ctx, data, config);\r\n }\r\n\r\n function drawBars(animPc) {\r\n for (var i = 0; i < data.datasets.length; i++) {\r\n for (var j = 0; j < data.datasets[i].data.length; j++) {\r\n ctx.lineWidth = Math.ceil(ctx.chartLineScale * config.barStrokeWidth);\r\n var currentAnimPc = animationCorrection(animPc, data, config, i, j, 1).animVal;\r\n if (currentAnimPc > 1) currentAnimPc = currentAnimPc - 1;\r\n var barHeight = currentAnimPc * statData[i][j].barWidth + (Math.ceil(ctx.chartLineScale * config.barStrokeWidth) / 2);\r\n ctx.fillStyle = setOptionValue(1, \"COLOR\", ctx, data, statData, data.datasets[i].fillColor, config.defaultFillColor, i, j, { animationValue: currentAnimPc, xPosLeft: statData[i][j].xPosLeft, yPosBottom: statData[i][j].yPosBottom, xPosRight: statData[i][j].xPosLeft + barHeight, yPosTop: statData[i][j].yPosBottom });\r\n ctx.strokeStyle = setOptionValue(1, \"STROKECOLOR\", ctx, data, statData, data.datasets[i].strokeColor, config.defaultStrokeColor, i, j, { nullvalue: null });\r\n\r\n if (!(typeof (data.datasets[i].data[j]) == 'undefined')) {\r\n roundRect(ctx, statData[i][j].yPosTop, statData[i][j].xPosLeft, barWidth, barHeight, config.barShowStroke, config.barBorderRadius, 0, i, j, (data.datasets[i].data[j] < 0 ? -1 : 1));\r\n }\r\n }\r\n }\r\n if (animPc >= config.animationStopValue) {\r\n for (i = 0; i < data.datasets.length; i++) {\r\n for (j = 0; j < data.datasets[i].data.length; j++) {\r\n if (typeof (data.datasets[i].data[j]) == 'undefined') continue;\r\n //\t\t\t\t\t\tif(setOptionValue(1,\"ANNOTATEDISPLAY\",ctx,data,statData,undefined,config.annotateDisplay,i,j,{nullValue : true})) {\r\n jsGraphAnnotate[ctx.ChartNewId][jsGraphAnnotate[ctx.ChartNewId].length] = [\"RECT\", i, j, statData, setOptionValue(1, \"ANNOTATEDISPLAY\", ctx, data, statData, data.datasets[i].annotateDisplay, config.annotateDisplay, i, j, { nullValue: true })];\r\n // \t\t\t\t}\r\n if (setOptionValue(1, \"INGRAPHDATASHOW\", ctx, data, statData, data.datasets[i].inGraphDataShow, config.inGraphDataShow, i, j, { nullValue: true })) {\r\n ctx.save();\r\n ctx.textAlign = setOptionValue(1, \"INGRAPHDATAALIGN\", ctx, data, statData, undefined, config.inGraphDataAlign, i, j, { nullValue: true });\r\n ctx.textBaseline = setOptionValue(1, \"INGRAPHDATAVALIGN\", ctx, data, statData, undefined, config.inGraphDataVAlign, i, j, { nullValue: true });\r\n ctx.font = setOptionValue(1, \"INGRAPHDATAFONTSTYLE\", ctx, data, statData, undefined, config.inGraphDataFontStyle, i, j, { nullValue: true }) + ' ' + setOptionValue(ctx.chartTextScale, \"INGRAPHDATAFONTSIZE\", ctx, data, statData, undefined, config.inGraphDataFontSize, i, j, { nullValue: true }) + 'px ' + setOptionValue(1, \"INGRAPHDATAFONTFAMILY\", ctx, data, statData, undefined, config.inGraphDataFontFamily, i, j, { nullValue: true });\r\n ctx.fillStyle = setOptionValue(1, \"INGRAPHDATAFONTCOLOR\", ctx, data, statData, undefined, config.inGraphDataFontColor, i, j, { nullValue: true });\r\n ctx.beginPath();\r\n var yPos = 0,\r\n xPos = 0;\r\n if (setOptionValue(1, \"INGRAPHDATAYPOSITION\", ctx, data, statData, undefined, config.inGraphDataYPosition, i, j, { nullValue: true }) == 1) {\r\n yPos = statData[i][j].yPosTop - setOptionValue(ctx.chartSpaceScale, \"INGRAPHDATAPADDINGY\", ctx, data, statData, undefined, config.inGraphDataPaddingY, i, j, { nullValue: true }) + barWidth;\r\n } else if (setOptionValue(1, \"INGRAPHDATAYPOSITION\", ctx, data, statData, undefined, config.inGraphDataYPosition, i, j, { nullValue: true }) == 2) {\r\n yPos = statData[i][j].yPosTop + barWidth / 2 - setOptionValue(ctx.chartSpaceScale, \"INGRAPHDATAPADDINGY\", ctx, data, statData, undefined, config.inGraphDataPaddingY, i, j, { nullValue: true });\r\n } else if (setOptionValue(1, \"INGRAPHDATAYPOSITION\", ctx, data, statData, undefined, config.inGraphDataYPosition, i, j, { nullValue: true }) == 3) {\r\n yPos = statData[i][j].yPosTop - setOptionValue(ctx.chartSpaceScale, \"INGRAPHDATAPADDINGY\", ctx, data, statData, undefined, config.inGraphDataPaddingY, i, j, { nullValue: true });\r\n }\r\n if (setOptionValue(1, \"INGRAPHDATAXPOSITION\", ctx, data, statData, undefined, config.inGraphDataXPosition, i, j, { nullValue: true }) == 1) {\r\n xPos = statData[i][j].xPosLeft + setOptionValue(ctx.chartSpaceScale, \"INGRAPHDATAPADDINGX\", ctx, data, statData, undefined, config.inGraphDataPaddingX, i, j, { nullValue: true });\r\n } else if (setOptionValue(1, \"INGRAPHDATAXPOSITION\", ctx, data, statData, undefined, config.inGraphDataXPosition, i, j, { nullValue: true }) == 2) {\r\n xPos = (statData[i][j].xPosLeft + statData[i][j].xPosRight) / 2 + setOptionValue(ctx.chartSpaceScale, \"INGRAPHDATAPADDINGX\", ctx, data, statData, undefined, config.inGraphDataPaddingX, i, j, { nullValue: true });\r\n } else if (setOptionValue(1, \"INGRAPHDATAXPOSITION\", ctx, data, statData, undefined, config.inGraphDataXPosition, i, j, { nullValue: true }) == 3) {\r\n xPos = statData[i][j].xPosRight + setOptionValue(ctx.chartSpaceScale, \"INGRAPHDATAPADDINGX\", ctx, data, statData, undefined, config.inGraphDataPaddingX, i, j, { nullValue: true });\r\n }\r\n ctx.translate(xPos, yPos);\r\n var dispString = tmplbis(setOptionValue(1, \"INGRAPHDATATMPL\", ctx, data, statData, undefined, config.inGraphDataTmpl, i, j, { nullValue: true }), statData[i][j], config);\r\n var rotateVal = setOptionValue(1, \"INGRAPHDATAROTATE\", ctx, data, statData, undefined, config.inGraphDataRotate, i, j, { nullValue: true }) * (Math.PI / 180);\r\n ctx.rotate(rotateVal);\r\n setTextBordersAndBackground(ctx, dispString, setOptionValue(ctx.chartTextScale, \"INGRAPHDATAFONTSIZE\", ctx, data, statData, undefined, config.inGraphDataFontSize, i, j, { nullValue: true }), 0, 0, setOptionValue(1, \"INGRAPHDATABORDERS\", ctx, data, statData, undefined, config.inGraphDataBorders, i, j, { nullValue: true }), setOptionValue(1, \"INGRAPHDATABORDERSCOLOR\", ctx, data, statData, undefined, config.inGraphDataBordersColor, i, j, { nullValue: true }), setOptionValue(ctx.chartLineScale, \"INGRAPHDATABORDERSWIDTH\", ctx, data, statData, undefined, config.inGraphDataBordersWidth, i, j, { nullValue: true }), setOptionValue(ctx.chartSpaceScale, \"INGRAPHDATABORDERSXSPACE\", ctx, data, statData, undefined, config.inGraphDataBordersXSpace, i, j, { nullValue: true }), setOptionValue(ctx.chartSpaceScale, \"INGRAPHDATABORDERSYSPACE\", ctx, data, statData, undefined, config.inGraphDataBordersYSpace, i, j, { nullValue: true }), setOptionValue(1, \"INGRAPHDATABORDERSSTYLE\", ctx, data, statData, undefined, config.inGraphDataBordersStyle, i, j, { nullValue: true }), setOptionValue(1, \"INGRAPHDATABACKGROUNDCOLOR\", ctx, data, statData, undefined, config.inGraphDataBackgroundColor, i, j, { nullValue: true }), \"INGRAPHDATA\");\r\n ctx.fillTextMultiLine(dispString, 0, 0, ctx.textBaseline, setOptionValue(ctx.chartTextScale, \"INGRAPHDATAFONTSIZE\", ctx, data, statData, undefined, config.inGraphDataFontSize, i, j, { nullValue: true }), true, config.detectMouseOnText, ctx, \"INGRAPHDATA_TEXTMOUSE\", rotateVal, xPos, yPos, i, j);\r\n ctx.restore();\r\n }\r\n }\r\n }\r\n }\r\n if (msr.legendMsr.dispLegend) drawLegend(msr.legendMsr, data, config, ctx, \"HorizontalBar\");\r\n };\r\n\r\n function roundRect(ctx, x, y, w, h, stroke, radius, zeroY, i, j, fact) {\r\n ctx.beginPath();\r\n ctx.moveTo(y + zeroY, x + radius);\r\n ctx.lineTo(y + zeroY, x + w - radius);\r\n ctx.quadraticCurveTo(y + zeroY, x + w, y + zeroY, x + w);\r\n ctx.lineTo(y + h - fact * radius, x + w);\r\n ctx.quadraticCurveTo(y + h, x + w, y + h, x + w - radius);\r\n ctx.lineTo(y + h, x + radius);\r\n ctx.quadraticCurveTo(y + h, x, y + h - fact * radius, x);\r\n ctx.lineTo(y + zeroY, x);\r\n ctx.quadraticCurveTo(y + zeroY, x, y + zeroY, x + radius);\r\n if (stroke) {\r\n ctx.setLineDash(lineStyleFn(setOptionValue(1, \"STROKESTYLE\", ctx, data, statData, data.datasets[i].datasetStrokeStyle, config.datasetStrokeStyle, i, j, { nullvalue: null })));\r\n ctx.stroke();\r\n ctx.setLineDash([]);\r\n };\r\n ctx.closePath();\r\n ctx.fill();\r\n };\r\n\r\n function drawScale() {\r\n //X axis line \r\n ctx.lineWidth = Math.ceil(ctx.chartLineScale * config.scaleLineWidth);\r\n ctx.strokeStyle = config.scaleLineColor;\r\n ctx.setLineDash(lineStyleFn(config.scaleLineStyle));\r\n ctx.beginPath();\r\n ctx.moveTo(yAxisPosX - Math.ceil(ctx.chartLineScale * config.scaleTickSizeLeft), xAxisPosY);\r\n ctx.lineTo(yAxisPosX + msr.availableWidth + Math.ceil(ctx.chartLineScale * config.scaleTickSizeRight), xAxisPosY);\r\n ctx.stroke();\r\n ctx.setLineDash([]);\r\n\r\n ctx.setLineDash(lineStyleFn(config.scaleGridLineStyle));\r\n for (var i = ((config.showYAxisMin) ? -1 : 0); i < calculatedScale.steps; i++) {\r\n if (i >= 0) {\r\n ctx.beginPath();\r\n ctx.moveTo(yAxisPosX + i * valueHop, xAxisPosY + Math.ceil(ctx.chartLineScale * config.scaleTickSizeBottom));\r\n ctx.lineWidth = Math.ceil(ctx.chartLineScale * config.scaleGridLineWidth);\r\n ctx.strokeStyle = config.scaleGridLineColor;\r\n //Check i isnt 0, so we dont go over the Y axis twice.\r\n if (config.scaleShowGridLines && i > 0 && i % config.scaleXGridLinesStep == 0) {\r\n ctx.lineTo(yAxisPosX + i * valueHop, xAxisPosY - msr.availableHeight - Math.ceil(ctx.chartLineScale * config.scaleTickSizeTop));\r\n } else {\r\n ctx.lineTo(yAxisPosX + i * valueHop, xAxisPosY);\r\n }\r\n ctx.stroke();\r\n }\r\n\r\n }\r\n ctx.setLineDash([]);\r\n //Y axis\r\n ctx.lineWidth = Math.ceil(ctx.chartLineScale * config.scaleLineWidth);\r\n ctx.strokeStyle = config.scaleLineColor;\r\n ctx.setLineDash(lineStyleFn(config.scaleLineStyle));\r\n ctx.beginPath();\r\n ctx.moveTo(yAxisPosX, xAxisPosY + Math.ceil(ctx.chartLineScale * config.scaleTickSizeBottom));\r\n ctx.lineTo(yAxisPosX, xAxisPosY - msr.availableHeight - Math.ceil(ctx.chartLineScale * config.scaleTickSizeTop));\r\n ctx.stroke();\r\n ctx.setLineDash([]);\r\n ctx.setLineDash(lineStyleFn(config.scaleGridLineStyle));\r\n for (var j = 0; j < data.labels.length; j++) {\r\n ctx.beginPath();\r\n ctx.moveTo(yAxisPosX - Math.ceil(ctx.chartLineScale * config.scaleTickSizeLeft), xAxisPosY - ((j + 1) * scaleHop));\r\n ctx.lineWidth = Math.ceil(ctx.chartLineScale * config.scaleGridLineWidth);\r\n ctx.strokeStyle = config.scaleGridLineColor;\r\n if (config.scaleShowGridLines && (j + 1) % config.scaleYGridLinesStep == 0) {\r\n ctx.lineTo(yAxisPosX + msr.availableWidth + Math.ceil(ctx.chartLineScale * config.scaleTickSizeRight), xAxisPosY - ((j + 1) * scaleHop));\r\n } else {\r\n ctx.lineTo(yAxisPosX, xAxisPosY - ((j + 1) * scaleHop));\r\n }\r\n ctx.stroke();\r\n }\r\n ctx.setLineDash([]);\r\n };\r\n\r\n function drawLabels() {\r\n ctx.font = config.scaleFontStyle + \" \" + (Math.ceil(ctx.chartTextScale * config.scaleFontSize)).toString() + \"px \" + config.scaleFontFamily;\r\n //X axis line \r\n if (config.scaleShowLabels && (config.xAxisTop || config.xAxisBottom)) {\r\n ctx.textBaseline = \"top\";\r\n if (msr.rotateLabels > 90) {\r\n ctx.save();\r\n ctx.textAlign = \"left\";\r\n } else if (msr.rotateLabels > 0) {\r\n ctx.save();\r\n ctx.textAlign = \"right\";\r\n } else {\r\n ctx.textAlign = \"center\";\r\n }\r\n ctx.fillStyle = config.scaleFontColor;\r\n if (config.xAxisBottom) {\r\n for (var i = ((config.showYAxisMin) ? -1 : 0); i < calculatedScale.steps; i++) {\r\n if (showYLabels(ctx, data, config, i + 1, calculatedScale.labels[i + 1])) {\r\n ctx.save();\r\n if (msr.rotateLabels > 0) {\r\n ctx.translate(yAxisPosX + (i + 1) * valueHop - msr.highestXLabel / 2, msr.xLabelPos);\r\n ctx.rotate(-(msr.rotateLabels * (Math.PI / 180)));\r\n ctx.fillTextMultiLine(calculatedScale.labels[i + 1], 0, 0, ctx.textBaseline, (Math.ceil(ctx.chartTextScale * config.scaleFontSize)), true, config.detectMouseOnText, ctx, \"XAXIS_TEXTMOUSE\", -(msr.rotateLabels * (Math.PI / 180)), yAxisPosX + (i + 1) * valueHop - msr.highestXLabel / 2, msr.xLabelPos, i, -1);\r\n } else {\r\n ctx.fillTextMultiLine(calculatedScale.labels[i + 1], yAxisPosX + (i + 1) * valueHop, msr.xLabelPos, ctx.textBaseline, (Math.ceil(ctx.chartTextScale * config.scaleFontSize)), true, config.detectMouseOnText, ctx, \"XAXIS_TEXTMOUSE\", 0, 0, 0, i, -1);\r\n }\r\n ctx.restore();\r\n }\r\n }\r\n }\r\n }\r\n //Y axis\r\n ctx.textAlign = \"right\";\r\n ctx.textBaseline = \"middle\";\r\n for (var j = 0; j < data.labels.length; j++) {\r\n if (showLabels(ctx, data, config, j)) {\r\n if (config.yAxisLeft) {\r\n ctx.textAlign = \"right\";\r\n ctx.fillTextMultiLine(fmtChartJS(config, data.labels[j], config.fmtXLabel), yAxisPosX - (Math.ceil(ctx.chartLineScale * config.scaleTickSizeLeft) + Math.ceil(ctx.chartSpaceScale * config.yAxisSpaceRight)), xAxisPosY - (j * scaleHop) - scaleHop / 2, ctx.textBaseline, (Math.ceil(ctx.chartTextScale * config.scaleFontSize)), true, config.detectMouseOnText, ctx, \"YLEFTAXIS_TEXTMOUSE\", 0, 0, 0, -1, j);\r\n }\r\n if (config.yAxisRight) {\r\n ctx.textAlign = \"left\";\r\n ctx.fillTextMultiLine(fmtChartJS(config, data.labels[j], config.fmtXLabel), yAxisPosX + msr.availableWidth + (Math.ceil(ctx.chartLineScale * config.scaleTickSizeRight) + Math.ceil(ctx.chartSpaceScale * config.yAxisSpaceRight)), xAxisPosY - (j * scaleHop) - scaleHop / 2, ctx.textBaseline, (Math.ceil(ctx.chartTextScale * config.scaleFontSize)), true, config.detectMouseOnText, ctx, \"YRIGHTAXIS_TEXTMOUSE\", 0, 0, 0, -1, j);\r\n }\r\n }\r\n }\r\n };\r\n\r\n function getValueBounds() {\r\n var upperValue = -Number.MAX_VALUE;\r\n var lowerValue = Number.MAX_VALUE;\r\n for (var i = 0; i < data.datasets.length; i++) {\r\n for (var j = 0; j < data.datasets[i].data.length; j++) {\r\n if (typeof data.datasets[i].data[j] == \"undefined\") continue;\r\n if (1 * data.datasets[i].data[j] > upperValue) {\r\n upperValue = 1 * data.datasets[i].data[j]\r\n };\r\n if (1 * data.datasets[i].data[j] < lowerValue) {\r\n lowerValue = 1 * data.datasets[i].data[j]\r\n };\r\n }\r\n };\r\n if (upperValue < lowerValue) { upperValue = 0; lowerValue = 0; }\r\n if (Math.abs(upperValue - lowerValue) < config.zeroValue) {\r\n if (Math.abs(upperValue) < config.zeroValue) upperValue = .9;\r\n if (upperValue > 0) {\r\n upperValue = upperValue * 1.1;\r\n lowerValue = lowerValue * 0.9;\r\n } else {\r\n upperValue = upperValue * 0.9;\r\n lowerValue = lowerValue * 1.1;\r\n }\r\n }\r\n // AJOUT CHANGEMENT\r\n if (typeof config.graphMin == \"function\") lowerValue = setOptionValue(1, \"GRAPHMIN\", ctx, data, statData, undefined, config.graphMin, -1, -1, { nullValue: true })\r\n else if (!isNaN(config.graphMin)) lowerValue = config.graphMin;\r\n if (typeof config.graphMax == \"function\") upperValue = setOptionValue(1, \"GRAPHMAX\", ctx, data, statData, undefined, config.graphMax, -1, -1, { nullValue: true })\r\n else if (!isNaN(config.graphMax)) upperValue = config.graphMax;\r\n\r\n labelHeight = (Math.ceil(ctx.chartTextScale * config.scaleFontSize));\r\n scaleHeight = msr.availableHeight;\r\n\r\n var maxSteps = Math.floor((scaleHeight / (labelHeight * 0.66)));\r\n var minSteps = Math.floor((scaleHeight / labelHeight * 0.5));\r\n if (upperValue < lowerValue) { lowerValue = upperValue - 1; }\r\n return {\r\n maxValue: upperValue,\r\n minValue: lowerValue,\r\n maxSteps: maxSteps,\r\n minSteps: minSteps\r\n };\r\n };\r\n\r\n return {\r\n data: data,\r\n config: config,\r\n ctx: ctx\r\n };\r\n };\r\n\r\n function calculateOffset(logarithmic, val, calculatedScale, scaleHop) {\r\n if (!logarithmic) { // no logarithmic scale\r\n var outerValue = calculatedScale.steps * calculatedScale.stepValue;\r\n var adjustedValue = val - calculatedScale.graphMin;\r\n var scalingFactor = CapValue(adjustedValue / outerValue, 1, 0);\r\n return (scaleHop * calculatedScale.steps) * scalingFactor;\r\n } else { // logarithmic scale\r\n //\t\t\treturn CapValue(log10(val) * scaleHop - calculateOrderOfMagnitude(calculatedScale.graphMin) * scaleHop, undefined, 0);\r\n return CapValue(log10(val) * scaleHop - log10(calculatedScale.graphMin) * scaleHop, undefined, 0);\r\n }\r\n };\r\n\r\n function animationLoop(config, drawScale, drawData, ctx, clrx, clry, clrwidth, clrheight, midPosX, midPosY, borderX, borderY, data, statData) {\r\n var cntiter = 0;\r\n var animationCount = 1;\r\n var multAnim = 1;\r\n if (config.animationStartValue < 0 || config.animationStartValue > 1) config.animation.StartValue = 0;\r\n if (config.animationStopValue < 0 || config.animationStopValue > 1) config.animation.StopValue = 1;\r\n if (config.animationStopValue < config.animationStartValue) config.animationStopValue = config.animationStartValue;\r\n if (isIE() < 9 && isIE() != false) config.animation = false;\r\n var animFrameAmount = (config.animation) ? 1 / CapValue(config.animationSteps, Number.MAX_VALUE, 1) : 1,\r\n easingFunction = animationOptions[config.animationEasing],\r\n percentAnimComplete = (config.animation) ? 0 : 1;\r\n if (config.animation && config.animationStartValue > 0 && config.animationStartValue <= 1) {\r\n while (percentAnimComplete < config.animationStartValue) {\r\n cntiter++;\r\n percentAnimComplete += animFrameAmount;\r\n }\r\n }\r\n var beginAnim = cntiter;\r\n var beginAnimPct = percentAnimComplete;\r\n if (typeof drawScale !== \"function\") drawScale = function () { };\r\n if (config.clearRect) {\r\n if (config.animationForceSetTimeOut) requestAnimFrameSetTimeOut(animLoop);\r\n else requestAnimFrame(animLoop);\r\n } else animLoop();\r\n\r\n function animateFrame() {\r\n var easeAdjustedAnimationPercent = (config.animation) ? CapValue(easingFunction(percentAnimComplete), null, 0) : 1;\r\n if (1 * cntiter >= 1 * CapValue(config.animationSteps, Number.MAX_VALUE, 1) || config.animation == false || ctx.firstPass == 3 || ctx.firstPass == 4 || ctx.firstPass == 8 || ctx.firstPass == 9) easeAdjustedAnimationPercent = 1;\r\n else if (easeAdjustedAnimationPercent >= 1) easeAdjustedAnimationPercent = 0.9999;\r\n if (config.animation && !(isIE() < 9 && isIE() != false) && config.clearRect) ctx.clearRect(clrx, clry, clrwidth, clrheight);\r\n dispCrossImage(ctx, config, midPosX, midPosY, borderX, borderY, false, data, easeAdjustedAnimationPercent, cntiter);\r\n dispCrossText(ctx, config, midPosX, midPosY, borderX, borderY, false, data, easeAdjustedAnimationPercent, cntiter);\r\n if (typeof config.beforeDrawFunction == \"function\") config.beforeDrawFunction(\"BEFOREDRAWFUNCTION\", ctx, data, statData, -1, -1, { animationValue: easeAdjustedAnimationPercent, cntiter: cntiter, config: config, borderX: borderX, borderY: borderY, midPosX: midPosX, midPosY: midPosY });\r\n if (config.scaleOverlay) {\r\n drawData(easeAdjustedAnimationPercent);\r\n if (typeof config.endDrawDataFunction == \"function\") config.endDrawDataFunction(\"ENDDATAFUNCTION\", ctx, data, statData, -1, -1, { animationValue: easeAdjustedAnimationPercent, cntiter: cntiter, config: config, borderX: borderX, borderY: borderY, midPosX: midPosX, midPosY: midPosY });\r\n drawScale();\r\n if (typeof config.endDrawScaleFunction == \"function\") config.endDrawScaleFunction(\"ENDSCALEFUNCTION\", ctx, data, statData, -1, -1, { animationValue: easeAdjustedAnimationPercent, cntiter: cntiter, config: config, borderX: borderX, borderY: borderY, midPosX: midPosX, midPosY: midPosY });\r\n } else {\r\n drawScale();\r\n if (typeof config.endDrawScaleFunction == \"function\") config.endDrawScaleFunction(\"ENDSCALEFUNCTION\", ctx, data, statData, -1, -1, { animationValue: easeAdjustedAnimationPercent, cntiter: cntiter, config: config, borderX: borderX, borderY: borderY, midPosX: midPosX, midPosY: midPosY });\r\n drawData(easeAdjustedAnimationPercent);\r\n if (typeof config.endDrawDataFunction == \"function\") config.endDrawDataFunction(\"ENDDATAFUNCTION\", ctx, data, statData, -1, -1, { animationValue: easeAdjustedAnimationPercent, cntiter: cntiter, config: config, borderX: borderX, borderY: borderY, midPosX: midPosX, midPosY: midPosY });\r\n }\r\n dispCrossImage(ctx, config, midPosX, midPosY, borderX, borderY, true, data, easeAdjustedAnimationPercent, cntiter);\r\n dispCrossText(ctx, config, midPosX, midPosY, borderX, borderY, true, data, easeAdjustedAnimationPercent, cntiter);\r\n };\r\n\r\n function animLoop() {\r\n //We need to check if the animation is incomplete (less than 1), or complete (1).\r\n cntiter += multAnim;\r\n percentAnimComplete += multAnim * animFrameAmount;\r\n if (cntiter == config.animationSteps || config.animation == false || ctx.firstPass == 3 || ctx.firstPass == 4 || ctx.firstPass == 8 || ctx.firstPass == 9) percentAnimComplete = 1;\r\n else if (percentAnimComplete >= 1) percentAnimComplete = 0.999;\r\n animateFrame();\r\n //Stop the loop continuing forever\r\n if (multAnim == -1 && cntiter <= beginAnim) {\r\n if (typeof config.onAnimationComplete == \"function\" && ctx.runanimationcompletefunction == true) config.onAnimationComplete(ctx, config, data, 0, animationCount + 1);\r\n multAnim = 1;\r\n if (config.animationForceSetTimeOut) requestAnimFrameSetTimeOut(animLoop);\r\n else requestAnimFrame(animLoop);\r\n } else if (percentAnimComplete < config.animationStopValue) {\r\n if (config.animationForceSetTimeOut) requestAnimFrameSetTimeOut(animLoop);\r\n else requestAnimFrame(animLoop);\r\n } else {\r\n if ((animationCount < config.animationCount || config.animationCount == 0) && (ctx.firstPass == 1 || ctx.firstPass != 2)) {\r\n animationCount++;\r\n if (config.animationBackward && multAnim == 1) {\r\n percentAnimComplete -= animFrameAmount;\r\n multAnim = -1;\r\n } else {\r\n multAnim = 1;\r\n cntiter = beginAnim - 1;\r\n percentAnimComplete = beginAnimPct - animFrameAmount;\r\n }\r\n window.setTimeout(animLoop, config.animationPauseTime * 1000);\r\n } else {\r\n testRedraw(ctx, data, config);\r\n if (ctx.firstPass != 6) {\r\n if (typeof config.onAnimationComplete == \"function\" && ctx.runanimationcompletefunction == true) {\r\n config.onAnimationComplete(ctx, config, data, 1, animationCount + 1);\r\n ctx.runanimationcompletefunction = false;\r\n }\r\n }\r\n }\r\n\r\n }\r\n };\r\n };\r\n //Declare global functions to be called within this namespace here.\r\n // shim layer with setTimeout fallback\r\n var requestAnimFrame = (function () {\r\n return window.requestAnimationFrame ||\r\n window.webkitRequestAnimationFrame ||\r\n window.mozRequestAnimationFrame ||\r\n window.oRequestAnimationFrame ||\r\n window.msRequestAnimationFrame ||\r\n function (callback) {\r\n window.setTimeout(callback, 1000 / 60);\r\n };\r\n })();\r\n var requestAnimFrameSetTimeOut = (function () {\r\n return function (callback) { window.setTimeout(callback, 1000 / 60); };\r\n })();\r\n\r\n\r\n function calculateScale(axis, config, maxSteps, minSteps, maxValue, minValue, labelTemplateString) {\r\n var graphMin, graphMax, graphRange, stepValue, numberOfSteps, valueRange, rangeOrderOfMagnitude, decimalNum;\r\n var logarithmic, yAxisMinimumInterval;\r\n if (axis == 2) {\r\n logarithmic = config.logarithmic2;\r\n yAxisMinimumInterval = config.yAxisMinimumInterval2;\r\n } else {\r\n logarithmic = config.logarithmic;\r\n yAxisMinimumInterval = config.yAxisMinimumInterval;\r\n }\r\n\r\n if (!logarithmic) { // no logarithmic scale\r\n valueRange = maxValue - minValue;\r\n rangeOrderOfMagnitude = calculateOrderOfMagnitude(valueRange);\r\n if (Math.abs(minValue) > config.zeroValue) graphMin = Math.floor(minValue / (1 * Math.pow(10, rangeOrderOfMagnitude))) * Math.pow(10, rangeOrderOfMagnitude);\r\n else graphMin = 0;\r\n if (Math.abs(maxValue) > config.zeroValue) graphMax = Math.ceil(maxValue / (1 * Math.pow(10, rangeOrderOfMagnitude))) * Math.pow(10, rangeOrderOfMagnitude);\r\n else graphMax = 0;\r\n if (typeof yAxisMinimumInterval == \"number\") {\r\n if (graphMax >= 0) {\r\n graphMin = graphMin - (graphMin % yAxisMinimumInterval);\r\n while (graphMin > minValue) graphMin = graphMin - yAxisMinimumInterval;\r\n if (graphMax % yAxisMinimumInterval > config.zeroValue && graphMax % yAxisMinimumInterval < yAxisMinimumInterval - config.zeroValue) {\r\n graphMax = roundScale(config, (1 + Math.floor(graphMax / yAxisMinimumInterval)) * yAxisMinimumInterval);\r\n }\r\n while (graphMax < maxValue) graphMax = graphMax + yAxisMinimumInterval;\r\n }\r\n }\r\n } else { // logarithmic scale\r\n if (minValue == maxValue) maxValue = maxValue + 1;\r\n if (minValue == 0) minValue = 0.01;\r\n var minMag = calculateOrderOfMagnitude(minValue);\r\n var maxMag = calculateOrderOfMagnitude(maxValue) + 1;\r\n graphMin = Math.pow(10, minMag);\r\n graphMax = Math.pow(10, maxMag);\r\n rangeOrderOfMagnitude = maxMag - minMag;\r\n }\r\n graphRange = graphMax - graphMin;\r\n stepValue = Math.pow(10, rangeOrderOfMagnitude);\r\n numberOfSteps = Math.round(graphRange / stepValue);\r\n if (!logarithmic) { // no logarithmic scale\r\n //Compare number of steps to the max and min for that size graph, and add in half steps if need be.\r\n var stopLoop = false;\r\n while (!stopLoop && (numberOfSteps < minSteps || numberOfSteps > maxSteps)) {\r\n if (numberOfSteps < minSteps) {\r\n if (typeof yAxisMinimumInterval == \"number\") {\r\n if (stepValue / 2 < yAxisMinimumInterval) {\r\n stopLoop = true;\r\n stepValue = yAxisMinimumInterval;\r\n numberOfSteps = Math.ceil(graphRange / stepValue);\r\n }\r\n }\r\n if (!stopLoop) {\r\n stepValue /= 2;\r\n numberOfSteps = Math.round(graphRange / stepValue);\r\n }\r\n } else {\r\n stepValue *= 2;\r\n numberOfSteps = Math.round(graphRange / stepValue);\r\n }\r\n\r\n }\r\n\r\n if (typeof yAxisMinimumInterval == \"number\") {\r\n if (stepValue < yAxisMinimumInterval) {\r\n stepValue = yAxisMinimumInterval;\r\n numberOfSteps = Math.ceil(graphRange / stepValue);\r\n }\r\n if (stepValue % yAxisMinimumInterval > config.zeroValue && stepValue % yAxisMinimumInterval < yAxisMinimumInterval - config.zeroValue) {\r\n if ((2 * stepValue) % yAxisMinimumInterval < config.zeroValue || (2 * stepValue) % yAxisMinimumInterval > yAxisMinimumInterval - config.zeroValue) {\r\n stepValue = 2 * stepValue;\r\n numberOfSteps = Math.ceil(graphRange / stepValue);\r\n } else {\r\n stepValue = roundScale(config, (1 + Math.floor(stepValue / yAxisMinimumInterval)) * yAxisMinimumInterval);\r\n numberOfSteps = Math.ceil(graphRange / stepValue);\r\n }\r\n }\r\n }\r\n if (config.graphMaximized == true || config.graphMaximized == \"bottom\" || typeof config.graphMin !== \"undefined\") {\r\n while (graphMin + stepValue < minValue && numberOfSteps >= 3) { graphMin += stepValue; numberOfSteps-- };\r\n }\r\n if (config.graphMaximized == true || config.graphMaximized == \"top\" || typeof config.graphMax !== \"undefined\") {\r\n\r\n while (graphMin + (numberOfSteps - 1) * stepValue >= maxValue && numberOfSteps >= 3) numberOfSteps--;\r\n }\r\n } else { // logarithmic scale\r\n numberOfSteps = rangeOrderOfMagnitude; // so scale is 10,100,1000,...\r\n }\r\n var labels = [];\r\n populateLabels(1, config, labelTemplateString, labels, numberOfSteps, graphMin, graphMax, stepValue);\r\n return {\r\n steps: numberOfSteps,\r\n stepValue: stepValue,\r\n graphMin: graphMin,\r\n labels: labels,\r\n maxValue: maxValue\r\n }\r\n };\r\n\r\n function roundScale(config, value) {\r\n var scldec = 0;\r\n var sscl = \"\" + config.yAxisMinimumInterval;\r\n if (sscl.indexOf(\".\") > 0) {\r\n scldec = sscl.substr(sscl.indexOf(\".\")).length;\r\n }\r\n return (Math.round(value * Math.pow(10, scldec)) / Math.pow(10, scldec));\r\n };\r\n\r\n function calculateOrderOfMagnitude(val) {\r\n if (val == 0) return 0;\r\n return Math.floor(Math.log(val) / Math.LN10);\r\n };\r\n //Populate an array of all the labels by interpolating the string.\r\n function populateLabels(axis, config, labelTemplateString, labels, numberOfSteps, graphMin, graphMax, stepValue) {\r\n var logarithmic;\r\n if (axis == 2) {\r\n logarithmic = config.logarithmic2;\r\n fmtYLabel = config.fmtYLabel2;\r\n } else {\r\n logarithmic = config.logarithmic;\r\n fmtYLabel = config.fmtYLabel;\r\n }\r\n if (labelTemplateString) {\r\n //Fix floating point errors by setting to fixed the on the same decimal as the stepValue.\r\n var i;\r\n if (!logarithmic) { // no logarithmic scale\r\n for (i = 0; i < numberOfSteps + 1; i++) {\r\n labels.push(tmpl(labelTemplateString, {\r\n value: fmtChartJS(config, 1 * ((graphMin + (stepValue * i)).toFixed(getDecimalPlaces(stepValue))), fmtYLabel)\r\n }, config));\r\n }\r\n } else { // logarithmic scale 10,100,1000,...\r\n var value = graphMin;\r\n for (i = 0; i < numberOfSteps + 1; i++) {\r\n labels.push(tmpl(labelTemplateString, {\r\n value: fmtChartJS(config, 1 * value.toFixed(getDecimalPlaces(value)), fmtYLabel)\r\n }, config));\r\n value *= 10;\r\n }\r\n }\r\n }\r\n };\r\n //Max value from array\r\n function Max(array) {\r\n return Math.max.apply(Math, array);\r\n };\r\n //Min value from array\r\n function Min(array) {\r\n return Math.min.apply(Math, array);\r\n };\r\n //Default if undefined\r\n function Default(userDeclared, valueIfFalse) {\r\n if (!userDeclared) {\r\n return valueIfFalse;\r\n } else {\r\n return userDeclared;\r\n }\r\n };\r\n //Apply cap a value at a high or low number\r\n function CapValue(valueToCap, maxValue, minValue) {\r\n if (isNumber(maxValue)) {\r\n if (valueToCap > maxValue) {\r\n return maxValue;\r\n }\r\n }\r\n if (isNumber(minValue)) {\r\n if (valueToCap < minValue) {\r\n return minValue;\r\n }\r\n }\r\n return valueToCap;\r\n };\r\n\r\n function getDecimalPlaces(num) {\r\n var match = ('' + num).match(/(?:\\.(\\d+))?(?:[eE]([+-]?\\d+))?$/);\r\n if (!match) {\r\n return 0;\r\n }\r\n return Math.max(\r\n 0,\r\n (match[1] ? match[1].length : 0) - (match[2] ? +match[2] : 0)\r\n );\r\n };\r\n\r\n function mergeChartConfig(defaults, userDefined) {\r\n var returnObj = {};\r\n for (var attrname in defaults) {\r\n returnObj[attrname] = defaults[attrname];\r\n }\r\n for (var attrnameBis in userDefined) {\r\n returnObj[attrnameBis] = userDefined[attrnameBis];\r\n }\r\n return returnObj;\r\n };\r\n //Javascript micro templating by John Resig - source at http://ejohn.org/blog/javascript-micro-templating/\r\n var cache = {};\r\n\r\n function tmpl(str, data, config) {\r\n newstr = str;\r\n if (newstr.substr(0, config.templatesOpenTag.length) == config.templatesOpenTag) newstr = \"<%=\" + newstr.substr(config.templatesOpenTag.length, newstr.length - config.templatesOpenTag.length);\r\n if (newstr.substr(newstr.length - config.templatesCloseTag.length, config.templatesCloseTag.length) == config.templatesCloseTag) newstr = newstr.substr(0, newstr.length - config.templatesCloseTag.length) + \"%>\";\r\n return tmplpart2(newstr, data);\r\n }\r\n\r\n function tmplpart2(str, data) {\r\n // Figure out if we're getting a template, or if we need to\r\n // load the template - and be sure to cache the result.\r\n var fn = !/\\W/.test(str) ?\r\n cache[str] = cache[str] ||\r\n tmplpart2(document.getElementById(str).innerHTML) :\r\n // Generate a reusable function that will serve as a template\r\n // generator (and which will be cached).\r\n new Function(\"obj\",\r\n \"var p=[],print=function(){p.push.apply(p,arguments);};\" +\r\n // Introduce the data as local variables using with(){}\r\n \"with(obj){p.push('\" +\r\n // Convert the template into pure JavaScript\r\n str\r\n .replace(/[\\r\\t\\n]/g, \" \")\r\n .split(\"<%\").join(\"\\t\")\r\n .replace(/((^|%>)[^\\t]*)'/g, \"$1\\r\")\r\n .replace(/\\t=(.*?)%>/g, \"',$1,'\")\r\n .split(\"\\t\").join(\"');\")\r\n .split(\"%>\").join(\"p.push('\")\r\n .split(\"\\r\").join(\"\\\\'\") + \"');}return p.join('');\");\r\n // Provide some basic currying to the user\r\n return data ? fn(data) : fn;\r\n };\r\n\r\n function dispCrossText(ctx, config, posX, posY, borderX, borderY, overlay, data, animPC, cntiter) {\r\n var i, disptxt, txtposx, txtposy, textAlign, textBaseline;\r\n for (i = 0; i < config.crossText.length; i++) {\r\n if (config.crossText[i] != \"\" && config.crossTextOverlay[Min([i, config.crossTextOverlay.length - 1])] == overlay && ((cntiter == 1 && config.crossTextIter[Min([i, config.crossTextIter.length - 1])] == \"first\") || config.crossTextIter[Min([i, config.crossTextIter.length - 1])] == cntiter || config.crossTextIter[Min([i, config.crossTextIter.length - 1])] == \"all\" || (animPC == 1 && config.crossTextIter[Min([i, config.crossTextIter.length - 1])] == \"last\"))) {\r\n ctx.save();\r\n ctx.beginPath();\r\n ctx.font = config.crossTextFontStyle[Min([i, config.crossTextFontStyle.length - 1])] + \" \" + (Math.ceil(ctx.chartTextScale * config.crossTextFontSize[Min([i, config.crossTextFontSize.length - 1])])).toString() + \"px \" + config.crossTextFontFamily[Min([i, config.crossTextFontFamily.length - 1])];\r\n ctx.fillStyle = config.crossTextFontColor[Min([i, config.crossTextFontColor.length - 1])];\r\n textAlign = config.crossTextAlign[Min([i, config.crossTextAlign.length - 1])];\r\n textBaseline = config.crossTextBaseline[Min([i, config.crossTextBaseline.length - 1])];\r\n txtposx = 1 * Math.ceil(ctx.chartSpaceScale * config.crossTextPosX[Min([i, config.crossTextPosX.length - 1])]);\r\n txtposy = 1 * Math.ceil(ctx.chartSpaceScale * config.crossTextPosY[Min([i, config.crossTextPosY.length - 1])]);\r\n switch (1 * config.crossTextRelativePosX[Min([i, config.crossTextRelativePosX.length - 1])]) {\r\n case 0:\r\n if (textAlign == \"default\") textAlign = \"left\";\r\n break;\r\n case 1:\r\n txtposx += borderX;\r\n if (textAlign == \"default\") textAlign = \"right\";\r\n break;\r\n case 2:\r\n txtposx += posX;\r\n if (textAlign == \"default\") textAlign = \"center\";\r\n break;\r\n case -2:\r\n txtposx += context.canvas.width / 2;\r\n if (textAlign == \"default\") textAlign = \"center\";\r\n break;\r\n case 3:\r\n txtposx += txtposx + 2 * posX - borderX;\r\n if (textAlign == \"default\") textAlign = \"left\";\r\n break;\r\n case 4:\r\n txtposx += context.canvas.width;\r\n if (textAlign == \"default\") textAlign = \"right\";\r\n break;\r\n default:\r\n txtposx += posX;\r\n if (textAlign == \"default\") textAlign = \"center\";\r\n break;\r\n }\r\n switch (1 * config.crossTextRelativePosY[Min([i, config.crossTextRelativePosY.length - 1])]) {\r\n case 0:\r\n if (textBaseline == \"default\") textBaseline = \"top\";\r\n break;\r\n case 3:\r\n txtposy += borderY;\r\n if (textBaseline == \"default\") textBaseline = \"top\";\r\n break;\r\n case 2:\r\n txtposy += posY;\r\n if (textBaseline == \"default\") textBaseline = \"middle\";\r\n break;\r\n case -2:\r\n txtposy += context.canvas.height / 2;\r\n if (textBaseline == \"default\") textBaseline = \"middle\";\r\n break;\r\n case 1:\r\n txtposy += txtposy + 2 * posY - borderY;\r\n if (textBaseline == \"default\") textBaseline = \"bottom\";\r\n break;\r\n case 4:\r\n txtposy += context.canvas.height;\r\n if (textBaseline == \"default\") textBaseline = \"bottom\";\r\n break;\r\n default:\r\n txtposy += posY;\r\n if (textBaseline == \"default\") textBaseline = \"middle\";\r\n break;\r\n }\r\n ctx.textAlign = textAlign;\r\n ctx.textBaseline = textBaseline;\r\n ctx.translate(1 * txtposx, 1 * txtposy);\r\n var rotateVal = Math.PI * config.crossTextAngle[Min([i, config.crossTextAngle.length - 1])] / 180;\r\n ctx.rotate(rotateVal);\r\n if (config.crossText[i].substring(0, 1) == \"%\") {\r\n if (typeof config.crossTextFunction == \"function\") disptxt = config.crossTextFunction(i, config.crossText[i], ctx, config, posX, posY, borderX, borderY, overlay, data, animPC);\r\n } else disptxt = config.crossText[i];\r\n\r\n setTextBordersAndBackground(ctx, disptxt, Math.ceil(ctx.chartTextScale * config.crossTextFontSize[Min([i, config.crossTextFontSize.length - 1])]), 0, 0, config.crossTextBorders[Min([i, config.crossTextBorders.length - 1])], config.crossTextBordersColor[Min([i, config.crossTextBordersColor.length - 1])], Math.ceil(ctx.chartLineScale * config.crossTextBordersWidth[Min([i, config.crossTextBordersWidth.length - 1])]), Math.ceil(ctx.chartSpaceScale * config.crossTextBordersXSpace[Min([i, config.crossTextBordersXSpace.length - 1])]), Math.ceil(ctx.chartSpaceScale * config.crossTextBordersYSpace[Min([i, config.crossTextBordersYSpace.length - 1])]), config.crossTextBordersStyle[Min([i, config.crossTextBordersStyle.length - 1])], config.crossTextBackgroundColor[Min([i, config.crossTextBackgroundColor.length - 1])], \"CROSSTEXT\");\r\n if ((animPC == 1 && config.crossTextIter[Min([i, config.crossTextIter.length - 1])] == \"all\") || config.crossTextIter[Min([i, config.crossTextIter.length - 1])] != \"last\") {\r\n ctx.fillTextMultiLine(disptxt, 0, 0, ctx.textBaseline, Math.ceil(ctx.chartTextScale * config.crossTextFontSize[Min([i, config.crossTextFontSize.length - 1])]), true, config.detectMouseOnText, ctx, \"CROSSTEXT_TEXTMOUSE\", rotateVal, 1 * txtposx, 1 * txtposy, i, -1);\r\n } else ctx.fillTextMultiLine(disptxt, 0, 0, ctx.textBaseline, Math.ceil(ctx.chartTextScale * config.crossTextFontSize[Min([i, config.crossTextFontSize.length - 1])]), true, false, ctx, \"CROSSTEXT_TEXTMOUSE\", rotateVal, 1 * txtposx, 1 * txtposy, i, -1);\r\n ctx.restore();\r\n }\r\n }\r\n };\r\n\r\n function dispCrossImage(ctx, config, posX, posY, borderX, borderY, overlay, data, animPC, cntiter) {\r\n var i, disptxt, imageposx, imageposy, imageAlign, imageBaseline;\r\n for (i = 0; i < config.crossImage.length; i++) {\r\n if (typeof config.crossImage[i] != \"undefined\" && config.crossImageOverlay[Min([i, config.crossImageOverlay.length - 1])] == overlay && ((cntiter == -1 && config.crossImageIter[Min([i, config.crossImageIter.length - 1])] == \"background\") || (cntiter == 1 && config.crossImageIter[Min([i, config.crossImageIter.length - 1])] == \"first\") || config.crossImageIter[Min([i, config.crossImageIter.length - 1])] == cntiter || (cntiter != -1 && config.crossImageIter[Min([i, config.crossImageIter.length - 1])] == \"all\") || (animPC == 1 && config.crossImageIter[Min([i, config.crossImageIter.length - 1])] == \"last\"))) {\r\n ctx.save();\r\n ctx.beginPath();\r\n imageAlign = config.crossImageAlign[Min([i, config.crossImageAlign.length - 1])];\r\n imageBaseline = config.crossImageBaseline[Min([i, config.crossImageBaseline.length - 1])];\r\n imageposx = 1 * Math.ceil(ctx.chartSpaceScale * config.crossImagePosX[Min([i, config.crossImagePosX.length - 1])]);\r\n imageposy = 1 * Math.ceil(ctx.chartSpaceScale * config.crossImagePosY[Min([i, config.crossImagePosY.length - 1])]);\r\n switch (1 * config.crossImageRelativePosX[Min([i, config.crossImageRelativePosX.length - 1])]) {\r\n case 0:\r\n if (imageAlign == \"default\") imageAlign = \"left\";\r\n break;\r\n case 1:\r\n imageposx += borderX;\r\n if (imageAlign == \"default\") imageAlign = \"right\";\r\n break;\r\n case 2:\r\n imageposx += posX;\r\n if (imageAlign == \"default\") imageAlign = \"center\";\r\n break;\r\n case -2:\r\n imageposx += context.canvas.width / 2;\r\n if (imageAlign == \"default\") imageAlign = \"center\";\r\n break;\r\n case 3:\r\n imageposx += imageposx + 2 * posX - borderX;\r\n if (imageAlign == \"default\") imageAlign = \"left\";\r\n break;\r\n case 4:\r\n imageposx += context.canvas.width;\r\n if (imageAlign == \"default\") imageAlign = \"right\";\r\n break;\r\n default:\r\n imageposx += posX;\r\n if (imageAlign == \"default\") imageAlign = \"center\";\r\n break;\r\n }\r\n switch (1 * config.crossImageRelativePosY[Min([i, config.crossImageRelativePosY.length - 1])]) {\r\n case 0:\r\n if (imageBaseline == \"default\") imageBaseline = \"top\";\r\n break;\r\n case 3:\r\n imageposy += borderY;\r\n if (imageBaseline == \"default\") imageBaseline = \"top\";\r\n break;\r\n case 2:\r\n imageposy += posY;\r\n if (imageBaseline == \"default\") imageBaseline = \"middle\";\r\n break;\r\n case -2:\r\n imageposy += context.canvas.height / 2;\r\n if (imageBaseline == \"default\") imageBaseline = \"middle\";\r\n break;\r\n case 1:\r\n imageposy += imageposy + 2 * posY - borderY;\r\n if (imageBaseline == \"default\") imageBaseline = \"bottom\";\r\n break;\r\n case 4:\r\n imageposy += context.canvas.height;\r\n if (imageBaseline == \"default\") imageBaseline = \"bottom\";\r\n break;\r\n default:\r\n imageposy += posY;\r\n if (imageBaseline == \"default\") imageBaseline = \"middle\";\r\n break;\r\n }\r\n var imageWidth = config.crossImage[i].width;\r\n switch (imageAlign) {\r\n case \"left\":\r\n break;\r\n case \"right\":\r\n imageposx -= imageWidth;\r\n break;\r\n case \"center\":\r\n imageposx -= (imageWidth / 2);\r\n break;\r\n default:\r\n break;\r\n }\r\n var imageHeight = config.crossImage[i].height;\r\n switch (imageBaseline) {\r\n case \"top\":\r\n break;\r\n case \"bottom\":\r\n imageposy -= imageHeight;\r\n break;\r\n case \"middle\":\r\n imageposy -= (imageHeight / 2);\r\n break;\r\n default:\r\n break;\r\n }\r\n ctx.translate(1 * imageposx, 1 * imageposy);\r\n ctx.rotate(Math.PI * config.crossImageAngle[Min([i, config.crossImageAngle.length - 1])] / 180);\r\n ctx.drawImage(config.crossImage[i], 0, 0);\r\n ctx.restore();\r\n }\r\n }\r\n };\r\n //****************************************************************************************\r\n function setMeasures(data, config, ctx, height, width, ylabels, ylabels2, reverseLegend, reverseAxis, drawAxis, drawLegendOnData, legendBox, typegraph) {\r\n if (config.canvasBackgroundColor != \"none\") ctx.canvas.style.background = config.canvasBackgroundColor;\r\n var borderWidth = 0;\r\n var xAxisLabelPos = 0;\r\n var graphTitleHeight = 0;\r\n var graphTitlePosY = 0;\r\n var graphSubTitleHeight = 0;\r\n var graphSubTitlePosY = 0;\r\n var footNoteHeight = 0;\r\n var footNotePosY = 0;\r\n var yAxisUnitHeight = 0;\r\n var yAxisUnitPosY = 0;\r\n var widestLegend = 0;\r\n var nbeltLegend = 0;\r\n var nbLegendLines = 0;\r\n var nbLegendCols = 0;\r\n var spaceLegendHeight = 0;\r\n var xFirstLegendTextPos = 0;\r\n var yFirstLegendTextPos = 0;\r\n var xLegendBorderPos = 0;\r\n var yLegendBorderPos = 0;\r\n var yAxisLabelWidth = 0;\r\n var yAxisLabelPosLeft = 0;\r\n var yAxisLabelPosRight = 0;\r\n var xAxisLabelHeight = 0;\r\n var xLabelHeight = 0;\r\n var widestXLabel = 1;\r\n var highestXLabel = 1;\r\n var widestYLabel = 0;\r\n var highestYLabel = 1;\r\n var widestYLabel2 = 0;\r\n var highestYLabel2 = 1;\r\n var leftNotUsableSize = 0;\r\n var rightNotUsableSize = 0;\r\n var rotateLabels = 0;\r\n var xLabelPos = 0;\r\n var legendBorderWidth = 0;\r\n var legendBorderHeight = 0;\r\n\r\n ctx.widthAtSetMeasures = width;\r\n ctx.heightAtSetMeasures = height;\r\n\r\n // Borders\r\n if (config.canvasBorders) borderWidth = Math.ceil(ctx.chartLineScale * config.canvasBordersWidth);\r\n // compute widest X label\r\n var textMsr, i;\r\n if (drawAxis) {\r\n ctx.font = config.scaleFontStyle + \" \" + (Math.ceil(ctx.chartTextScale * config.scaleFontSize)).toString() + \"px \" + config.scaleFontFamily;\r\n for (i = 0; i < data.labels.length; i++) {\r\n if (showLabels(ctx, data, config, i) === true) {\r\n textMsr = ctx.measureTextMultiLine(fmtChartJS(config, data.labels[i], config.fmtXLabel), (Math.ceil(ctx.chartTextScale * config.scaleFontSize)));\r\n //If the text length is longer - make that equal to longest text!\r\n widestXLabel = (textMsr.textWidth > widestXLabel) ? textMsr.textWidth : widestXLabel;\r\n highestXLabel = (textMsr.textHeight > highestXLabel) ? textMsr.textHeight : highestXLabel;\r\n }\r\n }\r\n if (widestXLabel < Math.ceil(ctx.chartTextScale * config.xScaleLabelsMinimumWidth)) widestXLabel = Math.ceil(ctx.chartTextScale * config.xScaleLabelsMinimumWidth);\r\n }\r\n // compute Y Label Width\r\n if (drawAxis) {\r\n widestYLabel = 1;\r\n if (ylabels != null && ylabels != \"nihil\") {\r\n ctx.font = config.scaleFontStyle + \" \" + (Math.ceil(ctx.chartTextScale * config.scaleFontSize)).toString() + \"px \" + config.scaleFontFamily;\r\n for (i = ylabels.length - 1; i >= 0; i--) {\r\n if (typeof (ylabels[i]) == \"string\") {\r\n if (showYLabels(ctx, data, config, i, ylabels[i])) {\r\n if (ylabels[i].trim() != \"\") {\r\n textMsr = ctx.measureTextMultiLine(fmtChartJS(config, ylabels[i], config.fmtYLabel), (Math.ceil(ctx.chartTextScale * config.scaleFontSize)));\r\n //If the text length is longer - make that equal to longest text!\r\n widestYLabel = (textMsr.textWidth > widestYLabel) ? textMsr.textWidth : widestYLabel;\r\n highestYLabel = (textMsr.textHeight > highestYLabel) ? textMsr.textHeight : highestYLabel;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n if (widestYLabel < Math.ceil(ctx.chartTextScale * config.yScaleLabelsMinimumWidth)) {\r\n widestYLabel = Math.ceil(ctx.chartTextScale * config.yScaleLabelsMinimumWidth);\r\n }\r\n widestYLabel2 = 1;\r\n if (ylabels2 != null && config.yAxisRight) {\r\n ctx.font = config.scaleFontStyle + \" \" + (Math.ceil(ctx.chartTextScale * config.scaleFontSize)).toString() + \"px \" + config.scaleFontFamily;\r\n for (i = ylabels2.length - 1; i >= 0; i--) {\r\n if (typeof (ylabels2[i]) == \"string\") {\r\n if (ylabels2[i].trim() != \"\") {\r\n textMsr = ctx.measureTextMultiLine(fmtChartJS(config, ylabels2[i], config.fmtYLabel2), (Math.ceil(ctx.chartTextScale * config.scaleFontSize)));\r\n //If the text length is longer - make that equal to longest text!\r\n widestYLabel2 = (textMsr.textWidth > widestYLabel2) ? textMsr.textWidth : widestYLabel2;\r\n highestYLabel2 = (textMsr.textHeight > highestYLabel2) ? textMsr.textHeight : highestYLabel2;\r\n }\r\n }\r\n }\r\n } else {\r\n widestYLabel2 = widestYLabel;\r\n }\r\n if (widestYLabel2 < Math.ceil(ctx.chartTextScale * config.yScaleLabelsMinimumWidth)) {\r\n widestYLabel2 = Math.ceil(ctx.chartTextScale * config.yScaleLabelsMinimumWidth);\r\n }\r\n }\r\n // yAxisLabel\r\n leftNotUsableSize = borderWidth + Math.ceil(ctx.chartSpaceScale * config.spaceLeft)\r\n rightNotUsableSize = borderWidth + Math.ceil(ctx.chartSpaceScale * config.spaceRight);\r\n if (drawAxis) {\r\n if (typeof (config.yAxisLabel) != \"undefined\") {\r\n if (config.yAxisLabel.trim() != \"\") {\r\n yAxisLabelWidth = (Math.ceil(ctx.chartTextScale * config.yAxisFontSize)) * (config.yAxisLabel.split(\"\\n\").length || 1) + Math.ceil(ctx.chartSpaceScale * config.yAxisLabelSpaceLeft) + Math.ceil(ctx.chartSpaceScale * config.yAxisLabelSpaceRight);\r\n yAxisLabelPosLeft = borderWidth + Math.ceil(ctx.chartSpaceScale * config.spaceLeft) + Math.ceil(ctx.chartSpaceScale * config.yAxisLabelSpaceLeft) + (Math.ceil(ctx.chartTextScale * config.yAxisFontSize));\r\n yAxisLabelPosRight = width - borderWidth - Math.ceil(ctx.chartSpaceScale * config.spaceRight) - Math.ceil(ctx.chartSpaceScale * config.yAxisLabelSpaceLeft) - (Math.ceil(ctx.chartTextScale * config.yAxisFontSize));\r\n }\r\n if (config.yAxisLabelBackgroundColor != \"none\" || config.yAxisLabelBorders) {\r\n yAxisLabelWidth += 2 * (Math.ceil(ctx.chartSpaceScale * config.yAxisLabelBordersYSpace));\r\n yAxisLabelPosLeft += Math.ceil(ctx.chartSpaceScale * config.yAxisLabelBordersYSpace);\r\n yAxisLabelPosRight -= Math.ceil(ctx.chartSpaceScale * config.yAxisLabelBordersYSpace);\r\n }\r\n\r\n if (config.graphTitleBorders) {\r\n yAxisLabelWidth += 2 * (Math.ceil(ctx.chartLineScale * config.yAxisLabelBordersWidth));\r\n yAxisLabelPosLeft += Math.ceil(ctx.chartLineScale * config.yAxisLabelBordersWidth);\r\n yAxisLabelPosRight -= Math.ceil(ctx.chartLineScale * config.yAxisLabelBordersWidth);\r\n }\r\n }\r\n if (config.yAxisLeft) {\r\n if (reverseAxis == false) leftNotUsableSize = borderWidth + Math.ceil(ctx.chartSpaceScale * config.spaceLeft) + yAxisLabelWidth + widestYLabel + Math.ceil(ctx.chartSpaceScale * config.yAxisSpaceLeft) + Math.ceil(ctx.chartSpaceScale * config.yAxisSpaceRight);\r\n else leftNotUsableSize = borderWidth + Math.ceil(ctx.chartSpaceScale * config.spaceLeft) + yAxisLabelWidth + widestXLabel + Math.ceil(ctx.chartSpaceScale * config.yAxisSpaceLeft) + Math.ceil(ctx.chartSpaceScale * config.yAxisSpaceRight);\r\n }\r\n if (config.yAxisRight) {\r\n if (reverseAxis == false) rightNotUsableSize = borderWidth + Math.ceil(ctx.chartSpaceScale * config.spaceRight) + yAxisLabelWidth + widestYLabel2 + Math.ceil(ctx.chartSpaceScale * config.yAxisSpaceLeft) + Math.ceil(ctx.chartSpaceScale * config.yAxisSpaceRight);\r\n else rightNotUsableSize = borderWidth + Math.ceil(ctx.chartSpaceScale * config.spaceRight) + yAxisLabelWidth + widestXLabel + Math.ceil(ctx.chartSpaceScale * config.yAxisSpaceLeft) + Math.ceil(ctx.chartSpaceScale * config.yAxisSpaceRight);\r\n }\r\n }\r\n availableWidth = width - leftNotUsableSize - rightNotUsableSize;\r\n // Title\r\n if (config.graphTitle.trim() != \"\") {\r\n graphTitleHeight = (Math.ceil(ctx.chartTextScale * config.graphTitleFontSize)) * (config.graphTitle.split(\"\\n\").length || 1) + Math.ceil(ctx.chartSpaceScale * config.graphTitleSpaceBefore) + Math.ceil(ctx.chartSpaceScale * config.graphTitleSpaceAfter);\r\n graphTitlePosY = borderWidth + Math.ceil(ctx.chartSpaceScale * config.spaceTop) + graphTitleHeight - Math.ceil(ctx.chartSpaceScale * config.graphTitleSpaceAfter);\r\n if (config.graphTitleBackgroundColor != \"none\" || config.graphTitleBorders) {\r\n graphTitleHeight += 2 * (Math.ceil(ctx.chartSpaceScale * config.graphTitleBordersYSpace));\r\n graphTitlePosY += Math.ceil(ctx.chartSpaceScale * config.graphTitleBordersYSpace);\r\n }\r\n\r\n if (config.graphTitleBorders) {\r\n graphTitleHeight += 2 * (Math.ceil(ctx.chartLineScale * config.graphTitleBordersWidth));\r\n graphTitlePosY += Math.ceil(ctx.chartLineScale * config.graphTitleBordersWidth);\r\n }\r\n }\r\n // subTitle\r\n if (config.graphSubTitle.trim() != \"\") {\r\n graphSubTitleHeight = (Math.ceil(ctx.chartTextScale * config.graphSubTitleFontSize)) * (config.graphSubTitle.split(\"\\n\").length || 1) + Math.ceil(ctx.chartSpaceScale * config.graphSubTitleSpaceBefore) + Math.ceil(ctx.chartSpaceScale * config.graphSubTitleSpaceAfter);\r\n graphSubTitlePosY = borderWidth + Math.ceil(ctx.chartSpaceScale * config.spaceTop) + graphTitleHeight + graphSubTitleHeight - Math.ceil(ctx.chartSpaceScale * config.graphSubTitleSpaceAfter);\r\n if (config.graphSubTitleBackgroundColor != \"none\" || config.graphSubTitleBorders) {\r\n graphSubTitleHeight += 2 * (Math.ceil(ctx.chartSpaceScale * config.graphSubTitleBordersYSpace));\r\n graphSubTitlePosY += Math.ceil(ctx.chartSpaceScale * config.graphSubTitleBordersYSpace);\r\n }\r\n\r\n if (config.graphSubTitleBorders) {\r\n graphSubTitleHeight += 2 * (Math.ceil(ctx.chartLineScale * config.graphSubTitleBordersWidth));\r\n graphSubTitlePosY += Math.ceil(ctx.chartLineScale * config.graphSubTitleBordersWidth);\r\n }\r\n }\r\n // yAxisUnit\r\n if (drawAxis) {\r\n if (config.yAxisUnit.trim() != \"\") {\r\n yAxisUnitHeight = (Math.ceil(ctx.chartTextScale * config.yAxisUnitFontSize)) * (config.yAxisUnit.split(\"\\n\").length || 1) + Math.ceil(ctx.chartSpaceScale * config.yAxisUnitSpaceBefore) + Math.ceil(ctx.chartSpaceScale * config.yAxisUnitSpaceAfter);\r\n yAxisUnitPosY = borderWidth + Math.ceil(ctx.chartSpaceScale * config.spaceTop) + graphTitleHeight + graphSubTitleHeight + yAxisUnitHeight - Math.ceil(ctx.chartSpaceScale * config.yAxisUnitSpaceAfter);\r\n }\r\n if (config.yAxisUnitBackgroundColor != \"none\" || config.yAxisUnitBorders) {\r\n yAxisUnitHeight += 2 * (Math.ceil(ctx.chartSpaceScale * config.yAxisUnitBordersYSpace));\r\n yAxisUnitPosY += Math.ceil(ctx.chartSpaceScale * config.yAxisUnitBordersYSpace);\r\n }\r\n\r\n if (config.yAxisUnitBorders) {\r\n yAxisUnitHeight += 2 * (Math.ceil(ctx.chartLineScale * config.yAxisUnitBordersWidth));\r\n yAxisUnitPosY += Math.ceil(ctx.chartLineScale * config.yAxisUnitBordersWidth);\r\n }\r\n\r\n\r\n }\r\n topNotUsableSize = borderWidth + Math.ceil(ctx.chartSpaceScale * config.spaceTop) + graphTitleHeight + graphSubTitleHeight + yAxisUnitHeight + Math.ceil(ctx.chartTextScale * config.graphSpaceBefore);\r\n // footNote\r\n if (typeof (config.footNote) != \"undefined\") {\r\n if (config.footNote.trim() != \"\") {\r\n footNoteHeight = (Math.ceil(ctx.chartTextScale * config.footNoteFontSize)) * (config.footNote.split(\"\\n\").length || 1) + Math.ceil(ctx.chartSpaceScale * config.footNoteSpaceBefore) + Math.ceil(ctx.chartSpaceScale * config.footNoteSpaceAfter);\r\n footNotePosY = height - Math.ceil(ctx.chartSpaceScale * config.spaceBottom) - borderWidth - Math.ceil(ctx.chartSpaceScale * config.footNoteSpaceAfter);\r\n if (config.footNoteBackgroundColor != \"none\" || config.footNoteBorders) {\r\n footNoteHeight += 2 * (Math.ceil(ctx.chartSpaceScale * config.footNoteBordersYSpace));\r\n footNotePosY -= Math.ceil(ctx.chartSpaceScale * config.footNoteBordersYSpace);\r\n }\r\n if (config.footNoteBorders) {\r\n footNoteHeight += 2 * (Math.ceil(ctx.chartLineScale * config.footNoteBordersWidth));\r\n footNotePosY -= Math.ceil(ctx.chartLineScale * config.footNoteBordersWidth);\r\n }\r\n }\r\n }\r\n\r\n // xAxisLabel\r\n if (drawAxis) {\r\n if (typeof (config.xAxisLabel) != \"undefined\") {\r\n if (config.xAxisLabel.trim() != \"\") {\r\n xAxisLabelHeight = (Math.ceil(ctx.chartTextScale * config.xAxisFontSize)) * (config.xAxisLabel.split(\"\\n\").length || 1) + Math.ceil(ctx.chartSpaceScale * config.xAxisLabelSpaceBefore) + Math.ceil(ctx.chartSpaceScale * config.xAxisLabelSpaceAfter);\r\n xAxisLabelPos = height - borderWidth - Math.ceil(ctx.chartSpaceScale * config.spaceBottom) - footNoteHeight - Math.ceil(ctx.chartSpaceScale * config.xAxisLabelSpaceAfter);\r\n if (config.xAxisLabelBackgroundColor != \"none\" || config.footNoteBorders) {\r\n xAxisLabelHeight += 2 * (Math.ceil(ctx.chartSpaceScale * config.xAxisLabelBordersYSpace));\r\n xAxisLabelPos -= Math.ceil(ctx.chartSpaceScale * config.xAxisLabelBordersYSpace);\r\n }\r\n if (config.footNoteBorders) {\r\n xAxisLabelHeight += 2 * (Math.ceil(ctx.chartLineScale * config.xAxisLabelBordersWidth));\r\n xAxisLabelPos -= Math.ceil(ctx.chartLineScale * config.xAxisLabelBordersWidth);\r\n }\r\n }\r\n }\r\n }\r\n\r\n bottomNotUsableHeightWithoutXLabels = borderWidth + Math.ceil(ctx.chartSpaceScale * config.spaceBottom) + footNoteHeight + xAxisLabelHeight + Math.ceil(ctx.chartTextScale * config.graphSpaceAfter);\r\n\r\n // compute space for Legend\r\n if (typeof (config.legend) != \"undefined\") {\r\n if (config.legend == true) {\r\n ctx.font = config.legendFontStyle + \" \" + (Math.ceil(ctx.chartTextScale * config.legendFontSize)).toString() + \"px \" + config.legendFontFamily;\r\n var textLength;\r\n if (drawLegendOnData) {\r\n for (i = data.datasets.length - 1; i >= 0; i--) {\r\n if (typeof (data.datasets[i].title) == \"string\") {\r\n if (data.datasets[i].title.trim() != \"\") {\r\n nbeltLegend++;\r\n textLength = ctx.measureText(fmtChartJS(config, data.datasets[i].title, config.fmtLegend)).width;\r\n //If the text length is longer - make that equal to longest text!\r\n widestLegend = (textLength > widestLegend) ? textLength : widestLegend;\r\n }\r\n }\r\n }\r\n } else {\r\n for (i = data.length - 1; i >= 0; i--) {\r\n if (typeof (data[i].title) == \"string\") {\r\n if (data[i].title.trim() != \"\") {\r\n nbeltLegend++;\r\n textLength = ctx.measureText(fmtChartJS(config, data[i].legendtitle, config.fmtLegend)).width;\r\n //If the text length is longer - make that equal to longest text!\r\n widestLegend = (textLength > widestLegend) ? textLength : widestLegend;\r\n }\r\n }\r\n }\r\n }\r\n if (nbeltLegend > 1 || (nbeltLegend == 1 && config.showSingleLegend)) {\r\n widestLegend += Math.ceil(ctx.chartTextScale * config.legendBlockSize) + Math.ceil(ctx.chartSpaceScale * config.legendSpaceBetweenBoxAndText);\r\n if (config.legendPosY == 1 || config.legendPosY == 2 || config.legendPosY == 3) {\r\n availableLegendWidth = availableWidth - Math.ceil(ctx.chartSpaceScale * Math.ceil(ctx.chartSpaceScale * config.legendSpaceLeftText)) - Math.ceil(ctx.chartSpaceScale * config.legendSpaceRightText);\r\n } else {\r\n availableLegendWidth = width - Math.ceil(ctx.chartSpaceScale * config.spaceLeft) - Math.ceil(ctx.chartSpaceScale * config.spaceRight) - 2 * (borderWidth) - Math.ceil(ctx.chartSpaceScale * Math.ceil(ctx.chartSpaceScale * config.legendSpaceLeftText)) - Math.ceil(ctx.chartSpaceScale * config.legendSpaceRightText);\r\n }\r\n if (config.legendBorders == true) availableLegendWidth -= 2 * (Math.ceil(ctx.chartLineScale * config.legendBordersWidth)) - Math.ceil(ctx.chartSpaceScale * config.legendBordersSpaceLeft) - Math.ceil(ctx.chartSpaceScale * config.legendBordersSpaceRight);\r\n maxLegendOnLine = Min([Math.floor((availableLegendWidth + Math.ceil(ctx.chartSpaceScale * config.legendSpaceBetweenTextHorizontal)) / (widestLegend + Math.ceil(ctx.chartSpaceScale * config.legendSpaceBetweenTextHorizontal))), config.maxLegendCols]);\r\n nbLegendLines = Math.ceil(nbeltLegend / maxLegendOnLine);\r\n nbLegendCols = Math.ceil(nbeltLegend / nbLegendLines);\r\n\r\n var legendHeight = nbLegendLines * ((Math.ceil(ctx.chartTextScale * config.legendFontSize)) + Math.ceil(ctx.chartSpaceScale * config.legendSpaceBetweenTextVertical)) - Math.ceil(ctx.chartSpaceScale * config.legendSpaceBetweenTextVertical) + Math.ceil(ctx.chartSpaceScale * config.legendSpaceBeforeText) + Math.ceil(ctx.chartSpaceScale * config.legendSpaceAfterText);\r\n\r\n switch (config.legendPosY) {\r\n case 0:\r\n xFirstLegendTextPos = Math.ceil(ctx.chartSpaceScale * config.spaceLeft) + (width - Math.ceil(ctx.chartSpaceScale * config.spaceLeft) - Math.ceil(ctx.chartSpaceScale * config.spaceRight) - nbLegendCols * (widestLegend + Math.ceil(ctx.chartSpaceScale * config.legendSpaceBetweenTextHorizontal)) + Math.ceil(ctx.chartSpaceScale * config.legendSpaceBetweenTextHorizontal)) / 2;\r\n spaceLegendHeight = legendHeight;\r\n if (config.legendBorders == true) {\r\n yLegendBorderPos = topNotUsableSize + Math.ceil(ctx.chartSpaceScale * config.legendBordersSpaceBefore) + (Math.ceil(ctx.chartLineScale * config.legendBordersWidth) / 2);\r\n yFirstLegendTextPos = yLegendBorderPos + (Math.ceil(ctx.chartLineScale * config.legendBordersWidth) / 2) + Math.ceil(ctx.chartSpaceScale * config.legendSpaceBeforeText) + (Math.ceil(ctx.chartTextScale * config.legendFontSize));\r\n spaceLegendHeight += 2 * Math.ceil(ctx.chartLineScale * config.legendBordersWidth) + Math.ceil(ctx.chartSpaceScale * config.legendBordersSpaceBefore) + Math.ceil(ctx.chartSpaceScale * config.legendBordersSpaceAfter);\r\n xLegendBorderPos = Math.floor(xFirstLegendTextPos - Math.ceil(ctx.chartSpaceScale * config.legendSpaceLeftText) - (Math.ceil(ctx.chartLineScale * config.legendBordersWidth) / 2));\r\n legendBorderHeight = Math.ceil(spaceLegendHeight - Math.ceil(ctx.chartLineScale * config.legendBordersWidth)) - Math.ceil(ctx.chartSpaceScale * config.legendBordersSpaceBefore) - Math.ceil(ctx.chartSpaceScale * config.legendBordersSpaceAfter);\r\n legendBorderWidth = Math.ceil(nbLegendCols * (widestLegend + Math.ceil(ctx.chartSpaceScale * config.legendSpaceBetweenTextHorizontal))) - Math.ceil(ctx.chartSpaceScale * config.legendSpaceBetweenTextHorizontal) + Math.ceil(ctx.chartLineScale * config.legendBordersWidth) + Math.ceil(ctx.chartSpaceScale * config.legendSpaceRightText) + Math.ceil(ctx.chartSpaceScale * config.legendSpaceLeftText);\r\n } else {\r\n yFirstLegendTextPos = topNotUsableSize + Math.ceil(ctx.chartSpaceScale * config.legendBordersSpaceBefore) + (Math.ceil(ctx.chartLineScale * config.legendBordersWidth) / 2);\r\n }\r\n if (yAxisUnitHeight > 0) {\r\n yAxisUnitPosY += spaceLegendHeight;\r\n if (config.legendBorders == true) yLegendBorderPos -= yAxisUnitHeight;\r\n yFirstLegendTextPos -= yAxisUnitHeight;\r\n }\r\n topNotUsableSize += spaceLegendHeight;\r\n break;\r\n case 1:\r\n spaceLegendHeight = legendHeight;\r\n xFirstLegendTextPos = Math.ceil(ctx.chartSpaceScale * config.spaceLeft) + (width - Math.ceil(ctx.chartSpaceScale * config.spaceLeft) - Math.ceil(ctx.chartSpaceScale * config.spaceRight) - nbLegendCols * (widestLegend + Math.ceil(ctx.chartSpaceScale * config.legendSpaceBetweenTextHorizontal)) + Math.ceil(ctx.chartSpaceScale * config.legendSpaceBetweenTextHorizontal)) / 2;\r\n yFirstLegendTextPos = topNotUsableSize + Math.ceil(ctx.chartSpaceScale * config.legendSpaceBeforeText) + (Math.ceil(ctx.chartTextScale * config.legendFontSize));\r\n if (config.legendBorders == true) {\r\n yFirstLegendTextPos += Math.ceil(ctx.chartSpaceScale * config.legendBordersSpaceBefore) + Math.ceil(ctx.chartLineScale * config.legendBordersWidth);\r\n yLegendBorderPos = yFirstLegendTextPos - Math.ceil(ctx.chartSpaceScale * config.legendSpaceBeforeText) - (Math.ceil(ctx.chartTextScale * config.legendFontSize)) - (Math.ceil(ctx.chartLineScale * config.legendBordersWidth) / 2);\r\n spaceLegendHeight += 2 * Math.ceil(ctx.chartLineScale * config.legendBordersWidth) + Math.ceil(ctx.chartSpaceScale * config.legendBordersSpaceBefore) + Math.ceil(ctx.chartSpaceScale * config.legendBordersSpaceAfter);\r\n xLegendBorderPos = Math.floor(xFirstLegendTextPos - Math.ceil(ctx.chartSpaceScale * config.legendSpaceLeftText) - (Math.ceil(ctx.chartLineScale * config.legendBordersWidth) / 2));\r\n legendBorderHeight = Math.ceil(spaceLegendHeight - Math.ceil(ctx.chartLineScale * config.legendBordersWidth)) - Math.ceil(ctx.chartSpaceScale * config.legendBordersSpaceBefore) - Math.ceil(ctx.chartSpaceScale * config.legendBordersSpaceAfter);\r\n legendBorderWidth = Math.ceil(nbLegendCols * (widestLegend + Math.ceil(ctx.chartSpaceScale * config.legendSpaceBetweenTextHorizontal))) - Math.ceil(ctx.chartSpaceScale * config.legendSpaceBetweenTextHorizontal) + Math.ceil(ctx.chartLineScale * config.legendBordersWidth) + Math.ceil(ctx.chartSpaceScale * config.legendSpaceRightText) + Math.ceil(ctx.chartSpaceScale * config.legendSpaceLeftText);\r\n }\r\n break;\r\n case 2:\r\n spaceLegendHeight = legendHeight;\r\n xFirstLegendTextPos = Math.ceil(ctx.chartSpaceScale * config.spaceLeft) + (width - Math.ceil(ctx.chartSpaceScale * config.spaceLeft) - Math.ceil(ctx.chartSpaceScale * config.spaceRight) - nbLegendCols * (widestLegend + Math.ceil(ctx.chartSpaceScale * config.legendSpaceBetweenTextHorizontal)) + Math.ceil(ctx.chartSpaceScale * config.legendSpaceBetweenTextHorizontal)) / 2;\r\n yFirstLegendTextPos = topNotUsableSize + (height - topNotUsableSize - bottomNotUsableHeightWithoutXLabels - spaceLegendHeight) / 2 + Math.ceil(ctx.chartSpaceScale * config.legendSpaceBeforeText) + (Math.ceil(ctx.chartTextScale * config.legendFontSize));\r\n if (config.legendBorders == true) {\r\n yFirstLegendTextPos += Math.ceil(ctx.chartSpaceScale * config.legendBordersSpaceBefore) - Math.ceil(ctx.chartSpaceScale * config.legendBordersSpaceAfter);\r\n yLegendBorderPos = yFirstLegendTextPos - Math.ceil(ctx.chartSpaceScale * config.legendSpaceBeforeText) - (Math.ceil(ctx.chartTextScale * config.legendFontSize)) - (Math.ceil(ctx.chartLineScale * config.legendBordersWidth) / 2);\r\n spaceLegendHeight += 2 * Math.ceil(ctx.chartLineScale * config.legendBordersWidth) + Math.ceil(ctx.chartSpaceScale * config.legendBordersSpaceBefore) + Math.ceil(ctx.chartSpaceScale * config.legendBordersSpaceAfter);\r\n xLegendBorderPos = Math.floor(xFirstLegendTextPos - Math.ceil(ctx.chartSpaceScale * config.legendSpaceLeftText) - (Math.ceil(ctx.chartLineScale * config.legendBordersWidth) / 2));\r\n legendBorderHeight = Math.ceil(spaceLegendHeight - Math.ceil(ctx.chartLineScale * config.legendBordersWidth)) - Math.ceil(ctx.chartSpaceScale * config.legendBordersSpaceBefore) - Math.ceil(ctx.chartSpaceScale * config.legendBordersSpaceAfter);\r\n legendBorderWidth = Math.ceil(nbLegendCols * (widestLegend + Math.ceil(ctx.chartSpaceScale * config.legendSpaceBetweenTextHorizontal))) - Math.ceil(ctx.chartSpaceScale * config.legendSpaceBetweenTextHorizontal) + Math.ceil(ctx.chartLineScale * config.legendBordersWidth) + Math.ceil(ctx.chartSpaceScale * config.legendSpaceRightText) + Math.ceil(ctx.chartSpaceScale * config.legendSpaceLeftText);\r\n }\r\n break;\r\n case -2:\r\n spaceLegendHeight = legendHeight;\r\n xFirstLegendTextPos = Math.ceil(ctx.chartSpaceScale * config.spaceLeft) + (width - Math.ceil(ctx.chartSpaceScale * config.spaceLeft) - Math.ceil(ctx.chartSpaceScale * config.spaceRight) - nbLegendCols * (widestLegend + Math.ceil(ctx.chartSpaceScale * config.legendSpaceBetweenTextHorizontal)) + Math.ceil(ctx.chartSpaceScale * config.legendSpaceBetweenTextHorizontal)) / 2;\r\n yFirstLegendTextPos = (height - spaceLegendHeight) / 2 + Math.ceil(ctx.chartSpaceScale * config.legendSpaceBeforeText) + (Math.ceil(ctx.chartTextScale * config.legendFontSize));\r\n if (config.legendBorders == true) {\r\n yFirstLegendTextPos += Math.ceil(ctx.chartSpaceScale * config.legendBordersSpaceBefore) - Math.ceil(ctx.chartSpaceScale * config.legendBordersSpaceAfter);\r\n yLegendBorderPos = yFirstLegendTextPos - Math.ceil(ctx.chartSpaceScale * config.legendSpaceBeforeText) - (Math.ceil(ctx.chartTextScale * config.legendFontSize)) - (Math.ceil(ctx.chartLineScale * config.legendBordersWidth) / 2);\r\n spaceLegendHeight += 2 * Math.ceil(ctx.chartLineScale * config.legendBordersWidth) + Math.ceil(ctx.chartSpaceScale * config.legendBordersSpaceBefore) + Math.ceil(ctx.chartSpaceScale * config.legendBordersSpaceAfter);\r\n xLegendBorderPos = Math.floor(xFirstLegendTextPos - Math.ceil(ctx.chartSpaceScale * config.legendSpaceLeftText) - (Math.ceil(ctx.chartLineScale * config.legendBordersWidth) / 2));\r\n legendBorderHeight = Math.ceil(spaceLegendHeight - Math.ceil(ctx.chartLineScale * config.legendBordersWidth)) - Math.ceil(ctx.chartSpaceScale * config.legendBordersSpaceBefore) - Math.ceil(ctx.chartSpaceScale * config.legendBordersSpaceAfter);\r\n legendBorderWidth = Math.ceil(nbLegendCols * (widestLegend + Math.ceil(ctx.chartSpaceScale * config.legendSpaceBetweenTextHorizontal))) - Math.ceil(ctx.chartSpaceScale * config.legendSpaceBetweenTextHorizontal) + Math.ceil(ctx.chartLineScale * config.legendBordersWidth) + Math.ceil(ctx.chartSpaceScale * config.legendSpaceRightText) + Math.ceil(ctx.chartSpaceScale * config.legendSpaceLeftText);\r\n }\r\n break;\r\n case 3:\r\n spaceLegendHeight = legendHeight;\r\n xFirstLegendTextPos = Math.ceil(ctx.chartSpaceScale * config.spaceLeft) + (width - Math.ceil(ctx.chartSpaceScale * config.spaceLeft) - Math.ceil(ctx.chartSpaceScale * config.spaceRight) - nbLegendCols * (widestLegend + Math.ceil(ctx.chartSpaceScale * config.legendSpaceBetweenTextHorizontal)) + Math.ceil(ctx.chartSpaceScale * config.legendSpaceBetweenTextHorizontal)) / 2;\r\n availableHeight = height - topNotUsableSize - bottomNotUsableHeightWithoutXLabels;\r\n yFirstLegendTextPos = topNotUsableSize + availableHeight - spaceLegendHeight + Math.ceil(ctx.chartSpaceScale * config.legendSpaceBeforeText) + (Math.ceil(ctx.chartTextScale * config.legendFontSize));\r\n if (config.legendBorders == true) {\r\n yFirstLegendTextPos -= (Math.ceil(ctx.chartSpaceScale * config.legendBordersSpaceAfter) + Math.ceil(ctx.chartLineScale * config.legendBordersWidth));\r\n yLegendBorderPos = yFirstLegendTextPos - Math.ceil(ctx.chartSpaceScale * config.legendSpaceBeforeText) - (Math.ceil(ctx.chartTextScale * config.legendFontSize)) - (Math.ceil(ctx.chartLineScale * config.legendBordersWidth) / 2);\r\n spaceLegendHeight += 2 * Math.ceil(ctx.chartLineScale * config.legendBordersWidth) + Math.ceil(ctx.chartSpaceScale * config.legendBordersSpaceBefore) + Math.ceil(ctx.chartSpaceScale * config.legendBordersSpaceAfter);\r\n xLegendBorderPos = Math.floor(xFirstLegendTextPos - Math.ceil(ctx.chartSpaceScale * config.legendSpaceLeftText) - (Math.ceil(ctx.chartLineScale * config.legendBordersWidth) / 2));\r\n legendBorderHeight = Math.ceil(spaceLegendHeight - Math.ceil(ctx.chartLineScale * config.legendBordersWidth)) - Math.ceil(ctx.chartSpaceScale * config.legendBordersSpaceBefore) - Math.ceil(ctx.chartSpaceScale * config.legendBordersSpaceAfter);\r\n legendBorderWidth = Math.ceil(nbLegendCols * (widestLegend + Math.ceil(ctx.chartSpaceScale * config.legendSpaceBetweenTextHorizontal))) - Math.ceil(ctx.chartSpaceScale * config.legendSpaceBetweenTextHorizontal) + Math.ceil(ctx.chartLineScale * config.legendBordersWidth) + Math.ceil(ctx.chartSpaceScale * config.legendSpaceRightText) + Math.ceil(ctx.chartSpaceScale * config.legendSpaceLeftText);\r\n }\r\n break;\r\n default:\r\n spaceLegendHeight = legendHeight;\r\n yFirstLegendTextPos = height - borderWidth - Math.ceil(ctx.chartSpaceScale * config.spaceBottom) - footNoteHeight - spaceLegendHeight + Math.ceil(ctx.chartSpaceScale * config.legendSpaceBeforeText) + (Math.ceil(ctx.chartTextScale * config.legendFontSize));\r\n xFirstLegendTextPos = Math.ceil(ctx.chartSpaceScale * config.spaceLeft) + (width - Math.ceil(ctx.chartSpaceScale * config.spaceLeft) - Math.ceil(ctx.chartSpaceScale * config.spaceRight) - nbLegendCols * (widestLegend + Math.ceil(ctx.chartSpaceScale * config.legendSpaceBetweenTextHorizontal)) + Math.ceil(ctx.chartSpaceScale * config.legendSpaceBetweenTextHorizontal)) / 2;\r\n if (config.legendBorders == true) {\r\n spaceLegendHeight += 2 * Math.ceil(ctx.chartLineScale * config.legendBordersWidth) + Math.ceil(ctx.chartSpaceScale * config.legendBordersSpaceBefore) + Math.ceil(ctx.chartSpaceScale * config.legendBordersSpaceAfter);\r\n yFirstLegendTextPos -= (Math.ceil(ctx.chartLineScale * config.legendBordersWidth) + Math.ceil(ctx.chartSpaceScale * config.legendBordersSpaceAfter));\r\n yLegendBorderPos = Math.floor(height - borderWidth - Math.ceil(ctx.chartSpaceScale * config.spaceBottom) - footNoteHeight - spaceLegendHeight + (Math.ceil(ctx.chartLineScale * config.legendBordersWidth) / 2) + Math.ceil(ctx.chartSpaceScale * config.legendBordersSpaceBefore));\r\n xLegendBorderPos = Math.floor(xFirstLegendTextPos - Math.ceil(ctx.chartSpaceScale * config.legendSpaceLeftText) - (Math.ceil(ctx.chartLineScale * config.legendBordersWidth) / 2));\r\n legendBorderHeight = Math.ceil(spaceLegendHeight - Math.ceil(ctx.chartLineScale * config.legendBordersWidth)) - Math.ceil(ctx.chartSpaceScale * config.legendBordersSpaceBefore) - Math.ceil(ctx.chartSpaceScale * config.legendBordersSpaceAfter);\r\n legendBorderWidth = Math.ceil(nbLegendCols * (widestLegend + Math.ceil(ctx.chartSpaceScale * config.legendSpaceBetweenTextHorizontal))) - Math.ceil(ctx.chartSpaceScale * config.legendSpaceBetweenTextHorizontal) + Math.ceil(ctx.chartLineScale * config.legendBordersWidth) + Math.ceil(ctx.chartSpaceScale * config.legendSpaceRightText) + Math.ceil(ctx.chartSpaceScale * config.legendSpaceLeftText);\r\n }\r\n xAxisLabelPos -= spaceLegendHeight;\r\n bottomNotUsableHeightWithoutXLabels += spaceLegendHeight;\r\n break;\r\n }\r\n var fullLegendWidth = Math.ceil(ctx.chartSpaceScale * config.legendSpaceRightText) + nbLegendCols * (widestLegend + Math.ceil(ctx.chartSpaceScale * config.legendSpaceBetweenTextHorizontal)) - Math.ceil(ctx.chartSpaceScale * config.legendSpaceBetweenTextHorizontal) + Math.ceil(ctx.chartSpaceScale * config.legendSpaceLeftText);\r\n if (config.legendBorders == true) {\r\n fullLegendWidth += 2 * Math.ceil(ctx.chartLineScale * config.legendBordersWidth) + Math.ceil(ctx.chartSpaceScale * config.legendBordersSpaceLeft) + Math.ceil(ctx.chartSpaceScale * config.legendBordersSpaceRight);\r\n }\r\n\r\n switch (config.legendPosX) {\r\n case 0:\r\n case 1:\r\n xFirstLegendTextPos = Math.ceil(ctx.chartSpaceScale * config.spaceLeft) + config.canvasBorders * Math.ceil(ctx.chartLineScale * config.canvasBordersWidth) + Math.ceil(ctx.chartSpaceScale * config.legendSpaceLeftText);\r\n if (config.legendBorders == true) {\r\n xFirstLegendTextPos += (Math.ceil(ctx.chartLineScale * config.legendBordersWidth) / 2) + Math.ceil(ctx.chartSpaceScale * config.legendBordersSpaceLeft);\r\n xLegendBorderPos = Math.ceil(ctx.chartSpaceScale * config.spaceLeft) + config.canvasBorders * Math.ceil(ctx.chartLineScale * config.canvasBordersWidth) + Math.ceil(ctx.chartSpaceScale * config.legendBordersSpaceLeft);\r\n }\r\n if (config.legendPosX == 0 && ((config.legendPosY >= 1 && config.legendPosY <= 3) || config.legendPosY == -2)) {\r\n leftNotUsableSize += fullLegendWidth;\r\n yAxisLabelPosLeft += fullLegendWidth;\r\n }\r\n break;\r\n case 2:\r\n xFirstLegendTextPos = leftNotUsableSize + (width - rightNotUsableSize - leftNotUsableSize) / 2 - (Math.ceil(ctx.chartSpaceScale * config.legendSpaceLeftText) - Math.ceil(ctx.chartSpaceScale * config.legendSpaceRightText)) - (nbLegendCols * (widestLegend + Math.ceil(ctx.chartSpaceScale * config.legendSpaceBetweenTextHorizontal)) - Math.ceil(ctx.chartSpaceScale * config.legendSpaceBetweenTextHorizontal)) / 2;\r\n if (config.legendBorders == true) {\r\n xFirstLegendTextPos -= ((Math.ceil(ctx.chartLineScale * config.legendBordersWidth) / 2) + Math.ceil(ctx.chartSpaceScale * config.legendBordersSpaceRight));\r\n xLegendBorderPos = xFirstLegendTextPos - Math.ceil(ctx.chartLineScale * config.legendBordersWidth) / 2 - Math.ceil(ctx.chartSpaceScale * config.legendSpaceLeftText);\r\n }\r\n break;\r\n if ((config.legendPosY >= 1 && config.legendPosY <= 3) || config.legendPosY == -2) {\r\n rightNotUsableSize += fullLegendWidth;\r\n yAxisLabelPosRight -= fullLegendWidth;\r\n }\r\n case 3:\r\n case 4:\r\n xFirstLegendTextPos = width - rightNotUsableSize - Math.ceil(ctx.chartSpaceScale * config.legendSpaceRightText) - nbLegendCols * (widestLegend + Math.ceil(ctx.chartSpaceScale * config.legendSpaceBetweenTextHorizontal)) + Math.ceil(ctx.chartSpaceScale * config.legendSpaceBetweenTextHorizontal) / 2;\r\n if (config.legendBorders == true) {\r\n xFirstLegendTextPos -= ((Math.ceil(ctx.chartLineScale * config.legendBordersWidth) / 2) + Math.ceil(ctx.chartSpaceScale * config.legendBordersSpaceRight));\r\n xLegendBorderPos = xFirstLegendTextPos - Math.ceil(ctx.chartLineScale * config.legendBordersWidth) / 2 - Math.ceil(ctx.chartSpaceScale * config.legendSpaceLeftText);\r\n }\r\n if (config.legendPosX == 4 && ((config.legendPosY >= 1 && config.legendPosY <= 3) || config.legendPosY == -2)) {\r\n rightNotUsableSize += fullLegendWidth;\r\n yAxisLabelPosRight -= fullLegendWidth;\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n if (config.legendBorders == true) {\r\n yLegendBorderPos += Math.ceil(ctx.chartSpaceScale * config.legendYPadding);\r\n xLegendBorderPos += Math.ceil(ctx.chartSpaceScale * config.legendXPadding);\r\n\r\n }\r\n yFirstLegendTextPos += Math.ceil(ctx.chartSpaceScale * config.legendYPadding);\r\n xFirstLegendTextPos += Math.ceil(ctx.chartSpaceScale * config.legendXPadding);\r\n\r\n }\r\n }\r\n\r\n }\r\n xLabelWidth = 0;\r\n bottomNotUsableHeightWithXLabels = bottomNotUsableHeightWithoutXLabels;\r\n if (drawAxis && (config.xAxisBottom || config.xAxisTop)) {\r\n var widestLabel, highestLabel;\r\n if (reverseAxis == false) {\r\n widestLabel = widestXLabel;\r\n highestLabel = highestXLabel;\r\n nblab = data.labels.length;\r\n } else {\r\n widestLabel = widestYLabel;\r\n highestLabel = highestYLabel;\r\n nblab = ylabels.length;\r\n }\r\n if (config.rotateLabels == \"smart\") {\r\n rotateLabels = 0;\r\n if ((availableWidth + Math.ceil(ctx.chartTextScale * config.xAxisSpaceBetweenLabels)) / nblab < (widestLabel + Math.ceil(ctx.chartTextScale * config.xAxisSpaceBetweenLabels))) {\r\n rotateLabels = 45;\r\n if (availableWidth / nblab < Math.abs(Math.cos(rotateLabels * Math.PI / 180) * widestLabel)) {\r\n rotateLabels = 90;\r\n }\r\n }\r\n } else {\r\n rotateLabels = config.rotateLabels\r\n if (rotateLabels < 0) rotateLabels = 0;\r\n if (rotateLabels > 180) rotateLabels = 180;\r\n }\r\n if (rotateLabels > 90) rotateLabels += 180;\r\n xLabelHeight = Math.abs(Math.sin(rotateLabels * Math.PI / 180) * widestLabel) + Math.abs(Math.sin((rotateLabels + 90) * Math.PI / 180) * highestLabel) + Math.ceil(ctx.chartSpaceScale * config.xAxisSpaceBefore) + Math.ceil(ctx.chartSpaceScale * config.xAxisSpaceAfter);\r\n xLabelPos = height - borderWidth - Math.ceil(ctx.chartSpaceScale * config.spaceBottom) - footNoteHeight - xAxisLabelHeight - (xLabelHeight - Math.ceil(ctx.chartSpaceScale * config.xAxisSpaceBefore)) - Math.ceil(ctx.chartTextScale * config.graphSpaceAfter);\r\n xLabelWidth = Math.abs(Math.cos(rotateLabels * Math.PI / 180) * widestLabel) + Math.abs(Math.cos((rotateLabels + 90) * Math.PI / 180) * highestLabel);\r\n leftNotUsableSize = Max([leftNotUsableSize, borderWidth + Math.ceil(ctx.chartSpaceScale * config.spaceLeft) + xLabelWidth / 2]);\r\n rightNotUsableSize = Max([rightNotUsableSize, borderWidth + Math.ceil(ctx.chartSpaceScale * config.spaceRight) + xLabelWidth / 2]);\r\n availableWidth = width - leftNotUsableSize - rightNotUsableSize;\r\n if (config.legend && config.xAxisBottom && config.legendPosY == 4) {\r\n xLabelPos -= spaceLegendHeight;\r\n }\r\n bottomNotUsableHeightWithXLabels = bottomNotUsableHeightWithoutXLabels + xLabelHeight;\r\n } else {\r\n availableWidth = width - leftNotUsableSize - rightNotUsableSize;\r\n }\r\n\r\n availableHeight = height - topNotUsableSize - bottomNotUsableHeightWithXLabels;\r\n\r\n // ----------------------- DRAW EXTERNAL ELEMENTS -------------------------------------------------\r\n dispCrossImage(ctx, config, width / 2, height / 2, width / 2, height / 2, false, data, -1, -1);\r\n\r\n if (typeof config.initFunction == \"function\") config.initFunction(\"INITFUNCTION\", ctx, data, null, -1, -1, { animationValue: 0, cntiter: 0, config: config, borderX: 0, borderY: 0, midPosX: 0, midPosY: 0 });\r\n\r\n\r\n if (ylabels != \"nihil\") {\r\n // Draw Borders\r\n if (borderWidth > 0) {\r\n ctx.save();\r\n ctx.beginPath();\r\n ctx.lineWidth = 2 * borderWidth;\r\n ctx.setLineDash(lineStyleFn(config.canvasBordersStyle));\r\n ctx.strokeStyle = config.canvasBordersColor;\r\n ctx.moveTo(0, 0);\r\n ctx.lineTo(0, height);\r\n ctx.lineTo(width, height);\r\n ctx.lineTo(width, 0);\r\n ctx.lineTo(0, 0);\r\n ctx.stroke();\r\n ctx.setLineDash([]);\r\n ctx.restore();\r\n }\r\n // Draw Graph Title\r\n if (graphTitleHeight > 0) {\r\n ctx.save();\r\n ctx.beginPath();\r\n ctx.font = config.graphTitleFontStyle + \" \" + (Math.ceil(ctx.chartTextScale * config.graphTitleFontSize)).toString() + \"px \" + config.graphTitleFontFamily;\r\n ctx.fillStyle = config.graphTitleFontColor;\r\n ctx.textAlign = \"center\";\r\n ctx.textBaseline = \"bottom\";\r\n\r\n setTextBordersAndBackground(ctx, config.graphTitle, (Math.ceil(ctx.chartTextScale * config.graphTitleFontSize)), Math.ceil(ctx.chartSpaceScale * config.spaceLeft) + (width - Math.ceil(ctx.chartSpaceScale * config.spaceLeft) - Math.ceil(ctx.chartSpaceScale * config.spaceRight)) / 2, graphTitlePosY, config.graphTitleBorders, config.graphTitleBordersColor, Math.ceil(ctx.chartLineScale * config.graphTitleBordersWidth), Math.ceil(ctx.chartSpaceScale * config.graphTitleBordersXSpace), Math.ceil(ctx.chartSpaceScale * config.graphTitleBordersYSpace), config.graphTitleBordersStyle, config.graphTitleBackgroundColor, \"GRAPHTITLE\");\r\n\r\n ctx.translate(Math.ceil(ctx.chartSpaceScale * config.spaceLeft) + (width - Math.ceil(ctx.chartSpaceScale * config.spaceLeft) - Math.ceil(ctx.chartSpaceScale * config.spaceRight)) / 2, graphTitlePosY);\r\n ctx.fillTextMultiLine(config.graphTitle, 0, 0, ctx.textBaseline, (Math.ceil(ctx.chartTextScale * config.graphTitleFontSize)), true, config.detectMouseOnText, ctx, \"TITLE_TEXTMOUSE\", 0, Math.ceil(ctx.chartSpaceScale * config.spaceLeft) + (width - Math.ceil(ctx.chartSpaceScale * config.spaceLeft) - Math.ceil(ctx.chartSpaceScale * config.spaceRight)) / 2, graphTitlePosY, -1, -1);\r\n\r\n ctx.stroke();\r\n ctx.restore();\r\n }\r\n // Draw Graph Sub-Title\r\n if (graphSubTitleHeight > 0) {\r\n ctx.save();\r\n ctx.beginPath();\r\n ctx.font = config.graphSubTitleFontStyle + \" \" + (Math.ceil(ctx.chartTextScale * config.graphSubTitleFontSize)).toString() + \"px \" + config.graphSubTitleFontFamily;\r\n ctx.fillStyle = config.graphSubTitleFontColor;\r\n ctx.textAlign = \"center\";\r\n ctx.textBaseline = \"bottom\";\r\n setTextBordersAndBackground(ctx, config.graphSubTitle, (Math.ceil(ctx.chartTextScale * config.graphSubTitleFontSize)), Math.ceil(ctx.chartSpaceScale * config.spaceLeft) + (width - Math.ceil(ctx.chartSpaceScale * config.spaceLeft) - Math.ceil(ctx.chartSpaceScale * config.spaceRight)) / 2, graphSubTitlePosY, config.graphSubTitleBorders, config.graphSubTitleBordersColor, Math.ceil(ctx.chartLineScale * config.graphSubTitleBordersWidth), Math.ceil(ctx.chartSpaceScale * config.graphSubTitleBordersXSpace), Math.ceil(ctx.chartSpaceScale * config.graphSubTitleBordersYSpace), config.graphSubTitleBordersStyle, config.graphSubTitleBackgroundColor, \"GRAPHSUBTITLE\");\r\n\r\n ctx.translate(Math.ceil(ctx.chartSpaceScale * config.spaceLeft) + (width - Math.ceil(ctx.chartSpaceScale * config.spaceLeft) - Math.ceil(ctx.chartSpaceScale * config.spaceRight)) / 2, graphSubTitlePosY);\r\n ctx.fillTextMultiLine(config.graphSubTitle, 0, 0, ctx.textBaseline, (Math.ceil(ctx.chartTextScale * config.graphSubTitleFontSize)), true, config.detectMouseOnText, ctx, \"SUBTITLE_TEXTMOUSE\", 0, Math.ceil(ctx.chartSpaceScale * config.spaceLeft) + (width - Math.ceil(ctx.chartSpaceScale * config.spaceLeft) - Math.ceil(ctx.chartSpaceScale * config.spaceRight)) / 2, graphSubTitlePosY, -1, -1);\r\n ctx.stroke();\r\n ctx.restore();\r\n }\r\n // Draw Y Axis Unit\r\n if (yAxisUnitHeight > 0) {\r\n if (config.yAxisLeft) {\r\n ctx.save();\r\n ctx.beginPath();\r\n ctx.font = config.yAxisUnitFontStyle + \" \" + (Math.ceil(ctx.chartTextScale * config.yAxisUnitFontSize)).toString() + \"px \" + config.yAxisUnitFontFamily;\r\n ctx.fillStyle = config.yAxisUnitFontColor;\r\n ctx.textAlign = \"center\";\r\n ctx.textBaseline = \"bottom\";\r\n\r\n setTextBordersAndBackground(ctx, config.yAxisUnit, (Math.ceil(ctx.chartTextScale * config.yAxisUnitFontSize)), leftNotUsableSize, yAxisUnitPosY, config.yAxisUnitBorders, config.yAxisUnitBordersColor, Math.ceil(ctx.chartLineScale * config.yAxisUnitBordersWidth), Math.ceil(ctx.chartSpaceScale * config.yAxisUnitBordersXSpace), Math.ceil(ctx.chartSpaceScale * config.yAxisUnitBordersYSpace), config.yAxisUnitBordersStyle, config.yAxisUnitBackgroundColor, \"YAXISUNIT\");\r\n ctx.translate(leftNotUsableSize, yAxisUnitPosY);\r\n ctx.fillTextMultiLine(config.yAxisUnit, 0, 0, ctx.textBaseline, (Math.ceil(ctx.chartTextScale * config.yAxisUnitFontSize)), true, config.detectMouseOnText, ctx, \"YLEFTAXISUNIT_TEXTMOUSE\", 0, leftNotUsableSize, yAxisUnitPosY, -1, -1);\r\n ctx.stroke();\r\n ctx.restore();\r\n }\r\n if (config.yAxisRight) {\r\n if (config.yAxisUnit2 == '') config.yAxisUnit2 = config.yAxisUnit;\r\n ctx.save();\r\n ctx.beginPath();\r\n ctx.font = config.yAxisUnitFontStyle + \" \" + (Math.ceil(ctx.chartTextScale * config.yAxisUnitFontSize)).toString() + \"px \" + config.yAxisUnitFontFamily;\r\n ctx.fillStyle = config.yAxisUnitFontColor;\r\n ctx.textAlign = \"center\";\r\n ctx.textBaseline = \"bottom\";\r\n setTextBordersAndBackground(ctx, config.yAxisUnit2, (Math.ceil(ctx.chartTextScale * config.yAxisUnitFontSize)), width - rightNotUsableSize, yAxisUnitPosY, config.yAxisUnitBorders, config.yAxisUnitBordersColor, Math.ceil(ctx.chartLineScale * config.yAxisUnitBordersWidth), Math.ceil(ctx.chartSpaceScale * config.yAxisUnitBordersXSpace), Math.ceil(ctx.chartSpaceScale * config.yAxisUnitBordersYSpace), config.yAxisUnitBordersStyle, config.yAxisUnitBackgroundColor, \"YAXISUNIT\");\r\n ctx.translate(width - rightNotUsableSize, yAxisUnitPosY);\r\n ctx.fillTextMultiLine(config.yAxisUnit2, 0, 0, ctx.textBaseline, (Math.ceil(ctx.chartTextScale * config.yAxisUnitFontSize)), true, config.detectMouseOnText, ctx, \"YRIGHTAXISUNIT_TEXTMOUSE\", 0, width - rightNotUsableSize, yAxisUnitPosY, -1, -1);\r\n ctx.stroke();\r\n ctx.restore();\r\n }\r\n }\r\n // Draw Y Axis Label\r\n if (yAxisLabelWidth > 0) {\r\n if (config.yAxisLeft) {\r\n ctx.save();\r\n ctx.beginPath();\r\n ctx.font = config.yAxisFontStyle + \" \" + (Math.ceil(ctx.chartTextScale * config.yAxisFontSize)).toString() + \"px \" + config.yAxisFontFamily;\r\n ctx.fillStyle = config.yAxisFontColor;\r\n ctx.textAlign = \"center\";\r\n ctx.textBaseline = \"bottom\";\r\n\r\n ctx.translate(yAxisLabelPosLeft, topNotUsableSize + (availableHeight / 2));\r\n ctx.rotate(-(90 * (Math.PI / 180)));\r\n setTextBordersAndBackground(ctx, config.yAxisLabel, (Math.ceil(ctx.chartTextScale * config.yAxisFontSize)), 0, 0, config.yAxisLabelBorders, config.yAxisLabelBordersColor, Math.ceil(ctx.chartLineScale * config.yAxisLabelBordersWidth), Math.ceil(ctx.chartSpaceScale * config.yAxisLabelBordersXSpace), Math.ceil(ctx.chartSpaceScale * config.yAxisLabelBordersYSpace), config.yAxisLabelBordersStyle, config.yAxisLabelBackgroundColor, \"YAXISLABELLEFT\");\r\n ctx.fillTextMultiLine(config.yAxisLabel, 0, 0, ctx.textBaseline, (Math.ceil(ctx.chartTextScale * config.yAxisFontSize)), false, config.detectMouseOnText, ctx, \"YLEFTAXISLABEL_TEXTMOUSE\", -(90 * (Math.PI / 180)), yAxisLabelPosLeft, topNotUsableSize + (availableHeight / 2), -1, -1);\r\n ctx.stroke();\r\n ctx.restore();\r\n }\r\n if (config.yAxisRight) {\r\n if (config.yAxisLabel2 == '') config.yAxisLabel2 = config.yAxisLabel;\r\n ctx.save();\r\n ctx.beginPath();\r\n ctx.font = config.yAxisFontStyle + \" \" + (Math.ceil(ctx.chartTextScale * config.yAxisFontSize)).toString() + \"px \" + config.yAxisFontFamily;\r\n ctx.fillStyle = config.yAxisFontColor;\r\n ctx.textAlign = \"center\";\r\n ctx.textBaseline = \"bottom\";\r\n ctx.translate(yAxisLabelPosRight, topNotUsableSize + (availableHeight / 2));\r\n ctx.rotate(+(90 * (Math.PI / 180)));\r\n setTextBordersAndBackground(ctx, config.yAxisLabel2, (Math.ceil(ctx.chartTextScale * config.yAxisFontSize)), 0, 0, config.yAxisLabelBorders, config.yAxisLabelBordersColor, Math.ceil(ctx.chartLineScale * config.yAxisLabelBordersWidth), Math.ceil(ctx.chartSpaceScale * config.yAxisLabelBordersXSpace), Math.ceil(ctx.chartSpaceScale * config.yAxisLabelBordersYSpace), config.yAxisLabelBordersStyle, config.yAxisLabelBackgroundColor, \"YAXISLABELLEFT\");\r\n ctx.fillTextMultiLine(config.yAxisLabel2, 0, 0, ctx.textBaseline, (Math.ceil(ctx.chartTextScale * config.yAxisFontSize)), false, config.detectMouseOnText, ctx, \"YRIGHTAXISLABEL_TEXTMOUSE\", +(90 * (Math.PI / 180)), yAxisLabelPosRight, topNotUsableSize + (availableHeight / 2), -1, -1);\r\n ctx.stroke();\r\n ctx.restore();\r\n }\r\n }\r\n // Draw X Axis Label\r\n if (xAxisLabelHeight > 0) {\r\n if (config.xAxisBottom) {\r\n ctx.save();\r\n ctx.beginPath();\r\n ctx.font = config.xAxisFontStyle + \" \" + (Math.ceil(ctx.chartTextScale * config.xAxisFontSize)).toString() + \"px \" + config.xAxisFontFamily;\r\n ctx.fillStyle = config.xAxisFontColor;\r\n ctx.textAlign = \"center\";\r\n ctx.textBaseline = \"bottom\";\r\n setTextBordersAndBackground(ctx, config.xAxisLabel, (Math.ceil(ctx.chartTextScale * config.xAxisFontSize)), leftNotUsableSize + (availableWidth / 2), xAxisLabelPos, config.xAxisLabelBorders, config.xAxisLabelBordersColor, Math.ceil(ctx.chartLineScale * config.xAxisLabelBordersWidth), Math.ceil(ctx.chartSpaceScale * config.xAxisLabelBordersXSpace), Math.ceil(ctx.chartSpaceScale * config.xAxisLabelBordersYSpace), config.xAxisLabelBordersStyle, config.xAxisLabelBackgroundColor, \"XAXISLABEL\");\r\n ctx.translate(leftNotUsableSize + (availableWidth / 2), xAxisLabelPos);\r\n ctx.fillTextMultiLine(config.xAxisLabel, 0, 0, ctx.textBaseline, (Math.ceil(ctx.chartTextScale * config.xAxisFontSize)), true, config.detectMouseOnText, ctx, \"XAXISLABEL_TEXTMOUSE\", 0, leftNotUsableSize + (availableWidth / 2), xAxisLabelPos, -1, -1);\r\n ctx.stroke();\r\n ctx.restore();\r\n }\r\n }\r\n // Draw Legend\r\n var legendMsr;\r\n if (nbeltLegend > 1 || (nbeltLegend == 1 && config.showSingleLegend)) {\r\n legendMsr = {\r\n dispLegend: true, xLegendBorderPos: xLegendBorderPos,\r\n yLegendBorderPos: yLegendBorderPos, legendBorderWidth: legendBorderWidth, legendBorderHeight: legendBorderHeight,\r\n nbLegendCols: nbLegendCols, xFirstLegendTextPos: xFirstLegendTextPos, yFirstLegendTextPos: yFirstLegendTextPos,\r\n drawLegendOnData: drawLegendOnData, reverseLegend: reverseLegend, legendBox: legendBox, widestLegend: widestLegend\r\n };\r\n if (config.legendPosY == 0 || config.legendPosY == 4 || config.legendPosX == 0 || config.legendPosX == 4) {\r\n\r\n drawLegend(legendMsr, data, config, ctx, typegraph);\r\n legendMsr = { dispLegend: false };\r\n }\r\n } else {\r\n legendMsr = { dispLegend: false };\r\n }\r\n // Draw FootNote\r\n if (config.footNote.trim() != \"\") {\r\n ctx.save();\r\n ctx.font = config.footNoteFontStyle + \" \" + (Math.ceil(ctx.chartTextScale * config.footNoteFontSize)).toString() + \"px \" + config.footNoteFontFamily;\r\n ctx.fillStyle = config.footNoteFontColor;\r\n ctx.textAlign = \"center\";\r\n ctx.textBaseline = \"bottom\";\r\n\r\n setTextBordersAndBackground(ctx, config.footNote, (Math.ceil(ctx.chartTextScale * config.footNoteFontSize)), leftNotUsableSize + (availableWidth / 2), footNotePosY, config.footNoteBorders, config.footNoteBordersColor, Math.ceil(ctx.chartLineScale * config.footNoteBordersWidth), Math.ceil(ctx.chartSpaceScale * config.footNoteBordersXSpace), Math.ceil(ctx.chartSpaceScale * config.footNoteBordersYSpace), config.footNoteBordersStyle, config.footNoteBackgroundColor, \"FOOTNOTE\");\r\n\r\n ctx.translate(leftNotUsableSize + (availableWidth / 2), footNotePosY);\r\n ctx.fillTextMultiLine(config.footNote, 0, 0, ctx.textBaseline, (Math.ceil(ctx.chartTextScale * config.footNoteFontSize)), true, config.detectMouseOnText, ctx, \"FOOTNOTE_TEXTMOUSE\", 0, leftNotUsableSize + (availableWidth / 2), footNotePosY, -1, -1);\r\n ctx.stroke();\r\n ctx.restore();\r\n }\r\n }\r\n clrx = leftNotUsableSize;\r\n clrwidth = availableWidth;\r\n clry = topNotUsableSize;\r\n clrheight = availableHeight;\r\n return {\r\n leftNotUsableSize: leftNotUsableSize,\r\n rightNotUsableSize: rightNotUsableSize,\r\n availableWidth: availableWidth,\r\n topNotUsableSize: topNotUsableSize,\r\n bottomNotUsableHeightWithoutXLabels: bottomNotUsableHeightWithoutXLabels,\r\n bottomNotUsableHeightWithXLabels: bottomNotUsableHeightWithXLabels,\r\n availableHeight: availableHeight,\r\n widestXLabel: widestXLabel,\r\n highestXLabel: highestXLabel,\r\n widestYLabel: widestYLabel,\r\n widestYLabel2: widestYLabel2,\r\n highestYLabel: highestYLabel,\r\n rotateLabels: rotateLabels,\r\n xLabelPos: xLabelPos,\r\n clrx: clrx,\r\n clry: clry,\r\n clrwidth: clrwidth,\r\n clrheight: clrheight,\r\n legendMsr: legendMsr\r\n };\r\n };\r\n\r\n\r\n // Function for drawing lines (BarLine|Line)\r\n\r\n function drawLinesDataset(animPc, data, config, ctx, statData, vars) {\r\n var y1, y2, y3, diffnb, diffnbj, fact, currentAnimPc;\r\n var prevypos;\r\n var pts = [];\r\n for (var i = 0; i < data.datasets.length; i++) {\r\n if (setOptionValue(1, \"ANIMATION\", ctx, data, statData, data.datasets[i].animation, config.animation, i, -1, { nullvalue: null }) == true || animPc >= 1) {\r\n prevypos = \"undefined\";\r\n if (statData[i][0].tpchart != \"Line\") continue;\r\n if (statData[i].length == 0) continue;\r\n if (statData[i][0].firstNotMissing == -1) continue;\r\n\r\n ctx.save();\r\n ctx.beginPath();\r\n\r\n prevAnimPc = { mainVal: 0, subVal: 0, animVal: 0 };\r\n var firstpt = -1;\r\n var lastxPos = -1;\r\n for (var j = statData[i][0].firstNotMissing; j <= statData[i][0].lastNotMissing; j++) {\r\n if (prevAnimPc.animVal == 0 && j > statData[i][0].firstNotMissing) continue;\r\n currentAnimPc = animationCorrection(animPc, data, config, i, j, 0);\r\n if (currentAnimPc.mainVal == 0 && (prevAnimPc.mainVal > 0 && firstpt != -1)) {\r\n ctx.setLineDash(lineStyleFn(setOptionValue(1, \"LINEDASH\", ctx, data, statData, data.datasets[i].datasetStrokeStyle, config.datasetStrokeStyle, i, j, { nullvalue: null })));\r\n ctx.stroke();\r\n ctx.setLineDash([]);\r\n if (config.extrapolateMissingData) {\r\n y1 = statData[i][statData[i][j].prevNotMissing].yAxisPos - prevAnimPc.mainVal * statData[i][statData[i][j].prevNotMissing].yPosOffset;\r\n y2 = statData[i][j].yAxisPos - prevAnimPc.mainVal * statData[i][statData[i][j - 1].nextNotMissing].yPosOffset;\r\n diffnb = statData[i][j - 1].nextNotMissing - statData[i][j].prevNotMissing;\r\n diffnbj = (j - 1) - statData[i][j].prevNotMissing;\r\n fact = (diffnbj + prevAnimPc.subVal) / diffnb;\r\n y3 = y1 + fact * (y2 - y1);\r\n traceLine(pts, ctx, statData[i][statData[i][j].prevNotMissing].xPos + fact * (statData[i][statData[i][j - 1].nextNotMissing].xPos - statData[i][statData[i][j].prevNotMissing].xPos), y3, config, data, statData, i, setYposOrigin(i, j, data, statData));\r\n closebz(pts, ctx, config, i);\r\n ctx.setLineDash(lineStyleFn(setOptionValue(1, \"LINEDASH\", ctx, data, statData, data.datasets[i].datasetStrokeStyle, config.datasetStrokeStyle, i, j, { nullvalue: null })));\r\n ctx.stroke();\r\n ctx.setLineDash([]);\r\n ctx.strokeStyle = \"rgba(0,0,0,0)\";\r\n if (config.datasetFill && setOptionValue(1, \"LINKTYPE\", ctx, data, statData, data.datasets[i].linkType, config.linkType, i, j, { nullvalue: null }) != 1) {\r\n ctx.lineTo(statData[i][statData[i][j].prevNotMissing].xPos + fact * (statData[i][statData[i][j - 1].nextNotMissing].xPos - statData[i][statData[i][j].prevNotMissing].xPos), statData[i][j].yAxisPos);\r\n ctx.lineTo(statData[i][firstpt].xPos, statData[i][firstpt].xAxisPosY - statData[i][0].zeroY);\r\n ctx.closePath();\r\n ctx.fillStyle = setOptionValue(1, \"COLOR\", ctx, data, statData, data.datasets[i].fillColor, config.defaultFillColor, i, j, { animationValue: currentAnimPc.mainVal, xPosLeft: statData[i][0].xPos, yPosBottom: Math.max(statData[i][0].yAxisPos, statData[i][0].yAxisPos - ((config.animationLeftToRight) ? 1 : 1 * currentAnimPc.mainVal) * statData[i][0].lminvalue_offset), xPosRight: statData[i][data.datasets[i].data.length - 1].xPos, yPosTop: Math.min(statData[i][0].yAxisPos, statData[i][0].yAxisPos - ((config.animationLeftToRight) ? 1 : 1 * currentAnimPc.mainVal) * statData[i][0].lmaxvalue_offset) });\r\n ctx.fill();\r\n firstpt = -1;\r\n }\r\n } else if (!(typeof statData[i][j].value == \"undefined\")) {\r\n traceLine(pts, ctx, statData[i][j - 1].xPos + prevAnimPc.subVal * (statData[i][j].xPos - statData[i][j - 1].xPos), statData[i][j].yAxisPos - prevAnimPc.mainVal * statData[i][statData[i][j - 1].nextNotMissing].yPosOffset, config, data, statData, i, setYposOrigin(i, j, data, statData));\r\n closebz(pts, ctx, config, i);\r\n ctx.setLineDash(lineStyleFn(setOptionValue(1, \"LINEDASH\", ctx, data, statData, data.datasets[i].datasetStrokeStyle, config.datasetStrokeStyle, i, j, { nullvalue: null })));\r\n ctx.stroke();\r\n ctx.setLineDash([]);\r\n ctx.strokeStyle = \"rgba(0,0,0,0)\";\r\n if (config.datasetFill && setOptionValue(1, \"LINKTYPE\", ctx, data, statData, data.datasets[i].linkType, config.linkType, i, j, { nullvalue: null }) != 1) {\r\n ctx.lineTo(statData[i][j - 1].xPos + prevAnimPc.subVal * (statData[i][j].xPos - statData[i][j - 1].xPos), statData[i][j].yAxisPos);\r\n ctx.lineTo(statData[i][firstpt].xPos, statData[i][firstpt].xAxisPosY - statData[i][0].zeroY);\r\n ctx.closePath();\r\n ctx.fillStyle = setOptionValue(1, \"COLOR\", ctx, data, statData, data.datasets[i].fillColor, config.defaultFillColor, i, j, { animationValue: currentAnimPc.mainVal, xPosLeft: statData[i][0].xPos, yPosBottom: Math.max(statData[i][0].yAxisPos, statData[i][0].yAxisPos - ((config.animationLeftToRight) ? 1 : 1 * currentAnimPc.mainVal) * statData[i][0].lminvalue_offset), xPosRight: statData[i][data.datasets[i].data.length - 1].xPos, yPosTop: Math.min(statData[i][0].yAxisPos, statData[i][0].yAxisPos - ((config.animationLeftToRight) ? 1 : 1 * currentAnimPc.mainVal) * statData[i][0].lmaxvalue_offset) });\r\n ctx.fill();\r\n }\r\n }\r\n prevAnimPc = currentAnimPc;\r\n continue;\r\n } else if (currentAnimPc.totVal == 0) {\r\n ctx.setLineDash(lineStyleFn(setOptionValue(1, \"LINEDASH\", ctx, data, statData, data.datasets[i].datasetStrokeStyle, config.datasetStrokeStyle, i, j, { nullvalue: null })));\r\n ctx.stroke();\r\n ctx.setLineDash([]);\r\n ctx.strokeStyle = \"rgba(0,0,0,0)\";\r\n } else {\r\n ctx.setLineDash(lineStyleFn(setOptionValue(1, \"LINEDASH\", ctx, data, statData, data.datasets[i].datasetStrokeStyle, config.datasetStrokeStyle, i, j, { nullvalue: null })));\r\n ctx.stroke();\r\n ctx.setLineDash([]);\r\n ctx.strokeStyle = setOptionValue(1, \"STROKECOLOR\", ctx, data, statData, data.datasets[i].strokeColor, config.defaultStrokeColor, i, j, { nullvalue: null });\r\n }\r\n prevAnimPc = currentAnimPc;\r\n\r\n switch (typeof data.datasets[i].data[j]) {\r\n case \"undefined\":\r\n if (!config.extrapolateMissingData) {\r\n if (firstpt == -1) continue;\r\n closebz(pts, ctx, config, i);\r\n ctx.setLineDash(lineStyleFn(setOptionValue(1, \"LINEDASH\", ctx, data, statData, data.datasets[i].datasetStrokeStyle, config.datasetStrokeStyle, i, j, { nullvalue: null })));\r\n ctx.stroke();\r\n ctx.setLineDash([]);\r\n if (config.datasetFill && firstpt != -1 && setOptionValue(1, \"LINKTYPE\", ctx, data, statData, data.datasets[i].linkType, config.linkType, i, j, { nullvalue: null }) != 1) {\r\n lastxPos = -1;\r\n ctx.strokeStyle = \"rgba(0,0,0,0)\";\r\n ctx.lineTo(statData[i][j - 1].xPos, statData[i][j - 1].yAxisPos);\r\n ctx.lineTo(statData[i][firstpt].xPos, statData[i][firstpt].yAxisPos);\r\n ctx.closePath();\r\n ctx.fillStyle = setOptionValue(1, \"COLOR\", ctx, data, statData, data.datasets[i].fillColor, config.defaultFillColor, i, j, { animationValue: currentAnimPc.mainVal, xPosLeft: statData[i][0].xPos, yPosBottom: Math.max(statData[i][0].yAxisPos, statData[i][0].yAxisPos - ((config.animationLeftToRight) ? 1 : 1 * currentAnimPc.mainVal) * statData[i][0].lminvalue_offset), xPosRight: statData[i][data.datasets[i].data.length - 1].xPos, yPosTop: Math.min(statData[i][0].yAxisPos, statData[i][0].yAxisPos - ((config.animationLeftToRight) ? 1 : 1 * currentAnimPc.mainVal) * statData[i][0].lmaxvalue_offset) });\r\n ctx.fill();\r\n }\r\n ctx.beginPath();\r\n prevAnimPc = { mainVal: 0, subVal: 0 };\r\n firstpt = -1;\r\n } else if (currentAnimPc.subVal > 0) {\r\n lastxPos = statData[i][j].xPos + currentAnimPc.subVal * (statData[i][j + 1].xPos - statData[i][j].xPos);\r\n y1 = statData[i][statData[i][j + 1].prevNotMissing].yAxisPos - statData[i][statData[i][j + 1].prevNotMissing].yPosOffset;\r\n y2 = statData[i][statData[i][j].nextNotMissing].yAxisPos - statData[i][statData[i][j].nextNotMissing].yPosOffset;\r\n diffnb = statData[i][j].nextNotMissing - statData[i][j + 1].prevNotMissing;\r\n diffnbj = (j) - statData[i][j + 1].prevNotMissing;\r\n fact = (diffnbj + prevAnimPc.subVal) / diffnb;\r\n y3 = y1 + fact * (y2 - y1);\r\n //\t\t\t\t\t\t\t\ttraceLine(pts,ctx,statData[i][j].xPos + currentAnimPc.subVal*(statData[i][j+1].xPos-statData[i][j].xPos), y3,config,data,statData,i);\r\n traceLine(pts, ctx, statData[i][statData[i][j].prevNotMissing].xPos + fact * (statData[i][statData[i][j - 1].nextNotMissing].xPos - statData[i][statData[i][j].prevNotMissing].xPos), y3, config, data, statData, i, setYposOrigin(i, j, data, statData));\r\n }\r\n break;\r\n default:\r\n ctx.lineWidth = Math.ceil(ctx.chartLineScale * setOptionValue(1, \"LINEWIDTH\", ctx, data, statData, data.datasets[i].datasetStrokeWidth, config.datasetStrokeWidth, i, j, { nullvalue: null }));\r\n if (firstpt == -1) {\r\n firstpt = j;\r\n ctx.beginPath();\r\n if (setOptionValue(1, \"LINKTYPE\", ctx, data, statData, data.datasets[i].linkType, config.linkType, i, j, { nullvalue: null }) == 1) {\r\n if (typeof statData[i][j].yPosOffsetOrigin != \"undefined\") ctx.moveTo(statData[i][j].xPos, statData[i][j].yAxisPos - currentAnimPc.mainVal * statData[i][j].yPosOffsetOrigin);\r\n else ctx.moveTo(statData[i][firstpt].xPos, statData[i][firstpt].xAxisPosY - statData[i][0].zeroY);\r\n ctx.lineTo(statData[i][j].xPos, statData[i][j].yAxisPos - currentAnimPc.mainVal * statData[i][j].yPosOffset);\r\n } else ctx.moveTo(statData[i][j].xPos, statData[i][j].yAxisPos - currentAnimPc.mainVal * statData[i][j].yPosOffset);\r\n initbz(pts, statData[i][j].xPos, statData[i][j].yAxisPos - currentAnimPc.mainVal * statData[i][j].yPosOffset, i);\r\n lastxPos = statData[i][j].xPos;\r\n } else {\r\n lastxPos = statData[i][j].xPos;\r\n traceLine(pts, ctx, statData[i][j].xPos, statData[i][j].yAxisPos - currentAnimPc.mainVal * statData[i][j].yPosOffset, config, data, statData, i, setYposOrigin(i, j, data, statData));\r\n }\r\n if (currentAnimPc.subVal > 0 && statData[i][j].nextNotMissing != -1 && (config.extrapolateMissing || statData[i][j].nextNotMissing == j + 1)) {\r\n lastxPos = statData[i][j].xPos + currentAnimPc.subVal * (statData[i][j + 1].xPos - statData[i][j].xPos);\r\n y1 = statData[i][statData[i][j + 1].prevNotMissing].yAxisPos - statData[i][statData[i][j + 1].prevNotMissing].yPosOffset;\r\n y2 = statData[i][statData[i][j].nextNotMissing].yAxisPos - statData[i][statData[i][j].nextNotMissing].yPosOffset;\r\n y3 = y1 + currentAnimPc.subVal * (y2 - y1);\r\n traceLine(pts, ctx, statData[i][j].xPos + currentAnimPc.subVal * (statData[i][statData[i][j].nextNotMissing].xPos - statData[i][j].xPos), y3, config, data, statData, i, setYposOrigin(i, j, data, statData));\r\n }\r\n break\r\n }\r\n }\r\n closebz(pts, ctx, config, i);\r\n ctx.setLineDash(lineStyleFn(setOptionValue(1, \"LINEDASH\", ctx, data, statData, data.datasets[i].datasetStrokeStyle, config.datasetStrokeStyle, i, j, { nullvalue: null })));\r\n ctx.stroke();\r\n ctx.setLineDash([]);\r\n if (config.datasetFill && setOptionValue(1, \"LINKTYPE\", ctx, data, statData, data.datasets[i].linkType, config.linkType, i, j, { nullvalue: null }) != 1) {\r\n if (firstpt >= 0) {\r\n ctx.strokeStyle = \"rgba(0,0,0,0)\";\r\n ctx.lineTo(lastxPos, statData[i][0].xAxisPosY - statData[i][0].zeroY);\r\n ctx.lineTo(statData[i][firstpt].xPos, statData[i][firstpt].xAxisPosY - statData[i][0].zeroY);\r\n ctx.closePath();\r\n ctx.fillStyle = setOptionValue(1, \"COLOR\", ctx, data, statData, data.datasets[i].fillColor, config.defaultFillColor, i, -1, { animationValue: currentAnimPc.mainVal, xPosLeft: statData[i][0].xPos, yPosBottom: Math.max(statData[i][0].yAxisPos, statData[i][0].yAxisPos - ((config.animationLeftToRight) ? 1 : 1 * currentAnimPc.mainVal) * statData[i][0].lminvalue_offset), xPosRight: statData[i][data.datasets[i].data.length - 1].xPos, yPosTop: Math.min(statData[i][0].yAxisPos, statData[i][0].yAxisPos - ((config.animationLeftToRight) ? 1 : 1 * currentAnimPc.mainVal) * statData[i][0].lmaxvalue_offset) });\r\n ctx.fill();\r\n }\r\n }\r\n ctx.restore();\r\n if (config.pointDot && animPc >= 1) {\r\n for (j = 0; j < data.datasets[i].data.length; j++) {\r\n if (!(typeof (data.datasets[i].data[j]) == 'undefined')) {\r\n currentAnimPc = animationCorrection(animPc, data, config, i, j, 0);\r\n if (currentAnimPc.mainVal > 0 || !config.animationLeftToRight) {\r\n ctx.beginPath();\r\n ctx.fillStyle = setOptionValue(1, \"MARKERFILLCOLOR\", ctx, data, statData, data.datasets[i].pointColor, config.defaultStrokeColor, i, j, { nullvalue: true });\r\n ctx.strokeStyle = setOptionValue(1, \"MARKERSTROKESTYLE\", ctx, data, statData, data.datasets[i].pointStrokeColor, config.defaultStrokeColor, i, j, { nullvalue: true });\r\n ctx.lineWidth = setOptionValue(ctx.chartLineScale, \"MARKERLINEWIDTH\", ctx, data, statData, data.datasets[i].pointDotStrokeWidth, config.pointDotStrokeWidth, i, j, { nullvalue: true });\r\n var markerShape = setOptionValue(1, \"MARKERSHAPE\", ctx, data, statData, data.datasets[i].markerShape, config.markerShape, i, j, { nullvalue: true });\r\n var markerRadius = setOptionValue(ctx.chartSpaceScale, \"MARKERRADIUS\", ctx, data, statData, data.datasets[i].pointDotRadius, config.pointDotRadius, i, j, { nullvalue: true });\r\n var markerStrokeStyle = setOptionValue(1, \"MARKERSTROKESTYLE\", ctx, data, statData, data.datasets[i].pointDotStrokeStyle, config.pointDotStrokeStyle, i, j, { nullvalue: true });\r\n drawMarker(ctx, statData[i][j].xPos, statData[i][j].yAxisPos - currentAnimPc.mainVal * statData[i][j].yPosOffset, markerShape, markerRadius, markerStrokeStyle);\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (animPc >= config.animationStopValue) {\r\n for (j = 0; j < data.datasets[i].data.length; j++) {\r\n if (typeof (data.datasets[i].data[j]) == 'undefined') continue;\r\n jsGraphAnnotate[ctx.ChartNewId][jsGraphAnnotate[ctx.ChartNewId].length] = [\"POINT\", i, j, statData, setOptionValue(1, \"ANNOTATEDISPLAY\", ctx, data, statData, data.datasets[i].annotateDisplay, config.annotateDisplay, i, j, { nullValue: true })];\r\n if (setOptionValue(1, \"INGRAPHDATASHOW\", ctx, data, statData, data.datasets[i].inGraphDataShow, config.inGraphDataShow, i, j, { nullValue: true })) {\r\n ctx.save();\r\n ctx.textAlign = setOptionValue(1, \"INGRAPHDATAALIGN\", ctx, data, statData, undefined, config.inGraphDataAlign, i, j, { nullValue: true });\r\n ctx.textBaseline = setOptionValue(1, \"INGRAPHDATAVALIGN\", ctx, data, statData, undefined, config.inGraphDataVAlign, i, j, { nullValue: true });\r\n ctx.font = setOptionValue(1, \"INGRAPHDATAFONTSTYLE\", ctx, data, statData, undefined, config.inGraphDataFontStyle, i, j, { nullValue: true }) + ' ' + setOptionValue(ctx.chartTextScale, \"INGRAPHDATAFONTSIZE\", ctx, data, statData, undefined, config.inGraphDataFontSize, i, j, { nullValue: true }) + 'px ' + setOptionValue(1, \"INGRAPHDATAFONTFAMILY\", ctx, data, statData, undefined, config.inGraphDataFontFamily, i, j, { nullValue: true });\r\n ctx.fillStyle = setOptionValue(1, \"INGRAPHDATAFONTCOLOR\", ctx, data, statData, undefined, config.inGraphDataFontColor, i, j, { nullValue: true });\r\n var paddingTextX = setOptionValue(ctx.chartSpaceScale, \"INGRAPHDATAPADDINGX\", ctx, data, statData, undefined, config.inGraphDataPaddingX, i, j, { nullValue: true }),\r\n paddingTextY = setOptionValue(ctx.chartSpaceScale, \"INGRAPHDATAPADDINGY\", ctx, data, statData, undefined, config.inGraphDataPaddingY, i, j, { nullValue: true });\r\n var dispString = tmplbis(setOptionValue(1, \"INGRAPHDATATMPL\", ctx, data, statData, undefined, config.inGraphDataTmpl, i, j, { nullValue: true }), statData[i][j], config);\r\n ctx.translate(statData[i][j].xPos + paddingTextX, statData[i][j].yAxisPos - currentAnimPc.mainVal * statData[i][j].yPosOffset - paddingTextY);\r\n var rotateVal = setOptionValue(1, \"INGRAPHDATAROTATE\", ctx, data, statData, undefined, config.inGraphDataRotate, i, j, { nullValue: true }) * (Math.PI / 180);\r\n ctx.rotate(rotateVal);\r\n setTextBordersAndBackground(ctx, dispString, setOptionValue(ctx.chartTextScale, \"INGRAPHDATAFONTSIZE\", ctx, data, statData, undefined, config.inGraphDataFontSize, i, j, { nullValue: true }), 0, 0, setOptionValue(1, \"INGRAPHDATABORDERS\", ctx, data, statData, undefined, config.inGraphDataBorders, i, j, { nullValue: true }), setOptionValue(1, \"INGRAPHDATABORDERSCOLOR\", ctx, data, statData, undefined, config.inGraphDataBordersColor, i, j, { nullValue: true }), setOptionValue(ctx.chartLineScale, \"INGRAPHDATABORDERSWIDTH\", ctx, data, statData, undefined, config.inGraphDataBordersWidth, i, j, { nullValue: true }), setOptionValue(ctx.chartSpaceScale, \"INGRAPHDATABORDERSXSPACE\", ctx, data, statData, undefined, config.inGraphDataBordersXSpace, i, j, { nullValue: true }), setOptionValue(ctx.chartSpaceScale, \"INGRAPHDATABORDERSYSPACE\", ctx, data, statData, undefined, config.inGraphDataBordersYSpace, i, j, { nullValue: true }), setOptionValue(1, \"INGRAPHDATABORDERSSTYLE\", ctx, data, statData, undefined, config.inGraphDataBordersStyle, i, j, { nullValue: true }), setOptionValue(1, \"INGRAPHDATABACKGROUNDCOLOR\", ctx, data, statData, undefined, config.inGraphDataBackgroundColor, i, j, { nullValue: true }), \"INGRAPHDATA\");\r\n ctx.fillTextMultiLine(dispString, 0, 0, ctx.textBaseline, setOptionValue(ctx.chartTextScale, \"INGRAPHDATAFONTSIZE\", ctx, data, statData, undefined, config.inGraphDataFontSize, i, j, { nullValue: true }), true, config.detectMouseOnText, ctx, \"INGRAPHDATA_TEXTMOUSE\", rotateVal, statData[i][j].xPos + paddingTextX, statData[i][j].yAxisPos - currentAnimPc.mainVal * statData[i][j].yPosOffset - paddingTextY, i, j);\r\n ctx.restore();\r\n }\r\n }\r\n }\r\n }\r\n };\r\n\r\n\r\n function initbz(pts, xpos, ypos, i) {\r\n if (setOptionValue(1, \"LINKTYPE\", ctx, data, statData, data.datasets[i].linkType, config.linkType, i, j, { nullvalue: null }) == 0 && setOptionValue(1, \"BEZIERCURVE\", ctx, data, statData, undefined, config.bezierCurve, i, -1, { nullValue: true })) {\r\n pts.length = 0;\r\n pts.push(xpos); pts.push(ypos);\r\n }\r\n prevypos = ypos;\r\n };\r\n\r\n function setYposOrigin(i, j, data, statData) {\r\n yposOrigin = \"undefined\";\r\n if (typeof statData[i][j].yPosOffsetOrigin != \"undefined\") yposOrigin = statData[i][j].yAxisPos - currentAnimPc.mainVal * statData[i][j].yPosOffsetOrigin;\r\n return (yposOrigin);\r\n };\r\n\r\n\r\n function traceLine(pts, ctx, xpos, ypos, config, data, statData, i, yposOrigin) {\r\n if (setOptionValue(1, \"LINKTYPE\", ctx, data, statData, data.datasets[i].linkType, config.linkType, i, j, { nullvalue: null }) == 0 && setOptionValue(1, \"BEZIERCURVE\", ctx, data, statData, undefined, config.bezierCurve, i, -1, { nullValue: true })) {\r\n pts.push(xpos); pts.push(ypos);\r\n } else {\r\n if (setOptionValue(1, \"LINKTYPE\", ctx, data, statData, data.datasets[i].linkType, config.linkType, i, j, { nullvalue: null }) == 0) ctx.lineTo(xpos, ypos);\r\n else if (setOptionValue(1, \"LINKTYPE\", ctx, data, statData, data.datasets[i].linkType, config.linkType, i, j, { nullvalue: null }) == 1) {\r\n if (yposOrigin != \"undefined\") ctx.moveTo(xpos, yposOrigin);\r\n else ctx.moveTo(xpos, statData[i][0].xAxisPosY - statData[i][0].zeroY);\r\n //\t\t\t\t\tctx.moveTo(xpos, statData[i][0].xAxisPosY-statData[i][0].zeroY);\r\n ctx.lineTo(xpos, ypos);\r\n } else if (setOptionValue(1, \"LINKTYPE\", ctx, data, statData, data.datasets[i].linkType, config.linkType, i, j, { nullvalue: null }) == 2 && typeof prevypos != \"undefined\") {\r\n ctx.lineTo(xpos, prevypos);\r\n ctx.lineTo(xpos, ypos);\r\n prevypos = ypos;\r\n }\r\n }\r\n };\r\n\r\n function closebz(pts, ctx, config, i) {\r\n\r\n if (setOptionValue(1, \"LINKTYPE\", ctx, data, statData, data.datasets[i].linkType, config.linkType, i, j, { nullvalue: null }) == 0 && setOptionValue(1, \"BEZIERCURVE\", ctx, data, statData, undefined, config.bezierCurve, i, -1, { nullValue: true })) {\r\n minimumpos = statData[i][0].xAxisPosY;\r\n maximumpos = statData[i][0].xAxisPosY - statData[i][0].calculatedScale.steps * statData[i][0].scaleHop;\r\n drawSpline(ctx, pts, setOptionValue(1, \"BEZIERCURVETENSION\", ctx, data, statData, undefined, config.bezierCurveTension, i, -1, { nullValue: true }), minimumpos, maximumpos);\r\n pts.length = 0;\r\n }\r\n prevypos = undefined;\r\n };\r\n\r\n //Props to Rob Spencer at scaled innovation for his post on splining between points\r\n //http://scaledinnovation.com/analytics/splines/aboutSplines.html\r\n\r\n function getControlPoints(x0, y0, x1, y1, x2, y2, t) {\r\n // x0,y0,x1,y1 are the coordinates of the end (knot) pts of this segment\r\n // x2,y2 is the next knot -- not connected here but needed to calculate p2\r\n // p1 is the control point calculated here, from x1 back toward x0.\r\n // p2 is the next control point, calculated here and returned to become the \r\n // next segment's p1.\r\n // t is the 'tension' which controls how far the control points spread.\r\n\r\n // Scaling factors: distances from this knot to the previous and following knots.\r\n var d01 = Math.sqrt(Math.pow(x1 - x0, 2) + Math.pow(y1 - y0, 2));\r\n var d12 = Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2));\r\n\r\n var fa = t * d01 / (d01 + d12);\r\n var fb = t - fa;\r\n\r\n var p1x = x1 + fa * (x0 - x2);\r\n var p1y = y1 + fa * (y0 - y2);\r\n\r\n var p2x = x1 - fb * (x0 - x2);\r\n var p2y = y1 - fb * (y0 - y2);\r\n\r\n return [p1x, p1y, p2x, p2y]\r\n };\r\n\r\n function drawSpline(ctx, pts, t, minimumpos, maximumpos) {\r\n var cp = []; // array of control points, as x0,y0,x1,y1,...\r\n var n = pts.length;\r\n\r\n pts.push(2 * pts[n - 2] - pts[n - 4]);\r\n pts.push(2 * pts[n - 1] - pts[n - 3]);\r\n\r\n if (n == 4) {\r\n ctx.moveTo(pts[0], pts[1]);\r\n ctx.lineTo(pts[2], pts[3]);\r\n return;\r\n }\r\n // Draw an open curve, not connected at the ends\r\n for (var ti = 0; ti < n - 2; ti += 2) {\r\n cp = cp.concat(getControlPoints(pts[ti], pts[ti + 1], pts[ti + 2], pts[ti + 3], pts[ti + 4], pts[ti + 5], t));\r\n }\r\n // For first is a simple quadratics.\r\n\r\n ctx.beginPath();\r\n ctx.strokeStyle = setOptionValue(1, \"STROKECOLOR\", ctx, data, statData, data.datasets[i].strokeColor, config.defaultStrokeColor, i, j, { nullvalue: null });\r\n ctx.lineWidth = Math.ceil(ctx.chartLineScale * setOptionValue(1, \"LINEWIDTH\", ctx, data, statData, data.datasets[i].datasetStrokeWidth, config.datasetStrokeWidth, i, j, { nullvalue: null }));\r\n ctx.moveTo(pts[0], pts[1]);\r\n ctx.quadraticCurveTo(cp[0], Math.max(Math.min(cp[1], minimumpos), maximumpos), pts[2], pts[3]);\r\n\r\n // \t\tctx.setLineDash(lineStyleFn(config.datasetStrokeStyle));\r\n ctx.setLineDash(lineStyleFn(setOptionValue(1, \"LINEDASH\", ctx, data, statData, data.datasets[i].datasetStrokeStyle, config.datasetStrokeStyle, i, j, { nullvalue: null })));\r\n for (ti = 2; ti < pts.length - 4; ti += 2) {\r\n y1 = Math.max(Math.min(cp[2 * ti - 1], minimumpos), maximumpos);\r\n y2 = Math.max(Math.min(cp[2 * ti + 1], minimumpos), maximumpos);\r\n ctx.bezierCurveTo(cp[2 * ti - 2], y1, cp[2 * ti], y2, pts[ti + 2], pts[ti + 3]);\r\n }\r\n ctx.stroke();\r\n };\r\n ctx.setLineDash([]);\r\n };\r\n\r\n function log10(val) {\r\n return Math.log(val) / Math.LN10;\r\n };\r\n\r\n function setRect(ctx, config) {\r\n if (config.clearRect) {\r\n if (!config.multiGraph) {\r\n clear(ctx);\r\n ctx.clearRect(0, 0, width, height);\r\n }\r\n } else {\r\n clear(ctx);\r\n ctx.clearRect(0, 0, width, height);\r\n\r\n ctx.fillStyle = config.savePngBackgroundColor;\r\n ctx.strokeStyle = config.savePngBackgroundColor;\r\n ctx.beginPath();\r\n ctx.moveTo(0, 0);\r\n ctx.lineTo(0, ctx.canvas.height);\r\n ctx.lineTo(ctx.canvas.width, ctx.canvas.height);\r\n ctx.lineTo(ctx.canvas.width, 0);\r\n ctx.lineTo(0, 0);\r\n ctx.stroke();\r\n ctx.fill();\r\n }\r\n };\r\n\r\n function chartJsMouseDown(event, ctx, config, data, other) {\r\n if (event.which == 1 && typeof config.mouseDownLeft == 'function') config.mouseDownLeft(event, ctx, config, data, other);\r\n else if (event.which == 2 && typeof config.mouseDownMiddle == 'function') config.mouseDownMiddle(event, ctx, config, data, other);\r\n else if (event.which == 3 && typeof config.mouseDownRight == 'function') config.mouseDownRight(event, ctx, config, data, other);\r\n };\r\n\r\n\r\n function defMouse(ctx, data, config) {\r\n\r\n if (isBooleanOptionTrue(undefined, config.annotateDisplay)) {\r\n if (cursorDivCreated == false) oCursor = new makeCursorObj('divCursor');\r\n if (isIE() < 9 && isIE() != false) ctx.canvas.attachEvent(\"on\" + config.annotateFunction.split(' ')[0], function (event) {\r\n if ((config.annotateFunction.split(' ')[1] == \"left\" && event.which == 1) ||\r\n (config.annotateFunction.split(' ')[1] == \"middle\" && event.which == 2) ||\r\n (config.annotateFunction.split(' ')[1] == \"right\" && event.which == 3) ||\r\n (typeof (config.annotateFunction.split(' ')[1]) != \"string\")) doMouseAction(config, ctx, event, data, \"annotate\", config.mouseDownRight)\r\n });\r\n else ctx.canvas.addEventListener(config.annotateFunction.split(' ')[0], function (event) {\r\n if ((config.annotateFunction.split(' ')[1] == \"left\" && event.which == 1) ||\r\n (config.annotateFunction.split(' ')[1] == \"middle\" && event.which == 2) ||\r\n (config.annotateFunction.split(' ')[1] == \"right\" && event.which == 3) ||\r\n (typeof (config.annotateFunction.split(' ')[1]) != \"string\")) doMouseAction(config, ctx, event, data, \"annotate\", config.mouseDownRight)\r\n }, false);\r\n }\r\n if (config.savePng) {\r\n if (isIE() < 9 && isIE() != false) ctx.canvas.attachEvent(\"on\" + config.savePngFunction.split(' ')[0], function (event) {\r\n if ((config.savePngFunction.split(' ')[1] == \"left\" && event.which == 1) ||\r\n (config.savePngFunction.split(' ')[1] == \"middle\" && event.which == 2) ||\r\n (config.savePngFunction.split(' ')[1] == \"right\" && event.which == 3) ||\r\n (typeof (config.savePngFunction.split(' ')[1]) != \"string\")) saveCanvas(ctx, data, config);\r\n });\r\n else ctx.canvas.addEventListener(config.savePngFunction.split(' ')[0], function (event) {\r\n if ((config.savePngFunction.split(' ')[1] == \"left\" && event.which == 1) ||\r\n (config.savePngFunction.split(' ')[1] == \"middle\" && event.which == 2) ||\r\n (config.savePngFunction.split(' ')[1] == \"right\" && event.which == 3) ||\r\n (typeof (config.savePngFunction.split(' ')[1]) != \"string\")) saveCanvas(ctx, data, config);\r\n }, false);\r\n }\r\n\r\n if (isIE() < 9 && isIE() != false) ctx.canvas.attachEvent(\"onmousewheel\", function (event) {\r\n if (cursorDivCreated) document.getElementById('divCursor').style.display = 'none';\r\n });\r\n else ctx.canvas.addEventListener(\"DOMMouseScroll\", function (event) {\r\n if (cursorDivCreated) document.getElementById('divCursor').style.display = 'none';\r\n }, false);\r\n\r\n function add_event_listener(type, func, chk) {\r\n if (typeof func != 'function')\r\n return;\r\n\r\n function do_func(event) {\r\n if (chk == null || chk(event)) doMouseAction(config, ctx, event, data, \"mouseaction\", func);\r\n };\r\n\r\n var hash = type + ' ' + func.name;\r\n if (hash in ctx._eventListeners) {\r\n if (ctx.canvas.removeEventListener)\r\n ctx.canvas.removeEventListener(type, ctx._eventListeners[hash]);\r\n else if (ctx.canvas.detachEvent)\r\n ctx.canvas.detachEvent(type, ctx._eventListeners[hash]);\r\n }\r\n\r\n ctx._eventListeners[hash] = do_func;\r\n\r\n if (ctx.canvas.addEventListener) {\r\n if (type == \"mousewheel\") type = \"DOMMouseScroll\";\r\n ctx.canvas.addEventListener(type, do_func, false);\r\n } else if (ctx.canvas.attachEvent) {\r\n ctx.canvas.attachEvent(\"on\" + type, do_func);\r\n }\r\n };\r\n\r\n if (typeof config.mouseDownRight == 'function')\r\n add_event_listener(\"mousedown\", chartJsMouseDown, function (e) { return (e.which == 1 || e.which == 2 || e.which == 3); });\r\n else if (typeof config.mouseDownLeft == 'function')\r\n add_event_listener(\"mousedown\", chartJsMouseDown, function (e) { return (e.which == 1 || e.which == 2 || e.which == 3); });\r\n else if (typeof config.mouseDownMiddle == 'function')\r\n add_event_listener(\"mousedown\", chartJsMouseDown, function (e) { return (e.which == 1 || e.which == 2 || e.which == 3); });\r\n add_event_listener(\"mousemove\", config.mouseMove);\r\n add_event_listener(\"mouseout\", config.mouseOut);\r\n add_event_listener(\"mousewheel\", config.mouseWheel);\r\n };\r\n};\r\nwindow.updateChart = updateChart;\r\n\r\n\r\nfunction animationCorrection(animationValue, data, config, vdata, vsubdata, addone) {\r\n var animValue = animationValue;\r\n var animSubValue = 0;\r\n if (vsubdata != -1) {\r\n if (animValue < 1 && (vdata < (config.animationStartWithDataset - 1) && (config.animationStartWithDataset - 1) != -1)) {\r\n animValue = 1;\r\n }\r\n if (animValue < 1 && (vsubdata < (config.animationStartWithData - 1) && (config.animationStartWithData - 1) != -1)) {\r\n animValue = 1;\r\n }\r\n var totreat = 1;\r\n var newAnimationValue = animationValue;\r\n if (animValue < 1 && config.animationByDataset) {\r\n animValue = 0;\r\n totreat = 0;\r\n var startDataset = (config.animationStartWithDataset - 1);\r\n if ((config.animationStartWithDataset - 1) == -1) startDataset = 0\r\n var nbstepsperdatasets = config.animationSteps / (data.datasets.length - startDataset);\r\n if (animationValue >= (vdata - startDataset + 1) * nbstepsperdatasets / config.animationSteps) animValue = 1;\r\n else if (animationValue >= (vdata - startDataset) * nbstepsperdatasets / config.animationSteps) {\r\n var redAnimationValue = animationValue - (vdata - startDataset) * nbstepsperdatasets / config.animationSteps;\r\n if (!config.animationLeftToRight) {\r\n animValue = redAnimationValue * (data.datasets.length - startDataset);\r\n } else {\r\n newAnimationValue = redAnimationValue * (data.datasets.length - startDataset);\r\n }\r\n totreat = 1;\r\n }\r\n }\r\n if (totreat == 1 && animValue < 1 && config.animationLeftToRight) {\r\n animValue = 0;\r\n var startSub = (config.animationStartWithData - 1);\r\n if ((config.animationStartWithData - 1) == -1) startSub = 0\r\n var nbstepspervalue = config.animationSteps / (data.datasets[vdata].data.length - startSub - 1 + addone);\r\n if (newAnimationValue >= (vsubdata - startSub) * nbstepspervalue / config.animationSteps) {\r\n animValue = 1;\r\n if (newAnimationValue <= (vsubdata + 1 - startSub) * nbstepspervalue / config.animationSteps) {\r\n animSubValue = (data.datasets[vdata].data.length - startSub - 1) * (newAnimationValue - ((vsubdata - startSub) * nbstepspervalue / config.animationSteps));\r\n }\r\n }\r\n }\r\n } else {\r\n if (animValue < 1 && (vdata < (config.animationStartWithData - 1))) {\r\n animValue = 1;\r\n }\r\n }\r\n return {\r\n mainVal: animValue,\r\n subVal: animSubValue,\r\n animVal: animValue + animSubValue\r\n };\r\n};\r\n\r\nfunction showLabels(ctx, data, config, i) {\r\n var doShowLabels = setOptionValue(1, \"SHOWLABEL\", ctx, data, undefined, undefined, config.showXLabels, i, -1, undefined, { labelValue: fmtChartJS(config, data.labels[i], config.fmtXLabel), unformatedLabelValue: data.labels[i] });\r\n if (typeof doShowLabels == \"number\") {\r\n if (i >= config.firstLabelToShow - 1) doShowLabels = ((i + config.firstLabelToShow - 1) % parseInt(doShowLabels) == 0 ? true : false);\r\n else doShowLabels = false;\r\n }\r\n return doShowLabels;\r\n};\r\n\r\nfunction showYLabels(ctx, data, config, i, text) {\r\n var doShowLabels = setOptionValue(1, \"SHOWYLABEL\", ctx, data, undefined, undefined, config.showYLabels, -1, i, undefined, { labelValue: text });\r\n if (typeof doShowLabels == \"number\") {\r\n if (i >= config.firstYLabelToShow - 1) doShowLabels = ((i + config.firstYLabelToShow - 1) % parseInt(doShowLabels) == 0 ? true : false);\r\n else doShowLabels = false;\r\n }\r\n return doShowLabels;\r\n};\r\n\r\n\r\nfunction drawLegend(legendMsr, data, config, ctx, typegraph) {\r\n var lgtxt;\r\n if (config.legendBorders == true) {\r\n ctx.save();\r\n ctx.setLineDash(lineStyleFn(config.legendBordersStyle));\r\n ctx.beginPath();\r\n ctx.lineWidth = Math.ceil(ctx.chartLineScale * config.legendBordersWidth);\r\n ctx.strokeStyle = config.legendBordersColors;\r\n ctx.moveTo(legendMsr.xLegendBorderPos, legendMsr.yLegendBorderPos);\r\n ctx.lineTo(legendMsr.xLegendBorderPos, legendMsr.yLegendBorderPos + legendMsr.legendBorderHeight);\r\n ctx.lineTo(legendMsr.xLegendBorderPos + legendMsr.legendBorderWidth, legendMsr.yLegendBorderPos + legendMsr.legendBorderHeight);\r\n ctx.lineTo(legendMsr.xLegendBorderPos + legendMsr.legendBorderWidth, legendMsr.yLegendBorderPos);\r\n ctx.lineTo(legendMsr.xLegendBorderPos, legendMsr.yLegendBorderPos);\r\n //ctx.lineTo(legendMsr.xLegendBorderPos + legendMsr.legendBorderWidth, legendMsr.yLegendBorderPos);\r\n //ctx.lineTo(legendMsr.xLegendBorderPos, legendMsr.yLegendBorderPos);\r\n //ctx.lineTo(legendMsr.xLegendBorderPos, legendMsr.yLegendBorderPos + legendMsr.legendBorderHeight);\r\n\r\n\r\n ctx.stroke();\r\n ctx.closePath();\r\n ctx.setLineDash([]);\r\n\r\n ctx.fillStyle = \"rgba(0,0,0,0)\"; // config.legendFillColor;\r\n ctx.fillStyle = config.legendFillColor;\r\n ctx.fill();\r\n ctx.restore();\r\n }\r\n nbcols = legendMsr.nbLegendCols - 1;\r\n ypos = legendMsr.yFirstLegendTextPos - ((Math.ceil(ctx.chartTextScale * config.legendFontSize)) + Math.ceil(ctx.chartSpaceScale * config.legendSpaceBetweenTextVertical));\r\n xpos = 0;\r\n if (legendMsr.drawLegendOnData) fromi = data.datasets.length;\r\n else fromi = data.length;\r\n for (var i = fromi - 1; i >= 0; i--) {\r\n orderi = i;\r\n if (legendMsr.reverseLegend) {\r\n if (legendMsr.drawLegendOnData) orderi = data.datasets.length - i - 1;\r\n else orderi = data.length - i - 1;\r\n }\r\n if (legendMsr.drawLegendOnData) tpof = typeof (data.datasets[orderi].title);\r\n else tpof = typeof (data[orderi].title)\r\n if (tpof == \"string\") {\r\n if (legendMsr.drawLegendOnData) lgtxt = fmtChartJS(config, data.datasets[orderi].title, config.fmtLegend).trim();\r\n else lgtxt = fmtChartJS(config, data[orderi].legendtitle, config.fmtLegend).trim();\r\n if (lgtxt != \"\") {\r\n nbcols++;\r\n if (nbcols == legendMsr.nbLegendCols) {\r\n nbcols = 0;\r\n xpos = legendMsr.xFirstLegendTextPos;\r\n ypos += (Math.ceil(ctx.chartTextScale * config.legendFontSize)) + Math.ceil(ctx.chartSpaceScale * config.legendSpaceBetweenTextVertical);\r\n } else {\r\n xpos += legendMsr.widestLegend + Math.ceil(ctx.chartSpaceScale * config.legendSpaceBetweenTextHorizontal);\r\n }\r\n ctx.save();\r\n ctx.beginPath();\r\n var lgdbox = legendMsr.legendBox;\r\n if (ctx.tpchart == \"Bar\" || ctx.tpchart == \"StackedBar\") if (data.datasets[orderi].type == \"Line\" && (!config.datasetFill || setOptionValue(1, \"LINKTYPE\", ctx, data, statData, data.datasets[orderi].linkType, config.linkType, orderi, -1, { nullvalue: null }) == 1)) lgdbox = false;\r\n if (lgdbox) {\r\n if (legendMsr.drawLegendOnData) {\r\n ctx.lineWidth = Math.ceil(ctx.chartLineScale * setOptionValue(1, \"LINEWIDTH\", ctx, data, undefined, data.datasets[orderi].datasetStrokeWidth, config.datasetStrokeWidth, orderi, -1, { nullvalue: null }));\r\n } else {\r\n ctx.lineWidth = Math.ceil(ctx.chartLineScale * config.datasetStrokeWidth);\r\n }\r\n ctx.beginPath();\r\n if (legendMsr.drawLegendOnData) {\r\n ctx.strokeStyle = setOptionValue(1, \"LEGENDSTROKECOLOR\", ctx, data, undefined, data.datasets[orderi].strokeColor, config.defaultFillColor, orderi, -1, { animationValue: 1, xPosLeft: xpos, yPosBottom: ypos, xPosRight: xpos + Math.ceil(ctx.chartTextScale * config.legendBlockSize), yPosTop: ypos - (Math.ceil(ctx.chartTextScale * config.legendFontSize)) });\r\n ctx.setLineDash(lineStyleFn(setOptionValue(1, \"LEGENDLINEDASH\", ctx, data, undefined, data.datasets[orderi].datasetStrokeStyle, config.datasetStrokeStyle, orderi, -1, { animationValue: 1, xPosLeft: xpos, yPosBottom: ypos, xPosRight: xpos + Math.ceil(ctx.chartTextScale * config.legendBlockSize), yPosTop: ypos - (Math.ceil(ctx.chartTextScale * config.legendFontSize)) })));\r\n\r\n } else {\r\n ctx.strokeStyle = setOptionValue(1, \"LEGENDSTROKECOLOR\", ctx, data, undefined, data[orderi].strokeColor, config.defaultFillColor, orderi, -1, { animationValue: 1, xPosLeft: xpos, yPosBottom: ypos, xPosRight: xpos + Math.ceil(ctx.chartTextScale * config.legendBlockSize), yPosTop: ypos - (Math.ceil(ctx.chartTextScale * config.legendFontSize)) });\r\n ctx.setLineDash(lineStyleFn(setOptionValue(1, \"LEGENDSEGMENTTROKESTYLE\", ctx, data, undefined, data[orderi].segmentStrokeStyle, config.segmentStrokeStyle, orderi, -1, { animationValue: 1, xPosLeft: xpos, yPosBottom: ypos, xPosRight: xpos + Math.ceil(ctx.chartTextScale * config.legendBlockSize), yPosTop: ypos - (Math.ceil(ctx.chartTextScale * config.legendFontSize)) })));\r\n }\r\n ctx.moveTo(xpos, ypos);\r\n ctx.lineTo(xpos + Math.ceil(ctx.chartTextScale * config.legendBlockSize), ypos);\r\n ctx.lineTo(xpos + Math.ceil(ctx.chartTextScale * config.legendBlockSize), ypos - (Math.ceil(ctx.chartTextScale * config.legendFontSize)));\r\n ctx.lineTo(xpos, ypos - (Math.ceil(ctx.chartTextScale * config.legendFontSize)));\r\n ctx.lineTo(xpos, ypos);\r\n ctx.stroke();\r\n ctx.closePath();\r\n if (legendMsr.drawLegendOnData) {\r\n ctx.fillStyle = setOptionValue(1, \"LEGENDFILLCOLOR\", ctx, data, undefined, data.datasets[orderi].fillColor, config.defaultFillColor, orderi, -1, { animationValue: 1, xPosLeft: xpos, yPosBottom: ypos, xPosRight: xpos + Math.ceil(ctx.chartTextScale * config.legendBlockSize), yPosTop: ypos - (Math.ceil(ctx.chartTextScale * config.legendFontSize)) });\r\n } else {\r\n ctx.fillStyle = setOptionValue(1, \"LEGENDFILLCOLOR\", ctx, data, undefined, data[orderi].color, config.defaultFillColor, orderi, -1, { animationValue: 1, xPosLeft: xpos, yPosBottom: ypos, xPosRight: xpos + Math.ceil(ctx.chartTextScale * config.legendBlockSize), yPosTop: ypos - (Math.ceil(ctx.chartTextScale * config.legendFontSize)) });\r\n }\r\n ctx.fill();\r\n } else {\r\n ctx.lineWidth = config.legendColorIndicatorStrokeWidth ?\r\n config.legendColorIndicatorStrokeWidth : Math.ceil(ctx.chartLineScale * setOptionValue(1, \"LINEWIDTH\", ctx, data, undefined, data.datasets[orderi].datasetStrokeWidth, config.datasetStrokeWidth, orderi, -1, { nullvalue: null }));\r\n if (config.legendColorIndicatorStrokeWidth && config.legendColorIndicatorStrokeWidth > (Math.ceil(ctx.chartTextScale * config.legendFontSize))) {\r\n ctx.lineWidth = (Math.ceil(ctx.chartTextScale * config.legendFontSize));\r\n }\r\n if (legendMsr.drawLegendOnData) {\r\n ctx.strokeStyle = setOptionValue(1, \"LEGENDSTROKECOLOR\", ctx, data, undefined, data.datasets[orderi].strokeColor, config.defaultFillColor, orderi, -1, { animationValue: 1, xPosLeft: xpos, yPosBottom: ypos, xPosRight: xpos + Math.ceil(ctx.chartTextScale * config.legendBlockSize), yPosTop: ypos - (Math.ceil(ctx.chartTextScale * config.legendFontSize)) });\r\n ctx.setLineDash(lineStyleFn(setOptionValue(1, \"LEGENDLINEDASH\", ctx, data, undefined, data.datasets[orderi].datasetStrokeStyle, config.datasetStrokeStyle, orderi, -1, { animationValue: 1, xPosLeft: xpos, yPosBottom: ypos, xPosRight: xpos + Math.ceil(ctx.chartTextScale * config.legendBlockSize), yPosTop: ypos - (Math.ceil(ctx.chartTextScale * config.legendFontSize)) })));\r\n } else {\r\n ctx.strokeStyle = setOptionValue(1, \"LEGENDSTROKECOLOR\", ctx, data, undefined, data[orderi].strokeColor, config.defaultFillColor, orderi, -1, { animationValue: 1, xPosLeft: xpos, yPosBottom: ypos, xPosRight: xpos + Math.ceil(ctx.chartTextScale * config.legendBlockSize), yPosTop: ypos - (Math.ceil(ctx.chartTextScale * config.legendFontSize)) });\r\n ctx.setLineDash(lineStyleFn(setOptionValue(1, \"LEGENDSEGMENTTROKESTYLE\", ctx, data, undefined, data[orderi].segmentStrokeStyle, config.segmentStrokeStyle, orderi, -1, { animationValue: 1, xPosLeft: xpos, yPosBottom: ypos, xPosRight: xpos + Math.ceil(ctx.chartTextScale * config.legendBlockSize), yPosTop: ypos - (Math.ceil(ctx.chartTextScale * config.legendFontSize)) })));\r\n }\r\n\r\n ctx.moveTo(xpos + 2, ypos - ((Math.ceil(ctx.chartTextScale * config.legendFontSize)) / 2));\r\n ctx.lineTo(xpos + 2 + Math.ceil(ctx.chartTextScale * config.legendBlockSize), ypos - ((Math.ceil(ctx.chartTextScale * config.legendFontSize)) / 2));\r\n ctx.stroke();\r\n\r\n\r\n ctx.fill();\r\n\r\n if (config.pointDot) {\r\n ctx.beginPath();\r\n ctx.fillStyle = setOptionValue(1, \"LEGENDMARKERFILLCOLOR\", ctx, data, undefined, data.datasets[orderi].pointColor, config.defaultStrokeColor, orderi, -1, { nullvalue: true });\r\n ctx.strokeStyle = setOptionValue(1, \"LEGENDMARKERSTROKESTYLE\", ctx, data, undefined, data.datasets[orderi].pointStrokeColor, config.defaultStrokeColor, orderi, -1, { nullvalue: true });\r\n ctx.lineWidth = setOptionValue(ctx.chartLineScale, \"LEGENDMARKERLINEWIDTH\", ctx, data, undefined, data.datasets[orderi].pointDotStrokeWidth, config.pointDotStrokeWidth, orderi, -1, { nullvalue: true });\r\n\r\n var markerShape = setOptionValue(1, \"LEGENDMARKERSHAPE\", ctx, data, undefined, data.datasets[orderi].markerShape, config.markerShape, orderi, -1, { nullvalue: true });\r\n var markerRadius = setOptionValue(ctx.chartSpaceScale, \"LEGENDMARKERRADIUS\", ctx, data, undefined, data.datasets[orderi].pointDotRadius, config.pointDotRadius, orderi, -1, { nullvalue: true });\r\n var markerStrokeStyle = setOptionValue(1, \"LEGENDMARKERSTROKESTYLE\", ctx, data, undefined, data.datasets[orderi].pointDotStrokeStyle, config.pointDotStrokeStyle, orderi, -1, { nullvalue: true });\r\n drawMarker(ctx, xpos + 2 + Math.ceil(ctx.chartTextScale * config.legendBlockSize) / 2, ypos - ((Math.ceil(ctx.chartTextScale * config.legendFontSize)) / 2), markerShape, markerRadius, markerStrokeStyle);\r\n }\r\n ctx.fill();\r\n\r\n }\r\n ctx.restore();\r\n ctx.save();\r\n ctx.beginPath();\r\n ctx.font = config.legendFontStyle + \" \" + (Math.ceil(ctx.chartTextScale * config.legendFontSize)).toString() + \"px \" + config.legendFontFamily;\r\n ctx.fillStyle = setOptionValue(1, \"LEGENDFONTCOLOR\", ctx, data, undefined, undefined, config.legendFontColor, orderi, -1, { nullvalue: true });\r\n ctx.textAlign = \"left\";\r\n ctx.textBaseline = \"bottom\";\r\n ctx.translate(xpos + Math.ceil(ctx.chartTextScale * config.legendBlockSize) + Math.ceil(ctx.chartSpaceScale * config.legendSpaceBetweenBoxAndText), ypos);\r\n //\t\t\t\tctx.fillText(lgtxt, 0, 0);\r\n ctx.fillTextMultiLine(lgtxt, 0, 0, ctx.textBaseline, Math.ceil(ctx.chartTextScale * config.legendFontSize), true, config.detectMouseOnText, ctx, \"LEGEND_TEXTMOUSE\", 0, xpos + Math.ceil(ctx.chartTextScale * config.legendBlockSize) + Math.ceil(ctx.chartSpaceScale * config.legendSpaceBetweenBoxAndText), ypos, orderi, -1);\r\n\r\n ctx.restore();\r\n }\r\n }\r\n }\r\n};\r\n\r\nfunction drawMarker(ctx, xpos, ypos, marker, markersize, markerStrokeStyle) {\r\n ctx.setLineDash(lineStyleFn(markerStrokeStyle));\r\n switch (marker) {\r\n case \"square\":\r\n ctx.rect(xpos - markersize, ypos - markersize, 2 * markersize, 2 * markersize);\r\n ctx.stroke();\r\n ctx.fill();\r\n ctx.setLineDash([]);\r\n break;\r\n case \"triangle\":\r\n pointA_x = 0;\r\n pointA_y = 2 / 3 * markersize;\r\n ctx.moveTo(xpos, ypos - pointA_y);\r\n ctx.lineTo(xpos + pointA_y * Math.sin(4 / 3), ypos + pointA_y * Math.cos(4 / 3));\r\n ctx.lineTo(xpos - pointA_y * Math.sin(4 / 3), ypos + pointA_y * Math.cos(4 / 3));\r\n ctx.lineTo(xpos, ypos - pointA_y);\r\n ctx.stroke();\r\n ctx.fill();\r\n ctx.setLineDash([]);\r\n break;\r\n case \"diamond\":\r\n ctx.moveTo(xpos, ypos + markersize);\r\n ctx.lineTo(xpos + markersize, ypos);\r\n ctx.lineTo(xpos, ypos - markersize);\r\n ctx.lineTo(xpos - markersize, ypos);\r\n ctx.lineTo(xpos, ypos + markersize);\r\n ctx.stroke();\r\n ctx.fill();\r\n ctx.setLineDash([]);\r\n break;\r\n case \"plus\":\r\n ctx.moveTo(xpos, ypos - markersize);\r\n ctx.lineTo(xpos, ypos + markersize);\r\n ctx.moveTo(xpos - markersize, ypos);\r\n ctx.lineTo(xpos + markersize, ypos);\r\n ctx.stroke();\r\n ctx.setLineDash([]);\r\n break;\r\n case \"cross\":\r\n ctx.moveTo(xpos - markersize, ypos - markersize);\r\n ctx.lineTo(xpos + markersize, ypos + markersize);\r\n ctx.moveTo(xpos - markersize, ypos + markersize);\r\n ctx.lineTo(xpos + markersize, ypos - markersize);\r\n ctx.stroke();\r\n ctx.setLineDash([]);\r\n break;\r\n case \"circle\":\r\n default:\r\n ctx.arc(xpos, ypos, markersize, 0, 2 * Math.PI * 1, true);\r\n ctx.stroke();\r\n ctx.fill();\r\n ctx.setLineDash([]);\r\n break;\r\n }\r\n};\r\n\r\nfunction initPassVariableData_part1(data, config, ctx) {\r\n var i, j, result, mxvalue, mnvalue, cumvalue, totvalue, lmaxvalue, lminvalue, lgtxt, lgtxt2, tp, prevpos, firstNotMissingi, lastNotMissingi, firstNotMissingj, lastNotMissingj, grandtotal;\r\n switch (ctx.tpdata) {\r\n case 1:\r\n\r\n result = [];\r\n var segmentAngle, cumulativeAngle, realCumulativeAngle;\r\n\r\n var realAmplitude = (((config.totalAmplitude * (Math.PI / 180) + 2 * Math.PI) % (2 * Math.PI)) + 2 * Math.PI) % (2 * Math.PI);\r\n if (realAmplitude <= config.zeroValue) realAmplitude = 2 * Math.PI;\r\n\r\n cumulativeAngle = (((-config.startAngle * (Math.PI / 180) + 2 * Math.PI) % (2 * Math.PI)) + 2 * Math.PI) % (2 * Math.PI);\r\n realCumulativeAngle = (((config.startAngle * (Math.PI / 180) + 2 * Math.PI) % (2 * Math.PI)) + 2 * Math.PI) % (2 * Math.PI);\r\n\r\n startAngle = cumulativeAngle;\r\n totvalue = 0;\r\n notemptyval = 0;\r\n var firstNotMissing = -1;\r\n var lastNotMissing = -1;\r\n var prevNotMissing = -1;\r\n mxvalue = -Number.MAX_VALUE;\r\n mnvalue = Number.MAX_VALUE;\r\n for (i = 0; i < data.length; i++) {\r\n if (ctx.tpchart != \"PolarArea\" && 1 * data[i].value < 0) continue;\r\n if (!(typeof (data[i].value) == 'undefined')) {\r\n if (firstNotMissing == -1) firstNotMissing = i;\r\n mxvalue = Math.max(mxvalue, 1 * data[i].value);\r\n mnvalue = Math.min(mnvalue, 1 * data[i].value);\r\n notemptyval++;\r\n totvalue += 1 * data[i].value;\r\n lastNotMissing = i;\r\n }\r\n }\r\n\r\n cumvalue = 0;\r\n var prevMissing = -1;\r\n for (i = 0; i < data.length; i++) {\r\n if (typeof (data[i].title) == \"string\") lgtxt = data[i].title.trim();\r\n else lgtxt = \"\";\r\n if (!(typeof (data[i].value) == 'undefined') && (ctx.tpchart == \"PolarArea\" || 1 * data[i].value >= 0)) {\r\n //\t\t\t\tif(ctx.tpchart==\"PolarArea\") { if(notemptyval>0)segmentAngle= (Math.PI *2)/notemptyval; else segmentAngle=0; }\r\n //\t\t\t\telse segmentAngle = (1 * data[i].value / totvalue) * (Math.PI * 2);\r\n if (ctx.tpchart == \"PolarArea\") { if (notemptyval > 0) segmentAngle = realAmplitude / notemptyval; else segmentAngle = 0; }\r\n else segmentAngle = (1 * data[i].value / totvalue) * realAmplitude;\r\n if (segmentAngle >= Math.PI * 2) segmentAngle = Math.PI * 2 - 0.001; // bug on Android when segmentAngle is >= 2*PI;\r\n cumvalue += 1 * data[i].value;\r\n result[i] = {\r\n config: config,\r\n v1: fmtChartJS(config, lgtxt, config.fmtV1),\r\n v2: fmtChartJS(config, 1 * data[i].value, config.fmtV2),\r\n v3: fmtChartJS(config, cumvalue, config.fmtV3),\r\n v4: fmtChartJS(config, totvalue, config.fmtV4),\r\n v5: fmtChartJS(config, segmentAngle, config.fmtV5),\r\n v6: roundToWithThousands(config, fmtChartJS(config, 100 * data[i].value / totvalue, config.fmtV6), config.roundPct),\r\n v7: 0,\r\n v8: 0,\r\n v9: 0,\r\n v10: 0,\r\n v11: fmtChartJS(config, cumulativeAngle - segmentAngle, config.fmtV11),\r\n v12: fmtChartJS(config, cumulativeAngle, config.fmtV12),\r\n v13: fmtChartJS(config, i, config.fmtV13),\r\n lgtxt: lgtxt,\r\n datavalue: 1 * data[i].value,\r\n cumvalue: cumvalue,\r\n totvalue: totvalue,\r\n segmentAngle: segmentAngle,\r\n firstAngle: startAngle,\r\n pctvalue: 100 * data[i].value / totvalue,\r\n startAngle: cumulativeAngle,\r\n realStartAngle: realCumulativeAngle,\r\n endAngle: cumulativeAngle + segmentAngle,\r\n maxvalue: mxvalue,\r\n minvalue: mnvalue,\r\n i: i,\r\n firstNotMissing: firstNotMissing,\r\n lastNotMissing: lastNotMissing,\r\n prevNotMissing: prevNotMissing,\r\n prevMissing: prevMissing,\r\n nextNotMissing: -1,\r\n radiusOffset: 0,\r\n midPosX: 0,\r\n midPosY: 0,\r\n int_radius: 0,\r\n ext_radius: 0,\r\n data: data\r\n };\r\n cumulativeAngle += segmentAngle;\r\n realCumulativeAngle -= segmentAngle;\r\n if (prevNotMissing != -1) result[prevNotMissing].nextNotMissing = i;\r\n prevNotMissing = i;\r\n } else {\r\n result[i] = {\r\n v1: lgtxt,\r\n maxvalue: mxvalue,\r\n minvalue: mnvalue,\r\n i: i,\r\n firstNotMissing: firstNotMissing,\r\n lastNotMissing: lastNotMissing,\r\n prevNotMissing: prevNotMissing\r\n };\r\n prevMissing = i;\r\n }\r\n }\r\n break;\r\n case 0:\r\n default:\r\n var axis;\r\n result = [];\r\n mxvalue = [];\r\n mxvalue[0] = [];\r\n mxvalue[1] = [];\r\n mnvalue = [];\r\n mnvalue[0] = [];\r\n mnvalue[1] = [];\r\n cumvalue = [];\r\n cumvalue[0] = [];\r\n cumvalue[1] = [];\r\n totvalue = [];\r\n totvalue[0] = [];\r\n totvalue[1] = [];\r\n lmaxvalue = [];\r\n lmaxvalue[0] = [];\r\n lmaxvalue[1] = [];\r\n lminvalue = [];\r\n lminvalue[0] = [];\r\n lminvalue[1] = [];\r\n prevpos = [];\r\n firstNotMissingi = [];\r\n lastNotMissingi = [];\r\n firstNotMissingj = [];\r\n lastNotMissingj = [];\r\n prevpos[0] = [];\r\n prevpos[1] = [];\r\n grandtotal = 0;\r\n\r\n for (i = 0; i < data.datasets.length; i++) {\r\n // BUG when all data are missing !\r\n if (typeof data.datasets[i].xPos != \"undefined\" && tpdraw(ctx, data.datasets[i]) == \"Line\") {\r\n for (j = data.datasets[i].data.length; j < data.datasets[i].xPos.length; j++) data.datasets[i].data.push(undefined);\r\n } else {\r\n for (j = data.datasets[i].data.length; j < data.labels.length; j++) data.datasets[i].data.push(undefined);\r\n }\r\n\r\n\r\n if (data.datasets[i].axis == 2) axis = 0; else axis = 1;\r\n result[i] = [];\r\n lmaxvalue[0][i] = -Number.MAX_VALUE;\r\n lmaxvalue[1][i] = -Number.MAX_VALUE;\r\n lminvalue[0][i] = Number.MAX_VALUE;\r\n lminvalue[1][i] = Number.MAX_VALUE;\r\n firstNotMissingi[i] = -1;\r\n lastNotMissingi[i] = -1;\r\n for (j = 0; j < data.datasets[i].data.length; j++) {\r\n\r\n if (typeof firstNotMissingj[j] == \"undefined\") {\r\n firstNotMissingj[j] = -1;\r\n lastNotMissingj[j] = -1;\r\n totvalue[0][j] = 0;\r\n mxvalue[0][j] = -Number.MAX_VALUE;\r\n mnvalue[0][j] = Number.MAX_VALUE;\r\n totvalue[1][j] = 0;\r\n mxvalue[1][j] = -Number.MAX_VALUE;\r\n mnvalue[1][j] = Number.MAX_VALUE;\r\n }\r\n if (!(typeof data.datasets[i].data[j] == 'undefined')) {\r\n grandtotal += 1 * data.datasets[i].data[j];\r\n if (firstNotMissingi[i] == -1) firstNotMissingi[i] = j;\r\n lastNotMissingi[i] = j;\r\n if (firstNotMissingj[j] == -1) firstNotMissingj[j] = i;\r\n lastNotMissingj[j] = i;\r\n totvalue[axis][j] += 1 * data.datasets[i].data[j];\r\n mxvalue[axis][j] = Math.max(mxvalue[axis][j], 1 * data.datasets[i].data[j]);\r\n mnvalue[axis][j] = Math.min(mnvalue[axis][j], 1 * data.datasets[i].data[j]);\r\n lmaxvalue[axis][i] = Math.max(lmaxvalue[axis][i], 1 * data.datasets[i].data[j]);\r\n lminvalue[axis][i] = Math.min(lminvalue[axis][i], 1 * data.datasets[i].data[j]);\r\n }\r\n }\r\n }\r\n\r\n for (i = 0; i < data.datasets.length; i++) {\r\n if (data.datasets[i].axis == 2) axis = 0; else axis = 1;\r\n if (typeof (data.datasets[i].title) == \"string\") lgtxt = data.datasets[i].title.trim();\r\n else lgtxt = \"\";\r\n var prevnotemptyj = -1;\r\n var prevemptyj = -1;\r\n for (j = 0; j < data.datasets[i].data.length; j++) {\r\n\r\n if (typeof cumvalue[0][j] == \"undefined\") { cumvalue[0][j] = 0; prevpos[0][j] = -1; cumvalue[1][j] = 0; prevpos[1][j] = -1; }\r\n lgtxt2 = \"\";\r\n if (typeof data.datasets[i].xPos != \"undefined\") {\r\n if (!(typeof data.datasets[i].xPos[j] == \"undefined\")) lgtxt2 = data.datasets[i].xPos[j];\r\n }\r\n if (lgtxt2 == \"\" && !(typeof (data.labels[j]) == \"undefined\")) lgtxt2 = data.labels[j];\r\n if (typeof lgtxt2 == \"string\") lgtxt2 = lgtxt2.trim();\r\n\r\n //\t\t\t\tif (!(typeof(data.datasets[i].data[j]) == 'undefined') && data.datasets[i].data[j] != 0) {\r\n if (!(typeof (data.datasets[i].data[j]) == 'undefined')) {\r\n cumvalue[axis][j] += 1 * data.datasets[i].data[j];\r\n switch (tpdraw(ctx, data.datasets[i])) {\r\n case \"Bar\":\r\n case \"StackedBar\":\r\n case \"HorizontalBar\":\r\n case \"HorizontalStackedBar\":\r\n result[i][j] = {\r\n config: config,\r\n v1: fmtChartJS(config, lgtxt, config.fmtV1),\r\n v2: fmtChartJS(config, lgtxt2, config.fmtV2),\r\n v3: fmtChartJS(config, 1 * data.datasets[i].data[j], config.fmtV3),\r\n v4: fmtChartJS(config, cumvalue[axis][j], config.fmtV4),\r\n v5: fmtChartJS(config, totvalue[axis][j], config.fmtV5),\r\n v6: roundToWithThousands(config, fmtChartJS(config, 100 * data.datasets[i].data[j] / totvalue[axis][j], config.fmtV6), config.roundPct),\r\n v6T: roundToWithThousands(config, fmtChartJS(config, 100 * data.datasets[i].data[j] / grandtotal, config.fmtV6T), config.roundPct),\r\n v11: fmtChartJS(config, i, config.fmtV11),\r\n v12: fmtChartJS(config, j, config.fmtV12),\r\n lgtxt: lgtxt,\r\n lgtxt2: lgtxt2,\r\n datavalue: 1 * data.datasets[i].data[j],\r\n cumvalue: cumvalue[axis][j],\r\n totvalue: totvalue[axis][j],\r\n pctvalue: 100 * data.datasets[i].data[j] / totvalue[axis][j],\r\n pctvalueT: 100 * data.datasets[i].data[j] / grandtotal,\r\n maxvalue: mxvalue[axis][j],\r\n minvalue: mnvalue[axis][j],\r\n lmaxvalue: lmaxvalue[axis][i],\r\n lminvalue: lminvalue[axis][i],\r\n grandtotal: grandtotal,\r\n firstNotMissing: firstNotMissingj[j],\r\n lastNotMissing: lastNotMissingj[j],\r\n prevNotMissing: prevnotemptyj,\r\n prevMissing: prevemptyj,\r\n nextNotMissing: -1,\r\n j: j,\r\n i: i,\r\n data: data\r\n };\r\n if (1 * data.datasets[i].data[j] == 0 && (tpdraw(ctx, data.datasets[i]) == \"HorizontalStackedBar\" || tpdraw(ctx, data.datasets[i]) == \"StackedBar\")) result[i][j].v3 = \"\";\r\n break;\r\n case \"Line\":\r\n case \"Radar\":\r\n result[i][j] = {\r\n config: config,\r\n v1: fmtChartJS(config, lgtxt, config.fmtV1),\r\n v2: fmtChartJS(config, lgtxt2, config.fmtV2),\r\n v3: fmtChartJS(config, 1 * data.datasets[i].data[j], config.fmtV3),\r\n v5: fmtChartJS(config, 1 * data.datasets[i].data[j], config.fmtV5),\r\n v6: fmtChartJS(config, mxvalue[axis][j], config.fmtV6),\r\n v7: fmtChartJS(config, totvalue[axis][j], config.fmtV7),\r\n v8: roundToWithThousands(config, fmtChartJS(config, 100 * data.datasets[i].data[j] / totvalue[axis][j], config.fmtV8), config.roundPct),\r\n v8T: roundToWithThousands(config, fmtChartJS(config, 100 * data.datasets[i].data[j] / grandtotal, config.fmtV8T), config.roundPct),\r\n v11: fmtChartJS(config, i, config.fmtV11),\r\n v12: fmtChartJS(config, j, config.fmtV12),\r\n lgtxt: lgtxt,\r\n lgtxt2: lgtxt2,\r\n datavalue: 1 * data.datasets[i].data[j],\r\n diffnext: 1 * data.datasets[i].data[j],\r\n pctvalue: 100 * data.datasets[i].data[j] / totvalue[axis][j],\r\n pctvalueT: 100 * data.datasets[i].data[j] / grandtotal,\r\n totvalue: totvalue[axis][j],\r\n cumvalue: cumvalue[axis][j],\r\n maxvalue: mxvalue[axis][j],\r\n minvalue: mnvalue[axis][j],\r\n lmaxvalue: lmaxvalue[axis][i],\r\n lminvalue: lminvalue[axis][i],\r\n grandtotal: grandtotal,\r\n firstNotMissing: firstNotMissingi[i],\r\n lastNotMissing: lastNotMissingi[i],\r\n prevNotMissing: prevnotemptyj,\r\n prevMissing: prevemptyj,\r\n nextNotMissing: -1,\r\n j: j,\r\n i: i,\r\n data: data\r\n };\r\n if (prevpos[axis][j] >= 0) {\r\n result[i][j].v4 = fmtChartJS(config, (prevpos[axis][j] != -1 ? 1 * data.datasets[i].data[j] - result[prevpos[axis][j]][j].datavalue : 1 * data.datasets[i].data[j]), config.fmtV4);\r\n result[i][j].diffprev = (prevpos[axis][j] != -1 ? 1 * data.datasets[i].data[j] - result[prevpos[axis][j]][j].datavalue : 1 * data.datasets[i].data[j]);\r\n result[prevpos[axis][j]][j].diffnext = data.datasets[prevpos[axis][j]].data[j] - data.datasets[i].data[j];\r\n result[prevpos[axis][j]][j].v5 = result[prevpos[axis][j]][j].diffnext;\r\n } else {\r\n result[i][j].v4 = 1 * data.datasets[i].data[j];\r\n\r\n }\r\n prevpos[axis][j] = i;\r\n break;\r\n default:\r\n break;\r\n }\r\n if (!(typeof (data.datasets[i].data[j]) == 'undefined')) {\r\n if (prevnotemptyj != -1) { for (k = prevnotemptyj; k < j; k++) result[i][k].nextNotMissing = j; }\r\n prevnotemptyj = j;\r\n }\r\n } else {\r\n prevemptyj = j;\r\n switch (tpdraw(ctx, data.datasets[i])) {\r\n case \"Bar\":\r\n case \"StackedBar\":\r\n case \"HorizontalBar\":\r\n case \"HorizontalStackedBar\":\r\n result[i][j] = {\r\n v1: lgtxt,\r\n lmaxvalue: lmaxvalue[axis][i],\r\n lminvalue: lminvalue[axis][i],\r\n firstNotMissing: firstNotMissingj[j],\r\n lastNotMissing: lastNotMissingj[j],\r\n prevNotMissing: prevnotemptyj,\r\n prevMissing: prevemptyj,\r\n grandtotal: grandtotal\r\n };\r\n break;\r\n case \"Line\":\r\n case \"Radar\":\r\n result[i][j] = {\r\n v1: lgtxt,\r\n lmaxvalue: lmaxvalue[axis][i],\r\n lminvalue: lminvalue[axis][i],\r\n firstNotMissing: firstNotMissingi[i],\r\n lastNotMissing: lastNotMissingi[i],\r\n prevNotMissing: prevnotemptyj,\r\n prevMissing: prevemptyj,\r\n grandtotal: grandtotal\r\n };\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n break;\r\n }\r\n\r\n\r\n return result;\r\n\r\n};\r\n\r\nfunction initPassVariableData_part2(statData, data, config, ctx, othervars) {\r\n\r\n var realbars = 0;\r\n var i, j;\r\n switch (ctx.tpdata) {\r\n case 1:\r\n for (i = 0; i < data.length; i++) {\r\n statData[i].v7 = fmtChartJS(config, othervars.midPosX, config.fmtV7);\r\n statData[i].v8 = fmtChartJS(config, othervars.midPosY, config.fmtV8),\r\n statData[i].v9 = fmtChartJS(config, othervars.int_radius, config.fmtV9);\r\n statData[i].v10 = fmtChartJS(config, othervars.ext_radius, config.fmtV10);\r\n if (ctx.tpchart == \"PolarArea\") {\r\n statData[i].radiusOffset = calculateOffset(config.logarithmic, 1 * data[i].value, othervars.calculatedScale, othervars.scaleHop);\r\n statData[i].v10 = fmtChartJS(config, statData[i].radiusOffset, config.fmtV10);\r\n }\r\n else {\r\n statData[i].v10 = fmtChartJS(config, othervars.ext_radius, config.fmtV10);\r\n statData[i].radiusOffset = othervars.ext_radius;\r\n }\r\n statData[i].outerVal = othervars.outerVal;\r\n statData[i].midPosX = othervars.midPosX;\r\n statData[i].midPosY = othervars.midPosY;\r\n statData[i].calculatedScale = othervars.calculatedScale;\r\n statData[i].scaleHop = othervars.scaleHop;\r\n statData[i].int_radius = othervars.int_radius;\r\n statData[i].ext_radius = othervars.ext_radius;\r\n }\r\n break;\r\n case 0:\r\n default:\r\n var tempp = new Array(data.datasets.length);\r\n var tempn = new Array(data.datasets.length);\r\n for (i = 0; i < data.datasets.length; i++) {\r\n switch (tpdraw(ctx, data.datasets[i])) {\r\n case \"Line\":\r\n for (j = 0; j < data.datasets[i].data.length; j++) {\r\n statData[i][j].xAxisPosY = othervars.xAxisPosY;\r\n statData[i][j].yAxisPosX = othervars.yAxisPosX;\r\n statData[i][j].valueHop = othervars.valueHop;\r\n statData[i][j].nbValueHop = othervars.nbValueHop;\r\n if (data.datasets[i].axis == 2) {\r\n statData[i][j].scaleHop = othervars.scaleHop2;\r\n statData[i][j].zeroY = othervars.zeroY2;\r\n statData[i][j].calculatedScale = othervars.calculatedScale2;\r\n statData[i][j].logarithmic = othervars.logarithmic2;\r\n } else {\r\n statData[i][j].scaleHop = othervars.scaleHop;\r\n statData[i][j].zeroY = othervars.zeroY;\r\n statData[i][j].calculatedScale = othervars.calculatedScale;\r\n statData[i][j].logarithmic = othervars.logarithmic;\r\n }\r\n statData[i][j].xPos = xPos(i, j, data, othervars.yAxisPosX, othervars.valueHop, othervars.nbValueHop);\r\n statData[i][j].yAxisPos = othervars.xAxisPosY - statData[i][j].zeroY;\r\n if (ctx.tpchart == \"Bar\" || ctx.tpchart == \"StackedBar\") {\r\n statData[i][j].xPos += (othervars.valueHop / 2);\r\n statData[i][j].yAxisPosX += (othervars.valueHop / 2);\r\n }\r\n if (j == 0) {\r\n statData[i][j].lmaxvalue_offset = calculateOffset(statData[i][j].logarithmic, statData[i][j].lmaxvalue, statData[i][j].calculatedScale, statData[i][j].scaleHop) - statData[i][j].zeroY;\r\n statData[i][j].lminvalue_offset = calculateOffset(statData[i][j].logarithmic, statData[i][j].lminvalue, statData[i][j].calculatedScale, statData[i][j].scaleHop) - statData[i][j].zeroY;\r\n } else {\r\n statData[i][j].lmaxvalue_offset = statData[i][0].lmaxvalue_offset;\r\n statData[i][j].lminvalue_offset = statData[i][0].lminvalue_offset;\r\n }\r\n\r\n if (!(typeof (data.datasets[i].data[j]) == 'undefined')) {\r\n statData[i][j].yPosOffset = calculateOffset(statData[i][j].logarithmic, data.datasets[i].data[j], statData[i][j].calculatedScale, statData[i][j].scaleHop) - statData[i][j].zeroY;\r\n statData[i][j].posY = statData[i][j].yAxisPos - statData[i][j].yPosOffset;\r\n }\r\n if (typeof (data.datasets[i].origin) == 'object') {\r\n if (!(typeof (data.datasets[i].origin[j]) == 'undefined')) {\r\n statData[i][j].yPosOffsetOrigin = calculateOffset(statData[i][j].logarithmic, data.datasets[i].origin[j], statData[i][j].calculatedScale, statData[i][j].scaleHop) - statData[i][j].zeroY;\r\n statData[i][j].posYOrigin = statData[i][j].yAxisPos - statData[i][j].yPosOffsetOrigin;\r\n }\r\n }\r\n statData[i][j].posX = statData[i][j].xPos;\r\n\r\n statData[i][j].v9 = statData[i][j].xPos;\r\n statData[i][j].v10 = statData[i][j].posY;\r\n\r\n statData[i][j].annotateStartPosX = statData[i][j].xPos;\r\n statData[i][j].annotateEndPosX = statData[i][j].xPos;\r\n statData[i][j].annotateStartPosY = othervars.xAxisPosY;\r\n statData[i][j].annotateEndPosY = othervars.xAxisPosY - othervars.msr.availableHeight;\r\n statData[i][j].D1A = undefined;\r\n statData[i][j].D1B = undefined;\r\n }\r\n break;\r\n case \"Radar\":\r\n var rotationDegree = (2 * Math.PI) / data.datasets[0].data.length;\r\n for (j = 0; j < data.datasets[i].data.length; j++) {\r\n statData[i][j].midPosX = othervars.midPosX;\r\n statData[i][j].midPosY = othervars.midPosY;\r\n statData[i][j].int_radius = 0;\r\n statData[i][j].ext_radius = othervars.maxSize;\r\n statData[i][j].radiusOffset = othervars.maxSize;\r\n statData[i][j].calculatedScale = othervars.calculatedScale;\r\n statData[i][j].scaleHop = othervars.scaleHop;\r\n statData[i][j].calculated_offset = calculateOffset(config.logarithmic, data.datasets[i].data[j], othervars.calculatedScale, othervars.scaleHop);\r\n statData[i][j].offsetX = Math.cos(config.startAngle * Math.PI / 180 - j * rotationDegree) * statData[i][j].calculated_offset;\r\n statData[i][j].offsetY = Math.sin(config.startAngle * Math.PI / 180 - j * rotationDegree) * statData[i][j].calculated_offset;\r\n statData[i][j].v9 = statData[i][j].midPosX + statData[i][j].offsetX;\r\n statData[i][j].v10 = statData[i][j].midPosY - statData[i][j].offsetY;\r\n statData[i][j].posX = statData[i][j].midPosX + statData[i][j].offsetX;\r\n statData[i][j].posY = statData[i][j].midPosY - statData[i][j].offsetY;\r\n if (j == 0) statData[i][j].calculated_offset_max = calculateOffset(config.logarithmic, statData[i][j].lmaxvalue, othervars.calculatedScale, othervars.scaleHop);\r\n else statData[i][j].calculated_offset_max = statData[0][j].calculated_offset_max;\r\n statData[i][j].annotateStartPosX = othervars.midPosX;\r\n statData[i][j].annotateEndPosX = othervars.midPosX + Math.cos(config.startAngle * Math.PI / 180 - j * rotationDegree) * othervars.maxSize;\r\n statData[i][j].annotateStartPosY = othervars.midPosY;\r\n statData[i][j].annotateEndPosY = othervars.midPosY - Math.sin(config.startAngle * Math.PI / 180 - j * rotationDegree) * othervars.maxSize;\r\n if (Math.abs(statData[i][j].annotateStartPosX - statData[i][j].annotateEndPosX) < config.zeroValue) {\r\n statData[i][j].D1A = undefined;\r\n statData[i][j].D1B = undefined;\r\n statData[i][j].D2A = 0;\r\n } else {\r\n statData[i][j].D1A = (statData[i][j].annotateStartPosY - statData[i][j].annotateEndPosY) / (statData[i][j].annotateStartPosX - statData[i][j].annotateEndPosX);\r\n statData[i][j].D1B = -statData[i][j].D1A * statData[i][j].annotateStartPosX + statData[i][j].annotateStartPosY;\r\n if (Math.abs(statData[i][j].D1A) >= config.zeroValue) statData[i][j].D2A = -(1 / statData[i][j].D1A);\r\n else statData[i][j].D2A = undefined;\r\n }\r\n\r\n }\r\n break;\r\n case \"Bar\":\r\n for (j = 0; j < data.datasets[i].data.length; j++) {\r\n\r\n statData[i][j].xAxisPosY = othervars.xAxisPosY;\r\n statData[i][j].yAxisPosX = othervars.yAxisPosX;\r\n statData[i][j].valueHop = othervars.valueHop;\r\n statData[i][j].barWidth = othervars.barWidth;\r\n statData[i][j].additionalSpaceBetweenBars = othervars.additionalSpaceBetweenBars;\r\n statData[i][j].nbValueHop = othervars.nbValueHop;\r\n statData[i][j].calculatedScale = othervars.calculatedScale;\r\n statData[i][j].scaleHop = othervars.scaleHop;\r\n\r\n statData[i][j].xPosLeft = othervars.yAxisPosX + Math.ceil(ctx.chartSpaceScale * config.barValueSpacing) + othervars.valueHop * j + othervars.additionalSpaceBetweenBars + othervars.barWidth * realbars + Math.ceil(ctx.chartSpaceScale * config.barDatasetSpacing) * realbars + Math.ceil(ctx.chartLineScale * config.barStrokeWidth) * realbars;\r\n statData[i][j].xPosRight = statData[i][j].xPosLeft + othervars.barWidth;\r\n statData[i][j].yPosBottom = othervars.xAxisPosY - othervars.zeroY\r\n statData[i][j].barHeight = calculateOffset(config.logarithmic, 1 * data.datasets[i].data[j], othervars.calculatedScale, othervars.scaleHop) - othervars.zeroY;\r\n if (data.datasets[i].axis == 2) {\r\n statData[i][j].yPosBottom = othervars.xAxisPosY - othervars.zeroY2;\r\n statData[i][j].barHeight = calculateOffset(config.logarithmic2, 1 * data.datasets[i].data[j], othervars.calculatedScale2, othervars.scaleHop2) - othervars.zeroY2;\r\n } else {\r\n statData[i][j].yPosBottom = othervars.xAxisPosY - othervars.zeroY\r\n statData[i][j].barHeight = calculateOffset(config.logarithmic, 1 * data.datasets[i].data[j], othervars.calculatedScale, othervars.scaleHop) - othervars.zeroY;\r\n }\r\n statData[i][j].yPosTop = statData[i][j].yPosBottom - statData[i][j].barHeight + (Math.ceil(ctx.chartLineScale * config.barStrokeWidth) / 2);\r\n statData[i][j].v7 = statData[i][j].xPosLeft;\r\n statData[i][j].v8 = statData[i][j].yPosBottom;\r\n statData[i][j].v9 = statData[i][j].xPosRight;\r\n statData[i][j].v10 = statData[i][j].yPosTop;\r\n\r\n }\r\n realbars++;\r\n break;\r\n case \"StackedBar\":\r\n for (j = 0; j < data.datasets[i].data.length; j++) {\r\n statData[i][j].xAxisPosY = othervars.xAxisPosY;\r\n statData[i][j].yAxisPosX = othervars.yAxisPosX;\r\n statData[i][j].valueHop = othervars.valueHop;\r\n statData[i][j].barWidth = othervars.barWidth;\r\n statData[i][j].additionalSpaceBetweenBars = othervars.additionalSpaceBetweenBars;\r\n statData[i][j].nbValueHop = othervars.nbValueHop;\r\n statData[i][j].calculatedScale = othervars.calculatedScale;\r\n statData[i][j].scaleHop = othervars.scaleHop;\r\n //\t\t\t\t\t\tstatData[i][j].nbValueHop = othervars.nbValueHop;\r\n\r\n if (typeof tempp[j] == \"undefined\") {\r\n tempp[j] = 0;\r\n tempn[j] = 0;\r\n zeroY = calculateOffset(config.logarithmic, 0, othervars.calculatedScale, othervars.scaleHop);\r\n }\r\n if ((typeof data.datasets[i].data[j] == 'undefined')) continue;\r\n statData[i][j].xPosLeft = othervars.yAxisPosX + Math.ceil(ctx.chartSpaceScale * config.barValueSpacing) + othervars.valueHop * j + othervars.additionalSpaceBetweenBars;\r\n if (1 * data.datasets[i].data[j] < 0) {\r\n statData[i][j].botval = tempn[j];\r\n statData[i][j].topval = tempn[j] + 1 * data.datasets[i].data[j];\r\n tempn[j] = tempn[j] + 1 * data.datasets[i].data[j];\r\n } else {\r\n statData[i][j].botval = tempp[j];\r\n statData[i][j].topval = tempp[j] + 1 * data.datasets[i].data[j];\r\n tempp[j] = tempp[j] + 1 * data.datasets[i].data[j];\r\n }\r\n statData[i][j].xPosRight = statData[i][j].xPosLeft + othervars.barWidth;\r\n statData[i][j].botOffset = calculateOffset(config.logarithmic, statData[i][j].botval, othervars.calculatedScale, othervars.scaleHop);\r\n statData[i][j].topOffset = calculateOffset(config.logarithmic, statData[i][j].topval, othervars.calculatedScale, othervars.scaleHop);\r\n statData[i][j].yPosBottom = othervars.xAxisPosY - statData[i][j].botOffset;\r\n statData[i][j].yPosTop = othervars.xAxisPosY - statData[i][j].topOffset;\r\n // treat spaceBetweenBar \r\n if (Math.ceil(ctx.chartSpaceScale * config.spaceBetweenBar) > 0) {\r\n if (1 * data.datasets[i].data[j] < 0) {\r\n statData[i][j].yPosBottom += Math.ceil(ctx.chartSpaceScale * config.spaceBetweenBar);\r\n if (tempn[j] == 1 * data.datasets[i].data[j]) statData[i][j].yPosBottom -= (Math.ceil(ctx.chartSpaceScale * config.spaceBetweenBar) / 2);\r\n if (statData[i][j].yPosTop < statData[i][j].yPosBottom) statData[i][j].yPosBottom = statData[i][j].yPosTop;\r\n } else if (1 * data.datasets[i].data[j] > 0) {\r\n statData[i][j].yPosBottom -= Math.ceil(ctx.chartSpaceScale * config.spaceBetweenBar);\r\n if (tempp[j] == 1 * data.datasets[i].data[j]) statData[i][j].yPosBottom += (Math.ceil(ctx.chartSpaceScale * config.spaceBetweenBar) / 2);\r\n if (statData[i][j].yPosTop > statData[i][j].yPosBottom) statData[i][j].yPosBottom = statData[i][j].yPosTop;\r\n }\r\n }\r\n statData[i][j].v7 = statData[i][j].xPosLeft;\r\n statData[i][j].v8 = statData[i][j].yPosBottom;\r\n statData[i][j].v9 = statData[i][j].xPosRight;\r\n statData[i][j].v10 = statData[i][j].yPosTop;\r\n }\r\n break;\r\n case \"HorizontalBar\":\r\n for (j = 0; j < data.datasets[i].data.length; j++) {\r\n\r\n statData[i][j].xAxisPosY = othervars.xAxisPosY;\r\n statData[i][j].yAxisPosX = othervars.yAxisPosX;\r\n statData[i][j].valueHop = othervars.valueHop;\r\n statData[i][j].barWidth = othervars.barWidth;\r\n statData[i][j].additionalSpaceBetweenBars = othervars.additionalSpaceBetweenBars;\r\n statData[i][j].nbValueHop = othervars.nbValueHop;\r\n statData[i][j].calculatedScale = othervars.calculatedScale;\r\n statData[i][j].scaleHop = othervars.scaleHop;\r\n\r\n\r\n statData[i][j].xPosLeft = othervars.yAxisPosX + othervars.zeroY;\r\n statData[i][j].yPosTop = othervars.xAxisPosY + Math.ceil(ctx.chartSpaceScale * config.barValueSpacing) - othervars.scaleHop * (j + 1) + othervars.additionalSpaceBetweenBars + othervars.barWidth * i + Math.ceil(ctx.chartSpaceScale * config.barDatasetSpacing) * i + Math.ceil(ctx.chartLineScale * config.barStrokeWidth) * i;\r\n statData[i][j].yPosBottom = statData[i][j].yPosTop + othervars.barWidth;\r\n statData[i][j].barWidth = calculateOffset(config.logarithmic, 1 * data.datasets[i].data[j], othervars.calculatedScale, othervars.valueHop) - othervars.zeroY;\r\n statData[i][j].xPosRight = statData[i][j].xPosLeft + statData[i][j].barWidth;\r\n\r\n statData[i][j].v7 = statData[i][j].xPosLeft;\r\n statData[i][j].v8 = statData[i][j].yPosBottom;\r\n statData[i][j].v9 = statData[i][j].xPosRight;\r\n statData[i][j].v10 = statData[i][j].yPosTop;\r\n }\r\n break;\r\n case \"HorizontalStackedBar\":\r\n for (j = 0; j < data.datasets[i].data.length; j++) {\r\n statData[i][j].xAxisPosY = othervars.xAxisPosY;\r\n statData[i][j].yAxisPosX = othervars.yAxisPosX;\r\n statData[i][j].valueHop = othervars.valueHop;\r\n statData[i][j].barWidth = othervars.barWidth;\r\n statData[i][j].additionalSpaceBetweenBars = othervars.additionalSpaceBetweenBars;\r\n statData[i][j].nbValueHop = othervars.nbValueHop;\r\n statData[i][j].calculatedScale = othervars.calculatedScale;\r\n statData[i][j].scaleHop = othervars.scaleHop;\r\n\r\n if (i == 0) {\r\n tempp[j] = 0;\r\n tempn[j] = 0;\r\n }\r\n if (typeof (data.datasets[i].data[j]) == 'undefined') continue;\r\n //\t\t\t\t\t\tif ((typeof(data.datasets[i].data[j]) == 'undefined') || 1*data.datasets[i].data[j] == 0 ) continue;\r\n\r\n statData[i][j].xPosLeft = othervars.yAxisPosX + Math.ceil(ctx.chartSpaceScale * config.barValueSpacing) + othervars.valueHop * j;\r\n if (1 * data.datasets[i].data[j] < 0) {\r\n statData[i][j].leftval = tempn[j];\r\n statData[i][j].rightval = tempn[j] + 1 * data.datasets[i].data[j];\r\n tempn[j] = tempn[j] + 1 * data.datasets[i].data[j];\r\n } else {\r\n statData[i][j].leftval = tempp[j];\r\n statData[i][j].rightval = tempp[j] + 1 * data.datasets[i].data[j];\r\n tempp[j] = tempp[j] + 1 * data.datasets[i].data[j];\r\n }\r\n statData[i][j].rightOffset = HorizontalCalculateOffset(statData[i][j].rightval, othervars.calculatedScale, othervars.valueHop);\r\n statData[i][j].leftOffset = HorizontalCalculateOffset(statData[i][j].leftval, othervars.calculatedScale, othervars.valueHop);\r\n statData[i][j].xPosRight = othervars.yAxisPosX + statData[i][j].rightOffset;\r\n statData[i][j].xPosLeft = othervars.yAxisPosX + statData[i][j].leftOffset;\r\n statData[i][j].yPosTop = othervars.xAxisPosY + Math.ceil(ctx.chartSpaceScale * config.barValueSpacing) - othervars.scaleHop * (j + 1) + othervars.additionalSpaceBetweenBars;\r\n statData[i][j].yPosBottom = statData[i][j].yPosTop + othervars.barWidth;\r\n // treat spaceBetweenBar \r\n if (Math.ceil(ctx.chartSpaceScale * config.spaceBetweenBar) > 0) {\r\n if (1 * data.datasets[i].data[j] < 0) {\r\n statData[i][j].xPosLeft -= Math.ceil(ctx.chartSpaceScale * config.spaceBetweenBar);\r\n if (tempn[j] == 1 * data.datasets[i].data[j]) statData[i][j].xPosLeft += (Math.ceil(ctx.chartSpaceScale * config.spaceBetweenBar) / 2);\r\n if (statData[i][j].xPosLeft < statData[i][j].xPosRight) statData[i][j].xPosLeft = statData[i][j].xPosRight;\r\n } else if (1 * data.datasets[i].data[j] > 0) {\r\n statData[i][j].xPosLeft += Math.ceil(ctx.chartSpaceScale * config.spaceBetweenBar);\r\n if (tempp[j] == 1 * data.datasets[i].data[j]) statData[i][j].xPosLeft -= (Math.ceil(ctx.chartSpaceScale * config.spaceBetweenBar) / 2);\r\n if (statData[i][j].xPosLeft > statData[i][j].xPosRight) statData[i][j].xPosLeft = statData[i][j].xPosRight;\r\n }\r\n }\r\n\r\n statData[i][j].v7 = statData[i][j].xPosLeft;\r\n statData[i][j].v8 = statData[i][j].yPosBottom;\r\n statData[i][j].v9 = statData[i][j].xPosRight;\r\n statData[i][j].v10 = statData[i][j].yPosTop;\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n };\r\n\r\n\r\n\r\n function xPos(ival, iteration, data, yAxisPosX, valueHop, nbValueHop) {\r\n //nbValueHop=8;\r\n if (typeof data.datasets[ival].xPos == \"object\") {\r\n if (!(typeof data.datasets[ival].xPos[Math.floor(iteration + config.zeroValue)] == \"undefined\")) {\r\n var width = valueHop * nbValueHop;\r\n\r\n var deb = (typeof data.xBegin != \"undefined\") ? data.xBegin : 1 * data.labels[0];\r\n var fin = (typeof data.xEnd != \"undefined\") ? data.xEnd : 1 * data.labels[data.labels.length - 1];\r\n if (fin <= deb) fin = deb + 100;\r\n if (1 * data.datasets[ival].xPos[Math.floor(iteration + config.zeroValue)] >= deb && data.datasets[ival].xPos[Math.floor(iteration + config.zeroValue)] <= fin) {\r\n var p1 = yAxisPosX + width * ((1 * data.datasets[ival].xPos[Math.floor(iteration + config.zeroValue)] - deb) / (fin - deb));\r\n var p2 = p1;\r\n if (Math.abs(iteration - Math.floor(iteration + config.zeroValue)) > config.zeroValue) {\r\n p2 = xPos(ival, Math.ceil(iteration - config.zeroValue), data);\r\n }\r\n return p1 + (iteration - Math.floor(iteration + config.zeroValue)) * (p2 - p1);\r\n }\r\n }\r\n }\r\n return yAxisPosX + (valueHop * iteration);\r\n };\r\n\r\n\r\n function calculateOrderOfMagnitude(val) {\r\n return Math.floor(Math.log(val) / Math.LN10);\r\n };\r\n\r\n function calculateOffset(logarithmic, val, calculatedScale, scaleHop) {\r\n if (!logarithmic) { // no logarithmic scale\r\n var outerValue = calculatedScale.steps * calculatedScale.stepValue;\r\n var adjustedValue = val - calculatedScale.graphMin;\r\n var scalingFactor = CapValue(adjustedValue / outerValue, 1, 0);\r\n return (scaleHop * calculatedScale.steps) * scalingFactor;\r\n } else { // logarithmic scale\r\n //\t\t\treturn CapValue(log10(val) * scaleHop - calculateOrderOfMagnitude(calculatedScale.graphMin) * scaleHop, undefined, 0);\r\n return CapValue(log10(val) * scaleHop - log10(calculatedScale.graphMin) * scaleHop, undefined, 0);\r\n }\r\n };\r\n\r\n function HorizontalCalculateOffset(val, calculatedScale, scaleHop) {\r\n var outerValue = calculatedScale.steps * calculatedScale.stepValue;\r\n var adjustedValue = val - calculatedScale.graphMin;\r\n var scalingFactor = CapValue(adjustedValue / outerValue, 1, 0);\r\n return (scaleHop * calculatedScale.steps) * scalingFactor;\r\n };\r\n\r\n //Apply cap a value at a high or low number\r\n function CapValue(valueToCap, maxValue, minValue) {\r\n if (isNumber(maxValue)) {\r\n if (valueToCap > maxValue) {\r\n return maxValue;\r\n }\r\n }\r\n if (isNumber(minValue)) {\r\n if (valueToCap < minValue) {\r\n return minValue;\r\n }\r\n }\r\n return valueToCap;\r\n };\r\n function log10(val) {\r\n return Math.log(val) / Math.LN10;\r\n };\r\n};\r\n\r\nfunction isBooleanOptionTrue(optionVar, defaultvalue) {\r\n var j;\r\n if (typeof optionvar == \"undefined\") {\r\n if (typeof defaultvalue == \"function\") return true;\r\n else if (typeof defaultvalue == \"object\") {\r\n for (j = 0; j < defaultvalue.length; j++) if (defaultvalue[j]) return true;\r\n return false;\r\n }\r\n else return defaultvalue;\r\n }\r\n if (typeof optionvar == \"function\") return true;\r\n else if (typeof optionvar == \"object\") {\r\n for (j = 0; j < optionvar.length; j++) if (optionvar[j]) return true;\r\n return false;\r\n } else return optionvar;\r\n};\r\n\r\nfunction setOptionValue(rescale, reference, ctx, data, statData, optionvar, defaultvalue, posi, posj, othervars) {\r\n var rv;\r\n if (typeof optionvar == \"undefined\") {\r\n if (typeof defaultvalue == \"function\") return defaultvalue(reference, ctx, data, statData, posi, posj, othervars);\r\n else if (typeof defaultvalue == \"object\") {\r\n //\t\t\tif(posj==-1)\r\n rv = defaultvalue[Math.min(defaultvalue.length - 1, Math.max(0, posi))];\r\n //\t\t\telse rv=defaultvalue[Math.min(defaultvalue.length-1,Math.max(0,posj))];\r\n }\r\n else {\r\n rv = defaultvalue;\r\n }\r\n if (rescale != 1) rv = Math.ceil(rv * rescale);\r\n return rv;\r\n }\r\n if (typeof optionvar == \"function\") rv = optionvar(reference, ctx, data, statData, posi, posj, othervars);\r\n else if (typeof optionvar == \"object\") {\r\n if (posj == -1) rv = optionvar[Math.min(optionvar.length - 1, Math.max(0, posi))];\r\n else rv = optionvar[Math.min(optionvar.length - 1, Math.max(0, posj))];\r\n }\r\n else rv = optionvar;\r\n if (rescale != 1) rv = Math.ceil(rv * rescale);\r\n return rv;\r\n\r\n};\r\n\r\nfunction tpdraw(ctx, dataval) {\r\n switch (ctx.tpchart) {\r\n case \"Bar\":\r\n case \"StackedBar\":\r\n if (dataval.type == \"Line\") { tp = \"Line\"; }\r\n else { tp = ctx.tpchart; }\r\n break;\r\n default:\r\n tp = ctx.tpchart;\r\n break;\r\n }\r\n return tp;\r\n};\r\n\r\nfunction setTextBordersAndBackground(ctx, text, fontsize, xpos, ypos, borders, borderscolor, borderswidth, bordersxspace, bordersyspace, bordersstyle, backgroundcolor, optiongroup) {\r\n var textHeight, textWidth;\r\n // compute text width and text height;\r\n if (typeof text != \"string\") {\r\n var txt = text.toString();\r\n textHeight = fontsize * (txt.split(\"\\n\").length || 1);\r\n textWidth = ctx.measureText(txt).width;\r\n } else {\r\n textHeight = fontsize * (text.split(\"\\n\").length || 1);\r\n textWidth = ctx.measureText(text).width;\r\n }\r\n\r\n\r\n // compute xright, xleft, ytop, ybot;\r\n\r\n var xright, xleft, ytop, ybot;\r\n if (ctx.textAlign == \"center\") {\r\n xright = -textWidth / 2;\r\n xleft = textWidth / 2;\r\n } else if (ctx.textAlign == \"left\") {\r\n xright = 0;\r\n xleft = textWidth;\r\n } else if (ctx.textAlign == \"right\") {\r\n xright = -textWidth;\r\n xleft = 0;\r\n }\r\n\r\n if (ctx.textBaseline == \"top\") {\r\n ytop = 0;\r\n ybottom = textHeight;\r\n } else if (ctx.textBaseline == \"center\" || ctx.textBaseline == \"middle\") {\r\n ytop = -textHeight / 2;\r\n ybottom = textHeight / 2;\r\n } else if (ctx.textBaseline == \"bottom\") {\r\n ytop = -textHeight;\r\n ybottom = 0;\r\n }\r\n\r\n ctx.save();\r\n ctx.beginPath();\r\n ctx.translate(xpos, ypos);\r\n\r\n if (backgroundcolor != \"none\") {\r\n\r\n ctx.save();\r\n ctx.fillStyle = backgroundcolor;\r\n ctx.fillRect(xright - bordersxspace, ybottom + bordersyspace, xleft - xright + 2 * bordersxspace, ytop - ybottom - 2 * bordersyspace);\r\n ctx.stroke();\r\n ctx.restore();\r\n ctx.fillStyle = \"black\";\r\n }\r\n\r\n // draw border;\r\n if (borders) {\r\n ctx.save();\r\n ctx.lineWidth = borderswidth;\r\n ctx.strokeStyle = borderscolor;\r\n ctx.fillStyle = borderscolor;\r\n ctx.setLineDash(lineStyleFn(bordersstyle));\r\n ctx.rect(xright - borderswidth / 2 - bordersxspace, ytop - borderswidth / 2 - bordersyspace, xleft - xright + borderswidth + 2 * bordersxspace, ybottom - ytop + borderswidth + 2 * bordersyspace);\r\n ctx.stroke();\r\n ctx.setLineDash([]);\r\n ctx.restore();\r\n }\r\n\r\n ctx.restore();\r\n};\r\n\r\nfunction calculatePieDrawingSize(ctx, msr, config, data, statData) {\r\n\r\n var realCumulativeAngle = (((config.startAngle * (Math.PI / 180) + 2 * Math.PI) % (2 * Math.PI)) + 2 * Math.PI) % (2 * Math.PI);\r\n var realAmplitude = (((config.totalAmplitude * (Math.PI / 180) + 2 * Math.PI) % (2 * Math.PI)) + 2 * Math.PI) % (2 * Math.PI);\r\n if (realAmplitude <= config.zeroValue) realAmplitude = 2 * Math.PI;\r\n\r\n var debAngle = ((realCumulativeAngle - realAmplitude) + 4 * Math.PI) % (2 * Math.PI);\r\n var finAngle = debAngle + realAmplitude;\r\n\r\n var qposdeb = Math.floor(((debAngle + config.zeroValue) / (Math.PI / 2)) % 4);\r\n var qposfin = Math.floor(((finAngle - config.zeroValue) / (Math.PI / 2)) % 4);\r\n var q = [0, 0, 0, 0];\r\n if (qposdeb <= qposfin) for (var i = qposdeb; i <= qposfin; i++) q[i] = 1;\r\n else {\r\n for (var i = qposdeb; i < 4; i++) q[i] = 1;\r\n for (var i = 0; i <= qposfin; i++) q[i] = 1;\r\n }\r\n\r\n if (q[0] == 0 && q[1] == 0) {\r\n midPieY = msr.topNotUsableSize + 5;\r\n doughnutRadius = msr.availableHeight - 5;\r\n } else if (q[2] == 0 && q[3] == 0) {\r\n midPieY = msr.topNotUsableSize + msr.availableHeight;\r\n doughnutRadius = msr.availableHeight - 5;\r\n } else {\r\n midPieY = msr.topNotUsableSize + (msr.availableHeight / 2);\r\n doughnutRadius = msr.availableHeight / 2 - 5;\r\n }\r\n var realAvailableWidth;\r\n if (q[0] == 0 && q[3] == 0) {\r\n midPieX = msr.leftNotUsableSize + msr.availableWidth - 5;\r\n doughnutRadius = Math.min(doughnutRadius, msr.availableWidth - 5);\r\n realAvailableWidth = msr.availableWidth - 5\r\n\r\n } else if (q[1] == 0 && q[2] == 0) {\r\n midPieX = msr.leftNotUsableSize + 5;\r\n doughnutRadius = Math.min(doughnutRadius, msr.availableWidth - 5);\r\n realAvailableWidth = msr.availableWidth - 5\r\n } else {\r\n midPieX = msr.leftNotUsableSize + (msr.availableWidth / 2);\r\n doughnutRadius = Math.min(doughnutRadius, (msr.availableWidth / 2) - 5);\r\n realAvailableWidth = (msr.availableWidth / 2) - 5\r\n }\r\n // Computerange Pie Radius\r\n if (isBooleanOptionTrue(undefined, config.inGraphDataShow) && setOptionValue(1, \"INGRAPHDATARADIUSPOSITION\", ctx, data, statData, undefined, config.inGraphDataRadiusPosition, 0, -1, { nullValue: true }) == 3 && setOptionValue(1, \"INGRAPHDATAALIGN\", ctx, data, statData, undefined, config.inGraphDataAlign, 0, -1, { nullValue: true }) == \"off-center\" && setOptionValue(1, \"INGRAPHDATAROTATE\", ctx, data, statData, undefined, config.inGraphDataRotate, 0, -1, { nullValue: true }) == 0) {\r\n doughnutRadius = doughnutRadius - setOptionValue(ctx.chartTextScale, \"INGRAPHDATAFONTSIZE\", ctx, data, statData, undefined, config.inGraphDataFontSize, 0, -1, { nullValue: true }) - setOptionValue(1, \"INGRAPHDATAPADDINGRADIUS\", ctx, data, statData, undefined, config.inGraphDataPaddingRadius, 0, -1, { nullValue: true }) - 5;\r\n var posAngle;\r\n for (var i = 0; i < data.length; i++) {\r\n if (!(typeof (data[i].value) == 'undefined') && 1 * data[i].value >= 0) {\r\n ctx.font = setOptionValue(1, \"INGRAPHDATAFONTSTYLE\", ctx, data, statData, undefined, config.inGraphDataFontStyle, i, -1, { nullValue: true }) + ' ' + setOptionValue(ctx.chartTextScale, \"INGRAPHDATAFONTSIZE\", ctx, data, statData, undefined, config.inGraphDataFontSize, i, -1, { nullValue: true }) + 'px ' + setOptionValue(1, \"INGRAPHDATAFONTFAMILY\", ctx, data, statData, undefined, config.inGraphDataFontFamily, i, -1, { nullValue: true });\r\n if (setOptionValue(1, \"INGRAPHDATAANGLEPOSITION\", ctx, data, statData, undefined, config.inGraphDataAnglePosition, i, -1, { nullValue: true }) == 1) posAngle = realCumulativeAngle + setOptionValue(1, \"INGRAPHDATAPADDINANGLE\", ctx, data, statData, undefined, config.inGraphDataPaddingAngle, i, -1, { nullValue: true }) * (Math.PI / 180);\r\n else if (setOptionValue(1, \"INGRAPHDATAANGLEPOSITION\", ctx, data, statData, undefined, config.inGraphDataAnglePosition, i, -1, { nullValue: true }) == 2) posAngle = realCumulativeAngle - statData[i].segmentAngle / 2 + setOptionValue(1, \"INGRAPHDATAPADDINANGLE\", ctx, data, statData, undefined, config.inGraphDataPaddingAngle, i, -1, { nullValue: true }) * (Math.PI / 180);\r\n else if (setOptionValue(1, \"INGRAPHDATAANGLEPOSITION\", ctx, data, statData, undefined, config.inGraphDataAnglePosition, i, -1, { nullValue: true }) == 3) posAngle = realCumulativeAngle - statData[i].segmentAngle + setOptionValue(1, \"INGRAPHDATAPADDINANGLE\", ctx, data, statData, undefined, config.inGraphDataPaddingAngle, i, -1, { nullValue: true }) * (Math.PI / 180);\r\n realCumulativeAngle -= statData[i].segmentAngle;\r\n var dispString = tmplbis(setOptionValue(1, \"INGRAPHDATATMPL\", ctx, data, statData, undefined, config.inGraphDataTmpl, i, -1, { nullValue: true }), statData[i], config);\r\n var textMeasurement = ctx.measureText(dispString).width;\r\n var MaxRadiusX = Math.abs((realAvailableWidth - textMeasurement) / Math.cos(posAngle)) - setOptionValue(1, \"INGRAPHDATAPADDINGRADIUS\", ctx, data, statData, undefined, config.inGraphDataPaddingRadius, i, -1, { nullValue: true }) - 5;\r\n if (MaxRadiusX < doughnutRadius) doughnutRadius = MaxRadiusX;\r\n }\r\n }\r\n }\r\n doughnutRadius = doughnutRadius * config.radiusScale;\r\n return {\r\n radius: doughnutRadius,\r\n midPieX: midPieX,\r\n midPieY: midPieY\r\n };\r\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./Content/javascript/src/externalLibs/ChartNew.js\n// module id = 192\n// module chunks = 15","import bowser from 'bowser';\r\n\r\nexport var SHWebXDt = {\r\n\r\n InitializeDataTableWith:\r\n function (a_contentTopBoxHeaderId, a_dataTableId, a_filename, a_firstExportItemTitle,\r\n a_secondExportItemTitle, a_tableCount) {\r\n\r\n a_filename = a_filename || \"dtfile\";\r\n a_firstExportItemTitle = a_firstExportItemTitle || \"\";\r\n a_secondExportItemTitle = a_secondExportItemTitle || \"\";\r\n a_tableCount = a_tableCount || 0;\r\n\r\n if (a_tableCount <= 0) {\r\n $(\"#\" + a_contentTopBoxHeaderId + \" #infoRightsBoxHolder\").hide();\r\n $(\"#\" + a_contentTopBoxHeaderId + \" .dataTableExportBtnsOuterHolder\").hide();\r\n $(\"#\" + a_contentTopBoxHeaderId + \" .dataTableSearchInputBoxHolder\").hide();\r\n $(\"#\" + a_contentTopBoxHeaderId + \" .dataTableSearchButtonHolder\").hide();\r\n $(\"#\" + a_dataTableId).hide();\r\n $(\"#\" + a_contentTopBoxHeaderId + \" .dataTableNonExistingDataError\").show();\r\n }\r\n else {\r\n $(\"#\" + a_contentTopBoxHeaderId + \" .dataTableNonExistingDataError\").hide();\r\n $(\"#\" + a_contentTopBoxHeaderId + \" #infoRightsBoxHolder\").show();\r\n $(\"#\" + a_contentTopBoxHeaderId + \" .dataTableExportBtnsOuterHolder\").show();\r\n $(\"#\" + a_contentTopBoxHeaderId + \" .dataTableSearchInputBoxHolder\").show();\r\n $(\"#\" + a_contentTopBoxHeaderId + \" .dataTableSearchButtonHolder\").show();\r\n $(\"#\" + a_dataTableId).show();\r\n }\r\n var dt = $(\"#\" + a_dataTableId).DataTable({\r\n language: {\r\n search: \"\",\r\n searchPlaceholder: $(\"