(function($)
{
    var counter = 0;

    var generate_labels = function(labels)
    {
      var labels_options = [];
      $.each(labels, function(i, l)
      {
          labels_options.push({label: l, showMarker: false });
      });
      return labels_options;
    }

    $.fn.chart_config = function(data, options)
    {
        if(data.length == 1 && data[0].length == 0)
        {
          this.prepend('<b>Nenhum dado foi encontrado para:</b> ').prepend('<h2>Sem dados para processar</h2>');
        }
        else
        {
          counter++;
          var height = this.height();
          if(height < 300) height = 300;

          var title = this.text();
          var idchart = 'chart'+counter;
          this.html($('<div id="'+idchart+'"></div>').css('height', height));

          this.attr('data-chart-title', title);
          this.attr('data-chart-id', idchart)
          options.title = title;

          $.jqplot (this.attr('data-chart-id'), data, options);
        }
    }

    $.fn.chart_pie_simple = function(data)
    {
        var height = data[0].length*35;
        if(height < 300 ) height = 300;
        this.css('height', height).chart_config(data,
            {
              seriesDefaults: {
                renderer: jQuery.jqplot.PieRenderer,
                rendererOptions: {
                    showDataLabels: true,
                    padding: 30,
                    lineLabels: true, lineLabelsLineColor: '#777',
                    dataLabelFormatString: '%.2f%%'
                }
             },
                  legend: { show:true, location: 'e' },
            }
          );

      $('body').append($('<div id="pietooltip"></div>').css({position: 'absolute', top: 0, left: 0,
                                                                background: 'white', padding: '3px', color: 'black', border: '1px solid'}).hide());
      this.bind('jqplotDataHighlight', function(ev, seriesIndex, pointIndex, data, x)
      {
             $('#pietooltip').show().css({'top': ev.pageY, 'left': ev.pageX+25}).text(data[1]+' registros');
            
      }).bind('jqplotDataUnhighlight', function()
      {
            $('#pietooltip').hide();
      });

      return this;
    }

    $.fn.chart_multi_vertical_bar = function(data, labels, tick)
    {
        var labels_options = [];
        $.each(labels, function(i, l)
        {
            labels_options.push({label: l});
        });

        this.chart_config(data,
        {
            seriesDefaults:{
                renderer:$.jqplot.BarRenderer,
                rendererOptions: {barWidth: 20},
                pointLabels: { show:true }
            },
            series:labels_options,
            legend: {
                show: true
            },
            axes: {
                xaxis: {
                    renderer: $.jqplot.CategoryAxisRenderer,
                    ticks: ['visitas']
                },
                yaxis: {
                    pad: 1.05,
                    padMin: 0,
                    tickOptions: {formatString: '%d'}
                }
            }
        });
        return this;
    };

    $.fn.chart_multi_lines_date = function(data, labels, min_max)
    {
        var labels_options = [];
        $.each(labels, function(i, l)
        {
            labels_options.push({label: l, showMarker: false });
        });

	if(data[1].length == 0 ) data = [data[0]];
        this.chart_config(data,
        {
                series: labels_options,
                legend: {show: true, location: 'e'},
                axes:{xaxis:{renderer:$.jqplot.DateAxisRenderer, pad: 0, tickOptions:{formatString:'%d/%m/%Y'}, min: min_max.min, max: min_max.max},
                        yaxis: {min: 0, tickOptions:{formatString: '%d'}}},
                highlighter: {
                    show: true,
                    sizeAdjust: 7.5,
                },
                cursor: {
                    show: false
                }
            }
        );

        return this;
    }; 

    $.fn.chart_rank_bars = function(data)
    {
        this.css('width', (data[0].length*45)+50).chart_config(data, {
           axesDefaults: {
               tickRenderer: $.jqplot.CanvasAxisTickRenderer,
                tickOptions: { angle: -30 }
            },
          seriesDefaults: {renderer: $.jqplot.BarRenderer, rendererOptions: { barWidth: 20},
                           pointLabels: { show:true } },
          axes: { xaxis:{renderer:$.jqplot.CategoryAxisRenderer}, yaxis: {showTicks: false}}
        }); 
        return true;
    }

    $.fn.chart_bars = function(data)
    {
        this.css('height', (data[0].length*45)+50).chart_config(data, {
           axesDefaults: {
               tickRenderer: $.jqplot.CanvasAxisTickRenderer
            },
          seriesDefaults: {renderer: $.jqplot.BarRenderer, rendererOptions: { barWidth: 20}, pointLabels: { show:true }  },
          axes: {
              xaxis:{renderer:$.jqplot.CategoryAxisRenderer, tickOptions: { angle: -30 }},
              yaxis:{tickOptions: {formatString: '%d'}}
	  }
        }); 
        return this;
    }

    $.fn.chart_bars_complex = function(data, labels, labels2)
    {
      this.chart_config(data, {
        // Tell the plot to stack the bars.
        series: generate_labels(labels),
        stackSeries: true,
        captureRightClick: true,
        seriesDefaults:{
           renderer: $.jqplot.BarRenderer,
           rendererOptions: {
             barDirection: 'vertical',
            // Put a 30 pixel margin between bars.
            barWidth: 20,
            // Highlight bars when mouse button pressed.
            // Disables default highlighting on mouse over.
        highlightMouseDown: true   
          },
          pointLabels: {show: true}
        },
       axesDefaults: {
           tickRenderer: $.jqplot.CanvasAxisTickRenderer,
            tickOptions: {
             angle: -30
            }
        },

        axes: {
          xaxis: {
            renderer: $.jqplot.CategoryAxisRenderer,
            ticks: labels2
          },
          yaxis: {
            tickOptions: 
              {
                formatter: function(format, v) { if(v == 0) return ''; else return v; }
              }
          }
        },
        legend: {
          show: true,
          location: 'ne',
          placement: 'insideGrid'
        }     
      });
    }



}
)(jQuery)

