RGraph=window.RGraph||{isRGraph:true};(function(win,doc,undefined) {var RG=RGraph,ua=navigator.userAgent,ma=Math;RG.Highlight={};RG.Registry={};RG.Registry.store=[];RG.Registry.store['chart.event.handlers']=[];RG.Registry.store['__rgraph_event_listeners__']=[];RG.Background={};RG.background={};RG.objects=[];RG.Resizing={};RG.events=[];RG.cursor=[];RG.Effects=RG.Effects||{};RG.cache=[];RG.ObjectRegistry={};RG.ObjectRegistry.objects={};RG.ObjectRegistry.objects.byUID=[];RG.ObjectRegistry.objects.byCanvasID=[];RG.PI=ma.PI;RG.HALFPI=RG.PI/2;RG.TWOPI=RG.PI*2;RG.ISFF=ua.indexOf('Firefox')!=-1;RG.ISOPERA=ua.indexOf('Opera')!=-1;RG.ISCHROME=ua.indexOf('Chrome')!=-1;RG.ISSAFARI=ua.indexOf('Safari')!=-1&&!RG.ISCHROME;RG.ISWEBKIT=ua.indexOf('WebKit')!=-1;RG.ISIE=ua.indexOf('Trident')>0||navigator.userAgent.indexOf('MSIE')>0;RG.ISIE6=ua.indexOf('MSIE 6')>0;RG.ISIE7=ua.indexOf('MSIE 7')>0;RG.ISIE8=ua.indexOf('MSIE 8')>0;RG.ISIE9=ua.indexOf('MSIE 9')>0;RG.ISIE10=ua.indexOf('MSIE 10')>0;RG.ISOLD=RGraph.ISIE6||RGraph.ISIE7||RGraph.ISIE8;RG.ISIE11UP=ua.indexOf('MSIE')==-1&&ua.indexOf('Trident')>0;RG.ISIE10UP=RG.ISIE10||RG.ISIE11UP;RG.ISIE9UP=RG.ISIE9||RG.ISIE10UP;RG.getScale=function(max,obj) {if(max==0){return['0.2','0.4','0.6','0.8','1.0'];} var original_max=max;if(max<=1){if(max>0.5){return[0.2,0.4,0.6,0.8,Number(1).toFixed(1)];}else if(max>=0.1){return obj.Get('chart.scale.round')?[0.2,0.4,0.6,0.8,1]:[0.1,0.2,0.3,0.4,0.5];}else{var tmp=max;var exp=0;while(tmp<1.01){exp+=1;tmp*=10;} var ret=['2e-'+exp,'4e-'+exp,'6e-'+exp,'8e-'+exp,'10e-'+exp];if(max<=('5e-'+exp)){ret=['1e-'+exp,'2e-'+exp,'3e-'+exp,'4e-'+exp,'5e-'+exp];} return ret;}} if(String(max).indexOf('.')>0){max=String(max).replace(/\.\d+$/,'');} var interval=ma.pow(10,Number(String(Number(max)).length-1));var topValue=interval;while(topValueNumber(topValue)){topValue+=(interval/2);} if(max<10){topValue=(Number(original_max)<=5?5:10);} if(obj&&typeof(obj.Get('chart.scale.round'))=='boolean'&&obj.Get('chart.scale.round')){topValue=10*interval;} return[topValue*0.2,topValue*0.4,topValue*0.6,topValue*0.8,topValue];};RG.getScale2=function(obj,opt) {var ca=obj.canvas,co=obj.context,prop=obj.properties,numlabels=typeof opt['ylabels.count']=='number'?opt['ylabels.count']:5,units_pre=typeof opt['units.pre']=='string'?opt['units.pre']:'',units_post=typeof opt['units.post']=='string'?opt['units.post']:'',max=Number(opt['max']),min=typeof opt['min']=='number'?opt['min']:0,strict=opt['strict'],decimals=Number(opt['scale.decimals']),point=opt['scale.point'],thousand=opt['scale.thousand'],original_max=max,round=opt['scale.round'],scale={'max':1,'labels':[]} if(!max){var max=1;var scale={max:1,min:0,labels:[]};for(var i=0;i0.5){max=1;min=min;scale.min=min;for(var i=0;i=0.1){max=0.5;min=min;scale={'max':0.5,'min':min,'labels':[]} for(var i=0;i0){var numdecimals=ma.abs(max_str.substring(max_str.indexOf('e')+1));}else{var numdecimals=String(max).length-2;} var max=1/ma.pow(10,numdecimals-1);for(var i=0;iNumber(topValue)){topValue+=(interval/2);} if(max<=10){topValue=(Number(original_max)<=5?5:10);} if(obj&&typeof(round)=='boolean'&&round){topValue=10*interval;} scale.max=topValue;var tmp_point=prop['chart.scale.point'];var tmp_thousand=prop['chart.scale.thousand'];obj.Set('chart.scale.thousand',thousand);obj.Set('chart.scale.point',point);for(var i=0;i=0;i-=1){newarr.push(arr[i]);} return newarr;};RG.clear=RG.Clear=function(ca) {var obj=ca.__object__,co=ca.getContext('2d'),color=arguments[1]||(obj&&obj.get('clearto')) if(!ca){return;} RG.FireCustomEvent(obj,'onbeforeclear');if(RG.ISIE8&&!color){color='white';} if(!color||(color&&color==='rgba(0,0,0,0)'||color==='transparent')){co.clearRect(0,0,ca.width,ca.height);co.globalCompositeOperation='source-over';}else{co.fillStyle=color;co.beginPath();if(RG.ISIE8){co.fillRect(0,0,ca.width,ca.height);}else{co.fillRect(-10,-10,ca.width+20,ca.height+20);} co.fill();} if(RG.Registry.Get('chart.background.image.'+ca.id)){var img=RG.Registry.Get('chart.background.image.'+ca.id);img.style.position='absolute';img.style.left='-10000px';img.style.top='-10000px';} if(RG.Registry.Get('chart.tooltip')&&obj.get('chart.tooltips.nohideonclear')!==true){RG.HideTooltip(ca);} ca.style.cursor='default';RG.FireCustomEvent(obj,'onclear');};RG.drawTitle=RG.DrawTitle=function(obj,text,gutterTop) {var ca=canvas=obj.canvas,co=context=obj.context,prop=obj.properties,gutterLeft=prop['chart.gutter.left'],gutterRight=prop['chart.gutter.right'],gutterTop=gutterTop,gutterBottom=prop['chart.gutter.bottom'],size=arguments[4]?arguments[4]:12,bold=prop['chart.title.bold'],centerx=(arguments[3]?arguments[3]:((ca.width-gutterLeft-gutterRight)/2)+gutterLeft),keypos=prop['chart.key.position'],vpos=prop['chart.title.vpos'],hpos=prop['chart.title.hpos'],bgcolor=prop['chart.title.background'],x=prop['chart.title.x'],y=prop['chart.title.y'],halign='center',valign='center' if(obj.type=='bar'&&prop['chart.variant']=='3d'){keypos='gutter';} co.beginPath();co.fillStyle=prop['chart.text.color']?prop['chart.text.color']:'black';if(keypos&&keypos!='gutter'){var valign='center';}else if(!keypos){var valign='center';}else{var valign='bottom';} if(typeof prop['chart.title.vpos']==='number'){vpos=prop['chart.title.vpos']*gutterTop;if(prop['chart.xaxispos']==='top'){vpos=prop['chart.title.vpos']*gutterBottom+gutterTop+(ca.height-gutterTop-gutterBottom);}}else{vpos=gutterTop-size-5;if(prop['chart.xaxispos']==='top'){vpos=ca.height-gutterBottom+size+5;}} if(typeof hpos==='number'){centerx=hpos*ca.width;} if(typeof x==='number')centerx=x;if(typeof y==='number')vpos=y;if(typeof prop['chart.title.halign']==='string'){halign=prop['chart.title.halign'];} if(typeof prop['chart.title.valign']==='string'){valign=prop['chart.title.valign'];} if(typeof prop['chart.title.color']!==null){var oldColor=co.fillStyle var newColor=prop['chart.title.color'];co.fillStyle=newColor?newColor:'black';} var font=prop['chart.text.font'];if(typeof prop['chart.title.font']==='string'){font=prop['chart.title.font'];} RG.Text2(co,{'font':font,'size':size,'x':centerx,'y':vpos,'text':text,'valign':valign,'halign':halign,'bounding':bgcolor!=null,'bounding.fill':bgcolor,'bold':bold,'tag':'title'});co.fillStyle=oldColor;};RG.getMouseXY=function(e) {var el=e.target;var ca=el;var caStyle=ca.style;var offsetX=0;var offsetY=0;var x;var y;var ISFIXED=(ca.style.position=='fixed');var borderLeft=parseInt(caStyle.borderLeftWidth)||0;var borderTop=parseInt(caStyle.borderTopWidth)||0;var paddingLeft=parseInt(caStyle.paddingLeft)||0 var paddingTop=parseInt(caStyle.paddingTop)||0 var additionalX=borderLeft+paddingLeft;var additionalY=borderTop+paddingTop;if(typeof e.offsetX==='number'&&typeof e.offsetY==='number'){if(ISFIXED){if(RG.ISOPERA){x=e.offsetX;y=e.offsetY;}else if(RG.ISWEBKIT){x=e.offsetX-paddingLeft-borderLeft;y=e.offsetY-paddingTop-borderTop;}else if(RG.ISIE){x=e.offsetX-paddingLeft;y=e.offsetY-paddingTop;}else{x=e.offsetX;y=e.offsetY;}}else{if(!RG.ISIE&&!RG.ISOPERA){x=e.offsetX-borderLeft-paddingLeft;y=e.offsetY-borderTop-paddingTop;}else if(RG.ISIE){x=e.offsetX-paddingLeft;y=e.offsetY-paddingTop;}else{x=e.offsetX;y=e.offsetY;}}}else{if(typeof el.offsetParent!=='undefined'){do{offsetX+=el.offsetLeft;offsetY+=el.offsetTop;}while((el=el.offsetParent));} x=e.pageX-offsetX-additionalX;y=e.pageY-offsetY-additionalY;x-=(2*(parseInt(document.body.style.borderLeftWidth)||0));y-=(2*(parseInt(document.body.style.borderTopWidth)||0));} return[x,y];};RG.getCanvasXY=function(canvas) {var x=0;var y=0;var el=canvas;do{x+=el.offsetLeft;y+=el.offsetTop;if(el.tagName.toLowerCase()=='table'&&(RG.ISCHROME||RG.ISSAFARI)){x+=parseInt(el.border)||0;y+=parseInt(el.border)||0;} el=el.offsetParent;}while(el&&el.tagName.toLowerCase()!='body');var paddingLeft=canvas.style.paddingLeft?parseInt(canvas.style.paddingLeft):0;var paddingTop=canvas.style.paddingTop?parseInt(canvas.style.paddingTop):0;var borderLeft=canvas.style.borderLeftWidth?parseInt(canvas.style.borderLeftWidth):0;var borderTop=canvas.style.borderTopWidth?parseInt(canvas.style.borderTopWidth):0;if(navigator.userAgent.indexOf('Firefox')>0){x+=parseInt(document.body.style.borderLeftWidth)||0;y+=parseInt(document.body.style.borderTopWidth)||0;} return[x+paddingLeft+borderLeft,y+paddingTop+borderTop];};RG.isFixed=function(canvas) {var obj=canvas;var i=0;while(obj&&obj.tagName.toLowerCase()!='body'&&i<99){if(obj.style.position=='fixed'){return obj;} obj=obj.offsetParent;} return false;};RG.register=RG.Register=function(obj) {if(!obj.Get('chart.noregister')){RGraph.ObjectRegistry.Add(obj);obj.Set('chart.noregister',true);}};RG.redraw=RG.Redraw=function() {var objectRegistry=RGraph.ObjectRegistry.objects.byCanvasID;var tags=document.getElementsByTagName('canvas');for(var i=0,len=tags.length;i0){return String(prepend+String(num)+append);} num=String(num);if(num.indexOf('.')>0){var tmp=num;num=num.replace(/\.(.*)/,'');decimal=tmp.replace(/(.*)\.(.*)/,'$2');} var seperator=thousand_seperator;var foundPoint;for(i=(num.length-1),j=0;i>=0;j++,i--){var character=num.charAt(i);if(j%3==0&&j!=0){output+=seperator;} output+=character;} var rev=output;output='';for(i=(rev.length-1);i>=0;i--){output+=rev.charAt(i);} if(output.indexOf('-'+prop['chart.scale.thousand'])==0){output='-'+output.substr(('-'+prop['chart.scale.thousand']).length);} if(decimal.length){output=output+decimal_seperator+decimal;decimal='';RegExp.$1='';} if(output.charAt(0)=='-'){output=output.replace(/-/,'');prepend='-'+prepend;} return prepend+output+append;};RG.drawBars=RG.DrawBars=function(obj) {var prop=obj.properties;var co=obj.context;var ca=obj.canvas;var hbars=prop['chart.background.hbars'];if(hbars===null){return;} co.beginPath();for(i=0,len=hbars.length;iobj.scale2.max)start=obj.scale2.max;if(RG.is_null(length))length=obj.scale2.max-start;if(start+length>obj.scale2.max)length=obj.scale2.max-start;if(start+length<(-1*obj.scale2.max))length=(-1*obj.scale2.max)-start;if(prop['chart.xaxispos']=='center'&&start==obj.scale2.max&&length<(obj.scale2.max*-2)){length=obj.scale2.max*-2;} var x=prop['chart.gutter.left'];var y=obj.getYCoord(start);var w=ca.width-prop['chart.gutter.left']-prop['chart.gutter.right'];var h=obj.getYCoord(start+length)-y;if(RG.ISOPERA!=-1&&prop['chart.xaxispos']=='center'&&h<0){h*=-1;y=y-h;} if(prop['chart.xaxispos']=='top'){y=ca.height-y;h*=-1;} co.fillStyle=color;co.fillRect(x,y,w,h);}};RG.drawInGraphLabels=RG.DrawInGraphLabels=function(obj) {var ca=obj.canvas;var co=obj.context;var prop=obj.properties;var labels=prop['chart.labels.ingraph'];var labels_processed=[];var fgcolor='black';var bgcolor='white';var direction=1;if(!labels){return;} for(var i=0,len=labels.length;i0){for(var i=0,len=labels_processed.length;i0){var x=(obj.type=='bar'?coords[0]+(coords[2]/2):coords[0]);var y=(obj.type=='bar'?coords[1]+(coords[3]/2):coords[1]);var length=typeof labels_processed[i][4]==='number'?labels_processed[i][4]:25;co.beginPath();co.fillStyle='black';co.strokeStyle='black';if(obj.type==='bar'){if(obj.Get('chart.xaxispos')=='top'){length*=-1;} if(prop['chart.variant']=='dot'){co.moveTo(ma.round(x),obj.coords[i][1]-5);co.lineTo(ma.round(x),obj.coords[i][1]-5-length);var text_x=ma.round(x);var text_y=obj.coords[i][1]-5-length;}else if(prop['chart.variant']=='arrow'){co.moveTo(ma.round(x),obj.coords[i][1]-5);co.lineTo(ma.round(x),obj.coords[i][1]-5-length);var text_x=ma.round(x);var text_y=obj.coords[i][1]-5-length;}else{co.arc(ma.round(x),y,2.5,0,6.28,0);co.moveTo(ma.round(x),y);co.lineTo(ma.round(x),y-length);var text_x=ma.round(x);var text_y=y-length;} co.stroke();co.fill();}else if(obj.type=='line'){if(typeof labels_processed[i]=='object'&&typeof labels_processed[i][3]=='number'&&labels_processed[i][3]==-1){co.moveTo(ma.round(x),y+5);co.lineTo(ma.round(x),y+5+length);co.stroke();co.beginPath();co.moveTo(ma.round(x),y+5);co.lineTo(ma.round(x)-3,y+10);co.lineTo(ma.round(x)+3,y+10);co.closePath();var text_x=x;var text_y=y+5+length;}else{var text_x=x;var text_y=y-5-length;co.moveTo(ma.round(x),y-5);co.lineTo(ma.round(x),y-5-length);co.stroke();co.beginPath();co.moveTo(ma.round(x),y-5);co.lineTo(ma.round(x)-3,y-10);co.lineTo(ma.round(x)+3,y-10);co.closePath();} co.fill();} co.beginPath();co.fillStyle=(typeof labels_processed[i]==='object'&&typeof labels_processed[i][1]==='string')?labels_processed[i][1]:'black';RG.Text2(obj,{'font':prop['chart.text.font'],'size':prop['chart.text.size'],'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,'bounding.fill':(typeof labels_processed[i]==='object'&&typeof labels_processed[i][2]==='string')?labels_processed[i][2]:'white','tag':'labels ingraph'});co.fill();}}}}};RG.fixEventObject=RG.FixEventObject=function(e) {if(RG.ISOLD){var e=event;e.pageX=(event.clientX+doc.body.scrollLeft);e.pageY=(event.clientY+doc.body.scrollTop);e.target=event.srcElement;if(!doc.body.scrollTop&&doc.documentElement.scrollTop){e.pageX+=parseInt(doc.documentElement.scrollLeft);e.pageY+=parseInt(doc.documentElement.scrollTop);}} if(!e.stopPropagation){e.stopPropagation=function(){window.event.cancelBubble=true;}} return e;};RG.hideCrosshairCoords=RG.HideCrosshairCoords=function() {var div=RG.Registry.Get('chart.coordinates.coords.div');if(div&&div.style.opacity==1&&div.__object__.Get('chart.crosshairs.coords.fadeout')){var style=RG.Registry.Get('chart.coordinates.coords.div').style;setTimeout(function(){style.opacity=0.9;},25);setTimeout(function(){style.opacity=0.8;},50);setTimeout(function(){style.opacity=0.7;},75);setTimeout(function(){style.opacity=0.6;},100);setTimeout(function(){style.opacity=0.5;},125);setTimeout(function(){style.opacity=0.4;},150);setTimeout(function(){style.opacity=0.3;},175);setTimeout(function(){style.opacity=0.2;},200);setTimeout(function(){style.opacity=0.1;},225);setTimeout(function(){style.opacity=0;},250);setTimeout(function(){style.display='none';},275);}};RG.draw3DAxes=RG.Draw3DAxes=function(obj) {var prop=obj.properties;var co=obj.context;var ca=obj.canvas;var gutterLeft=obj.gutterLeft,gutterRight=obj.gutterRight,gutterTop=obj.gutterTop,gutterBottom=obj.gutterBottom,xaxispos=prop['chart.xaxispos'],graphArea=ca.height-gutterTop-gutterBottom,halfGraphArea=graphArea/2,offsetx=prop['chart.variant.threed.offsetx'],offsety=prop['chart.variant.threed.offsety'] if(!prop['chart.noaxes']&&!prop['chart.noyaxis']){RG.path(co,['b','m',gutterLeft,gutterTop,'l',gutterLeft+offsetx,gutterTop-offsety,'l',gutterLeft+offsetx,ca.height-gutterBottom-offsety,'l',gutterLeft,ca.height-gutterBottom]);} if(xaxispos==='center'){RG.path(co,['m',gutterLeft,gutterTop+halfGraphArea,'l',gutterLeft+offsetx,gutterTop+halfGraphArea-offsety,'l',ca.width-gutterRight+offsetx,gutterTop+halfGraphArea-offsety,'l',ca.width-gutterRight,gutterTop+halfGraphArea,'c','s','#aaa','f','#ddd']);}else{RG.path(co,['m',gutterLeft,ca.height-gutterBottom,'l',gutterLeft+offsetx,ca.height-gutterBottom-offsety,'l',ca.width-gutterRight+offsetx,ca.height-gutterBottom-offsety,'l',ca.width-gutterRight,ca.height-gutterBottom,'c','s','#aaa','f','#ddd']);}};RG.strokedCurvyRect=function(co,x,y,w,h) {var r=arguments[5]?arguments[5]:3;var corner_tl=(arguments[6]||arguments[6]==null)?true:false;var corner_tr=(arguments[7]||arguments[7]==null)?true:false;var corner_br=(arguments[8]||arguments[8]==null)?true:false;var corner_bl=(arguments[9]||arguments[9]==null)?true:false;co.beginPath();co.moveTo(x+(corner_tl?r:0),y);co.lineTo(x+w-(corner_tr?r:0),y);if(corner_tr){co.arc(x+w-r,y+r,r,RG.PI+RG.HALFPI,RG.TWOPI,false);} co.lineTo(x+w,y+h-(corner_br?r:0));if(corner_br){co.arc(x+w-r,y-r+h,r,RG.TWOPI,RG.HALFPI,false);} co.lineTo(x+(corner_bl?r:0),y+h);if(corner_bl){co.arc(x+r,y-r+h,r,RG.HALFPI,RG.PI,false);} co.lineTo(x,y+(corner_tl?r:0));if(corner_tl){co.arc(x+r,y+r,r,RG.PI,RG.PI+RG.HALFPI,false);} co.stroke();};RG.filledCurvyRect=function(co,x,y,w,h) {var r=arguments[5]?arguments[5]:3;var corner_tl=(arguments[6]||arguments[6]==null)?true:false;var corner_tr=(arguments[7]||arguments[7]==null)?true:false;var corner_br=(arguments[8]||arguments[8]==null)?true:false;var corner_bl=(arguments[9]||arguments[9]==null)?true:false;co.beginPath();if(corner_tl){co.moveTo(x+r,y+r);co.arc(x+r,y+r,r,RG.PI,RG.PI+RG.HALFPI,false);}else{co.fillRect(x,y,r,r);} if(corner_tr){co.moveTo(x+w-r,y+r);co.arc(x+w-r,y+r,r,RG.PI+RG.HALFPI,0,false);}else{co.moveTo(x+w-r,y);co.fillRect(x+w-r,y,r,r);} if(corner_br){co.moveTo(x+w-r,y+h-r);co.arc(x+w-r,y-r+h,r,0,RG.HALFPI,false);}else{co.moveTo(x+w-r,y+h-r);co.fillRect(x+w-r,y+h-r,r,r);} if(corner_bl){co.moveTo(x+r,y+h-r);co.arc(x+r,y-r+h,r,RG.HALFPI,RG.PI,false);}else{co.moveTo(x,y+h-r);co.fillRect(x,y+h-r,r,r);} co.fillRect(x+r,y,w-r-r,h);co.fillRect(x,y+r,r+1,h-r-r);co.fillRect(x+w-r-1,y+r,r+1,h-r-r);co.fill();};RG.hideZoomedCanvas=RG.HideZoomedCanvas=function() {var interval=10;var frames=15;if(typeof RG.zoom_image==='object'){var obj=RG.zoom_image.obj;var prop=obj.properties;}else{return;} if(prop['chart.zoom.fade.out']){for(var i=frames,j=1;i>=0;--i,++j){if(typeof RG.zoom_image==='object'){setTimeout("RGraph.zoom_image.style.opacity = "+String(i/10),j*interval);}} if(typeof RG.zoom_background==='object'){setTimeout("RGraph.zoom_background.style.opacity = "+String(i/frames),j*interval);}} if(typeof RG.zoom_image==='object'){setTimeout("RGraph.zoom_image.style.display = 'none'",prop['chart.zoom.fade.out']?(frames*interval)+10:0);} if(typeof RG.zoom_background==='object'){setTimeout("RGraph.zoom_background.style.display = 'none'",prop['chart.zoom.fade.out']?(frames*interval)+10:0);}};RG.addCustomEventListener=RG.AddCustomEventListener=function(obj,name,func) {var RG=RGraph;if(typeof RG.events[obj.uid]==='undefined'){RG.events[obj.uid]=[];} RG.events[obj.uid].push([obj,name,func]);return RG.events[obj.uid].length-1;};RG.fireCustomEvent=RG.FireCustomEvent=function(obj,name) {if(obj&&obj.isRGraph){if(obj[name]){(obj[name])(obj);} var uid=obj.uid;if(typeof uid==='string'&&typeof RG.events==='object'&&typeof RG.events[uid]==='object'&&RG.events[uid].length>0){for(var j=0;j=0;--i){var obj=objects[i].getObjectByXY(e);if(obj){return obj;}}};RG.ObjectRegistry.getObjectsByXY=function(e) {var canvas=e.target;var ret=[];var objects=RG.ObjectRegistry.getObjectsByCanvasID(canvas.id);for(var i=(objects.length-1);i>=0;--i){var obj=objects[i].getObjectByXY(e);if(obj){ret.push(obj);}} return ret;};RG.ObjectRegistry.getObjectByUID=function(uid) {var objects=RG.ObjectRegistry.objects.byUID;for(var i=0,len=objects.length;i=cx&&y>=cy){angle+=RG.TWOPI;}else if(x>=cx&&yRG.TWOPI){angle-=RG.TWOPI;} return angle;};RG.getHypLength=function(x1,y1,x2,y2) {var ret=ma.sqrt(((x2-x1)*(x2-x1))+((y2-y1)*(y2-y1)));return ret;};RG.getRadiusEndPoint=function(cx,cy,angle,radius) {var x=cx+(ma.cos(angle)*radius);var y=cy+(ma.sin(angle)*radius);return[x,y];};RG.installEventListeners=RG.InstallEventListeners=function(obj) {var prop=obj.properties;if(RG.ISOLD){return;} if(RG.installCanvasClickListener){RG.installWindowMousedownListener(obj);RG.installWindowMouseupListener(obj);RG.installCanvasMousemoveListener(obj);RG.installCanvasMouseupListener(obj);RG.installCanvasMousedownListener(obj);RG.installCanvasClickListener(obj);}else if(RG.hasTooltips(obj)||prop['chart.adjustable']||prop['chart.annotatable']||prop['chart.contextmenu']||prop['chart.resizable']||prop['chart.key.interactive']||prop['chart.events.click']||prop['chart.events.mousemove']||typeof obj.onclick==='function'||typeof obj.onmousemove==='function'){alert('[RGRAPH] You appear to have used dynamic features but not included the file: RGraph.common.dynamic.js');}};RG.pr=function(obj) {var indent=(arguments[2]?arguments[2]:' ');var str='';var counter=typeof arguments[3]=='number'?arguments[3]:0;if(counter>=5){return'';} switch(typeof obj){case'string':str+=obj+' ('+(typeof obj)+', '+obj.length+')';break;case'number':str+=obj+' ('+(typeof obj)+')';break;case'boolean':str+=obj+' ('+(typeof obj)+')';break;case'function':str+='function () {}';break;case'undefined':str+='undefined';break;case'null':str+='null';break;case'object':if(RGraph.is_null(obj)){str+=indent+'null\n';}else{str+=indent+'Object {'+'\n' for(j in obj){str+=indent+' '+j+' => '+RGraph.pr(obj[j],true,indent+' ',counter+1)+'\n';} str+=indent+'}';} break;default:str+='Unknown type: '+typeof obj+'';break;} if(!arguments[1]){alert(str);} return str;};RG.dashedLine=RG.DashedLine=function(co,x1,y1,x2,y2) {var size=5;if(typeof arguments[5]==='number'){size=arguments[5];} var dx=x2-x1;var dy=y2-y1;var num=ma.floor(ma.sqrt((dx*dx)+(dy*dy))/size);var xLen=dx/num;var yLen=dy/num;var count=0;do{(count%2==0&&count>0)?co.lineTo(x1,y1):co.moveTo(x1,y1);x1+=xLen;y1+=yLen;}while(count++<=num);};RG.AJAX=function(url,callback) {if(window.XMLHttpRequest){var httpRequest=new XMLHttpRequest();}else if(window.ActiveXObject){var httpRequest=new ActiveXObject("Microsoft.XMLHTTP");} httpRequest.onreadystatechange=function() {if(this.readyState==4&&this.status==200){this.__user_callback__=callback;this.__user_callback__(this.responseText);}} httpRequest.open('GET',url,true);httpRequest.send();};RG.AJAX.POST=function(url,data,callback) {var crumbs=[];if(window.XMLHttpRequest){var httpRequest=new XMLHttpRequest();}else if(window.ActiveXObject){var httpRequest=new ActiveXObject("Microsoft.XMLHTTP");} httpRequest.onreadystatechange=function() {if(this.readyState==4&&this.status==200){this.__user_callback__=callback;this.__user_callback__(this.responseText);}} httpRequest.open('POST',url,true);httpRequest.setRequestHeader("Content-type","application/x-www-form-urlencoded");for(i in data){if(typeof i=='string'){crumbs.push(i+'='+encodeURIComponent(data[i]));}} httpRequest.send(crumbs.join('&'));};RG.AJAX.getNumber=function(url,callback) {RG.AJAX(url,function() {var num=parseFloat(this.responseText);callback(num);});};RG.AJAX.getString=function(url,callback) {RG.AJAX(url,function() {var str=String(this.responseText);callback(str);});};RG.AJAX.getJSON=function(url,callback) {RG.AJAX(url,function() {var json=eval('('+this.responseText+')');callback(json);});};RG.AJAX.getCSV=function(url,callback) {var seperator=arguments[2]?arguments[2]:',';RG.AJAX(url,function() {var regexp=new RegExp(seperator);var arr=this.responseText.split(regexp);for(var i=0,len=arr.length;i');div.style.fontFamily=font;div.style.fontWeight=bold?'bold':'normal';div.style.fontSize=(size||12)+'pt';var size=[div.offsetWidth,div.offsetHeight];RGraph.measuretext_cache[str]=size;return size;};RG.text2=RG.Text2=function(obj,opt) {if(obj&&obj.isRGraph){var obj=obj;var co=obj.context;var ca=obj.canvas;}else if(typeof obj=='string'){var ca=document.getElementById(obj);var co=ca.getContext('2d');var obj=ca.__object__;}else if(typeof obj.getContext==='function'){var ca=obj;var co=ca.getContext('2d');var obj=ca.__object__;}else if(obj.toString().indexOf('CanvasRenderingContext2D')!=-1||RGraph.ISIE8&&obj.moveTo){var co=obj;var ca=obj.canvas;var obj=ca.__object__;}else if(RG.ISOLD&&obj.fillText){var co=obj;var ca=obj.canvas;var obj=ca.__object__;} var x=opt.x;var y=opt.y;var originalX=x;var originalY=y;var text=opt.text;var text_multiline=typeof text==='string'?text.split(/\r?\n/g):'';var numlines=text_multiline.length;var font=opt.font?opt.font:'Arial';var size=opt.size?opt.size:10;var size_pixels=size*1.5;var bold=opt.bold;var italic=opt.italic;var halign=opt.halign?opt.halign:'left';var valign=opt.valign?opt.valign:'bottom';var tag=typeof opt.tag=='string'&&opt.tag.length>0?opt.tag:'';var marker=opt.marker;var angle=opt.angle||0;if(typeof opt.boundingFill==='string')opt['bounding.fill']=opt.boundingFill;if(typeof opt.boundingStroke==='string')opt['bounding.stroke']=opt.boundingStroke;var bounding=opt.bounding;var bounding_stroke=opt['bounding.stroke']?opt['bounding.stroke']:'black';var bounding_fill=opt['bounding.fill']?opt['bounding.fill']:'rgba(255,255,255,0.7)';var bounding_shadow=opt['bounding.shadow'];var bounding_shadow_color=opt['bounding.shadow.color']||'#ccc';var bounding_shadow_blur=opt['bounding.shadow.blur']||3;var bounding_shadow_offsetx=opt['bounding.shadow.offsetx']||3;var bounding_shadow_offsety=opt['bounding.shadow.offsety']||3;var bounding_linewidth=opt['bounding.linewidth']||1;var ret={};if(typeof opt.color==='string'){var orig_fillstyle=co.fillStyle;co.fillStyle=opt.color;} if(typeof text=='number'){text=String(text);} if(typeof text!=='string'){return;} if(angle!=0){co.save();co.translate(x,y);co.rotate((ma.PI/180)*angle) x=0;y=0;} co.font=(opt.italic?'italic ':'')+(opt.bold?'bold ':'')+size+'pt '+font;var width=0;for(var i=0;i1){y-=((numlines-1)*size_pixels);} var boundingY=y-size_pixels-2;} var boundingW=width+4;var boundingH=height+4;if(bounding){var pre_bounding_linewidth=co.lineWidth;var pre_bounding_strokestyle=co.strokeStyle;var pre_bounding_fillstyle=co.fillStyle;var pre_bounding_shadowcolor=co.shadowColor;var pre_bounding_shadowblur=co.shadowBlur;var pre_bounding_shadowoffsetx=co.shadowOffsetX;var pre_bounding_shadowoffsety=co.shadowOffsetY;co.lineWidth=bounding_linewidth;co.strokeStyle=bounding_stroke;co.fillStyle=bounding_fill;if(bounding_shadow){co.shadowColor=bounding_shadow_color;co.shadowBlur=bounding_shadow_blur;co.shadowOffsetX=bounding_shadow_offsetx;co.shadowOffsetY=bounding_shadow_offsety;} co.strokeRect(boundingX,boundingY,boundingW,boundingH);co.fillRect(boundingX,boundingY,boundingW,boundingH);co.lineWidth=pre_bounding_linewidth;co.strokeStyle=pre_bounding_strokestyle;co.fillStyle=pre_bounding_fillstyle;co.shadowColor=pre_bounding_shadowcolor co.shadowBlur=pre_bounding_shadowblur co.shadowOffsetX=pre_bounding_shadowoffsetx co.shadowOffsetY=pre_bounding_shadowoffsety} if(numlines>1){for(var i=0;i=0){if(RG.is_null(data[group])){group++;grouped_index=0;continue;} if(typeof data[group]=='number'){group++ grouped_index=0;continue;} grouped_index++;if(grouped_index>=data[group].length){group++;grouped_index=0;}} return[group,grouped_index];};RG.Highlight.rect=RG.Highlight.Rect=function(obj,shape) {var ca=obj.canvas;var co=obj.context;var prop=obj.properties;if(prop['chart.tooltips.highlight']){co.lineWidth=1;co.beginPath();co.strokeStyle=prop['chart.highlight.stroke'];co.fillStyle=prop['chart.highlight.fill'];co.rect(shape['x'],shape['y'],shape['width'],shape['height']);co.stroke();co.fill();}};RG.Highlight.point=RG.Highlight.Point=function(obj,shape) {var prop=obj.properties;var ca=obj.canvas;var co=obj.context;if(prop['chart.tooltips.highlight']){co.beginPath();co.strokeStyle=prop['chart.highlight.stroke'];co.fillStyle=prop['chart.highlight.fill'];var radius=prop['chart.highlight.point.radius']||2;co.arc(shape['x'],shape['y'],radius,0,RG.TWOPI,0);co.stroke();co.fill();}};RG.parseDate=function(str) {str=RG.trim(str);if(str==='now'){str=(new Date()).toString();} if(str.match(/^(\d\d\d\d)(-|\/)(\d\d)(-|\/)(\d\d)( |T)(\d\d):(\d\d):(\d\d)$/)){str=RegExp.$1+'-'+RegExp.$3+'-'+RegExp.$5+'T'+RegExp.$7+':'+RegExp.$8+':'+RegExp.$9;} if(str.match(/^\d\d\d\d-\d\d-\d\d$/)){str=str.replace(/-/g,'/');} if(str.match(/^\d\d:\d\d:\d\d$/)){var dateObj=new Date();var date=dateObj.getDate();var month=dateObj.getMonth()+1;var year=dateObj.getFullYear();if(String(month).length===1)month='0'+month;if(String(date).length===1)date='0'+date;str=(year+'/'+month+'/'+date)+' '+str;} return Date.parse(str);};RG.resetColorsToOriginalValues=function(obj) {if(obj.original_colors){for(var j in obj.original_colors){if(typeof j==='string'&&j.substr(0,6)==='chart.'){obj.properties[j]=RG.arrayClone(obj.original_colors[j]);}}} if(typeof obj.resetColorsToOriginalValues==='function'){obj.resetColorsToOriginalValues();} obj.colorsParsed=false;};RG.path=RG.Path=function(obj,path) {if(obj.isRGraph&&typeof obj.type==='string'){var co=obj.context;}else{var co=obj;obj=obj.canvas.__object__;} if(typeof path=='string'){path=path.split(/ +/);} for(var i=0,len=path.length;i0&&pos<20;};RG.trim=function(str) {return RG.ltrim(RG.rtrim(str));};RG.ltrim=function(str) {return str.replace(/^(\s|\0)+/,'');};RG.rtrim=function(str) {return str.replace(/(\s|\0)+$/,'');};RG.isNull=RG.is_null=function(arg) {if(arg==null||typeof arg==='object'&&!arg){return true;} return false;};RG.async=RG.Async=function(func) {return setTimeout(func,arguments[1]?arguments[1]:1);};RG.reset=RG.Reset=function(ca) {ca.width=ca.width;RG.ObjectRegistry.clear(ca);ca.__rgraph_aa_translated__=false;};RG.att=function(ca) {} RG.getCanvasTag=function(id) {id=typeof id==='object'?id.id:id;var canvas=doc.getElementById(id);return[id,canvas];};RG.Effects.updateCanvas=RG.Effects.UpdateCanvas=function(func) {win.requestAnimationFrame=win.requestAnimationFrame||win.webkitRequestAnimationFrame||win.msRequestAnimationFrame||win.mozRequestAnimationFrame||(function(func){setTimeout(func,16.666);});win.requestAnimationFrame(func);};RG.Effects.getEasingMultiplier=function(frames,frame) {return ma.pow(ma.sin((frame/frames)*RG.HALFPI),3);};RG.stringsToNumbers=function(str) {var sep=arguments[1]||',';if(typeof str==='number'){return str;} if(typeof str==='string'){if(str.indexOf(sep)!=-1){str=str.split(sep);}else{str=parseFloat(str);}} if(typeof str==='object'){for(var i=0,len=str.length;i0;isArray=value.constructor.toString().indexOf('Array')>0;} if(isObject&&!isArray){recurse(obj,config[key],name+'.'+key,settings);}else if(key==='self'){settings[name]=value;}else{settings[name+'.'+key]=value;}} return settings;};var settings=recurse(obj,config,'chart',{});for(key in settings){if(typeof key==='string'){obj.set(key,settings[key]);}}};RG.path2=function(co,p) {if(typeof p==='string'){p=p.trim();if(p.indexOf('%')!==-1){p=p.split(/%/);for(var i=1;i