/*! grafica.js (0.1.0): a library for p5.js. Author: Javier GraciĆ” Carpio, license: LGPL-3.0, 2015-04-12 */ function GPoint(){var a,b,c;if(3===arguments.length)a=arguments[0],b=arguments[1],c=arguments[2];else if(2===arguments.length&&arguments[0]instanceof p5.Vector)a=arguments[0].x,b=arguments[0].y,c=arguments[1];else if(2===arguments.length)a=arguments[0],b=arguments[1],c="";else if(1===arguments.length&&arguments[0]instanceof GPoint)a=arguments[0].getX(),b=arguments[0].getY(),c=arguments[0].getLabel();else if(1===arguments.length&&arguments[0]instanceof p5.Vector)a=arguments[0].x,b=arguments[0].y,c="";else{if(0!==arguments.length)throw new Error("GPoint constructor: signature not supported");a=0,b=0,c=""}this.x=a,this.y=b,this.label=c,this.valid=this.isValidNumber(this.x)&&this.isValidNumber(this.y)}function GTitle(a,b){this.parent=a,this.dim=b.slice(),this.relativePos=.5,this.plotPos=this.relativePos*this.dim[0],this.offset=10,this.text="",this.textAlignment=this.parent.CENTER,this.fontName="Helvetica",this.fontColor=this.parent.color(100),this.fontStyle=this.parent.BOLD,this.fontSize=13}function GAxisLabel(a,b,c){this.parent=a,this.type=b===this.parent.BOTTOM||b===this.parent.TOP||b===this.parent.LEFT||b===this.parent.RIGHT?b:this.parent.BOTTOM,this.dim=c.slice(),this.relativePos=.5,this.plotPos=this.type===this.parent.BOTTOM||this.type===this.parent.TOP?this.relativePos*this.dim[0]:-this.relativePos*this.dim[1],this.offset=35,this.rotate=this.type===this.parent.BOTTOM||this.type===this.parent.TOP?!1:!0,this.text="",this.textAlignment=this.parent.CENTER,this.fontName="Helvetica",this.fontColor=this.parent.color(0),this.fontSize=13}function GAxis(a,b,c,d,e){this.parent=a,this.type=b===this.parent.BOTTOM||b===this.parent.TOP||b===this.parent.LEFT||b===this.parent.RIGHT?b:this.parent.BOTTOM,this.dim=c.slice(),this.lim=d.slice(),this.log=e,this.log&&(this.lim[0]<=0||this.lim[1]<=0)&&(console.log("The limits are negative. This is not allowed in logarithmic scale."),console.log("Will set them to (0.1, 10)"),this.lim[1]>this.lim[0]?(this.lim[0]=.1,this.lim[1]=10):(this.lim[0]=10,this.lim[1]=.1)),this.offset=5,this.lineColor=this.parent.color(0),this.lineWidth=1,this.nTicks=5,this.ticksSeparation=-1,this.ticks=[],this.plotTicks=[],this.ticksInside=[],this.tickLabels=[],this.fixedTicks=!1,this.tickLength=3,this.smallTickLength=2,this.expTickLabels=!1,this.rotateTickLabels=this.type===this.parent.BOTTOM||this.type===this.parent.TOP?!1:!0,this.drawTickLabels=this.type===this.parent.BOTTOM||this.type===this.parent.LEFT?!0:!1,this.tickLabelOffset=7,this.ticksPrecision=void 0,this.lab=new GAxisLabel(this.parent,this.type,this.dim),this.drawAxisLabel=!0,this.fontName="Helvetica",this.fontColor=this.parent.color(0),this.fontSize=11,this.updateTicks(),this.updatePlotTicks(),this.updateTicksInside(),this.updateTickLabels()}function GHistogram(a,b,c,d){this.parent=a,this.type=b===GPlot.VERTICAL||b===GPlot.HORIZONTAL?b:GPlot.VERTICAL,this.dim=c.slice(),this.plotPoints=[];for(var e=0;e0&&b>0&&(this.dim[0]=a,this.dim[1]=b,this.plotPos=this.relativePos*this.dim[0])},GTitle.prototype.setRelativePos=function(a){this.relativePos=a,this.plotPos=this.relativePos*this.dim[0]},GTitle.prototype.setOffset=function(a){this.offset=a},GTitle.prototype.setText=function(a){this.text=a},GTitle.prototype.setTextAlignment=function(a){(a===this.parent.CENTER||a===this.parent.LEFT||a===this.parent.RIGHT)&&(this.textAlignment=a)},GTitle.prototype.setFontName=function(a){this.fontName=a},GTitle.prototype.setFontColor=function(a){this.fontColor=a},GTitle.prototype.setFontStyle=function(a){this.fontStyle=a},GTitle.prototype.setFontSize=function(a){a>0&&(this.fontSize=a)},GTitle.prototype.setFontProperties=function(a,b,c){c>0&&(this.fontName=a,this.fontColor=b,this.fontSize=c)},GAxisLabel.prototype.draw=function(){switch(this.type){case this.parent.BOTTOM:this.drawAsXLabel();break;case this.parent.LEFT:this.drawAsYLabel();break;case this.parent.TOP:this.drawAsTopLabel();break;case this.parent.RIGHT:this.drawAsRightLabel()}},GAxisLabel.prototype.drawAsXLabel=function(){this.parent.push(),this.parent.textFont(this.fontName),this.parent.textSize(this.fontSize),this.parent.fill(this.fontColor),this.parent.noStroke(),this.rotate?(this.parent.textAlign(this.parent.RIGHT,this.parent.CENTER),this.parent.translate(this.plotPos,this.offset),this.parent.rotate(-.5*Math.PI),this.parent.text(this.text,0,0)):(this.parent.textAlign(this.textAlignment,this.parent.TOP),this.parent.text(this.text,this.plotPos,this.offset)),this.parent.pop()},GAxisLabel.prototype.drawAsYLabel=function(){this.parent.push(),this.parent.textFont(this.fontName),this.parent.textSize(this.fontSize),this.parent.fill(this.fontColor),this.parent.noStroke(),this.rotate?(this.parent.textAlign(this.textAlignment,this.parent.BOTTOM),this.parent.translate(-this.offset,this.plotPos),this.parent.rotate(-.5*Math.PI),this.parent.text(this.text,0,0)):(this.parent.textAlign(this.parent.RIGHT,this.parent.CENTER),this.parent.text(this.text,-this.offset,this.plotPos)),this.parent.pop()},GAxisLabel.prototype.drawAsTopLabel=function(){this.parent.push(),this.parent.textFont(this.fontName),this.parent.textSize(this.fontSize),this.parent.fill(this.fontColor),this.parent.noStroke(),this.rotate?(this.parent.textAlign(this.parent.LEFT,this.parent.CENTER),this.parent.translate(this.plotPos,-this.offset-this.dim[1]),this.parent.rotate(-.5*Math.PI),this.parent.text(this.text,0,0)):(this.parent.textAlign(this.textAlignment,this.parent.BOTTOM),this.parent.text(this.text,this.plotPos,-this.offset-this.dim[1])),this.parent.pop()},GAxisLabel.prototype.drawAsRightLabel=function(){this.parent.push(),this.parent.textFont(this.fontName),this.parent.textSize(this.fontSize),this.parent.fill(this.fontColor),this.parent.noStroke(),this.rotate?(this.parent.textAlign(this.textAlignment,this.parent.TOP),this.parent.translate(this.offset+this.dim[0],this.plotPos),this.parent.rotate(-.5*Math.PI),this.parent.text(this.text,0,0)):(this.parent.textAlign(this.parent.LEFT,this.parent.CENTER),this.parent.text(this.text,this.offset+this.dim[0],this.plotPos)),this.parent.pop()},GAxisLabel.prototype.setDim=function(){var a,b;if(2===arguments.length)a=arguments[0],b=arguments[1];else{if(1!==arguments.length)throw new Error("GAxisLabel.setDim(): signature not supported");a=arguments[0][0],b=arguments[0][1]}a>0&&b>0&&(this.dim[0]=a,this.dim[1]=b,this.plotPos=this.type===this.parent.BOTTOM||this.type===this.parent.TOP?this.relativePos*this.dim[0]:-this.relativePos*this.dim[1])},GAxisLabel.prototype.setRelativePos=function(a){this.relativePos=a,this.plotPos=this.type===this.parent.BOTTOM||this.type===this.parent.TOP?this.relativePos*this.dim[0]:-this.relativePos*this.dim[1]},GAxisLabel.prototype.setOffset=function(a){this.offset=a},GAxisLabel.prototype.setRotate=function(a){this.rotate=a},GAxisLabel.prototype.setText=function(a){this.text=a},GAxisLabel.prototype.setTextAlignment=function(a){(a===this.parent.CENTER||a===this.parent.LEFT||a===this.parent.RIGHT)&&(this.textAlignment=a)},GAxisLabel.prototype.setFontName=function(a){this.fontName=a},GAxisLabel.prototype.setFontColor=function(a){this.fontColor=a},GAxisLabel.prototype.setFontSize=function(a){a>0&&(this.fontSize=a)},GAxisLabel.prototype.setFontProperties=function(a,b,c){c>0&&(this.fontName=a,this.fontColor=b,this.fontSize=c)},GAxis.prototype.obtainSigDigits=function(a){return Math.round(-Math.log(.5*Math.abs(a))/Math.LN10)},GAxis.prototype.roundPlus=function(a,b){return a=Math.round(a*Math.pow(10,b))/Math.pow(10,b),0>=b&&(a=Math.round(a)),a},GAxis.prototype.adaptSize=function(a,b){bthis.lim[0]?(a=Math.floor(Math.log(this.lim[0])/Math.LN10),b=Math.ceil(Math.log(this.lim[1])/Math.LN10)):(a=Math.floor(Math.log(this.lim[1])/Math.LN10),b=Math.ceil(Math.log(this.lim[0])/Math.LN10));var c=9*(b-a)+1;this.adaptSize(this.ticks,c);for(var d=a;b>d;d++)for(var e=this.roundPlus(Math.exp(d*Math.LN10),-d),f=0;9>f;f++)this.ticks[9*(d-a)+f]=(f+1)*e;this.ticks[this.ticks.length-1]=this.roundPlus(Math.exp(b*Math.LN10),-d),this.lim[1]0){for(a=this.lim[1]>this.lim[0]?this.ticksSeparation:-this.ticksSeparation,c=this.obtainSigDigits(a);this.roundPlus(a,c)-a!==0;)c++;b=Math.floor((this.lim[1]-this.lim[0])/a)}else this.nTicks>0&&(a=(this.lim[1]-this.lim[0])/this.nTicks,c=this.obtainSigDigits(a),a=this.roundPlus(a,c),(0===a||Math.abs(a)>Math.abs(this.lim[1]-this.lim[0]))&&(c++,a=this.roundPlus((this.lim[1]-this.lim[0])/this.nTicks,c)),b=Math.floor((this.lim[1]-this.lim[0])/a));if(b>0){var d=this.lim[0]+(this.lim[1]-this.lim[0]-b*a)/2;for(d=this.roundPlus(d-2*a,c);(this.lim[1]-d)*(this.lim[0]-d)>0;)d=this.roundPlus(d+a,c);var e=Math.floor(Math.abs((this.lim[1]-d)/a))+1;this.adaptSize(this.ticks,e),this.ticks[0]=d;for(var f=1;e>f;f++)this.ticks[f]=this.roundPlus(this.ticks[f-1]+a,c);this.ticksPrecision=c}else this.ticks=[]},GAxis.prototype.updatePlotTicks=function(){var a,b,c=this.ticks.length;if(this.adaptSize(this.plotTicks,c),this.log)for(a=this.type===this.parent.BOTTOM||this.type===this.parent.TOP?this.dim[0]/Math.log(this.lim[1]/this.lim[0]):-this.dim[1]/Math.log(this.lim[1]/this.lim[0]),b=0;c>b;b++)this.plotTicks[b]=Math.log(this.ticks[b]/this.lim[0])*a;else for(a=this.type===this.parent.BOTTOM||this.type===this.parent.TOP?this.dim[0]/(this.lim[1]-this.lim[0]):-this.dim[1]/(this.lim[1]-this.lim[0]),b=0;c>b;b++)this.plotTicks[b]=(this.ticks[b]-this.lim[0])*a},GAxis.prototype.updateTicksInside=function(){var a,b=this.ticks.length;if(this.adaptSize(this.ticksInside,b),this.type===this.parent.BOTTOM||this.type===this.parent.TOP)for(a=0;b>a;a++)this.ticksInside[a]=this.plotTicks[a]>=0&&this.plotTicks[a]<=this.dim[0];else for(a=0;b>a;a++)this.ticksInside[a]=-this.plotTicks[a]>=0&&-this.plotTicks[a]<=this.dim[1]},GAxis.prototype.updateTickLabels=function(){var a,b,c,d,e=this.ticks.length;if(this.adaptSize(this.tickLabels,e),this.log)for(d=0;e>d;d++)a=this.ticks[d],a>0?(b=Math.log(a)/Math.LN10,c=Math.abs(b-Math.round(b))<1e-4,c?(b=Math.round(b),this.tickLabels[d]=this.expTickLabels?"1e"+b:b>-3.1&&3.1>b?b>=0?""+Math.round(a):""+a:"1e"+b):this.tickLabels[d]=""):this.tickLabels[d]="";else for(d=0;e>d;d++)a=this.ticks[d],this.tickLabels[d]=a%1===0?""+Math.round(a):"undefined"!=typeof this.ticksPrecision&&this.ticksPrecision>=0?""+parseFloat(a).toFixed(this.ticksPrecision):""+a},GAxis.prototype.moveLim=function(a){if(a[1]!==a[0])if(this.log&&(a[0]<=0||a[1]<=0))console.log("The limits are negative. This is not allowed in logarithmic scale.");else{if(this.lim[0]=a[0],this.lim[1]=a[1],!this.fixedTicks){var b=this.ticks.length;if(this.log)this.obtainLogarithmicTicks();else if(b>0){var c=0,d=0;if(this.ticksSeparation>0)for(c=this.lim[1]>this.lim[0]?this.ticksSeparation:-this.ticksSeparation,d=this.obtainSigDigits(c);this.roundPlus(c,d)-c!==0;)d++;else c=1===b?this.lim[1]-this.lim[0]:this.ticks[1]-this.ticks[0],d=this.obtainSigDigits(c),c=this.roundPlus(c,d),(0===c||Math.abs(c)>Math.abs(this.lim[1]-this.lim[0]))&&(d++,c=1===b?this.lim[1]-this.lim[0]:this.ticks[1]-this.ticks[0],c=this.roundPlus(c,d)),c=this.lim[1]>this.lim[0]?Math.abs(c):-Math.abs(c);var e=this.ticks[0]+c*Math.ceil((this.lim[0]-this.ticks[0])/c);e=this.roundPlus(e,d),(this.lim[1]-e)*(this.lim[0]-e)>0&&(e=this.ticks[0]+c*Math.floor((this.lim[0]-this.ticks[0])/c),e=this.roundPlus(e,d)),b=Math.floor(Math.abs((this.lim[1]-e)/c))+1,this.adaptSize(this.ticks,b),this.ticks[0]=e;for(var f=1;b>f;f++)this.ticks[f]=this.roundPlus(this.ticks[f-1]+c,d);this.ticksPrecision!==d&&console.log("There is a problem in the axis ticks precision calculation")}this.updateTickLabels()}this.updatePlotTicks(),this.updateTicksInside()}},GAxis.prototype.draw=function(){switch(this.type){case this.parent.BOTTOM:this.drawAsXAxis();break;case this.parent.LEFT:this.drawAsYAxis();break;case this.parent.TOP:this.drawAsTopAxis();break;case this.parent.RIGHT:this.drawAsRightAxis()}this.drawAxisLabel&&this.lab.draw()},GAxis.prototype.drawAsXAxis=function(){var a;for(this.parent.push(),this.parent.stroke(this.lineColor),this.parent.strokeWeight(this.lineWidth),this.parent.strokeCap(this.parent.SQUARE),this.parent.line(0,this.offset,this.dim[0],this.offset),a=0;a0&&b>0&&(this.dim[0]=a,this.dim[1]=b,this.updatePlotTicks(),this.lab.setDim(this.dim))},GAxis.prototype.setLim=function(a){a[1]!==a[0]&&(this.log&&(a[0]<=0||a[1]<=0)?console.log("One of the limits is negative. This is not allowed in logarithmic scale."):(this.lim[0]=a[0],this.lim[1]=a[1],this.fixedTicks||(this.updateTicks(),this.updateTickLabels()),this.updatePlotTicks(),this.updateTicksInside()))},GAxis.prototype.setLimAndLog=function(a,b){a[1]!==a[0]&&(b&&(a[0]<=0||a[1]<=0)?console.log("One of the limits is negative. This is not allowed in logarithmic scale."):(this.lim[0]=a[0],this.lim[1]=a[1],this.log=b,this.fixedTicks||(this.updateTicks(),this.updateTickLabels()),this.updatePlotTicks(),this.updateTicksInside()))},GAxis.prototype.setLog=function(a){a!==this.log&&(this.log=a,this.log&&(this.lim[0]<=0||this.lim[1]<=0)&&(console.log("The limits are negative. This is not allowed in logarithmic scale."),console.log("Will set them to (0.1, 10)"),this.lim[1]>this.lim[0]?(this.lim[0]=.1,this.lim[1]=10):(this.lim[0]=10,this.lim[1]=.1)),this.fixedTicks||(this.updateTicks(),this.updateTickLabels()),this.updatePlotTicks(),this.updateTicksInside())},GAxis.prototype.setOffset=function(a){this.offset=a},GAxis.prototype.setLineColor=function(a){this.lineColor=a},GAxis.prototype.setLineWidth=function(a){a>0&&(this.lineWidth=a)},GAxis.prototype.setNTicks=function(a){a>=0&&(this.nTicks=a,this.ticksSeparation=-1,this.log||(this.fixedTicks=!1,this.updateTicks(),this.updatePlotTicks(),this.updateTicksInside(),this.updateTickLabels()))},GAxis.prototype.setTicksSeparation=function(a){this.ticksSeparation=a,this.log||(this.fixedTicks=!1,this.updateTicks(),this.updatePlotTicks(),this.updateTicksInside(),this.updateTickLabels())},GAxis.prototype.setTicks=function(a){var b=a.length;this.adaptSize(this.ticks,b);for(var c=0;b>c;c++)this.ticks[c]=a[c];this.fixedTicks=!0,this.ticksPrecision=void 0,this.updatePlotTicks(),this.updateTicksInside(),this.updateTickLabels()},GAxis.prototype.setTickLabels=function(a){if(a.length===this.tickLabels.length){for(var b=0;b0&&(this.fontSize=a)},GAxis.prototype.setFontProperties=function(a,b,c){c>0&&(this.fontName=a,this.fontColor=b,this.fontSize=c)},GAxis.prototype.setAllFontProperties=function(a,b,c){this.setFontProperties(a,b,c),this.lab.setFontProperties(a,b,c)},GAxis.prototype.getTicks=function(){if(this.fixedTicks)return this.ticks.slice();for(var a=[],b=0,c=0;cb&&(this.differences.splice(b,Number.MAX_VALUE),this.leftSides.splice(b,Number.MAX_VALUE),this.rightSides.splice(b,Number.MAX_VALUE)),1===b)this.leftSides[0]=this.type===GPlot.VERTICAL?.2*this.dim[0]:.2*this.dim[1],this.rightSides[0]=this.leftSides[0];else if(b>1){for(a=0;b-1>a;a++)if(this.plotPoints[a].isValid()&&this.plotPoints[a+1].isValid()){var c,d=this.separations[a%this.separations.length];c=this.type===GPlot.VERTICAL?this.plotPoints[a+1].getX()-this.plotPoints[a].getX():this.plotPoints[a+1].getY()-this.plotPoints[a].getY(),this.differences[a]=c>0?(c-d)/2:(c+d)/2}else this.differences[a]=0;for(this.leftSides[0]=this.differences[0],this.rightSides[0]=this.differences[0],a=1;b-1>a;a++)this.leftSides[a]=this.differences[a-1],this.rightSides[a]=this.differences[a];this.leftSides[b-1]=this.differences[b-2],this.rightSides[b-1]=this.differences[b-2]}},GHistogram.prototype.draw=function(a){if(this.visible){var b=0;a.isValid()&&(b=this.type===GPlot.VERTICAL?a.getY():a.getX());var c,d,e,f,g,h,i=this.plotPoints.length;this.parent.push(),this.parent.rectMode(this.parent.CORNERS),this.parent.strokeCap(this.parent.SQUARE);for(var j=0;i>j;j++)c=this.plotPoints[j],c.isValid()&&(this.type===GPlot.VERTICAL?(d=c.getX()-this.leftSides[j],e=c.getX()+this.rightSides[j],f=c.getY(),g=b):(d=b,e=c.getX(),f=c.getY()-this.leftSides[j],g=c.getY()+this.rightSides[j]),0>d?d=0:d>this.dim[0]&&(d=this.dim[0]),0>-f?f=0:-f>this.dim[1]&&(f=-this.dim[1]),0>e?e=0:e>this.dim[0]&&(e=this.dim[0]),0>-g?g=0:-g>this.dim[1]&&(g=-this.dim[1]),h=this.lineWidths[j%this.lineWidths.length],this.parent.fill(this.bgColors[j%this.bgColors.length]),this.parent.stroke(this.lineColors[j%this.lineColors.length]),this.parent.strokeWeight(h),Math.abs(e-d)>2*h&&Math.abs(g-f)>2*h?this.parent.rect(d,f,e,g):(this.type===GPlot.VERTICAL&&e!==d&&(f!==g||0!==f&&f!==-this.dim[1])||this.type===GPlot.HORIZONTAL&&g!==f&&(d!==e||0!==d&&d!==this.dim[0]))&&(this.parent.rect(d,f,e,g),this.parent.line(d,f,d,g),this.parent.line(e,f,e,g),this.parent.line(d,f,e,f),this.parent.line(d,g,e,g)));this.parent.pop(),this.drawLabels&&this.drawHistLabels()}},GHistogram.prototype.drawHistLabels=function(){var a,b,c=this.plotPoints.length,d=.5*Math.PI;if(this.parent.push(),this.parent.textFont(this.fontName),this.parent.textSize(this.fontSize),this.parent.fill(this.fontColor),this.parent.noStroke(),this.type===GPlot.VERTICAL)if(this.rotateLabels)for(this.parent.textAlign(this.parent.RIGHT,this.parent.CENTER),b=0;c>b;b++)a=this.plotPoints[b],a.isValid()&&a.getX()>=0&&a.getX()<=this.dim[0]&&(this.parent.push(),this.parent.translate(a.getX(),this.labelsOffset),this.parent.rotate(-d),this.parent.text(a.getLabel(),0,0),this.parent.pop());else for(this.parent.textAlign(this.parent.CENTER,this.parent.TOP),b=0;c>b;b++)a=this.plotPoints[b],a.isValid()&&a.getX()>=0&&a.getX()<=this.dim[0]&&this.parent.text(a.getLabel(),a.getX(),this.labelsOffset);else if(this.rotateLabels)for(this.parent.textAlign(this.parent.CENTER,this.parent.BOTTOM),b=0;c>b;b++)a=this.plotPoints[b],a.isValid()&&-a.getY()>=0&&-a.getY()<=this.dim[1]&&(this.parent.push(),this.parent.translate(-this.labelsOffset,a.getY()),this.parent.rotate(-d),this.parent.text(a.getLabel(),0,0),this.parent.pop());else for(this.parent.textAlign(this.parent.RIGHT,this.parent.CENTER),b=0;c>b;b++)a=this.plotPoints[b],a.isValid()&&-a.getY()>=0&&-a.getY()<=this.dim[1]&&this.parent.text(a.getLabel(),-this.labelsOffset,a.getY());this.parent.pop()},GHistogram.prototype.setType=function(a){a===this.type||a!==GPlot.VERTICAL&&a!==GPlot.HORIZONTAL||(this.type=a,this.updateArrays())},GHistogram.prototype.setDim=function(){var a,b;if(2===arguments.length)a=arguments[0],b=arguments[1];else{if(1!==arguments.length)throw new Error("GHistogram.setDim(): signature not supported"); a=arguments[0][0],b=arguments[0][1]}a>0&&b>0&&(this.dim[0]=a,this.dim[1]=b,this.updateArrays())},GHistogram.prototype.setPlotPoints=function(a){var b,c=a.length;if(this.plotPoints.length===c)for(b=0;c>b;b++)this.plotPoints[b].set(a[b]);else if(this.plotPoints.length>c){for(b=0;c>b;b++)this.plotPoints[b].set(a[b]);this.plotPoints.splice(c,Number.MAX_VALUE)}else{for(b=0;bb;b++)this.plotPoints[b]=new GPoint(a[b])}this.updateArrays()},GHistogram.prototype.setPlotPoint=function(a,b){if(a0&&(this.fontSize=a)},GHistogram.prototype.setFontProperties=function(a,b,c){c>0&&(this.fontName=a,this.fontColor=b,this.fontSize=c)},GLayer.prototype.isValidNumber=function(a){return!isNaN(a)&&isFinite(a)},GLayer.prototype.isId=function(a){return this.id===a},GLayer.prototype.valueToXPlot=function(a){return this.xLog?this.dim[0]*Math.log(a/this.xLim[0])/Math.log(this.xLim[1]/this.xLim[0]):this.dim[0]*(a-this.xLim[0])/(this.xLim[1]-this.xLim[0])},GLayer.prototype.valueToYPlot=function(a){return this.yLog?-this.dim[1]*Math.log(a/this.yLim[0])/Math.log(this.yLim[1]/this.yLim[0]):-this.dim[1]*(a-this.yLim[0])/(this.yLim[1]-this.yLim[0])},GLayer.prototype.valueToPlot=function(){if(2===arguments.length)return[this.valueToXPlot(arguments[0]),this.valueToYPlot(arguments[1])];if(1===arguments.length&&arguments[0]instanceof GPoint)return new GPoint(this.valueToXPlot(arguments[0].getX()),this.valueToYPlot(arguments[0].getY()),arguments[0].getLabel());if(1===arguments.length&&arguments[0]instanceof Array&&arguments[0][0]instanceof GPoint){var a,b,c,d,e,f,g=arguments[0].length,h=[];if(this.xLog&&this.yLog)for(a=this.dim[0]/Math.log(this.xLim[1]/this.xLim[0]),b=-this.dim[1]/Math.log(this.yLim[1]/this.yLim[0]),f=0;g>f;f++)c=arguments[0][f],d=Math.log(c.getX()/this.xLim[0])*a,e=Math.log(c.getY()/this.yLim[0])*b,h[f]=new GPoint(d,e,c.getLabel());else if(this.xLog)for(a=this.dim[0]/Math.log(this.xLim[1]/this.xLim[0]),b=-this.dim[1]/(this.yLim[1]-this.yLim[0]),f=0;g>f;f++)c=arguments[0][f],d=Math.log(c.getX()/this.xLim[0])*a,e=(c.getY()-this.yLim[0])*b,h[f]=new GPoint(d,e,c.getLabel());else if(this.yLog)for(a=this.dim[0]/(this.xLim[1]-this.xLim[0]),b=-this.dim[1]/Math.log(this.yLim[1]/this.yLim[0]),f=0;g>f;f++)c=arguments[0][f],d=(c.getX()-this.xLim[0])*a,e=Math.log(c.getY()/this.yLim[0])*b,h[f]=new GPoint(d,e,c.getLabel());else for(a=this.dim[0]/(this.xLim[1]-this.xLim[0]),b=-this.dim[1]/(this.yLim[1]-this.yLim[0]),f=0;g>f;f++)c=arguments[0][f],d=(c.getX()-this.xLim[0])*a,e=(c.getY()-this.yLim[0])*b,h[f]=new GPoint(d,e,c.getLabel());return h}throw new Error("GLayer.valueToPlot(): signature not supported")},GLayer.prototype.updatePlotPoints=function(){var a,b,c,d,e,f,g=this.points.length;if(this.plotPoints.lengthf;f++)this.plotPoints[f]=new GPoint;else this.plotPoints.length>g&&this.plotPoints.splice(g,Number.MAX_VALUE);if(this.xLog&&this.yLog)for(a=this.dim[0]/Math.log(this.xLim[1]/this.xLim[0]),b=-this.dim[1]/Math.log(this.yLim[1]/this.yLim[0]),f=0;g>f;f++)c=this.points[f],d=Math.log(c.getX()/this.xLim[0])*a,e=Math.log(c.getY()/this.yLim[0])*b,this.plotPoints[f].set(d,e,c.getLabel());else if(this.xLog)for(a=this.dim[0]/Math.log(this.xLim[1]/this.xLim[0]),b=-this.dim[1]/(this.yLim[1]-this.yLim[0]),f=0;g>f;f++)c=this.points[f],d=Math.log(c.getX()/this.xLim[0])*a,e=(c.getY()-this.yLim[0])*b,this.plotPoints[f].set(d,e,c.getLabel());else if(this.yLog)for(a=this.dim[0]/(this.xLim[1]-this.xLim[0]),b=-this.dim[1]/Math.log(this.yLim[1]/this.yLim[0]),f=0;g>f;f++)c=this.points[f],d=(c.getX()-this.xLim[0])*a,e=Math.log(c.getY()/this.yLim[0])*b,this.plotPoints[f].set(d,e,c.getLabel());else for(a=this.dim[0]/(this.xLim[1]-this.xLim[0]),b=-this.dim[1]/(this.yLim[1]-this.yLim[0]),f=0;g>f;f++)c=this.points[f],d=(c.getX()-this.xLim[0])*a,e=(c.getY()-this.yLim[0])*b,this.plotPoints[f].set(d,e,c.getLabel())},GLayer.prototype.xPlotToValue=function(a){return this.xLog?Math.exp(Math.log(this.xLim[0])+Math.log(this.xLim[1]/this.xLim[0])*a/this.dim[0]):this.xLim[0]+(this.xLim[1]-this.xLim[0])*a/this.dim[0]},GLayer.prototype.yPlotToValue=function(a){return this.yLog?Math.exp(Math.log(this.yLim[0])-Math.log(this.yLim[1]/this.yLim[0])*a/this.dim[1]):this.yLim[0]-(this.yLim[1]-this.yLim[0])*a/this.dim[1]},GLayer.prototype.plotToValue=function(a,b){return[this.xPlotToValue(a),this.yPlotToValue(b)]},GLayer.prototype.isInside=function(){var a,b,c;if(2===arguments.length)a=arguments[0],b=arguments[1],c=this.isValidNumber(a)&&this.isValidNumber(b);else{if(!(1===arguments.length&&arguments[0]instanceof GPoint))throw new Error("GLayer.isInside(): signature not supported");a=arguments[0].getX(),b=arguments[0].getY(),c=arguments[0].isValid()}return c?a>=0&&a<=this.dim[0]&&-b>=0&&-b<=this.dim[1]:!1},GLayer.prototype.updateInsideList=function(){for(var a,b=this.plotPoints.length,c=0;b>c;c++)a=this.plotPoints[c],this.inside[c]=a.isValid()?a.getX()>=0&&a.getX()<=this.dim[0]&&-a.getY()>=0&&-a.getY()<=this.dim[1]:!1;this.inside.length>b&&this.inside.splice(b,Number.MAX_VALUE)},GLayer.prototype.getPointIndexAtPlotPos=function(a,b){var c;if(this.isInside(a,b))for(var d,e,f=25,g=this.plotPoints.length,h=0;g>h;h++)this.inside[h]&&(d=this.plotPoints[h],e=Math.pow(d.getX()-a,2)+Math.pow(d.getY()-b,2),f>e&&(f=e,c=h));return c},GLayer.prototype.getPointAtPlotPos=function(a,b){return this.points[this.getPointIndexAtPlotPos(a,b)]},GLayer.prototype.obtainBoxIntersections=function(a,b){var c=0;if(a.isValid()&&b.isValid()){var d=a.getX(),e=a.getY(),f=b.getX(),g=b.getY(),h=this.isInside(d,e),i=this.isInside(f,g),j=h&&i||0>d&&0>f||d>this.dim[0]&&f>this.dim[0]||0>-e&&0>-g||-e>this.dim[1]&&-g>this.dim[1];if(!j){var k=f-d,l=g-e;if(0===k)c=2,this.cuts[0][0]=d,this.cuts[0][1]=0,this.cuts[1][0]=d,this.cuts[1][1]=-this.dim[1];else if(0===l)c=2,this.cuts[0][0]=0,this.cuts[0][1]=e,this.cuts[1][0]=this.dim[0],this.cuts[1][1]=e;else{var m=l/k,n=e-m*d;c=4,this.cuts[0][0]=-n/m,this.cuts[0][1]=0,this.cuts[1][0]=(-this.dim[1]-n)/m,this.cuts[1][1]=-this.dim[1],this.cuts[2][0]=0,this.cuts[2][1]=n,this.cuts[3][0]=this.dim[0],this.cuts[3][1]=n+m*this.dim[0]}if(c=this.getValidCuts(this.cuts,c,a,b),h||i){if(1!==c){var o=h?a:b;c>1&&(c=this.removeDuplicatedCuts(this.cuts,c,0),c>1&&(c=this.removePointFromCuts(this.cuts,c,o,0),c>1&&(c=this.removeDuplicatedCuts(this.cuts,c,.001),c>1&&(c=this.removePointFromCuts(this.cuts,c,o,.001))))),0===c&&(c=1,this.cuts[0][0]=o.getX(),this.cuts[1][0]=o.getY())}}else c>2&&(c=this.removeDuplicatedCuts(this.cuts,c,0),c>2&&(c=this.removeDuplicatedCuts(this.cuts,c,.001))),2===c&&(Math.pow(this.cuts[0][0]-d,2)+Math.pow(this.cuts[0][1]-e),2>Math.pow(this.cuts[1][0]-d,2)+Math.pow(this.cuts[1][1]-e,2)&&(this.cuts[2][0]=this.cuts[0][0],this.cuts[2][1]=this.cuts[0][1],this.cuts[0][0]=this.cuts[1][0],this.cuts[0][1]=this.cuts[1][1],this.cuts[1][0]=this.cuts[2][0],this.cuts[1][1]=this.cuts[2][1])),1===c&&(c=2,this.cuts[1][0]=this.cuts[0][0],this.cuts[1][1]=this.cuts[0][1]);(h||i)&&1!==c?console.log("There should be one cut!!!"):h||i||0===c||2===c||console.log("There should be either 0 or 2 cuts!!! "+c+" were found")}}return c},GLayer.prototype.getValidCuts=function(a,b,c,d){for(var e=c.getX(),f=c.getY(),g=d.getX(),h=d.getY(),i=Math.abs(g-e),j=Math.abs(h-f),k=0,l=0;b>l;l++)this.isInside(a[l][0],a[l][1])&&Math.abs(a[l][0]-e)<=i&&Math.abs(a[l][1]-f)<=j&&Math.abs(a[l][0]-g)<=i&&Math.abs(a[l][1]-h)<=j&&(a[k][0]=a[l][0],a[k][1]=a[l][1],k++);return k},GLayer.prototype.removeDuplicatedCuts=function(a,b,c){for(var d,e=0,f=0;b>f;f++){d=!1;for(var g=0;e>g;g++)if(Math.abs(a[g][0]-a[f][0])<=c&&Math.abs(a[g][1]-a[f][1])<=c){d=!0;break}d||(a[e][0]=a[f][0],a[e][1]=a[f][1],e++)}return e},GLayer.prototype.removePointFromCuts=function(a,b,c,d){for(var e=c.getX(),f=c.getY(),g=0,h=0;b>h;h++)(Math.abs(a[h][0]-e)>d||Math.abs(a[h][1]-f)>d)&&(a[g][0]=a[h][0],a[g][1]=a[h][1],g++);return g},GLayer.prototype.startHistogram=function(a){this.hist=new GHistogram(this.parent,a,this.dim,this.plotPoints)},GLayer.prototype.drawPoints=function(){var a,b;if(0===arguments.length){a=this.plotPoints.length;var c=this.pointColors.length,d=this.pointSizes.length;if(this.parent.push(),this.parent.ellipseMode(this.parent.CENTER),this.parent.stroke(50),1===c&&1===d)for(this.parent.fill(this.pointColors[0]),b=0;a>b;b++)this.inside[b]&&this.parent.ellipse(this.plotPoints[b].getX(),this.plotPoints[b].getY(),this.pointSizes[0],this.pointSizes[0]);else if(1===c)for(this.parent.fill(this.pointColors[0]),b=0;a>b;b++)this.inside[b]&&this.parent.ellipse(this.plotPoints[b].getX(),this.plotPoints[b].getY(),this.pointSizes[b%d],this.pointSizes[b%d]);else if(1===d)for(b=0;a>b;b++)this.inside[b]&&(this.parent.fill(this.pointColors[b%c]),this.parent.ellipse(this.plotPoints[b].getX(),this.plotPoints[b].getY(),this.pointSizes[0],this.pointSizes[0]));else for(b=0;a>b;b++)this.inside[b]&&(this.parent.fill(this.pointColors[b%c]),this.parent.ellipse(this.plotPoints[b].getX(),this.plotPoints[b].getY(),this.pointSizes[b%d],this.pointSizes[b%d]));this.parent.pop()}else{if(!(1===arguments.length&&arguments[0]instanceof p5.Image))throw new Error("GLayer.drawPoints(): signature not supported");for(a=this.plotPoints.length,this.parent.push(),this.parent.imageMode(this.parent.CENTER),b=0;a>b;b++)this.inside[b]&&this.parent.image(arguments[0],this.plotPoints[b].getX(),this.plotPoints[b].getY());this.parent.pop()}},GLayer.prototype.drawPoint=function(){var a,b,c,d;if(3===arguments.length)a=arguments[0],b=arguments[1],c=arguments[2];else if(2===arguments.length&&arguments[1]instanceof p5.Image)a=arguments[0],d=arguments[1];else{if(1!==arguments.length)throw new Error("GLayer.drawPoint(): signature not supported");a=arguments[0],b=this.pointColors[0],c=this.pointSizes[0]}var e=this.valueToXPlot(a.getX()),f=this.valueToYPlot(a.getY());this.isInside(e,f)&&(this.parent.push(),"undefined"!=typeof d?(this.parent.imageMode(this.parent.CENTER),this.parent.image(d,e,f)):(this.parent.ellipseMode(this.parent.CENTER),this.parent.fill(b),this.parent.noStroke(),this.parent.ellipse(e,f,c,c)),this.parent.pop())},GLayer.prototype.drawLines=function(){var a=this.plotPoints.length;this.parent.push(),this.parent.noFill(),this.parent.stroke(this.lineColor),this.parent.strokeWeight(this.lineWidth),this.parent.strokeCap(this.parent.SQUARE);for(var b=0;a-1>b;b++)if(this.inside[b]&&this.inside[b+1])this.parent.line(this.plotPoints[b].getX(),this.plotPoints[b].getY(),this.plotPoints[b+1].getX(),this.plotPoints[b+1].getY());else if(this.plotPoints[b].isValid()&&this.plotPoints[b+1].isValid()){var c=this.obtainBoxIntersections(this.plotPoints[b],this.plotPoints[b+1]);this.inside[b]?this.parent.line(this.plotPoints[b].getX(),this.plotPoints[b].getY(),this.cuts[0][0],this.cuts[0][1]):this.inside[b+1]?this.parent.line(this.cuts[0][0],this.cuts[0][1],this.plotPoints[b+1].getX(),this.plotPoints[b+1].getY()):c>=2&&this.parent.line(this.cuts[0][0],this.cuts[0][1],this.cuts[1][0],this.cuts[1][1])}this.parent.pop()},GLayer.prototype.drawLine=function(){var a,b,c,d,e,f;if(4===arguments.length&&arguments[0]instanceof GPoint)a=arguments[0],b=arguments[1],c=arguments[2],d=arguments[3];else if(4===arguments.length)e=arguments[0],f=arguments[1],c=arguments[2],d=arguments[3];else if(2===arguments.length&&arguments[0]instanceof GPoint)a=arguments[0],b=arguments[1],c=this.lineColor,d=this.lineWidth;else{if(2!==arguments.length)throw new Error("GLayer.drawLine(): signature not supported");e=arguments[0],f=arguments[1],c=this.lineColor,d=this.lineWidth}"undefined"!=typeof e&&(this.xLog&&this.yLog?(a=new GPoint(this.xLim[0],Math.pow(10,e*Math.log(this.xLim[0])/Math.LN10+yCut)),b=new GPoint(this.xLim[1],Math.pow(10,e*Math.log(this.xLim[1])/Math.LN10+yCut))):this.xLog?(a=new GPoint(this.xLim[0],e*Math.log(this.xLim[0])/Math.LN10+yCut),b=new GPoint(this.xLim[1],e*Math.log(this.xLim[1])/Math.LN10+yCut)):this.yLog?(a=new GPoint(this.xLim[0],Math.pow(10,e*this.xLim[0]+yCut)),b=new GPoint(this.xLim[1],Math.pow(10,e*this.xLim[1]+yCut))):(a=new GPoint(this.xLim[0],e*this.xLim[0]+yCut),b=new GPoint(this.xLim[1],e*this.xLim[1]+yCut)));var g=this.valueToPlot(a),h=this.valueToPlot(b);if(g.isValid()&&h.isValid()){var i=this.isInside(g),j=this.isInside(h);if(this.parent.push(),this.parent.noFill(),this.parent.stroke(c),this.parent.strokeWeight(d),this.parent.strokeCap(this.parent.SQUARE),i&&j)this.parent.line(g.getX(),g.getY(),h.getX(),h.getY());else{var k=this.obtainBoxIntersections(g,h);i?this.parent.line(g.getX(),g.getY(),this.cuts[0][0],this.cuts[0][1]):j?this.parent.line(this.cuts[0][0],this.cuts[0][1],h.getX(),h.getY()):k>=2&&this.parent.line(this.cuts[0][0],this.cuts[0][1],this.cuts[1][0],this.cuts[1][1])}this.parent.pop()}},GLayer.prototype.drawHorizontalLine=function(){var a,b,c;if(3===arguments.length)a=arguments[0],b=arguments[1],c=arguments[2];else{if(1!==arguments.length)throw new Error("GLayer.drawHorizontalLine(): signature not supported");a=arguments[0],b=this.lineColor,c=this.lineWidth}var d=this.valueToYPlot(a);this.isValidNumber(d)&&-d>=0&&-d<=this.dim[1]&&(this.parent.push(),this.parent.noFill(),this.parent.stroke(b),this.parent.strokeWeight(c),this.parent.strokeCap(this.parent.SQUARE),this.parent.line(0,d,this.dim[0],d),this.parent.pop())},GLayer.prototype.drawVerticalLine=function(){var a,b,c;if(3===arguments.length)a=arguments[0],b=arguments[1],c=arguments[2];else{if(1!==arguments.length)throw new Error("GLayer.drawVerticalLine(): signature not supported");a=arguments[0],b=this.lineColor,c=this.lineWidth}var d=this.valueToXPlot(a);this.isValidNumber(d)&&d>=0&&d<=this.dim[0]&&(this.parent.push(),this.parent.noFill(),this.parent.stroke(b),this.parent.strokeWeight(c),this.parent.strokeCap(this.parent.SQUARE),this.parent.line(d,0,d,-this.dim[1]),this.parent.pop())},GLayer.prototype.drawFilledContour=function(a,b){var c;if(a===GPlot.HORIZONTAL?c=this.getHorizontalShape(b):a===GPlot.VERTICAL&&(c=this.getVerticalShape(b)),"undefined"!=typeof c&&c.length>0){this.parent.push(),this.parent.fill(this.lineColor),this.parent.noStroke(),this.parent.beginShape();for(var d=0;di;i++)if(b=this.plotPoints[i],b.isValid()){for(c=!1,this.inside[i]?(f.push(new GPoint(b.getX(),b.getY(),"normal point")),c=!0):b.getX()>=0&&b.getX()<=this.dim[0]&&(-b.getY()<0?(f.push(new GPoint(b.getX(),0,"projection")),c=!0):(f.push(new GPoint(b.getX(),-this.dim[1],"projection")),c=!0)),d=i+1;e-1>d&&!this.plotPoints[d].isValid();)d++;if(e>d&&this.plotPoints[d].isValid())for(var j=this.obtainBoxIntersections(b,this.plotPoints[d]),k=0;j>k;k++)f.push(new GPoint(this.cuts[k][0],this.cuts[k][1],"cut")),c=!0;c&&(0>g&&(g=i),h=i)}if(f.length>0){var l=new GPoint(f[0]);if(0!==l.getX()&&l.getX()!==this.dim[0])if("cut"===l.getLabel())this.plotPoints[g].getX()<0?(l.setX(0),l.setLabel("extreme")):(l.setX(this.dim[0]),l.setLabel("extreme"));else if(0!==g){for(var m=g-1;m>0&&!this.plotPoints[m].isValid();)m--;this.plotPoints[m].isValid()&&(this.plotPoints[m].getX()<0?(l.setX(0),l.setLabel("extreme")):(l.setX(this.dim[0]),l.setLabel("extreme")))}var n=new GPoint(f[f.length-1]);if(0!==n.getX()&&n.getX()!==this.dim[0]&&h!==e-1){for(d=h+1;e-1>d&&!this.plotPoints[d].isValid();)d++;this.plotPoints[d].isValid()&&(this.plotPoints[d].getX()<0?(n.setX(0),n.setLabel("extreme")):(n.setX(this.dim[0]),n.setLabel("extreme")))}"extreme"===n.getLabel()&&f.push(n),this.yLog&&0>=a&&(a=Math.min(this.yLim[0],this.yLim[1]));var o=this.valueToPlot(1,a);-o[1]<0?(f.push(new GPoint(n.getX(),0)),f.push(new GPoint(l.getX(),0))):-o[1]>this.dim[1]?(f.push(new GPoint(n.getX(),-this.dim[1])),f.push(new GPoint(l.getX(),-this.dim[1]))):(f.push(new GPoint(n.getX(),o[1])),f.push(new GPoint(l.getX(),o[1]))),"extreme"===l.getLabel()&&f.push(l)}return f},GLayer.prototype.getVerticalShape=function(a){for(var b,c,d,e=this.plotPoints.length,f=[],g=-1,h=-1,i=0;e>i;i++)if(b=this.plotPoints[i],b.isValid()){for(c=!1,this.inside[i]?(f.push(new GPoint(b.getX(),b.getY(),"normal point")),c=!0):-b.getY()>=0&&-b.getY()<=this.dim[1]&&(b.getX()<0?(f.push(new GPoint(0,b.getY(),"projection")),c=!0):(f.push(new GPoint(this.dim[0],b.getY(),"projection")),c=!0)),d=i+1;e-1>d&&!this.plotPoints[d].isValid();)d++;if(e>d&&this.plotPoints[d].isValid())for(var j=this.obtainBoxIntersections(b,this.plotPoints[d]),k=0;j>k;k++)f.push(new GPoint(this.cuts[k][0],this.cuts[k][1],"cut")),c=!0;c&&(0>g&&(g=i),h=i)}if(f.length>0){var l=new GPoint(f[0]);if(0!==l.getY()&&l.getY()!==-this.dim[1])if("cut"===l.getLabel())-this.plotPoints[g].getY()<0?(l.setY(0),l.setLabel("extreme")):(l.setY(-this.dim[1]),l.setLabel("extreme"));else if(0!==g){for(var m=g-1;m>0&&!this.plotPoints[m].isValid();)m--;this.plotPoints[m].isValid()&&(-this.plotPoints[m].getY()<0?(l.setY(0),l.setLabel("extreme")):(l.setY(-this.dim[1]),l.setLabel("extreme")))}var n=new GPoint(f[f.length-1]);if(0!==n.getY()&&n.getY()!==-this.dim[1]&&h!==e-1){for(d=h+1;e-1>d&&!this.plotPoints[d].isValid();)d++;this.plotPoints[d].isValid()&&(-this.plotPoints[d].getY()<0?(n.setY(0),n.setLabel("extreme")):(n.setY(-this.dim[1]),n.setLabel("extreme")))}"extreme"===n.getLabel()&&f.push(n),this.xLog&&0>=a&&(a=Math.min(this.xLim[0],this.xLim[1]));var o=this.valueToPlot(a,1);o[0]<0?(f.push(new GPoint(0,n.getY())),f.push(new GPoint(0,l.getY()))):o[0]>this.dim[0]?(f.push(new GPoint(this.dim[0],n.getY())),f.push(new GPoint(this.dim[0],l.getY()))):(f.push(new GPoint(o[0],n.getY())),f.push(new GPoint(o[0],l.getY()))),"extreme"===l.getLabel()&&f.push(l)}return f},GLayer.prototype.drawLabel=function(a){var b=this.valueToXPlot(a.getX()),c=this.valueToYPlot(a.getY());if(this.isValidNumber(b)&&this.isValidNumber(c)){var d=b+this.labelSeparation[0],e=c-this.labelSeparation[1],f=this.fontSize/4;this.parent.push(),this.parent.rectMode(this.parent.CORNER),this.parent.noStroke(),this.parent.textFont(this.fontName),this.parent.textSize(this.fontSize),this.parent.textAlign(this.parent.LEFT,this.parent.BOTTOM),this.parent.fill(this.labelBgColor),this.parent.rect(d-f,e-this.fontSize-f,this.parent.textWidth(a.getLabel())+2*f,this.fontSize+2*f),this.parent.fill(this.fontColor),this.parent.text(a.getLabel(),d,e),this.parent.pop()}},GLayer.prototype.drawLabelAtPlotPos=function(a,b){var c=this.getPointAtPlotPos(a,b);"undefined"!=typeof c&&this.drawLabel(c)},GLayer.prototype.drawHistogram=function(){"undefined"!=typeof this.hist&&this.hist.draw(this.valueToPlot(this.histBasePoint))},GLayer.prototype.drawPolygon=function(a,b){var c;if(a.length>2){var d=this.valueToPlot(a),e=0;for(c=0;cc;c++){f=d[c],this.isInside(f)&&h.push(new GPoint(f.getX(),f.getY(),"normal point"));var i=g>c+1?c+1:0,j=this.obtainBoxIntersections(f,d[i]);1===j?h.push(new GPoint(this.cuts[0][0],this.cuts[0][1],"single cut")):j>1&&(h.push(new GPoint(this.cuts[0][0],this.cuts[0][1],"double cut")),h.push(new GPoint(this.cuts[1][0],this.cuts[1][1],"double cut")))}g=h.length;var k=[];for(c=0;g>c;c++){k.push(h[c]);var l=g>c+1?c+1:0,m=h[c].getLabel(),n=h[l].getLabel(),o="single cut"===m&&"single cut"===n||"single cut"===m&&"double cut"===n||"double cut"===m&&"single cut"===n;if(o){var p=h[c].getX(),q=h[c].getY(),r=h[l].getX(),s=h[l].getY(),t=Math.abs(r-p),u=Math.abs(s-q);if(t>0&&u>0&&t!==this.dim[0]&&u!==this.dim[1]){var v=0===p||p===this.dim[0]?p:r,w=0===q||q===-this.dim[1]?q:s;k.push(new GPoint(v,w,"special cut"))}}}if(k.length>2){for(this.parent.push(),this.parent.fill(b),this.parent.noStroke(),this.parent.beginShape(),c=0;c0&&b>0&&(this.dim[0]=a,this.dim[1]=b,this.updatePlotPoints(),"undefined"!=typeof this.hist&&(this.hist.setDim(this.dim),this.hist.setPlotPoints(this.plotPoints)))},GLayer.prototype.setXLim=function(){var a,b;if(2===arguments.length)a=arguments[0],b=arguments[1];else{if(1!==arguments.length)throw new Error("GLayer.setXLim(): signature not supported");a=arguments[0][0],b=arguments[0][1]}a!==b&&this.isValidNumber(a)&&this.isValidNumber(b)&&(this.xLog&&(0>=a||0>=b)?console.log("One of the limits is negative. This is not allowed in logarithmic scale."):(this.xLim[0]=a,this.xLim[1]=b,this.updatePlotPoints(),this.updateInsideList(),"undefined"!=typeof this.hist&&this.hist.setPlotPoints(this.plotPoints)))},GLayer.prototype.setYLim=function(){var a,b;if(2===arguments.length)a=arguments[0],b=arguments[1];else{if(1!==arguments.length)throw new Error("GLayer.setYLim(): signature not supported");a=arguments[0][0],b=arguments[0][1]}a!==b&&this.isValidNumber(a)&&this.isValidNumber(b)&&(this.yLog&&(0>=a||0>=b)?console.log("One of the limits is negative. This is not allowed in logarithmic scale."):(this.yLim[0]=a,this.yLim[1]=b,this.updatePlotPoints(),this.updateInsideList(),"undefined"!=typeof this.hist&&this.hist.setPlotPoints(this.plotPoints)))},GLayer.prototype.setXYLim=function(){var a,b,c,d;if(4===arguments.length)a=arguments[0],b=arguments[1],c=arguments[2],d=arguments[3];else{if(2!==arguments.length)throw new Error("GLayer.setXYLim(): signature not supported");a=arguments[0][0],b=arguments[0][1],c=arguments[1][0],d=arguments[1][1]}a!==b&&c!==d&&this.isValidNumber(a)&&this.isValidNumber(b)&&this.isValidNumber(c)&&this.isValidNumber(d)&&(this.xLog&&(0>=a||0>=b)?console.log("One of the limits is negative. This is not allowed in logarithmic scale."):(this.xLim[0]=a,this.xLim[1]=b),this.yLog&&(0>=c||0>=d)?console.log("One of the limits is negative. This is not allowed in logarithmic scale."):(this.yLim[0]=c,this.yLim[1]=d),this.updatePlotPoints(),this.updateInsideList(),"undefined"!=typeof this.hist&&this.hist.setPlotPoints(this.plotPoints))},GLayer.prototype.setLimAndLog=function(){var a,b,c,d,e,f;if(6===arguments.length)a=arguments[0],b=arguments[1],c=arguments[2],d=arguments[3],e=arguments[4],f=arguments[5];else{if(4!==arguments.length)throw new Error("GLayer.setLimAndLog(): signature not supported");a=arguments[0][0],b=arguments[0][1],c=arguments[1][0],d=arguments[1][1],e=arguments[2],f=arguments[3]}a!==b&&c!==d&&this.isValidNumber(a)&&this.isValidNumber(b)&&this.isValidNumber(c)&&this.isValidNumber(d)&&(e&&(0>=a||0>=b)?console.log("One of the limits is negative. This is not allowed in logarithmic scale."):(this.xLim[0]=a,this.yLim[1]=b,this.xLog=e),f&&(0>=c||0>=d)?console.log("One of the limits is negative. This is not allowed in logarithmic scale."):(this.yLim[0]=c,this.yLim[1]=d,this.yLog=f),this.updatePlotPoints(),this.updateInsideList(),"undefined"!=typeof this.hist&&this.hist.setPlotPoints(this.plotPoints))},GLayer.prototype.setXLog=function(a){a!==this.xLog&&(a&&(this.xLim[0]<=0||this.xLim[1]<=0)&&(console.log("One of the limits is negative. This is not allowed in logarithmic scale."),console.log("Will set horizontal limits to (0.1, 10)"),this.xLim[0]=.1,this.xLim[1]=10),this.xLog=a,this.updatePlotPoints(),this.updateInsideList(),"undefined"!=typeof this.hist&&this.hist.setPlotPoints(this.plotPoints))},GLayer.prototype.setYLog=function(a){a!==this.yLog&&(a&&(this.yLim[0]<=0||this.yLim[1]<=0)&&(console.log("One of the limits is negative. This is not allowed in logarithmic scale."),console.log("Will set horizontal limits to (0.1, 10)"),this.yLim[0]=.1,this.yLim[1]=10),this.yLog=a,this.updatePlotPoints(),this.updateInsideList(),"undefined"!=typeof this.hist&&this.hist.setPlotPoints(this.plotPoints))},GLayer.prototype.setPoints=function(a){var b,c=a.length;if(this.points.length>c)this.points.splice(c,Number.MAX_VALUE);else for(b=this.points.length;c>b;b++)this.points[b]=new GPoint;for(b=0;c>b;b++)this.points[b].set(a[b]);this.updatePlotPoints(),this.updateInsideList(),"undefined"!=typeof this.hist&&this.hist.setPlotPoints(this.plotPoints)},GLayer.prototype.setPoint=function(){var a,b,c,d,e=this.points.length;if(4===arguments.length)a=arguments[0],b=arguments[1],c=arguments[2],d=arguments[3];else if(3===arguments.length)a=arguments[0],b=arguments[1],c=arguments[2],d=aa)this.points[a].set(b,c,d),this.plotPoints[a].set(this.valueToXPlot(b),this.valueToYPlot(c),d),this.inside[a]=this.isInside(this.plotPoints[a]);else{if(a!==e)throw new Error("GLayer.setPoint(): the index position is outside the array size");this.points[a]=new GPoint(b,c,d),this.plotPoints[a]=new GPoint(this.valueToXPlot(b),this.valueToYPlot(c),d),this.inside[a]=this.isInside(this.plotPoints[a])}"undefined"!=typeof this.hist&&this.hist.setPlotPoint(a,this.plotPoints[a])},GLayer.prototype.addPoint=function(){var a,b,c;if(3===arguments.length)a=arguments[0],b=arguments[1],c=arguments[2];else if(2===arguments.length)a=arguments[0],b=arguments[1],c="";else{if(1!==arguments.length)throw new Error("GLayer.addPoint(): signature not supported");a=arguments[0].getX(),b=arguments[0].getY(),c=arguments[0].getLabel()}this.points.push(new GPoint(a,b,c)),this.plotPoints.push(new GPoint(this.valueToXPlot(a),this.valueToYPlot(b),c)),this.inside.push(this.isInside(this.plotPoints[this.plotPoints.length-1])),"undefined"!=typeof this.hist&&this.hist.addPlotPoint(this.plotPoints[this.plotPoints.length-1])},GLayer.prototype.addPoints=function(a){for(var b,c=a.length,d=0;c>d;d++)b=a[d],this.points.push(new GPoint(b)),this.plotPoints.push(new GPoint(this.valueToXPlot(b.getX()),this.valueToYPlot(b.getY()),b.getLabel())),this.inside.push(this.isInside(this.plotPoints[this.plotPoints.length-1]));"undefined"!=typeof this.hist&&this.hist.setPlotPoints(this.plotPoints)},GLayer.prototype.addPointAtIndexPos=function(){var a,b,c,d;if(4===arguments.length)a=arguments[0],b=arguments[1],c=arguments[2],d=arguments[3];else if(3===arguments.length)a=arguments[0],b=arguments[1],c=arguments[2],d="";else{if(2!==arguments.length)throw new Error("GLayer.addPointAtIndexPos(): signature not supported");a=arguments[0],b=arguments[1].getX(),c=arguments[1].getY(),d=arguments[1].getLabel()}a<=this.points.length&&(this.points.splice(a,0,new GPoint(b,c,d)),this.plotPoints.splice(a,0,new GPoint(this.valueToXPlot(b),this.valueToYPlot(c),d)),this.inside.splice(a,0,this.isInside(this.plotPoints[0])),"undefined"!=typeof this.hist&&this.hist.setPlotPoints(this.plotPoints))},GLayer.prototype.removePoint=function(a){a0&&(this.pointColors=a.slice())},GLayer.prototype.setPointColor=function(a){this.pointColors=[a]},GLayer.prototype.setPointSizes=function(a){a.length>0&&(this.pointSizes=a.slice())},GLayer.prototype.setPointSize=function(a){this.pointSizes=[a]},GLayer.prototype.setLineColor=function(a){this.lineColor=a},GLayer.prototype.setLineWidth=function(a){a>0&&(this.lineWidth=a)},GLayer.prototype.setHistBasePoint=function(a){this.histBasePoint.set(a)},GLayer.prototype.setHistType=function(a){"undefined"!=typeof this.hist&&this.hist.setType(a)},GLayer.prototype.setHistVisible=function(a){"undefined"!=typeof this.hist&&this.hist.setVisible(a)},GLayer.prototype.setDrawHistLabels=function(a){"undefined"!=typeof this.hist&&this.hist.setDrawLabels(a)},GLayer.prototype.setLabelBgColor=function(a){this.labelBgColor=a},GLayer.prototype.setLabelSeparation=function(a){this.labelSeparation[0]=a[0],this.labelSeparation[1]=a[1]},GLayer.prototype.setFontName=function(a){this.fontName=a},GLayer.prototype.setFontColor=function(a){this.fontColor=a},GLayer.prototype.setFontSize=function(a){a>0&&(this.fontSize=a)},GLayer.prototype.setFontProperties=function(a,b,c){c>0&&(this.fontName=a,this.fontColor=b,this.fontSize=c)},GLayer.prototype.setAllFontProperties=function(a,b,c){this.setFontProperties(a,b,c),"undefined"!=typeof this.hist&&this.hist.setFontProperties(a,b,c)},GLayer.prototype.getId=function(){return this.id},GLayer.prototype.getDim=function(){return this.dim.slice()},GLayer.prototype.getXLim=function(){return this.xLim.slice()},GLayer.prototype.getYLim=function(){return this.yLim.slice()},GLayer.prototype.getXLog=function(){return this.xLog},GLayer.prototype.getYLog=function(){return this.yLog},GLayer.prototype.getPoints=function(){for(var a=[],b=0;b=this.pos[0]&&a<=this.pos[0]+this.outerDim[0]&&b>=this.pos[1]&&b<=this.pos[1]+this.outerDim[1]},GPlot.prototype.isOverBox=function(){var a,b;if(2===arguments.length)a=arguments[0],b=arguments[1];else{if(0!==arguments.length)throw new Error("GPlot.isOverBox(): signature not supported");a=this.parent.mouseX,b=this.parent.mouseY}return a>=this.pos[0]+this.mar[1]&&a<=this.pos[0]+this.outerDim[0]-this.mar[3]&&b>=this.pos[1]+this.mar[2]&&b<=this.pos[1]+this.outerDim[1]-this.mar[0]},GPlot.prototype.updateLimits=function(){this.fixedXLim||(this.xLim=this.calculatePlotXLim(),this.xAxis.setLim(this.xLim),this.topAxis.setLim(this.xLim)),this.fixedYLim||(this.yLim=this.calculatePlotYLim(),this.yAxis.setLim(this.yLim),this.rightAxis.setLim(this.yLim)),this.mainLayer.setXYLim(this.xLim,this.yLim);for(var a=0;a=this.yLim[0]&&e>=this.yLim[0]&&e<=this.yLim[1]||this.yLim[1]=this.yLim[1]),!f||this.xLog&&0>=d||(db[1]&&(b[1]=d))}return b[1]=this.xLim[0]&&d>=this.xLim[0]&&d<=this.xLim[1]||this.xLim[1]=this.xLim[1]),!f||this.yLog&&0>=e||(eb[1]&&(b[1]=e))}return b[1]=0&&c[b]<=this.dim[0]&&this.parent.line(c[b],0,c[b],-this.dim[1])}if(a===GPlot.BOTH||a===GPlot.HORIZONTAL){var d=this.yAxis.getPlotTicksRef();for(b=0;b=0&&-d[b]<=this.dim[1]&&this.parent.line(0,d[b],this.dim[0],d[b])}this.parent.pop()},GPlot.prototype.drawHistograms=function(){this.mainLayer.drawHistogram();for(var a=0;a0&&b>0){var c=a-this.mar[1]-this.mar[3],d=b-this.mar[0]-this.mar[2];if(c>0&&d>0){this.outerDim[0]=a,this.outerDim[1]=b,this.dim[0]=c,this.dim[1]=d,this.xAxis.setDim(this.dim),this.topAxis.setDim(this.dim),this.yAxis.setDim(this.dim),this.rightAxis.setDim(this.dim),this.title.setDim(this.dim),this.mainLayer.setDim(this.dim);for(var e=0;e0&&f>0&&(this.mar[0]=a,this.mar[1]=b,this.mar[2]=c,this.mar[3]=d,this.outerDim[0]=e,this.outerDim[1]=f)},GPlot.prototype.setDim=function(){var a,b;if(2===arguments.length)a=arguments[0],b=arguments[1];else{if(1!==arguments.length)throw new Error("GPlot.setDim(): signature not supported");a=arguments[0][0],b=arguments[0][1]}if(a>0&&b>0){var c=a+this.mar[1]+this.mar[3],d=b+this.mar[0]+this.mar[2];if(c>0&&d>0){this.outerDim[0]=c,this.outerDim[1]=d,this.dim[0]=a,this.dim[1]=b,this.xAxis.setDim(this.dim),this.topAxis.setDim(this.dim),this.yAxis.setDim(this.dim),this.rightAxis.setDim(this.dim),this.title.setDim(this.dim),this.mainLayer.setDim(this.dim);for(var e=0;e=a||0>=b)?console.log("One of the limits is negative. This is not allowed in logarithmic scale."):(this.xLim[0]=a,this.xLim[1]=b,this.invertedXScale=this.xLim[0]>this.xLim[1],this.fixedXLim=!0,this.xAxis.setLim(this.xLim),this.topAxis.setLim(this.xLim),this.updateLimits()))},GPlot.prototype.setYLim=function(){var a,b;if(2===arguments.length)a=arguments[0],b=arguments[1];else{if(1!==arguments.length)throw new Error("GPlot.setYLim(): signature not supported");a=arguments[0][0],b=arguments[0][1]}a!==b&&(this.yLog&&(0>=a||0>=b)?console.log("One of the limits is negative. This is not allowed in logarithmic scale."):(this.yLim[0]=a,this.yLim[1]=b,this.invertedYScale=this.yLim[0]>this.yLim[1],this.fixedYLim=!0,this.yAxis.setLim(this.yLim),this.rightAxis.setLim(this.yLim),this.updateLimits()))},GPlot.prototype.setFixedXLim=function(a){this.fixedXLim=a,this.updateLimits()},GPlot.prototype.setFixedYLim=function(a){this.fixedYLim=a,this.updateLimits()},GPlot.prototype.setLogScale=function(a){var b=this.xLog,c=this.yLog;if("xy"===a||"yx"===a?(b=!0,c=!0):"x"===a?(b=!0,c=!1):"y"===a?(b=!1,c=!0):""===a&&(b=!1,c=!1),b!==this.xLog||c!==this.yLog){this.xLog=b,this.yLog=c,this.xLog&&this.fixedXLim&&(this.xLim[0]<=0||this.xLim[1]<=0)&&(this.fixedXLim=!1),this.yLog&&this.fixedYLim&&(this.yLim[0]<=0||this.yLim[1]<=0)&&(this.fixedYLim=!1),this.fixedXLim||(this.xLim=this.calculatePlotXLim()),this.fixedYLim||(this.yLim=this.calculatePlotYLim()),this.xAxis.setLimAndLog(this.xLim,this.xLog),this.topAxis.setLimAndLog(this.xLim,this.xLog),this.yAxis.setLimAndLog(this.yLim,this.yLog),this.rightAxis.setLimAndLog(this.yLim,this.yLog),this.mainLayer.setLimAndLog(this.xLim,this.yLim,this.xLog,this.yLog);for(var d=0;d=0&&a!==this.expandLimFactor&&(this.expandLimFactor=a,this.updateLimits())},GPlot.prototype.setBgColor=function(a){this.bgColor=a},GPlot.prototype.setBoxBgColor=function(a){this.boxBgColor=a},GPlot.prototype.setBoxLineColor=function(a){this.boxLineColor=a},GPlot.prototype.setBoxLineWidth=function(a){a>0&&(this.boxLineWidth=a)},GPlot.prototype.setGridLineColor=function(a){this.gridLineColor=a},GPlot.prototype.setGridLineWidth=function(a){a>0&&(this.gridLineWidth=a)},GPlot.prototype.setPoints=function(){if(2===arguments.length)this.getLayer(arguments[1]).setPoints(arguments[0]);else{if(1!==arguments.length)throw new Error("GPlot.setPoints(): signature not supported");this.mainLayer.setPoints(arguments[0])}this.updateLimits()},GPlot.prototype.setPoint=function(){if(5===arguments.length)this.getLayer(arguments[4]).setPoint(arguments[0],arguments[1],arguments[2],arguments[3]);else if(4===arguments.length)this.mainLayer.setPoint(arguments[0],arguments[1],arguments[2],arguments[3]);else if(3===arguments.length&&arguments[1]instanceof GPoint)this.getLayer(arguments[2]).setPoint(arguments[0],arguments[1]);else if(3===arguments.length)this.mainLayer.setPoint(arguments[0],arguments[1],arguments[2]);else{if(2!==arguments.length)throw new Error("GPlot.setPoint(): signature not supported");this.mainLayer.setPoint(arguments[0],arguments[1])}this.updateLimits()},GPlot.prototype.addPoint=function(){if(4===arguments.length)this.getLayer(arguments[3]).addPoint(arguments[0],arguments[1],arguments[2]);else if(3===arguments.length)this.mainLayer.addPoint(arguments[0],arguments[1],arguments[2]);else if(2===arguments.length&&arguments[0]instanceof GPoint)this.getLayer(arguments[1]).addPoint(arguments[0]);else if(2===arguments.length)this.mainLayer.addPoint(arguments[0],arguments[1]);else{if(1!==arguments.length)throw new Error("GPlot.addPoint(): signature not supported");this.mainLayer.addPoint(arguments[0])}this.updateLimits()},GPlot.prototype.addPoints=function(){if(2===arguments.length)this.getLayer(arguments[1]).addPoints(arguments[0]);else{if(1!==arguments.length)throw new Error("GPlot.addPoints(): signature not supported");this.mainLayer.addPoints(arguments[0])}this.updateLimits()},GPlot.prototype.removePoint=function(){if(2===arguments.length)this.getLayer(arguments[1]).removePoint(arguments[0]);else{if(1!==arguments.length)throw new Error("GPlot.removePoint(): signature not supported");this.mainLayer.removePoint(arguments[0])}this.updateLimits()},GPlot.prototype.addPointAtIndexPos=function(){if(5===arguments.length)this.getLayer(arguments[4]).addPointAtIndexPos(arguments[0],arguments[1],arguments[2],arguments[3]);else if(4===arguments.length)this.mainLayer.addPointAtIndexPos(arguments[0],arguments[1],arguments[2],arguments[3]);else if(3===arguments.length&&arguments[1]instanceof GPoint)this.getLayer(arguments[2]).addPointAtIndexPos(arguments[0],arguments[1]);else if(3===arguments.length)this.mainLayer.addPointAtIndexPos(arguments[0],arguments[1],arguments[2]);else{if(2!==arguments.length)throw new Error("GPlot.addPointAtIndexPos(): signature not supported");this.mainLayer.addPointAtIndexPos(arguments[0],arguments[1])}this.updateLimits()},GPlot.prototype.setPointColors=function(a){this.mainLayer.setPointColors(a)},GPlot.prototype.setPointColor=function(a){this.mainLayer.setPointColor(a)},GPlot.prototype.setPointSizes=function(a){this.mainLayer.setPointSizes(a)},GPlot.prototype.setPointSize=function(a){this.mainLayer.setPointSize(a)},GPlot.prototype.setLineColor=function(a){this.mainLayer.setLineColor(a)},GPlot.prototype.setLineWidth=function(a){this.mainLayer.setLineWidth(a)},GPlot.prototype.setHistBasePoint=function(a){this.mainLayer.setHistBasePoint(a)},GPlot.prototype.setHistType=function(a){this.mainLayer.setHistType(a)},GPlot.prototype.setHistVisible=function(a){this.mainLayer.setHistVisible(a)},GPlot.prototype.setDrawHistLabels=function(a){this.mainLayer.setDrawHistLabels(a)},GPlot.prototype.setLabelBgColor=function(a){this.mainLayer.setLabelBgColor(a)},GPlot.prototype.setLabelSeparation=function(a){this.mainLayer.setLabelSeparation(a)},GPlot.prototype.setTitleText=function(a){this.title.setText(a)},GPlot.prototype.setAxesOffset=function(a){this.xAxis.setOffset(a),this.topAxis.setOffset(a),this.yAxis.setOffset(a),this.rightAxis.setOffset(a)},GPlot.prototype.setTicksLength=function(a){this.xAxis.setTickLength(a),this.topAxis.setTickLength(a),this.yAxis.setTickLength(a),this.rightAxis.setTickLength(a)},GPlot.prototype.setHorizontalAxesNTicks=function(a){this.xAxis.setNTicks(a),this.topAxis.setNTicks(a)},GPlot.prototype.setHorizontalAxesTicksSeparation=function(a){this.xAxis.setTicksSeparation(a),this.topAxis.setTicksSeparation(a)},GPlot.prototype.setHorizontalAxesTicks=function(a){this.xAxis.setTicks(a),this.topAxis.setTicks(a)},GPlot.prototype.setVerticalAxesNTicks=function(a){this.yAxis.setNTicks(a),this.rightAxis.setNTicks(a)},GPlot.prototype.setVerticalAxesTicksSeparation=function(a){this.yAxis.setTicksSeparation(a),this.rightAxis.setTicksSeparation(a)},GPlot.prototype.setVerticalAxesTicks=function(a){this.yAxis.setTicks(a),this.rightAxis.setTicks(a)},GPlot.prototype.setFontName=function(a){this.maniLayer.setFontName(a)},GPlot.prototype.setFontColor=function(a){this.maniLayer.setFontColor(a)},GPlot.prototype.setFontSize=function(a){this.maniLayer.setFontSize(a)},GPlot.prototype.setFontProperties=function(a,b,c){this.maniLayer.setFontProperties(a,b,c)},GPlot.prototype.setAllFontProperties=function(a,b,c){this.xAxis.setAllFontProperties(a,b,c),this.topAxis.setAllFontProperties(a,b,c),this.yAxis.setAllFontProperties(a,b,c),this.rightAxis.setAllFontProperties(a,b,c),this.title.setFontProperties(a,b,c),this.mainLayer.setAllFontProperties(a,b,c);for(var d=0;d0&&(this.zoomFactor=a),(b===this.parent.LEFT||b===this.parent.RIGHT||b===this.parent.CENTER)&&(this.increaseZoomButton=b),(c===this.parent.LEFT||c===this.parent.RIGHT||c===this.parent.CENTER)&&(this.decreaseZoomButton=c),(d===this.parent.SHIFT||d===this.parent.CONTROL||d===this.parent.ALT||d===GPlot.NONE)&&(this.increaseZoomKeyModifier=d),(e===this.parent.SHIFT||e===this.parent.CONTROL||e===this.parent.ALT||e===GPlot.NONE)&&(this.decreaseZoomKeyModifier=e)},GPlot.prototype.deactivateZooming=function(){this.zoomingIsActive=!1},GPlot.prototype.activateCentering=function(){var a,b;if(2===arguments.length)a=arguments[0],b=arguments[1];else if(1===arguments.length)a=arguments[0],b=GPlot.NONE;else{if(0!==arguments.length)throw new Error("GPlot.activateCentering(): signature not supported");a=this.parent.LEFT,b=GPlot.NONE}this.centeringIsActive=!0,(a===this.parent.LEFT||a===this.parent.RIGHT||a===this.parent.CENTER)&&(this.centeringButton=a),(b===this.parent.SHIFT||b===this.parent.CONTROL||b===this.parent.ALT||b===GPlot.NONE)&&(this.centeringKeyModifier=b)},GPlot.prototype.deactivateCentering=function(){this.centeringIsActive=!1},GPlot.prototype.activatePanning=function(){var a,b;if(2===arguments.length)a=arguments[0],b=arguments[1];else if(1===arguments.length)a=arguments[0],b=GPlot.NONE;else{if(0!==arguments.length)throw new Error("GPlot.activatePanning(): signature not supported");a=this.parent.LEFT,b=GPlot.NONE}this.panningIsActive=!0,(a===this.parent.LEFT||a===this.parent.RIGHT||a===this.parent.CENTER)&&(this.panningButton=a),(b===this.parent.SHIFT||b===this.parent.CONTROL||b===this.parent.ALT||b===GPlot.NONE)&&(this.panningKeyModifier=b)},GPlot.prototype.deactivatePanning=function(){this.panningIsActive=!1,this.panningReferencePoint=void 0},GPlot.prototype.activatePointLabels=function(){var a,b;if(2===arguments.length)a=arguments[0],b=arguments[1];else if(1===arguments.length)a=arguments[0],b=GPlot.NONE;else{if(0!==arguments.length)throw new Error("GPlot.activatePointLabels(): signature not supported");a=this.parent.LEFT,b=GPlot.NONE}this.labelingIsActive=!0,(a===this.parent.LEFT||a===this.parent.RIGHT||a===this.parent.CENTER)&&(this.labelingButton=a),(b===this.parent.SHIFT||b===this.parent.CONTROL||b===this.parent.ALT||b===GPlot.NONE)&&(this.labelingKeyModifier=b)},GPlot.prototype.deactivatePointLabels=function(){this.labelingIsActive=!1,this.mousePos=void 0},GPlot.prototype.activateReset=function(){var a,b;if(2===arguments.length)a=arguments[0],b=arguments[1];else if(1===arguments.length)a=arguments[0],b=GPlot.NONE;else{if(0!==arguments.length)throw new Error("GPlot.activateReset(): signature not supported");a=this.parent.RIGHT,b=GPlot.NONE}this.resetIsActive=!0,this.xLimReset=void 0,this.yLimReset=void 0,(a===this.parent.LEFT||a===this.parent.RIGHT||a===this.parent.CENTER)&&(this.resetButton=a),(b===this.parent.SHIFT||b===this.parent.CONTROL||b===this.parent.ALT||b===GPlot.NONE)&&(this.resetKeyModifier=b)},GPlot.prototype.deactivateReset=function(){this.resetIsActive=!1,this.xLimReset=void 0,this.yLimReset=void 0},GPlot.prototype.getButton=function(a){var b;return 0===a.button?b=this.parent.LEFT:1===a.button?b=this.parent.CENTER:2===a.button?b=this.parent.RIGHT:"undefined"==typeof a.button&&(b=this.parent.LEFT),b},GPlot.prototype.getModifier=function(a){var b;return b=a.altKey?this.parent.ALT:a.ctrlKey?this.parent.CONTROL:a.shiftKey?this.parent.SHIFT:GPlot.NONE},GPlot.prototype.saveResetLimits=function(){("undefined"==typeof this.xLimReset||"undefined"==typeof this.yLimReset)&&(this.xLimReset=this.xLim.slice(),this.yLimReset=this.yLim.slice())},GPlot.prototype.panningFunction=function(){"undefined"!=typeof this.panningReferencePoint&&this.align(this.panningReferencePoint,this.parent.mouseX,this.parent.mouseY)},GPlot.prototype.clickEvent=function(a){if(e=a||window.event,this.isOverBox()){var b=this.getButton(e),c=this.getModifier(e);this.zoomingIsActive&&(b===this.increaseZoomButton&&c===this.increaseZoomKeyModifier?(this.resetIsActive&&this.saveResetLimits(),this.zoom(this.zoomFactor,this.parent.mouseX,this.parent.mouseY)):b===this.decreaseZoomButton&&c===this.decreaseZoomKeyModifier&&(this.resetIsActive&&this.saveResetLimits(),this.zoom(1/this.zoomFactor,this.parent.mouseX,this.parent.mouseY))),this.centeringIsActive&&b===this.centeringButton&&c===this.centeringKeyModifier&&(this.resetIsActive&&this.saveResetLimits(), this.center(this.parent.mouseX,this.parent.mouseY)),this.resetIsActive&&b===this.resetButton&&c===this.resetKeyModifier&&"undefined"!=typeof this.xLimReset&&"undefined"!=typeof this.yLimReset&&(this.setXLim(this.xLimReset),this.setYLim(this.yLimReset),this.xLimReset=void 0,this.yLimReset=void 0)}},GPlot.prototype.mouseDownEvent=function(a){if(e=a||window.event,this.isOverBox()){var b=this.getButton(e),c=this.getModifier(e);this.panningIsActive&&b===this.panningButton&&c===this.panningKeyModifier&&(this.resetIsActive&&this.saveResetLimits(),this.panningReferencePoint=this.getValueAt(this.parent.mouseX,this.parent.mouseY),this.panningIntervalId=setInterval(this.panningFunction.bind(this),100)),this.labelingIsActive&&b===this.labelingButton&&c===this.labelingKeyModifier&&(this.mousePos=[this.parent.mouseX,this.parent.mouseY])}},GPlot.prototype.mouseUpEvent=function(a){e=a||window.event;{var b=this.getButton(e);this.getModifier(e)}this.panningIsActive&&b===this.panningButton&&"undefined"!=typeof this.panningIntervalId&&(clearInterval(this.panningIntervalId),this.panningIntervalId=void 0,this.panningReferencePoint=void 0),this.labelingIsActive&&b===this.labelingButton&&(this.mousePos=void 0),b===this.parent.RIGHT&&this.clickEvent(e)},GPlot.prototype.wheelEvent=function(a){if(e=a||window.event,this.isOverBox()){var b=e.deltaY,c=this.parent.CENTER,d=this.getModifier(e);this.zoomingIsActive&&(c===this.increaseZoomButton&&d===this.increaseZoomKeyModifier&&b>0?(this.resetIsActive&&this.saveResetLimits(),this.zoom(this.zoomFactor,this.parent.mouseX,this.parent.mouseY)):c===this.decreaseZoomButton&&d===this.decreaseZoomKeyModifier&&0>b&&(this.resetIsActive&&this.saveResetLimits(),this.zoom(1/this.zoomFactor,this.parent.mouseX,this.parent.mouseY)))}},GPlot.prototype.preventDefaultEvent=function(a){e=a||window.event,this.isOverBox()&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},GPlot.prototype.preventWheelDefault=function(){window.addEventListener("wheel",this.preventDefaultEvent.bind(this),!1)},GPlot.prototype.preventRightClickDefault=function(){window.addEventListener("contextmenu",this.preventDefaultEvent.bind(this),!1)};