// THIS FILE HAS BEEN MINIFIED

if(typeof(RGraph) == 'undefined') RGraph = {};RGraph.Funnel = function (id, data)
{
this.id = id;this.canvas = document.getElementById(id);this.context = this.canvas.getContext ? this.canvas.getContext("2d") : null;this.canvas.__object__ = this;this.type = 'funnel';this.coords = [];this.isRGraph = true;this.uid = RGraph.CreateUID();RGraph.OldBrowserCompat(this.context);if(!this.canvas){
alert('[FUNNEL] No canvas support');return;}
this.properties = {
'chart.strokestyle':           'black',
'chart.gutter.left':           25,
'chart.gutter.right':          25,
'chart.gutter.top':            25,
'chart.gutter.bottom':         25,
'chart.labels':                null,
'chart.labels.sticks':         false,
'chart.title':                 '',
'chart.title.background':       null,
'chart.title.hpos':             null,
'chart.title.vpos':            null,
'chart.title.bold':             true,
'chart.title.font':             null,
'chart.colors':                ['red', 'green', 'gray', 'blue', 'black', 'gray'],
'chart.text.size':             10,
'chart.text.boxed':            true,
'chart.text.halign':           'left',
'chart.text.color':            'black',
'chart.text.font':             'Arial',
'chart.contextmenu':           null,
'chart.shadow':                false,
'chart.shadow.color':          '#666',
'chart.shadow.blur':           3,
'chart.shadow.offsetx':        3,
'chart.shadow.offsety':        3,
'chart.key':                    [],
'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': true,
'chart.key.position.x':         null,
'chart.key.position.y':         null,
'chart.key.color.shape':        'square',
'chart.key.rounded':            true,
'chart.key.linewidth':          1,
'chart.key.colors':             null,
'chart.tooltips':               null,
'chart.tooltips.effect':        'fade',
'chart.tooltips.css.class':     'RGraph_tooltip',
'chart.highlight.stroke':       'rgba(0,0,0,0)',
'chart.highlight.fill':         'rgba(255,255,255,0.7)',
'chart.tooltips.highlight':     true,
'chart.annotatable':           false,
'chart.annotate.color':        'black',
'chart.zoom.factor':           1.5,
'chart.zoom.fade.in':          true,
'chart.zoom.fade.out':         true,
'chart.zoom.factor':           1.5,
'chart.zoom.fade.in':          true,
'chart.zoom.fade.out':         true,
'chart.zoom.hdir':             'right',
'chart.zoom.vdir':             'down',
'chart.zoom.frames':            25,
'chart.zoom.delay':             16.666,
'chart.zoom.shadow':            true,
'chart.zoom.mode':              'canvas',
'chart.zoom.thumbnail.width':   75,
'chart.zoom.thumbnail.height':  75,
'chart.zoom.thumbnail.fixed':   false,
'chart.zoom.background':        true,
'chart.zoom.action':            'zoom',
'chart.resizable':              false,
'chart.taper':                  true,
'chart.events.click':           null,
'chart.events.mousemove':       null
}
this.data = data;this.getShape = this.getSegment;RGraph.Register(this);}
RGraph.Funnel.prototype.Set = function (name, value)
{
this.properties[name.toLowerCase()] = value;}
RGraph.Funnel.prototype.Get = function (name)
{
return this.properties[name.toLowerCase()];}
RGraph.Funnel.prototype.Draw = function ()
{
RGraph.FireCustomEvent(this, 'onbeforedraw');this.gutterLeft = this.Get('chart.gutter.left');this.gutterRight = this.Get('chart.gutter.right');this.gutterTop = this.Get('chart.gutter.top');this.gutterBottom = this.Get('chart.gutter.bottom');this.coords = [];RGraph.DrawTitle(this.canvas, this.Get('chart.title'), this.gutterTop, null, this.Get('chart.title.size') ? this.Get('chart.title.size') : this.Get('chart.text.size') + 2);this.DrawFunnel();if(this.Get('chart.contextmenu')){
RGraph.ShowContext(this);}
RGraph.InstallUserClickListener(this, this.Get('chart.events.click'));RGraph.InstallUserMousemoveListener(this, this.Get('chart.events.mousemove'));RGraph.AllowTooltips(this);this.DrawLabels();if(this.Get('chart.annotatable')){
RGraph.Annotate(this);}
if(this.Get('chart.zoom.mode') == 'thumbnail'|| this.Get('chart.zoom.mode') == 'area'){
RGraph.ShowZoomWindow(this);}
if(this.Get('chart.resizable')){
RGraph.AllowResizing(this);}
RGraph.FireCustomEvent(this, 'ondraw');}
RGraph.Funnel.prototype.DrawFunnel = function ()
{
var context = this.context;var canvas = this.canvas;var width = this.canvas.width - this.gutterLeft - this.gutterRight;var height = this.canvas.height - this.gutterTop - this.gutterBottom;var total = RGraph.array_max(this.data);var accheight = this.gutterTop;if(this.Get('chart.shadow')){
context.shadowColor = this.Get('chart.shadow.color');context.shadowBlur = this.Get('chart.shadow.blur');context.shadowOffsetX = this.Get('chart.shadow.offsetx');context.shadowOffsetY = this.Get('chart.shadow.offsety');}
for (i=0; i<this.data.length; ++i){
i = Number(i);var firstvalue = this.data[0];var firstwidth = (firstvalue / total) * width;var curvalue = this.data[i];var curwidth = (curvalue / total) * width;var curheight = height / this.data.length;var halfCurWidth = (curwidth / 2);var nextvalue = this.data[i + 1] ?  this.data[i + 1] : 0;var nextwidth = this.data[i + 1] ? (nextvalue / total) * width : 0;var halfNextWidth = (nextwidth / 2);var center = this.gutterLeft + (firstwidth / 2);if(i == 0){
var x1 = center - halfCurWidth;var y1 = this.gutterTop;var x2 = center + halfCurWidth;var y2 = this.gutterTop;var x3 = center + halfNextWidth;var y3 = accheight + curheight;var x4 = center - halfNextWidth;var y4 = accheight + curheight;} else if(this.Get('chart.taper') || i < (this.data.length - 1)){
var x1 = center - halfCurWidth;var y1 = accheight;var x2 = center + halfCurWidth;var y2 = accheight;var x3 = center + halfNextWidth;var y3 = accheight + curheight;var x4 = center - halfNextWidth;var y4 = accheight + curheight;}
if(document.all && this.Get('chart.shadow')){
this.DrawIEShadow([x1, y1, x2, y2, x3, y3, x4, y4], i > 0 && this.Get('chart.shadow.offsety') < 0);}
context.strokeStyle = this.Get('chart.strokestyle');context.fillStyle = this.Get('chart.colors')[i];if(this.Get('chart.taper') || (i < this.data.length - 1) ){
context.beginPath();context.moveTo(x1, y1);context.lineTo(x2, y2);context.lineTo(x3, y3);context.lineTo(x4, y4);context.closePath();this.coords.push([x1, y1, x2, y2, x3, y3, x4, y4]);}
if(!this.Get('chart.shadow')){
context.stroke();}
context.fill();accheight += curheight;}
if(this.Get('chart.shadow')){
RGraph.NoShadow(this);for (i=0; i<this.coords.length; ++i){
context.strokeStyle = this.Get('chart.strokestyle');context.fillStyle = this.Get('chart.colors')[i];context.beginPath();context.moveTo(this.coords[i][0], this.coords[i][1]);context.lineTo(this.coords[i][2], this.coords[i][3]);context.lineTo(this.coords[i][4], this.coords[i][5]);context.lineTo(this.coords[i][6], this.coords[i][7]);context.closePath();context.stroke();context.fill();}
}
if(this.Get('chart.key') && this.Get('chart.key').length){
RGraph.DrawKey(this, this.Get('chart.key'), this.Get('chart.colors'));}
}
RGraph.Funnel.prototype.DrawLabels = function ()
{
if(this.Get('chart.labels') && this.Get('chart.labels').length > 0){
var context = this.context;var font = this.Get('chart.text.font');var size = this.Get('chart.text.size');var color = this.Get('chart.text.color');var labels = this.Get('chart.labels');var halign = this.Get('chart.text.halign') == 'left' ? 'left' : 'center';var bgcolor = this.Get('chart.text.boxed') ? 'white' : null;if(typeof(this.Get('chart.labels.x')) == 'number'){
var x = this.Get('chart.labels.x');} else {
var x = halign == 'left' ? (this.gutterLeft - 15) : ((this.canvas.width - this.gutterLeft - this.gutterRight) / 2) + this.gutterLeft;}
for (var j=0; j<this.coords.length; ++j){
context.beginPath();context.strokeStyle = 'black';context.fillStyle = color;RGraph.NoShadow(this);var label = labels[j];RGraph.Text(context,
font,
size,
x,
this.coords[j][1],
label,
'center',
halign,
this.Get('chart.text.boxed'),
null,
bgcolor);if(this.Get('chart.labels.sticks')){
this.context.font = size + 'pt ' + font;var labelWidth = this.context.measureText(label).width;this.context.beginPath();this.context.strokeStyle = 'gray';this.context.moveTo(x + labelWidth + 10, AA(this, this.coords[j][1]));this.context.lineTo(this.coords[j][0] - 10, AA(this, this.coords[j][1]));this.context.stroke();}
}
var lastLabel = labels[j];if(lastLabel){
RGraph.Text(context, font, size,x,this.coords[j - 1][5],lastLabel,'center',halign,this.Get('chart.text.boxed'),null,bgcolor);if(this.Get('chart.labels.sticks')){
this.context.font = size + 'pt ' + font;var labelWidth = this.context.measureText(lastLabel).width;this.context.beginPath();this.context.strokeStyle = 'gray';this.context.moveTo(x + labelWidth + 10, AA(this, this.coords[j - 1][7]));this.context.lineTo(this.coords[j - 1][0] - 10, AA(this, this.coords[j - 1][7]));this.context.stroke();}
}
}
}
RGraph.Funnel.prototype.DrawIEShadow = function (coords, noOffset)
{
var prevFillStyle = this.context.fillStyle;var offsetx = this.Get('chart.shadow.offsetx');var offsety = this.Get('chart.shadow.offsety');var context = this.context;context.lineWidth = 1;context.fillStyle = this.Get('chart.shadow.color');context.beginPath();context.moveTo(coords[0] + (noOffset ? 0 : offsetx), coords[1] + (noOffset ? 0 : offsety));context.lineTo(coords[2] + (noOffset ? 0 : offsetx), coords[3] + (noOffset ? 0 : offsety));context.lineTo(coords[4] + (noOffset ? 0 : offsetx), coords[5] + (noOffset ? 0 : offsety));context.lineTo(coords[6] + (noOffset ? 0 : offsetx), coords[7] + (noOffset ? 0 : offsety));context.closePath();context.fill();this.context.fillStyle = prevFillStyle;}
RGraph.Funnel.prototype.getSegment = function (e)
{
var canvas = e.target;var obj = canvas.__object__;var mouseCoords = RGraph.getMouseXY(e);var coords = obj.coords;var x = mouseCoords[0];var y = mouseCoords[1];for (i=0; i<coords.length; ++i){
if(
x > coords[i][0]
&& x < coords[i][2]
&& y > coords[i][1]
&& y < coords[i][5]
){
if(x > coords[i][4]){
var w1 = coords[i][2] - coords[i][4];var h1 = coords[i][5] - coords[i][3];;var a1 = Math.atan(h1 / w1) * 57.3;var w2 = coords[i][2] - mouseCoords[0];var h2 = mouseCoords[1] - coords[i][1];var a2 = Math.atan(h2 / w2) * 57.3;if(a2 > a1){
continue;}
} else if(x < coords[i][6]){
var w1 = coords[i][6] - coords[i][0];var h1 = coords[i][7] - coords[i][1];;var a1 = Math.atan(h1 / w1) * 57.3;var w2 = mouseCoords[0] - coords[i][0];var h2 = mouseCoords[1] - coords[i][1];var a2 = Math.atan(h2 / w2) * 57.3;if(a2 > a1){
continue;}
}
return {0: obj, 1: coords, 2: i, 'object': obj, 'coords': coords[i], 'index': i};}
}
return null;}
RGraph.Funnel.prototype.Highlight = function (shape)
{
var coords = shape['coords'];this.context.beginPath();this.context.strokeStyle = this.Get('chart.highlight.stroke');this.context.fillStyle = this.Get('chart.highlight.fill');this.context.moveTo(coords[0], coords[1]);this.context.lineTo(coords[2], coords[3]);this.context.lineTo(coords[4], coords[5]);this.context.lineTo(coords[6], coords[7]);this.context.closePath();this.context.stroke();this.context.fill();}
