/* FusionCharts JavaScript Library - ZoomScatter Chart Copyright FusionCharts Technologies LLP License Information at @version 3.11.0 */ FusionCharts.register("module",["private","modules.renderer.js-zoomscatter",function(){function O(){}var D=this,x=D.hcLib,V=x.parseTooltext,M=x.Raphael,W=x.addEvent,ba=x.removeEvent,P=D.window,X=P.MouseEvent,E=P.document,F=x.BLANKSTRING,y=x.pluck,C=x.pluckNumber,ca=x.getFirstValue,da=x.toRaphaelColor,ea=x.hasSVG,Y=x.isIE,Q=x.getFirstColor,N=x.hasTouch,R="rgba(192,192,192,"+(Y?.002:1E-6)+")",A=Math,K=A.round,z=A.min,B=A.max,S=A.abs,H=A.cos,I=A.sin,Z=A.floor,fa=2*Math.PI,ga=x.getMouseCoordinate,ha= x.POSITION_BOTTOM,J=x.chartAPI,T=x.HUNDREDSTRING,A=!/fusioncharts\.com$/i.test(P.location.hostname),$,aa,L=function(c,b){var a=ga(b.linkedItems.container,c),d=a.chartX,e=a.chartY,f=b.config,k=f.canvasLeft,h=f.canvasTop,g=f.canvasLeft+f.canvasWidth,f=f.canvasHeight+f.canvasTop;a.insideCanvas=!1;a.originalEvent=c;d>k&&dh&&eZoom in
Or double-click on plot to zoom-in");b.btnSelectZoomToolText=y(c.btnselectzoomtooltext,"Select a region to zoom-in
Click to enable pan mode.");b.btnPanToolText=y(c.btnpantooltext,"Drag to move across chart
Click to enable select-zoom mode.")},_setAxisLimits:function(){var c=this.jsonData,b=this.components.xAxis,a=y(c.chart.xaxislabelmode,"categories"),c=c.categories&& c.categories[0],c=(c&&c.category||[]).slice(),d,e=Infinity,f=-Infinity,k;if("auto"===a||0===c.length){J.mscartesian._setAxisLimits.call(this);a=b[0].getLimit();b[0].setAxisData({hasCategory:0});b[0].resetCategoryAxisComponents();for(d=0;df&&(f=k);if(f>a.max||ex-u-v&&(l=a.canvasWidth-U,g=u+v,u=a.canvasMarginLeft=l*u/g,v=a.canvasMarginRight=l*v/g);u=u>a.canvasLeft?u-a.canvasLeft:0;this._allocateSpace({left:u,right:v>x-a.canvasRight?v+a.canvasRight-x:0});b=h===ha?.6*a.canvasHeight:.6*a.canvasWidth;this._manageChartMenuBar(b);b=.2*a.availableHeight;this._allocateSpace(this._getSumValueSpace(b));b=.3*a.availableHeight;a.origCanvasHeight=a.canvasHeight;a.canvasBottom= a.canvasTop+a.canvasHeight;a.origCanvasBottom=a.canvasBottom;a.origCanvasTop=a.canvasTop;a.realtimeEnabled&&(p?this._allocateSpace(this._realTimeValuePositioning(b)):this._hideRealTimeValue());b=.6*a.availableHeight;a.xAxisSpaceAllocation=h=e&&e.placeAxis(b);e&&this._allocateSpace(h);this._getDSspace&&this._allocateSpace(this._getDSspace(.4*a.canvasWidth));b=.3*a.availableHeight;this._manageScrollerPosition&&this._manageScrollerPosition(b);a.canvasHeight-2*qz-s-w&&(B=!0,l=a.canvasHeight-d,g=s+w,s=a.canvasMarginTop=l*s/g,w=a.canvasMarginBottom=l*w/g);e=s>a.canvasTop?s-a.canvasTop:0;n=w>z-a.canvasBottom?w+a.canvasBottom-z:0;this._allocateSpace({top:e,bottom:n});B&&(g=D+F,B=a.canvasHeight,B>d&&(l=B-d,e=l*D/g,n=l*F/g),this._allocateSpace({top:e,bottom:n}));a.actualCanvasMarginTop=e;a.actualCanvasMarginLeft=u},_createToolBox:function(){var c,b,a,d,e,f,k,h,g,l=this,m=l.config;d=l.components;c=d.chartMenuBar; g=m.showToolBarButtonToolText;var n=m.stepZoom;c&&c.drawn||(J.mscartesian._createToolBox.call(l),c=d.tb,b=c.graphics||(c.graphics={}),a=c.getAPIInstances(c.ALIGNMENT_HORIZONTAL),a=a.Symbol,d=d.chartMenuBar.componentGroups[0],e=b.zoomInButton=(new a("zoomInIcon",void 0,c.idCount++,c.pId)).attachEventHandlers({click:function(){l.zoom(n)},tooltext:g&&m.btnZoomInToolText||F}),f=b.zoomOutButton=(new a("zoomOutIcon",void 0,c.idCount++,c.pId)).attachEventHandlers({click:function(){var a=m.viewPortHistory; 1a?c:a,w=b>d?b:d,u=a-c,v=b-d,g=g?0u&&0u&&0>v?"sw-resize":0v?"se-resize":"default":"default",p=pm?m:p,r=rq?q:r,u=c===a&&b===d?0:(s>m?m:sq?q:wh?0:h;a=0>a?0:a;l=1>l?1:l;b=1>b?1:b;d-=d/b;e-=e/l;return{x:h>d?d:h,y:a>e?e:a,scaleX:b,scaleY:l}},getOriginalPositions:function(c,b,a,d){var e=this.config,f=e.viewPortConfig,k=f.scaleX,h=f.scaleY,g=f.x,f=f.y,l=z(c,a);c=B(c,a);a=z(b,d);b=B(b,d);c=c>e.canvasWidth?e.canvasWidth:c;b=b>e.canvasHeight?e.canvasHeight:b;l=0>l?0:l; a=0>a?0:a;return[g+l/k,f+a/h,(c-l)/k,(b-a)/h]},zoomSelection:function(c,b,a,d){var e=this.config;a&&d&&(a=Math.abs(e.canvasWidth/a),d=Math.abs(e.canvasHeight/d),this.updateVisual(c,b,a,d))},toogleDragPan:function(c){var b=this.config,a=b.status;c&&(b.status="zoom"===a?"pan":"zoom",D.raiseEvent("zoomModeChanged",{panModeActive:b.status},this.chartInstance,[this.chartInstance.id]));this.updateButtonVisual()},updateManager:function(c){var b,a=this.components.dataset,d=a.length;for(b=0;bg&&(a.chartX=z(b,g));ch&&(a.chartY=z(c,h))},p={start:function(a){g=e.viewPortConfig;N=a.touches?!0:!1;b[0]=L(a,d);d.updateSelectionBox(0,0,0,0);N&&(l=!1,c=a.touches.length, 2===c&&(l=!0,t.x=g.x,t.y=g.y,t.scaleX=g.scaleX,t.scaleY=g.scaleY,b[0]=L(a.touches.item(0),d),b[1]=L(a.touches.item(1),d)));e.isDragging=!1;"pan"===e.status&&(e.panStartX=g.x,e.panStartY=g.y,b[0].insideCanvas&&f.trackerGroup.attr({cursor:"move"}))},on:function(c){var h,m,n,q;n=e.panStartX;var p=e.panStartY;h=g.scaleX;m=g.scaleY;var z=k.xAxis[0],x=k.yAxis[0];N=c.touches?!0:!1;a[0]=L(c,d);a[0].insideCanvas?"pan"===e.status&&f.trackerGroup.attr({cursor:"move"}):f.trackerGroup.attr({cursor:"default"}); N&&c&&(q=c.touches.length,2===q?(l=!0,a[0]=L(c.touches.item(0),d),a[1]=L(c.touches.item(1),d)):l=!1);!e.isDragging&&(!N||2h?h:0>n?0:n,g.y=p>m?m:0>p?0:p,d.updateManager(),z.draw(),x.draw())},end:function(c){var g=L(c,d),h=e.canvasLeft,k=e.canvasTop,p;p=e.canvasWidth/4;var z=e.canvasHeight/4,g=isNaN(g.chartX)||isNaN(g.chartY)?a[0]||b[0]:g;if(e.isDragging){if(l){if(b[0].insideCanvas||b[1].insideCanvas)c=d._getTouchViewPort(b,a,t),d.updateVisual(c.x,c.y,c.scaleX,c.scaleY);l=!1}else"zoom"===e.status&&(c=g,p=b[0],q(p),q(c),k=d.getOriginalPositions(p.chartX-h,p.chartY-k,c.chartX-h,c.chartY-k))&&(c.pointValue=d.getValue({x:c.chartX, y:c.chartY}),D.raiseEvent("selectionEnd",{chartX:c.chartX,chartY:c.chartY,pageX:c.pageX,pageY:c.pageY,selectionTop:c.chartX+e.canvasLeft,selectionLeft:c.chartY+e.canvasTop,selectionWidth:Math.abs(c.chartX-p.chartX),selectionHeight:Math.abs(c.chartY-p.chartY),startXVAlue:p.pointValue.x,startYVAlue:p.pointValue.y,endXValue:c.pointValue.x,endYValue:c.pointValue.y},d.chartInstance,[d.chartInstance.id]),p.chartX!==c.chartX&&p.chartY!==c.chartY&&d.zoomSelection(k[0],k[1],k[2],k[3]),d.updateSelectionBox(0, 0,0,0));e.isDragging=!1;c=a[0]||b[0];c.data=d;d.searchMouseMove(c)}else g.insideCanvas&&(m+=1,setTimeout(function(){m=0;n=void 0},500),2===m?(c&&c.touches?!0:!1)===n&&(h=g.chartX-h,k=g.chartY-k,k=d.getOriginalPositions(h-p,k-z,h+p,k+z),d.zoomSelection(k[0],k[1],k[2],k[3]),c.preventDefault()):n=c&&c.touches?!0:!1);f.trackerGroup.attr({cursor:"default"})}};h.push(W(d.linkedItems.container,"pointerdrag",function(a){p[a.state](a.originalEvent)}))},_drawDataset:function(){var c,b=this.components.dataset, a=b.length;for(c=0;cq&&(n.x=c=z(c,l-l/q),n.scaleX=a=q);d>q&&(n.y=b=z(b,t-t/q),n.scaleY=d=q);if(e)this.updateManager(e);else for(1=p.scaleX||d>=p.scaleY?(r.push({scaleX:a,scaleY:d,x:c,y:b}),s=["zoomed","zoomIn"]):(r.pop(),p=r.slice(-1)[0],n.x=p.x,n.y=p.y,n.scaleX=p.scaleX,n.scaleY=p.scaleY,s=["zoomed","zoomOut"])):(1b?b=0:1f?f:e;c=c>d?d:c;b=b+k/2-e/2;a=a+h/2-c/2;b=0>b?0:b;a=0>a?0:a;b=b+e>f?f-e:b;a=a+c>d?d-c:a;this.zoomSelection(b,a,e,c)},updateButtonVisual:function(){var c,b,a,d;a=this.config;var e=this.components.tb.graphics; c=a.status;var f;1>=a.viewPortHistory.length?(a=["zoomOutButton","resetButton","togglePanButton"],d=["zoomInButton"],f="toggleZoomInButton"):(d=["resetButton","zoomOutButton","zoomInButton"],a=[],"zoom"===c?(d.push("togglePanButton"),f="toggleZoomInButton"):"pan"===c&&(d.push("toggleZoomInButton"),f="togglePanButton"));for(c=0;ch?(e.strokeStyle=v.fillStyle,e.lineWidth=.5):(e.fillStyle=v.fillStyle,e.strokeStyle=v.strokeStyle,e.lineWidth=v.borderWidth),n.push(b));g._batchDrawindex=this.JSONData.data&&this.JSONData.data.length-1||0;this._drawGridArrBatch(n,c,!g.animation.enabled)}else c&&c()},_drawGridArrBatch:function(c, b,a){var d,e,f,k,h,g,l,m,n,t,q,p,r,s,w,u,v=this;g=v.config;var x=v.chart.components;u=v.config;var z=u.drawLine;m=u.plotCosmetics;k=u._batchDrawindex;f=v.components.data;h=k-u.chunkSize;var y=x.yAxis[0],B=u.zoomedRadius,x=x.xAxis[0].getPVR(),y=y.getPVR(),C=g.showRegressionLine,A=u._store||[],D=m.lineWidth||1>B;C&&(s=g.regLineColor,w=g.regressionLineThickness);for(m=0;m=h?0:h;k>=h;--k)if((q=f[k]&&f[k].config.setValue)&&!isNaN(q.x)&& !isNaN(q.y))for(m=0;md.xMaxWPad||q.yd.yMaxWPad||(n=d.ctx,t=d.lineCtx,d=K((q.x-p)*x),e=K((r-q.y)*y),(l=A[d])||(l=A[d]={}),l[e]))||(l[e]=!0,z&&(l=0<=k-1&&f[k-1].config.setValue)&&(t.moveTo(K((l.x-p)*x),K((r-l.y)*y)),t.lineTo(d,e)),1>B?(n.moveTo(d,e),n.lineTo(d+1,e)):(n.moveTo(d+B,e),n.arc(d,e,B,0,fa)));for(m=0;m=Math.pow((a.x-c.x)/b.xLimit,2)+Math.pow((a.y-c.y)/b.yLimit,2)?!0:!1}},_compair2closest:function(c,b){if(c){if(b)return b.i>c.i?b:c}else return b;return c},_searchBtwnLimit:function(c,b,a,d){var e,f,k,h;k=a?"x":"y";var g=a?c.x1:c.y1,l=a?c.x2:c.y2;if(b)return e=b.point1?b.point1[k]: l,f=b.point2?b.point2[k]:l,k=b.point3?b.point3[k]:l,d(b.point1)&&(h=this._compair2closest(h,b.point1)),e>=g&&b.left&&(h=this._compair2closest(h,this._searchBtwnLimit(c,b.left,!a,d))),e<=l&&b.middle1&&(d(b.point2)&&(h=this._compair2closest(h,b.point2)),f>=g&&(h=this._compair2closest(h,this._searchBtwnLimit(c,b.middle1,!a,d))),f<=l&&b.middle2&&(d(b.point3)&&(h=this._compair2closest(h,b.point3)),k>=g&&(h=this._compair2closest(h,this._searchBtwnLimit(c,b.middle2,!a,d))),k<=l&&b.right&&(h=this._compair2closest(h, this._searchBtwnLimit(c,b.right,!a,d))))),h},_buildKdTree:function(c,b){var a,d,e;if(a=c&&c.length)return c.sort(b?$:aa),7