(function($) {
    function PlotBar(target_, options_) {
        var options = {
            // value of bar 
			percent: 80,
            fonts: null,
            // labels list of lists of [%,text,<shift>]
            // if shift present it change labeldelta default value
            labels: [],
            // name of label contener
            labelid: "labels",
            // shift for start of DIV label
            labeldelta: 0,
			backColor:     "#9e0d0d",
			foreColor:         "#33cc00",
			backgradientColor: "#33cc00",
            foregradientColor: "#c5f5b6",
            shadowColor:   "#777777",
            // shift for shadow 0 mean no shadow
            dx: 0,
            dy: 0
			},
//Vert haut  : #517834
//Vert bas : #a8c033
//Rouge haut : #9e0d0d
//Rouge bas : #f49494        
   	    canvas = null,
        canvasWidth = 0, canvasHeight = 0,
        target = target_,	    
	    ctx = null,ctext=null;

        this.draw=draw;
        this.setPercent=setPercent;
	    
        // initialize
        parseOptions(options_);
        constructCanvas();
        draw();
        addLabels(); 

        function parseOptions(o) {
            $.extend(true, options, o);
        }

        function setPercent(p) {
            options.percent=p;
        }	
        function addLabels() {
             var html=$('#'+options.labelid);    
             var w = target.width();
             var shift = options.labeldelta;
             for (var i = 0; i < options.labels.length; ++i) {
                 var label = options.labels[i];
                 try { 
                     if (label[2]){
                       shift = parseInt(label[2]);
                     }else{
                       shift = options.labeldelta;
                     }
                  }catch(e)
                  {shift = options.labeldelta;}
                 var postxt = (shift+w)*parseInt(label[0])/100
                 html.append('<div style="position:absolute;left:' + postxt + 'px;text-align:left" class="label">' + label[1] + "</div>");
                 // html.append('<div style="position:absolute;left:' + postxt + 'px;width:' +target.width()/10 +';text-align:left" class="label">' + label[1] + "</div>");
                 }
            }

        function constructCanvas() {
            canvasWidth = target.width();
            canvasHeight = target.height();
            // target.css("position", "relative"); // for positioning labels and overlay
            if (canvasWidth <= 0 || canvasHeight <= 0)
                throw "Invalid dimensions for plot, width = " + canvasWidth + ", height = " + canvasHeight;

            canvas=target.get(0);
            ctx = canvas.getContext("2d");
        }
	
	function drawGraph(startX,startY,maxX,maxY,color,gcolor,dx,dy,bg){;
        if(bg){
            ctx.shadowColor=bg;
            ctx.shadowOffsetX=dx;
            ctx.shadowOffsetX=dy;
	    }
        ctx.lineCap = "round";
        ctx.globalAlpha = 0.8;	
		ctx.strokeStyle = color;
        var lingrad = ctx.createLinearGradient(0, 0 , 0 , maxY);
        lingrad.addColorStop(0, color);
        lingrad.addColorStop(0.6, gcolor );
        lingrad.addColorStop(1, color);
		ctx.fillStyle = lingrad;		
		ctx.fillRect(startX, startY, maxX , maxY);

	}
	
	function drawLimits(startX,startY,maxX,maxY){
        var lon = maxX;
	    ctx.fillStyle = "#ffffff";
        inc=lon/10;
        cx=startX; 
        for (var i = 1; i < 10; i++) {
             var posx=cx+inc*i;
		     ctx.fillRect(posx-2, 0, 3, maxY);
            }	
	}	
// PAS DE FCT TEXT SUR CANVAS AVANT FF3.1
/*
    function drawText(startX,startY,maxX,maxY,textes){
             ctx.strokeText(10,10, 'A');
             for each (var x in textes) {
                   // ctx.strokeText(p0.x, p0.y, 'A');
             }
    }
*/	
        function draw() {
            var borderX = 0; 
            var borderY = 0; 
            var startX= 0;
            var startY= 0;
            var maxX=canvasWidth-borderX;
            var maxY=canvasHeight-borderY;
            drawGraph(startX,startY,maxX,maxY,options.backColor,options.backgradientColor,options.dx,options.dy,true);
            drawGraph(startX,startY,maxX*options.percent/100,maxY,options.foreColor,options.foregradientColor,options.dx,options.dy,false);
            drawLimits(startX,startY,maxX,maxY); 
            //drawText(startX,canvasHeight,maxX,canvasHeight,options.textes);
            }
   }
   
	
   $.plotBar = function(target, data, options) {
        var plotBar = new PlotBar(target, data, options);
        return plotBar;
   };	
      

})(jQuery);	