
(function($){$.jqplot.eventListenerHooks.push(['jqplotMouseMove',handleMove]);$.jqplot.Highlighter=function(options){this.show=$.jqplot.config.enablePlugins;this.markerRenderer=new $.jqplot.MarkerRenderer({shadow:false});this.showMarker=true;this.lineWidthAdjust=2.5;this.sizeAdjust=5;this.showTooltip=true;this.tooltipLocation='nw';this.fadeTooltip=true;this.tooltipFadeSpeed="fast";this.tooltipOffset=2;this.tooltipAxes='both';this.tooltipSeparator=', ';this.useAxesFormatters=true;this.tooltipFormatString='%.5P';this.formatString=null;this.yvalues=1;this._tooltipElem;this.isHighlighting=false;$.extend(true,this,options);};$.jqplot.Highlighter.init=function(target,data,opts){var options=opts||{};this.plugins.highlighter=new $.jqplot.Highlighter(options.highlighter);};$.jqplot.Highlighter.parseOptions=function(defaults,options){this.showHighlight=true;};$.jqplot.Highlighter.postPlotDraw=function(){this.plugins.highlighter.highlightCanvas=new $.jqplot.GenericCanvas();this.eventCanvas._elem.before(this.plugins.highlighter.highlightCanvas.createElement(this._gridPadding,'jqplot-highlight-canvas',this._plotDimensions));var hctx=this.plugins.highlighter.highlightCanvas.setContext();var p=this.plugins.highlighter;p._tooltipElem=$('<div class="jqplot-highlighter-tooltip" style="position:absolute;display:none"></div>');this.target.append(p._tooltipElem);};$.jqplot.preInitHooks.push($.jqplot.Highlighter.init);$.jqplot.preParseSeriesOptionsHooks.push($.jqplot.Highlighter.parseOptions);$.jqplot.postDrawHooks.push($.jqplot.Highlighter.postPlotDraw);function draw(plot,neighbor){var hl=plot.plugins.highlighter;var s=plot.series[neighbor.seriesIndex];var smr=s.markerRenderer;var mr=hl.markerRenderer;mr.style=smr.style;mr.lineWidth=smr.lineWidth+hl.lineWidthAdjust;mr.size=smr.size+hl.sizeAdjust;var rgba=$.jqplot.getColorComponents(smr.color);var newrgb=[rgba[0],rgba[1],rgba[2]];var alpha=(rgba[3]>=0.6)?rgba[3]*0.6:rgba[3]*(2-rgba[3]);mr.color='rgba('+newrgb[0]+','+newrgb[1]+','+newrgb[2]+','+alpha+')';mr.init();mr.draw(s.gridData[neighbor.pointIndex][0],s.gridData[neighbor.pointIndex][1],hl.highlightCanvas._ctx);}
function showTooltip(plot,series,neighbor){var hl=plot.plugins.highlighter;var elem=hl._tooltipElem;if(hl.useAxesFormatters){var xf=series._xaxis._ticks[0].formatter;var yf=series._yaxis._ticks[0].formatter;var xfstr=series._xaxis._ticks[0].formatString;var yfstr=series._yaxis._ticks[0].formatString;var str;var xstr=xf(xfstr,neighbor.data[0]);var ystrs=[];for(var i=1;i<hl.yvalues+1;i++){ystrs.push(yf(yfstr,neighbor.data[i]));}
if(hl.formatString){switch(hl.tooltipAxes){case'both':case'xy':ystrs.unshift(xstr);ystrs.unshift(hl.formatString);str=$.jqplot.sprintf.apply($.jqplot.sprintf,ystrs);break;case'yx':ystrs.push(xstr);ystrs.unshift(hl.formatString);str=$.jqplot.sprintf.apply($.jqplot.sprintf,ystrs);break;case'x':str=$.jqplot.sprintf.apply($.jqplot.sprintf,[hl.formatString,xstr]);break;case'y':ystrs.unshift(hl.formatString);str=$.jqplot.sprintf.apply($.jqplot.sprintf,ystrs);break;default:ystrs.unshift(xstr);ystrs.unshift(hl.formatString);str=$.jqplot.sprintf.apply($.jqplot.sprintf,ystrs);break;}}
else{switch(hl.tooltipAxes){case'both':case'xy':str=xstr;for(var i=0;i<ystrs.length;i++){str+=hl.tooltipSeparator+ystrs[i];}
break;case'yx':str='';for(var i=0;i<ystrs.length;i++){str+=ystrs[i]+hl.tooltipSeparator;}
str+=xstr;break;case'x':str=xstr;break;case'y':str='';for(var i=0;i<ystrs.length;i++){str+=ystrs[i]+hl.tooltipSeparator;}
break;default:str=xstr;for(var i=0;i<ystrs.length;i++){str+=hl.tooltipSeparator+ystrs[i];}
break;}}}
else{var str;if(hl.tooltipAxes=='both'||hl.tooltipAxes=='xy'){str=$.jqplot.sprintf(hl.tooltipFormatString,neighbor.data[0])+hl.tooltipSeparator+$.jqplot.sprintf(hl.tooltipFormatString,neighbor.data[1]);}
else if(hl.tooltipAxes=='yx'){str=$.jqplot.sprintf(hl.tooltipFormatString,neighbor.data[1])+hl.tooltipSeparator+$.jqplot.sprintf(hl.tooltipFormatString,neighbor.data[0]);}
else if(hl.tooltipAxes=='x'){str=$.jqplot.sprintf(hl.tooltipFormatString,neighbor.data[0]);}
else if(hl.tooltipAxes=='y'){str=$.jqplot.sprintf(hl.tooltipFormatString,neighbor.data[1]);}}
elem.html(str);var gridpos={x:neighbor.gridData[0],y:neighbor.gridData[1]};var ms=0;var fact=0.707;if(series.markerRenderer.show==true){ms=(series.markerRenderer.size+hl.sizeAdjust)/2;}
switch(hl.tooltipLocation){case'nw':var x=gridpos.x+plot._gridPadding.left-elem.outerWidth(true)-hl.tooltipOffset-fact*ms;var y=gridpos.y+plot._gridPadding.top-hl.tooltipOffset-elem.outerHeight(true)-fact*ms;break;case'n':var x=gridpos.x+plot._gridPadding.left-elem.outerWidth(true)/2;var y=gridpos.y+plot._gridPadding.top-hl.tooltipOffset-elem.outerHeight(true)-ms;break;case'ne':var x=gridpos.x+plot._gridPadding.left+hl.tooltipOffset+fact*ms;var y=gridpos.y+plot._gridPadding.top-hl.tooltipOffset-elem.outerHeight(true)-fact*ms;break;case'e':var x=gridpos.x+plot._gridPadding.left+hl.tooltipOffset+ms;var y=gridpos.y+plot._gridPadding.top-elem.outerHeight(true)/2;break;case'se':var x=gridpos.x+plot._gridPadding.left+hl.tooltipOffset+fact*ms;var y=gridpos.y+plot._gridPadding.top+hl.tooltipOffset+fact*ms;break;case's':var x=gridpos.x+plot._gridPadding.left-elem.outerWidth(true)/2;var y=gridpos.y+plot._gridPadding.top+hl.tooltipOffset+ms;break;case'sw':var x=gridpos.x+plot._gridPadding.left-elem.outerWidth(true)-hl.tooltipOffset-fact*ms;var y=gridpos.y+plot._gridPadding.top+hl.tooltipOffset+fact*ms;break;case'w':var x=gridpos.x+plot._gridPadding.left-elem.outerWidth(true)-hl.tooltipOffset-ms;var y=gridpos.y+plot._gridPadding.top-elem.outerHeight(true)/2;break;default:var x=gridpos.x+plot._gridPadding.left-elem.outerWidth(true)-hl.tooltipOffset-fact*ms;var y=gridpos.y+plot._gridPadding.top-hl.tooltipOffset-elem.outerHeight(true)-fact*ms;break;}
elem.css('left',x);elem.css('top',y);if(hl.fadeTooltip){elem.fadeIn(hl.tooltipFadeSpeed);}
else{elem.show();}}
function handleMove(ev,gridpos,datapos,neighbor,plot){var hl=plot.plugins.highlighter;if(hl.show){if(neighbor==null&&hl.isHighlighting){var ctx=hl.highlightCanvas._ctx;ctx.clearRect(0,0,ctx.canvas.width,ctx.canvas.height);if(hl.fadeTooltip){hl._tooltipElem.fadeOut(hl.tooltipFadeSpeed);}
else{hl._tooltipElem.hide();}
hl.isHighlighting=false;}
if(neighbor!=null&&plot.series[neighbor.seriesIndex].showHighlight&&!hl.isHighlighting){hl.isHighlighting=true;if(hl.showMarker){draw(plot,neighbor);}
if(hl.showTooltip){showTooltip(plot,plot.series[neighbor.seriesIndex],neighbor);}}}}})(jQuery);
