HEX
Server: Apache
System: Linux 185.122.168.184.host.secureserver.net 5.14.0-570.60.1.el9_6.x86_64 #1 SMP PREEMPT_DYNAMIC Wed Nov 5 05:00:59 EST 2025 x86_64
User: barbeatleanalyti (1024)
PHP: 8.1.33
Disabled: NONE
Upload Files
File: /home/barbeatleanalyti/www/baris.beatleanalytics.com/theme/black/rgraph/RGraph.bipolar.js
RGraph=window.RGraph||{isRGraph:true};RGraph.Bipolar=function(conf)
{if(typeof conf==='object'&&typeof conf.left==='object'&&typeof conf.right==='object'&&typeof conf.id==='string'){var id=conf.id,canvas=document.getElementById(id),left=conf.left,right=conf.right,parseConfObjectForOptions=true}else{var id=conf,canvas=document.getElementById(id),left=arguments[1],right=arguments[2]}
this.id=id;this.canvas=canvas;this.context=this.canvas.getContext('2d');this.canvas.__object__=this;this.type='bipolar';this.coords=[];this.coords2=[];this.coordsLeft=[];this.coordsRight=[];this.coords2Left=[];this.coords2Right=[];this.max=0;this.isRGraph=true;this.uid=RGraph.CreateUID();this.canvas.uid=this.canvas.uid?this.canvas.uid:RGraph.CreateUID();this.coordsText=[];this.original_colors=[];this.firstDraw=true;this.propertyNameAliases={};var data=[left,right];for(var i=0;i<2;++i){data[i].forEach(function(v,k,arr)
{if(RGraph.isNull(v)){}else if(typeof v==='object'){v.forEach(function(v2,k2,arr2)
{arr[k][k2]=parseFloat(v2);});}else{arr[k]=parseFloat(v);}
arr[k]=RGraph.stringsToNumbers(arr[k]);});}
this.left=left;this.right=right;this.data=[left,right];this.properties={'chart.background.grid':true,'chart.background.grid.color':'#ddd','chart.background.grid.vlines':true,'chart.background.grid.hlines':true,'chart.background.grid.linewidth':1,'chart.background.grid.vlines.count':null,'chart.background.grid.hlines.count':null,'chart.vmargin':5,'chart.vmargin.grouped':3,'chart.xaxis':true,'chart.xaxis.tickmarks.count':5,'chart.xaxis.tickmarks.interval':null,'chart.xaxis.scale.units.pre':'','chart.xaxis.scale.units.post':'','chart.xaxis.scale.max':null,'chart.xaxis.scale.min':0,'chart.xaxis.scale.zerostart':true,'chart.xaxis.scale.decimals':null,'chart.xaxis.scale.point':'.','chart.xaxis.scale.thousand':',','chart.xaxis.labels':true,'chart.xaxis.labels.font':null,'chart.xaxis.labels.size':null,'chart.xaxis.labels.color':null,'chart.xaxis.labels.bold':null,'chart.xaxis.labels.italic':null,'chart.xaxis.labels.count':5,'chart.yaxis':true,'chart.yaxis.tickmarks.count':null,'chart.yaxis.labels':[],'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.labels.above':false,'chart.labels.above.font':null,'chart.labels.above.size':null,'chart.labels.above.bold':null,'chart.labels.above.italic':null,'chart.labels.above.color':null,'chart.labels.above.units.pre':'','chart.labels.above.units.post':'','chart.labels.above.decimals':0,'chart.labels.above.formatter':null,'chart.text.bold':false,'chart.text.italic':false,'chart.text.size':12,'chart.text.color':'black','chart.text.font':'Arial, Verdana, sans-serif','chart.text.accessible':true,'chart.text.accessible.overflow':'visible','chart.text.accessible.pointerevents':false,'chart.title.left':null,'chart.title.left.font':null,'chart.title.left.size':null,'chart.title.left.bold':null,'chart.title.left.italic':null,'chart.title.left.color':null,'chart.title.right':null,'chart.title.right.font':null,'chart.title.right.size':null,'chart.title.right.bold':null,'chart.title.right.italic':null,'chart.title.right.color':null,'chart.margin.center':0,'chart.margin.center.auto':true,'chart.margin.left':25,'chart.margin.right':25,'chart.margin.top':25,'chart.margin.bottom':30,'chart.title':null,'chart.title.font':null,'chart.title.size':null,'chart.title.bold':null,'chart.title.italic':null,'chart.title.color':null,'chart.title.background':null,'chart.title.hpos':null,'chart.title.vpos':null,'chart.title.x':null,'chart.title.y':null,'chart.title.halign':null,'chart.title.valign':null,'chart.colors.stroke':'rgba(0,0,0,0)','chart.colors':['#afa','#faa','#aaf','#aff','#ffa','#faf','cyan','brown','gray','black','pink','#afa','#faa','#aaf','#aff','#ffa','#faf','cyan','brown','gray','black','pink'],'chart.colors.sequential':false,'chart.contextmenu':null,'chart.tooltips':null,'chart.tooltips.effect':'fade','chart.tooltips.css.class':'RGraph_tooltip','chart.tooltips.highlight':true,'chart.tooltips.event':'onclick','chart.highlight.stroke':'rgba(0,0,0,0)','chart.highlight.fill':'rgba(255,255,255,0.7)','chart.shadow':false,'chart.shadow.color':'#ccc','chart.shadow.offsetx':3,'chart.shadow.offsety':3,'chart.shadow.blur':3,'chart.annotatable':false,'chart.annotatable.color':'black','chart.axes':true,'chart.axes.color':'black','chart.axes.linewidth':1,'chart.resizable':false,'chart.resizable.handle.background':null,'chart.events.mousemove':null,'chart.events.click':null,'chart.linewidth':1,'chart.variant.threed.offsetx':10,'chart.variant.threed.offsety':5,'chart.variant.threed.angle':0.1,'chart.grouping':'grouped','chart.clearto':'rgba(0,0,0,0)'}
this.properties['chart.yaxis.tickmarks.count']=this.left.length;var linear_data=RGraph.arrayLinearize(this.left,this.right);for(var i=0;i<linear_data.length;++i){this['$'+i]={};}
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]=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 this.properties[name.toLowerCase()];};this.draw=this.Draw=function()
{RG.fireCustomEvent(this,'onbeforedraw');if(!this.colorsParsed){this.parseColors();this.colorsParsed=true;}
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.marginCenter=prop['chart.margin.center'];this.marginCenterAuto=prop['chart.margin.center.auto'];if(prop['chart.margin.center.auto']&&!prop['chart.margin.center']){prop['chart.margin.center']=this.getMarginCenter();}
this.marginCenter=prop['chart.margin.center'];this.left=this.data[0];this.right=this.data[1];this.coords=[];this.coords2=[];this.coordsLeft=[];this.coordsRight=[];this.coords2Left=[];this.coords2Right=[];this.coordsText=[];if(prop['chart.variant']==='3d'){if(prop['chart.text.accessible']){}else{co.setTransform(1,prop['chart.variant.threed.angle'],0,1,0.5,0.5);}}
this.axisWidth=(ca.width-prop['chart.margin.center']-this.marginLeft-this.marginRight)/2;this.axisHeight=ca.height-this.marginTop-this.marginBottom;this.sequentialFullIndex=0;this.getMax();this.drawBackgroundGrid();this.draw3DAxes();this.drawAxes();this.drawTicks();this.drawLeftBars();this.drawRightBars();this.drawLeftBars({shadow:false});this.drawRightBars({shadow:false});this.drawAxes();this.drawLabels();this.drawTitles();if(prop['chart.contextmenu']){RG.ShowContext(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.exec=function(func)
{func(this);return this;};this.draw3DAxes=function()
{if(prop['chart.variant']==='3d'){var offsetx=prop['chart.variant.threed.offsetx'],offsety=prop['chart.variant.threed.offsety'];co.lineWidth=prop['chart.axes.linewidth']+0.001;co.beginPath();co.strokeStyle=prop['chart.axes.color'];pa2(co,'b m % % l % % l % % l % % s #aaa f #ddd',this.marginLeft,ca.height-this.marginBottom,this.marginLeft+offsetx,ca.height-this.marginBottom-offsety,this.marginLeft+offsetx+this.axisWidth,ca.height-this.marginBottom-offsety,this.marginLeft+this.axisWidth,ca.height-this.marginBottom);this.draw3DLeftVerticalAxis();pa2(co,'b m % % l % % l % % l % % s #aaa f #ddd',this.marginLeft+this.marginCenter+this.axisWidth,ca.height-this.marginBottom,this.marginLeft+this.marginCenter+this.axisWidth+offsetx,ca.height-this.marginBottom-offsety,this.marginLeft+this.marginCenter+this.axisWidth+this.axisWidth+offsetx,ca.height-this.marginBottom-offsety,this.marginLeft+this.marginCenter+this.axisWidth+this.axisWidth,ca.height-this.marginBottom);pa2(co,'b m % % l % % l % % l % % s #aaa f #ddd',this.marginLeft+this.marginCenter+this.axisWidth,ca.height-this.marginBottom,this.marginLeft+this.marginCenter+this.axisWidth,ca.height-this.marginBottom-this.axisHeight,this.marginLeft+this.marginCenter+this.axisWidth+offsetx,ca.height-this.marginBottom-this.axisHeight-offsety,this.marginLeft+this.marginCenter+this.axisWidth+offsetx,ca.height-this.marginBottom-offsety);}}
this.draw3DLeftVerticalAxis=function()
{if(prop['chart.variant']==='3d'){var offsetx=prop['chart.variant.threed.offsetx'],offsety=prop['chart.variant.threed.offsety'];pa2(co,'b m % % l % % l % % l % % s #aaa f #ddd',this.marginLeft+this.axisWidth,this.marginTop,this.marginLeft+this.axisWidth+offsetx,this.marginTop-offsety,this.marginLeft+this.axisWidth+offsetx,ca.height-this.marginBottom-offsety,this.marginLeft+this.axisWidth,ca.height-this.marginBottom);}};this.drawAxes=this.DrawAxes=function()
{co.lineWidth=prop['chart.axes.linewidth']+0.001;co.beginPath();co.strokeStyle=prop['chart.axes.color'];this.axisWidth=(ca.width-prop['chart.margin.center']-this.marginLeft-this.marginRight)/2;this.axisHeight=ca.height-this.marginTop-this.marginBottom;if(!prop['chart.axes']){return;}
if(prop['chart.xaxis']){co.moveTo(this.marginLeft,ca.height-this.marginBottom);co.lineTo(this.marginLeft+this.axisWidth,ca.height-this.marginBottom);}
if(prop['chart.yaxis']){co.moveTo(this.marginLeft+this.axisWidth,ca.height-this.marginBottom);co.lineTo(this.marginLeft+this.axisWidth,this.marginTop);}
co.stroke();co.beginPath();var x=this.marginLeft+this.axisWidth+prop['chart.margin.center'];if(prop['chart.yaxis']){co.moveTo(x,this.marginTop);co.lineTo(x,ca.height-this.marginBottom);}
if(prop['chart.xaxis']){co.moveTo(x,ca.height-this.marginBottom);co.lineTo(ca.width-this.marginRight,ca.height-this.marginBottom);}
co.stroke();};this.drawTicks=this.DrawTicks=function()
{co.lineWidth=prop['chart.axes.linewidth']+0.001;var numDataPoints=this.left.length;var barHeight=((ca.height-this.marginTop-this.marginBottom)-(this.left.length*(prop['chart.vmargin']*2)))/numDataPoints;this.barHeight=barHeight;if(!prop['chart.axes']){return;}
if(prop['chart.yaxis']&&prop['chart.yaxis.tickmarks.count']>0){co.beginPath();for(var i=0;i<prop['chart.yaxis.tickmarks.count'];++i){var y=prop['chart.margin.top']+(((ca.height-this.marginTop-this.marginBottom)/prop['chart.yaxis.tickmarks.count'])*i);co.moveTo(this.marginLeft+this.axisWidth,y);co.lineTo(this.marginLeft+this.axisWidth+3,y);}
co.stroke();co.beginPath();for(var i=0;i<prop['chart.yaxis.tickmarks.count'];++i){var y=prop['chart.margin.top']+(((ca.height-this.marginTop-this.marginBottom)/prop['chart.yaxis.tickmarks.count'])*i);co.moveTo(this.marginLeft+this.axisWidth+prop['chart.margin.center'],y);co.lineTo(this.marginLeft+this.axisWidth+prop['chart.margin.center']-3,y);}
co.stroke();if(!prop['chart.xaxis']){pa2(co,'b m % % l % % s %',this.marginLeft+this.axisWidth,ca.height-this.marginBottom,this.marginLeft+this.axisWidth+4,(ca.height-this.marginBottom),co.strokeStyle);pa2(co,'b m % % l % % s %',this.marginLeft+this.axisWidth+prop['chart.margin.center'],ca.height-this.marginBottom,this.marginLeft+this.axisWidth+prop['chart.margin.center']-4,ca.height-this.marginBottom,co.strokeStyle);}}
if(prop['chart.xaxis']&&prop['chart.xaxis.tickmarks.count']>0){var xInterval=this.axisWidth/prop['chart.xaxis.tickmarks.count'];if(typeof(prop['chart.xaxis.tickmarks.interval'])=='number'){xInterval=prop['chart.xaxis.tickmarks.interval'];}
for(i=this.marginLeft;i<(this.marginLeft+this.axisWidth);i+=xInterval){co.beginPath();co.moveTo(i,ca.height-this.marginBottom);co.lineTo(i,(ca.height-this.marginBottom)+4);co.closePath();co.stroke();}
var stoppingPoint=ca.width-this.marginRight;for(i=(this.marginLeft+this.axisWidth+prop['chart.margin.center']+xInterval);i<=stoppingPoint;i+=xInterval){co.beginPath();co.moveTo(i,ca.height-this.marginBottom);co.lineTo(i,(ca.height-this.marginBottom)+4);co.closePath();co.stroke();}
if(!prop['chart.yaxis']){pa2(co,'b m % % l % % s %',this.marginLeft+this.axisWidth,ca.height-this.marginBottom,this.marginLeft+this.axisWidth,(ca.height-this.marginBottom)+4,co.strokeStyle);pa2(co,'b m % % l % % s %',this.marginLeft+this.axisWidth+prop['chart.margin.center'],ca.height-this.marginBottom,this.marginLeft+this.axisWidth+prop['chart.margin.center'],(ca.height-this.marginBottom)+4,co.strokeStyle);}}};this.getMax=this.GetMax=function()
{var dec=prop['chart.xaxis.scale.decimals'];if(prop['chart.xaxis.scale.max']){var max=prop['chart.xaxis.scale.max'];var min=prop['chart.xaxis.scale.min'];this.scale2=RG.getScale2(this,{'scale.max':max,'scale.min':min,'scale.strict':true,'scale.thousand':prop['chart.xaxis.scale.thousand'],'scale.point':prop['chart.xaxis.scale.point'],'scale.decimals':prop['chart.xaxis.scale.decimals'],'scale.labels.count':prop['chart.xaxis.labels.count'],'scale.round':prop['chart.xaxis.scale.round'],'scale.units.pre':prop['chart.xaxis.scale.units.pre'],'scale.units.post':prop['chart.xaxis.scale.units.post']});this.max=this.scale2.max;this.min=this.scale2.min;}else{var max=1;for(var i=0;i<this.left.length;++i){if(typeof this.left[i]==='number'){max=ma.max(max,this.left[i]);}else if(RG.isNull(this.left[i])){}else{max=ma.max(max,prop['chart.grouping']==='stacked'?RG.arraySum(this.left[i]):RG.arrayMax(this.left[i]));}}
for(var i=0;i<this.right.length;++i){if(typeof this.right[i]==='number'){max=ma.max(max,this.right[i]);}else if(RG.isNull(this.right[i])){}else{max=ma.max(max,prop['chart.grouping']==='stacked'?RG.arraySum(this.right[i]):RG.arrayMax(this.right[i]));}}
this.scale2=RG.getScale2(this,{'scale.max':max,'scale.min':prop['chart.xsxis.scale.min'],'scale.thousand':prop['chart.xaxis.scale.thousand'],'scale.point':prop['chart.xaxis.scale.point'],'scale.decimals':prop['chart.xaxis.scale.decimals'],'scale.labels.count':prop['chart.xaxis.labels.count'],'scale.round':prop['chart.xaxis.scale.round'],'scale.units.pre':prop['chart.xaxis.scale.units.pre'],'scale.units.post':prop['chart.xaxis.scale.units.post']});this.max=this.scale2.max;this.min=this.scale2.min;}};this.drawLeftBars=this.DrawLeftBars=function()
{var opt={};if(typeof arguments[0]==='object'){opt.shadow=arguments[0].shadow;}else{opt.shadow=true;}
var offsetx=prop['chart.variant.threed.offsetx'],offsety=prop['chart.variant.threed.offsety'];co.strokeStyle=prop['chart.colors.stroke'];co.lineWidth=prop['chart.linewidth'];for(var i=0,sequentialColorIndex=0;i<this.left.length;++i){if(prop['chart.shadow']&&prop['chart.variant']!=='3d'&&opt.shadow){RG.setShadow({object:this,prefix:'chart.shadow'});}
if(typeof this.left[i]==='number'){if(prop['chart.colors.sequential']){co.fillStyle=prop['chart.colors'][sequentialColorIndex];}else{co.fillStyle=prop['chart.colors'][0];if(prop['chart.colors'].length===2){co.fillStyle=prop['chart.colors'][0];}}
var width=(((this.left[i]-this.min)/(this.max-this.min))*this.axisWidth);var coords=[this.marginLeft+this.axisWidth-width,this.marginTop+(i*(this.axisHeight/this.left.length))+prop['chart.vmargin'],width,this.barHeight];if(this.left[i]!==null){co.strokeRect(coords[0],coords[1],coords[2],coords[3]);co.fillRect(coords[0],coords[1],coords[2],coords[3]);}
if(prop['chart.variant']==='3d'&&this.left[i]!==null){if(prop['chart.shadow']&&opt.shadow){co.shadowColor=prop['chart.shadow.color'];co.shadowBlur=prop['chart.shadow.blur'];co.shadowOffsetX=prop['chart.shadow.offsetx'];co.shadowOffsetY=prop['chart.shadow.offsety'];pa2(co,'b m % % l % % l % % l % % f black sc rgba(0,0,0,0) sx 0 sy 0 sb 0',coords[0]+offsetx,coords[1]-offsety,coords[0]+offsetx+coords[2],coords[1]-offsety,coords[0]+offsetx+coords[2],coords[1]-offsety+coords[3],coords[0]+offsetx,coords[1]-offsety+coords[3]);}
if(prop['chart.colors.sequential']){co.fillStyle=prop['chart.colors'][i];}else{co.fillStyle=prop['chart.colors'][0];}
pa2(co,'b m % % l % % l % % l % % f %',coords[0],coords[1],coords[0]+offsetx,coords[1]-offsety,coords[0]+offsetx+coords[2],coords[1]-offsety,coords[0]+coords[2],coords[1]);pa2(co,'b m % % l % % l % % l % % f rgba(255,255,255,0.4)',coords[0],coords[1],coords[0]+offsetx,coords[1]-offsety,coords[0]+offsetx+coords[2],coords[1]-offsety,coords[0]+coords[2],coords[1]);}
if(!opt.shadow){this.coords.push([coords[0],coords[1],coords[2],coords[3]]);this.coordsLeft.push([coords[0],coords[1],coords[2],coords[3]]);}
sequentialColorIndex++;}else if(typeof this.left[i]==='object'&&prop['chart.grouping']==='stacked'){for(var j=0,accumulatedWidth=0;j<this.left[i].length;++j){if(prop['chart.colors.sequential']){co.fillStyle=prop['chart.colors'][sequentialColorIndex];}else{co.fillStyle=prop['chart.colors'][j];}
var value=this.left[i][j],min=this.min,max=this.max,margin=prop['chart.vmargin'],width=(((value-min)/(max-min))*this.axisWidth),sectionHeight=(this.axisHeight/this.left.length),height=(sectionHeight-(2*margin)),x=this.marginLeft+this.axisWidth-width-accumulatedWidth,y=this.marginTop+margin+(i*sectionHeight);accumulatedWidth+=width;if(this.left[i]!==null){co.strokeRect(x,y,width,height);co.fillRect(x,y,width,height);}
if(prop['chart.variant']==='3d'&&this.left[i]!==null){if(prop['chart.shadow']&&opt.shadow){co.shadowColor=prop['chart.shadow.color'];co.shadowBlur=prop['chart.shadow.blur'];co.shadowOffsetX=prop['chart.shadow.offsetx'];co.shadowOffsetY=prop['chart.shadow.offsety'];pa2(co,'b m % % l % % l % % l % % f black sc rgba(0,0,0,0) sx 0 sy 0 sb 0',x+offsetx,y-offsety,x+offsetx+width,y-offsety,x+offsetx+width,y-offsety+height,x+offsetx,y-offsety+height);}
if(prop['chart.colors.sequential']){co.fillStyle=prop['chart.colors'][sequentialColorIndex];}else{co.fillStyle=prop['chart.colors'][j];}
pa2(co,'b m % % l % % l % % l % % f %',x,y,x+offsetx,y-offsety,x+offsetx+width,y-offsety,x+width,y);pa2(co,'b m % % l % % l % % l % % f rgba(255,255,255,0.4)',x,y,x+offsetx,y-offsety,x+offsetx+width,y-offsety,x+width,y);}
if(!opt.shadow){this.coords.push([x,y,width,height]);this.coordsLeft.push([x,y,width,height]);if(!RG.isArray(this.coords2[i])){this.coords2[i]=[];}
this.coords2[i].push([x,y,width,height]);if(!RG.isArray(this.coords2Left[i])){this.coords2Left[i]=[];}
this.coords2Left[i].push([x,y,width,height]);}
sequentialColorIndex++;}}else if(typeof this.left[i]==='object'&&!RG.isNull(this.left[i])){for(var j=0;j<this.left[i].length;++j){if(prop['chart.colors.sequential']){co.fillStyle=prop['chart.colors'][sequentialColorIndex];}else{co.fillStyle=prop['chart.colors'][j];}
var value=this.left[i][j],min=this.min,max=this.max,margin=prop['chart.vmargin'],marginGrouped=prop['chart.vmargin.grouped'],width=(((value-min)/(max-min))*this.axisWidth),sectionHeight=(this.axisHeight/this.left.length),height=(sectionHeight-(2*margin)-((this.left[i].length-1)*marginGrouped))/this.left[i].length,x=this.marginLeft+this.axisWidth-width,y=this.marginTop+margin+(i*sectionHeight)+(height*j)+(j*marginGrouped);if(this.left[i]!==null){co.strokeRect(x,y,width,height);co.fillRect(x,y,width,height);}
if(prop['chart.variant']==='3d'&&this.left[i]!==null){if(prop['chart.shadow']&&opt.shadow){co.shadowColor=prop['chart.shadow.color'];co.shadowBlur=prop['chart.shadow.blur'];co.shadowOffsetX=prop['chart.shadow.offsetx'];co.shadowOffsetY=prop['chart.shadow.offsety'];pa2(co,'b m % % l % % l % % l % % f black sc rgba(0,0,0,0) sx 0 sy 0 sb 0',x+offsetx,y-offsety,x+offsetx+width,y-offsety,x+offsetx+width,y-offsety+height,x+offsetx,y-offsety+height);}
if(prop['chart.colors.sequential']){co.fillStyle=prop['chart.colors'][sequentialColorIndex];}else{co.fillStyle=prop['chart.colors'][j];}
pa2(co,'b m % % l % % l % % l % % f %',x,y,x+offsetx,y-offsety,x+offsetx+width,y-offsety,x+width,y);pa2(co,'b m % % l % % l % % l % % f rgba(255,255,255,0.4)',x,y,x+offsetx,y-offsety,x+offsetx+width,y-offsety,x+width,y);}
if(!opt.shadow){this.coords.push([x,y,width,height]);this.coordsLeft.push([x,y,width,height]);if(!RG.isArray(this.coords2[i])){this.coords2[i]=[];}
this.coords2[i].push([x,y,width,height]);if(!RG.isArray(this.coords2Left[i])){this.coords2Left[i]=[];}
this.coords2Left[i].push([x,y,width,height]);}
sequentialColorIndex++;}}
this.draw3DLeftVerticalAxis();}
RG.noShadow(this);co.lineWidth=1;};this.drawRightBars=this.DrawRightBars=function()
{var opt={};if(typeof arguments[0]==='object'){opt.shadow=arguments[0].shadow;}else{opt.shadow=true;}
var offsetx=prop['chart.variant.threed.offsetx'],offsety=prop['chart.variant.threed.offsety'];co.strokeStyle=prop['chart.colors.stroke'];co.lineWidth=prop['chart.linewidth'];if(prop['chart.shadow']&&prop['chart.variant']!=='3d'&&opt.shadow){co.shadowColor=prop['chart.shadow.color'];co.shadowBlur=prop['chart.shadow.blur'];co.shadowOffsetX=prop['chart.shadow.offsetx'];co.shadowOffsetY=prop['chart.shadow.offsety'];}
for(var i=0,sequentialColorIndex=RG.arrayLinearize(this.left).length;i<this.right.length;++i){if(typeof this.right[i]==='number'){if(prop['chart.colors.sequential']){co.fillStyle=prop['chart.colors'][sequentialColorIndex];}else{co.fillStyle=prop['chart.colors'][0];if(prop['chart.colors'].length===2){co.fillStyle=prop['chart.colors'][1];}}
var width=(((this.right[i]-this.min)/(this.max-this.min))*this.axisWidth);var coords=[this.marginLeft+this.axisWidth+prop['chart.margin.center'],prop['chart.vmargin']+(i*(this.axisHeight/this.right.length))+this.marginTop,width,this.barHeight];if(this.right[i]!==null){co.strokeRect(coords[0],coords[1],coords[2],coords[3]);co.fillRect(coords[0],coords[1],coords[2],coords[3]);}
if(prop['chart.variant']==='3d'&&this.right[i]!==null){var color=co.fillStyle;if(prop['chart.shadow']&&opt.shadow){co.shadowColor=prop['chart.shadow.color'];co.shadowBlur=prop['chart.shadow.blur'];co.shadowOffsetX=prop['chart.shadow.offsetx'];co.shadowOffsetY=prop['chart.shadow.offsety'];pa2(co,'b m % % l % % l % % l % % f black sc rgba(0,0,0,0) sx 0 sy 0 sb 0',coords[0]+offsetx,coords[1]-offsety,coords[0]+offsetx+coords[2],coords[1]-offsety,coords[0]+offsetx+coords[2],coords[1]-offsety+coords[3],coords[0]+offsetx,coords[1]-offsety+coords[3]);}
pa2(co,'b m % % l % % l % % l % % f %',coords[0],coords[1],coords[0]+offsetx,coords[1]-offsety,coords[0]+offsetx+coords[2],coords[1]-offsety,coords[0]+coords[2],coords[1],color);pa2(co,'b m % % l % % l % % l % % f %',coords[0]+coords[2],coords[1],coords[0]+coords[2]+offsetx,coords[1]-offsety,coords[0]+coords[2]+offsetx,coords[1]-offsety+coords[3],coords[0]+coords[2],coords[1]+coords[3],color);pa2(co,'b m % % l % % l % % l % % f rgba(255,255,255,0.6)',coords[0],coords[1],coords[0]+offsetx,coords[1]-offsety,coords[0]+offsetx+coords[2],coords[1]-offsety,coords[0]+coords[2],coords[1]);pa2(co,'b m % % l % % l % % l % % f rgba(0,0,0,0.3)',coords[0]+coords[2],coords[1],coords[0]+coords[2]+offsetx,coords[1]-offsety,coords[0]+coords[2]+offsetx,coords[1]-offsety+coords[3],coords[0]+coords[2],coords[1]+coords[3]);}
if(!opt.shadow){this.coords.push([coords[0],coords[1],coords[2],coords[3]]);this.coordsRight.push([coords[0],coords[1],coords[2],coords[3]]);}
sequentialColorIndex++;}else if(typeof this.left==='object'&&prop['chart.grouping']==='stacked'){for(var j=0,accumulatedWidth=0;j<this.right[i].length;++j){if(prop['chart.colors.sequential']){co.fillStyle=prop['chart.colors'][sequentialColorIndex];}else{co.fillStyle=prop['chart.colors'][j];}
var value=this.right[i][j],min=this.min,max=this.max,margin=prop['chart.vmargin'],width=(((value-min)/(max-min))*this.axisWidth),sectionHeight=(this.axisHeight/this.right.length),height=(sectionHeight-(2*margin)),x=this.marginLeft+this.axisWidth+prop['chart.margin.center']+accumulatedWidth,y=this.marginTop+margin+(i*sectionHeight);accumulatedWidth+=width;if(this.right[i]!==null){co.strokeRect(x,y,width,height);co.fillRect(x,y,width,height);}
if(prop['chart.variant']==='3d'&&this.right[i]!==null){var color=co.fillStyle;if(prop['chart.shadow']&&opt.shadow){RG.setShadow({object:this,prefix:'chart.shadow'});pa2(co,'b m % % l % % l % % l % % f black sc rgba(0,0,0,0) sx 0 sy 0 sb 0',x+offsetx,y-offsety,x+offsetx+width,y-offsety,x+offsetx+width,y-offsety+height,x+offsetx,y-offsety+height);}
pa2(co,'b m % % l % % l % % l % % f %',x,y,x+offsetx,y-offsety,x+offsetx+width,y-offsety,x+width,y,color);if(j===(this.right[i].length-1)){pa2(co,'b m % % l % % l % % l % % f %',x+width,y,x+width+offsetx,y-offsety,x+width+offsetx,y-offsety+height,x+width,y+height,color);pa2(co,'b m % % l % % l % % l % % f rgba(0,0,0,0.3)',x+width,y,x+width+offsetx,y-offsety,x+width+offsetx,y-offsety+height,x+width,y+height);}
pa2(co,'b m % % l % % l % % l % % f rgba(255,255,255,0.6)',x,y,x+offsetx,y-offsety,x+offsetx+width,y-offsety,x+width,y);}
if(!opt.shadow){this.coords.push([x,y,width,height]);if(!RG.isArray(this.coords2[sequentialColorIndex])){this.coords2[sequentialColorIndex]=[];}
this.coords2[sequentialColorIndex].push([x,y,width,height]);this.coordsRight.push([x,y,width,height]);if(!RG.isArray(this.coords2Right[i])){this.coords2Right[i]=[];}
this.coords2Right[i].push([x,y,width,height]);}
sequentialColorIndex++;}}else if(typeof this.right[i]==='object'){for(var j=0;j<this.right[i].length;++j){if(prop['chart.colors.sequential']){co.fillStyle=prop['chart.colors'][sequentialColorIndex];}else{co.fillStyle=prop['chart.colors'][j];}
var value=this.right[i][j],min=this.min,max=this.max,margin=prop['chart.vmargin'],marginGrouped=prop['chart.vmargin.grouped'],width=((value-min)/(max-min))*this.axisWidth,sectionHeight=(this.axisHeight/this.right.length),height=(sectionHeight-(2*margin)-((this.right[i].length-1)*marginGrouped))/this.right[i].length,x=this.marginLeft+this.axisWidth+prop['chart.margin.center'],y=this.marginTop+margin+(i*sectionHeight)+(height*j)+(j*marginGrouped);if(this.right[i]!==null){co.strokeRect(x,y,width,height);co.fillRect(x,y,width,height);}
if(!opt.shadow){this.coords.push([x,y,width,height]);this.coordsRight.push([x,y,width,height]);if(!RG.isArray(this.coords2[this.left.length+i])){this.coords2[this.left.length+i]=[];}
this.coords2[this.left.length+i].push([x,y,width,height]);if(!RG.isArray(this.coords2Right[i])){this.coords2Right[i]=[];}
this.coords2Right[i].push([x,y,width,height]);}
sequentialColorIndex++;if(prop['chart.variant']==='3d'&&this.right[i]!==null){var color=co.fillStyle;if(prop['chart.shadow']&&opt.shadow){co.shadowColor=prop['chart.shadow.color'];co.shadowBlur=prop['chart.shadow.blur'];co.shadowOffsetX=prop['chart.shadow.offsetx'];co.shadowOffsetY=prop['chart.shadow.offsety'];pa2(co,'b m % % l % % l % % l % % f black sc rgba(0,0,0,0) sx 0 sy 0 sb 0',x+offsetx,y-offsety,x+offsetx+width,y-offsety,x+offsetx+width,y-offsety+height,x+offsetx,y-offsety+height);}
pa2(co,'b m % % l % % l % % l % % f %',x,y,x+offsetx,y-offsety,x+offsetx+width,y-offsety,x+width,y,color);pa2(co,'b m % % l % % l % % l % % f %',x+width,y,x+width+offsetx,y-offsety,x+width+offsetx,y-offsety+height,x+width,y+height,color);pa2(co,'b m % % l % % l % % l % % f rgba(255,255,255,0.6)',x,y,x+offsetx,y-offsety,x+offsetx+width,y-offsety,x+width,y);pa2(co,'b m % % l % % l % % l % % f rgba(0,0,0,0.3)',x+width,y,x+width+offsetx,y-offsety,x+width+offsetx,y-offsety+height,x+width,y+height);}}}}
RG.noShadow(this);co.lineWidth=1;};this.drawLabels=this.DrawLabels=function()
{var labels=prop['chart.yaxis.labels'],barAreaHeight=ca.height-this.marginTop-this.marginBottom
var textConf=RG.getTextConf({object:this,prefix:'chart.yaxis.labels'});co.fillStyle=textConf.color;for(var i=0,len=labels.length;i<len;++i){RG.text2(this,{color:textConf.color,font:textConf.font,size:textConf.size,bold:textConf.bold,italic:textConf.italic,x:this.marginLeft+this.axisWidth+(prop['chart.margin.center']/2),y:this.marginTop+((barAreaHeight/labels.length)*(i))+((barAreaHeight/labels.length)/2),text:String(labels[i]?String(labels[i]):''),halign:'center',valign:'center',marker:false,tag:'labels'});}
co.fillStyle=prop['chart.text.color'];if(prop['chart.xaxis.labels']){var grapharea=(ca.width-prop['chart.margin.center']-this.marginLeft-this.marginRight)/2;var textConf=RG.getTextConf({object:this,prefix:'chart.xaxis.labels'});for(var i=0;i<this.scale2.labels.length;++i){RG.text2(this,{font:textConf.font,size:textConf.size,bold:textConf.bold,italic:textConf.italic,color:textConf.color,x:this.marginLeft+((grapharea/this.scale2.labels.length)*i),y:ca.height-this.marginBottom+3,text:typeof prop['chart.xaxis.scale.formatter']==='function'?(prop['chart.xaxis.scale.formatter'])(this,this.scale2.values[this.scale2.values.length-i-1]):this.scale2.labels[this.scale2.labels.length-i-1],valign:'top',halign:'center',tag:'scale'});RG.text2(this,{font:textConf.font,size:textConf.size,bold:textConf.bold,italic:textConf.italic,color:textConf.color,x:this.marginLeft+grapharea+prop['chart.margin.center']+((grapharea/this.scale2.labels.length)*(i+1)),y:ca.height-this.marginBottom+3,text:this.scale2.labels[i],text:typeof prop['chart.xaxis.scale.formatter']==='function'?(prop['chart.xaxis.scale.formatter'])(this,this.scale2.values[i]):this.scale2.labels[i],valign:'top',halign:'center',tag:'scale'});}
if(prop['chart.xaxis.scale.zerostart']){RG.text2(this,{font:textConf.font,size:textConf.size,bold:textConf.bold,italic:textConf.italic,color:textConf.color,x:this.marginLeft+this.axisWidth,y:ca.height-this.marginBottom+3,text:typeof prop['chart.xaxis.scale.formatter']==='function'?(prop['chart.xaxis.scale.formatter'])(this,0):RG.numberFormat({object:this,number:(0).toFixed(prop['chart.xaxis.scale.decimals']),unitspre:prop['chart.xaxis.scale.units.pre'],unitspost:prop['chart.xaxis.scale.units.post']}),valign:'top',halign:'center',tag:'scale'});RG.text2(this,{font:textConf.font,size:textConf.size,bold:textConf.bold,italic:textConf.italic,color:textConf.color,x:this.marginLeft+this.axisWidth+this.marginCenter,y:ca.height-this.marginBottom+3,text:typeof prop['chart.xaxis.scale.formatter']==='function'?(prop['chart.xaxis.scale.formatter'])(this,0):RG.numberFormat({object:this,number:(0).toFixed(prop['chart.xaxis.scale.decimals']),unitspre:prop['chart.xaxis.scale.units.pre'],unitspost:prop['chart.xaxis.scale.units.post']}),valign:'top',halign:'center',tag:'scale'});}}
if(prop['chart.labels.above']){this.drawLabelsAbove();}};this.drawLabelsAbove=function()
{var coordsLeft=this.coordsLeft,coordsRight=this.coordsRight;var textConf=RG.getTextConf({object:this,prefix:'chart.labels.above'});for(var i=0,seq=0;i<coordsLeft.length;++i,++seq){if(typeof this.left[i]=='number'){var coords=this.coords[seq];RG.text2(this,{font:textConf.font,size:textConf.size,bold:textConf.bold,italic:textConf.italic,color:textConf.color,x:coords[0]-5,y:coords[1]+(coords[3]/2),text:typeof prop['chart.labels.above.formatter']==='function'?prop['chart.labels.above.formatter'](this,this.left[i]):RG.numberFormat({object:this,number:this.left[i].toFixed(typeof prop['chart.labels.above.decimals']==='number'?prop['chart.labels.above.decimals']:0),unitspre:prop['chart.labels.above.units.pre'],unitspost:prop['chart.labels.above.units.post']}),valign:'center',halign:'right',tag:'labels.above'});}else if(typeof this.left[i]==='object'){for(var j=0;j<this.left[i].length;++j,++seq){if(prop['chart.grouping']==='stacked'&&j!==(this.left[i].length-1)){continue;}
var coords=coordsLeft[seq];RG.text2(this,{font:textConf.font,size:textConf.size,bold:textConf.bold,italic:textConf.italic,color:textConf.color,x:coords[0]-5,y:coords[1]+(coords[3]/2),text:typeof prop['chart.labels.above.formatter']==='function'?prop['chart.labels.above.formatter'](this,this.left[i][j]):RG.numberFormat({object:this,number:RG.isNull(this.left[i][j])||isNaN(this.left[i][j])?'':(prop['chart.grouping']==='stacked'?RG.arraySum(this.left[i]):Number(this.left[i][j])).toFixed(typeof prop['chart.labels.above.decimals']==='number'?prop['chart.labels.above.decimals']:0),unitspre:prop['chart.labels.above.units.pre'],unitspost:prop['chart.labels.above.units.post']}),valign:'center',halign:'right',tag:'labels.above'});}
seq--;}}
for(i=0,seq=0;i<coordsRight.length;++i,++seq){if(typeof this.right[i]==='number'){var coords=coordsRight[seq];RG.text2(this,{font:textConf.font,size:textConf.size,bold:textConf.bold,italic:textConf.italic,color:textConf.color,x:coords[0]+coords[2]+5+(prop['chart.variant']==='3d'?10:0),y:coords[1]+(coords[3]/2)+(prop['chart.variant']==='3d'?-5:0),text:typeof prop['chart.labels.above.formatter']==='function'?prop['chart.labels.above.formatter'](this,this.right[i]):RG.numberFormat({object:this,number:this.right[i].toFixed(typeof prop['chart.labels.above.decimals']==='number'?prop['chart.labels.above.decimals']:0),unitspre:prop['chart.labels.above.units.pre'],unitspost:prop['chart.labels.above.units.post']}),valign:'center',halign:'left',tag:'labels.above'});}else if(typeof this.right[i]==='object'){for(var j=0;j<this.right[i].length;++j,++seq){if(prop['chart.grouping']==='stacked'&&j!==(this.right[i].length-1)){continue;}
var coords=coordsRight[seq];RG.text2(this,{font:textConf.font,size:textConf.size,bold:textConf.bold,italic:textConf.italic,color:textConf.color,x:coords[0]+coords[2]+5+(prop['chart.variant']==='3d'?10:0),y:coords[1]+(coords[3]/2)+(prop['chart.variant']==='3d'?-5:0),text:typeof prop['chart.labels.above.formatter']==='function'?prop['chart.labels.above.formatter'](this,this.right[i][j]):RG.numberFormat({object:this,number:RG.isNull(this.right[i][j])||isNaN(this.right[i][j])?'':prop['chart.grouping']==='stacked'?RG.arraySum(this.right[i]).toFixed(prop['chart.labels.above.decimals']):Number(this.right[i][j]).toFixed(typeof prop['chart.labels.above.decimals']==='number'?prop['chart.labels.above.decimals']:0),unitspre:prop['chart.labels.above.units.pre'],unitspost:prop['chart.labels.above.units.post']}),valign:'center',halign:'left',tag:'labels.above'});}
--seq;}}};this.drawTitles=this.DrawTitles=function()
{var textConf=RG.getTextConf({object:this,prefix:'chart.title.left'});if(typeof prop['chart.title.left']==='string'){RG.text2(this,{font:textConf.font,size:textConf.size,bold:textConf.bold,italic:textConf.italic,color:textConf.color,x:this.marginLeft+5,y:this.marginTop-5,text:prop['chart.title.left'],halign:'left',valign:'bottom',tag:'title.left'});}
var textConf=RG.getTextConf({object:this,prefix:'chart.title.right'});if(typeof prop['chart.title.right']==='string'){RG.text2(this,{font:textConf.font,size:textConf.size,bold:textConf.bold,italic:textConf.italic,color:textConf.color,x:ca.width-this.marginRight-5,y:this.marginTop-5,text:prop['chart.title.right'],halign:'right',valign:'bottom',tag:'title.right'});}
if(typeof prop['chart.title']==='string'){RG.drawTitle(this,prop['chart.title'],this.marginTop,null,typeof prop['chart.title.size']==='number'?prop['chart.title.size']:null);}};this.getShape=this.getBar=function(e)
{var canvas=this.canvas,context=this.context,mouseXY=RG.getMouseXY(e)
for(var i=0;i<this.coords.length;i++){var mouseX=mouseXY[0],mouseY=mouseXY[1],left=this.coords[i][0],top=this.coords[i][1],width=this.coords[i][2],height=this.coords[i][3]
if(prop['chart.variant']==='3d'){pa2(co,'b r % % % %',left,top,width,height);var over=co.isPointInPath(mouseX,mouseY);}else{var over=(mouseX>=left&&mouseX<=(left+width)&&mouseY>=top&&mouseY<=(top+height));}
if(over){var tooltip=RG.parseTooltipText(prop['chart.tooltips'],i);return{0:this,1:left,2:top,3:width,4:height,5:i,object:this,x:left,y:top,width:width,height:height,index:i,tooltip:tooltip};}}
return null;};this.highlight=this.Highlight=function(shape)
{if(typeof prop['chart.highlight.style']==='function'){(prop['chart.highlight.style'])(shape);}else{RG.Highlight.Rect(this,shape);}};this.getValue=function(e)
{var obj=e.target.__object__;var mouseXY=RG.getMouseXY(e);var mouseX=mouseXY[0];if(mouseX>this.marginLeft&&mouseX<((ca.width/2)-(prop['chart.margin.center']/2))){var value=(mouseX-prop['chart.margin.left'])/this.axisWidth;value=this.max-(value*this.max);}
if(mouseX<(ca.width-this.marginRight)&&mouseX>((ca.width/2)+(prop['chart.margin.center']/2))){var value=(mouseX-prop['chart.margin.left']-this.axisWidth-prop['chart.margin.center'])/this.axisWidth;value=(value*this.max);}
return value;};this.getObjectByXY=function(e)
{var mouseXY=RG.getMouseXY(e);if(mouseXY[0]>prop['chart.margin.left']&&mouseXY[0]<(ca.width-prop['chart.margin.right'])&&mouseXY[1]>prop['chart.margin.top']&&mouseXY[1]<(ca.height-prop['chart.margin.bottom'])){return this;}};this.getXCoord=function(value)
{if(value>this.max||value<0){return null;}
var ret=[];var offset=((value/this.max)*this.axisWidth);ret[0]=(this.marginLeft+this.axisWidth)-offset;ret[1]=(ca.width-this.marginRight-this.axisWidth)+offset;return ret;};this.parseColors=function()
{if(this.original_colors.length===0){this.original_colors['chart.colors']=RG.arrayClone(prop['chart.colors']);this.original_colors['chart.highlight.stroke']=RG.arrayClone(prop['chart.highlight.fill']);this.original_colors['chart.highlight.fill']=RG.arrayClone(prop['chart.highlight.fill']);this.original_colors['chart.axes.color']=RG.arrayClone(prop['chart.axes.color']);this.original_colors['chart.colors.stroke']=RG.arrayClone(prop['chart.colors.stroke']);}
var props=this.properties;var colors=props['chart.colors'];for(var i=0;i<colors.length;++i){colors[i]=this.parseSingleColorForGradient(colors[i]);}
props['chart.highlight.stroke']=this.parseSingleColorForGradient(props['chart.highlight.stroke']);props['chart.highlight.fill']=this.parseSingleColorForGradient(props['chart.highlight.fill']);props['chart.axes.color']=this.parseSingleColorForGradient(props['chart.axes.color']);props['chart.color.stroke']=this.parseSingleColorForGradient(props['chart.colors.stroke']);};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});}
var parts=RegExp.$1.split(':');var grad=co.createLinearGradient(prop['chart.margin.left'],0,ca.width-prop['chart.margin.right'],0);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.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.drawBackgroundGrid=function()
{if(prop['chart.background.grid']){var variant=prop['chart.variant'],color=prop['chart.background.grid.color'],numvlines=prop['chart.xaxis.labels.count'],numhlines=this.left.length,vlines=prop['chart.background.grid.vlines'],hlines=prop['chart.background.grid.hlines'],linewidth=prop['chart.background.grid.linewidth'];if(typeof prop['chart.background.grid.hlines.count']==='number'){numhlines=prop['chart.background.grid.hlines.count'];}
if(typeof prop['chart.background.grid.vlines.count']==='number'){numvlines=prop['chart.background.grid.vlines.count'];}
co.lineWidth=linewidth;if(variant=='3d'){co.save();co.translate(prop['chart.variant.threed.offsetx'],-1*prop['chart.variant.threed.offsety']);}
if(vlines){for(var i=0;i<=numvlines;i+=1){pa2(co,'b m % % l % % s %',this.marginLeft+(this.axisWidth/numvlines)*i,this.marginTop,this.marginLeft+(this.axisWidth/numvlines)*i,this.marginTop+this.axisHeight,color);}}
if(hlines){for(var i=0;i<=numhlines;i+=1){pa2(co,'b m % % l % % s %',this.marginLeft,this.marginTop+(this.axisHeight/numhlines)*i,this.marginLeft+this.axisWidth,this.marginTop+(this.axisHeight/numhlines)*i,color);}}
if(vlines){for(var i=0;i<=numvlines;i+=1){pa2(co,'b m % % l % % s %',this.marginLeft+this.marginCenter+this.axisWidth+(this.axisWidth/numvlines)*i,this.marginTop,this.marginLeft+this.marginCenter+this.axisWidth+(this.axisWidth/numvlines)*i,this.marginTop+this.axisHeight,color);}}
if(hlines){for(var i=0;i<=numhlines;i+=1){pa2(co,'b m % % l % % s %',this.marginLeft+this.axisWidth+this.marginCenter,this.marginTop+(this.axisHeight/numhlines)*i,this.marginLeft+this.axisWidth+this.marginCenter+this.axisWidth,this.marginTop+(this.axisHeight/numhlines)*i,color);}}
if(variant=='3d'){co.restore();}}};this.firstDrawFunc=function()
{};this.getGutterCenter=this.getMarginCenter=function()
{var bold=typeof prop['chart.yaxis.labels.bold']==='boolean'?prop['chart.yaxis.labels.bold']:prop['chart.text.bold'],font=typeof prop['chart.yaxis.labels.font']==='string'?prop['chart.yaxis.labels.font']:prop['chart.text.font'],size=typeof prop['chart.yaxis.labels.size']==='number'?prop['chart.yaxis.labels.size']:prop['chart.text.size'];for(var i=0,len=0;i<prop['chart.yaxis.labels'].length;++i){len=ma.max(len,RG.measureText(prop['chart.yaxis.labels'][i],bold,font,size)[0]);}
return len+15;};RG.Register(this);if(parseConfObjectForOptions){RG.parseObjectStyleConfig(this,conf.options);}
this.grow=function()
{var opt=arguments[0]||{},frames=opt.frames||30,frame=0,callback=arguments[1]||function(){},obj=this;var originalLeft=RG.arrayClone(this.left),originalRight=RG.arrayClone(this.right);if(RG.isNull(prop['chart.xaxis.scale.max'])){var xmax=0;this.getMax();this.Set('chart.xaxis.scale.max',this.scale2.max);}
var iterator=function()
{var easingMultiplier=RG.Effects.getEasingMultiplier(frames,frame);for(var i=0;i<obj.left.length;i+=1){if(typeof obj.left[i]==='number'){obj.left[i]=easingMultiplier*originalLeft[i];}else{for(var j=0;j<obj.left[i].length;++j){obj.left[i][j]=easingMultiplier*originalLeft[i][j];}}}
for(var i=0;i<obj.right.length;i+=1){if(typeof obj.right[i]==='number'){obj.right[i]=easingMultiplier*originalRight[i];}else{for(var j=0;j<obj.right[i].length;++j){obj.right[i][j]=easingMultiplier*originalRight[i][j];}}}
RG.redrawCanvas(obj.canvas);if(frame<frames){frame+=1;RG.Effects.updateCanvas(iterator);}else{callback(obj);}};iterator();return this;};this.wave=function()
{var obj=this,opt=arguments[0]||{};opt.frames=opt.frames||120;opt.startFrames_left=[];opt.startFrames_right=[];opt.counters_left=[];opt.counters_right=[];var framesperbar=opt.frames/3,frame_left=-1,frame_right=-1,callback=arguments[1]||function(){},original_left=RG.arrayClone(obj.left),original_right=RG.arrayClone(obj.right);for(var i=0,len=obj.left.length;i<len;i+=1){opt.startFrames_left[i]=((opt.frames/3)/(obj.left.length-1))*i;opt.startFrames_right[i]=((opt.frames/3)/(obj.right.length-1))*i;opt.counters_left[i]=0;opt.counters_right[i]=0;}
obj.draw();obj.set('chart.xaxis.scale.max',obj.scale2.max);RG.clear(obj.canvas);for(var i=0,len=obj.left.length;i<len;i+=1){if(typeof obj.left[i]==='number')obj.left[i]=0;if(typeof obj.right[i]==='number')obj.right[i]=0;}
function iteratorLeft()
{++frame_left;for(var i=0,len=obj.left.length;i<len;i+=1){if(frame_left>opt.startFrames_left[i]){var isNull=RG.isNull(obj.left[i]);if(typeof obj.left[i]==='number'){obj.left[i]=ma.min(ma.abs(original_left[i]),ma.abs(original_left[i]*((opt.counters_left[i]++)/framesperbar)));if(original_left[i]<0){obj.left[i]*=-1;}}else if(RG.isArray(obj.left[i])){for(var j=0;j<obj.left[i].length;++j){obj.left[i][j]=ma.min(ma.abs(original_left[i][j]),ma.abs(original_left[i][j]*((opt.counters_left[i]++)/framesperbar)));if(original_left[i][j]<0){obj.left[i][j]*=-1;}}}
if(isNull){obj.left[i]=null;}}else{obj.left[i]=typeof obj.left[i]==='object'&&obj.left[i]?RG.arrayPad([],obj.left[i].length,0):(RG.isNull(obj.left[i])?null:0);}}
if(frame_left<opt.frames){RG.redrawCanvas(obj.canvas);RG.Effects.updateCanvas(iteratorLeft);}}
function iteratorRight()
{++frame_right;for(var i=0,len=obj.right.length;i<len;i+=1){if(frame_right>opt.startFrames_right[i]){var isNull=RG.isNull(obj.right[i]);if(typeof obj.left[i]==='number'){obj.right[i]=ma.min(ma.abs(original_right[i]),ma.abs(original_right[i]*((opt.counters_right[i]++)/framesperbar)));if(original_right[i]<0){obj.right[i]*=-1;}
if(isNull){obj.right[i]=null;}}else if(RG.isArray(obj.right[i])){for(var j=0;j<obj.right[i].length;++j){obj.right[i][j]=ma.min(ma.abs(original_right[i][j]),ma.abs(original_right[i][j]*((opt.counters_right[i]++)/framesperbar)));if(original_right[i][j]<0){obj.right[i][j]*=-1;}}}}else{obj.right[i]=typeof obj.right[i]==='object'&&obj.right[i]?RG.arrayPad([],obj.right[i].length,0):(RG.isNull(obj.right[i])?null:0);}}
if(frame_right<opt.frames){RG.redrawCanvas(obj.canvas);RG.Effects.updateCanvas(iteratorRight);}else{callback(this);}}
iteratorLeft();iteratorRight();return this;};};