File: /home/barbeatleanalyti/www/baris.beatleanalytics.com/theme/black/rgraph/RGraph.scatter.js
RGraph=window.RGraph||{isRGraph:true};RGraph.Scatter=function(conf)
{if(typeof conf==='object'&&typeof conf.data==='object'&&typeof conf.id==='string'){var parseConfObjectForOptions=true;this.data=new Array(conf.data.length);this.data=RGraph.arrayClone(conf.data);if(typeof conf.data==='object'&&typeof conf.data[0]==='object'&&(typeof conf.data[0][0]==='number'||typeof conf.data[0][0]==='string')){var tmp=RGraph.arrayClone(conf.data);conf.data=new Array();conf.data[0]=RGraph.arrayClone(tmp);this.data=RGraph.arrayClone(conf.data);}}else{var conf={id:conf};conf.data=arguments[1];this.data=[];if(arguments[1][0]&&arguments[1][0][0]&&typeof arguments[1][0][0]=='object'){for(var i=0;i<arguments[1].length;++i){this.data[i]=RGraph.arrayClone(arguments[1][i]);}}else{for(var i=1;i<arguments.length;++i){this.data[i-1]=RGraph.arrayClone(arguments[i]);}}}
if(!RGraph.isArray(this.data[0][0])){this.data=[this.data];}
for(var i=0,len=this.data.length;i<len;++i){for(var j=0,len2=this.data[i].length;j<len2;++j){if(typeof this.data[i][j]==='object'&&!RGraph.isNull(this.data[i][j])&&typeof this.data[i][j][0]==='string'){if(this.data[i][j][0].match(/^[.0-9]+$/)){this.data[i][j][0]=parseFloat(this.data[i][j][0]);}else if(this.data[i][j][0]===''){this.data[i][j][0]=0;}}
if(typeof this.data[i][j]==='object'&&!RGraph.isNull(this.data[i][j])&&typeof this.data[i][j][1]==='string'){if(this.data[i][j][1].match(/[.0-9]+/)){this.data[i][j][1]=parseFloat(this.data[i][j][1]);}else if(this.data[i][j][1]===''){this.data[i][j][1]=0;}}}}
this.id=conf.id;this.canvas=document.getElementById(this.id);this.canvas.__object__=this;this.context=this.canvas.getContext?this.canvas.getContext('2d'):null;this.max=0;this.coords=[];this.type='scatter';this.isRGraph=true;this.uid=RGraph.CreateUID();this.canvas.uid=this.canvas.uid?this.canvas.uid:RGraph.CreateUID();this.colorsParsed=false;this.coordsText=[];this.original_colors=[];this.firstDraw=true;this.propertyNameAliases={};this.properties={'chart.background.bars.count':null,'chart.background.bars.color1':'rgba(0,0,0,0)','chart.background.bars.color2':'rgba(0,0,0,0)','chart.background.hbars':null,'chart.background.vbars':null,'chart.background.grid':true,'chart.background.grid.linewidth':1,'chart.background.grid.color':'#ddd','chart.background.grid.hsize':20,'chart.background.grid.vsize':20,'chart.background.grid.vlines':true,'chart.background.grid.hlines':true,'chart.background.grid.border':true,'chart.background.grid.autofit':true,'chart.background.grid.autofit.align':true,'chart.background.grid.hlines.count':5,'chart.background.grid.vlines.count':20,'chart.background.image':null,'chart.background.image.stretch':true,'chart.background.image.x':null,'chart.background.image.y':null,'chart.background.image.w':null,'chart.background.image.h':null,'chart.background.image.align':null,'chart.background.color':null,'chart.colors.bubble.graduated':true,'chart.text.color':'black','chart.text.font':'Arial, Verdana, sans-serif','chart.text.size':12,'chart.text.bold':false,'chart.text.italic':false,'chart.text.accessible':true,'chart.text.accessible.overflow':'visible','chart.text.accessible.pointerevents':false,'chart.tooltips':[],'chart.tooltips.effect':'fade','chart.tooltips.event':'onmousemove','chart.tooltips.hotspot':3,'chart.tooltips.css.class':'RGraph_tooltip','chart.tooltips.highlight':true,'chart.tooltips.coords.page':false,'chart.xaxis':true,'chart.xaxis.position':'bottom','chart.xaxis.tickmarks.count':true,'chart.xaxis.tickmarks.last':true,'chart.xaxis.title':'','chart.xaxis.title.bold':null,'chart.xaxis.title.size':null,'chart.xaxis.title.font':null,'chart.xaxis.title.color':null,'chart.xaxis.title.italic':null,'chart.xaxis.title.pos':null,'chart.xaxis.title.x':null,'chart.xaxis.title.y':null,'chart.xaxis.labels.specific.align':'left','chart.xaxis.scale':false,'chart.xaxis.scale.min':0,'chart.xaxis.scale.max':null,'chart.xaxis.scale.units.pre':'','chart.xaxis.scale.units.post':'','chart.xaxis.scale.labels.count':10,'chart.xaxis.scale.formatter':null,'chart.xaxis.scale.decimals':0,'chart.xaxis.scale.thousand':',','chart.xaxis.scale.point':'.','chart.xaxis.labels.angle':0,'chart.xaxis.labels':[],'chart.xaxis.labels.bold':null,'chart.xaxis.labels.italic':null,'chart.xaxis.labels.color':null,'chart.xaxis.labels.font':null,'chart.xaxis.labels.size':null,'chart.xaxis.labels.offsetx':0,'chart.xaxis.labels.offsety':0,'chart.yaxis':true,'chart.yaxis.position':'left','chart.yaxis.labels':true,'chart.yaxis.labels.offsetx':0,'chart.yaxis.labels.offsety':0,'chart.yaxis.labels.count':5,'chart.yaxis.labels.specific':null,'chart.yaxis.labels.inside':false,'chart.yaxis.labels.font':null,'chart.yaxis.labels.size':null,'chart.yaxis.labels.color':null,'chart.yaxis.labels.bold':null,'chart.yaxis.labels.italic':null,'chart.yaxis.tickmarks.count':10,'chart.yaxis.scale.invert':false,'chart.yaxis.scale.units.pre':'','chart.yaxis.scale.units.post':'','chart.yaxis.scale.max':null,'chart.yaxis.scale.min':0,'chart.yaxis.scale.decimals':0,'chart.yaxis.scale.point':'.','chart.yaxis.scale.thousand':',','chart.yaxis.scale.zerostart':true,'chart.yaxis.title':'','chart.yaxis.title.bold':null,'chart.yaxis.title.italic':null,'chart.yaxis.title.size':null,'chart.yaxis.title.font':null,'chart.yaxis.title.color':null,'chart.yaxis.title.pos':null,'chart.yaxis.title.x':null,'chart.yaxis.title.y':null,'chart.tickmarks.style':'cross','chart.tickmarks.style.image.halign':'center','chart.tickmarks.style.image.valign':'center','chart.tickmarks.style.image.offsetx':0,'chart.tickmarks.style.image.offsety':0,'chart.tickmarks.size':5,'chart.margin.left':25,'chart.margin.right':25,'chart.margin.top':25,'chart.margin.bottom':30,'chart.title':'','chart.title.background':null,'chart.title.hpos':null,'chart.title.vpos':null,'chart.title.bold':null,'chart.title.italic':null,'chart.title.font':null,'chart.title.size':null,'chart.title.italic':null,'chart.title.x':null,'chart.title.y':null,'chart.title.halign':null,'chart.title.valign':null,'chart.labels.ingraph':null,'chart.labels.ingraph.font':null,'chart.labels.ingraph.size':null,'chart.labels.ingraph.color':null,'chart.labels.ingraph.bold':null,'chart.labels.ingraph.italic':null,'chart.labels.above':false,'chart.labels.above.size':null,'chart.labels.above.font':null,'chart.labels.above.color':null,'chart.labels.above.bold':null,'chart.labels.above.italic':null,'chart.labels.above.decimals':0,'chart.contextmenu':null,'chart.colors.default':'black','chart.crosshairs':false,'chart.crosshairs.hline':true,'chart.crosshairs.vline':true,'chart.crosshairs.color':'#333','chart.crosshairs.linewidth':1,'chart.crosshairs.coords':false,'chart.crosshairs.coords.fixed':true,'chart.crosshairs.coords.fadeout':false,'chart.crosshairs.coords.labels.x':'X','chart.crosshairs.coords.labels.y':'Y','chart.crosshairs.coords.formatter.x':null,'chart.crosshairs.coords.formatter.y':null,'chart.annotatable':false,'chart.annotatable.color':'black','chart.annotatable.linewidth':1,'chart.line':false,'chart.line.linewidth':1,'chart.line.colors':['green','red','blue','orange','pink','brown','black','gray'],'chart.line.shadow.color':'rgba(0,0,0,0)','chart.line.shadow.blur':2,'chart.line.shadow.offsetx':3,'chart.line.shadow.offsety':3,'chart.line.stepped':false,'chart.line.visible':true,'chart.axes':true,'chart.axes.color':'black','chart.axes.linewidth':1,'chart.key':null,'chart.key.background':'white','chart.key.position':'graph','chart.key.halign':'right','chart.key.shadow':false,'chart.key.shadow.color':'#666','chart.key.shadow.blur':3,'chart.key.shadow.offsetx':2,'chart.key.shadow.offsety':2,'chart.key.position.gutter.boxed':false,'chart.key.position.x':null,'chart.key.position.y':null,'chart.key.interactive':false,'chart.key.interactive.highlight.chart.fill':'rgba(255,0,0,0.9)','chart.key.interactive.highlight.label':'rgba(255,0,0,0.2)','chart.key.color.shape':'square','chart.key.rounded':true,'chart.key.linewidth':1,'chart.key.colors':null,'chart.key.labels.color':null,'chart.key.labels.font':null,'chart.key.labels.size':null,'chart.key.labels.bold':null,'chart.key.labels.italic':null,'chart.key.labels.offsetx':0,'chart.key.labels.offsety':0,'chart.boxplot.width':10,'chart.boxplot.capped':true,'chart.resizable':false,'chart.resizable.handle.background':null,'chart.events.mousemove':null,'chart.events.click':null,'chart.highlight.stroke':'rgba(0,0,0,0)','chart.highlight.fill':'rgba(255,255,255,0.7)','chart.clearto':'rgba(0,0,0,0)','chart.animation.trace':false,'chart.animation.trace.clip':1}
for(var i=0;i<this.data.length;++i){for(var j=0;j<this.data[i].length;++j){if(RGraph.isNull(this.data[i][j])){this.data[i][j]=[];}
if(this.data[i][j]&&typeof(this.data[i][j][0])=='string'){this.data[i][j][0]=RGraph.parseDate(this.data[i][j][0]);}}}
this.data_arr=[];for(var i=0;i<this.data.length;++i){for(var j=0;j<this.data[i].length;++j){this.data_arr.push(this.data[i][j]);}}
for(var i=0;i<this.data_arr.length;++i){this['$'+i]={}}
if(!this.canvas){alert('[SCATTER] No canvas support');return;}
if(!this.canvas.__rgraph_aa_translated__){this.context.translate(0.5,0.5);this.canvas.__rgraph_aa_translated__=true;}
var RG=RGraph,ca=this.canvas,co=ca.getContext('2d'),prop=this.properties,pa2=RG.path2,win=window,doc=document,ma=Math
if(RG.Effects&&typeof RG.Effects.decorate==='function'){RG.Effects.decorate(this);}
this.set=this.Set=function(name)
{var value=typeof arguments[1]==='undefined'?null:arguments[1];if(arguments.length===1&&typeof name==='object'){RG.parseObjectStyleConfig(this,name);return this;}
if(name.substr(0,6)!='chart.'){name='chart.'+name;}
while(name.match(/([A-Z])/)){name=name.replace(/([A-Z])/,'.'+RegExp.$1.toLowerCase());}
prop[name.toLowerCase()]=value;return this;};this.get=this.Get=function(name)
{if(name.substr(0,6)!='chart.'){name='chart.'+name;}
while(name.match(/([A-Z])/)){name=name.replace(/([A-Z])/,'.'+RegExp.$1.toLowerCase());}
return prop[name];};this.draw=this.Draw=function()
{if(typeof prop['chart.background.image']==='string'){RG.DrawBackgroundImage(this);}
RG.fireCustomEvent(this,'onbeforedraw');if(!this.colorsParsed){this.parseColors();this.colorsParsed=true;}
this.coordsText=[];this.marginLeft=prop['chart.margin.left'];this.marginRight=prop['chart.margin.right'];this.marginTop=prop['chart.margin.top'];this.marginBottom=prop['chart.margin.bottom'];this.hasTooltips=false;var overHotspot=false;this.coords=[];if(typeof(prop['chart.xaxis.scale.min'])=='string')prop['chart.xaxis.scale.min']=RG.parseDate(prop['chart.xaxis.scale.min']);if(typeof(prop['chart.xaxis.scale.max'])=='string')prop['chart.xaxis.scale.max']=RG.parseDate(prop['chart.xaxis.scale.max']);this.Set('chart.tooltips',[]);for(var i=0,len=this.data.length;i<len;i+=1){for(var j=0,len2=this.data[i].length;j<len2;j+=1){if(this.data[i][j]&&this.data[i][j][3]){prop['chart.tooltips'].push(this.data[i][j][3]);this.hasTooltips=true;}else{prop['chart.tooltips'].push(null);}}}
this.max=0;if(typeof prop['chart.yaxis.scale.max']==='number'){this.max=prop['chart.yaxis.scale.max'];this.min=prop['chart.yaxis.scale.min']?prop['chart.yaxis.scale.min']:0;this.scale2=RG.getScale2(this,{'scale.max':this.max,'scale.min':this.min,'scale.strict':true,'scale.thousand':prop['chart.yaxis.scale.thousand'],'scale.point':prop['chart.yaxis.scale.point'],'scale.decimals':prop['chart.yaxis.scale.decimals'],'scale.labels.count':prop['chart.yaxis.labels.count'],'scale.round':prop['chart.yaxis.scale.round'],'scale.units.pre':prop['chart.yaxis.scale.units.pre'],'scale.units.post':prop['chart.yaxis.scale.units.post']});this.max=this.scale2.max;this.min=this.scale2.min;var decimals=prop['chart.yaxis.scale.decimals'];}else{var i=0;var j=0;for(i=0,len=this.data.length;i<len;i+=1){for(j=0,len2=this.data[i].length;j<len2;j+=1){if(!RG.isNull(this.data[i][j])&&this.data[i][j][1]!=null){this.max=Math.max(this.max,typeof(this.data[i][j][1])=='object'?RG.array_max(this.data[i][j][1]):Math.abs(this.data[i][j][1]));}}}
this.min=prop['chart.yaxis.scale.min']?prop['chart.yaxis.scale.min']:0;this.scale2=RG.getScale2(this,{'scale.max':this.max,'scale.min':this.min,'scale.thousand':prop['chart.yaxis.scale.thousand'],'scale.point':prop['chart.yaxis.scale.point'],'scale.decimals':prop['chart.yaxis.scale.decimals'],'scale.labels.count':prop['chart.yaxis.labels.count'],'scale.round':prop['chart.yaxis.scale.round'],'scale.units.pre':prop['chart.yaxis.scale.units.pre'],'scale.units.post':prop['chart.yaxis.scale.units.post']});this.max=this.scale2.max;this.min=this.scale2.min;}
this.grapharea=ca.height-this.marginTop-this.marginBottom;RG.background.Draw(this);if(prop['chart.background.hbars']&&prop['chart.background.hbars'].length){RG.DrawBars(this);}
if(prop['chart.background.vbars']&&prop['chart.background.vbars'].length){this.DrawVBars();}
if(prop['chart.axes']){this.DrawAxes();}
this.DrawLabels();if(prop['chart.animation.trace']){co.save();co.beginPath();co.rect(0,0,ca.width*prop['chart.animation.trace.clip'],ca.height);co.clip();}
for(i=0;i<this.data.length;++i){this.DrawMarks(i);co.shadowColor=prop['chart.line.shadow.color'];co.shadowOffsetX=prop['chart.line.shadow.offsetx'];co.shadowOffsetY=prop['chart.line.shadow.offsety'];co.shadowBlur=prop['chart.line.shadow.blur'];this.DrawLine(i);RG.NoShadow(this);}
if(prop['chart.line']){for(var i=0,len=this.data.length;i<len;i+=1){this.DrawMarks(i);}}
if(prop['chart.animation.trace']){co.restore();}
if(prop['chart.contextmenu']){RG.ShowContext(this);}
if(prop['chart.key']&&prop['chart.key'].length){RG.DrawKey(this,prop['chart.key'],prop['chart.line.colors']);}
if(prop['chart.labels.above']){this.DrawAboveLabels();}
this.DrawInGraphLabels(this);if(prop['chart.resizable']){RG.AllowResizing(this);}
RG.InstallEventListeners(this);if(this.firstDraw){this.firstDraw=false;RG.fireCustomEvent(this,'onfirstdraw');this.firstDrawFunc();}
RG.FireCustomEvent(this,'ondraw');return this;}
this.drawAxes=this.DrawAxes=function()
{var graphHeight=ca.height-this.marginTop-this.marginBottom;co.beginPath();co.strokeStyle=prop['chart.axes.color'];co.lineWidth=(prop['chart.axes.linewidth']||1)+0.001;if(prop['chart.yaxis']){if(prop['chart.yaxis.position']=='left'){co.moveTo(this.marginLeft,this.marginTop);co.lineTo(this.marginLeft,ca.height-this.marginBottom);}else{co.moveTo(ca.width-this.marginRight,this.marginTop);co.lineTo(ca.width-this.marginRight,ca.height-this.marginBottom);}}
if(prop['chart.xaxis']){if(prop['chart.xaxis.position']=='center'){co.moveTo(this.marginLeft,ma.round(this.marginTop+((ca.height-this.marginTop-this.marginBottom)/2)));co.lineTo(ca.width-this.marginRight,ma.round(this.marginTop+((ca.height-this.marginTop-this.marginBottom)/2)));}else{var y=this.getYCoord(this.scale2.min>0?this.scale2.min:0);if(prop['chart.yaxis.scale.invert']&&this.scale2.min===0){y=ca.height-this.marginBottom;}
co.moveTo(this.marginLeft,y);co.lineTo(ca.width-this.marginRight,y);}}
if(prop['chart.yaxis']){var numyticks=prop['chart.yaxis.tickmarks.count'];for(i=0;i<numyticks;++i){var y=((ca.height-this.marginTop-this.marginBottom)/numyticks)*i;y=y+this.marginTop;if(prop['chart.xaxis.position']=='center'&&i==(numyticks/2)){continue;}
if(prop['chart.yaxis.position']=='left'){co.moveTo(this.marginLeft,ma.round(y));co.lineTo(this.marginLeft-3,ma.round(y));}else{co.moveTo(ca.width-this.marginRight+3,Math.round(y));co.lineTo(ca.width-this.marginRight,Math.round(y));}}
if(prop['chart.yaxis.tickmarks.count']>0){if(prop['chart.xaxis.position']==='center'&&prop['chart.yaxis.position']=='left'){co.moveTo(this.marginLeft,ma.round(ca.height-this.marginBottom));co.lineTo(this.marginLeft-3,ma.round(ca.height-this.marginBottom));}else if(prop['chart.xaxis.position']==='center'&&prop['chart.yaxis.position']=='right'){co.moveTo(ca.width-this.marginRight+3,ma.round(ca.height-this.marginBottom));co.lineTo(ca.width-this.marginRight,ma.round(ca.height-this.marginBottom));}}
if(!prop['chart.xaxis']&&prop['chart.yaxis.position']==='left'){co.moveTo(this.marginLeft,ma.round(ca.height-this.marginBottom));co.lineTo(this.marginLeft-3,ma.round(ca.height-this.marginBottom));}else if(!prop['chart.xaxis']&&prop['chart.yaxis.position']==='right'){co.moveTo(ca.width-this.marginRight,ma.round(ca.height-this.marginBottom));co.lineTo(ca.width-this.marginRight+3,ma.round(ca.height-this.marginBottom));}
if(prop['chart.xaxis.position']==='bottom'&&prop['chart.yaxis.tickmarks.count']>0&&prop['chart.yaxis.scale.min']<0){if(prop['chart.yaxis.position']=='left'){co.moveTo(this.marginLeft,ma.round(this.getYCoord(prop['chart.yaxis.scale.min'])));co.lineTo(this.marginLeft-3,ma.round(this.getYCoord(prop['chart.yaxis.scale.min'])));}else{co.moveTo(ca.width-this.marginRight+3,ma.round(this.getYCoord(prop['chart.yaxis.scale.min'])));co.lineTo(ca.width-this.marginRight,ma.round(this.getYCoord(prop['chart.yaxis.scale.min'])));}}}
if(prop['chart.xaxis.tickmarks.count']>0&&prop['chart.xaxis']){var x=0,y=this.getYCoord(prop['chart.yaxis.scale.invert']?this.scale2.max:(this.scale2.max>0&&this.scale2.min>0?this.scale2.min:0))-3,size=3;if(prop['chart.yaxis.scale.min']===0&&prop['chart.xaxis.position']==='bottom'){y+=3;}
if(this.scale2.max>0&&this.scale2.min>0){y+=3;}
this.xTickGap=(prop['chart.xaxis.labels']&&prop['chart.xaxis.labels'].length)?((ca.width-this.marginLeft-this.marginRight)/prop['chart.xaxis.labels'].length):(ca.width-this.marginLeft-this.marginRight)/10;if(typeof(prop['chart.xaxis.tickmarks.count'])=='number'){this.xTickGap=(ca.width-this.marginLeft-this.marginRight)/prop['chart.xaxis.tickmarks.count'];}
for(x=(this.marginLeft+(prop['chart.yaxis.position']=='left'&&prop['chart.yaxis']?this.xTickGap:0));x<=(ca.width-this.marginRight-(prop['chart.yaxis.position']=='left'||!prop['chart.yaxis']?-1:1));x+=this.xTickGap){if(prop['chart.yaxis.position']=='left'&&!prop['chart.xaxis.tickmarks.last']&&x==(ca.width-this.marginRight)){continue;}else if(prop['chart.yaxis.position']=='right'&&!prop['chart.xaxis.tickmarks.last']&&x==this.marginLeft){continue;}
co.moveTo(ma.round(x),y);co.lineTo(ma.round(x),y+(prop['chart.xaxis.position']==='center'||prop['chart.yaxis.scale.min']<0?size*2:size));}}
co.stroke();co.lineWidth=1;};this.drawLabels=this.DrawLabels=function()
{co.fillStyle=prop['chart.text.color'];var font=prop['chart.text.font'],xMin=prop['chart.xaxis.scale.min'],xMax=prop['chart.xaxis.scale.max'],yMax=this.scale2.max,yMin=prop['chart.yaxis.scale.min']?prop['chart.yaxis.scale.min']:0,text_size=prop['chart.text.size'],units_pre=prop['chart.yaxis.scale.units.pre'],units_post=prop['chart.yaxis.scale.units.post'],numYLabels=prop['chart.yaxis.labels.count'],invert=prop['chart.yaxis.scale.invert'],inside=prop['chart.yaxis.labels.inside'],context=co,canvas=ca,boxed=false,offsetx=prop['chart.yaxis.labels.offsetx'],offsety=prop['chart.yaxis.labels.offsety']
this.halfTextHeight=text_size/2;this.halfGraphHeight=(ca.height-this.marginTop-this.marginBottom)/2;if(prop['chart.yaxis.labels']){var xPos=prop['chart.yaxis.position']=='left'?this.marginLeft-5:ca.width-this.marginRight+5;var align=prop['chart.yaxis.position']=='right'?'left':'right';if(inside){if(prop['chart.yaxis.position']=='left'){xPos=prop['chart.margin.left']+5;align='left';boxed=true;}else{xPos=ca.width-prop['chart.margin.right']-5;align='right';boxed=true;}}
var textConf=RG.getTextConf({object:this,prefix:'chart.yaxis.labels'});if(prop['chart.xaxis.position']==='center'){if(typeof(prop['chart.yaxis.labels.specific'])=='object'&&prop['chart.yaxis.labels.specific']!=null&&prop['chart.yaxis.labels.specific'].length){var labels=prop['chart.yaxis.labels.specific'];if(prop['chart.yaxis.scale.min']>0){labels=[];for(var i=0;i<(prop['chart.yaxis.labels.specific'].length-1);++i){labels.push(prop['chart.yaxis.labels.specific'][i]);}}
for(var i=0;i<labels.length;++i){var y=this.marginTop+(i*(this.grapharea/(labels.length*2)));RG.text2(this,{font:textConf.font,size:textConf.size,color:textConf.color,bold:textConf.bold,italic:textConf.italic,x:xPos+offsetx,y:y+offsety,text:labels[i],valign:'center',halign:align,bounding:boxed,tag:'labels.specific'});}
var reversed_labels=RG.array_reverse(labels);for(var i=0;i<reversed_labels.length;++i){var y=this.marginTop+(this.grapharea/2)+((i+1)*(this.grapharea/(labels.length*2)));RG.Text2(this,{font:textConf.font,size:textConf.size,color:textConf.color,bold:textConf.bold,italic:textConf.italic,x:xPos+offsetx,y:y+offsety,text:reversed_labels[i],valign:'center',halign:align,bounding:boxed,tag:'labels.specific'});}
if(prop['chart.yaxis.scale.min']!=0){RG.text2(this,{font:textConf.font,size:textConf.size,color:textConf.color,bold:textConf.bold,italic:textConf.italic,x:xPos+offsetx,y:(this.grapharea/2)+this.marginTop+offsety,text:prop['chart.yaxis.labels.specific'][prop['chart.yaxis.labels.specific'].length-1],valign:'center',halign:align,bounding:boxed,tag:'labels.specific'});}}
if(!prop['chart.yaxis.labels.specific']&&typeof numYLabels=='number'){for(var i=0,len=this.scale2.labels.length;i<len;i+=1){if(!invert){RG.text2(this,{font:textConf.font,size:textConf.size,color:textConf.color,bold:textConf.bold,italic:textConf.italic,x:xPos+offsetx,y:this.marginTop+this.halfGraphHeight-(((i+1)/numYLabels)*this.halfGraphHeight)+offsety,valign:'center',halign:align,bounding:boxed,boundingFill:'white',text:this.scale2.labels[i],tag:'scale'});}else{RG.text2(this,{font:textConf.font,size:textConf.size,color:textConf.color,bold:textConf.bold,italic:textConf.italic,x:xPos+offsetx,y:this.marginTop+this.halfGraphHeight-((i/numYLabels)*this.halfGraphHeight)+offsety,valign:'center',halign:align,bounding:boxed,boundingFill:'white',text:this.scale2.labels[this.scale2.labels.length-(i+1)],tag:'scale'});}}
for(var i=0,len=this.scale2.labels.length;i<len;i+=1){if(!invert){RG.text2(this,{font:textConf.font,size:textConf.size,color:textConf.color,bold:textConf.bold,italic:textConf.italic,x:xPos+offsetx,y:this.marginTop+this.halfGraphHeight+this.halfGraphHeight-((i/numYLabels)*this.halfGraphHeight)+offsety,valign:'center',halign:align,bounding:boxed,boundingFill:'white',text:'-'+this.scale2.labels[len-(i+1)],tag:'scale'});}else{if(i==(len-1)&&invert){continue;}
RG.text2(this,{font:textConf.font,size:textConf.size,color:textConf.color,bold:textConf.bold,italic:textConf.italic,x:xPos+offsetx,y:this.marginTop+this.halfGraphHeight+this.halfGraphHeight-(((i+1)/numYLabels)*this.halfGraphHeight)+offsety,valign:'center',halign:align,bounding:boxed,boundingFill:'white',text:'-'+this.scale2.labels[i],tag:'scale'});}}
if(!invert&&(yMin>0||prop['chart.yaxis.scale.zerostart'])){RG.text2(this,{font:textConf.font,size:textConf.size,color:textConf.color,bold:textConf.bold,italic:textConf.italic,x:xPos+offsetx,y:this.marginTop+this.halfGraphHeight+offsety,valign:'center',halign:align,bounding:boxed,boundingFill:'white',text:RG.numberFormat({object:this,number:yMin.toFixed(this.scale2.min===0?0:prop['chart.yaxis.scale.decimals']),unitspre:units_pre,unitspost:units_post}),tag:'scale'});}
if(invert){RG.text2(this,{font:textConf.font,size:textConf.size,color:textConf.color,bold:textConf.bold,italic:textConf.italic,x:xPos+offsetx,y:this.marginTop+offsety,valign:'center',halign:align,bounding:boxed,boundingFill:'white',text:RG.numberFormat({object:this,number:yMin.toFixed(this.scale2.min===0?0:prop['chart.yaxis.scale.decimals']),unitspre:units_pre,unitspost:units_post}),tag:'scale'});RG.text2(this,{font:textConf.font,size:textConf.size,color:textConf.color,bold:textConf.bold,italic:textConf.italic,x:xPos+offsetx,y:this.marginTop+(this.halfGraphHeight*2)+offsety,valign:'center',halign:align,bounding:boxed,boundingFill:'white',text:'-'+RG.numberFormat({object:this,number:yMin.toFixed(this.scale2.min===0?0:prop['chart.yaxis.scale.decimals']),unitspre:units_pre,unitspost:units_post}),tag:'scale'});}}}else{var xPos=prop['chart.yaxis.position']=='left'?this.marginLeft-5:ca.width-this.marginRight+5;var align=prop['chart.yaxis.position']=='right'?'left':'right';if(inside){if(prop['chart.yaxis.position']=='left'){xPos=prop['chart.margin.left']+5;align='left';boxed=true;}else{xPos=ca.width-this.marginRight-5;align='right';boxed=true;}}
if(typeof prop['chart.yaxis.labels.specific']==='object'&&prop['chart.yaxis.labels.specific']){var labels=prop['chart.yaxis.labels.specific'];if(prop['chart.yaxis.scale.min']>9999){labels=[];for(var i=0;i<(prop['chart.yaxis.labels.specific'].length-1);++i){labels.push(prop['chart.yaxis.labels.specific'][i]);}}
for(var i=0,len=labels.length;i<len;i+=1){var y=this.marginTop+(i*(this.grapharea/(len-1)));RG.text2(this,{font:textConf.font,size:textConf.size,color:textConf.color,bold:textConf.bold,italic:textConf.italic,x:xPos+offsetx,y:y+offsety,text:labels[i],halign:align,valign:'center',bounding:boxed,tag:'scale'});}}else{if(typeof(numYLabels)=='number'){if(invert){for(var i=0;i<numYLabels;++i){var interval=(ca.height-this.marginTop-this.marginBottom)/numYLabels;RG.Text2(this,{font:textConf.font,size:textConf.size,color:textConf.color,bold:textConf.bold,italic:textConf.italic,x:xPos+offsetx,y:this.marginTop+((i+1)*interval)+offsety,valign:'center',halign:align,bounding:boxed,boundingFill:'white',text:this.scale2.labels[i],tag:'scale'});}
if(!prop['chart.xaxis']&&!prop['chart.yaxis.scale.min']){RG.text2(this,{font:textConf.font,size:textConf.size,color:textConf.color,bold:textConf.bold,italic:textConf.italic,x:xPos+offsetx,y:this.marginTop+offsety,valign:'center',halign:align,bounding:boxed,boundingFill:'white',text:RG.numberFormat({object:this,number:this.min.toFixed(this.scale2.min===0?0:prop['chart.yaxis.scale.decimals']),unitspre:units_pre,unitspost:units_post}),tag:'scale'});}}else{for(var i=0,len=this.scale2.labels.length;i<len;i+=1){RG.text2(this,{font:textConf.font,size:textConf.size,color:textConf.color,bold:textConf.bold,italic:textConf.italic,x:xPos+offsetx,y:this.marginTop+this.grapharea-(((i+1)/this.scale2.labels.length)*this.grapharea)+offsety,valign:'center',halign:align,bounding:boxed,boundingFill:'white',text:this.scale2.labels[i],tag:'scale'});}
if(!prop['chart.xaxis']&&prop['chart.yaxis.scale.min']===0){RG.text2(this,{font:textConf.font,size:textConf.size,color:textConf.color,bold:textConf.bold,italic:textConf.italic,x:xPos+offsetx,y:ca.height-this.marginBottom+offsety,valign:'center',halign:align,boundin:boxed,boundingFill:'white',text:RG.numberFormat({object:this,number:(0).toFixed(this.scale2.min===0?0:prop['chart.yaxis.scale.decimals']),unitspre:units_pre,unitspost:units_post,point:prop['chart.yaxis.scale.point'],thousand:prop['chart.yaxis.scale.thousand']}),tag:'scale'});}}}
if((prop['chart.yaxis.scale.min']||prop['chart.yaxis.scale.zerostart'])&&!invert){RG.text2(this,{font:textConf.font,size:textConf.size,color:textConf.color,bold:textConf.bold,italic:textConf.italic,x:xPos+offsetx,y:ca.height-this.marginBottom+offsety,valign:'center',halign:align,bounding:boxed,boundingFill:'white',text:RG.numberFormat({object:this,number:prop['chart.yaxis.scale.min'].toFixed(this.scale2.min===0?0:prop['chart.yaxis.scale.decimals']),unitspre:units_pre,unitspost:units_post,point:prop['chart.yaxis.scale.point'],thousand:prop['chart.yaxis.scale.thousand']}),tag:'scale'});}else if(invert){RG.text2(this,{font:textConf.font,size:textConf.size,color:textConf.color,bold:textConf.bold,italic:textConf.italic,x:xPos+offsetx,y:this.marginTop+offsety,valign:'center',halign:align,bounding:boxed,boundingFill:'white',text:RG.numberFormat({object:this,number:prop['chart.yaxis.scale.min'].toFixed(this.scale2.min===0?0:prop['chart.yaxis.scale.decimals']),unitspre:units_pre,unitspost:units_post,point:prop['chart.yaxis.scale.point'],thousand:prop['chart.yaxis.scale.thousand']}),tag:'scale'});}}}}
if(prop['chart.xaxis.scale']){var textConf=RG.getTextConf({object:this,prefix:'chart.xaxis.labels'});var numXLabels=prop['chart.xaxis.scale.labels.count'],y=ca.height-this.marginBottom+5+(text_size/2),units_pre_x=prop['chart.xaxis.scale.units.pre'],units_post_x=prop['chart.xaxis.scale.units.post'],decimals=prop['chart.xaxis.scale.decimals'],point=prop['chart.xaxis.scale.point'],thousand=prop['chart.xaxis.scale.thousand'],color=prop['chart.xaxis.labels.color'],bold=prop['chart.xaxis.labels.bold'],offsetx=prop['chart.xaxis.labels.offsetx'],offsety=prop['chart.xaxis.labels.offsety'],angle=prop['chart.xaxis.labels.angle'];if(angle>0){angle*=-1;valign='center';halign='right';y+=5;}else{valign='center';halign='center';}
if(!prop['chart.xaxis.scale.max']){var xmax=0;var xmin=prop['chart.xaxis.scale.min'];for(var ds=0,len=this.data.length;ds<len;ds+=1){for(var point=0,len2=this.data[ds].length;point<len2;point+=1){xmax=Math.max(xmax,this.data[ds][point][0]);}}}else{xmax=prop['chart.xaxis.scale.max'];xmin=prop['chart.xaxis.scale.min']}
this.xscale2=RG.getScale2(this,{'scale.max':xmax,'scale.min':xmin,'scale.decimals':decimals,'scale.point':point,'scale.thousand':thousand,'scale.units.pre':units_pre_x,'scale.units.post':units_post_x,'scale.labels.count':numXLabels,'scale.strict':true});this.Set('chart.xaxis.scale.max',this.xscale2.max);var interval=(ca.width-this.marginLeft-this.marginRight)/this.xscale2.labels.length;for(var i=0,len=this.xscale2.labels.length;i<len;i+=1){var num=((prop['chart.xaxis.scale.max']-prop['chart.xaxis.scale.min'])*((i+1)/numXLabels))+(xmin||0),x=this.marginLeft+((i+1)*interval),text=typeof prop['chart.xaxis.scale.formatter']==='function'?String(prop['chart.xaxis.scale.formatter'](this,num)):this.xscale2.labels[i];RG.text2(this,{font:textConf.font,size:textConf.size,color:textConf.color,bold:textConf.bold,italic:textConf.italic,x:x+offsetx,y:y+offsety,valign:valign,halign:halign,text:text,angle:angle,tag:'xscale'});}
var text=typeof prop['chart.xaxis.scale.formatter']==='function'?String(prop['chart.xaxis.scale.formatter'](this,prop['chart.xaxis.scale.min'])):String(prop['chart.xaxis.scale.min']);RG.text2(this,{font:textConf.font,size:textConf.size,color:textConf.color,bold:textConf.bold,italic:textConf.italic,x:this.marginLeft+offsetx,y:y+offsety,valign:'center',halign:'center',text:text,tag:'xscale',angle:angle});}else{var textConf=RG.getTextConf({object:this,prefix:'chart.xaxis.labels'});var graphArea=ca.width-this.marginLeft-this.marginRight;var xInterval=graphArea/prop['chart.xaxis.labels'].length;var xPos=this.marginLeft;var yPos=(ca.height-this.marginBottom)+3;var labels=prop['chart.xaxis.labels'];var color=prop['chart.xaxis.labels.color'];var bold=prop['chart.xaxis.labels.bold'];var offsetx=prop['chart.xaxis.labels.offsetx'];var offsety=prop['chart.xaxis.labels.offsety'];var angle=0;var valign='top';var halign='center';if(prop['chart.xaxis.labels.angle']>0){angle=-1*prop['chart.xaxis.labels.angle'];valign='center';halign='right';yPos+=10;}
for(i=0;i<labels.length;++i){if(typeof(labels[i])=='object'){if(prop['chart.xaxis.labels.specific.align']=='center'){var rightEdge=0;if(labels[i+1]&&labels[i+1][1]){rightEdge=labels[i+1][1];}else{rightEdge=prop['chart.xaxis.scale.max'];}
var offset=(this.getXCoord(rightEdge)-this.getXCoord(labels[i][1]))/2;}else{var offset=5;}
var xPos=this.getXCoord(labels[i][1]);if(RG.isNull(xPos)){continue;}
RG.text2(this,{font:textConf.font,size:textConf.size,color:textConf.color,bold:textConf.bold,italic:textConf.italic,x:xPos+offset+offsetx,y:yPos+offsety,valign:valign,halign:angle!=0?'right':(prop['chart.xaxis.labels.specific.align']=='center'?'center':'left'),text:String(labels[i][0]),angle:angle,marker:false,tag:'labels.specific'});co.beginPath();co.strokeStyle='#bbb';co.moveTo(ma.round(this.marginLeft+(graphArea*((labels[i][1]-xMin)/(prop['chart.xaxis.scale.max']-xMin)))),ca.height-this.marginBottom);co.lineTo(ma.round(this.marginLeft+(graphArea*((labels[i][1]-xMin)/(prop['chart.xaxis.scale.max']-xMin)))),ca.height-this.marginBottom+20);co.stroke();}else{RG.text2(this,{font:textConf.font,size:textConf.size,color:textConf.color,bold:textConf.bold,italic:textConf.italic,x:xPos+(xInterval/2)+offsetx,y:yPos+offsety,valign:valign,halign:halign,text:String(labels[i]),angle:angle,tag:'labels'});}
xPos+=xInterval;}
if(typeof(labels[0])=='object'){co.beginPath();co.strokeStyle='#bbb';co.moveTo(this.marginLeft+graphArea,ca.height-this.marginBottom);co.lineTo(this.marginLeft+graphArea,ca.height-this.marginBottom+20);co.stroke();}}};this.drawMarks=this.DrawMarks=function(i)
{this.coords[i]=[];var xmax=prop['chart.xaxis.scale.max'];var default_color=prop['chart.colors.default'];for(var j=0,len=this.data[i].length;j<len;j+=1){var data_points=this.data[i];if(RG.isNull(data_points[j])){continue;}
var xCoord=data_points[j][0];var yCoord=data_points[j][1];var color=data_points[j][2]?data_points[j][2]:default_color;var tooltip=(data_points[j]&&data_points[j][3])?data_points[j][3]:null;this.DrawMark(i,xCoord,yCoord,xmax,this.scale2.max,color,tooltip,this.coords[i],data_points,j);}};this.drawMark=this.DrawMark=function(data_set_index,x,y,xMax,yMax,color,tooltip,coords,data,data_index)
{var tickmarks=prop['chart.tickmarks.style'],tickSize=prop['chart.tickmarks.size'],xMin=prop['chart.xaxis.scale.min'],x=((x-xMin)/(xMax-xMin))*(ca.width-this.marginLeft-this.marginRight),originalX=x,originalY=y;if(tickmarks&&typeof(tickmarks)=='object'){tickmarks=tickmarks[data_set_index];}
if(typeof(tickSize)=='object'){var tickSize=tickSize[data_set_index];var halfTickSize=tickSize/2;}else{var halfTickSize=tickSize/2;}
if(y&&typeof y==='object'&&typeof y[0]==='number'&&typeof y[1]==='number'&&typeof y[2]==='number'&&typeof y[3]==='number'&&typeof y[4]==='number'){this.Set('chart.boxplot',true);var y0=this.getYCoord(y[0]),y1=this.getYCoord(y[1]),y2=this.getYCoord(y[2]),y3=this.getYCoord(y[3]),y4=this.getYCoord(y[4]),col1=y[5],col2=y[6],boxWidth=typeof y[7]=='number'?y[7]:prop['chart.boxplot.width'];}else{var yCoord=this.getYCoord(y);}
x+=this.marginLeft;co.beginPath();co.strokeStyle=color;if(prop['chart.boxplot']){boxWidth=(boxWidth/prop['chart.xaxis.scale.max'])*(ca.width-this.marginLeft-this.marginRight);var halfBoxWidth=boxWidth/2;if(prop['chart.line.visible']){co.beginPath();if(typeof y[8]==='string'){co.strokeStyle=y[8];}
co.strokeRect(x-halfBoxWidth,y1,boxWidth,y3-y1);if(col1){co.fillStyle=col1;co.fillRect(x-halfBoxWidth,y1,boxWidth,y2-y1);}
if(col2){co.fillStyle=col2;co.fillRect(x-halfBoxWidth,y2,boxWidth,y3-y2);}
co.stroke();co.beginPath();if(prop['chart.boxplot.capped']){co.moveTo(x-halfBoxWidth,ma.round(y0));co.lineTo(x+halfBoxWidth,ma.round(y0));}
co.moveTo(ma.round(x),y0);co.lineTo(ma.round(x),y1);if(prop['chart.boxplot.capped']){co.moveTo(x-halfBoxWidth,ma.round(y4));co.lineTo(x+halfBoxWidth,ma.round(y4));}
co.moveTo(ma.round(x),y4);co.lineTo(ma.round(x),y3);co.stroke();}}
if(prop['chart.line.visible']&&typeof(y)=='number'&&!y0&&!y1&&!y2&&!y3&&!y4){if(tickmarks=='circle'){co.arc(x,yCoord,halfTickSize,0,6.28,0);co.fillStyle=color;co.fill();}else if(tickmarks=='plus'){co.moveTo(x,yCoord-halfTickSize);co.lineTo(x,yCoord+halfTickSize);co.moveTo(x-halfTickSize,yCoord);co.lineTo(x+halfTickSize,yCoord);co.stroke();}else if(tickmarks=='square'){co.strokeStyle=color;co.fillStyle=color;co.fillRect(x-halfTickSize,yCoord-halfTickSize,tickSize,tickSize);}else if(tickmarks=='cross'){co.moveTo(x-halfTickSize,yCoord-halfTickSize);co.lineTo(x+halfTickSize,yCoord+halfTickSize);co.moveTo(x+halfTickSize,yCoord-halfTickSize);co.lineTo(x-halfTickSize,yCoord+halfTickSize);co.stroke();}else if(tickmarks=='diamond'){co.fillStyle=co.strokeStyle;co.moveTo(x,yCoord-halfTickSize);co.lineTo(x+halfTickSize,yCoord);co.lineTo(x,yCoord+halfTickSize);co.lineTo(x-halfTickSize,yCoord);co.lineTo(x,yCoord-halfTickSize);co.fill();co.stroke();}else if(typeof(tickmarks)=='function'){var graphWidth=ca.width-this.marginLeft-this.marginRight,graphheight=ca.height-this.marginTop-this.marginBottom,xVal=((x-this.marginLeft)/graphWidth)*xMax,yVal=((graphheight-(yCoord-this.marginTop))/graphheight)*yMax;tickmarks(this,data,x,yCoord,xVal,yVal,xMax,yMax,color,data_set_index,data_index)}else if(typeof tickmarks==='string'&&(tickmarks.substr(0,6)==='image:'||tickmarks.substr(0,5)==='data:'||tickmarks.substr(0,1)==='/'||tickmarks.substr(0,3)==='../'||tickmarks.substr(0,7)==='images/')){var img=new Image();if(tickmarks.substr(0,6)==='image:'){img.src=tickmarks.substr(6);}else{img.src=tickmarks;}
img.onload=function()
{if(prop['chart.tickmarks.style.image.halign']==='center')x-=(this.width/2);if(prop['chart.tickmarks.style.image.halign']==='right')x-=this.width;if(prop['chart.tickmarks.style.image.valign']==='center')yCoord-=(this.height/2);if(prop['chart.tickmarks.style.image.valign']==='bottom')yCoord-=this.height;x+=prop['chart.tickmarks.style.image.offsetx'];yCoord+=prop['chart.tickmarks.style.image.offsety'];co.drawImage(this,x,yCoord);}}else if(tickmarks===null){}else{alert('[SCATTER] ('+this.id+') Unknown tickmark style: '+tickmarks);}}
if(prop['chart.boxplot']&&typeof y0==='number'&&typeof y1==='number'&&typeof y2==='number'&&typeof y3==='number'&&typeof y4==='number'){x=[x-halfBoxWidth,x+halfBoxWidth];yCoord=[y0,y1,y2,y3,y4];}
coords.push([x,yCoord,tooltip]);};this.drawLine=this.DrawLine=function(i)
{if(typeof(prop['chart.line.visible'])=='boolean'&&prop['chart.line.visible']==false){return;}
if(prop['chart.line']&&this.coords[i].length>=2){if(prop['chart.line.dash']&&typeof co.setLineDash==='function'){co.setLineDash(prop['chart.line.dash']);}
co.lineCap='round';co.lineJoin='round';co.lineWidth=this.getLineWidth(i);co.strokeStyle=prop['chart.line.colors'][i];co.beginPath();var prevY=null;var currY=null;for(var j=0,len=this.coords[i].length;j<len;j+=1){var xPos=this.coords[i][j][0];var yPos=this.coords[i][j][1];if(j>0)prevY=this.coords[i][j-1][1];currY=yPos;if(j==0||RG.is_null(prevY)||RG.is_null(currY)){co.moveTo(xPos,yPos);}else{var stepped=prop['chart.line.stepped'];if((typeof stepped=='boolean'&&stepped)||(typeof stepped=='object'&&stepped[i])){co.lineTo(this.coords[i][j][0],this.coords[i][j-1][1]);}
co.lineTo(xPos,yPos);}}
co.stroke();if(prop['chart.line.dash']&&typeof co.setLineDash==='function'){co.setLineDash([1,0]);}}
co.lineWidth=1;};this.getLineWidth=this.GetLineWidth=function(i)
{var linewidth=prop['chart.line.linewidth'];if(typeof linewidth=='number'){return linewidth;}else if(typeof linewidth=='object'){if(linewidth[i]){return linewidth[i];}else{return linewidth[0];}
alert('[SCATTER] Error! chart.linewidth should be a single number or an array of one or more numbers');}};this.drawVBars=this.DrawVBars=function()
{var vbars=prop['chart.background.vbars'];var graphWidth=ca.width-this.marginLeft-this.marginRight;if(vbars){var xmax=prop['chart.xaxis.scale.max'];var xmin=prop['chart.xaxis.scale.min'];for(var i=0,len=vbars.length;i<len;i+=1){var key=i;var value=vbars[key];if(typeof value[0]=='string')value[0]=RG.parseDate(value[0]);if(typeof value[1]=='string')value[1]=RG.parseDate(value[1])-value[0];var x=(((value[0]-xmin)/(xmax-xmin))*graphWidth)+this.marginLeft;var width=(value[1]/(xmax-xmin))*graphWidth;co.fillStyle=value[2];co.fillRect(x,this.marginTop,width,(ca.height-this.marginTop-this.marginBottom));}}};this.drawInGraphLabels=this.DrawInGraphLabels=function(obj)
{var labels=obj.get('chart.labels.ingraph');var labels_processed=[];if(!labels){return;}
var fgcolor='black';var bgcolor='white';var direction=1;var textConf=RG.getTextConf({object:this,prefix:'chart.labels.ingraph'});for(var i=0,len=labels.length;i<len;i+=1){if(typeof(labels[i])=='number'){for(var j=0;j<labels[i];++j){labels_processed.push(null);}}else if(typeof(labels[i])=='string'||typeof(labels[i])=='object'){labels_processed.push(labels[i]);}else{labels_processed.push('');}}
RG.NoShadow(obj);if(labels_processed&&labels_processed.length>0){var i=0;for(var set=0;set<obj.coords.length;++set){for(var point=0;point<obj.coords[set].length;++point){if(labels_processed[i]){var x=obj.coords[set][point][0];var y=obj.coords[set][point][1];var length=typeof(labels_processed[i][4])=='number'?labels_processed[i][4]:25;var text_x=x;var text_y=y-5-length;co.moveTo(x,y-5);co.lineTo(x,y-5-length);co.stroke();co.beginPath();co.moveTo(x,y-5);co.lineTo(x-3,y-10);co.lineTo(x+3,y-10);co.closePath();co.beginPath();co.fillStyle=(typeof(labels_processed[i])=='object'&&typeof(labels_processed[i][1])=='string')?labels_processed[i][1]:'black';RG.text2(this,{font:textConf.font,size:textConf.size,color:textConf.color,bold:textConf.bold,italic:textConf.italic,x:text_x,y:text_y,text:(typeof(labels_processed[i])=='object'&&typeof(labels_processed[i][0])=='string')?labels_processed[i][0]:labels_processed[i],valign:'bottom',halign:'center',bounding:true,boundingFill:(typeof(labels_processed[i])=='object'&&typeof(labels_processed[i][2])=='string')?labels_processed[i][2]:'white',tag:'labels.ingraph'});co.fill();}
i++;}}}};this.getShape=this.getPoint=function(e)
{var mouseXY=RG.getMouseXY(e);var mouseX=mouseXY[0];var mouseY=mouseXY[1];var overHotspot=false;var offset=prop['chart.tooltips.hotspot'];for(var set=0,len=this.coords.length;set<len;++set){for(var i=0,len2=this.coords[set].length;i<len2;++i){var x=this.coords[set][i][0];var y=this.coords[set][i][1];var tooltip=this.data[set][i][3];if(typeof(y)=='number'){if(mouseX<=(x+offset)&&mouseX>=(x-offset)&&mouseY<=(y+offset)&&mouseY>=(y-offset)){var tooltip=RG.parseTooltipText(this.data[set][i][3],0);var index_adjusted=i;for(var ds=(set-1);ds>=0;--ds){index_adjusted+=this.data[ds].length;}
return{0:this,1:x,2:y,3:set,4:i,5:this.data[set][i][3],'object':this,'x':x,'y':y,'dataset':set,'index':i,'tooltip':tooltip,'index_adjusted':index_adjusted};}}else if(RG.is_null(y)){}else{var mark=this.data[set][i];var width=prop['chart.boxplot.width'];if(typeof(mark[1][7])=='number'){width=mark[1][7];}
if(typeof(x)=='object'&&mouseX>x[0]&&mouseX<x[1]&&mouseY<y[1]&&mouseY>y[3]){var tooltip=RG.parseTooltipText(this.data[set][i][3],0);return{0:this,1:x[0],2:x[1]-x[0],3:y[1],4:y[3]-y[1],5:set,6:i,7:this.data[set][i][3],'object':this,'x':x[0],'y':y[1],'width':x[1]-x[0],'height':y[3]-y[1],'dataset':set,'index':i,'tooltip':tooltip};}}}}};this.drawAboveLabels=this.DrawAboveLabels=function()
{var size=prop['chart.labels.above.size'];var font=prop['chart.text.font'];var units_pre=prop['chart.yaxis.scale.units.pre'];var units_post=prop['chart.yaxis.scale.units.post'];var textConf=RG.getTextConf({object:this,prefix:'chart.labels.above'});for(var set=0,len=this.coords.length;set<len;++set){for(var point=0,len2=this.coords[set].length;point<len2;++point){var x_val=this.data[set][point][0];var y_val=this.data[set][point][1];if(!RG.is_null(y_val)){if(RG.is_array(y_val)){var max=0;for(var i=0;i<y_val;++i){max=Math.max(max,y_val[i]);}
y_val=max;}
var x_pos=this.coords[set][point][0];var y_pos=this.coords[set][point][1];var xvalueFormatter=prop['chart.labels.above.formatter.x'];var yvalueFormatter=prop['chart.labels.above.formatter.y'];RG.text2(this,{font:textConf.font,size:textConf.size,color:textConf.color,bold:textConf.bold,italic:textConf.italic,x:x_pos,y:y_pos-5-size,text:(typeof xvalueFormatter==='function'?xvalueFormatter(this,x_val):x_val.toFixed(prop['chart.labels.above.decimals']))+', '+
(typeof yvalueFormatter==='function'?yvalueFormatter(this,y_val):y_val.toFixed(prop['chart.labels.above.decimals'])),valign:'center',halign:'center',bounding:true,boundingFill:'rgba(255, 255, 255, 0.7)',boundingStroke:'rgba(0,0,0,0.1)',tag:'labels.above'});}}}};this.getYValue=this.getValue=function(arg)
{if(arg.length==2){var mouseX=arg[0];var mouseY=arg[1];}else{var mouseCoords=RG.getMouseXY(arg);var mouseX=mouseCoords[0];var mouseY=mouseCoords[1];}
var obj=this;if(mouseY<this.marginTop||mouseY>(ca.height-this.marginBottom)||mouseX<this.marginLeft||mouseX>(ca.width-this.marginRight)){return null;}
if(prop['chart.xaxis.position']=='center'){var value=(((this.grapharea/2)-(mouseY-this.marginTop))/this.grapharea)*(this.max-this.min)
value*=2;if(value>=0){value+=this.min
if(prop['chart.yaxis.scale.invert']){value-=this.min;value=this.max-value;}}else{value-=this.min;if(prop['chart.yaxis.scale.invert']){value+=this.min;value=this.max+value;value*=-1;}}}else{var value=((this.grapharea-(mouseY-this.marginTop))/this.grapharea)*(this.max-this.min)
value+=this.min;if(prop['chart.yaxis.scale.invert']){value-=this.min;value=this.max-value;}}
return value;};this.getXValue=function(arg)
{if(arg.length==2){var mouseX=arg[0];var mouseY=arg[1];}else{var mouseXY=RG.getMouseXY(arg);var mouseX=mouseXY[0];var mouseY=mouseXY[1];}
var obj=this;if(mouseY<this.marginTop||mouseY>(ca.height-this.marginBottom)||mouseX<this.marginLeft||mouseX>(ca.width-this.marginRight)){return null;}
var width=(ca.width-this.marginLeft-this.marginRight);var value=((mouseX-this.marginLeft)/width)*(prop['chart.xaxis.scale.max']-prop['chart.xaxis.scale.min'])
value+=prop['chart.xaxis.scale.min'];return value;};this.highlight=this.Highlight=function(shape)
{if(typeof prop['chart.highlight.style']==='function'){(prop['chart.highlight.style'])(shape);}else{if(shape['height']){RG.Highlight.Rect(this,shape);}else{RG.Highlight.Point(this,shape);}}};this.getObjectByXY=function(e)
{var mouseXY=RG.getMouseXY(e);if(mouseXY[0]>(this.marginLeft-3)&&mouseXY[0]<(ca.width-this.marginRight+3)&&mouseXY[1]>(this.marginTop-3)&&mouseXY[1]<((ca.height-this.marginBottom)+3)){return this;}};this.getXCoord=function(value)
{if(typeof value!='number'&&typeof value!='string'){return null;}
if(typeof value==='string'){value=RG.parseDate(value);}
var xmin=prop['chart.xaxis.scale.min'];var xmax=prop['chart.xaxis.scale.max'];var x;if(value<xmin)return null;if(value>xmax)return null;var gutterRight=this.marginRight;var gutterLeft=this.marginLeft;if(prop['chart.yaxis.position']=='right'){x=((value-xmin)/(xmax-xmin))*(ca.width-gutterLeft-gutterRight);x=(ca.width-gutterRight-x);}else{x=((value-xmin)/(xmax-xmin))*(ca.width-gutterLeft-gutterRight);x=x+gutterLeft;}
return x;};this.getYCoord=this.getYCoordFromValue=function(value)
{if(typeof(value)!='number'){return null;}
var invert=prop['chart.yaxis.scale.invert'];var xaxispos=prop['chart.xaxis.position'];var graphHeight=ca.height-this.marginTop-this.marginBottom;var halfGraphHeight=graphHeight/2;var ymax=this.max;var ymin=prop['chart.yaxis.scale.min'];var coord=0;if(value>ymax||(prop['chart.xaxis.position']=='bottom'&&value<ymin)||(prop['chart.xaxis.position']=='center'&&((value>0&&value<ymin)||(value<0&&value>(-1*ymin))))){return null;}
if(xaxispos=='center'){coord=((Math.abs(value)-ymin)/(ymax-ymin))*halfGraphHeight;if(invert){coord=halfGraphHeight-coord;}
if(value<0){coord+=this.marginTop;coord+=halfGraphHeight;}else{coord=halfGraphHeight-coord;coord+=this.marginTop;}}else{coord=((value-ymin)/(ymax-ymin))*graphHeight;if(invert){coord=graphHeight-coord;}
coord=graphHeight-coord;coord=this.marginTop+coord;}
return coord;};RG.Scatter.Bubble=function(scatter,min,max,width,data)
{this.scatter=scatter;this.min=min;this.max=max;this.width=width;this.data=data;this.coords=[];this.type='scatter.bubble'
this.set=this.Set=function(name,value)
{this.scatter.set(name,value);return this;};this.get=this.Get=function(name)
{this.scatter.get(name);};this.draw=this.Draw=function()
{var bubble_min=this.min,bubble_max=this.max,bubble_data=this.data,bubble_max_width=this.width;var obj_bubble=this,obj_scatter=this.scatter;this.scatter.ondraw=function(obj)
{for(var i=0;i<obj.coords[0].length;++i){bubble_data[i]=ma.max(bubble_data[i],bubble_min);bubble_data[i]=ma.min(bubble_data[i],bubble_max);var r=((bubble_data[i]-bubble_min)/(bubble_max-bubble_min))*bubble_max_width,color=obj_scatter.data[0][i][2]?obj_scatter.data[0][i][2]:obj_scatter.properties['chart.colors.default'];co.beginPath();co.fillStyle=RG.radialGradient(obj,obj_scatter.coords[0][i][0]+(r/2.5),obj_scatter.coords[0][i][1]-(r/2.5),0,obj_scatter.coords[0][i][0]+(r/2.5),obj_scatter.coords[0][i][1]-(r/2.5),r,prop['chart.colors.bubble.graduated']?'white':color,color);co.arc(obj_scatter.coords[0][i][0],obj_scatter.coords[0][i][1],r,0,RG.TWOPI,false);co.fill();obj_bubble.coords[i]=[obj_scatter.coords[0][i][0],obj_scatter.coords[0][i][1],r,co.fillStyle];}}
this.scatter.Draw();return this;};};this.parseColors=function()
{if(this.original_colors.length===0){this.original_colors['data']=RG.array_clone(this.data);this.original_colors['chart.background.vbars']=RG.array_clone(prop['chart.background.vbars']);this.original_colors['chart.background.hbars']=RG.array_clone(prop['chart.background.hbars']);this.original_colors['chart.line.colors']=RG.array_clone(prop['chart.line.colors']);this.original_colors['chart.colors.default']=RG.array_clone(prop['chart.colors.default']);this.original_colors['chart.crosshairs.color']=RG.array_clone(prop['chart.crosshairs.color']);this.original_colors['chart.highlight.stroke']=RG.array_clone(prop['chart.highlight.stroke']);this.original_colors['chart.highlight.fill']=RG.array_clone(prop['chart.highlight.fill']);this.original_colors['chart.background.bars.color1']=RG.array_clone(prop['chart.background.bars.color1']);this.original_colors['chart.background.bars.color2']=RG.array_clone(prop['chart.background.bars.color2']);this.original_colors['chart.background.grid.color']=RG.array_clone(prop['chart.background.grid.color']);this.original_colors['chart.background.color']=RG.array_clone(prop['chart.background.color']);this.original_colors['chart.axes.color']=RG.array_clone(prop['chart.axes.color']);}
var data=this.data;if(data){for(var dataset=0;dataset<data.length;++dataset){for(var i=0;i<this.data[dataset].length;++i){if(this.data[dataset][i]&&typeof(this.data[dataset][i][1])=='object'&&this.data[dataset][i][1]){if(typeof(this.data[dataset][i][1][5])=='string')this.data[dataset][i][1][5]=this.parseSingleColorForGradient(this.data[dataset][i][1][5]);if(typeof(this.data[dataset][i][1][6])=='string')this.data[dataset][i][1][6]=this.parseSingleColorForGradient(this.data[dataset][i][1][6]);}
if(!RG.isNull(this.data[dataset][i])){this.data[dataset][i][2]=this.parseSingleColorForGradient(this.data[dataset][i][2]);}}}}
var hbars=prop['chart.background.hbars'];if(hbars){for(i=0;i<hbars.length;++i){hbars[i][2]=this.parseSingleColorForGradient(hbars[i][2]);}}
var vbars=prop['chart.background.vbars'];if(vbars){for(i=0;i<vbars.length;++i){vbars[i][2]=this.parseSingleColorForGradient(vbars[i][2]);}}
var colors=prop['chart.line.colors'];if(colors){for(i=0;i<colors.length;++i){colors[i]=this.parseSingleColorForGradient(colors[i]);}}
prop['chart.colors.default']=this.parseSingleColorForGradient(prop['chart.colors.default']);prop['chart.crosshairs.color']=this.parseSingleColorForGradient(prop['chart.crosshairs.color']);prop['chart.highlight.stroke']=this.parseSingleColorForGradient(prop['chart.highlight.stroke']);prop['chart.highlight.fill']=this.parseSingleColorForGradient(prop['chart.highlight.fill']);prop['chart.background.bars.color1']=this.parseSingleColorForGradient(prop['chart.background.bars.color1']);prop['chart.background.bars.color2']=this.parseSingleColorForGradient(prop['chart.background.bars.color2']);prop['chart.background.grid.color']=this.parseSingleColorForGradient(prop['chart.background.grid.color']);prop['chart.background.color']=this.parseSingleColorForGradient(prop['chart.background.color']);prop['chart.axes.color']=this.parseSingleColorForGradient(prop['chart.axes.color']);};this.reset=function()
{};this.parseSingleColorForGradient=function(color)
{if(!color||typeof(color)!='string'){return color;}
if(color.match(/^gradient\((.*)\)$/i)){if(color.match(/^gradient\(({.*})\)$/i)){return RGraph.parseJSONGradient({object:this,def:RegExp.$1});}
if(color.match(/^gradient\(({.*})\)$/i)){return RGraph.parseJSONGradient({object:this,def:RegExp.$1});}
var parts=RegExp.$1.split(':');var grad=co.createLinearGradient(0,ca.height-prop['chart.margin.bottom'],0,prop['chart.margin.top']);var diff=1/(parts.length-1);grad.addColorStop(0,RG.trim(parts[0]));for(var j=1;j<parts.length;++j){grad.addColorStop(j*diff,RG.trim(parts[j]));}}
return grad?grad:color;};this.interactiveKeyHighlight=function(index)
{if(this.coords&&this.coords[index]&&this.coords[index].length){this.coords[index].forEach(function(value,idx,arr)
{co.beginPath();co.fillStyle=prop['chart.key.interactive.highlight.chart.fill'];co.arc(value[0],value[1],prop['chart.tickmarks.size']+3,0,RG.TWOPI,false);co.fill();});}};this.on=function(type,func)
{if(type.substr(0,2)!=='on'){type='on'+type;}
if(typeof this[type]!=='function'){this[type]=func;}else{RG.addCustomEventListener(this,type,func);}
return this;};this.firstDrawFunc=function()
{};this.trace=this.trace2=function()
{var obj=this,callback=arguments[2],opt=arguments[0]||{},frames=opt.frames||30,frame=0,callback=arguments[1]||function(){}
obj.Set('animationTrace',true);obj.Set('animationTraceClip',0);function iterator()
{RG.clear(obj.canvas);RG.redrawCanvas(obj.canvas);if(frame++<frames){obj.set('animationTraceClip',frame/frames);RG.Effects.updateCanvas(iterator);}else{callback(obj);}}
iterator();return this;};this.resetColorsToOriginalValues=function()
{for(var i=0,len=this.original_colors['data'].length;i<len;++i){for(var j=0,len2=this.original_colors['data'][i].length;j<len2;++j){this.data[i][j][2]=RG.array_clone(this.original_colors['data'][i][j][2]);if(typeof this.data[i][j][1]==='object'){this.data[i][j][1][5]=RG.array_clone(this.original_colors['data'][i][j][1][5]);this.data[i][j][1][6]=RG.array_clone(this.original_colors['data'][i][j][1][6]);}}}};RG.register(this);if(parseConfObjectForOptions){RG.parseObjectStyleConfig(this,conf.options);}};