(function($){var options={series:{fillBetween:null}};function init(plot){function findBottomSeries(s,allseries){var i;for(i=0;i<allseries.length;++i){if(allseries[i].id===s.fillBetween){return allseries[i];}}
if(typeof s.fillBetween==="number"){if(s.fillBetween<0||s.fillBetween>=allseries.length){return null;}
return allseries[s.fillBetween];}
return null;}
function computeFillBottoms(plot,s,datapoints){if(s.fillBetween==null){return;}
var other=findBottomSeries(s,plot.getData());if(!other){return;}
var ps=datapoints.pointsize,points=datapoints.points,otherps=other.datapoints.pointsize,otherpoints=other.datapoints.points,newpoints=[],px,py,intery,qx,qy,bottom,withlines=s.lines.show,withbottom=ps>2&&datapoints.format[2].y,withsteps=withlines&&s.lines.steps,fromgap=true,i=0,j=0,l,m;while(true){if(i>=points.length){break;}
l=newpoints.length;if(points[i]==null){for(m=0;m<ps;++m){newpoints.push(points[i+m]);}
i+=ps;}else if(j>=otherpoints.length){if(!withlines){for(m=0;m<ps;++m){newpoints.push(points[i+m]);}}
i+=ps;}else if(otherpoints[j]==null){for(m=0;m<ps;++m){newpoints.push(null);}
fromgap=true;j+=otherps;}else{px=points[i];py=points[i+1];qx=otherpoints[j];qy=otherpoints[j+1];bottom=0;if(px===qx){for(m=0;m<ps;++m){newpoints.push(points[i+m]);}
bottom=qy;i+=ps;j+=otherps;}else if(px>qx){if(withlines&&i>0&&points[i-ps]!=null){intery=py+(points[i-ps+1]-py)*(qx-px)/(points[i-ps]-px);newpoints.push(qx);newpoints.push(intery);for(m=2;m<ps;++m){newpoints.push(points[i+m]);}
bottom=qy;}
j+=otherps;}else{if(fromgap&&withlines){i+=ps;continue;}
for(m=0;m<ps;++m){newpoints.push(points[i+m]);}
if(withlines&&j>0&&otherpoints[j-otherps]!=null){bottom=qy+(otherpoints[j-otherps+1]-qy)*(px-qx)/(otherpoints[j-otherps]-qx);}
i+=ps;}
fromgap=false;if(l!==newpoints.length&&withbottom){newpoints[l+2]=bottom;}}
if(withsteps&&l!==newpoints.length&&l>0&&newpoints[l]!==null&&newpoints[l]!==newpoints[l-ps]&&newpoints[l+1]!==newpoints[l-ps+1]){for(m=0;m<ps;++m){newpoints[l+ps+m]=newpoints[l+m];}
newpoints[l+1]=newpoints[l-ps+1];}}
datapoints.points=newpoints;}
plot.hooks.processDatapoints.push(computeFillBottoms);}
$.plot.plugins.push({init:init,options:options,name:"fillbetween",version:"1.0"});})(jQuery);